Классы и границы хорошо работают для одного поля. Когда результат зависит от сочетания нескольких условий или параметров, нужны другие техники: таблица решений для бизнес-правил и попарное тестирование для конфигураций.
Таблица решений
Таблица решений описывает логику «если такое сочетание условий, то такое действие».
- Строки: условия и действия.
- Столбцы: правила, то есть комбинации значений условий с ожидаемым действием.
- Каждое правило становится тестом.
Для n бинарных условий полная таблица содержит 2ⁿ правил: 3 условия дают 8, 4 условия 16, 5 условий 32.
Пример: бесплатная доставка
Правило: в обычном регионе доставка бесплатна при подписке или сумме от 3000 ₽, в удалённом только при подписке и сумме от 3000 ₽.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|
| Удалённый регион | Н | Н | Н | Н | Д | Д | Д | Д |
| Подписка | Д | Д | Н | Н | Д | Д | Н | Н |
| Сумма ≥ 3000 | Д | Н | Д | Н | Д | Н | Д | Н |
| Бесплатно | Д | Д | Д | Н | Д | Н | Н | Н |
Бесплатных правил 4. Таблица сразу показывает, где риск: правила 2 и 6 отличаются только регионом, а результат разный. Такие пары обязательно должны быть в тестах.
Сокращение
Если условие не влияет на результат при остальных фиксированных, правила сливают, ставя прочерк. Пример: кредит одобряют, только если есть доход и хорошая история.
| 1 | 2 | 3 | |
|---|---|---|---|
| Доход | Д | Д | Н |
| Хорошая история | Д | Н | - |
| Одобрить | Д | Н | Н |
Из 4 правил осталось 3. Сокращать можно только после заполнения полной таблицы, иначе легко слить правила с разными результатами.
Невозможные правила
Если условия взаимоисключающие («клиент новый» и «клиент с историей больше года»), часть правил не может случиться. Их помечают невозможными, но подтверждают это у аналитика и проверяют, что система не попадает в такое состояние через API или импорт данных.
Граф причин и следствий
Формальная техника: причины, следствия и логические связи (И, ИЛИ, НЕ, исключение) рисуют графом, а таблицу решений получают из него механически. Полезно, когда условий много и важно не пропустить комбинацию.
Попарное тестирование (pairwise)
Задача: 5 браузеров, 4 ОС, 3 языка, 2 темы. Полный перебор: 5 × 4 × 3 × 2 = 120 конфигураций.
Наблюдение: большинство дефектов взаимодействия вызывается одним параметром или парой параметров. Поэтому достаточно набора, где каждая пара значений любых двух параметров встретится хотя бы раз.
Пример для трёх флажков A, B, C со значениями 0 и 1:
A B C
0 0 0
0 1 1
1 0 1
1 1 0
Любые два столбца содержат все сочетания 00, 01, 10, 11. Четыре теста вместо восьми.
Нижняя граница числа тестов равна произведению размеров двух самых больших параметров: каждая их пара требует своего теста. Для 5 браузеров и 4 ОС меньше 20 тестов не бывает. Для 4 параметров по 3 значения нижняя граница 9, и её достигает ортогональный массив L9 (вместо 81 комбинации).
Наборы строят генераторами, например PICT от Microsoft. Важно задавать ограничения: Safari не бывает на Windows. Если удалить невозможный тест руками, выпадут и другие пары, которые он покрывал.
Чего pairwise не ловит
Дефект, который проявляется только при сочетании трёх конкретных значений (Safari, тёмная тема и арабский язык), может не попасть ни в один тест. Для важных мест используют покрытие троек или добавляют рискованные комбинации вручную.
Что выбрать
| Ситуация | Техника |
|---|---|
| Результат зависит от сочетания условий (тариф, скидка, права) | Таблица решений |
| Много независимых параметров, ожидаемо одинаковое поведение (конфигурации) | Pairwise |
| Одно поле с диапазоном | Классы и границы |
Pairwise на бизнес-правилах опасен: генератор выкинет как раз те комбинации, где меняется результат.
Частые ошибки
- Забывать, что таблица растёт как 2ⁿ, и не сокращать её.
- Сокращать до заполнения.
- Применять pairwise к зависимым параметрам.
- Удалять невозможные комбинации руками вместо ограничений в генераторе.
Что спросят на собесе
- Что такое таблица решений? Сколько в ней правил для 3 условий?
- Что такое pairwise и почему он работает?
- Как сократить матрицу из 120 конфигураций?
- Какие дефекты pairwise пропустит?
- Когда таблица решений, а когда pairwise?