← Теория

🎯 Блок 01 — Теория тестирования QA

Тест-дизайн · Метрики · Пирамида · Shift-left · Flaky · Покрытие · Трассировка

🎨 1. Техники тест-дизайна

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

Делим все возможные входные данные на классы эквивалентности. Тестируем по одному значению из каждого класса — если одно работает, остальные из того же класса тоже должны.

ПолеКлассыЗначения для тестов
Возраст (18–65)до 18, 18–65, 65+17, 30, 66
Рейтинг (1–5)меньше 1, 1–5, больше 50, 3, 6
Emailпустой, невалидный, валидный"", "abc", "a@b.c"

Граничные значения (Boundary Value Analysis)

Баги чаще всего на границах классов. Проверяем само граничное значение ± 1.

ГраницаПроверяем
18 лет (минимум)17, 18, 19
65 лет (максимум)64, 65, 66
Пароль 8 символов7, 8, 9
Комбо: Эквивалентное разделение + граничные значения — чаще всего используются вместе и дают основу тест-кейсов.

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

Когда результат зависит от комбинации условий. Каждая колонка = один тест-кейс.

Условие1234
Есть аккаунт?ДаДаНетНет
Правильный пароль?ДаНет
Результат✅ Вход❌ Ошибка📝 Регистрация📝 Регистрация

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

Вместо тестирования всех комбинаций всех параметров — тестируем все попарные комбинации. Это покрывает большинство дефектов.

Пример: 3 браузера × 3 ОС × 3 языка = 27 комбинаций. Pairwise → ~9 тестов.

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

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

На практике: Exploratory — дополнение к формальным техникам, не замена. Используется когда мало времени или неясны требования.

📊 2. Метрики тестирования

МетрикаФормула / СутьЧто показывает
Defect Density Кол-во багов / размер (KLOC, модули) Где больше всего багов — где тестировать тщательнее
Test Pass Rate (Pass / Total) × 100% % прошедших тестов. Низкий = проблемы с качеством
Defect Leakage Баги на проде / все баги × 100% Сколько багов пропустили. Чем ниже — тем лучше QA
MTTR Среднее время исправления бага Как быстро команда реагирует на проблемы
Test Coverage % покрытия требований/кода тестами Насколько полно протестировали
Defect Removal Efficiency Баги до релиза / (баги до + баги после) × 100% Эффективность процесса тестирования
Defect Leakage = (баги найденные на PROD / все баги) × 100%
DRE = (баги до релиза / (баги до релиза + баги после)) × 100%

🔺 3. Пирамида тестирования

Unit Tests (много, быстро, дёшево)
Integration Tests (умеренно)
E2E / UI Tests (мало, медленно, дорого)
УровеньЧто тестируетСкоростьСтоимостьКол-во
UnitОтдельные функции/методы⚡ мс💰 низкаяМного
IntegrationВзаимодействие модулей, API, БД⏱ секунды💰💰 средняяУмеренно
E2E / UIПолные сценарии через UI🐢 минуты💰💰💰 высокаяМало
Правило: Много unit-тестов внизу, умеренно интеграционных, мало E2E наверху. Если пирамида перевёрнута (много E2E, мало unit) — это антипаттерн «рожок мороженого».

⬅️ 4. Shift-Left Testing

Shift-left — подход, при котором тестирование сдвигается влево по timeline проекта (т.е. начинается как можно раньше).

Традиционно: требования → разработка → тестирование → релиз

Shift-left: тестирование参与 с этапа требований → разработка с тестами → быстрый релиз

Что меняется

Зачем

⚠️ На собеседовании: «Shift-left — это не значит, что QA работает раньше. Это значит, что качество — ответственность всей команды, а не только QA».

🎲 5. Flaky-тесты

Flaky-тест — тест, который то проходит, то падает без изменений в коде. Результат непредсказуем.

Причины

Как бороться

На собеседовании: «Flaky-тесты подрывают доверие к тестам. Если команда видит, что тест иногда красный — начинается игнорирование. Поэтому flaky-тесты нужно либо фиксить, либо временно отключать из пайплайна.»

📐 6. Покрытие тестами (Test Coverage)

Виды покрытия

ВидЧто измеряетПример
Покрытие кода% строк / веток / функций, выполненных тестами80% строк кода вызваны тестами
Покрытие требований% требований с тест-кейсами40 из 50 требований → 80%
Покрытие функций% функциональных модулей, покрытых тестами10 из 12 экранов протестированы

Метрики покрытия кода

МетрикаСуть
Line Coverage% строк кода, которые выполнились
Branch Coverage% веток if/else, которые выполнились
Function Coverage% функций, которые были вызваны
Statement Coverage% операторов, которые выполнились
⚠️ 100% покрытие кода ≠ отсутствие багов. Покрытие показывает ЧТО выполнилось, но не ЧТО проверилось.

🔗 7. Трассировка (Traceability Matrix)

Матрица трассировки — таблица, связывающая требования ↔ тест-кейсы ↔ баги.

Пример

ТребованиеТест-кейсСтатусБаг
R-01: Логин по emailTC-01, TC-02✅ Pass
R-02: Восстановление пароляTC-03❌ FailBUG-15
R-03: OAuth Google⚠️ Нет теста

Зачем нужна

ЦельПояснение
ПокрытиеВидно, к каким требованиям нет тестов
Анализ влиянияЕсли меняется требование — сразу видно какие тесты затронуты
ОтчётностьДля заказчиков / аудита — доказательство тестирования
Связь баг ↔ требованиеПонятно, какая функциональность сломана
Виды трассировки:
  • Forward: требование → тест-кейс (проверяем покрытие)
  • Backward: баг → требование (понимаем что сломано)
  • Bi-directional: оба направления, полная матрица

💬 Вопросы для самопроверки