Треугольник Фаулера

Классическая пирамида тестирования, которую популяризировал Мартин Фаулер в 2012 году показывает, что базовых тестов (быстрых и дешевых) должно быть больше, а сложных и дорогих сквозных тестов - меньше. Идея до сих пор полезна и хорошо запоминается, но одной пирамиды недостаточно, чтобы описать весь процесс обеспечения качества.

Изображение пирамиды с первоисточника, Martin Fowler, martinfowler.com
Изображение пирамиды с первоисточника, Martin Fowler, martinfowler.com

Наверняка вы видели десятки вариаций пирамиды, отличающихся составом слоёв, и все они по-своему правильные. Из моего опыта собеседований, когда спрашивают «расскажи про пирамиду тестирования», интервьюеру часто важно услышать именно набор уровней и типов тестирования. Ответ по классическому Фаулеру может выглядеть неполным.

Это подтолкнуло меня к мысли, что в практических обсуждениях акцент часто смещается от стоимости тестов к набору и расположению различных видов тестирования – от unit до e2e.

примеры пирамид тестирования
примеры пирамид тестирования

Этап х окружение х проверки

Я намеренно сместился от термина тестирование к «quality checks», поскольку не каждая проверка является тестированием.

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

Этап, окружение и тип проверки
Этап, окружение и тип проверки

Выделим шесть основных этапов

Возьмем стандартный флоу жизненного цикла DevOps Infinity Loop, посмотрим на это через призму QA & Dev и уберем лишнее. Получилось 6 этапов: Write → Commit → Build → Verify → Release → Operate

Write Код в процессе написания

Commit Код готов к коммиту и пушу

Build Сборка

Verify Основной этап тестирования

Release Деплой

Operate Код в продакшене, мониторинг

Добавим окружения

Каждый этап выполняется в определенном окружении, Local → CI → dev-branch / staging → pre-prod → production

Local

CI

Staging

Pre-prod

Prod

Write

●

Commit

●

Build

●

Verify (testing)

●

●

Release

●

●

Operate

●

Пирамида
Пирамида

На каждом этапе могут проводиться проверки, даже в момент написания кода Write. Типы проверок для каждого шага на схеме. Результат предыдущего этапа определяет, имеет ли смысл переходить к следующему.

Что получилось

Стандартная пирамида тестирования говорит прежде всего о стоимости и количестве тестов каждого типа. Тесты — не единственный способ убедиться, что система работает корректно, - проверки появляются уже на этапе написания кода и продолжаются после выхода в production, поэтому я предлагаю смотреть на них в контексте этапа и окружения.

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

На схеме показаны не все виды тестирования, свою пирамиду лучше собирать под свою систему совместно с командой разработки, и руководителем.