Тестирование весна 2013 лекция 5

64
Тестирование для разработчиков Лекция 5. CI&CD Взаимодействие с тестировщиками. Развенская Ксения

Transcript of Тестирование весна 2013 лекция 5

Page 1: Тестирование весна 2013 лекция 5

Тестирование для

разработчиков Лекция 5. CI&CD

Взаимодействие с тестировщиками.

Развенская Ксения

Page 2: Тестирование весна 2013 лекция 5

План лекции

• Идеальный процесс разработки

• Взаимодействие с командой

тестирования

• Итоги курса

Page 3: Тестирование весна 2013 лекция 5

В предыдущих сериях

• Автоматизированные системные

(функциональные) тесты

• Юнит-тесты

• Интеграционные тесты

• Тесты производительности

Page 4: Тестирование весна 2013 лекция 5

Как теперь будет выглядеть

процесс разработки?

Page 5: Тестирование весна 2013 лекция 5

Введение

Разработка

на локальной машине

Локальная сборка

Локальный прогон

Юнит-тестов

Интеграция с общей веткой

Функциональное тестирование

Page 6: Тестирование весна 2013 лекция 5

Welcome to Integration Hell

Page 7: Тестирование весна 2013 лекция 5

Что такое

идеальный процесс?

Page 8: Тестирование весна 2013 лекция 5

Идеальный процесс

разработки

• Удобный

• Способствует повышению качества

• Снижает риски

• Ускоряет разработку

• Прозрачен для всей команды

• Максимально автоматизирован

• ?

Page 9: Тестирование весна 2013 лекция 5

Continuous Integration.

Непрерывная интеграция.

Непрерывная интеграция — это практика

разработки программного обеспечения, которая

заключается в выполнении частых

автоматизированных сборок проекта для

скорейшего выявления и решения

интеграционных проблем.

Википедия

Page 10: Тестирование весна 2013 лекция 5

Continuous Integration.

Непрерывная интеграция.

"Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible."

M. Fowler

Page 11: Тестирование весна 2013 лекция 5

Непрерывная интеграция.

Идея

• Как можно более частая интеграция кода

• Непрерывное тестирование изменений

Page 12: Тестирование весна 2013 лекция 5

Требования к проекту

• исходный код и все, что необходимо для

сборки и тестирования проекта, хранится в

репозитории системы контроля версий

• чекаут из репозитория, сборка и тестирование

проекта автоматизированы

Page 13: Тестирование весна 2013 лекция 5

CI процесс

Code-review (opt.)

Page 14: Тестирование весна 2013 лекция 5

Continuous Integration.

Преимущества использования

• Проблемы интеграции выявляются и

исправляются быстро, что оказывается

дешевле

• Немедленный прогон модульных тестов для

свежих изменений

• Постоянное наличие текущей стабильной

версии вместе с продуктами сборок — для

тестирования, демонстрации, и т. п.

Page 15: Тестирование весна 2013 лекция 5

CI процесс

Code-review (opt.)

Page 16: Тестирование весна 2013 лекция 5

Система контроля версий.

Version control system

Система контроля версий – инструмент, облегчающий работу

с изменяющимися данными. Предоставляет возможность

хранить несколько версий одного документа, при

необходимости вернуться к более ранней версии, определить

кто и когда внес то или иное изменение, etc.

Page 17: Тестирование весна 2013 лекция 5

Система контроля версий.

Преимущества использования

• Легкий доступ к коду

• Обеспечивает версионность

• Облегчает совместную разработку

• Возможность автоматизировать процессы сборки,

ревью, запуска тестов

Page 18: Тестирование весна 2013 лекция 5

Система контроля версий.

Антипаттерны

1. Редкие коммиты -> рискуем потерять часть

изменений, реже интегрируемся

Решение: Частые коммиты в течение дня

2. Массовые коммиты перед уходом с работы

-> рискуем задержать коллег из-за

сломанной сборки

Решение: Не коммитить после N часов

Page 19: Тестирование весна 2013 лекция 5

Система контроля версий.

Инструменты

• Git

• Subversion

• CVS

• ClearCase

• ...

http://en.wikipedia.org/wiki/Comparison_of_revisio

n_control_software

Page 20: Тестирование весна 2013 лекция 5

CI процесс

Code-review (opt.)

Page 21: Тестирование весна 2013 лекция 5

Код-ревью.

Code-review

Код-ревью – систематический просмотр кода с целью

найти и исправить ошибки, допущенные на начальном

этапе разработки.

Цель - повышение качества кода и обмен опытом

между разработчиками.

Виды

• Pre-commit review (email/over-the-shoulder)

• Post factum

• Выборочное ревью

Page 22: Тестирование весна 2013 лекция 5

Код-ревью.

Плюсы и минусы

Плюсы:

• Способствует обнаружению ошибок

• Возможность получить фидбек о стиле программирования и

выборе алгоритмов

• Обмен опытом

• Развивает командность

• Единообразность кода

Минусы:

• Требует инвестиций на начальном этапе

Page 23: Тестирование весна 2013 лекция 5

Код-ревью.

Типы ошибок

• Ошибки обращения к данным

• Ошибки логических и арифметических

операций

• Использование сложных конструкций

• Ошибки в логике программы

• Стилевые ошибки

• Опечатки

Page 24: Тестирование весна 2013 лекция 5

Ошибки обращения

К данным

• Проблемы адресации

• Индексы массивов

• Объявление переменных

• Размер и тип

• Именование переменных

• …

Page 25: Тестирование весна 2013 лекция 5

Ошибки вычислений

• Переполнения

• Потеря точности

• Деление на ноль

• Ошибки в операторах сравнения

• …

Page 26: Тестирование весна 2013 лекция 5

Стилевые ошибки

• Именование переменных

• Форматирование

• Документирование кода

• …

Page 27: Тестирование весна 2013 лекция 5

А также..

• Бесконечные циклы

• Race conditions

• Утечки памяти

• …

Page 28: Тестирование весна 2013 лекция 5

Код-ревью.

Основные принципы

Хорошо

• Быстро

• Конструктивно

• Объективно

• Позитивно

Плохо

• Навязывание личных предпочтений

• Переход на личности

Page 29: Тестирование весна 2013 лекция 5

Код-ревью.

Антипаттерны

Код-ревью тормозит процесс разработки ->

негативное отношение к процессу ревью

Решение: Проводить параллельно с

тестированием, у задач на код-ревью – 1

приоритет

Page 30: Тестирование весна 2013 лекция 5

Код-ревью.

Инструменты

• VCS plug-ins

• E-mail

http://en.wikipedia.org/wiki/List_of_tools_for_code_review

Page 31: Тестирование весна 2013 лекция 5

CI процесс

Code-review (opt.)

Page 32: Тестирование весна 2013 лекция 5

Автоматическая сборка

• Компиляция

• Сборка

• Выполнение модульных тестов

• Формирование документации и release notes

Page 33: Тестирование весна 2013 лекция 5

Автосборка.

Антипаттерны

Редкие сборки -> поздно обнаруживаем баги

Решение: В идеале - сборка после каждого коммита

Допускается сборка по расписанию несколько раз в день, если

сборка+прогон модульных тестов занимает много времени

NB! Возможно, это проблема и с ней надо разобраться отдельно

Page 34: Тестирование весна 2013 лекция 5

Автосборка.

Антипаттерны

Сборка на машине разработчика -> проблема WOMM

Решение: Сборка должна производиться в целевой среде

Page 35: Тестирование весна 2013 лекция 5

Автосборка.

Инструменты

• Maven

• Ant

• Make

• Gant

• MSBuild

• …

http://en.wikipedia.org/wiki/List_of_build_automation_softw

are

Page 36: Тестирование весна 2013 лекция 5

CI процесс

Code-review (opt.)

Page 37: Тестирование весна 2013 лекция 5

Непрерывное тестирование

• Выполнение модульных тестов при сборке

• Прогон функциональных/нагрузочных/etc автотестов

для каждой сборки

Page 38: Тестирование весна 2013 лекция 5

CI процесс

Code-review (opt.)

Page 39: Тестирование весна 2013 лекция 5

Непрерывная обратная связь.

Continuous Feedback

Необходима автоматическая отправка информации о

состоянии сборки разработчикам.

Средства: Email, SMS, дашборды, нотификация в

мессенджер

Page 40: Тестирование весна 2013 лекция 5

Обратная связь.

Антипаттерны

Слишком много сообщений о проваленной сборке ->

Письма заносятся в спам-фильтр.

Решение: Сообщения должны быть адресными – тому, кто сломал

сборку.

Page 41: Тестирование весна 2013 лекция 5

Обратная связь

Антипаттерны

Неинформативные отчеты -> уходит много времени на понимание

проблемы

Решение: В сообщении должна содержаться необходимая и

достаточная информация о проваленной сборке/тестах

Page 42: Тестирование весна 2013 лекция 5

Антипаттерны

использования CI.

Сборка всегда находится в сломанном

состоянии, тесты не чинят.

Решение: «Зеленая» сборка - приоритет №1, pre-commit

hook, мотивация

Page 43: Тестирование весна 2013 лекция 5

Требования к CI серверу

• Проверка наличия изменений в репозитории

• Выполнение некоторых действий по триггеру

(наличие изменений, расписание)

• Поддержка нескольких инструментов сборки

• Поддержка нескольких VCS

• Предоставление отчетов, статистики,

отправка нотификаций

• Сохранение истории

• Панель управления задачами

Page 44: Тестирование весна 2013 лекция 5

Инструменты CI

• Jenkins (Hudson)

• CruiseControl

• TeamCity

• Bamboo

• …

Page 45: Тестирование весна 2013 лекция 5

Что дальше?

Page 46: Тестирование весна 2013 лекция 5

Непрерывная доставка.

Continuous Delivery

Непрерывная доставка изменений в среду, где будет тестироваться

бизнес-логика.

Page 47: Тестирование весна 2013 лекция 5

Continuous Delivery&

Continuous Deployment

“Continuous Delivery is about keeping your application in a state where it is always able to deploy into production.

Continuous Deployment is actually deploying every change into production, every day or more frequently.”

M. Fowler

Page 48: Тестирование весна 2013 лекция 5

Непрерывное развертывание.

Continuous Deployment

Непрерывное развертывание – выпуск в продакшн-среду

изменений сразу, как только они готовы к выкладке.

Page 49: Тестирование весна 2013 лекция 5

Непрерывное развертывание.

Tips&Tricks.

• Автоматизированная выкладка одной командой

• Только полностью готовые к выкладке фичи в production-ветке

• DevOps

• Чистота среды

• Маркировка каждой сборки

• Прогон всех проверок

• Использование обратной связи

• Возможность быстро откатить изменения

Page 50: Тестирование весна 2013 лекция 5

Взаимодействие с

командой тестирования

Page 51: Тестирование весна 2013 лекция 5

Основная идея – у нас общая

цель!

Page 52: Тестирование весна 2013 лекция 5

Мифы о тестировании

• Тестирование увеличивает время до выкладки в

продакшн

• Тестировщики любят находить много багов

• Тестировщики обеспечивают качество

• Тестировщики отвечают за качество продукта

• Тестирование должно быть полностью

автоматизировано

Page 53: Тестирование весна 2013 лекция 5

Эффективное

взаимодействие

• Тестировщики должны иметь возможность

протестировать приложение

• Процесс разработки должен быть прозрачен для

тестировщика (и наоборот)

• Работа с кодом

• Работа с требованиями

• Работа с багами

Page 54: Тестирование весна 2013 лекция 5

Тестопригодность.

Testability

Тестопригодность – степень легкости и удобства тестирования, а также

возможность проведения тестирования с использованием определенного

инструмента или подхода.

Page 55: Тестирование весна 2013 лекция 5

Тестопригодность.

Testability

Характеристики тестопригодного ПО:

• управляемость: возможность перейти в любое состояние

системы, подавая на вход разные стимулы

• наблюдаемость: в каждый момент времени понимаем в каком

состоянии находится система

• изолируемость: тестируемый компонент может быть проверен в

изоляции

• разделение задач: тестируемый компонент имеет одно, вполне

определенное назначение

• понятность

• автоматизируемость: возможность автоматизировать

тестирование

Page 56: Тестирование весна 2013 лекция 5

Управление требованиями и

процесс разработки

Тестировщику необходим список изменений ->

Все изменения должны быть отражены в ТЗ/Таск-

трекере.

Page 57: Тестирование весна 2013 лекция 5

Работа с багами

• Старайтесь относиться позитивно

• Учитесь на ошибках

• Все баги – через баг/таск-трекер

• Не накапливайте технический долг

Page 58: Тестирование весна 2013 лекция 5

Баги в продакшне

Page 59: Тестирование весна 2013 лекция 5

Баги в продакшне:

причины

• Ошибка тестировщика

• Невозможность протестировать все

• Баг воспроизводится нестабильно (гейзенбаг)

• Несоответствие тестовой среды продакшн-среде

• Ошибка при выкладке

Page 60: Тестирование весна 2013 лекция 5

Баги в продакшне:

действия

• Фикс

NB! Фикс должен быть протестирован перед выкладкой

• Анализ причин

• Меры по предотвращению багов в будущем

Page 61: Тестирование весна 2013 лекция 5

Резюме

• Процесс важен для достижения результата

• Процесс должен существовать не ради процесса

• Процесс должен быть удобен всем и способствовать

эффективной работе команды

Page 62: Тестирование весна 2013 лекция 5

Материалы

1. http://martinfowler.com/articles/continuousIntegration.html

2. http://www.thoughtworks.com/continuous-delivery

3. Непрерывное развертывание ПО, Джез Хамбл, Дейвид Фарли

4. http://refcardz.dzone.com/refcardz/continuous-integration#refcard-download-

social-buttons-display

5. http://martinfowler.com/bliki/FeatureBranch.html

6. http://martinfowler.com/bliki/FeatureToggle.html

7. http://itrevolution.com/devops-culture-part-1/

Page 63: Тестирование весна 2013 лекция 5

Зачет

Page 64: Тестирование весна 2013 лекция 5

Спасибо за внимание

Развенская Ксения, [email protected]