Тестирование весна 2013 лекция 5
-
Upload
technopark -
Category
Documents
-
view
184 -
download
6
Transcript of Тестирование весна 2013 лекция 5
Тестирование для
разработчиков Лекция 5. CI&CD
Взаимодействие с тестировщиками.
Развенская Ксения
План лекции
• Идеальный процесс разработки
• Взаимодействие с командой
тестирования
• Итоги курса
В предыдущих сериях
• Автоматизированные системные
(функциональные) тесты
• Юнит-тесты
• Интеграционные тесты
• Тесты производительности
Как теперь будет выглядеть
процесс разработки?
Введение
Разработка
на локальной машине
Локальная сборка
Локальный прогон
Юнит-тестов
Интеграция с общей веткой
Функциональное тестирование
Welcome to Integration Hell
Что такое
идеальный процесс?
Идеальный процесс
разработки
• Удобный
• Способствует повышению качества
• Снижает риски
• Ускоряет разработку
• Прозрачен для всей команды
• Максимально автоматизирован
• ?
Continuous Integration.
Непрерывная интеграция.
Непрерывная интеграция — это практика
разработки программного обеспечения, которая
заключается в выполнении частых
автоматизированных сборок проекта для
скорейшего выявления и решения
интеграционных проблем.
Википедия
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
Непрерывная интеграция.
Идея
• Как можно более частая интеграция кода
• Непрерывное тестирование изменений
Требования к проекту
• исходный код и все, что необходимо для
сборки и тестирования проекта, хранится в
репозитории системы контроля версий
• чекаут из репозитория, сборка и тестирование
проекта автоматизированы
CI процесс
Code-review (opt.)
Continuous Integration.
Преимущества использования
• Проблемы интеграции выявляются и
исправляются быстро, что оказывается
дешевле
• Немедленный прогон модульных тестов для
свежих изменений
• Постоянное наличие текущей стабильной
версии вместе с продуктами сборок — для
тестирования, демонстрации, и т. п.
CI процесс
Code-review (opt.)
Система контроля версий.
Version control system
Система контроля версий – инструмент, облегчающий работу
с изменяющимися данными. Предоставляет возможность
хранить несколько версий одного документа, при
необходимости вернуться к более ранней версии, определить
кто и когда внес то или иное изменение, etc.
Система контроля версий.
Преимущества использования
• Легкий доступ к коду
• Обеспечивает версионность
• Облегчает совместную разработку
• Возможность автоматизировать процессы сборки,
ревью, запуска тестов
Система контроля версий.
Антипаттерны
1. Редкие коммиты -> рискуем потерять часть
изменений, реже интегрируемся
Решение: Частые коммиты в течение дня
2. Массовые коммиты перед уходом с работы
-> рискуем задержать коллег из-за
сломанной сборки
Решение: Не коммитить после N часов
Система контроля версий.
Инструменты
• Git
• Subversion
• CVS
• ClearCase
• ...
http://en.wikipedia.org/wiki/Comparison_of_revisio
n_control_software
CI процесс
Code-review (opt.)
Код-ревью.
Code-review
Код-ревью – систематический просмотр кода с целью
найти и исправить ошибки, допущенные на начальном
этапе разработки.
Цель - повышение качества кода и обмен опытом
между разработчиками.
Виды
• Pre-commit review (email/over-the-shoulder)
• Post factum
• Выборочное ревью
Код-ревью.
Плюсы и минусы
Плюсы:
• Способствует обнаружению ошибок
• Возможность получить фидбек о стиле программирования и
выборе алгоритмов
• Обмен опытом
• Развивает командность
• Единообразность кода
Минусы:
• Требует инвестиций на начальном этапе
Код-ревью.
Типы ошибок
• Ошибки обращения к данным
• Ошибки логических и арифметических
операций
• Использование сложных конструкций
• Ошибки в логике программы
• Стилевые ошибки
• Опечатки
Ошибки обращения
К данным
• Проблемы адресации
• Индексы массивов
• Объявление переменных
• Размер и тип
• Именование переменных
• …
Ошибки вычислений
• Переполнения
• Потеря точности
• Деление на ноль
• Ошибки в операторах сравнения
• …
Стилевые ошибки
• Именование переменных
• Форматирование
• Документирование кода
• …
А также..
• Бесконечные циклы
• Race conditions
• Утечки памяти
• …
Код-ревью.
Основные принципы
Хорошо
• Быстро
• Конструктивно
• Объективно
• Позитивно
Плохо
• Навязывание личных предпочтений
• Переход на личности
Код-ревью.
Антипаттерны
Код-ревью тормозит процесс разработки ->
негативное отношение к процессу ревью
Решение: Проводить параллельно с
тестированием, у задач на код-ревью – 1
приоритет
Код-ревью.
Инструменты
• VCS plug-ins
http://en.wikipedia.org/wiki/List_of_tools_for_code_review
CI процесс
Code-review (opt.)
Автоматическая сборка
• Компиляция
• Сборка
• Выполнение модульных тестов
• Формирование документации и release notes
Автосборка.
Антипаттерны
Редкие сборки -> поздно обнаруживаем баги
Решение: В идеале - сборка после каждого коммита
Допускается сборка по расписанию несколько раз в день, если
сборка+прогон модульных тестов занимает много времени
NB! Возможно, это проблема и с ней надо разобраться отдельно
Автосборка.
Антипаттерны
Сборка на машине разработчика -> проблема WOMM
Решение: Сборка должна производиться в целевой среде
Автосборка.
Инструменты
• Maven
• Ant
• Make
• Gant
• MSBuild
• …
http://en.wikipedia.org/wiki/List_of_build_automation_softw
are
CI процесс
Code-review (opt.)
Непрерывное тестирование
• Выполнение модульных тестов при сборке
• Прогон функциональных/нагрузочных/etc автотестов
для каждой сборки
CI процесс
Code-review (opt.)
Непрерывная обратная связь.
Continuous Feedback
Необходима автоматическая отправка информации о
состоянии сборки разработчикам.
Средства: Email, SMS, дашборды, нотификация в
мессенджер
Обратная связь.
Антипаттерны
Слишком много сообщений о проваленной сборке ->
Письма заносятся в спам-фильтр.
Решение: Сообщения должны быть адресными – тому, кто сломал
сборку.
Обратная связь
Антипаттерны
Неинформативные отчеты -> уходит много времени на понимание
проблемы
Решение: В сообщении должна содержаться необходимая и
достаточная информация о проваленной сборке/тестах
Антипаттерны
использования CI.
Сборка всегда находится в сломанном
состоянии, тесты не чинят.
Решение: «Зеленая» сборка - приоритет №1, pre-commit
hook, мотивация
Требования к CI серверу
• Проверка наличия изменений в репозитории
• Выполнение некоторых действий по триггеру
(наличие изменений, расписание)
• Поддержка нескольких инструментов сборки
• Поддержка нескольких VCS
• Предоставление отчетов, статистики,
отправка нотификаций
• Сохранение истории
• Панель управления задачами
Инструменты CI
• Jenkins (Hudson)
• CruiseControl
• TeamCity
• Bamboo
• …
Что дальше?
Непрерывная доставка.
Continuous Delivery
Непрерывная доставка изменений в среду, где будет тестироваться
бизнес-логика.
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
Непрерывное развертывание.
Continuous Deployment
Непрерывное развертывание – выпуск в продакшн-среду
изменений сразу, как только они готовы к выкладке.
Непрерывное развертывание.
Tips&Tricks.
• Автоматизированная выкладка одной командой
• Только полностью готовые к выкладке фичи в production-ветке
• DevOps
• Чистота среды
• Маркировка каждой сборки
• Прогон всех проверок
• Использование обратной связи
• Возможность быстро откатить изменения
Взаимодействие с
командой тестирования
Основная идея – у нас общая
цель!
Мифы о тестировании
• Тестирование увеличивает время до выкладки в
продакшн
• Тестировщики любят находить много багов
• Тестировщики обеспечивают качество
• Тестировщики отвечают за качество продукта
• Тестирование должно быть полностью
автоматизировано
Эффективное
взаимодействие
• Тестировщики должны иметь возможность
протестировать приложение
• Процесс разработки должен быть прозрачен для
тестировщика (и наоборот)
• Работа с кодом
• Работа с требованиями
• Работа с багами
Тестопригодность.
Testability
Тестопригодность – степень легкости и удобства тестирования, а также
возможность проведения тестирования с использованием определенного
инструмента или подхода.
Тестопригодность.
Testability
Характеристики тестопригодного ПО:
• управляемость: возможность перейти в любое состояние
системы, подавая на вход разные стимулы
• наблюдаемость: в каждый момент времени понимаем в каком
состоянии находится система
• изолируемость: тестируемый компонент может быть проверен в
изоляции
• разделение задач: тестируемый компонент имеет одно, вполне
определенное назначение
• понятность
• автоматизируемость: возможность автоматизировать
тестирование
Управление требованиями и
процесс разработки
Тестировщику необходим список изменений ->
Все изменения должны быть отражены в ТЗ/Таск-
трекере.
Работа с багами
• Старайтесь относиться позитивно
• Учитесь на ошибках
• Все баги – через баг/таск-трекер
• Не накапливайте технический долг
Баги в продакшне
Баги в продакшне:
причины
• Ошибка тестировщика
• Невозможность протестировать все
• Баг воспроизводится нестабильно (гейзенбаг)
• Несоответствие тестовой среды продакшн-среде
• Ошибка при выкладке
Баги в продакшне:
действия
• Фикс
NB! Фикс должен быть протестирован перед выкладкой
• Анализ причин
• Меры по предотвращению багов в будущем
Резюме
• Процесс важен для достижения результата
• Процесс должен существовать не ради процесса
• Процесс должен быть удобен всем и способствовать
эффективной работе команды
Материалы
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/
Зачет