Комбинаторный взрыв

Когда система имеет несколько параметров, каждый с несколькими значениями, общее число комбинаций растёт экспоненциально. Веб-форма с 5 полями по 4 значения каждое даёт 4^5 = 1 024 комбинации.

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

Спектр стратегий покрытия

1. Покрытие Each-Choice

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

2. Покрытие Base-Choice

Выбирается «базовый» тест-кейс (обычно самая распространённая конфигурация). Для каждого небазового значения каждого параметра создаётся тест, варьирующий только этот параметр.

Для 3 параметров по 3 значения: 1 базовый + 3 * 2 = 7 тест-кейсов.

3. Покрытие Pairwise (2-Way)

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

Исследования показывают, что 70-90% дефектов ПО связаны с взаимодействиями не более 2 параметров.

4. Покрытие T-Way (t = 3, 4, …)

Каждая t-тупла значений появляется хотя бы в одном тест-кейсе.

ПараметрыЗначенийAll CombosPairwise3-way4-way
53243~15~45~81
10359 049~20~60~120
154~1 млрд~30~120~350

5. All-Combinations

Каждая возможная комбинация. Осуществимо только для очень малых пространств.

Исследование NIST

Сила взаимодействияОбнаруженные дефекты (накопительно)
1-way40-65%
2-way (pairwise)70-90%
3-way90-98%
4-way96-100%
6-way100%

Покрывающие массивы

Покрывающий массив CA(N; t, k, v): N строк (тест-кейсов), k столбцов (параметров), v значений, и каждый подмассив из t столбцов содержит все v^t комбинаций.

Инструменты

PICT (Microsoft)

OS: Windows, macOS, Linux
Browser: Chrome, Firefox, Safari, Edge
Language: EN, ES, RU, FR

IF [Browser] = "Safari" THEN [OS] = "macOS";

ACTS (NIST)

Java-инструмент для покрывающих массивов с ограничениями. Бесплатный.

Другие

  • Jenny — на C, быстрый, open source
  • Hexawise — коммерческий, веб
  • AllPairs — лёгкий инструмент Джеймса Баха

Ограничения в комбинаторном тестировании

Реальные параметры часто имеют зависимости. Инструменты поддерживают:

  • IF-THEN: IF Browser = Safari THEN OS = macOS
  • Исключение: {OS = Linux, Browser = Safari} запрещена
  • Требование: IF PaymentType = CreditCard THEN CardNumber IS NOT empty

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

Задача 1

Checkout интернет-магазина имеет параметры:

ПараметрЗначения
Способ оплатыКарта, PayPal, Apple Pay, Банковский перевод
ДоставкаСтандартная, Экспресс, Ночная, Самовывоз
ВалютаUSD, EUR, GBP
Подарочная упаковкаДа, Нет
ПромокодНет, Процент, Фиксированная сумма
Решение

All-combinations: 4 * 4 * 3 * 2 * 3 = 288 тест-кейсов

Pairwise: ~16-20 тест-кейсов

Pairwise набор:

#ОплатаДоставкаВалютаУпаковкаПромокод
1КартаСтандартнаяUSDДаНет
2КартаЭкспрессEURНетПроцент
3КартаНочнаяGBPДаФикс. сумма
4PayPalСтандартнаяEURДаФикс. сумма
5PayPalЭкспрессGBPНетНет
6PayPalНочнаяUSDНетПроцент
7Apple PayСтандартнаяGBPНетПроцент
8Apple PayЭкспрессUSDДаФикс. сумма
9Apple PayНочнаяEURДаНет
10ПереводСтандартнаяUSDНетФикс. сумма
11ПереводЭкспрессEURДаНет
12ПереводНочнаяGBPНетПроцент
13КартаСамовывозUSDНетНет
14PayPalСамовывозEURДаПроцент
15Apple PayСамовывозGBPНетФикс. сумма
16ПереводСамовывозUSDДаПроцент

Задача 2

Добавьте ограничения:

  • Apple Pay доступен только для USD и EUR
  • Самовывоз не поддерживает подарочную упаковку
  • Банковский перевод не поддерживает ночную доставку
Решение

Модель PICT с ограничениями:

Payment: Card, PayPal, ApplePay, BankTransfer
Shipping: Standard, Express, Overnight, Pickup
Currency: USD, EUR, GBP
Gift: Yes, No
Discount: None, Percentage, Fixed

IF [Payment] = "ApplePay" THEN [Currency] IN {"USD", "EUR"};
IF [Shipping] = "Pickup" THEN [Gift] = "No";
IF [Payment] = "BankTransfer" THEN [Shipping] <> "Overnight";

Инструменты автоматически генерируют только валидные комбинации.

Выбор уровня покрытия

СитуацияРекомендуемая стратегия
Низкий риск, много параметровPairwise (2-way)
Safety-critical система4-6 way
Тестирование конфигурацийPairwise с ограничениями
Быстрый smoke testEach-choice или base-choice
Регуляторные требования3-way и выше

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

  • Комбинаторный взрыв делает all-combinations неосуществимым для большинства систем
  • Pairwise (2-way) обнаруживает 70-90% дефектов взаимодействия при значительно меньшем числе тестов
  • Исследование NIST: большинство дефектов связано с 2-6 взаимодействиями параметров
  • Покрывающие массивы — математическая основа генерации t-way тестов
  • Инструменты (PICT, ACTS, Jenny) автоматизируют генерацию с поддержкой ограничений
  • Всегда моделируйте ограничения для исключения невалидных комбинаций
  • Выбирайте силу покрытия на основе риска