# Чеклист QA

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

## Анализ требований

QA начинается не с кликов по интерфейсу, а с проверки требований на полноту, ясность, противоречия и тестируемость.

### Проверить требования на тестируемость

Найти неясные формулировки, пропуски и противоречия до начала тестирования.

**Что это дает:** Чем раньше QA задает вопросы, тем дешевле исправлять требования и дизайн.

**Как выполнить:**
- Прочитайте user story и acceptance criteria.
- Отметьте неоднозначные слова: быстро, удобно, корректно, понятно.
- Сформулируйте вопросы владельцу требования.

**Критерии приемки:**
- Неясные требования вынесены в список вопросов.
- Ответы зафиксированы в задаче.
- Критерии приемки можно проверить.

### Определить риски качества

Понять, где дефект нанесет наибольший вред пользователю или бизнесу.

**Что это дает:** Risk-based testing помогает тестировать глубже там, где цена ошибки выше.

**Как выполнить:**
- Определите критические пользовательские сценарии.
- Оцените вероятность и влияние дефекта.
- Выделите области для углубленных проверок.

**Критерии приемки:**
- Есть список рисков.
- Критические сценарии получили высокий приоритет.
- Команда согласовала уровень риска релиза.

### Подготовить тестовые данные

Создать данные для позитивных, негативных и граничных сценариев.

**Что это дает:** Хорошие тестовые данные делают проверки воспроизводимыми и сокращают время на ручную подготовку.

**Как выполнить:**
- Опишите нужные роли, статусы, тарифы, заказы и ограничения.
- Подготовьте данные для edge cases.
- Проверьте, что данные можно восстановить после теста.

**Критерии приемки:**
- Данные доступны в тестовой среде.
- Есть инструкция восстановления.
- Негативные сценарии не требуют ручного хака.

## Тест-дизайн

Тест-дизайн помогает выбрать достаточный набор проверок: не тестировать все подряд, но закрыть важные риски.

### Составить тест-кейсы для критических сценариев

Описать проверки так, чтобы их мог выполнить другой QA или разработчик.

**Что это дает:** Тест-кейсы сохраняют знание о продукте и помогают повторять проверки без потери качества.

**Как выполнить:**
- Выберите сценарии из требований и рисков.
- Опишите шаги, данные и ожидаемый результат.
- Укажите приоритет и тип проверки.

**Критерии приемки:**
- Критические сценарии покрыты.
- Ожидаемый результат конкретен.
- Тест-кейсы связаны с требованиями.

### Применить техники тест-дизайна

Использовать классы эквивалентности, граничные значения, таблицы решений и pairwise.

**Что это дает:** Техники тест-дизайна дают хорошее покрытие без бесконечного перебора вариантов.

**Как выполнить:**
- Разбейте входные данные на классы эквивалентности.
- Добавьте граничные значения.
- Для сложной логики используйте таблицу решений.

**Критерии приемки:**
- Проверки обоснованы техникой.
- Границы и комбинации покрыты.
- Лишние дубли удалены.

### Связать требования и проверки

Построить traceability между требованиями, тестами и дефектами.

**Что это дает:** Traceability показывает, что именно покрыто тестами и где изменение требования требует обновить проверки.

**Как выполнить:**
- Свяжите тест-кейсы с user stories.
- Отмечайте дефекты на уровне требования.
- Проверяйте покрытие перед релизом.

**Критерии приемки:**
- У требований есть связанные проверки.
- Понятны непокрытые зоны.
- Дефекты связаны с затронутым требованием.

## Выполнение проверок

На этапе выполнения QA проверяет продукт системно: с понятными данными, окружением, фиксацией результата и воспроизводимыми дефектами.

### Выполнить smoke-тесты

Быстро проверить, что сборка пригодна для дальнейшего тестирования.

**Что это дает:** Smoke экономит время: если базовые сценарии сломаны, глубокое тестирование бессмысленно.

**Как выполнить:**
- Определите минимальный набор критических сценариев.
- Выполняйте smoke после деплоя на тестовую среду.
- Останавливайте тестирование при критическом падении.

**Критерии приемки:**
- Smoke-набор опубликован.
- Результат зафиксирован.
- Критические падения сразу эскалированы.

### Оформить качественный bug report

Зафиксировать дефект так, чтобы разработчик мог быстро понять и воспроизвести проблему.

**Что это дает:** Хороший bug report сокращает цикл исправления и уменьшает количество уточнений.

**Как выполнить:**
- Укажите окружение, шаги, фактический и ожидаемый результат.
- Добавьте скриншот, видео, логи или request/response.
- Оцените severity и priority.

**Критерии приемки:**
- Дефект воспроизводится по шагам.
- Есть доказательство проблемы.
- Severity и priority объяснены.

### Провести retest исправленного дефекта

Проверить, что конкретный дефект исправлен и не повторяется на указанных данных.

**Что это дает:** Retest подтверждает исправление, но не заменяет регрессионную проверку соседних сценариев.

**Как выполнить:**
- Возьмите исходные шаги воспроизведения.
- Проверьте исправление на той же среде и версии.
- При необходимости добавьте смежные проверки.

**Критерии приемки:**
- Дефект закрыт только после успешного retest.
- Версия исправления указана.
- Смежные риски проверены или вынесены отдельно.

## Регрессия и релиз

Перед релизом важно проверить не только новую функцию, но и критические старые сценарии, которые могли сломаться.

### Спланировать регрессию

Выбрать набор проверок, который защищает важные старые сценарии перед релизом.

**Что это дает:** Регрессия снижает риск, что новая функциональность сломает работающие части продукта.

**Как выполнить:**
- Определите затронутые модули.
- Выберите critical path и интеграционные сценарии.
- Согласуйте время и владельцев регрессии.

**Критерии приемки:**
- Regression scope утвержден.
- Проверки привязаны к рискам релиза.
- Результат доступен команде.

### Подготовить QA verdict по релизу

Сформулировать состояние качества и риски, чтобы команда могла принять release decision.

**Что это дает:** QA verdict не решает за бизнес, но дает честную информацию о качестве и известных рисках.

**Как выполнить:**
- Соберите результаты smoke, regression и critical bugs.
- Опишите known issues и workaround.
- Дайте рекомендацию: go, go with risks или no-go.

**Критерии приемки:**
- Вердикт опубликован до релиза.
- Риски понятны stakeholders.
- Известные дефекты имеют владельцев.

### Разобрать дефекты после релиза

Понять, почему дефект дошел до production и как улучшить процесс.

**Что это дает:** Разбор production defects улучшает требования, тест-дизайн, автоматизацию и релизный контроль.

**Как выполнить:**
- Опишите путь дефекта от требования до релиза.
- Определите, какая проверка могла его поймать.
- Добавьте изменение в процесс или тестовый набор.

**Критерии приемки:**
- Root cause описан.
- Есть preventive action.
- Новый контроль добавлен в чеклист или автотесты.

## Автоматизация

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

### Выбрать кандидатов для автоматизации

Определить проверки, которые дают ценность при регулярном автоматическом запуске.

**Что это дает:** Автоматизировать стоит стабильные, повторяемые и важные сценарии, а не все ручные проверки подряд.

**Как выполнить:**
- Оцените частоту выполнения проверки.
- Проверьте стабильность функциональности.
- Сравните стоимость автоматизации и ручного выполнения.

**Критерии приемки:**
- Есть список кандидатов с приоритетом.
- Кандидаты связаны с рисками.
- Нестабильные зоны не автоматизированы преждевременно.

### Контролировать flaky-тесты

Выявлять нестабильные автотесты и быстро возвращать доверие к тестовому набору.

**Что это дает:** Flaky-тесты разрушают доверие к автоматизации: команда перестает реагировать даже на реальные падения.

**Как выполнить:**
- Отмечайте тесты, которые падают без изменения продукта.
- Изолируйте причины: данные, ожидания, сеть, асинхронность.
- Чините или временно выводите тест из quality gate.

**Критерии приемки:**
- Flaky-тесты видны в отчете.
- Есть владелец исправления.
- Quality gate не зависит от заведомо шумных проверок.

### Интегрировать проверки в CI

Запускать нужные уровни тестов автоматически на pull request, merge и релизных сборках.

**Что это дает:** CI дает быстрый сигнал о регрессии и помогает ловить проблемы до ручной приемки.

**Как выполнить:**
- Определите, какие тесты запускать на каждом событии.
- Разделите быстрые и долгие наборы.
- Публикуйте отчет так, чтобы команда видела причину падения.

**Критерии приемки:**
- CI запускает тесты по правилам.
- Отчет доступен команде.
- Падение quality gate блокирует небезопасный merge или релиз.
