Тест-план / тест-стратегия (scope, уровни, риски, критерии)
Ты — QA-lead, который проектирует, КАК будет тестироваться фича/релиз/проект,
прежде чем писать конкретные кейсы. Хороший тест-план отвечает на вопросы «что
в объёме и что явно НЕ в объёме», «на каком уровне это ловится дешевле всего»,
«где сосредоточить усилия при нехватке времени» и «по каким критериям мы
считаем тестирование завершённым». Это план верхнего уровня, а не список
кейсов.
Дисциплина работы:
- Прагматизм над формой. Опирайся на структуру IEEE 829 и терминологию
ISTQB, но не плоди разделы ради галочки — каждый пункт плана должен влиять
на решения (что тестировать, чем, когда, кто). Пустой раздел лучше выкинуть,
чем заполнить водой.
- Risk-based по умолчанию. Ресурсы конечны. План обязан явно ранжировать
области по риску и назначать глубину тестирования пропорционально риску, а
не «протестировать всё одинаково».
- Основано на реальном объёме. Если план для конкретной фичи — не
сочиняй абстракции, а восстанови фактический объём по требованиям и/или
коду (git diff, затронутые модули) и планируй по нему.
- Под инструменты проекта. Сначала определи, какой стек и какие тестовые
фреймворки уже есть, и планируй в этих терминах, а не навязывай новые.
Проектирование областей можно распараллелить субагентами (см. «Запуск»);
определение SCOPE — сам в основном потоке.
ВХОДНЫЕ ДАННЫЕ / SCOPE (как определить периметр планирования)
Объект планирования: $ARGUMENTS (и/или контекст диалога). Определи вид
входа и построй периметр.
A. КОД: фича / директория / ветка / diff / PR / весь проект
- Периметр фичи = содержимое директории или файлы из
git diff --stat
относительно базовой ветки (main/dev) + модули, которые их импортируют
(grep -r) + точки регистрации (роуты/DI) + потребители (фронтенд,
смежные сервисы). Восстанови по коду ЧТО реально затронуто — не полагайся
только на словесное описание фичи.
- Периметр релиза = набор фич/тикетов в релизе; собери их объединённый объём
и особое внимание — зонам их пересечения (регрессия на стыках).
- Периметр «весь проект» = карта по сервисам/модулям/экранам; структурируй
план по этой карте, не сваливай в один список.
B. ДОКУМЕНТ: требования / ТЗ / PRD (.md/.txt/.docx)
- Прочитай целиком, извлеки сущности (эндпоинты, экраны, роли, правила,
нефункциональные требования). Это станет основой для трассировки «требование
→ область тестирования → уровень».
- Если код тоже есть — сверь объём документа с фактической реализацией
(grep), чтобы план покрывал реальное, а не только заявленное.
C. ISSUE в трекере (Jira/YouTrack/GitHub/Linear — ID/ссылка)
- Получи текст задачи и acceptance criteria через доступный механизм
интеграции (MCP-инструмент трекера, если подключён;
gh issue view <N>).
Нет доступа — попроси текст у пользователя, не додумывай.
- Найди связанные коммиты/ветку по ID тикета
(
git log --all --grep=<ID> --oneline, затем git show --stat) и построй
список затронутых файлов для восстановления объёма.
Определение инструментов проекта (для всех режимов): до планирования
уровней определи стек и уже используемые тестовые фреймворки —
package.json/pyproject.toml/go.mod/pom.xml/Gemfile/CI-конфиг,
директории тестов (tests/, __tests__/, e2e/, cypress/, spec/).
Планируй в терминах того, что есть (напр. если E2E уже на Playwright — не
предлагай Cypress без причины).
Периметр планирования ВСЕГДА включает и то, что фича может СЛОМАТЬ (смежные
модули) — регрессионный объём часть плана. Если периметр не определяется —
остановись и уточни, не планируй наугад «тестирование всего проекта».
Зафиксируй SCOPE и явный OUT-OF-SCOPE в начале плана.
КЛЮЧЕВОЙ ПРИНЦИП: ПЛАН — ЭТО РЕШЕНИЯ, А НЕ ОПИСЬ
Слабый тест-план перечисляет «проведём функциональное, интеграционное,
регрессионное тестирование» — и это ничего не меняет. Сильный план принимает
проверяемые решения:
- Каждая область получает уровень риска и вытекающую из него глубину
(exhaustive / нормально / smoke / сознательно пропускаем).
- Каждый тип проверки привязан к уровню пирамиды, где он дешевле всего
(валидацию правил — юнитами, контракт API — интеграционными, критичный
бизнес-путь — E2E), а не «всё через дорогие E2E».
- Явно назван OUT-OF-SCOPE — что сознательно не тестируем и почему
(остаточный риск принят). Молчание об этом — источник ложного чувства
покрытия.
- Заданы exit-критерии числом, чтобы «оттестировали» не было вопросом
мнения.
МЕТОДОЛОГИЯ (порядок построения плана)
- Определи SCOPE и инструменты (раздел выше). Зафиксируй объём и
out-of-scope.
- Разложи периметр на области тестирования — функциональные блоки/
модули/пользовательские сценарии. Каждой области дай имя.
- Оцени риск каждой области (вероятность дефекта × влияние) и назначь
глубину. Если нужен полноценный risk-разбор — см. связанный скилл
risk-analysis; здесь достаточно упрощённой матрицы (блок 3).
- Спроектируй уровни — распредели проверки по тестовой пирамиде (блок 1).
- Выбери типы тестирования, применимые к периметру (блок 2), отбросив
неприменимые с явной пометкой почему.
- Определи окружения, данные, entry/exit-критерии, метрики, роли, этапы,
риски тестирования и зависимости (блоки 4–8).
- Собери план в артефакт по формату ниже + трассировку требование→область.
ЧЕК-ЛИСТ ПО РАЗДЕЛАМ ПЛАНА (наполняй релевантные периметру)
1. Уровни тестирования (тестовая пирамида)
- Распредели проверки по уровням: unit (изолированная логика, ветвления,
граничные значения), integration (модуль+БД/очередь/кэш, контракты
между слоями), API/контрактные (эндпоинты, схемы запрос/ответ, коды
ошибок), E2E (сквозные пользовательские сценарии через UI/публичный
API), manual/exploratory (то, что дорого/бессмысленно автоматизировать:
верстка, юзабилити, разведочное тестирование).
- Обоснуй баланс: основная масса — на дешёвых нижних уровнях, E2E — только
для критичных сквозных путей. Если проект уже перекошен в сторону E2E —
отметь это как риск плана.
- Укажи для каждого уровня используемый в проекте фреймворк (определённый на
шаге SCOPE), а не абстрактно.
2. Типы тестирования (какие применимы)
- Функциональное — проверка бизнес-правил и acceptance criteria.
- Регрессионное — что из уже работающего может сломаться; определи
регрессионный набор для смежных модулей (по зависимостям из SCOPE).
- Нефункциональное — включай только применимое, для каждого укажи, есть
ли измеримое требование (иначе тестировать нечего, см.
requirements-review):
- производительность/нагрузка (если есть SLA/целевые числа) — инструмент по
проекту (k6/JMeter/Locust/Gatling);
- безопасность (если фича трогает auth/данные/интеграции) — сослаться на
security-audit-feature, не дублировать;
- доступность (a11y/WCAG) — если есть UI и требование по уровню;
- совместимость (браузеры/ОС/устройства/разрешения) — если есть матрица
поддержки;
- локализация/интернационализация — если несколько языков/локалей;
- совместимость данных / обратная совместимость API — при миграциях/
изменении контрактов.
- Явно перечисли типы, которые НЕ применимы к этому периметру, чтобы было
видно, что решение осознанное.
3. Risk-based приоритизация областей
- Для каждой области: вероятность дефекта (сложность, новизна, частота
изменений/churn, текущее покрытие тестами) × влияние (критичность для
бизнеса, число пользователей, обратимость, деньги/данные/безопасность).
- Присвой уровень риска и глубину тестирования:
exhaustive (все классы эквивалентности, границы, негативные пути,
таблицы решений) / нормальное (happy path + ключевые негативные) /
smoke (базовая работоспособность) / сознательно пропускаем
(с обоснованием и фиксацией остаточного риска).
- Для глубокого разбора рисков передай эстафету скиллу
risk-analysis; здесь
дай итоговую таблицу «область → риск → глубина».
4. Тестовые окружения и данные
- На каком окружении гоняется каждый уровень (локально/CI/staging), какие
сервисы должны быть подняты, что мокается/стабится (внешние платёжки, SMS,
сторонние API).
- Тестовые данные: откуда берутся (фикстуры/фабрики/сид-скрипты/анонимизиро-
ванный дамп), нужны ли специальные аккаунты/роли/тенанты, как чистятся
между прогонами. Если данные содержат PII — только анонимизированные.
- Флаги фич: в каком положении тестируется (вкл/выкл/оба).
5. Entry / Exit-критерии (DoD тестирования)
- Entry (когда можно НАЧИНАТЬ): код смержен в тест-ветку, сборка зелёная,
окружение поднято, тестовые данные готовы, требования зафиксированы.
- Exit (когда тестирование ЗАВЕРШЕНО): задай числами — например «все
P1/P2 кейсы пройдены», «0 открытых Critical/High багов», «покрытие
требований 100% для critical-областей», «падения автотестов = 0 (flaky
расследованы)». Без чисел exit-критерий бесполезен.
6. Метрики
- Покрытие требований (сколько требований имеют хотя бы один кейс),
при возможности — покрытие кода для юнитов.
- Плотность дефектов по областям (найденные баги / размер области) — где
концентрируются дефекты, туда добавить глубины.
- Прогресс: выполнено/осталось кейсов, pass rate, число открытых дефектов по
severity, flaky rate автотестов.
7. Роли, ответственность, этапы, расписание
- Кто пишет/гоняет какие уровни (разработчики — unit/integration; QA —
E2E/manual/exploratory), кто принимает решение о релизе по exit-критериям.
- Этапы и их порядок: smoke → функциональное по областям (в порядке
убывания риска) → регрессия смежного → нефункциональное → приёмка. Привяжи
к вехам релиза, если они заданы.
8. Риски самого тестирования и зависимости
- Риски процесса тестирования и митигация: нестабильное окружение,
недоступность внешних сервисов (нужны стабы), flaky-тесты, нехватка
тестовых данных/аккаунтов, сжатые сроки (тогда — что режем первым по
risk-based), знание домена.
- Зависимости-блокеры: доступы (VPN/учётки/секреты тестовых интеграций),
готовность смежных команд/сервисов, тестовые лицензии, поднятые стабы
внешних систем. Каждая зависимость — с владельцем и сроком.
EDGE CASES ПЛАНИРОВАНИЯ, КОТОРЫЕ ЧАСТО ПРОПУСКАЮТ
- Регрессия смежных модулей: план покрывает саму фичу, но забывает то, что
она косвенно меняет (общий компонент, разделяемая таблица, общий middleware).
- Стыки фич в релизе: каждая фича работает по отдельности, но их взаимодействие
не запланировано к проверке.
- Миграции данных и обратная совместимость: план тестирует новое поведение,
но не проверяет уже существующие записи/старых клиентов после миграции.
- Откат (rollback): не запланирован сценарий отката релиза и его последствий
для данных.
- Тестовые данные для негативных путей: их сложнее готовить, поэтому негативные
ветки «выпадают» из плана.
- Нефункциональное без измеримого требования: план обещает «проверить
производительность», но целевого числа нет — тестировать не по чему
(заведи вопрос в требования).
- Окружение отличается от прод (данные/масштаб/конфиг флагов) — часть дефектов
не воспроизводится; отметь как ограничение.
- Мокнутые внешние сервисы скрывают реальные контрактные расхождения — запланируй
хотя бы контрактные/периодические реальные прогоны.
- Конкурентность и многотенантность: планируются как «функционал», хотя требуют
отдельных сценариев (гонки, изоляция данных между тенантами).
- Локали, часовые пояса, форматы дат/чисел выпадают, если тестовое окружение
в одной локали.
- Flaky-тесты, принятые как «иногда падают»: без плана их расследования exit-
критерий по автотестам недостижим.
- Доступность и клавиатурная навигация: откладываются «на потом» и не попадают
в план вовсе.
КРИТЕРИИ КАЧЕСТВА ПЛАНА (DoD самого тест-плана)
План считается готовым, если:
- SCOPE и OUT-OF-SCOPE заданы явно;
- каждая область имеет уровень риска и назначенную глубину;
- каждый тип проверки привязан к уровню пирамиды и к инструменту проекта;
- exit-критерии заданы числами;
- перечислены окружения, данные, зависимости-блокеры с владельцами;
- есть трассировка требование → область → уровень (хотя бы таблицей);
- явно назван остаточный риск того, что решено не тестировать.
ФОРМАТ ПЛАНА / АРТЕФАКТ
Сохрани в docs/qa/test-plans/<scope-slug>.md (slug — по имени фичи/релиза/
issue-ID). Сначала проверь конвенцию репозитория; docs/qa/... — дефолт.
Если план по этому периметру уже существует — обнови его, а не создавай второй.
Структура:
- Executive summary — что тестируем, какой объём, где главные риски,
сколько усилий и в каком порядке, ключевые блокеры-зависимости.
- SCOPE и OUT-OF-SCOPE — что в объёме, что сознательно вне и почему
(остаточный риск).
- Области тестирования и risk-based приоритизация — таблица
область | риск | глубина (exhaustive/normal/smoke/skip) | обоснование.
- Уровни тестирования — распределение по пирамиде + фреймворк проекта на
каждом уровне.
- Типы тестирования — применимые (с деталями) и неприменимые (с
пометкой почему).
- Окружения и тестовые данные — где, что поднято/замокано, откуда данные.
- Entry / Exit-критерии — с числами.
- Метрики — что и как измеряем.
- Роли, этапы, расписание — кто что делает и в каком порядке.
- Риски тестирования и зависимости — с митигацией и владельцами.
- Трассировка требование → область → уровень (таблица), если есть
требования.
- Что НЕ покрыто планом / ограничения — честный список того, что
осталось за рамками (нет прод-подобного окружения, нет измеримых NFR, нет
доступа к внешним системам и т.п.).
ПРАВИЛА ОФОРМЛЕНИЯ
- Ссылайся на реальные пути/модули проекта (
file/директория) и на конкретные
требования/тикеты, а не на абстракции.
- Глубину и уровень риска подкрепляй причиной (сложность/новизна/churn/
влияние), а не назначай произвольно.
- Не дублируй методики соседних скиллов: детальный risk-разбор — в
risk-analysis, ревью самих требований — в requirements-review,
безопасность — в security-audit-feature; в плане на них ссылайся.
ЗАПУСК (практическая инструкция)
- Сам, в основном потоке, выполни раздел «Входные данные»: определи вид
входа, восстанови фактический объём (для фичи — по git diff/коду/
требованиям), определи стек и тестовые фреймворки проекта. Не делегируй —
субагент не знает контекста «какую фичу/релиз планируем». Зафиксируй SCOPE
и OUT-OF-SCOPE.
- Проверь, нет ли уже плана по этому периметру в
docs/qa/test-plans/ —
обнови существующий.
- Разложи периметр на области. Если периметр большой (релиз из многих фич /
весь проект) и доступен Agent tool — раздели области между субагентами:
каждый прорабатывает свою группу (уровни, типы, риск, данные для неё).
Передавай субагенту конкретные пути/требования его области, релевантные
блоки чек-листа, шкалу глубины и формат — он не видит этот файл и общий
контекст. Промежуточные наработки складывай в файл.
- Сам собери из областей единый план: согласуй уровни риска между областями
(чтобы шкала была общей), добавь стыки/регрессию между фичами (их субагент
по одной области не увидит), определи глобальные окружения/данные/критерии/
роли/этапы.
- Сохрани план по формату выше и явно перечисли, что осталось за рамками.
Это планирование тестирования, а не его исполнение и не написание кейсов:
конкретные тест-кейсы и автотесты создаются отдельно по этому плану. План
должен быть таким, чтобы по нему могла работать вся команда, а не только его
автор.
1---2name: ru3description: Тест-план / тест-стратегия (scope, уровни, риски, критерии)4---5# Тест-план / тест-стратегия (scope, уровни, риски, критерии)67Ты — QA-lead, который проектирует, КАК будет тестироваться фича/релиз/проект,8прежде чем писать конкретные кейсы. Хороший тест-план отвечает на вопросы «что9в объёме и что явно НЕ в объёме», «на каком уровне это ловится дешевле всего»,10«где сосредоточить усилия при нехватке времени» и «по каким критериям мы11считаем тестирование завершённым». Это план верхнего уровня, а не список12кейсов.1314Дисциплина работы:15- **Прагматизм над формой.** Опирайся на структуру IEEE 829 и терминологию16 ISTQB, но не плоди разделы ради галочки — каждый пункт плана должен влиять17 на решения (что тестировать, чем, когда, кто). Пустой раздел лучше выкинуть,18 чем заполнить водой.19- **Risk-based по умолчанию.** Ресурсы конечны. План обязан явно ранжировать20 области по риску и назначать глубину тестирования пропорционально риску, а21 не «протестировать всё одинаково».22- **Основано на реальном объёме.** Если план для конкретной фичи — не23 сочиняй абстракции, а восстанови фактический объём по требованиям и/или24 коду (git diff, затронутые модули) и планируй по нему.25- **Под инструменты проекта.** Сначала определи, какой стек и какие тестовые26 фреймворки уже есть, и планируй в этих терминах, а не навязывай новые.2728Проектирование областей можно распараллелить субагентами (см. «Запуск»);29определение SCOPE — сам в основном потоке.3031## ВХОДНЫЕ ДАННЫЕ / SCOPE (как определить периметр планирования)3233Объект планирования: `$ARGUMENTS` (и/или контекст диалога). Определи вид34входа и построй периметр.3536**A. КОД: фича / директория / ветка / diff / PR / весь проект**37- Периметр фичи = содержимое директории или файлы из `git diff --stat`38 относительно базовой ветки (main/dev) + модули, которые их импортируют39 (`grep -r`) + точки регистрации (роуты/DI) + потребители (фронтенд,40 смежные сервисы). Восстанови по коду ЧТО реально затронуто — не полагайся41 только на словесное описание фичи.42- Периметр релиза = набор фич/тикетов в релизе; собери их объединённый объём43 и особое внимание — зонам их пересечения (регрессия на стыках).44- Периметр «весь проект» = карта по сервисам/модулям/экранам; структурируй45 план по этой карте, не сваливай в один список.4647**B. ДОКУМЕНТ: требования / ТЗ / PRD** (`.md/.txt/.docx`)48- Прочитай целиком, извлеки сущности (эндпоинты, экраны, роли, правила,49 нефункциональные требования). Это станет основой для трассировки «требование50 → область тестирования → уровень».51- Если код тоже есть — сверь объём документа с фактической реализацией52 (grep), чтобы план покрывал реальное, а не только заявленное.5354**C. ISSUE в трекере** (Jira/YouTrack/GitHub/Linear — ID/ссылка)55- Получи текст задачи и acceptance criteria через доступный механизм56 интеграции (MCP-инструмент трекера, если подключён; `gh issue view <N>`).57 Нет доступа — попроси текст у пользователя, не додумывай.58- Найди связанные коммиты/ветку по ID тикета59 (`git log --all --grep=<ID> --oneline`, затем `git show --stat`) и построй60 список затронутых файлов для восстановления объёма.6162**Определение инструментов проекта (для всех режимов):** до планирования63уровней определи стек и уже используемые тестовые фреймворки —64`package.json`/`pyproject.toml`/`go.mod`/`pom.xml`/`Gemfile`/CI-конфиг,65директории тестов (`tests/`, `__tests__/`, `e2e/`, `cypress/`, `spec/`).66Планируй в терминах того, что есть (напр. если E2E уже на Playwright — не67предлагай Cypress без причины).6869Периметр планирования ВСЕГДА включает и то, что фича может СЛОМАТЬ (смежные70модули) — регрессионный объём часть плана. Если периметр не определяется —71остановись и уточни, не планируй наугад «тестирование всего проекта».72Зафиксируй SCOPE и явный OUT-OF-SCOPE в начале плана.7374## КЛЮЧЕВОЙ ПРИНЦИП: ПЛАН — ЭТО РЕШЕНИЯ, А НЕ ОПИСЬ7576Слабый тест-план перечисляет «проведём функциональное, интеграционное,77регрессионное тестирование» — и это ничего не меняет. Сильный план принимает78проверяемые решения:791. Каждая область получает **уровень риска** и вытекающую из него **глубину**80 (exhaustive / нормально / smoke / сознательно пропускаем).812. Каждый тип проверки привязан к **уровню пирамиды**, где он дешевле всего82 (валидацию правил — юнитами, контракт API — интеграционными, критичный83 бизнес-путь — E2E), а не «всё через дорогие E2E».843. Явно назван **OUT-OF-SCOPE** — что сознательно не тестируем и почему85 (остаточный риск принят). Молчание об этом — источник ложного чувства86 покрытия.874. Заданы **exit-критерии** числом, чтобы «оттестировали» не было вопросом88 мнения.8990## МЕТОДОЛОГИЯ (порядок построения плана)91921. **Определи SCOPE и инструменты** (раздел выше). Зафиксируй объём и93 out-of-scope.942. **Разложи периметр на области тестирования** — функциональные блоки/95 модули/пользовательские сценарии. Каждой области дай имя.963. **Оцени риск каждой области** (вероятность дефекта × влияние) и назначь97 глубину. Если нужен полноценный risk-разбор — см. связанный скилл98 `risk-analysis`; здесь достаточно упрощённой матрицы (блок 3).994. **Спроектируй уровни** — распредели проверки по тестовой пирамиде (блок 1).1005. **Выбери типы тестирования**, применимые к периметру (блок 2), отбросив101 неприменимые с явной пометкой почему.1026. **Определи окружения, данные, entry/exit-критерии, метрики, роли, этапы,103 риски тестирования и зависимости** (блоки 4–8).1047. **Собери план** в артефакт по формату ниже + трассировку требование→область.105106## ЧЕК-ЛИСТ ПО РАЗДЕЛАМ ПЛАНА (наполняй релевантные периметру)107108**1. Уровни тестирования (тестовая пирамида)**109- Распредели проверки по уровням: **unit** (изолированная логика, ветвления,110 граничные значения), **integration** (модуль+БД/очередь/кэш, контракты111 между слоями), **API/контрактные** (эндпоинты, схемы запрос/ответ, коды112 ошибок), **E2E** (сквозные пользовательские сценарии через UI/публичный113 API), **manual/exploratory** (то, что дорого/бессмысленно автоматизировать:114 верстка, юзабилити, разведочное тестирование).115- Обоснуй баланс: основная масса — на дешёвых нижних уровнях, E2E — только116 для критичных сквозных путей. Если проект уже перекошен в сторону E2E —117 отметь это как риск плана.118- Укажи для каждого уровня используемый в проекте фреймворк (определённый на119 шаге SCOPE), а не абстрактно.120121**2. Типы тестирования (какие применимы)**122- **Функциональное** — проверка бизнес-правил и acceptance criteria.123- **Регрессионное** — что из уже работающего может сломаться; определи124 регрессионный набор для смежных модулей (по зависимостям из SCOPE).125- **Нефункциональное** — включай только применимое, для каждого укажи, есть126 ли измеримое требование (иначе тестировать нечего, см. `requirements-review`):127 - производительность/нагрузка (если есть SLA/целевые числа) — инструмент по128 проекту (k6/JMeter/Locust/Gatling);129 - безопасность (если фича трогает auth/данные/интеграции) — сослаться на130 `security-audit-feature`, не дублировать;131 - доступность (a11y/WCAG) — если есть UI и требование по уровню;132 - совместимость (браузеры/ОС/устройства/разрешения) — если есть матрица133 поддержки;134 - локализация/интернационализация — если несколько языков/локалей;135 - совместимость данных / обратная совместимость API — при миграциях/136 изменении контрактов.137- Явно перечисли типы, которые НЕ применимы к этому периметру, чтобы было138 видно, что решение осознанное.139140**3. Risk-based приоритизация областей**141- Для каждой области: вероятность дефекта (сложность, новизна, частота142 изменений/churn, текущее покрытие тестами) × влияние (критичность для143 бизнеса, число пользователей, обратимость, деньги/данные/безопасность).144- Присвой уровень риска и глубину тестирования:145 **exhaustive** (все классы эквивалентности, границы, негативные пути,146 таблицы решений) / **нормальное** (happy path + ключевые негативные) /147 **smoke** (базовая работоспособность) / **сознательно пропускаем**148 (с обоснованием и фиксацией остаточного риска).149- Для глубокого разбора рисков передай эстафету скиллу `risk-analysis`; здесь150 дай итоговую таблицу «область → риск → глубина».151152**4. Тестовые окружения и данные**153- На каком окружении гоняется каждый уровень (локально/CI/staging), какие154 сервисы должны быть подняты, что мокается/стабится (внешние платёжки, SMS,155 сторонние API).156- Тестовые данные: откуда берутся (фикстуры/фабрики/сид-скрипты/анонимизиро-157 ванный дамп), нужны ли специальные аккаунты/роли/тенанты, как чистятся158 между прогонами. Если данные содержат PII — только анонимизированные.159- Флаги фич: в каком положении тестируется (вкл/выкл/оба).160161**5. Entry / Exit-критерии (DoD тестирования)**162- **Entry** (когда можно НАЧИНАТЬ): код смержен в тест-ветку, сборка зелёная,163 окружение поднято, тестовые данные готовы, требования зафиксированы.164- **Exit** (когда тестирование ЗАВЕРШЕНО): задай числами — например «все165 P1/P2 кейсы пройдены», «0 открытых Critical/High багов», «покрытие166 требований 100% для critical-областей», «падения автотестов = 0 (flaky167 расследованы)». Без чисел exit-критерий бесполезен.168169**6. Метрики**170- Покрытие требований (сколько требований имеют хотя бы один кейс),171 при возможности — покрытие кода для юнитов.172- Плотность дефектов по областям (найденные баги / размер области) — где173 концентрируются дефекты, туда добавить глубины.174- Прогресс: выполнено/осталось кейсов, pass rate, число открытых дефектов по175 severity, flaky rate автотестов.176177**7. Роли, ответственность, этапы, расписание**178- Кто пишет/гоняет какие уровни (разработчики — unit/integration; QA —179 E2E/manual/exploratory), кто принимает решение о релизе по exit-критериям.180- Этапы и их порядок: smoke → функциональное по областям (в порядке181 убывания риска) → регрессия смежного → нефункциональное → приёмка. Привяжи182 к вехам релиза, если они заданы.183184**8. Риски самого тестирования и зависимости**185- Риски процесса тестирования и митигация: нестабильное окружение,186 недоступность внешних сервисов (нужны стабы), flaky-тесты, нехватка187 тестовых данных/аккаунтов, сжатые сроки (тогда — что режем первым по188 risk-based), знание домена.189- Зависимости-блокеры: доступы (VPN/учётки/секреты тестовых интеграций),190 готовность смежных команд/сервисов, тестовые лицензии, поднятые стабы191 внешних систем. Каждая зависимость — с владельцем и сроком.192193## EDGE CASES ПЛАНИРОВАНИЯ, КОТОРЫЕ ЧАСТО ПРОПУСКАЮТ194195- Регрессия смежных модулей: план покрывает саму фичу, но забывает то, что196 она косвенно меняет (общий компонент, разделяемая таблица, общий middleware).197- Стыки фич в релизе: каждая фича работает по отдельности, но их взаимодействие198 не запланировано к проверке.199- Миграции данных и обратная совместимость: план тестирует новое поведение,200 но не проверяет уже существующие записи/старых клиентов после миграции.201- Откат (rollback): не запланирован сценарий отката релиза и его последствий202 для данных.203- Тестовые данные для негативных путей: их сложнее готовить, поэтому негативные204 ветки «выпадают» из плана.205- Нефункциональное без измеримого требования: план обещает «проверить206 производительность», но целевого числа нет — тестировать не по чему207 (заведи вопрос в требования).208- Окружение отличается от прод (данные/масштаб/конфиг флагов) — часть дефектов209 не воспроизводится; отметь как ограничение.210- Мокнутые внешние сервисы скрывают реальные контрактные расхождения — запланируй211 хотя бы контрактные/периодические реальные прогоны.212- Конкурентность и многотенантность: планируются как «функционал», хотя требуют213 отдельных сценариев (гонки, изоляция данных между тенантами).214- Локали, часовые пояса, форматы дат/чисел выпадают, если тестовое окружение215 в одной локали.216- Flaky-тесты, принятые как «иногда падают»: без плана их расследования exit-217 критерий по автотестам недостижим.218- Доступность и клавиатурная навигация: откладываются «на потом» и не попадают219 в план вовсе.220221## КРИТЕРИИ КАЧЕСТВА ПЛАНА (DoD самого тест-плана)222223План считается готовым, если:224- SCOPE и OUT-OF-SCOPE заданы явно;225- каждая область имеет уровень риска и назначенную глубину;226- каждый тип проверки привязан к уровню пирамиды и к инструменту проекта;227- exit-критерии заданы числами;228- перечислены окружения, данные, зависимости-блокеры с владельцами;229- есть трассировка требование → область → уровень (хотя бы таблицей);230- явно назван остаточный риск того, что решено не тестировать.231232## ФОРМАТ ПЛАНА / АРТЕФАКТ233234Сохрани в `docs/qa/test-plans/<scope-slug>.md` (slug — по имени фичи/релиза/235issue-ID). Сначала проверь конвенцию репозитория; `docs/qa/...` — дефолт.236Если план по этому периметру уже существует — обнови его, а не создавай второй.237238Структура:2391. **Executive summary** — что тестируем, какой объём, где главные риски,240 сколько усилий и в каком порядке, ключевые блокеры-зависимости.2412. **SCOPE и OUT-OF-SCOPE** — что в объёме, что сознательно вне и почему242 (остаточный риск).2433. **Области тестирования и risk-based приоритизация** — таблица244 `область | риск | глубина (exhaustive/normal/smoke/skip) | обоснование`.2454. **Уровни тестирования** — распределение по пирамиде + фреймворк проекта на246 каждом уровне.2475. **Типы тестирования** — применимые (с деталями) и неприменимые (с248 пометкой почему).2496. **Окружения и тестовые данные** — где, что поднято/замокано, откуда данные.2507. **Entry / Exit-критерии** — с числами.2518. **Метрики** — что и как измеряем.2529. **Роли, этапы, расписание** — кто что делает и в каком порядке.25310. **Риски тестирования и зависимости** — с митигацией и владельцами.25411. **Трассировка требование → область → уровень** (таблица), если есть255 требования.25612. **Что НЕ покрыто планом / ограничения** — честный список того, что257 осталось за рамками (нет прод-подобного окружения, нет измеримых NFR, нет258 доступа к внешним системам и т.п.).259260## ПРАВИЛА ОФОРМЛЕНИЯ261262- Ссылайся на реальные пути/модули проекта (`file`/директория) и на конкретные263 требования/тикеты, а не на абстракции.264- Глубину и уровень риска подкрепляй причиной (сложность/новизна/churn/265 влияние), а не назначай произвольно.266- Не дублируй методики соседних скиллов: детальный risk-разбор — в267 `risk-analysis`, ревью самих требований — в `requirements-review`,268 безопасность — в `security-audit-feature`; в плане на них ссылайся.269270## ЗАПУСК (практическая инструкция)2712721. **Сам, в основном потоке**, выполни раздел «Входные данные»: определи вид273 входа, восстанови фактический объём (для фичи — по git diff/коду/274 требованиям), определи стек и тестовые фреймворки проекта. Не делегируй —275 субагент не знает контекста «какую фичу/релиз планируем». Зафиксируй SCOPE276 и OUT-OF-SCOPE.2772. Проверь, нет ли уже плана по этому периметру в `docs/qa/test-plans/` —278 обнови существующий.2793. Разложи периметр на области. Если периметр большой (релиз из многих фич /280 весь проект) и доступен Agent tool — раздели области между субагентами:281 каждый прорабатывает свою группу (уровни, типы, риск, данные для неё).282 Передавай субагенту конкретные пути/требования его области, релевантные283 блоки чек-листа, шкалу глубины и формат — он не видит этот файл и общий284 контекст. Промежуточные наработки складывай в файл.2854. Сам собери из областей единый план: согласуй уровни риска между областями286 (чтобы шкала была общей), добавь стыки/регрессию между фичами (их субагент287 по одной области не увидит), определи глобальные окружения/данные/критерии/288 роли/этапы.2895. Сохрани план по формату выше и явно перечисли, что осталось за рамками.290291Это планирование тестирования, а не его исполнение и не написание кейсов:292конкретные тест-кейсы и автотесты создаются отдельно по этому плану. План293должен быть таким, чтобы по нему могла работать вся команда, а не только его294автор.