«Given enough eyeballs, all bugs are shallow»
Вступление
Читая про Закон Линуса, нам понравилась идея о том, что при достаточном количестве независимых проверок большинство проблем становится быстро обнаруживаемым. Это натолкнуло нас на мысль адаптировать подобный подход в QA процессах с минимальными ресурсными затратами. Основная идея заключалась в том, чтобы перед стартом регресса версии, но после завершения работ разработки новых фичей (Фичефриза), новые фичи дополнительно проверялись другим тестировщиком, а не только ответственным за фичу QA.
Как мы решили это реализовать
На старте разработки формируется чек-лист проверки фичи на основе GDD и SLA. Далее процесс разработки продолжается без изменений вплоть до стадии фичефриза. Согласно нашим процессам, после завершения разработки версии остается отдельный день под балансные правки и финальную настройку межфункционального взаимодействия систем. Именно в это окно и удалось встроить подход без заметного влияния на сроки разработки.
Пример пайплайна:
-
На старте разработки, фича “Бег” была закреплена за мной
-
Изучаю требования, тестирую функциональность и составляю чек-листы
-
Тут стадия активной разработки
-
Версия уходит в фичефриз и формируется билд для плейтеста
-
Приступают к работе GD, где они плейтестят и шатают баланс
-
Определяются финальные даты Peer тестов
-
Я передаю свою фичу коллеге QA, который на основе чек-листа, описанных рисков и опасных зон формирует собственный тестовый набор.
Его задача — независимо перепроверить сценарии, наиболее подверженные регрессиям и межфункциональным конфликтам. -
После завершения формирования всех чек листов для Peer тестов формируется общий тестовый набор и отдел приступает к тестам за отведенное время
-
Каждый QA повторно проверяет функциональность с упором на менее очевидные сценарии и зоны риска.
-
Формируются артефакты тестирования. Баги в трекер, отчет в чат

Таким образом, Peer тесты выступают механизмом борьбы с замыленным взглядом.
Прим. Неочевидным бонусом является возможность подчистить за новым\неопытным специалистом, минимизируя риск отказа по этому фактору
«Безумие — это точное повторение одного и того же действия раз за разом в надежде на изменение «
Чтобы подход работал эффективно, важно избегать механического повторения уже известных сценариев. Иначе процесс быстро превращается в дублирование действий без заметного прироста качества.
Ограничения подхода
При росте команды и количества параллельных задач стоимость координации начинает заметно расти, стоимость подхода перестает перекрывать потенциальную выгоду от его использования
Высокая нагрузка на переключение контекста требует более качественного ведения документации и передачи контекста между QA.
На небольших проектах с коротким регрессом отдельный этап Peer тестов зачастую просто не оправдывает затраты времени.
Сильная зависимость от качества документации. Тут, как и описано выше, важно второму пилоту видеть что есть и что смотрелось, при поверхностном ГДД, недостаточном документировании QA, неописанных рисках, ничего не получится
Плюсы подхода
-
Снижаются риски замыленного взгляда со стороны ответственного QA
-
Повышается вероятность обнаружения регрессий, интеграционных и пограничных проблем
-
Проверка начинает охватывать менее очевидные зоны риска, связанные с легаси и параллельной разработкой
-
Знания о функциональности распределяются между несколькими QA
-
В краткосрочной перспективе снижается bus factor
-
Появляется дополнительная проверка качества тестовой документации
-
Подход относительно дешево встраивается в существующие процессы
Минусы подхода
-
Может увеличивать общее время разработки
-
Возможны дублирование проверок и размывание ответственности
-
Эффективность сильно зависит от качества документации и вовлеченности QA
-
При недостатке времени проверки могут становиться поверхностными
-
Требует постоянной актуализации тестовой документации
-
Может создавать ложное ощущение полноты покрытия
Какие проблемы этот подход ловит лучше всего
На практике наиболее заметную пользу подход показывает при поиске проблем, возникающих не внутри самой фичи, а на пересечении нескольких систем или после косвенных изменений в ходе дальнейшей разработки версии.
-
конфликты между фичами
-
скрытые зависимости
-
повреждение состояний
-
Проблемы конфигов
-
пограничные сценарии
Когда подход не нужен
Как правило, на небольших проектах с коротким циклом релизов и хорошо изолированными фичами дополнительный этап проверки не оправдывает затраты времени.
А почему у нас это применимо
В первую очередь это обусловлено особенностями пайплайна разработки. После завершения активной стадии разработки у нас остается отдельное окно, в рамках которого проходят балансные правки, плейтесты и финальная настройка межфункционального взаимодействия систем. Именно в этот этап удалось органично встроить Peer тесты без существенного влияния на сроки разработки
Еще одной причиной стало большое количество старого кода и неочевидных пересечений между системами. В подобных условиях даже локальные изменения могут приводить к косвенным регрессиям в уже существующем функционале, которые сложно обнаружить в рамках обычной проверки фичи ответственным QA
Также важную роль сыграл запрос на сокращение времени регресса. Ранее регрессионное тестирование включало в себя значительный объем проверок нового функционала, из-за чего занимало большое количество времени. Перенос части этих проверок в отдельный этап Peer тестов позволил разгрузить регресс без заметной потери качества проверки версии
Пример типичного кейса у нас:
Во время разработки фичи “Повар” вся функциональность проверялась в изолированном окружении и успешно проходила тестирование.
Позже, уже вне рамок задачи, были внесены небольшие изменения во фронтовую часть, затрагивающие обработку рецептов. В результате система перестала валидировать тип рецепта, из-за чего повару стало возможно передавать любые предметы вместо специальных поварских рецептов.
При этом основной пользовательский сценарий продолжал работать корректно — поварские рецепты принимались и обрабатывались без ошибок, поэтому дефект не был замечен разработчиком во время самопроверки.
Второй QA с большей вероятностью проверяет нестандартные сценарии вне уже сформированных ожиданий о поведении системы.
Про цифры

В среднем на версию у нас фиксируется около 70 дефектов.
После завершения активной стадии разработки и перехода версии в состояние фичефриза обычно остается около 30 нерешенных или поздно обнаруженных проблем.
Из них:
-
около 10 обнаруживается во время альфа- и бета-тестирования
-
около 15 находится во время дотестов задач, не успевших пройти полноценную проверку в активной стадии разработки
-
еще от 1 до 4 дефектов стабильно обнаруживаются во время Peer тестов
Несмотря на сравнительно небольшое количество найденных дефектов, в среднем речь идет примерно о 10% всех проблем, найденных после фичефриза, именно такие проблемы чаще всего имеют высокий шанс дойти до релиза
При этом подход практически не увеличил нагрузку на команду, так как был встроен в уже существующее окно балансных и интеграционных проверок. Дополнительным эффектом стало сокращение времени регресса примерно на 4 часа на каждого QA за счет вынесения части проверок нового функционала в отдельный этап.
Итого
Большинство найденных проблем возникали не внутри самой фичи, а на пересечении нескольких систем. И именно там подход оказался наиболее полезным.
ссылка на оригинал статьи https://habr.com/ru/articles/1038158/