25
Обзор статей на тему Continious Integration – Automated Testing – Agile Подготовил – Юсупов Кайрат

Continious integration-Automated Testing-Solid-Agile

Embed Size (px)

DESCRIPTION

Презентация на комплексную тему Continious integration-Automated Testing-Agile, показывается связи между этими темам, обоснование автоматического тестирования , и вложения ресурсов для развертывания автоматического тестирования и непрерываной интеграциия. Все темы тесно связаны между собой , хотя бы появились независимос друг от друга.

Citation preview

Page 1: Continious integration-Automated Testing-Solid-Agile

Обзор статей на тему Continious Integration –

Automated Testing – Agile

Подготовил – Юсупов Кайрат

Page 2: Continious integration-Automated Testing-Solid-Agile

Процесс разработки в Mail.Ru Group

"По мере выпуска следующих версий

программы и добавления нового функционала

нам нужно будет проверять с каждым разом

все больше и больше функций. То есть, грубо

говоря, трудозатраты будут линейно

возрастать с ростом количества функций. И

в какой-то момент руководитель окажется

перед выбором: либо начать частично

пропускать проверки старого функционала

(регрессионное тестирование), либо

постоянно увеличивать штат.“

Тех. Дир. Mail.Ru Group

Прим. * Синим цветом обозначены трудозатраты на ручное тестирование регрессионных багов.

Page 3: Continious integration-Automated Testing-Solid-Agile

• Важно отметить, что только (ручная отладка) тестирование новых функций будет интересной задачей, а повторное тестирование старых функций (регрессионное тестирование) является монотонной однообразной работой, повторением уже не раз проделанных операций. Поэтому даже при постоянном расширении штата сотрудники будут демотивированы, что негативно скажется на внимательности и ответственности, а в итоге приведет к пропущенным ошибкам.

Page 4: Continious integration-Automated Testing-Solid-Agile

• Автоматизация тестирования необходима не только потому, что важно экономить ресурсы и избавляться от скучной и однообразной работы.

• Тех. дир. Mail.Ru Group

Автоматическое тестирование позволяет снизить затраты на ручную отладку и тестирование, Избавиться от ручного регрессионого тестирования, снизить трудозатраты тестирования до минимума.Как видно из графика трудозатраты на написание тестов не растут линейно, остаются на одном уровне

Из приведенного графика следует, что трудозатраты на ручное регрессионное тестирование со временем становится в разы больше трудозатрат, чем написание кода.

Page 5: Continious integration-Automated Testing-Solid-Agile

В каких компаниях существует автоматическое тестирование?

• Google, Mail.ru , Yandex, Microsoft

• CodeBorne

• IBM

• BAS , NAT (Казахстанские компании )

Большинство стабильных опенсорс проектов покрываются тестами:

• Hadoop

• Apache Tomcat

• VivagraphJS

• Twitter Storm

Page 6: Continious integration-Automated Testing-Solid-Agile

public class HasNegationTest {

// Тест кейс 1

@Test

public void test_hasNegation_true() {

DicSentimentHighlighter sentimentHighlighter = new DicSentimentHighlighter( … );

boolean result = sentimentHighlighter.hasNegation(new String[]{" не "," хороший "} , " хороший ");

Assert.assertTrue(result);

}

// Тест кейс 2

@Test

public void test_hasNegation_false() {

DicSentimentHighlighter sentimentHighlighter = new DicSentimentHighlighter( … );

boolean result = sentimentHighlighter.hasNegation(new String[]{"хороший","хороший"} , "хороший");

Assert.assertFalse(result);

}

}

Пример модульного теста , написанного с помощью фреймворка Junit 4.1

Page 7: Continious integration-Automated Testing-Solid-Agile

Запускаем тесты ( кнопка Alt-F6 ), получаем отчеты по пройденным тестам

Page 8: Continious integration-Automated Testing-Solid-Agile

В случае с внешней зависимостью

Stub / Mock Object

Class Under Test

Connection to Database

Class Under Test

Зависимость заменяется с помощью Stub / Mock Object

Page 9: Continious integration-Automated Testing-Solid-Agile

Тестирование GUI с помощью фреймворка Selenide

@Testpublic void test() {

open(contextPath + "/ru/regnpv2/register");open(contextPath + "/ru/regnpv2/foreignPerson");

$(By.name("regNpVisitorList[0].lastname")).setValue("TESTACCEPT");$(By.name("regNpVisitorList[0].firstname")).setValue("TESTACCEPT");

$(By.id("next")).click();

Assert.assertTrue($(By.id("registration_start")).getText().length() > 6 );Assert.assertTrue($(By.id("registration_end")).getText().length() > 6 );

}}

В целом синтаксис кода похож на Jquery

Page 10: Continious integration-Automated Testing-Solid-Agile

Скрипт запускает браузер, эмулирует работу человека, вводит предопределенные данные в браузере, и контролирует работу GUI

Исключается участие человека для проверки работоспособности приложения. Тем самым снижаются трудозатраты.

Page 11: Continious integration-Automated Testing-Solid-Agile

Необходимые условия для покрытия кода тестами• Наличие фреймворка Junit, TestNG для Java, Jasmine, Qunit для JS

• Регулярная прогонка тестов на билд-сервере (каждый день, каждый коммит)

• Не каждый код может быть покрыт тестами

• Слабосвязанная архитектура

• Код написанный в соответствии с принципами SOLID

Page 12: Continious integration-Automated Testing-Solid-Agile

Принципы SOLID

• S – single responsibility

• O – open/closed principle

• L – Liskov substitution principle

• I – Interface segregation principle

• D – dependency injection

Page 13: Continious integration-Automated Testing-Solid-Agile

Какой код выгодно тестировать?•На этой намеренно упрощённой диаграмме показано 4 типа кода:

Сложный код с небольшим количеством зависимостей (участок слева вверху). (выгодно)

•Простой код с кучей зависимостей (участок справа внизу). ( не очень выгодно , но иногда выгодно)

•Сложный код с большим количеством зависимостей (участок справа вверху). Писать тесты для такого кода достаточно дорого, а не писать слишком рискованно. Как правило, выходом может стать его разделение на две части: кусок, вобравший в себя сложную логику (алгоритм), и кусок, сосредоточивший в себе внешние зависимости (координатор). (выгодно, но требует рефакторинга)

•Обычный заурядный код, имеющий немного зависимостей (участок слева внизу).

Page 14: Continious integration-Automated Testing-Solid-Agile

Continuous Integration. Как оно выглядит «сейчас»

• Роль билд – сервера на данный момент выполняет - Дулат

• Вручную делаются билды, выкладываются на тестовый и боевой серверы, вручную ищутся проблемы интеграции -это постоянная однообразная работа занимает время, утомляет, и отвлекает от более важных приоритетных задач.

Page 15: Continious integration-Automated Testing-Solid-Agile

Проблемы, с которыми сталкнулись во время разработки ВМП

• Развертывание функциональности без должного тестирования (практические всегда в функциональности были скрытые баги)

• Отрицательные отзывы от клиентов

• Фактически в активное тестирование были вовлечены клиенты(что не есть хорошо)

• Бывали случаи, когда все изменения от разных разработчиков невозможно было забилдить в течение нескольких часов перед презентацией

• Отрицательное влияние на репутацию компании и программистов

• Потерянное время , ресурсы, неоправданный стресс

Page 16: Continious integration-Automated Testing-Solid-Agile

Проблемы при доработке Беркут

• Документации нет

• Никто не знает , как работает код для миграции данных

• Автотестов нет ( вносить изменения необходимо очень осторожно)

• Долго кропотливо и разбираться, что делает каждая строчка кода

• Нет гарантии безопасности изменения кода

• Стоить отметить, что тесты могут использоваться как документация , т.к. тесты описывают спецификацию классов , функций и т.п.

Page 17: Continious integration-Automated Testing-Solid-Agile

Continious Integration. Как «должно быть»Continuous Integration (далее CI) — это практика разработки программного обеспечения, в которой члены команды проводят интеграцию не реже чем раз в день. Результаты интеграции проверяются автоматически, используя автотесты и статический анализ кода.

Page 18: Continious integration-Automated Testing-Solid-Agile

Преимущества CI

• Использование CI позволяет вовремя отслеживать ошибки интеграции

• Сделать систему и процесс разработки более «прозрачными» для всех участников команды

• CI избавляет от рутинных операция по сборке продукта, запуску тестов, повышает качество продукта, включает в себя профит от написания тестов.

• Автоматическое оповещение участников команды о наличии проблемы (бага, ошибки, не развертывается проект) в проекте

Page 19: Continious integration-Automated Testing-Solid-Agile

Необходимые условия для развертывания CI

• Регулярное автоматическое выполнение билдов проекта

• Достаточно высокое покрытие проекта тестами

• Обратная связь билд-сервера с разработчиками проекта (разработчик должен оповещаться о наличии проблемы, и именно тот разработчик внесший изменение , повлиявшее на билд)

• Существуют следующие популярные механизмы осуществления обратной связи:

• SMS

• browser plug-in

• светофор сборок

• звуковое оповещение

• email

Page 20: Continious integration-Automated Testing-Solid-Agile

Примеры отчетности

Горизонтальная ось - билды

Вертикальная ось – тест кейсы

Синим цветом отмечены пройденные тесты.

Красным цветом отмечены непройденные тесты(ошибки).

Page 21: Continious integration-Automated Testing-Solid-Agile
Page 22: Continious integration-Automated Testing-Solid-Agile

Примеры отчетности – процесс сборки

Page 23: Continious integration-Automated Testing-Solid-Agile

Как Google тестируется ПО“идея заключается не в создании тестов как таковых, а в ускорении разработки.”

В Google существуют три роли тестеров:

SWE - основные разработчики, которые работают над функционалом. На них лежит разборка кода (code review), TDD, Unit тестирование и приемочные испытания. Они так же ответственны за качество каждого участка кода. Это важно. Тестеры не отвечают за качество. SWE не может написать немного кода, а потом сказать тестеру, попробуй улучшить этот код. Это его собственная работа.

SET — занимаются разработкой среды для тестирования. Они не пишут непосредственно тест кейсы. Они создают инфраструктуру для их создания. Они выпускают фрэймворки, пишут утилиты автоматизирующие рутину проверок. Они создают автоматизированные процедуры.

Процесс разработки Google plus занял 100 дней.

Каждый день собирается новый релиз Google Chrome.

Page 24: Continious integration-Automated Testing-Solid-Agile

You Can't be Agile Without Automated Unit Testing• Тезис вытекающий из предыдущих пунктов:

• Невозможно внедрить Agile/Scrum методологию без уделения внимания современными инженерным практикам( код ревью , автоматическое тестирование, непрерывная интеграция).

• Agile projects assume that test planning, test creation, and test execution take place throughout a project's lifecycle. So the need for unit testing (and especially automated unit testing) can't be ignored and should be considered as a key responsibility of the entire team—not just the software developers

Developers have known for decades that the further into a project timeline a bug gets discovered from its insertion point, the more costly it is to fix. When a developer finds a bug, it can sometimes take minutes to fix. If it slips through testing and finds its way to the customer, figure 1 shows that mitigation can be exponentially more expensive to fix.

Agile methodologies take working software and combine it with early feedback. To give the developers confidence that their code works, unit testing gives the fastest available quality feedback.

The earlier defects are found, the cheaper they are to fix.

Page 25: Continious integration-Automated Testing-Solid-Agile

Ссылки

• 1. Тестирование в Mail.ru Group:

• http://habrahabr.ru/company/mailru/blog/165877/

• 2. Как перестать беспокоиться и начать работать:

• http://habrahabr.ru/company/skbkontur/blog/128427/

• 3. Continuous Integration. Путь обеспечения надежности и доверия к системе

• http://habrahabr.ru/post/219891/

• 4. Как Google тестирует ПО

• http://habrahabr.ru/post/135776/

• 5. Компания Agitar зарабатывает тем что разрабатывает автоматическое тестирование для заказчиков

• http://www.agitar.com/solutions/why_unit_testing.html

• 6. You Can't be Agile Without Automated Unit Testing

• http://www.stickyminds.com/better-software-magazine-article/you-cant-be-agile-without-automated-unit-testing

• 7 Полное регрессионное тестирование за 4 часа

• http://scrumtrek.ru/stories/view/13