РИФ 2016, Внедрение контроля качества в большом...

Post on 09-Apr-2017

27 Views

Category:

Business

1 Downloads

Preview:

Click to see full reader

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-инженеров

• Подобные задачи требуют времени

• Искать пути оптимизации

Что же ещё?

Александр Свинцов svintsov.alexander@gmail.com

Badoo Development

tech.badoo.com habrahabr.ru/company/badoo/

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

?

top related