Зачем комбинировать техники?

У каждой техники есть слепые зоны. EP пропускает граничные дефекты. BVA пропускает зависимые от состояния баги. State transition testing пропускает ошибки расчётов. Ни одна техника не обеспечивает полного покрытия.

При стратегическом комбинировании сильные стороны одной техники компенсируют слабости другой.

Трёхслойная модель

Слой 1: На основе спецификации (Black-Box)

Формируют основу. Проверяют соответствие системы требованиям.

  • EP, BVA, таблицы решений, переходы состояний

Слой 2: На основе структуры (White-Box)

Заполняют пробелы Слоя 1, анализируя непокрытые пути кода.

  • Покрытие операторов/решений, путей, MC/DC, потоков данных

Слой 3: На основе опыта

Ловят дефекты, которые формальные техники пропускают.

  • Предугадывание ошибок, исследовательское тестирование, чек-листы

Процесс комбинирования

Шаг 1: Начать с тестов на основе спецификации

Фича: Регистрация пользователя
├── Поле email → EP + BVA
├── Поле пароля → EP + BVA
├── Поле возраста → EP + BVA
├── Правила регистрации → Таблица решений
└── Жизненный цикл аккаунта → Переходы состояний

Шаг 2: Измерить структурное покрытие

Запустить тесты Слоя 1, проанализировать пробелы.

Шаг 3: Добавить тесты на основе структуры

Для каждого непокрытого блока определить, нужно ли тестирование.

Шаг 4: Применить техники на основе опыта

Кейс: Обработка платежей

Слой 1 (~45 тестов)

ПодфичаТехникаКлючевые тесты
Тип оплатыEP3 валидных + 1 невалидный
Номер картыEP + BVAVisa/MC/Amex + невалидные форматы
Дата истеченияBVAСегодня, завтра, вчера
Конвертация валютBVA + EPТа же валюта, поддерживаемые пары
Правила платежейТаблица решенийтип x сумма x валюта x fraud_score
Цикл транзакцииПереходы состоянийPending → Authorized → Captured → Refunded
Окно возвратаBVAДень 0, 1, 29, 30, 31

Слой 2 (~15 дополнительных тестов)

Анализ покрытия показывает FraudDetector с 52% decision coverage. Добавить тесты для путей обнаружения фрода.

Слой 3 (~10 тестов + сессии)

Предугадывание: двойная отправка, таймаут, 3D Secure. Исследовательское тестирование при медленной сети.

Итого: ~70 тест-кейсов + 2 исследовательские сессии.

Упражнение: Комбинированный тест-дизайн

Задача 1

Спроектируйте комбинированную стратегию для бронирования авиабилетов:

  • Поиск по городам, датам, пассажирам (1-9), классу
  • Результаты с фильтрами и сортировкой
  • Бронирование с данными пассажира и оплатой
  • Изменение (платно) и отмена
Решение

Слой 1 (~50 тестов)

ПодфичаТехникаКлючевые тесты
Входы поискаEP + BVAВалидные/невалидные города, диапазоны дат
Логика датBVAТот же день, обратный до вылета
Пассажир x классПопарное3 класса x количества
Правила бронированияТаблица решенийКласс x изменение x отмена
Цикл билетаПереходы состоянийНайден → Забронирован → Изменён → Отменён

Слой 2 (~15 тестов): Пути расчёта цен, логика доступности, обработка ошибок.

Слой 3 (~10 тестов + сессии): Edge cases пассажиров, доступность, локализация.

Задача 2

После EP и BVA для калькулятора скидок: покрытие операторов 68%, решений 55%.

Непокрытый код:

  • Строки 34-40: Расчёт уровня лояльности для platinum
  • Строки 55-62: Специальные цены на праздничные выходные
  • Строки 78-85: Переопределение скидки для сотрудников
  • Строки 92-98: Обработка отрицательных сумм
  • Строки 105-110: Проверка устаревшего feature flag
Решение
Непокрытый кодАнализДействие
Loyalty tier platinumПропущенный класс EPДобавить класс EP + BVA для границ уровней
Праздничные ценыВременная логикаДобавить тесты: обычный день, праздник, выходной
Скидка сотрудникаСпец. тип пользователяДобавить класс EP + таблицу решений
Отрицательные суммыЗащитный кодДобавить негативный тест
Устаревший feature flagМёртвый кодПроверить флаг выключен. Пометить на удаление

Измерение комбинированной эффективности

МетрикаЦельНазначение
Покрытие требований100%Каждое требование имеет тесты
Покрытие операторов80%+Большая часть кода выполняется
Покрытие решений75%+Большая часть ветвей тестируется
Mutation score80%+ на критичном кодеТесты реально ловят дефекты
Показатель обнаруженияРастётКомбинированный подход находит больше багов

Ключевые выводы

  • Ни одна техника не достаточна — комбинируйте на основе спецификации, структуры и опыта
  • Начинайте с техник спецификации как основы
  • Используйте анализ покрытия для выявления структурных пробелов
  • Заполняйте пробелы целевыми тестами, а не случайными
  • Применяйте техники опыта для edge cases реального мира
  • Измеряйте эффективность метриками покрытия, mutation score и показателем утечки дефектов
  • Трёхслойный подход не последовательный — итерируйте по мере изучения системы