Комбинаторный взрыв
Когда система имеет несколько параметров, каждый с несколькими значениями, общее число комбинаций растёт экспоненциально. Веб-форма с 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 Combos | Pairwise | 3-way | 4-way |
|---|---|---|---|---|---|
| 5 | 3 | 243 | ~15 | ~45 | ~81 |
| 10 | 3 | 59 049 | ~20 | ~60 | ~120 |
| 15 | 4 | ~1 млрд | ~30 | ~120 | ~350 |
5. All-Combinations
Каждая возможная комбинация. Осуществимо только для очень малых пространств.
Исследование NIST
| Сила взаимодействия | Обнаруженные дефекты (накопительно) |
|---|---|
| 1-way | 40-65% |
| 2-way (pairwise) | 70-90% |
| 3-way | 90-98% |
| 4-way | 96-100% |
| 6-way | 100% |
Покрывающие массивы
Покрывающий массив 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 | Да | Фикс. сумма |
| 4 | PayPal | Стандартная | EUR | Да | Фикс. сумма |
| 5 | PayPal | Экспресс | GBP | Нет | Нет |
| 6 | PayPal | Ночная | USD | Нет | Процент |
| 7 | Apple Pay | Стандартная | GBP | Нет | Процент |
| 8 | Apple Pay | Экспресс | USD | Да | Фикс. сумма |
| 9 | Apple Pay | Ночная | EUR | Да | Нет |
| 10 | Перевод | Стандартная | USD | Нет | Фикс. сумма |
| 11 | Перевод | Экспресс | EUR | Да | Нет |
| 12 | Перевод | Ночная | GBP | Нет | Процент |
| 13 | Карта | Самовывоз | USD | Нет | Нет |
| 14 | PayPal | Самовывоз | EUR | Да | Процент |
| 15 | Apple 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 test | Each-choice или base-choice |
| Регуляторные требования | 3-way и выше |
Ключевые выводы
- Комбинаторный взрыв делает all-combinations неосуществимым для большинства систем
- Pairwise (2-way) обнаруживает 70-90% дефектов взаимодействия при значительно меньшем числе тестов
- Исследование NIST: большинство дефектов связано с 2-6 взаимодействиями параметров
- Покрывающие массивы — математическая основа генерации t-way тестов
- Инструменты (PICT, ACTS, Jenny) автоматизируют генерацию с поддержкой ограничений
- Всегда моделируйте ограничения для исключения невалидных комбинаций
- Выбирайте силу покрытия на основе риска