РИФ 2016, Внедрение контроля качества в большом...
TRANSCRIPT
Внедрение контроля качества в большом web-проекте
на примере Badoo
Badoo - сайт знакомств с новыми людьми, крупнейшая интернет-компания Западной Европы.
• 300 000 000+ пользователей
• 190 стран
• 46 языков
Badoo в наши дни
С технической точки зрения это
• 150+ разработчиков и 50+ QA инженеров
• 3 000 000+ строк кода
• 60000+ юнит-тестам
• 600+ selenium-тестам
• 2 ежедневных релиза
Badoo в наши дни
Как это было?
Feature1Feature2
Feature3Bugfix1
Bugfix2
Разработка
trunk
commits
release releasesvn
Переводы, тестирование и выкладка
svn
Staging
QA + Translation Production
Deploy
Как это было?
Devel
Преимущества
Как это было?
Преимущества
• Скорость обсуждения задачи
Как это было?
Преимущества
• Скорость обсуждения задачи
• Скорость разработки
Как это было?
Преимущества
• Скорость обсуждения задачи
• Скорость разработки
• Проверенные инструменты
Как это было?
Преимущества
• Скорость обсуждения задачи
• Скорость разработки
• Проверенные инструменты
• Тесное общение
Как это было?
Недостатки
Как это было?
Недостатки
• Незавершенные задачи в выкладке
Как это было?
Недостатки
• Незавершенные задачи в выкладке
• Тяжело отслеживать состояние кода
Как это было?
Недостатки
• Незавершенные задачи в выкладке
• Тяжело отслеживать состояние кода
• Невозможно откатить задачу
Как это было?
Недостатки
• Незавершенные задачи в выкладке
• Тяжело отслеживать состояние кода
• Невозможно откатить задачу
• Работа отделов волнообразно зависит от выкладки
Как это было?
Еще недостатки
• Выкладка задач тормозится
Как это было?
Еще недостатки
• Выкладка задач тормозится
• Выкладка 1-2 раза в неделю
Как это было?
Еще недостатки
• Выкладка задач тормозится
• Выкладка 1-2 раза в неделю
• Тяжелый процесс выкладки
Как это было?
Еще недостатки
• Выкладка задач тормозится
• Выкладка 1-2 раза в неделю
• Тяжелый процесс выкладки
• С ростом команды растут проблемы с качеством
Как это было?
Глобальные требования
• Формализовать процесс разработки
Глобальные требования
• Формализовать процесс разработки
• Внедрить контроль качества на всех этапах
Глобальные требования
• Формализовать процесс разработки
• Внедрить контроль качества на всех этапах
• Внедрить автоматизированное тестирование
Глобальные требования
• Формализовать процесс разработки
• Внедрить контроль качества на всех этапах
• Внедрить автоматизированное тестирование
• Не потерять в скорости разработки
Этап первый: упрощаем разработку
Задача: спроектировать удобный процесс параллельной разработки?
Этап первый: упрощаем разработку
Задача: спроектировать удобный процесс параллельной разработки
Решение: заменить svn на git, который позволяет удобно осуществлять разработку в собственной версии кода каждому разработчику
?
!
master
build_2016_03_21_11am
SRV-10637_add_sf_support
build_2016_03_21_4pm
BD-1786_spp_in_spain B0-435_cs_improvements
release release
Этап первый: упрощаем разработку
git
Проектируем и пробуем
Этап первый: упрощаем разработку
+
Проектируем и пробуем
• Используем оба хранилища - и svn, и git
Этап первый: упрощаем разработку
+
Проектируем и пробуем
• Используем оба хранилища - и svn, и git
• Синхронизация кода при помощи git svn
Этап первый: упрощаем разработку
+
Проектируем и пробуем
• Используем оба хранилища - и svn, и git
• Синхронизация кода при помощи git svn
Переводим на новую схему одну из команд
Этап первый: упрощаем разработку
+
Анализируем и дополняем
Этап первый: упрощаем разработку
+
Анализируем и дополняем
• Базовая инструкция дополнена четкими шагами
Этап первый: упрощаем разработку
+
Анализируем и дополняем
• Базовая инструкция дополнена четкими шагами
• Разработан прототип системы сборки релиза
Этап первый: упрощаем разработку
+
Анализируем и дополняем
• Базовая инструкция дополнена четкими шагами
• Разработан прототип системы сборки релиза
Начинаем перевод остальных отделов
Этап первый: упрощаем разработку
+
Переходим полностью
Этап первый: упрощаем разработку
+
Переходим полностью
• Презентация об основах работы с git
Этап первый: упрощаем разработку
+
Переходим полностью
• Презентация об основах работы с git
• Помощь в переходный период
Этап первый: упрощаем разработку
+
Переходим полностью
• Презентация об основах работы с git
• Помощь в переходный период
• Специальная страничка в Confluence
Этап первый: упрощаем разработку
+
Переходим полностью
• Презентация об основах работы с git
• Помощь в переходный период
• Специальная страничка в Confluence
Торжественное закрытие svn
Этап первый: упрощаем разработку
+
Этап второй: unit-тесты
Задача: дать разработчику быстрый ответ о качестве кода на ранних этапах разработки?
Этап второй: unit-тесты
Задача: дать разработчику быстрый ответ о качестве кода на ранних этапах разработки
Решение: unit-тесты, написанные самим разработчиком + регрессионные тесты, написанные коллегами ранее
?
!
Внедрение культуры написания юнит-тестов
Этап второй: unit-тесты
+
Внедрение культуры написания юнит-тестов
• Написание нескольких примеров
Этап второй: unit-тесты
+
Внедрение культуры написания юнит-тестов
• Написание нескольких примеров
• Организация семинаров
Этап второй: unit-тесты
+
Внедрение культуры написания юнит-тестов
• Написание нескольких примеров
• Организация семинаров
• Показательная демонстрация полезности
Этап второй: unit-тесты
+
Внедрение культуры написания юнит-тестов
• Написание нескольких примеров
• Организация семинаров
• Показательная демонстрация полезности
• Поощрение первопроходцев
Этап второй: unit-тесты
+
Стимулируем процесс
Этап второй: unit-тесты
+
Стимулируем процесс
• Добавление инструментов
Этап второй: unit-тесты
+
Стимулируем процесс
• Добавление инструментов
• Добавление обязательного прогона unit-тестов
Этап второй: unit-тесты
+
Стимулируем процесс
• Добавление инструментов
• Добавление обязательного прогона unit-тестов
Как результат - резкий рост количества юнит-тестов: с пары десятков до более 3000.
Этап второй: unit-тесты
+
Этап третий: code review
Задача: повысить читаемость кода, добавив процесс ревью кода и удобный интрумент для него
?
Этап третий: code review
Задача: повысить читаемость кода, добавив процесс ревью кода и удобный интрумент для него
Решение: gitphp с надстройками для ревью и интеграцией с Jira
?
!
Процесс - обязательный. Способ - вольный:
Этап третий: code review
+
Процесс - обязательный. Способ - вольный:
• code review осуществляется руководителем отдела
Этап третий: code review
+
Процесс - обязательный. Способ - вольный:
• code review осуществляется руководителем отдела
• code review - внутри группы
Этап третий: code review
+
Процесс - обязательный. Способ - вольный:
• code review осуществляется руководителем отдела
• code review - внутри группы
• задачи попадают в общую очередь на review
Этап третий: code review
+
Процесс - обязательный. Способ - вольный:
• code review осуществляется руководителем отдела
• code review - внутри группы
• задачи попадают в общую очередь на review
• review проводят от каждого отдела
Этап третий: code review
+
Этап четвертый: автоматизация процессов
Задача: ускорить выкладку новых фич, не потеряв в качестве?
Этап четвертый: автоматизация процессов
Задача: ускорить выкладку новых фич, не потеряв в качестве
Решение: специальная команда release-инженеров для автоматизации сборки и выкладки билда
?
!
Внедрение автоматизации
Автовыкладка на стейджинг
Code freeze
git hooks
AIDA
CI + CDSelenium
Шоты
Этап четвертый: автоматизация процессов
Подзадача: автоматизировать часть code review
Этап четвертый: автоматизация процессов
?
Подзадача: автоматизировать часть code review
Решение: добавляются новые git-хуки, использующие в том числе анализаторы кода
Этап четвертый: автоматизация процессов
?
!
Что начинаем проверять+
Этап четвертый: автоматизация процессов
Что начинаем проверять
• Каждая ветка начинается с номера задачи
+
Этап четвертый: автоматизация процессов
Что начинаем проверять
• Каждая ветка начинается с номера задачи
• Наличие сопровождающего для кода
+
Этап четвертый: автоматизация процессов
Что начинаем проверять
• Каждая ветка начинается с номера задачи
• Наличие сопровождающего для кода
• Состояние задачи
+
Этап четвертый: автоматизация процессов
Что начинаем проверять
• Каждая ветка начинается с номера задачи
• Наличие сопровождающего для кода
• Состояние задачи
• Соответствие кода принятым стандартам
+
Этап четвертый: автоматизация процессов
Подзадача: разумно организовать сборку билда
Этап четвертый: автоматизация процессов
?
Подзадача: разумно организовать сборку билда
Решение: уменьшаем человеческий фактор в процессе сборки
Этап четвертый: автоматизация процессов
?
!
Разгружаем релиз-инженеров+
Этап четвертый: автоматизация процессов
Разгружаем релиз-инженеров
• В помощь написана AIDA
+
Этап четвертый: автоматизация процессов
Разгружаем релиз-инженеров
• В помощь написана AIDA
• Автомерж каждые 5 минут
+
Этап четвертый: автоматизация процессов
Разгружаем релиз-инженеров
• В помощь написана AIDA
• Автомерж каждые 5 минут
• Вводится code freeze перед выкладками
+
Этап четвертый: автоматизация процессов
Разгружаем релиз-инженеров
• В помощь написана AIDA
• Автомерж каждые 5 минут
• Вводится code freeze перед выкладками
Два релиза в день!
+
Этап четвертый: автоматизация процессов
Подзадача: ускорить unit-тесты (написано уже более 25000!)
Этап четвертый: автоматизация процессов
?
Подзадача: ускорить unit-тесты (написано уже более 25000!)
Решение: разделение unit-тестов на группы для асинхронного прогона на нескольких серверах
Этап четвертый: автоматизация процессов
?
!
Этап четвертый: автоматизация процессов
Common suite
+
suite 1
suite 3
suite 2
suite 4suite 5
suite 6
Этап четвертый: автоматизация процессов
Common suite
+
suite 1
suite 3
suite 2
suite 4suite 5
suite 6
Cloud computing
Этап четвертый: автоматизация процессов
Common suite
+
Подзадача: упростить повторные проверки сложных сценариев
Этап четвертый: автоматизация процессов
?
Подзадача: упростить повторные проверки сложных сценариев
Решение: подключить к написанию selenium-тестов всех QA-инженеров
Этап четвертый: автоматизация процессов
?
!
Реализуем
Этап четвертый: автоматизация процессов
+
Реализуем
• Команда автоматизаторов тестов
Этап четвертый: автоматизация процессов
+
Реализуем
• Команда автоматизаторов тестов
• Цикл cеминаров
Этап четвертый: автоматизация процессов
+
Реализуем
• Команда автоматизаторов тестов
• Цикл cеминаров
• Когда можно и нужно писать selenium-тесты
Этап четвертый: автоматизация процессов
+
Реализуем
• Команда автоматизаторов тестов
• Цикл cеминаров
• Когда можно и нужно писать selenium-тесты
Участвует каждый QA-инженер!
Этап четвертый: автоматизация процессов
+
Подзадача: уметь проверять задачу на боевых данных до выкладки.
Этап четвертый: автоматизация процессов
?
Подзадача: уметь проверять задачу на боевых данных до выкладки.
Решение: шоты - создание “стейджинга” для отдельной ветки (бонус - генерация шаблонов).
Этап четвертый: автоматизация процессов
?
!
Подзадача: дополнить автоматизированные проверки составных задач
Этап четвертый: автоматизация процессов
?
Подзадача: дополнить автоматизированные проверки составных задач
Решение: AIDA приобретает дополнительные возможности
Этап четвертый: автоматизация процессов
?
!
Дополнительные возможности
Этап четвертый: автоматизация процессов
+
Дополнительные возможности
• Проверка дополнительных маркеров
Этап четвертый: автоматизация процессов
+
Дополнительные возможности
• Проверка дополнительных маркеров
• Запуск smoke-тестов
Этап четвертый: автоматизация процессов
+
Дополнительные возможности
• Проверка дополнительных маркеров
• Запуск smoke-тестов
• Пересборка билда при откате проблемной задачи
Этап четвертый: автоматизация процессов
+
Дополнительные возможности
• Проверка дополнительных маркеров
• Запуск smoke-тестов
• Пересборка билда при откате проблемной задачи
• Нотификации разработчику и QA-инженеру
Этап четвертый: автоматизация процессов
+
Подзадача: уметь быстро определять и решать проблемы при выкладке
Этап четвертый: автоматизация процессов
?
Подзадача: уметь быстро определять и решать проблемы при выкладке
Решение: расширение мониторинга и карантин на завершение выкладки
Этап четвертый: автоматизация процессов
?
!
Контроль выкладки
Этап четвертый: автоматизация процессов
+
Контроль выкладки
• Асинхронная выкладка, атомарное переключение
Этап четвертый: автоматизация процессов
+
Контроль выкладки
• Асинхронная выкладка, атомарное переключение
• Мониторинг ключевых показателей
Этап четвертый: автоматизация процессов
+
Контроль выкладки
• Асинхронная выкладка, атомарное переключение
• Мониторинг ключевых показателей
• Быстрый “откат” при проблемах
Этап четвертый: автоматизация процессов
+
• Набирать высококлассных QA-инженеров
• Подобные задачи требуют времени
• Искать пути оптимизации
Что же ещё?
Александр Свинцов [email protected]
Badoo Development
tech.badoo.com habrahabr.ru/company/badoo/
Спасибо за внимание!
?