Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CodeFest 2019. Сергей Быстрых (Plesk) — Как ускорить тесты в 10 раз и вернуть к ним доверие

CodeFest
April 06, 2019

CodeFest 2019. Сергей Быстрых (Plesk) — Как ускорить тесты в 10 раз и вернуть к ним доверие

Практически в каждой IT-команде бизнес рано или поздно начинает хотеть быстрой доставки фичей. И хорошо, если это рано, и вы строите свои воркфлоу с нуля, сразу внедряя такие полезные практики как continuous integration и continuous delivery. А если вы уже прошли многолетний путь создания успешного коробочного продукта? Если у вас уже есть устоявшиеся процессы, которые, да, могут надежно, но не могут быстрее? А бизнес требует!

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

CodeFest

April 06, 2019
Tweet

More Decks by CodeFest

Other Decks in Technology

Transcript

  1. Как ускорить тесты в 10 раз и вернуть к ним

    доверие? Основано на личном опыте, все имена и события реальны Сергей Быстрых Руководитель отдела Tools & Infrastructure Plesk
  2. Кто мы? 2 • 380 000 серверов • 11 000

    000 сайтов 6% интернета* по web-серверам и активным сайтам * по данным NetCraft, февраль 2019
  3. Кто мы? 3 Коробочный продукт • 20 лет на рынке

    • 3 поддерживаемых версии • 20 операционных систем • ~ 1М строк кода на PHP C/C++, Python, Go, JavaScript
  4. Релиз цикл 5 ~ 1 год Preview Preview Preview Preview

    RTM 10-15 итераций по 4 недели
  5. Размеры бедствия 8 • Сборка билдов 3 раза в день

    по расписанию • Запуск тестов ежедневно и еженедельно по расписанию
  6. Размеры бедствия 9 • Сборка билдов 3 раза в день

    по расписанию • Запуск тестов ежедневно и еженедельно по расписанию • 60 000 тестов
  7. Размеры бедствия 10 • Сборка билдов 3 раза в день

    по расписанию • Запуск тестов ежедневно и еженедельно по расписанию • 60 000 тестов • 80 конфигураций
  8. Размеры бедствия 11 • Сборка билдов 3 раза в день

    по расписанию • Запуск тестов ежедневно и еженедельно по расписанию • 60 000 тестов • 80 конфигураций • Большинство тестов E2E
  9. Размеры бедствия 12 • Сборка билдов 3 раза в день

    по расписанию • Запуск тестов ежедневно и еженедельно по расписанию • 60 000 тестов • 80 конфигураций • Большинство тестов E2E • 16 часов на все тесты
  10. Размеры бедствия 13 • Сборка билдов 3 раза в день

    по расписанию • Запуск тестов ежедневно и еженедельно по расписанию • 60 000 тестов • 80 конфигураций • Большинство тестов E2E • 16 часов на все тесты • 2-6% упавшие тесты
  11. Размеры бедствия 14 • Сборка билдов 3 раза в день

    по расписанию • Запуск тестов ежедневно и еженедельно по расписанию • 60 000 тестов • 80 конфигураций • Большинство тестов E2E • 16 часов на все тесты • 2-6% упавшие тесты • 40 часов в неделю на разбор
  12. Размеры бедствия 15 • Сборка билдов 3 раза в день

    по расписанию • Запуск тестов ежедневно и еженедельно по расписанию • 60 000 тестов • 80 конфигураций • Большинство тестов E2E • 16 часов на все тесты • 2-6% упавшие тесты • 40 часов в неделю на разбор НЕ МОЖЕМ!
  13. Закидай проблему деньгами 24 Получили: 1. Надежно Тесты продолжают падать

    2. Много По-прежнему не можем прогнать всё на коммит
  14. Закидай проблему деньгами 25 Получили: 1. Надежно Тесты продолжают падать

    2. Много По-прежнему не можем прогнать всё на коммит 3. Быстрее и независимей
  15. В поисках вечнозелёного 28 Что делать с flaky тестами? ПЛАН:

    1. Взять стабильную версию 2. Прогнать тесты
  16. В поисках вечнозелёного 29 Что делать с flaky тестами? ПЛАН:

    1. Взять стабильную версию 2. Прогнать тесты 3. Удалить упавшие тесты
  17. В поисках вечнозелёного 30 Что делать с flaky тестами? ПЛАН:

    1. Взять стабильную версию 2. Прогнать тесты 3. Удалить упавшие тесты 4. Повторить
  18. В поисках вечнозелёного 34 План не сработал! Причины: 1. Флакуют

    не только тесты, но и общие компоненты 2. Нестабильная инфраструктура
  19. В поисках вечнозелёного 35 План не сработал! Причины: 1. Флакуют

    не только тесты, но и общие компоненты 2. Нестабильная инфраструктура 3. Успешные тесты могут порождать упавшие тесты
  20. В поисках вечнозелёного 38 Получили: 1. Надежно Тесты продолжают падать

    2. Достаточно быстро (1 час) 3. Меньше, но на каждый коммит
  21. Ошибки прошлого 39 Сергей Быстрых Plesk Карантинная зона для автотестов:

    повышение стабильности и уменьшение трудозатрат
  22. Ошибки прошлого 40 Сергей Быстрых Plesk Карантинная зона для автотестов:

    повышение стабильности и уменьшение трудозатрат Перезапуск ведет к накоплению технического долга!
  23. Делаем выбор 43 Быстро? Надежно? Много? • Время на прогон

    всех тестов – 1 час • Фиксируем небольшой набор конфигураций и тестов
  24. Делаем выбор 44 Быстро? Надежно? Много? • Время на прогон

    всех тестов – 1 час • Фиксируем небольшой набор конфигураций и тестов • Сосредотачиваемся на стабильности
  25. Делаем выбор 45 Цель: упавший тест = баг в продукте

    Быстро? Надежно! Много? • Время на прогон всех тестов – 1 час • Фиксируем небольшой набор конфигураций и тестов • Сосредотачиваемся на стабильности
  26. Вовлекаем команду 50 Мы поручили разработчикам разбирать результаты тестов! Получили:

    • Первую инструкцию «Как разбирать тесты» • Первый воркшоп «Как запускать тесты»
  27. Вовлекаем команду 51 Мы поручили разработчикам разбирать результаты тестов! Получили:

    • Первую инструкцию «Как разбирать тесты» • Первый воркшоп «Как запускать тесты» • Улучшенные инструменты разбора
  28. Вовлекаем команду 52 Мы поручили разработчикам разбирать результаты тестов! Получили:

    • Первую инструкцию «Как разбирать тесты» • Первый воркшоп «Как запускать тесты» • Улучшенные инструменты разбора • Тесты начали чиниться
  29. Консистентность: фиксируем всё 55 1. Тесты рядом с кодом 2.

    Любое изменение в системе = коммит Неизвестное изменение демотивирует!
  30. Консистентность: фиксируем всё 56 1. Тесты рядом с кодом 2.

    Любое изменение в системе = коммит 3. Выполни хотя бы пункт 1 Неизвестное изменение демотивирует!
  31. Настраиваем процессы 65 Максимально просто: • Дежурства • Анализ падений

    (их уже мало) • Заведение багов на продукт/тесты
  32. Настраиваем процессы 66 Максимально просто: • Дежурства • Анализ падений

    (их уже мало) • Заведение багов на продукт/тесты • Заполнение таблицы для обобщения причин падений
  33. Настраиваем процессы 67 Максимально просто: • Дежурства • Анализ падений

    (их уже мало) • Заведение багов на продукт/тесты • Заполнение таблицы для обобщения причин падений Не очень: • Много ручной работы
  34. Настраиваем процессы 68 Максимально просто: • Дежурства • Анализ падений

    (их уже мало) • Заведение багов на продукт/тесты • Заполнение таблицы для обобщения причин падений Не очень: • Много ручной работы • Нудная отчетность
  35. Настраиваем процессы 69 Максимально просто: • Дежурства • Анализ падений

    (их уже мало) • Заведение багов на продукт/тесты • Заполнение таблицы для обобщения причин падений Не очень: • Много ручной работы • Нудная отчетность • Невозможно приоритизировать проблемы
  36. Настраиваем процессы 73 Улучшенный процесс: • Договорились как отмечать •

    Всё обсуждение запуска в треде • Ссылки на баги в треде
  37. Первый ChatOps 76 Bot: • Анализирует сообщения из slack •

    Собирает статистику разборов • Вставляет в jira bugs ссылки на запуски
  38. Первый ChatOps 77 Bot: • Анализирует сообщения из slack •

    Собирает статистику разборов • Вставляет в jira bugs ссылки на запуски • Приоритизирует список проблем
  39. Первый ChatOps 78 Bot: • Анализирует сообщения из slack •

    Собирает статистику разборов • Вставляет в jira bugs ссылки на запуски • Приоритизирует список проблем • Отслеживает активность инженеров
  40. Лёд тронулся 84 • Меньше • Почти нет «это не

    моё» • Люди вовлекаются сами
  41. Лёд тронулся 85 • Меньше • Почти нет «это не

    моё» • Люди вовлекаются сами • Хочу так же, но до коммита
  42. Где мы сейчас 88 SLA: 95% Цель не достигли, но

    тесты ускорили и обуздали ~ 0,1% упавших тестов на запуск
  43. Пройденный нами путь 91 1. Потратили деньги – купили железо

    2. Выкинули нестабильные тесты 3. Перестали перезапускать тесты
  44. Пройденный нами путь 92 1. Потратили деньги – купили железо

    2. Выкинули нестабильные тесты 3. Перестали перезапускать тесты 4. Сосредоточились на стабильности тестов
  45. Пройденный нами путь 93 1. Потратили деньги – купили железо

    2. Выкинули нестабильные тесты 3. Перестали перезапускать тесты 4. Сосредоточились на стабильности тестов 5. Нашли ментора, евангелиста и перформера
  46. Пройденный нами путь 94 1. Потратили деньги – купили железо

    2. Выкинули нестабильные тесты 3. Перестали перезапускать тесты 4. Сосредоточились на стабильности тестов 5. Нашли ментора, евангелиста и перформера 6. Создали Pipeline
  47. Пройденный нами путь 95 1. Потратили деньги – купили железо

    2. Выкинули нестабильные тесты 3. Перестали перезапускать тесты 4. Сосредоточились на стабильности тестов 5. Нашли ментора, евангелиста и перформера 6. Создали Pipeline 7. Поручили разработчикам разбирать результаты тестов
  48. Пройденный нами путь 96 1. Потратили деньги – купили железо

    2. Выкинули нестабильные тесты 3. Перестали перезапускать тесты 4. Сосредоточились на стабильности тестов 5. Нашли ментора, евангелиста и перформера 6. Создали Pipeline 7. Поручили разработчикам разбирать результаты тестов 8. Положили тесты рядом с кодом продукта
  49. Пройденный нами путь 97 1. Потратили деньги – купили железо

    2. Выкинули нестабильные тесты 3. Перестали перезапускать тесты 4. Сосредоточились на стабильности тестов 5. Нашли ментора, евангелиста и перформера 6. Создали Pipeline 7. Поручили разработчикам разбирать результаты тестов 8. Положили тесты рядом с кодом продукта 9. Научились измерять
  50. Пройденный нами путь 98 1. Потратили деньги – купили железо

    2. Выкинули нестабильные тесты 3. Перестали перезапускать тесты 4. Сосредоточились на стабильности тестов 5. Нашли ментора, евангелиста и перформера 6. Создали Pipeline 7. Поручили разработчикам разбирать результаты тестов 8. Положили тесты рядом с кодом продукта 9. Научились измерять 10. Настроили, затем улучшили процессы
  51. Пройденный нами путь 99 1. Потратили деньги – купили железо

    2. Выкинули нестабильные тесты 3. Перестали перезапускать тесты 4. Сосредоточились на стабильности тестов 5. Нашли ментора, евангелиста и перформера 6. Создали Pipeline 7. Поручили разработчикам разбирать результаты тестов 8. Положили тесты рядом с кодом продукта 9. Научились измерять 10. Настроили, затем улучшили процессы 11. Создали ChatOps
  52. Пройденный нами путь 100 1. Потратили деньги – купили железо

    2. Выкинули нестабильные тесты 3. Перестали перезапускать тесты 4. Сосредоточились на стабильности тестов 5. Нашли ментора, евангелиста и перформера 6. Создали Pipeline 7. Поручили разработчикам разбирать результаты тестов 8. Положили тесты рядом с кодом продукта 9. Научились измерять 10. Настроили, затем улучшили процессы 11. Создали ChatOps 12. Научились хвалить и хвастаться