Плейбук тестировщика

Полный справочник по видам и типам тестирования, техникам тест-дизайна и методам расчёта количества тест-кейсов

Версия 1.0 • 2026

1. Введение в плейбук тестировщика

Этот плейбук — полный справочник по теории и практике тестирования программного обеспечения. Он охватывает все виды и типы тестирования, техники тест-дизайна и методы расчёта количества тест-кейсов. Материал структурирован для быстрого поиска и практического применения.

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

2. Классификация видов и типов тестирования

Тестирование ПО классифицируется по множеству признаков. Ниже приведены основные классификации с подробными таблицами.

2.1 По уровню тестирования (Test Levels)

УровеньОбъектКто выполняетОсновная цельИнструменты
Модульное (Unit)Отдельные функции, методы, классыРазработчикиПроверка корректности изолированных компонентовPytest, JUnit, NUnit, Jest, Mocha
Интеграционное (Integration)Взаимодействие между модулямиРазработчики, QAПроверка API-контрактов, протоколов обменаPostman, REST Assured, WireMock
Системное (System)Система в целомQA-инженерыПроверка функциональных и нефункциональных требованийSelenium, Cypress, Playwright
Приемочное (Acceptance)Готовый продуктЗаказчик, UAT-командаПодтверждение готовности к релизуCucumber, FitNesse, ручное
Пирамида тестирования (Test Pyramid): Unit-тесты — основа (70%), Integration — средний слой (20%), E2E — вершина (10%). Для мобильных и сложных систем используется «призма тестирования» с акцентом на интеграционные тесты.

Подвиды по уровню:

  • Component testing: тестирование больших компонентов (модулей), состоящих из множества классов
  • Integration testing: может быть Big Bang (все сразу) или Incremental (постепенно: Top-Down, Bottom-Up)
  • System Integration: взаимодействие с внешними системами (Third-party API, DB, legacy)
  • Alpha / Beta testing: подвид приемочного — на стороне разработчика / у ограниченного круга пользователей

2.2 По знанию внутреннего устройства (Test Approaches)

ПодходЗнание внутреннего кодаДоступ к архитектуреКогда применяется
Black Box (Чёрный ящик)НетНетФункциональное тестирование, UI, API, приёмочные тесты
White Box (Белый ящик)ПолноеДаUnit-тесты, покрытие кода, оптимизация, security
Grey Box (Серый ящик)ЧастичноеЧастичный (API, DB)Интеграционные тесты, API-тесты, пентест

White Box техники:

  • Statement Coverage: каждая строка кода выполнена хотя бы раз
  • Branch Coverage: каждое условие (if/else) было true и false
  • Path Coverage: каждый возможный путь в коде пройден
  • Condition Coverage: каждый атомарный булевый подвыражение — true и false
  • MC/DC (Modified Condition/Decision Coverage): каждое условие независимо влияет на решение — стандарт для DO-178C (авиация)

2.3 По степени автоматизации

ТипОписаниеПлюсыМинусы
Ручное (Manual)Тестировщик вручную выполняет тест-кейсыГибкость, исследовательский подход, UX-оценкаМедленно, дорого на регрессии, human error
Автоматизированное (Automated)Скрипты выполняют тесты автоматическиБыстро, регрессия за минуты, CI/CDРазработка скриптов, поддержка, ложно-позитивные
ПолуавтоматическоеКомбинация ручных и автоматических шаговБаланс гибкости и скоростиСложность в поддержке сценариев

Что стоит автоматизировать:

  • Регрессионные тесты (Core functionality)
  • Smoke-тесты при каждом деплое
  • API-тесты (быстрые, стабильные)
  • Тесты производительности (нагрузка)
  • Data-driven тесты (много данных)

2.4 По целям и задачам

ТипЦельКогда выполняетсяПродолжительность
SmokeПроверить критическую функциональность (дымовое)После каждого билда5-15 мин
SanityПроверить конкретные исправленияПосле фикса бага10-30 мин
RegressionПроверить, что изменения не сломали existing functionalityПеред релизом, в CI/CDОт 1 часа до дней
Re-testingПроверить, что конкретный баг исправленПосле фикса бага5-20 мин
ConfirmationПодтвердить, что исправление работает корректноПосле деплоя фикса10-30 мин
End-to-End (E2E)Проверить полный пользовательский сценарийПеред релизомОт 30 мин
ExploratoryИсследовать продукт без сценариев, найти неочевидные проблемыНа любом этапеОт 1 часа
Ad-hocСпонтанное тестирование без документацииПри необходимостиОт 10 мин
GUI / UIПроверка пользовательского интерфейсаНа всех этапахЗависит от объёма
Usability (Юзабилити)Проверка удобства использованияПеред релизом UI1-3 дня
Accessibility (Доступность)Проверка доступа для людей с ограничениямиПеред релизом1-2 дня

2.5 Функциональное тестирование (Functional Testing)

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

ПодвидЧто проверяетПример
FunctionalБазовые функции: авторизация, CRUD, расчётыПроверка входа в систему с правильным паролем
SecurityБезопасность: аутентификация, авторизация, шифрованиеПроверка SQL-инъекций, XSS
InteroperabilityВзаимодействие с другими системамиПроверка экспорта в PDF, интеграция с CRM
Data IntegrityЦелостность данныхПроверка, что после ошибки данные не повреждены
InstallationУстановка, обновление, удалениеПроверка чистой установки, обновления с предыдущей версии
ComplianceСоответствие стандартам и регуляциямGDPR, PCI DSS, HIPAA, SOX
LocalizationПеревод и адаптация для регионаПроверка языков, валют, форматов дат

2.6 Нефункциональное тестирование (Non-Functional Testing)

ТипЧто проверяетМетрикиИнструменты
PerformanceСкорость работы системыLatency, Throughput, Response TimeJMeter, k6, Locust, Gatling
LoadПоведение под ожидаемой нагрузкойRPS, Concurrent Users, CPU/RAM usageJMeter, Yandex.Tank
StressПоведение при превышении нагрузкиТочка отказа, восстановлениеJMeter, Chaos Monkey
Soak (Endurance)Стабильность в течение длительного времениMemory leak, degradation over timeJMeter, Locust
ScalabilityСпособность масштабироватьсяCost per RPS, speed of scale-upk6, custom scripts
ReliabilityВероятность безотказной работыMTBF, MTTR, Availability %Prometheus, Grafana
UsabilityУдобство использованияTask success rate, Time on task, SUS scoreUserTesting, Hotjar, Maze
SecurityЗащищённость от атакКоличество уязвимостей, CVSS scoreOWASP ZAP, Burp Suite, Nessus
PortabilityПереносимость между средамиКоличество совместимых платформCross-browser testing, Docker
MaintainabilityЛёгкость поддержки кодаCyclomatic complexity, Code churnSonarQube, CodeClimate
RecoverabilityСпособность восстанавливаться после сбоевRTO, RPOChaos Engineering, Disaster Recovery drills

Подвиды Performance тестирования:

  • Spike testing: резкий скачок нагрузки (например, Black Friday)
  • Volume testing: обработка большого объёма данных
  • Capacity testing: определение максимальной ёмкости системы
  • Latency testing: задержка при передаче данных
  • Throughput testing: пропускная способность (транзакций/сек)

2.7 По времени выполнения тестов

ТипОписаниеПример
Static (Статическое)Без запуска кода. Анализ кода, документации, требованийCode review, статический анализ (SonarQube), linting, review спецификации
Dynamic (Динамическое)С запуском кода. Выполнение тестов в runtimeЛюбой запуск программы с тестовыми данными

Методы статического тестирования:

  • Informal review: неформальное обсуждение кода/документации
  • Walkthrough: автор ведёт участников по материалу
  • Technical review: техническая экспертиза коллегами
  • Inspection: формальная проверка с ролями (автор, чтец, секретарь)
  • Static analysis: автоматическая проверка кода без запуска

3. Техники тест-дизайна (Test Design Techniques)

Техники тест-дизайна — это методы создания тестов, обеспечивающие максимальное покрытие при минимальном количестве тест-кейсов. Каждая техника имеет свою формулу расчёта количества тестов.

3.1 Эквивалентное разделение (Equivalence Partitioning / EP)

Суть: Разбиение входных данных на классы эквивалентности, внутри которых система ведёт себя одинаково. Из каждого класса выбирается один представитель.

N = количество классов эквивалентности

Правила выделения классов:

  • Корректные (валидные) классы: данные, которые система должна успешно обработать
  • Некорректные (невалидные) классы: данные, которые система должна отклонить
  • Каждый класс содержит бесконечное количество значений, эквивалентных в поведении
  • Если один представитель класса проходит — весь класс считается пройденным
  • Один дефект может покрывать целый класс (bug masking)

Пример:

Поле «Возраст» принимает значения от 18 до 60:

КлассТипПредставитель
< 18Невалидный15
18 - 60Валидный30
> 60Невалидный70

Количество тестов: 3 (по одному на каждый класс)

3.2 Анализ граничных значений (Boundary Value Analysis / BVA)

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

N = Количество границ × 2 + 1 (при использовании 2-value)
N = Количество границ × 3 (при использовании 3-value)

Варианты:

  • 2-value BVA: граничное значение и следующее за границей (min, min+1), (max-1, max)
  • 3-value BVA: граничное значение, предыдущее и следующее (min-1, min, min+1)
  • Robust BVA: учитывает выход за пределы допустимого диапазона
  • Worst-case BVA: все комбинации границ всех параметров

Пример для поля «Возраст» (18-60) — 2-value BVA:

ГраницаЗначения
Нижняя (18)18 (OK), 19 (OK), 17 (невалид)
Верхняя (60)60 (OK), 59 (OK), 61 (невалид)

Количество тестов: 2-value = 5 тестов; 3-value = 7 тестов (17,18,19,59,60,61 + 1 граничный)

Комбинация EP + BVA: На практике EP и BVA всегда используются вместе. Для каждого валидного класса — 2-3 граничных значения (min, min+1, ..., max-1, max). Для невалидных — 1 значение за каждой границей.

3.3 Таблица принятия решений (Decision Table Testing)

Суть: Систематизация комбинаций условий (Causes) и соответствующих действий (Effects). Каждая комбинация — отдельный тест.

N = 2n (для n булевых условий)

Структура таблицы:

  • Conditions (Условия): бинарные входные данные (True/False)
  • Actions (Действия): ожидаемый результат
  • Rules (Правила): каждая колонка — одна комбинация
  • Culling: удаление невозможных комбинаций

Пример: логин в систему

Условие \ Правило1234
Логин верныйДаДаНетНет
Пароль верныйДаНетДаНет
РезультатУспехОшибка пароляОшибка логинаОшибка логина

Количество тестов: 2² = 4 (полный перебор) → после culling: 3 (правила 3 и 4 могут быть объединены)

3.4 Тестирование состояний и переходов (State Transition Testing)

Суть: Система рассматривается как конечный автомат. Тесты покрывают переходы между состояниями и проверяют недопустимые переходы.

N = Количество состояний + Количество переходов + Количество недопустимых переходов

Элементы:

  • States (Состояния): режимы системы (LoggedOut, LoggedIn, Error, Locked)
  • Transitions (Переходы): события, меняющие состояние (Login, Logout, Error)
  • Events (События): триггеры переходов
  • Invalid transitions: события, которые не должны срабатывать в данном состоянии

Пример: банковское приложение

СостояниеСобытиеНовое состояние
IdleInsert CardCardInserted
CardInsertedEnter PINPINEntered
PINEnteredSelect AmountAmountSelected
AmountSelectedDispense CashIdle
IdleEnter PIN (invalid)— (без карты — недопустимо)

Количество тестов = 4 (состояния) + 4 (валидных перехода) + 2 (недопустимых) = 10 тестов

Разновидности:

  • 0-switch (State Coverage): каждое состояние посещено хотя бы раз
  • 1-switch (Transition Coverage): каждый переход проверен
  • N-switch: последовательности из N переходов — полное покрытие путей

3.5 Попарное тестирование (Pairwise / All-Pairs)

Суть: Комбинаторная техника, при которой проверяются все возможные пары значений параметров. Основана на том, что большинство дефектов вызывается комбинацией двух значений.

N ≈ (V₁ × V₂ + V₁ × V₃ + ... + Vₙ₋₁ × Vₙ) / (Nparams - 1) — эмпирическая оценка

Vᵢ — количество значений i-го параметра

Алгоритм:

  1. Определить параметры и их значения
  2. Построить all-pairs таблицу
  3. Проверить, что каждая пара значений встретилась хотя бы один раз
  4. Добавить «подозрительные» комбинации (приоритетные)

Пример:

ПараметрЗначения
ОСWindows, macOS, Linux
БраузерChrome, Firefox, Safari
Разрешение1920×1080, 1366×768

Полный перебор: 3×3×2 = 18 тестов. Pairwise: 6-9 тестов (экономия 50-70%).

Инструменты: PICT (Microsoft), AllPairs, ACTS, Pairwise Online, Hexawise. Для LLM: можно генерировать pairwise таблицы через model-запрос.

3.6 Ортогональные массивы (Orthogonal Arrays / OATS)

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

N = Количество строк в ортогональном массиве LN(Vk)

k — количество параметров, V — количество уровней значений

Примеры массивов:

ОбозначениеПараметрыЗначенийТестов
L₉(3⁴)439
L₈(2⁷)728
L₁₆(4⁵)5416

Для 4 параметров по 3 значения: полный перебор = 3⁴ = 81; ортогональный массив L₉ = 9 тестов.

Отличие от Pairwise:

  • Pairwise покрывает все пары — OATS покрывает равномерно
  • OATS жёстче математически, но иногда даёт больше тестов
  • OATS требует таблицы массивов, Pairwise — алгоритм

3.7 Тестирование на основе сценариев использования (Use Case Testing)

Суть: Тесты создаются на основе реальных сценариев использования системы, описанных в Use Case или User Story.

N = Количество Use Case × Вариантов на каждый Use Case + Исключительные ситуации

Структура Use Case теста:

ЭлементОписание
Use Case IDУникальный идентификатор
НазваниеКраткое описание сценария
ПредусловияЧто должно быть выполнено перед тестом
Основной потокШаги успешного сценария (Happy Path)
Альтернативные потокиВариации успешного сценария
Исключительные потокиОшибочные ситуации
ПостусловияОжидаемое состояние системы после теста

Пример расчёта:

Use Case «Оформление заказа»:

  • Основной поток: 1 тест (успешный заказ)
  • Альтернативные: 3 (разные способы оплаты)
  • Исключительные: 4 (недостаточно средств, товар закончился, ошибка платёжного шлюза, превышение лимита)

Итого: 1 + 3 + 4 = 8 тест-кейсов

3.8 Error Guessing (Угадывание ошибок)

Суть: Основана на интуиции и опыте тестировщика. Тесты создаются на основе типовых ошибок, ранее найденных дефектов и известных «болевых точек».

N — не формализуется. Определяется опытом тестировщика и историей багов.

Типовые сценарии Error Guessing:

  • Пустые значения: submit пустой формы
  • Нулевые значения: деление на 0, скидка 0%
  • Отрицательные значения: количество товара -1
  • Граничные значения имён: 1 символ, 256 символов, пробелы, спецсимволы
  • Одновременный доступ: два пользователя редактируют одну запись
  • Прерывания: обрыв соединения, потеря питания
  • Кэш: устаревшие данные в кэше
  • Race conditions: одновременный вызов API несколько раз
  • SQL-инъекции: «' OR 1=1; --»
  • XSS: «<script>alert('XSS')</script>»

3.9 Исследовательское тестирование (Exploratory Testing)

Суть: Одновременное изучение, проектирование и выполнение тестов. Тестировщик самостоятельно исследует продукт, принимая решения на основе полученных результатов.

Подходы:

  • Freestyle: без ограничений, полная свобода
  • Session-based: тайм-бокс (45-90 мин), чартер (цель сессии), отчёт
  • Scenario-based: сценарии от реальных пользователей
  • Tour-based: «экскурсии» — тестирование по определённому маршруту (Подвал, Квартал красных фонарей, Аллея супермена)

Структура сессии (Session-Based Test Management — SBTM):

ЭлементОписание
Чартер (Charter)Цель сессии: «Исследовать регистрацию нового пользователя»
Timebox45-90 минут (не больше)
NotesЗаметки о найденных дефектах, вопросах, наблюдениях
DebriefКраткий отчёт после сессии: что хорошего, что плохого, что нужно изменить

3.10 Classification Tree Method (CTM) / Метод классификационных деревьев

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

N = Произведение количества классов на каждом уровне дерева (базовая оценка)

После сокращения: N = количество комбинаций классов (по одному из каждой ветви)

Пример: тестирование банковского перевода

Банковский перевод
├── Валюта
│   ├── RUB
│   ├── USD
│   └── EUR
├── Сумма
│   ├── Меньше лимита (<100k)
│   ├── На лимите (100k)
│   └── Больше лимита (>100k)
├── Получатель
│   ├── Свой счёт
│   └── Чужой счёт
└── Комиссия
    ├── Включена в сумму
    └── Добавлена сверху

Полный перебор: 3×3×2×2 = 36 комбинаций. После pairwise-сокращения: ~8-12 тестов.

3.11 Доменный анализ (Domain Testing / Domain Analysis)

Суть: Расширение EP + BVA на многомерные домены. Каждый параметр рассматривается как измерение, а набор параметров — как многомерное пространство.

N = Сумма по каждому домену: Количество тестов = ON-points + OFF-points + IN-points + OUT-points

Термины:

  • Domain (Домен): множество возможных значений параметра
  • ON-point: значение, принадлежащее классу, на границе
  • OFF-point: значение, не принадлежащее классу, ближайшее к границе
  • IN-point: значение внутри класса (произвольное)
  • OUT-point: значение вне класса (произвольное)

Пример для функции расчета доставки:

Параметры: Вес (W: 0-30 кг) и Расстояние (D: 0-500 км). Каждый — по 3 класса.

  • ON-points: W=0, W=30, D=0, D=500
  • OFF-points: W=-0.01 (или отрицательный), W=30.01, D=-0.01, D=500.01
  • IN-points: W=15, D=250
  • Всего: (4 ON + 4 OFF + 2 IN) × 2 (для W и D) = 20 тестов

4. Методы расчёта количества тест-кейсов

Правильная оценка количества тест-кейсов критически важна для планирования ресурсов, времени и бюджета тестирования.

4.1 Общие формулы оценки

Метрики на основе размера:

МетрикаФормулаОписание
Test Case DensityTC / FPКоличество тестов на функциональную точку (обычно 3-10)
Test Case per StoryTC / User StoryВ среднем 5-15 тестов на User Story
Test Case per KLOCTC / тысяч строк кода10-30 тестов на 1000 LOC
Test Case per HourTC / чел-час1-2 тест-кейса в час (создание + выполнение)

Estimation техники:

ТехникаСутьФормула
PERT (Three-point)Оптимистичная, пессимистичная и наиболее вероятная оценки(O + 4M + P) / 6
Wideband DelphiЭксперты независимо оценивают, затем обсуждаютИтеративное усреднение
Analogy (По аналогу)Сравнение с аналогичными проектами/модулямиN = Nаналог × CorrectionFactor
Work BreakdownДекомпозиция до атомарных задачN = Σ nз для каждой подзадачи
PERT: E = (O + 4M + P) / 6
SD = (P - O) / 6
где O — оптимистичная, M — наиболее вероятная, P — пессимистичная оценка

4.2 Расчёт количества тестов для Equivalence Partitioning

NEP = Σ (валидные классы) + Σ (невалидные классы) = V + I

Для каждого параметра: NEP param = количество классов эквивалентности

Пошаговый расчёт:

  1. Определить все входные параметры
  2. Для каждого параметра выделить валидные и невалидные классы
  3. Суммировать общее количество классов

Пример: форма регистрации

ПолеВалидные классыНевалидные классы
Имя1 (2-50 символов, буквы)3 (пустое, <2 символов, >50 символов, цифры)
Email1 (корректный формат)4 (без @, без домена, пустой, со спецсимволами)
Пароль1 (8+ символов, буквы+цифры)3 (пустой, <8 символов, без цифр)
Возраст1 (18-120)3 (<18, >120, не число)
Итого413

N = 4 + 13 = 17 тест-кейсов

4.3 Расчёт для Boundary Value Analysis

NBVA = Σ (количество границ × 2) + 1 (для 2-value)
NBVA = Σ (количество границ × 3) (для 3-value)

Пример для полей с разными диапазонами:

ПолеДиапазонГраниц2-value BVA3-value BVA
Возраст18-120257
Cумма заказа0.01-999999.99257
Количество товаров1-99257
Дата рождения01.01.1900 — 31.12.2026257
Итого82028

Robust BVA (с выходом за границы):

NRobust = Σ (границ × 3) + 1 = 2×3 + 1 = 7 на один диапазон

Для возраста (18-120): -1, 0, 17, 18, 19, 119, 120, 121, 150 = 9 тестов

4.4 Расчёт для Decision Table

NDT = 2n — k + a

n — количество условий, k — невозможные комбинации, a — добавленные приоритетные

Примеры:

УсловийПолный перебор (2n)После cullingЭкономия
384-625-50%
4166-1037-62%
53210-1650-69%
66414-2462-78%
712820-3572-84%
Совет: Для >6 условий используйте Pairwise вместо полной Decision Table — комбинаторный взрыв делает полный перебор дорогим при минимальной пользе.

4.5 Расчёт для State Transition

NST = S + T + I

S — количество состояний, T — количество валидных переходов, I — количество недопустимых переходов

По уровням покрытия:

Уровень покрытияФормулаОписание
State coverage (0-switch)SКаждое состояние посещено
Transition coverage (1-switch)TКаждый переход выполнен
N-switch coverageS × ENВсе последовательности из N переходов
Invalid transition+ IКаждый недопустимый переход проверен
Round-trip (cycle)+ CВозвраты в исходное состояние

Пример: система с 5 состояниями, 8 переходами, 3 недопустимыми:

N = 5 + 8 + 3 = 16 тестов (transition coverage)

4.6 Расчёт для Pairwise / All-Pairs

NPw ≈ Vmax × V2nd

Где Vmax — максимальное количество значений, V2nd — второе по величине

Эмпирические правила оценки:

ПараметровЗначенийПолный переборPairwise (оценка)Экономия
33, 3, 3279-1256-67%
43, 3, 3, 38112-1878-85%
53, 3, 3, 3, 324315-2490-94%
62, 2, 3, 3, 4, 457616-2496-97%
72, 2, 2, 3, 3, 4, 5144020-3098%
103 каждого5904930-50~99.9%
Ограничение: Pairwise гарантирует покрытие только пар, но не тройных и выше комбинаций. Для high-risk систем используйте triple-wise или n-wise.

4.7 Практические советы по расчёту общего количества тестов

Итоговая формула для одного модуля/функции:

Ntotal = (NEP + NBVA + NDT + NST + NPw) × complexity_factor

complexity_factor = 1.0 (Simple), 1.5 (Medium), 2.0 (Complex)

Коэффициенты сложности:

Уровень сложностиКритерииFactor
SimpleCRUD, 1-3 параметра, нет логики1.0
MediumБизнес-логика, 3-7 параметров, состояния1.5
ComplexРаспределённые системы, интеграции, RAG, ML2.0-3.0

Коэффициенты на этапы тестирования:

ЭтапКоэффициент к базовому наборуПояснение
Smoke5-10%Только критический путь
Sanity10-20%Проверка конкретного изменения
Functional100%Весь набор тест-дизайна
Regression80-100%Весь набор + старые кейсы
E2E30-50%Сквозные сценарии

5. Примеры расчёта тест-кейсов

Пример 1: Форма авторизации

Параметры: Логин (строка, 3-50 символов), Пароль (строка, 6-128 символов), Запомнить меня (чекбокс), Captcha (да/нет)

ТехникаРасчётКол-во
EPЛогин: 4 класса; Пароль: 4 класса; Captcha: 2 класса10
BVA (2-value)Логин: 2 границы × 2 = 5; Пароль: 2 границы × 2 = 510
Decision Table3 условия (логин, пароль, captcha) = 8 правил → 6 после culling6
Error GuessingПустая форма, спецсимволы, SQL-инъекция, XSS5
Итого (Simple)(10 + 10 + 6 + 5) × 1.031

Пример 2: Калькулятор доставки

Параметры: Вес (0-30 кг), Расстояние (0-500 км), Тип доставки (Стандарт/Экспресс/Международная), Страхование (да/нет), Подарочная упаковка (да/нет)

ТехникаРасчётКол-во
EPВес: 3 класса; Расстояние: 3; Тип: 3; Страхование: 2; Упаковка: 213
BVA (3-value)Вес: 2 границы × 3 = 7; Расстояние: 2×3 = 714
Decision Table5 условий — 32 полных, ~12 после culling12
Pairwise5 параметров (3,3,3,2,2) → ~16 тестов16
State Transition4 состояния × 6 переходов = 1010
Error GuessingОтрицательный вес, расстояние 0, тип null5
Итого (Medium)(13 + 14 + 12 + 16 + 10 + 5) × 1.5105

Пример 3: Обработка заказа (REST API)

Параметры: ID заказа (int, >0), Статус (New/Processing/Shipped/Delivered/Cancelled), Тип оплаты (Card/Cash/Transfer), Сумма (decimal, 0.01-1M), Промокод (string, опционально)

ТехникаРасчётКол-во
EPID: 3; Статус: 5; Оплата: 3; Сумма: 4; Промокод: 318
BVAID: 3; Сумма: 4 границы15
Decision Table5 условий → ~16 после culling16
State Transition5 статусов, 8 переходов, 4 недопустимых17
Pairwise5 параметров (3,5,3,4,3) → ~2525
Error GuessingID=0, ID=-1, несуществующий статус, SQL-инъекция8
Итого (Complex)(18 + 15 + 16 + 17 + 25 + 8) × 2.0198
Итоговая рекомендация: Для реалистичной оценки используйте комбинацию техник. EP + BVA дают ~60% покрытия, Decision Table + State Transition — ещё ~20%, Pairwise — ~15%, Error Guessing — ~5%.

6. Тестирование API

API-тестирование — проверка программных интерфейсов (REST, GraphQL, gRPC, SOAP). Это самый эффективный вид тестирования по соотношению скорость/покрытие: API-тесты стабильны, быстры и не зависят от UI.

Уровни API-тестирования

УровеньЧто проверяемПример
FunctionalКорректность ответов, статус-коды, заголовкиGET /users возвращает 200 и список
Contract / SchemaСоответствие OpenAPI/Swagger спецификацииResponse body валидирован по JSON Schema
Negative / ErrorОбработка ошибок, невалидные запросыPOST /users без тела → 400
SecurityАутентификация, авторизация, rate limitingДоступ без токена → 401
PerformanceLatency, throughput под нагрузкой100 RPS с P99 < 500ms
IdempotencyПовторный запрос даёт тот же результатPUT /users/1 дважды → одинаковый ответ
CompatibilityВерсионирование, обратная совместимостьv1 эндпоинт работает после обновления

Что проверять в REST API

МетодУспехТипичные ошибки
GET200 OK + тело ответа404 (не найден), 400 (неверный запрос)
POST201 Created + Location header400 (валидация), 409 (конфликт)
PUT200 OK404, 400, 409
PATCH200 OK404, 400, 422 (необрабатываемая сущность)
DELETE204 No Content или 200 OK404, 405 (не разрешено)

Техники API-тест-дизайна

  • Parameter variation: query/path/header параметры — валидные, невалидные, отсутствующие
  • Body mutation: изменение типов полей, пропуск обязательных, лишние поля, null, пустые строки
  • Auth testing: без токена, с истёкшим, с невалидным, с правами readonly
  • Pagination: page=1&size=0, page=-1, size=10000, cursor-based пагинация
  • Filter/Sort: некорректные поля, SQL-инъекции через фильтры
  • File upload: пустой файл, очень большой, неверный MIME type, вредоносный
  • Rate limiting: превышение лимита, headers X-RateLimit-Remaining, Retry-After

Contract Testing (Consumer-Driven Contracts)

  • Provider contract: сервис гарантирует определённый формат ответа
  • Consumer contract: клиент ожидает определённый формат
  • Инструменты: Pact, Spring Cloud Contract, Postman Collections
  • Проверка: breaking changes — изменение поля, удаление эндпоинта, новый required field

7. Баг-репорты (Bug Reports)

Баг-репорт — документ, описывающий дефект в программном обеспечении. Качественный баг-репорт — основа эффективной коммуникации между QA и разработкой.

Структура идеального баг-репорта

ПолеОписаниеПример
IDУникальный номерBUG-12345
Заголовок (Summary)Краткое, чёткое описание проблемы«Не работает кнопка «Войти» при пустом поле пароля»
Проект / КомпонентКакая часть системыWeb App / Auth Module
Версия / ОкружениеГде воспроизводитсяv2.4.1, Chrome 120, macOS 14
Severity (Серьёзность)Влияние на системуCritical / Major / Minor / Trivial
Priority (Приоритет)Срочность исправленияP0 / P1 / P2 / P3
Шаги воспроизведения (Steps to Reproduce)Последовательность действий1. Открыть сайт 2. Нажать «Войти» 3. Оставить пароль пустым
Фактический результат (Actual Result)Что произошлоКнопка неактивна, нет сообщения об ошибке
Ожидаемый результат (Expected Result)Что должно было произойтиПоказать сообщение «Пароль обязателен для заполнения»
Приложения (Attachments)Скриншот, видео, лог, HARscreenshot.png, console.log
ДополнительноWorkaround, частота, заметкиРаботает на Safari, не работает на Chrome

Severity vs Priority

SeverityОписаниеPriorityОписание
CriticalСистема недоступна, потеря данных, security breachP0 — CriticalИсправить немедленно (блокирует релиз)
MajorЗначительная функция не работает, нет workaroundP1 — HighИсправить в текущем спринте
MinorФункция работает с ограничениями, есть workaroundP2 — MediumИсправить в следующем спринте
TrivialКосметическая проблема, опечатка, не влияет на использованиеP3 — LowИсправить при возможности

Жизненный цикл бага

  1. New (Открыт): баг заведён в трекере
  2. Assigned (Назначен): назначен разработчику
  3. In Progress (В работе): разработчик начал исправление
  4. Fixed (Исправлен): код изменён, ждёт тестирования
  5. Ready for Test (На тестировании): билд с фиксом готов
  6. Verified (Проверен): QA подтвердил исправление
  7. Closed (Закрыт): баг закрыт
  8. Reopened (Переоткрыт): баг воспроизвёлся снова после фикса
  9. Duplicate (Дубликат): такой баг уже существует
  10. Won't Fix (Не будет исправлен): решение не исправлять (де-факто фича)
Золотое правило баг-репорта: Баг-репорт должен содержать достаточно информации, чтобы разработчик мог воспроизвести проблему за 1 попытку. Если разработчик пишет «не воспроизводится» — это проблема QA.

8. Тестовая документация

Тестовая документация — совокупность артефактов, описывающих стратегию, план, процесс и результаты тестирования.

Основные документы

ДокументСодержаниеКто создаётКогда
Test Plan (План тестирования)Стратегия, scope, ресурсы, расписание, рискиQA Lead / Test ManagerНа старте проекта или спринта
Test Strategy (Стратегия тестирования)Высокоуровневый подход: виды тестов, инструменты, метрикиQA Lead / Test ManagerОдин раз на проект (обновляется)
Test Suite (Тестовый набор)Группа тест-кейсов по модулю или функционалуQA EngineerВо время разработки
Test Case (Тест-кейс)Шаги, предусловия, ожидаемый результатQA EngineerВо время разработки
Checklist (Чек-лист)Список проверок без шагов (быстрее, чем ТС)QA EngineerSmoke/Sanity/Regression
Bug Report (Отчёт о дефекте)Описание найденной ошибкиQA EngineerВо время выполнения тестов
Test Report (Отчёт о тестировании)Итоги: пройдено/упало/заблокировано, coverage, рискиQA Engineer / LeadПосле завершения тестирования
Release Notes (Релизные заметки)Что нового, что исправлено, известные проблемыPM / Tech WriterПеред релизом

Чек-лист vs Тест-кейс: когда что использовать

КритерийЧек-листТест-кейс
ДетализацияНизкая (пункт = проверка)Высокая (пошаговые инструкции)
Время созданияБыстро (5-15 мин)Долго (15-60 мин)
Время выполненияБыстро (опытный тестировщик)Медленно (точное следование шагам)
ВоспроизводимостьЗависит от тестировщикаВысокая (шаги детальны)
АвтоматизацияСложнееПроще (шаги → код)
Когда использоватьSmoke, Sanity, ExploratoryCritical path, Regression, Compliance

Test Report — структура

  • Executive Summary: одно предложение о состоянии качества
  • Statistics: Passed/Failed/Blocked/Skipped, всего тестов, % прохождения
  • Coverage: requirements coverage, code coverage, risk coverage
  • Defects: открыто/закрыто, по severity, по компонентам
  • Risks: что не протестировано, известные проблемы
  • Metrics: DRE, defect density, testing velocity
  • Recommendation: релиз разрешён / условно / запрещён

9. Метрики тестирования (KPI)

Метрики позволяют объективно оценить качество продукта и эффективность процесса тестирования.

Основные метрики

МетрикаФормулаЦелевое значениеЧто показывает
Defect Detection Rate (DDR)Багв тесте / (Багв тесте + Багв проде)> 95%Эффективность выявления багов на тестировании
Defect Removal Efficiency (DRE)Багисправлено / Багвсего> 80%Скорость закрытия багов
Defect DensityБаг / KLOC или Баг / FP< 5/KLOCПлотность дефектов в модуле
Test Case Pass RatePassed / Total × 100%> 95%Стабильность сборки
Requirements CoverageCovered / Total × 100%> 95%Покрытие требований тестами
Test Execution VelocityTCexec / час> 10 TC/часСкорость выполнения тестов
Mean Time to Detect (MTTD)Время от деплоя до первого баг-репорта< 2 часаБыстрота реакции QA
Mean Time to Repair (MTTR)Время от баг-репорта до фикса< 24 часа (Crit)Скорость фикса разработчиками
Automation CoverageTCauto / TCtotal × 100%> 50%Доля автоматизации
False Positive RateFPauto / TCauto × 100%< 5%Стабильность автотестов
Escape Defect RateБагв проде / Багвсего × 100%< 5%Количество багов, ушедших в продакшен

Пример отчёта по метрикам

МетрикаСпринт 1Спринт 2Спринт 3Тренд
DRE72%81%88%🟢 Рост
Test Pass Rate88%93%96%🟢 Рост
Escape Defect Rate9%6%3%🟢 Снижение
Automation Coverage35%42%51%🟢 Рост
Defect Density (per KLOC)7.25.13.8🟢 Снижение
Важно: Метрики должны интерпретироваться в контексте. Резкий рост defect density может означать как ухудшение качества, так и улучшение детекции. Смотрите на тренды, а не на абсолютные значения.

10. Работа с требованиями (Requirements Testing)

Качество тестирования напрямую зависит от качества требований. Плохие требования → плохие тесты → плохой продукт.

Характеристики хорошего требования (SMART)

КритерийОписаниеПлохой примерХороший пример
Specific (Конкретное)Однозначное, без двусмысленности«Быстрый поиск»«Поиск возвращает результаты < 500 мс»
Measurable (Измеримое)Можно проверить метрикой«Удобный интерфейс»«Таргет достигается за 3 клика»
Achievable (Достижимое)Реалистично для реализации«99.999% uptime» (на MVP)«99.9% uptime на старте»
Relevant (Релевантное)Соответствует целям продукта«Поддержка IE6» (в 2026)«Поддержка последних 3 версий Chrome, Firefox, Safari»
Time-bound (Ограниченное по времени)Срок выполнения«Интеграция с PayPal»«Интеграция с PayPal к Q2 2026»

BDD и Gherkin (Given / When / Then)

Behavior-Driven Development — подход, при котором тесты пишутся на естественном языке по шаблону Gherkin:

Функция: Авторизация пользователя
  Как зарегистрированный пользователь
  Я хочу войти в систему
  Чтобы получить доступ к личному кабинету

  Сценарий: Успешный вход
    Дано я нахожусь на странице входа
    И я ввожу "test@example.com" в поле email
    И я ввожу "password123" в поле пароля
    Когда я нажимаю кнопку "Войти"
    Тогда я вижу сообщение "Добро пожаловать!"
    И я перенаправлен на страницу профиля

  Сценарий: Неверный пароль
    Дано я нахожусь на странице входа
    И я ввожу "test@example.com" в поле email
    И я ввожу "wrong" в поле пароля
    Когда я нажимаю кнопку "Войти"
    Тогда я вижу сообщение "Неверный email или пароль"

Acceptance Criteria (Критерии приёмки)

  • Functional: «API возвращает 200 с корректным телом»
  • Non-functional: «Время ответа < 300 мс при 50 RPS»
  • UI: «Форма центрирована, кнопка синяя (#3B82F6)»
  • Error: «При пустом поле показать красную рамку и текст ошибки»

Review требований: чеклист

  • Требование однозначно (нет «как правило», «обычно», «удобный»)
  • Требование тестируемо (можно написать тест)
  • Требование непротиворечиво (не конфликтует с другими)
  • Требование полное (не нужно додумывать)
  • Требование атомарно (описывает одну вещь)
  • Приоритет указан (Must / Should / Could / Won't)

11. Mobile тестирование

Мобильное тестирование имеет множество особенностей по сравнению с веб-тестированием: жесты, прерывания, сетевые условия, ограниченные ресурсы.

Виды мобильного тестирования

ВидЧто проверяем
FunctionalРабота функций приложения: навигация, ввод, отображение
UI / UXРазмеры элементов, отступы, адаптация под экраны, жесты
InstallationУстановка, обновление, downgrade, удаление
InterruptionЗвонок, SMS, уведомление, будильник, переключение приложений
NetworkWiFi, 4G/5G, 3G, Edge, потеря сети, переключение, airplane mode
Background / ForegroundСвёртывание/развёртывание, сохранение состояния
Battery / PerformanceПотребление энергии, CPU, RAM при длительном использовании
MemoryУтечки памяти, потребление RAM, OOM-ошибки
LocalizationЯзыки, RTL, форматы дат/валют
AccessibilityTalkBack (Android), VoiceOver (iOS), контрастность, размер текста
SecurityХранение данных на устройстве, SSL pinning, root detection
CompatibilityРазные устройства, версии ОС, размеры и плотности экранов

Тестирование прерываний (Interruption Testing)

  • Входящий звонок: приложение должно свёрнуться, после звонка — восстановиться
  • SMS / Push: уведомление не должно сбрасывать состояние
  • Будильник: системный алерт не должен ломать UI
  • Переключение приложений: состояние сохраняется (app switcher)
  • Screen rotation: портрет → лендскейп — данные не теряются
  • Low battery: приложение не перегружает CPU при 5% заряда
  • Charging: поведение при подключении/отключении зарядки

Эмуляторы vs Реальные устройства

КритерийЭмуляторРеальное устройство
СкоростьБыстроМедленно (сборка, деплой)
СтоимостьБесплатноДорого (лаборатория устройств)
СетьСимуляцияРеальные условия (4G, слабый сигнал)
СенсорыСимуляцияРеальные (GPS, акселерометр, камера)
ПроизводительностьНе репрезентативнаТочные показатели
БатареяНе тестируетсяТолько на реальном

12. Database тестирование

Тестирование базы данных — проверка целостности, производительности и корректности обработки данных.

Что тестировать в БД

АспектЧто проверяемПример
Data IntegrityConstraints (PK, FK, UNIQUE, CHECK), cascading, triggersINSERT с дубликатом PK → error
CRUD OperationsSELECT, INSERT, UPDATE, DELETE — корректность данныхUPDATE баланса → корректное новое значение
Stored ProceduresЛогика процедур, обработка ошибокsp_transfer(100 от A к B) → балансы изменились
TransactionsACID: атомарность, изоляция, durableОткат транзакции → данные не изменились
MigrationsUp/down миграции, schema changesДобавление колонки → старые данные корректны
PerformanceИндексы, query plan, explain analyzeSELECT с индексом vs без — разница в скорости
ConcurrencyRace conditions, deadlocks, row lockingДва UPDATE одновременно → deadlock?
Data ValidationТипы данных, длины, форматы, NULL vs NOT NULLВставка слишком длинной строки → truncate или error
ETL / Data PipelineТрансформация, качество данных, duplicate handlingИмпорт CSV → записи в БД без потери

SQL-инъекции — тестирование

  • «' OR 1=1; --» — обход аутентификации
  • «admin' --» — логин без пароля
  • «; DROP TABLE users; --» — деструктивные операции
  • «' UNION SELECT * FROM passwords; --» — кража данных
  • «' OR '1'='1' — то же самое, другой синтаксис

13. Security тестирование (детально)

Тестирование безопасности — проверка системы на устойчивость к атакам и утечкам данных.

OWASP Top 10 — 2021

#УязвимостьМетод тестирования
A01Broken Access ControlПопытка доступа к ресурсам без прав (IDOR, privilege escalation)
A02Cryptographic FailuresПроверка шифрования, HTTP vs HTTPS, слабые протоколы
A03InjectionSQL, NoSQL, OS command, LDAP, XSS инъекции
A04Insecure DesignАрхитектурные проблемы: отсутствие rate limiting, слабая аутентификация
A05Security MisconfigurationDefault credentials, открытые порты, verbose error messages
A06Vulnerable ComponentsУстаревшие библиотеки, известные CVE
A07Auth FailuresСлабые пароли, отсутствие MFA, session fixation
A08Data Integrity FailuresПроверка подписей, CSP, небезопасные десериализации
A09Logging & MonitoringОтсутствие логирования атак, слабый SIEM
A10SSRFServer-Side Request Forgery — запросы к внутренним ресурсам

Инструменты security-тестирования

КатегорияИнструментыЧто делают
SAST (Static Analysis)SonarQube, Semgrep, CheckmarxАнализ исходного кода на уязвимости
DAST (Dynamic Analysis)OWASP ZAP, Burp Suite, AcunetixСканирование запущенного приложения
SCA (Software Composition)Dependabot, Snyk, Black DuckПроверка зависимостей на CVE
Pentest frameworksMetasploit, Kali Linux, NmapРучной пентест специалистом
Secrets scanningGitLeaks, TruffleHog, GitGuardianПоиск ключей и токенов в репозиториях

Security чеклист для QA

  • Все входные данные экранируются (XSS, SQL-инъекции)
  • Аутентификация обязательна для защищённых ресурсов
  • Сессии истекают, токены рефрешатся
  • HTTPS включён, HSTS настроен
  • Ошибки не содержат stack trace (production mode)
  • Зависимости обновлены, нет известных CVE
  • Rate limiting на login/register/API
  • File upload — валидация типа, размера, антивирус
  • CORS настроен (не '*')
  • Security headers: CSP, X-Frame-Options, X-Content-Type-Options

14. Глоссарий терминов тестирования

ТерминОпределение
Acceptance Testing (Приёмочное тестирование)Тестирование, проводимое заказчиком для принятия решения о готовности продукта к эксплуатации
Accessibility TestingПроверка доступности продукта для людей с ограниченными возможностями
Ad-hoc TestingСпонтанное тестирование без документации и подготовки
Automation CoverageПроцент тест-кейсов, покрытых автотестами
Backward CompatibilityСпособность новой версии работать с данными старой версии
Black Box TestingТестирование без знания внутреннего устройства системы
Boundary Value Analysis (BVA)Техника тест-дизайна, фокусирующаяся на граничных значениях
Bug / DefectОтклонение фактического результата от ожидаемого
Bug ReportДокумент, описывающий дефект
Checklist (Чек-лист)Список проверок для быстрого тестирования
Code CoverageПроцент кода, выполненного во время тестирования
Compatibility TestingПроверка работы в разных средах (ОС, браузеры, устройства)
Component TestingТестирование крупного модуля системы
CRUDCreate, Read, Update, Delete — базовые операции с данными
Data-Driven TestingТестирование с параметризацией тестовыми данными
Decision Table TestingТехника тест-дизайна на основе комбинаций условий
Defect DensityКоличество дефектов на единицу размера (KLOC, FP)
Dynamic TestingТестирование с запуском кода
E2E (End-to-End) TestingСквозное тестирование полного пользовательского сценария
EP (Equivalence Partitioning)Разбиение входных данных на классы эквивалентности
Error GuessingТехника тест-дизайна на основе опыта и интуиции
Exploratory TestingИсследовательское тестирование без заранее написанных сценариев
Functional TestingПроверка функциональных требований
GherkinЯзык описания сценариев в BDD (Given/When/Then)
Grey Box TestingТестирование с частичным знанием внутреннего устройства
Integration TestingТестирование взаимодействия между модулями
LatencyВремя от запроса до получения ответа
Load TestingТестирование под ожидаемой нагрузкой
Localization TestingПроверка перевода и адаптации для региона
MTBFMean Time Between Failures — среднее время между отказами
MTTRMean Time To Repair — среднее время восстановления
Negative TestingТестирование с невалидными данными
Non-Functional TestingПроверка нефункциональных характеристик (производительность, безопасность)
Pairwise TestingКомбинаторная техника, проверяющая все пары значений
Performance TestingТестирование скорости, отзывчивости, стабильности
Regression TestingПроверка, что изменения не сломали существующую функциональность
ReliabilityСпособность системы работать без отказов в течение заданного времени
Re-testingПроверка, что конкретный баг исправлен
Sanity TestingУзкая проверка конкретных изменений/исправлений
ScalabilityСпособность системы обрабатывать растущую нагрузку
Smoke TestingБыстрая проверка критической функциональности
Soak Testing (Endurance)Длительное тестирование под нагрузкой для выявления утечек
State Transition TestingТехника тест-дизайна на основе конечных автоматов
Static TestingАнализ кода, документации, требований без запуска
Stress TestingТестирование при нагрузке, превышающей норму
System TestingТестирование системы в целом
Test CaseНабор шагов, условий и ожидаемых результатов для проверки
Test Plan / Test StrategyДокументы, описывающие подход к тестированию
ThroughputКоличество запросов/транзакций в единицу времени
Unit TestingТестирование отдельных функций/методов/классов
Usability TestingПроверка удобства использования
UAT (User Acceptance Testing)Приёмочное тестирование пользователями
White Box TestingТестирование с полным знанием внутреннего устройства

15. CI/CD и DevOps для QA

CI/CD (Continuous Integration / Continuous Delivery) — практика автоматической сборки, тестирования и доставки кода. QA-инженер должен понимать pipeline, уметь читать логи и настраивать тесты в пайплайне.

Pipeline тестирования

StageЧто происходитQA involvement
Commit / PushЛинтер, unit-тесты, security scan (SAST)Написание unit-тестов, настройка линтеров
BuildКомпиляция, сборка артефакта, проверка зависимостей (SCA)Проверка CVE в зависимостях
Deploy to StagingДеплой на тестовое окружениеSmoke-тесты, API-тесты, integration tests
E2E TestsEnd-to-end тесты в stagingPlaywright/Cypress/Selenium, visual regression
Security ScanDAST, пентест, dependency checkOWASP ZAP, настройка правил
Quality GateПроверка метрик: coverage > 80%, pass rate > 95%Настройка gate, анализ результатов
Deploy to ProductionCanary / Blue-Green / RollingМониторинг метрик в проде

Deploy стратегии

СтратегияОписаниеQA проверка
Blue-GreenДва идентичных окружения, переключение трафикаПроверить оба окружения, session drain
CanaryПостепенное перенаправление трафика на новую версию (5% → 50% → 100%)Мониторинг ошибок и метрик на canary
RollingПоэтапная замена инстансовНет downtime, проверка health checks
Feature ToggleСкрытие новой функциональности под флагомToggle on/off тесты, A/B тесты

Quality Gates в CI/CD

  • Code Coverage: минимальный порог (80%+) — ниже gate не пропускает
  • Test Pass Rate: 100% обязательных, >95% всех тестов
  • Security Vulnerabilities: 0 critical/high CVE
  • Performance Regression: latency не выросла более чем на 5%
  • Lint Errors: 0 errors

16. UI / Web тестирование (детально)

UI-тестирование — проверка пользовательского интерфейса и взаимодействия пользователя с приложением.

Инструменты UI-тестирования

ИнструментЯзыкКлючевая особенностьКогда выбрать
PlaywrightJS/TS, Python, Java, .NETAuto-wait, multi-browser, network interceptor, trace viewerСовременные проекты, нужна скорость
CypressJS/TSTime travel, real-time reload, network stubbingFrontend-only, React/Vue/Angular
Selenium WebDriverВсе популярныеСтандарт индустрии, огромное комьюнитиLegacy проекты, кросс-браузерность
PuppeteerJS/TSТолько Chrome, полный контроль над браузеромСкрапинг, PDF, Chrome-only тесты

Locators: стратегии

СтратегияPlaywrightПриоритетСтабильность
Text contentpage.getByText()1Высокая (не зависит от структуры)
ARIA rolepage.getByRole()2Высокая (accessibility-first)
Labelpage.getByLabel()3Высокая (для форм)
Test IDpage.getByTestId()4Максимальная (data-testid)
CSS / XPathpage.locator()5Низкая (хрупкие)

Visual Regression Testing

  • Pixel-by-pixel: сравнение скриншотов попиксельно (Percy, Applitools, Playwright Screenshot)
  • Snapshot testing: сохранение эталонного скриншота и сравнение с новым
  • Layout comparison: проверка структуры, а не пикселей (Storybook test)
  • Что проверять: все страницы, все viewport (mobile/tablet/desktop), все локали, тёмная/светлая тема
  • Threshold: допуск на изменение (0.1% пикселей) — фильтрация шума (antialiasing)

Waits и стабильность UI-тестов

  • Auto-wait: Playwright ждёт элемент перед действием (visible, enabled, stable)
  • Explicit wait: waitForSelector, waitForNavigation для специфических случаев
  • Network idle: waitForLoadState('networkidle') — ждать пока сеть успокоится
  • Flaky tests: random timeouts → добавить retries, улучшить локаторы, убрать sleep()

17. Тестирование производительности (детально)

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

Виды performance-тестов

ВидЦельПрофиль нагрузкиДлительность
BaselineУстановить базовые метрики1-5 RPS, 1-10 concurrent5-10 мин
LoadПроверить под ожидаемой нагрузкойСредняя нагрузка + 20%30-60 мин
StressНайти точку отказаПлавный рост до 200-500% от нормы15-30 мин
SpikeРеакция на резкий скачокРезкий рост ×10 за 1 сек5-10 мин
SoakСтабильность во времениСредняя нагрузка ×14-24 часа
VolumeОбработка большого объёма данныхБольшие payloads, много записей в БД30-60 мин
ScalabilityПроверить масштабированиеПостепенное увеличение + добавление node1-2 часа

Bottleneck Analysis

  1. CPU: 90%+ user time → алгоритмические проблемы, отсутствие кэширования
  2. Memory: рост потребления → утечки (memory leak), неоптимальные структуры
  3. Disk I/O: высокий await → медленная БД, неоптимальные запросы, отсутствие индексов
  4. Network: высокая latency → CDN, DNS, TLS handshake, большие payloads
  5. Database: slow queries → missing indexes, N+1, lock contention
  6. External APIs: медленные ответы → добавить timeout, circuit breaker, fallback

Инструменты performance-тестирования

ИнструментЯзык скриптовПротоколыОсобенность
k6JavaScript (ES6)HTTP/1.1, HTTP/2, WebSocket, gRPCСовременный, Grafana dashboard, облачный
JMeterGUI / XML / GroovyHTTP, FTP, JDBC, JMS, SOAP, TCPСтандарт, огромное комьюнити, плагины
LocustPythonHTTP, WebSocket (кастомные)Кодом, распределённый, events
GatlingScala / Java / KotlinHTTP, WebSocket, JMS, SSEHigh performance, Akka-based
Yandex.TankYAML + PythonHTTP, HTTPSИнтеграция с JMeter, Pandora, готовые report

18. Тестирование микросервисов

Микросервисная архитектура требует особого подхода к тестированию из-за распределённой природы, сетевых задержек и независимости сервисов.

Пирамида тестирования микросервисов

УровеньЧто тестируемИнструменты
UnitОтдельные функции внутри сервисаJest, Pytest, JUnit
ContractКонтракты между сервисами (CDC)Pact, Spring Cloud Contract
IntegrationВзаимодействие с БД, очередью, кэшемTestcontainers, WireMock, LocalStack
ComponentСервис в изоляции (с моками)WireMock, MockServer, Hoverfly
End-to-EndЦепочка из нескольких сервисовPlaywright + Docker Compose, Kubernetes (kind)
ChaosУстойчивость к отказамChaos Monkey, Litmus, Gremlin

Contract Testing (Consumer-Driven Contracts)

  • Provider: сервис А гарантирует API
  • Consumer: сервис Б использует этот API
  • Pact flow: Consumer пишет тест → генерирует Pact файл → Provider верифицирует
  • Что проверять: статус-коды, тело ответа, заголовки, новые поля (breaking change)

Service Virtualization (WireMock)

  • Создание стабов для внешних сервисов
  • Симуляция ответов: success, error, timeout, slow response
  • Record/Playback: запись реальных ответов и воспроизведение в тестах
  • Stateful stubs: разные ответы в зависимости от состояния

19. Тестирование в Agile/Scrum

QA в Agile — не отдельная фаза, а непрерывный процесс на протяжении всего спринта.

QA в Scrum-церемониях

ЦеремонияЧто делает QA
PlanningОценка тестовых усилий, уточнение acceptance criteria, выявление risks
Daily StandupСтатус тестирования, блокеры, найденные баги
GroomingReview требований, написание тест-кейсов, уточнение сценариев
ReviewДемо новой функциональности, фидбек по UX
RetrospectiveАнализ багов, улучшение процессов, определение action items

Definition of Ready (DoR) — чеклист для QA

  • User Story имеет acceptance criteria
  • Acceptance criteria тестируемы и однозначны
  • Дизайн-макеты есть (для UI)
  • Тестовые данные определены
  • Окружение доступно
  • Зависимости от других команд/сервисов учтены

Definition of Done (DoD) — чеклист для QA

  • Все acceptance criteria выполнены
  • Тест-кейсы написаны и выполнены
  • Критические баги отсутствуют
  • Автотесты добавлены в регрессию
  • Проверено на staging окружении
  • Негативные сценарии покрыты

Оценка тестовых усилий (Estimation)

  • Planning Poker: команда оценивает сложность в story points
  • T-shirt sizes: S (1-2 часа), M (до 4 часов), L (до 8 часов), XL (до 2 дней)
  • Test point analysis: количество тест-кейсов × сложность × длительность
  • Affinity estimation: группировка и быстрая оценка похожих задач

20. Mutation Testing (Мутационное тестирование)

Мутационное тестирование — метод оценки качества самих тестов. В код вносятся намеренные ошибки (мутации), и проверяется, упадут ли на них тесты.

Mutation Score = (Убитые мутанты / Все мутанты) × 100%

Цель: > 80% mutation score

Типы мутаций (PITest / MutPy)

Тип мутацииОригиналМутация
Change operatora + ba - b
Change conditiona > ba >= b, a < b
Remove callvalidate()Удаление вызова
Change returnreturn areturn null
Negate booleanif(ok)if(!ok)
Change constant1000, -1, 101

Инструменты:

  • PITest — Java (стандарт индустрии)
  • MutPy — Python
  • Stryker — JS/TS, C#, Scala
  • Humbug — PHP

Когда применять:

  • Критические модули (авторизация, платежи, безопасность)
  • После увеличения coverage — проверить, что тесты реально работают
  • При code review — мутации подтверждают качество тестов

21. Risk-Based Testing (RBT)

Тестирование, основанное на рисках. Тесты приоритезируются по вероятности и влиянию дефекта. Ресурсы направляются на наиболее рискованные области.

Risk = Probability × Impact

Risk Priority Number (RPN) = P × I × D (Detectability)

Матрица рисков

Вероятность \\ ВлияниеНизкое (1)Среднее (2)Высокое (3)
Высокая (3)5 — Medium7 — High9 — Critical
Средняя (2)3 — Low5 — Medium7 — High
Низкая (1)1 — Low3 — Low5 — Medium

Приоритизация тестов по RPN

RPNДействиеПример
8-9 (Critical)Обязательное тестирование, автоматизация, несколько раундовАвторизация, платёжный шлюз
5-7 (High)Полное тестирование, автоматизация критических сценариевКорзина, оформление заказа
3-4 (Medium)Основные сценарии + error guessingПоиск, фильтры, профиль
1-2 (Low)Smoke-тесты, exploratory по остатку времениПромо-блоки, футер, about page

Пример RBT-анализа для интернет-магазина

ФункцияВероятностьВлияниеRPNПриоритет тестирования
Оплата339Critical — полный набор тестов, chaos
Корзина326High — functional + regression
Регистрация236High — functional + security
Каталог224Medium — основные сценарии
Блог111Low — smoke только

22. Root Cause Analysis (RCA)

Анализ корневых причин — метод поиска первопричины проблемы, а не её симптомов. Применяется после критических багов или инцидентов в проде.

Методы RCA

МетодОписаниеКогда использовать
5 WhysПоследовательные вопросы «Почему?» до нахождения первопричиныПростые проблемы, когда причина неочевидна
Fishbone (Ishikawa)Диаграмма «рыбья кость»: категории причин (People, Process, Technology, Data, Environment)Сложные проблемы с множеством факторов
Fault Tree Analysis (FTA)Дерево отказов — логическая схема причинHigh-risk системы (атомная, авиация)
Pareto Analysis80% проблем — от 20% причинПриоритизация исправлений

Пример: 5 Whys

Проблема: Пользователи не могут оформить заказ

  1. Почему? → API возвращает 500 ошибку
  2. Почему? → Запрос к БД падает с timeout
  3. Почему? → Таблица заказов заблокирована долгой транзакцией
  4. Почему? → Нет индекса на статусе заказа, полное сканирование таблицы
  5. Почему? → Отсутствует review миграций перед деплоем (корневая причина ⇐ процесс)
Важно: Корневая причина должна быть процессной, а не технической. «Нет индекса» — симптом. «Нет review миграций» — причина.

23. Test Environment Management

Управление тестовыми окружениями — одна из самых недооценённых, но критически важных областей QA.

Проблемы тестовых окружений

ПроблемаВлияниеРешение
Грязные данныеЛожные баги, нестабильные тестыАвтоматический seeding / reset БД перед тестами
Конфликты параллельных тестовГонки данных, flaky тестыИзоляция: отдельные схемы/контейнеры на каждый поток
Недоступность окруженияБлокировка тестированияHealth checks, SLA, уведомления при падении
Различие с продушеномБаги, найденные только в продеСинхронизация конфигов, версий, данных
Flaky тестыПотеря доверия к тестамQuarantine, анализ причин, исправление

Типы окружений

  • Local / Dev: окружение разработчика, быстрые итерации
  • Feature / PR: поднимается на каждый PR (Preview Environments, ephemeral)
  • Integration / Staging: общее окружение команды, интеграционные тесты
  • Pre-production / Staging: копия продакшена, регрессия, performance-тесты
  • Production: smoke-тесты после деплоя, canary

Containerized тестовые окружения (Testcontainers / Docker Compose)

  • Testcontainers: поднятие БД/брокеров/кэша в Docker контейнерах для тестов
  • Docker Compose: полный стек сервисов для E2E тестов
  • Ephemeral environments: автоматическое создание и удаление окружения на каждый PR

24. Тестирование интеграций, ETL и Kafka

Современные системы всё чаще используют event-driven архитектуру с message brokers (Kafka, RabbitMQ) и ETL-пайплайны. Тестирование таких систем требует особого подхода.

Тестирование Kafka

АспектЧто проверяемМетод
ProduceСообщение отправлено в правильный topic с корректным ключом и значениемTestcontainers + Kafka, verify message on consumer side
ConsumeСообщения корректно обрабатываются при полученииMock producer, проверка логики обработки
Schema evolutionAvro/Protobuf schema совместимость при измененииSchema Registry, compatibility check (BACKWARD, FORWARD)
PartitioningСообщения с одинаковым ключом попадают в один partitionПроверка порядка сообщений для ключа
Retry / DLQОшибочные сообщения уходят в DLQ после N retriesОтправить невалидное сообщение, проверить DLQ
Consumer groupRebalance при добавлении/удалении consumerKill consumer, проверить восстановление
LatencyВремя от produce до consumeМониторинг end-to-end latency

Тестирование ETL-пайплайнов

Этап ETLЧто тестироватьТехники
ExtractИзвлечение данных из источника (API, DB, файл)Source schema, фильтры, incremental load, null handling
TransformПреобразование данных (маппинг, агрегация, очистка)Data quality, duplicate removal, business logic correctness
LoadЗагрузка в целевую системуTarget schema, type casting, constraints (PK, FK), idempotency

Dead Letter Queue (DLQ) тестирование

  • Невалидные данные: отправка сообщения с неправильным форматом → проверка DLQ
  • Ошибки обработки: бизнес-логика выбрасывает exception → сообщение в DLQ после N retries
  • Мониторинг DLQ: алерты при появлении сообщений в DLQ
  • Re-drive: исправление сообщения и повторная отправка из DLQ

25. Чеклист тестировщика

Планирование и анализ

  • Определены виды тестирования для проекта
  • Выбраны техники тест-дизайна
  • Выделены классы эквивалентности
  • Определены граничные значения
  • Построены таблицы решений
  • Проанализированы состояния и переходы
  • Рассчитано примерное количество тест-кейсов
  • Оценены временные и ресурсные затраты

Создание тест-кейсов

  • Каждый тест-кейс имеет уникальный ID
  • Тест-кейс содержит: предусловия, шаги, ожидаемый результат
  • Тест-кейсы атомарны (один тест — одна проверка)
  • Тест-кейсы независимы (порядок выполнения не важен)
  • Покрыты валидные и невалидные классы
  • Покрыты положительные и негативные сценарии
  • Приоритеты расставлены (Critical / High / Medium / Low)

Coverage (покрытие)

  • Requirements coverage > 95%
  • Code coverage > 80%
  • Branch coverage > 75%
  • State coverage (все состояния)
  • Transition coverage (все переходы)
  • Pairwise покрытие (все пары значений)

Регрессия

  • Smoke-тесты выделены и автоматизированы
  • Critical path тесты стабильны
  • Тесты на граничные значения включены в регрессию
  • Проверка старых багов (re-testing)
  • Автоматизированные тесты интегрированы в CI/CD
  • Время выполнения регрессии < 30 минут

API тестирование

  • Все эндпоинты покрыты тестами (200, 4xx, 5xx)
  • Contract tests (OpenAPI schema validation)
  • Аутентификация/авторизация на каждом эндпоинте
  • Rate limiting работает корректно
  • Пагинация, фильтры, сортировка
  • Idempotency для PUT/DELETE

Баг-репорты

  • Заголовок чётко описывает проблему
  • Шаги воспроизведения полные и однозначные
  • Указана среда (ОС, браузер, версия)
  • Приложены скриншоты/видео/логи
  • Severity и Priority проставлены
  • Нет дубликатов (проверка перед созданием)

Тестовая документация

  • Test Plan существует и актуален
  • Test Suite структурирован по модулям
  • Тест-кейсы атомарны и независимы
  • Test Report формируется после каждого цикла
  • Метрики собираются и отслеживаются в динамике

Mobile тестирование

  • Прерывания (звонок, SMS, уведомления)
  • Background/Foreground — сохранение состояния
  • Сетевые условия: потеря, переключение, airplane mode
  • Разные размеры и плотности экранов
  • Батарея и потребление ресурсов
  • Установка, обновление, downgrade

Database тестирование

  • Constraints (PK, FK, UNIQUE) работают
  • CRUD операции корректны
  • Транзакции ACID-совместимы
  • Миграции протестированы (up/down)
  • Нет SQL-инъекций
  • Индексы оптимизированы

Security тестирование

  • OWASP Top 10 проверен
  • SAST/DAST сканирование выполнено
  • Зависимости проверены на CVE
  • Secrets не хранятся в репозитории
  • HTTPS, HSTS, security headers настроены
  • Rate limiting на чувствительные эндпоинты

Нефункциональное тестирование

  • Performance тесты для критических сценариев
  • Load тесты с ожидаемой нагрузкой x2
  • Stress тесты до точки отказа
  • Security: OWASP Top 10 проверен
  • Usability: основные сценарии протестированы
  • Accessibility: WCAG 2.1 AA

26. Заключение

Этот плейбук охватывает ключевые аспекты тестирования ПО — от классификации видов и типов до конкретных техник тест-дизайна и методов расчёта количества тест-кейсов. Основные выводы:

  • Не существует универсальной техники — комбинируйте EP, BVA, Decision Table, State Transition и Pairwise
  • Расчёт количества тестов — не точная наука, а оценка. Используйте формулы как базовую линию, корректируйте под проект
  • Покрытие ≠ качество — 100% coverage не гарантирует отсутствие багов. Важна осмысленность тестов
  • Автоматизация — серебряная пуля? Нет. Автоматизируйте то, что стабильно, часто выполняется и даёт ценность
  • Контекст решает — нет «правильного» набора техник для всех проектов. Адаптируйте подrisks, бюджет и сроки
Золотое правило тестирования: Тестируй не для того, чтобы доказать, что программа работает, а для того, чтобы найти в ней ошибки.

Плейбук подготовлен для проекта qasdet.github.io • 2026