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

CodeFest 2019. Сергей Быстрых (Plesk) — Как уск...

Avatar for CodeFest CodeFest
April 06, 2019

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

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

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

Avatar for CodeFest

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. Научились хвалить и хвастаться