Quality Gates в разработке: делаем качество частью процесса

В разработке качество часто ломается не только на самих багах — но и в тех местах, где работа переходит от одного этапа к другому без ясных условий. Задача уже поехала дальше, хотя acceptance criteria ещё сырые. Формально её можно тестировать, но по факту сначала нужно собирать контекст. Пайплайн зелёный, при этом важная проверка вообще осталась за его пределами.
Такие ситуации обычно показывают не частную ошибку, а устройство процесса в целом. Когда важные условия нигде не закреплены, команда расплачивается за это уточнениями, возвратами и лишней синхронизацией. И напротив — если критерии перехода определены заранее, работать проще. Поэтому Quality Gates для нас в Островке — не только способ ничего не упустить, но и понятный маркер того, насколько процесс разработки вообще выстроен и управляем.
Форма у таких гейтов может быть разной: автоматическая проверка, правило в workflow или простой критерий готовности. Важно не как выглядит гейт, а какую точку неопределённости он закрывает.
Под катом — практический разбор того, что вообще можно считать Quality Gate, где такие механизмы реально работают и как подбирать их под задачи команды.
Привет, Хабр! Меня зовут Алина Матлахова, я QA Team Lead в Островке. Работаю с шестью командами, в которых есть QA-инженеры и QA-лиды, — всего в контуре 25 человек.
По моему опыту, Quality Gates часто понимают слишком узко: как что-то сугубо техническое, связанное с CI, пайплайнами и запретами на релиз. На практике это гораздо более широкий и интересный инструмент — не только автоматическая проверка в нужной точке процесса, но и в целом способ встроить качество в саму логику работы команды.
С этой стороны я и предлагаю на них посмотреть. Сначала разберёмся, что вообще делает Quality Gate именно гейтом, а не просто полезной практикой. Потом — какие формы он может принимать в реальном процессе и как такие механизмы появляются в командах (необязательно в крупных).
Когда понимаешь сам принцип, Quality Gates довольно быстро перестают выглядеть чем-то сложным или «корпоративным». По сути, это конструктор: если видеть его логику, из него можно собрать решение под свои процессы, ограничения и типовые сбои.
Quality Gate: а что это?
Начну с приземлённого примера.
Представим, что мы собираем документы на визу. Для подачи нужен конкретный набор: загранпаспорт, фотография, выписка о доходах, анкета, справка с работы. Если какого-то документа не хватает — например, той же справки с работы, — нас просто не пропускают дальше. Никто не говорит: «Давайте примем пакет как есть, а потом как-нибудь разберёмся». Логика ровно обратная: условия не выполнены, значит, следующий этап недоступен. Сначала нужно донести недостающее, заново пройти проверку — и только потом двигаться дальше.
С Quality Gate всё устроено примерно так же. Есть одно или несколько обязательных условий. Если они выполнены, артефакт проходит на следующую стадию. Если нет — возвращается на доработку, а затем снова приходит в ту же точку проверки.

Для себя я формулирую это так:
Quality Gate — невозможность артефакта, единицы бэклога, задачи или кода двигаться дальше по пайплайну или стадиям разработки, если не достигнут критерий качества.
Здесь важны сразу две вещи. Во-первых, Quality Gate всегда стоит на переходе между этапами. Во-вторых, он невозможен без заранее понятного критерия качества. Пока такого критерия нет, нет и самого гейта — есть только размытые ожидания, субъективная оценка или ручной контроль «на глаз».
Например, если взять переход от requirements к design, перед ним могут стоять вполне конкретные условия:
-
проведено демо ранних прототипов;
-
по фиче определён набор критериев готовности;
-
выполнено тестирование документации.
Только если эти условия выполнены, можно честно сказать, что команда готова двигаться дальше.
Вообще Quality Gates уместны почти на любом этапе жизненного цикла разработки — везде, где есть риск протащить дальше сырой, неполный или плохо проверенный результат:
-
На ранних этапах это может быть завершённый research, демо ранних прототипов, согласованные критерии или тестирование документации
-
На этапе разработки — линтеры, юнит-тесты, требования к покрытию, готовность тест-кейсов
-
На этапе тестирования — прохождение автотестов, регрессии, валидация acceptance criteria и тест-репортов
-
После релиза — smoke-проверки, мониторинг ошибок и метрики

Если немного упростить, для себя я выделяю пять ключевых характеристик Quality Gate:
-
Quality Gate встраивается в workflow и влияет на изменение состояния сущности. Это может быть задача, баг, merge request, релиз, документ, тест-кейс — не так важно. Важно, что гейт связан не с абстрактным «контролем качества вообще», а с очень конкретным движением сущности по процессу.
-
Quality Gate определяет, можно ли двигаться дальше. Это не просто информация к сведению и не рекомендация, а именно механизм допуска или недопуска.
-
Хороший Quality Gate всегда опирается на заранее согласованные критерии. Если команда договорилась, что переход в ready for testing возможен только при определённом наборе условий, значит, это правило работает стабильно и одинаково для всех — до тех пор, пока его осознанно не пересмотрят.
-
Quality Gate может быть устроен очень по-разному. Это не обязательно сложная автоматизация и не обязательно большой процесс. На практике гейтом может быть обязательное поле, процентное значение, чекбокс, набор обязательных атрибутов, автоматическая проверка в pipeline или даже отдельный процесс с несколькими участниками. Форма может отличаться, но суть остаётся одной и той же: есть условие, от которого зависит переход дальше.
-
И ключевое: Quality Gate должен приносить ценность. Либо реально повышать качество, либо экономить время, либо снижать количество возвратов, либо улучшать метрики, либо делать процесс прозрачнее и предсказуемее.
Если никакой ценности больше нет, такой гейт не нужно сохранять просто по инерции. Его стоит пересмотреть или вообще убрать.
Автоматизация и shift-left: почему Quality Gate должен срабатывать вовремя
Иногда я встречала практики, где команда буквально созванивается и вместе решает, пройден гейт или нет. В целом сегодня такой подход часто оказывается слишком тяжёлым: он требует лишней синхронизации, занимает время и всё равно остаётся завязанным на ручное решение.
При этом у команд уже обычно есть достаточно инструментов, чтобы многие вещи проверять автоматически: по заполненности обязательных полей, статусам, прохождению тестов, значениям метрик, чекбоксам, правилам в CI/CD или таск-трекере.
Поэтому мне ближе такая логика: договорились, встроили, автоматизировали. Чем меньше критичных проверок держится на ручном решении, тем устойчивее работает процесс.
Пока гейт существует только как устная договорённость, он работает ровно настолько, насколько у команды хватает внимания, дисциплины и ресурса помнить о нём в потоке задач. Совсем другое дело, когда Quality Gate встроен в процесс технически и проверяется автоматически. Это экономит время, убирает часть ручной рутины и делает требования к качеству видимыми для всей команды, а не только для QA, который держит их в голове.
Самые очевидные примеры хорошо знакомы почти всем:
-
перед переходом задачи на code review автоматически запускаются линтеры;
затем идут юнит-тесты; -
отдельно проверяется, что покрытие кода unit-тестами не упало ниже установленного порога;
-
дальше могут запускаться smoke-тесты, которые тоже должны успешно пройти, чтобы задача двинулась дальше по пайплайну.
Если критерий не выполнен, объект просто не едет дальше. В этом как раз сила подхода: системе не нужно «помнить» о правилах, она сама не даёт пройти мимо них.
При этом ценность Quality Gate не только в том, что он автоматизирован, но и в том, насколько рано он срабатывает. И здесь мы уже выходим на логику shift-left: чем раньше команда ставит такую точку контроля, тем дешевле обходится ошибка и тем меньше ресурсов тратится на исправление.
Поэтому многие shift-left-практики по сути тоже могут работать как Quality Gates. Например, составление тест-кейсов до начала разработки. Не обязательно добиваться стопроцентного покрытия всего будущего функционала, но если критические сценарии и happy flow описаны заранее, это уже можно использовать как понятный критерий готовности к следующему шагу.
То же самое касается тестирования документации, авторского тестирования и других ранних проверок.

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

Логика здесь простая: чем проще внедрить практику и чем больше она даёт эффекта, тем логичнее начинать с неё.
Это, конечно, не универсальная формула и не способ измерить все команды одной линейкой. Одна и та же практика в разных контекстах может оказаться и быстрой победой, и тяжёлым организационным проектом. Всё зависит от зрелости процессов, роли QA в команде, доступных инструментов, того, как устроено взаимодействие с разработкой, и просто от текущей загрузки людей.
Но как инструмент приоритизации такая матрица очень полезна. Она помогает не бросаться сразу в историю уровня «сейчас построим идеальный CI с полным автогейтингом», если у команды ещё не оформлены даже базовые критерии того, когда задача вообще готова к тестированию или передаче дальше.
Дальше я разберу несколько гейтов, которые кажутся мне особенно показательными. На них хорошо видно, как такие практики возникают, какую задачу решают и почему одни из них дают быстрый эффект, а другие требуют более зрелой базы.
Gate #1. Ревью тест-кейсов перед тестированием
|
Область |
Тестовая документация |
|
Сложность внедрения |
1 из 3 |
|
Польза |
1 из 3 |
|
Трудности на пути |
Требует много времени |
Профит:
-
Командная работа в улучшении тестового покрытия
-
Предупреждение бас-фактора
К ревью тест-кейсов легко относиться как к чему-то факультативному: написал кейсы — и пошёл тестировать. Но на деле это вполне рабочий кандидат в Quality Gate. Такая практика помогает команде коллективно влиять на качество покрытия и заодно снижает bus factor.
Представим команду, разделённую на два стрима. В одном QA пишет тест-кейсы и тестирует свою часть продукта. В другом — другой QA работает со своей зоной ответственности. Если ревью тест-кейсов не происходит, контекст довольно быстро начинает расходиться: каждый всё лучше знает свой участок и всё хуже ориентируется в чужом. Пока команда работает в стабильном составе, это не всегда заметно. Но как только кто-то уходит в отпуск, переключается на другой приоритет или просто выпадает из процесса, подхватить соседнюю зону становится ощутимо сложнее.
Ревью тест-кейсов частично решает эту проблему. Люди начинают видеть, что именно покрывает коллега, как устроена логика проверок, какие сценарии считаются критичными, а какие — вспомогательными. В результате знание о системе чуть меньше живёт в головах отдельных людей и чуть больше — внутри команды.
Конечно, у этой практики есть вполне понятная цена: время. Ревью требует времени, и это первое возражение, которое обычно возникает. И оно справедливое. Но если смотреть на ревью как на shift-left-практику, которая помогает раньше находить дыры в покрытии, уменьшает количество пропусков и снижает число возвратов позже, такие инвестиции часто оказываются вполне оправданными.
Сам механизм здесь может быть очень простым: тест-кейс написан, обязательные поля заполнены, кейс отправлен на ревью в TMS (тест-менеджмент систему). Если ревью не пройдено — он возвращается на доработку по комментариям. Если пройдено — попадает в основной репозиторий и становится частью согласованной тестовой модели команды.

Gate #2. Тестирование документации до разработки
|
Область |
Тестовая документация |
|
Сложность внедрения |
2 из 3 |
|
Польза |
2 из 3 |
|
Трудности на пути |
Определение критериев тестирования, необходимость наличия качественной документации |
Профит:
-
Определение ошибок на этапе планирования (экономия на исправлениях)
-
Вовлеченность QA на ранних этапах разработки
Если противоречие, пробел в логике или неучтённый сценарий всплывает на этапе планирования, это совсем другой разговор, чем если та же проблема обнаруживается уже после разработки, тестирования и (ещё хуже) релиза.
Есть и второй важный эффект: QA вовлекается в работу раньше и влияет на качество не только в момент проверки готового функционала, но и в момент, когда сам функционал ещё только формируется.
Если оформить это как Quality Gate, правило получается очень понятным: пока тестирование документации не завершено, пока замечания не собраны и критичная часть из них не разобрана, двигаться дальше к разработке нельзя.
Звучит хорошо, но здесь тоже есть свои сложности:
-
Нужно договориться о самих критериях качества документации. Что мы считаем достаточным уровнем проработки? Какие элементы обязательны? Что для команды критично, а что допустимо уточнить позже? Без этих договорённостей гейт быстро превращается в субъективную оценку.
-
Не в каждой команде документация вообще находится в состоянии, пригодном для такого тестирования. И это уже сам по себе важный сигнал о зрелости процесса. Если документацию невозможно проверить до начала разработки, проблема здесь не в отсутствии ещё одного ритуала, а в том, что команде пока не на что опереться на входе.
Базовые принципы тестирования документации всем более-менее знакомы. Но на практике почти всегда полезно дополнить их собственными командными правилами: какие элементы для вас обязательны, какие риски вы хотите закрывать заранее, какие типовые проблемы уже возникали раньше и больше не должны уезжать дальше по процессу.
В этом и заключается ценность такого гейта: он помогает не просто «посмотреть документацию заранее», а сделать раннюю проверку системной и воспроизводимой.
Gate #3. Авторское тестирование
|
Область |
Взаимодействие с разработкой |
|
Сложность внедрения |
2 из 3 |
|
Польза |
3 из 3 |
|
Трудности на пути |
Определить, какие сценарии должны быть проверены |
Профит:
-
Выявление и исправление ошибок на этапе до Code Review
-
«Зеленый» happy-path
-
Фокус QA на более комплексных сценариях
В рамках этой практики разработчик сам проверяет то, что только что реализовал.
Когда задача приходит к QA, команда уже может рассчитывать хотя бы на минимальный гарантированный уровень работоспособности по ключевым сценариям. А значит, снижается вероятность самого бессмысленного типа возврата — когда задача падает буквально на первой же базовой проверке.
Думаю, многим знакома ситуация: задача приезжает в ready for testing, QA открывает стенд, проходит первые критические сценарии — и уже на этом месте что-то ломается. Возникает вполне естественный вопрос: а что было проверено до передачи? Была ли вообще какая-то верификация со стороны автора изменений? Или задача просто формально доехала до следующего статуса?
Авторское тестирование как раз помогает убрать этот класс проблем.
При этом основная трудность здесь обычно не в самой идее, а в конкретике. Что именно разработчик должен проверить? Где границы этой ответственности? На что ориентироваться, чтобы практика не превратилась в абстрактное «ну вы там потестируйте что-нибудь перед передачей»?
Хорошими опорами здесь могут быть acceptance criteria, критические тест-кейсы, happy flow и ключевые пользовательские сценарии. И в этом месте QA как раз может сильно помочь команде: не просто требовать тестирования перед передачей, а дать понятную рамку, что должно быть проверено до входа в полноценное QA-тестирование.
Авторское тестирование — не попытка переложить работу QA на разработчика. Это история про минимальный гарантированный уровень качества в точке передачи. Про то, что задача должна приезжать на следующий этап не в состоянии «проверьте, работает ли это вообще», а в состоянии «базовая жизнеспособность уже подтверждена, теперь можно переходить к более глубокой проверке».
И как только это условие становится обязательным, перед нами уже не просто хорошая практика, а полноценный Quality Gate.
Gate #4. Notes for QA
|
Область |
Взаимодействие с разработкой |
|
Сложность внедрения |
1 из 3 |
|
Польза |
3 из 3 |
|
Трудности на пути |
Объяснить команде, зачем это нужно |
Профит: определение области тестирования глазами разработчика
Эту практику я считаю почти образцовым примером хорошего Quality Gate с невысокой стоимостью внедрения. notes for QA — обязательное поле, в котором разработчик коротко пишет, как тестировать реализованный функционал и на что обратить внимание.
Такое поле можно встроить, например, при переводе задачи в code review или уже в ready for testing — в зависимости от того, как устроен процесс в команде. Но суть от этого не меняется: задача не должна двигаться дальше, пока у QA нет минимального контекста от автора изменений.


Почему это работает? Потому что для QA это быстрый способ увидеть область тестирования глазами разработчика. Автор изменений лучше других понимает, какие части системы были затронуты, какие зависимости могли сработать по цепочке, где спрятаны неочевидные последствия и какие сценарии особенно важно не пропустить.
Само поле можно настраивать под свои задачи. Например, просить указывать:
-
какие области могли быть затронуты косвенно;
-
какие проверки обязательно нужно сделать;
-
какие ограничения или особенности есть у реализации;
-
какие неочевидные сценарии стоит посмотреть.
За счёт такой конкретики notes for QA перестаёт быть формальной отпиской и начинает реально помогать в работе.
Основная сложность внедрения здесь, по моему опыту, почти всегда одна и та же: команде нужно объяснить, зачем это вообще нужно. Иногда действительно возникает вопрос в духе: «Почему я должен описывать, как тестировать? Тогда зачем QA?»
Для меня ответ здесь довольно простой. QA не перестаёт быть QA из-за двух-трёх строк от автора задачи. Наоборот: эти две-три строки позволяют быстрее собрать контекст, точнее определить зону проверки и с большей вероятностью заметить то, что действительно важно. Это не подмена роли, а способ сделать взаимодействие между разработкой и QA менее слепым.
При минимальной стоимости входа это очень полезный гейт. Он не требует сложной автоматизации, не заставляет перестраивать весь процесс, но при этом заметно повышает качество передачи задачи на тестирование. А это именно тот тип практик, с которых часто и стоит начинать.
Gate #5. Definition of Ready for Testing
|
Область |
Взаимодействие с командой |
|
Сложность внедрения |
3 из 3 |
|
Польза |
2 из 3 |
|
Трудности на пути |
Гейт завязан сразу на несколько ролей |
Профит: уверенность, что к моменту перевода задачи в тестирование, встречены необходимые критерии
Обычно команды неплохо знают, что такое DoR и DoD на уровне продукта или разработки. А вот отдельно сформулированный набор критериев для входа задачи в тестирование встречается заметно реже. И зря: на практике это один из самых полезных гейтов.
По сути, Definition of Ready for Testing — это список условий, при выполнении которых задачу действительно можно считать готовой к передаче в QA. Не формально переведённой в нужный статус, а готовой к тестированию по существу.
В такой набор можно включать всё, что для команды реально важно. Например:
сформулированы acceptance criteria
заполнены notes for QA
выполнено авторское тестирование
прошли необходимые автотесты
подготовлены тестовые данные
зафиксированы ключевые изменения
готовы критические тест-кейсы
Польза у такого гейта очень конкретная. Когда задача приходит в тестирование, QA не тратит время на выяснение базовых вещей: что сделано, какие проверки уже были, есть ли описание, что считается готовностью, на что вообще смотреть в первую очередь. Всё это должно быть закрыто ещё на входе.
Поэтому этот гейт хорошо работает как средство борьбы с самым неприятным видом потерь — когда тестирование вроде бы уже началось, а на деле QA всё ещё пытается собрать минимальный контекст, без которого нормальная проверка невозможна.
Сложность в том, что такой гейт почти всегда завязан сразу на несколько ролей. Кто-то должен сформулировать критерии, кто-то — написать notes for QA, кто-то — обеспечить автоматические проверки, кто-то — подготовить окружение или тестовые данные. Но в этом как раз его ценность: он заставляет команду договориться о реальной, а не декларативной готовности задачи к тестированию.
Gate #6. Exit criteria и тест-репорты
|
Область |
тестирование и готовность к релизу |
|
Сложность внедрения |
1 из 3 |
|
Польза |
2 из 3 |
|
Трудности на пути |
согласовать и соблюдать критерии |
Профит: прозрачность на этапе завершения тестирования
Если до этого мы в основном говорили о входе в тестирование, то не менее логичный шаг — выход из него и готовность к релизу.
Здесь очень естественным Quality Gate становятся exit criteria. Стоимость внедрения у такой практики обычно невысокая, а польза — большая. Команда получает прозрачный ответ на вопрос, когда тестирование действительно можно считать завершённым и в каком состоянии задача выходит дальше.
Пример exit criteria может выглядеть так:
Выполнено 100% тест-кейсов с приоритетами Critical/High, результаты зафиксированы
Все дефекты с приоритетом Blocker и Critical устранены, по ним проведен ре-тест
Количество открытых дефектов уровня Medium/Low находится в допустимых пределах и согласовано со стейкхолдерами
Проведены дополнительные виды тестирования (при необходимости):
Performance / нагрузочное тестирование
Security тестирование
Зафиксирован Test Report
Принято решение о готовности релиза (Go / No-Go)
Если условия не выполнены, тестирование не считается завершённым.
Это, на мой взгляд, очень важная точка. Без заранее согласованных exit criteria завершение тестирования слишком легко превращается в ощущение: «вроде всё посмотрели», «кажется, можно выпускать», «ничего страшного не нашли». Quality Gate как раз и нужен для того, чтобы в таких местах у команды была не интуиция, а понятный набор условий.
Рядом с exit criteria я бы обязательно поставила и практику фиксации отчёта о тестировании.
В идеальном мире тест-репорт полезно оставлять по всем задачам, которые проходят через QA, пусть даже в компактном формате: статус, проведённые проверки или ссылки на тест-раны, ограничения, остаточные риски. Но если ресурсов немного, можно начинать фиксировать отчёты о тестировании хотя бы с ключевых задач, релизных изменений и high-impact-фич.
Почему я считаю это важным? Потому что тест-репорт превращает завершение тестирования из ощущения в зафиксированный результат. Он делает качество наблюдаемым. У команды появляется не просто внутреннее чувство, что «всё вроде нормально», а конкретный артефакт, на который можно опереться в момент релиза, обсуждения рисков или последующего разбора.
Gate #7. Автотесты как Quality Gate до и после релиза
|
Область |
пре/пост-релиз |
|
Сложность внедрения |
3 из 3 |
|
Польза |
3 из 3 |
|
Трудности на пути |
требуется отдельная экспертиза и ресурсы |
Профит: возможность оперативно узнать об имеющихся проблемах незадолго до или сразу после релиза
Когда мы говорим об автотестах как о Quality Gate, важно не ограничиваться только ранними стадиями процесса. Да, встроить автоматические проверки на этапе merge request очень логично. Но на этом их роль не заканчивается: автотесты могут работать и ближе к релизу, и сразу после него.
Например, набор ключевых автотестов можно встроить в CI по триггеру merge в master. Тогда незадолго до релиза или сразу после него система автоматически прогоняет критические проверки по всем собранным изменениям. Если тесты падают, можно либо заблокировать развертывание, либо как минимум узнать о проблеме раньше пользователя.
Это тоже полноценный Quality Gate: есть набор обязательных условий, и пока они не выполнены, дальнейшее движение либо невозможно, либо требует отдельного осознанного решения.
Почему здесь выше сложность внедрения? Потому что автоматизация почти всегда дороже, чем кажется на старте. Нужны экспертиза, ресурсы, поддержка, доступы, тестовые данные, инфраструктура. А если речь идёт о проверках, которые затрагивают окружения, близкие к продакшену, добавляются ещё и организационные ограничения.
Но при правильной реализации такой гейт очень силён, поскольку позволяет стабильно проверять всё критическое ещё раз прямо перед запуском.
Gate #8. Shift-right пример: контроль крашей при поэтапной раскатке
|
Область |
пост-релиз |
|
Сложность внедрения |
3 из 3 |
|
Польза |
3 из 3 |
|
Трудности на пути |
нужны ресурсы, если хотим автоматизировать процесс |
Профит: оперативно работаем с хот-фиксами/стопом раскатки в случае алертов о ненадлежащем уровне качества
Отдельно хочу привести пример Quality Gate уже с правой стороны процесса — после релиза. Это кейс из моего опыта мобильного тестирования.
В одной из компаний, где я работала, мы внедряли процесс мониторинга крашей при поэтапной раскатке приложения в сторах. Внедрение было непростым: мы прошли путь от идеи и проектирования до рабочей реализации. Но эффект оказался действительно высоким.
Логика была такой. Приложение раскатывалось не сразу на всех пользователей, а поэтапно: сначала на небольшой процент аудитории, потом на всё больший. Через несколько дней после старта раскатки мы автоматически забирали из Sentry метрику Crash Free Users по нужной версии и сравнивали её с пороговым значением.
Стартовый порог у нас был 97%. Да, это не идеальное значение. Но мы сознательно выбрали его как рабочую отправную точку, с пониманием, что дальше показатель можно и нужно улучшать.
Дальше всё было устроено предельно жёстко:
-
если Crash Free Users выше 97%, команда продолжает работать с крашами в рамках обычной нерелизной политики;
-
если метрика ниже порога, в команду автоматически уходит сообщение с текущим значением;
-
раскатка ставится на паузу;
-
команды оперативно разбирают краши;
-
для критичных случаев делаются hotfix.

Для меня здесь особенно показательно то, что гейт был завязан не только на саму метрику, но и на понятную реакцию системы и команды. Это не ситуация «мы увидели плохое значение и просто приняли к сведению». Это полноценный механизм: условие нарушено — значит, срабатывает заранее оговорённый сценарий действий.
Причём этот сценарий тоже был встроен в процесс. Каждая команда подключала к разбору одного разработчика или одного QA — в зависимости от договорённостей. То есть Quality Gate существовал не сам по себе, а был связан с понятной операционной моделью.
Мне нравится этот пример ещё и потому, что он хорошо расширяет взгляд на тему. Quality Gate — это не только история про задачи, pull request’ы и тестирование до релиза. Он вполне может быть построен вокруг эксплуатационных метрик, если именно там у команды проходит критическая граница качества.
Как Quality Gate помогает расти команде: кейс со smoke suite в CI
Для меня Quality Gates важны не только как инструмент контроля качества, но и как маркер зрелости команды. Причём дело не только в результате. Уже сам путь к хорошему гейту — через обучение, декомпозицию, согласование критериев, выстраивание тестовой модели и работу со стабильностью — меняет команду и делает процесс взрослее.
Хороший пример — путь к smoke suite в CI.
Исходная точка здесь вполне жизненная: небольшая продуктовая команда, несколько десятков неструктурированных тест-кейсов в TMS, накопленный тестовый долг, автотестов пока нет, а базовая smoke-проверка перед тестированием фичи занимает около 30 минут руками. Когда я присоединилась к Островку и мы начинали работать с командами, стартовая картина во многом была такой.
Формальная цель выглядит просто: встроить smoke suite в CI и использовать его как Quality Gate. Но по факту это не история про «добавили ещё одну автоматическую проверку».
По дороге команда получает гораздо больше: растит экспертизу в автоматизации, приводит в порядок тестовую модель, учится приоритизировать сценарии, договаривается о критериях качества и выстраивает процесс поддержки стабильности автотестов.
1. Первый шаг — экспертиза. Сложный Quality Gate не возникает из воздуха: чтобы smoke suite в CI стал реальным механизмом допуска, команда должна до него дорасти. У нас для этого работают планы развития: компания поддерживает обучение, отправку на курсы, а ещё выделяет отдельное время под развитие — с нормальным статусом в календаре и рабочем мессенджере. То есть это не история в духе «поучись после работы, если останутся силы».
Ниже — скрин нашего шаблона PDP: в нём фиксируются навык, область применения, критерии достижения, материалы и этапы по месяцам.В рамках таких PDP мы начинали с изучения языка программирования, затем переходили к библиотекам и фреймворкам, и ставили конкретный критерий достижения – написать первые автотесты. Также подключали ребят с большим опытом к помощи в приобретении экспертизы и ответам на вопросы. Обычно такой план занимает 3–6 месяцев, и это нормально: попытка ускорить его ради быстрой галочки почти всегда выходит боком.

2. Параллельно с первым шагом начинаем подготовку набора сценариев, которые вообще имеет смысл автоматизировать. Мы раскладывали функциональность и тест-кейсы по майндкарте, выделяли наиболее значимые проверки, подключали бизнес-ревью, чтобы смотреть на сценарии не только через severity, но и через priority, матчились с service tiers, актуализировали тест-кейсы, проводили ревью, приводили в порядок репозитории, добавляли теги, приоритеты и статусы автоматизации.
И здесь есть принципиально важный момент: smoke suite должен оставаться быстрым. Если он идёт час на каждый merge request, то как Quality Gate он превращается не в защиту качества, а в тормоз для всей команды.
3. После этого начинается собственно разработка автотестов и их встраивание в CI. На этом этапе команда пишет и ревьюит тесты, проектирует схему запуска, работает с GitLab, а при необходимости наращивает экспертизу по CI или подключает коллег. Сильные смежные функции вроде DevOps здесь, конечно, помогают, но даже если их нет, знания о CI всё равно приходится постепенно выращивать внутри QA.
И очень важно, что сначала такие тесты лучше подключать не как жёсткий блокирующий гейт, а как автоматический или ручной запуск с понятным репортингом и нотификациями — например, в месенджере. Это позволяет посмотреть, как система ведёт себя в реальности, прежде чем начинать останавливать процесс.
4. Дальше начинается самый чувствительный этап — стабильность. Прежде чем smoke suite станет настоящим Quality Gate, команда должна начать ему доверять. Для этого нужно собирать статистику по pass rate и времени прохождения, разбираться с флаками, заводить задачи на отладку и постепенно снижать шум. Для себя я считаю хорошим ориентиром стабильный pass rate от 90% на дистанции, а не в один удачный день. В идеале, конечно, хочется 100%, но на практике туда чаще приходят итеративно: сначала 90%, потом 95%, потом выше. Это важно по очень простой причине: если падение smoke suite неотличимо от очередного нестабильного прогона, никакого настоящего гейта не получится.
5. И только после этого автотесты можно переводить из режима «информируют» в режим «блокируют продвижение». На этом шаге команда определяет порог прохождения, договаривается о реакции на падения, проговаривает правила с разработкой, запускает gate, собирает статистику по найденным багам и поддерживает актуальность тестов по мере изменения функциональности. В идеальном мире smoke проходит целиком. На практике иногда разумно начинать с порога 90–95% и повышать его по мере укрепления стабильности. Полезно и отдельно маркировать баги, найденные автотестами: так эффект виден не только в экономии времени, но и в конкретном результате — сколько проблем было поймано до того, как они уехали дальше.
Если команда стартует почти с нуля, такой путь редко занимает пару недель. По моему опыту, реальный горизонт здесь — полгода и больше. Но в этом кейсе важен не только финальный smoke suite в CI. Важнее то, что по дороге команда получает более зрелую тестовую модель, экспертизу, более ясные правила качества и более прозрачный процесс. И в этом смысле Quality Gate оказывается крайне рабочим инструментом развития команды.

Финальная памятка: как подготовить Quality Gate у себя в команде
Но здесь важно сделать шаг назад и задать себе простой вопрос: а всем ли вообще нужен новый Quality Gate прямо сейчас? Не всегда.
Есть несколько ситуаций, когда с новым гейтом лучше не торопиться:
-
Когда непонятна ценность. Если команда не может внятно объяснить, какую проблему решает новый гейт, с высокой вероятностью получится просто бюрократия.
-
Когда не сформулирована сама проблема. «Давайте добавим ещё одно обязательное поле» — плохая отправная точка. «Нам нужно быстрее понимать область тестирования глазами автора» — уже нормальная.
-
Когда не готов базовый процесс. Если автотесты нестабильны, ими нельзя блокировать pipeline. Если документация хаотична, на ней сложно строить gate для входа в разработку. Когда команда пока не готова по зрелости: не хватает инфраструктуры, роли не договорились о правилах, процесс слишком сырой, а открытой коммуникации недостаточно, чтобы такой механизм вообще заработал. Конечно, Quality Gates сами по себе тоже повышают зрелость команды. Поэтому вопрос не в том, чтобы ждать идеального момента, а в том, чтобы выбирать гейт, который соответствует текущему уровню команды и помогает сделать следующий шаг, а не перепрыгнуть через несколько ступеней сразу.
Если после всех примеров хочется перейти от чужих кейсов к своим, главный вопрос звучит так: как понять, нужен ли команде новый Quality Gate и с чего вообще начинать?
1. Сначала найдите не «идею для улучшения», а повторяющуюся проблему
Хороший Quality Gate почти никогда не начинается с мысли «давайте добавим ещё одно правило». Он начинается с конкретной боли, которая регулярно повторяется и стоит команде времени, нервов или качества.
Обычно такие точки видны в нескольких местах сразу:
-
В метриках: растёт утечка багов в production, тестирование занимает слишком много времени, между статусами много возвратов, релизы тормозятся на одних и тех же типах проблем.
-
В workflow: команда системно спотыкается в одних и тех же местах. Если слишком много времени уходит на разбор требований, возможно, нужен gate в виде тестирования документации или Definition of Ready for Testing. Если в тестирование регулярно приезжают задачи с неработающим happy flow, это уже повод думать про авторское тестирование.
-
В ретроспективах и командных обсуждениях. Если одна и та же боль всплывает снова и снова, её, возможно, пора не просто «держать в уме», а превращать в системное условие перехода между этапами.
-
В самом QA-процессе: много ручной рутины, повторяющихся действий, бессмысленных возвратов и слабая прозрачность по состоянию тестирования — всё это хорошие сигналы, что команде не хватает нового гейта.
2. Формулируйте проблему точно — иначе получится бюрократия
Следующий шаг — назвать проблему как можно конкретнее.
Не «нам нужен ещё один процесс» и не «надо добавить обязательное поле», а, например:
«хотим снизить количество high-priority багов, уходящих в production» или хотим сократить время на вход задачи в тестирование».
Это важный момент: пока проблема сформулирована расплывчато, Quality Gate почти неизбежно получается формальным.
3. Разложите проблему на части и проверьте контекст команды
Если цель — уменьшить утечку критичных багов, дальше почти всегда придётся копнуть глубже: понять причины, выделить повторяющиеся паттерны и только потом выбирать механизм, который реально поможет их предупреждать.
Параллельно важно честно проверить контекст команды:
-
какой у неё уровень зрелости;
-
какие ресурсы вообще доступны;
-
готова ли инфраструктура;
-
договорились ли роли о правилах игры;
-
нет ли сейчас более приоритетной проблемы.
Без этого очень легко придумать красивое решение, которое просто не взлетит в реальной работе.
4. Посмотрите, как похожую задачу решают другие
Здесь очень помогает ресёрч. Полезно смотреть не только на свои команды, но и на соседние, и на чужой опыт. Иногда нужное решение уже существует рядом — просто в другом контексте.
У меня, например, с Quality Gate вокруг крашей при мобильной раскатке очень сработал обмен экспертизой с другой компанией. Внешний взгляд в таких задачах вообще часто экономит много времени.
5. Сначала проектируйте черновик, а не «идеальную систему»
Когда проблема понятна, не стоит сразу пытаться выстроить идеальный механизм. Гораздо полезнее сначала собрать черновой процесс: нарисовать схему, посмотреть варианты, собрать вопросы, обсудить решение с командой и несколько раз итеративно его доработать.
На этом этапе важно ответить на несколько базовых вопросов:
-
где в процессе должен стоять гейт;
-
что именно он проверяет;
-
какое условие считается обязательным;
-
кто отвечает за выполнение;
-
что происходит, если критерий не выполнен;
-
можно ли это автоматизировать сразу или лучше сначала обкатать вручную.
Как только на эти вопросы появляются понятные ответы, Quality Gate перестаёт быть идеей и становится рабочим механизмом.
6. Не зацикливайтесь на форме
Один из самых частых перекосов — искать «настоящий» Quality Gate только среди сложных автоматизированных решений. На практике форма может быть почти любой: чекбокс, обязательное поле, порог по метрике, exit criteria, тест-репорт, автотесты в CI, регулярный разбор по шаблону или даже отдельный процесс с несколькими ролями.
То есть пространство для изобретения здесь довольно большое. Важно не то, как выглядит гейт, а есть ли у него три вещи: понятные критерии, место в процессе и реальная польза.
Допустим, в компании уже есть post-mortem для инцидентов. Тогда возникает логичный вопрос: а можно ли адаптировать эту практику под баги?
Можно. Например, сделать так, чтобы для багов приоритета major и выше работа не считалась завершённой сразу после фикса. Перед закрытием разработчик должен заполнить короткий post-mortem: в чём была причина дефекта, почему он не был пойман раньше и что поможет не допустить похожую проблему в будущем. Пока этого нет, баг не считается закрытым окончательно.
Дальше такой механизм можно усиливать: обсуждать high-priority баги регулярно, приоритизировать action items, назначать ответственных, заводить задачи на профилактику — новые тест-кейсы, дополнительные проверки и так далее.
Это хороший пример Quality Gate, потому что здесь есть всё необходимое: критерии применения, место в workflow, обязательные действия, последствия невыполнения и понятная ценность.
Что в итоге
Главный вывод: Quality Gate — это не «ещё одна обязательная проверка», а способ закрепить важную границу качества в процессе.
У каждой команды этот набор будет своим. Где-то полезнее начать с notes for QA, где-то — с авторского тестирования, где-то — с exit criteria, а где-то — с автотестов в CI. Не существует единственного правильного шаблона.
Зато почти всегда работает одна и та же логика: сначала понять, где команда теряет качество или время, потом превратить эту проблему в конкретное условие, а дальше встроить его в процесс так, чтобы оно действительно работало.
И если это получилось, Quality Gate начинает приносить не только локальную пользу, но и более длинный эффект: делает требования к качеству прозрачнее, усиливает взаимодействие внутри команды и постепенно повышает её зрелость.
Автор: Amatlakhova

