Что такое тестирование таблицами решений?

Тестирование таблицами решений (Decision Table Testing) — техника чёрного ящика для проверки систем, где результат зависит от комбинаций условий. Когда бизнес-правила включают несколько входных данных, взаимодействующих для определения результата, таблица решений гарантирует тестирование каждой значимой комбинации.

Когда использовать таблицы решений

Используйте эту технику когда:

  • Несколько условий комбинируются для определения результата
  • Бизнес-правила содержат сложную логику if/then/else
  • Спецификация говорит «если A и B, то X; если A и не B, то Y»
  • Необходимо убедиться, что каждая комбинация обрабатывается правильно

Анатомия таблицы решений

Таблица решений имеет четыре квадранта:

                    | Правило 1 | Правило 2 | Правило 3 | Правило 4 |
--------------------|-----------|-----------|-----------|-----------|
Условия:            |           |           |           |           |
  Условие 1         |     И     |     И     |     Л     |     Л     |
  Условие 2         |     И     |     Л     |     И     |     Л     |
--------------------|-----------|-----------|-----------|-----------|
Действия:           |           |           |           |           |
  Действие 1        |     X     |     X     |           |           |
  Действие 2        |           |           |     X     |     X     |
  • Условия (верхняя часть): Входные условия — истина (И) или ложь (Л)
  • Правила (столбцы): Каждая уникальная комбинация значений условий
  • Действия (нижняя часть): Ожидаемые результаты для каждого правила
  • X отмечает, какие действия должны произойти для каждого правила

Построение таблицы решений: пошагово

flowchart TD A[1. Перечислить все условия] --> B[2. Перечислить все действия] B --> C["3. Рассчитать количество правил: 2^n"] C --> D[4. Заполнить все комбинации условий] D --> E[5. Определить действия для каждого правила] E --> F[6. Упростить: убрать невозможные комбинации] F --> G[7. Объединить правила с несущественными условиями] G --> H[8. Создать один тест-кейс на правило]

Пример: Обработка страховых заявок

Бизнес-правила:

  • Если заявитель — участник И сумма < $1000, автоматически одобрить
  • Если заявитель — участник И сумма >= $1000, отправить менеджеру
  • Если заявитель — НЕ участник И сумма < $1000, отправить на ревью
  • Если заявитель — НЕ участник И сумма >= $1000, отклонить

Условия:

  1. Участник? (И/Л)
  2. Сумма < $1000? (И/Л)

Таблица решений:

П1П2П3П4
Участник?ИИЛЛ
Сумма < $1000?ИЛИЛ
Действия
Автоматически одобритьX
Отправить менеджеруX
Отправить на ревьюX
ОтклонитьX

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

Работа с более чем двумя значениями

Когда условия имеют более двух значений, таблица растёт соответственно. Условие с 3 значениями в комбинации с бинарным условием даёт 3 x 2 = 6 правил.

Пример: Скорость доставки + членство

П1П2П3П4П5П6
ДоставкаStandardStandardExpressExpressOvernightOvernight
Premium-участник?ИЛИЛИЛ
Действия
Бесплатная доставкаXX
Плата $5X
Плата $10XX
Плата $25X

Упрощение таблиц решений

Когда два правила имеют одинаковые действия и отличаются только в одном условии, их можно объединить. Несущественное условие помечается прочерком (-).

До упрощения:

П1П2
Условие АИЛ
Условие БИИ
Действие: ОбработатьXX

После упрощения:

П1
Условие А-
Условие БИ
Действие: ОбработатьX

Условие А не имеет значения когда Б истинно — одно правило заменяет два.

Продвинутые техники таблиц решений

Работа с большими таблицами

При N бинарных условиях полная таблица содержит 2^N правил. Для 5 условий это 32 правила. Для 10 условий — 1024. Большие таблицы становятся непрактичными, поэтому используйте следующие стратегии:

1. Исключите невозможные комбинации. Не все комбинации могут существовать в реальности.

Условие: "Пользователь авторизован" = Л
Условие: "Роль пользователя — admin" = И
→ Невозможно: нельзя быть admin если не авторизован

2. Определите независимые условия. Если некоторые условия не взаимодействуют, разделите на отдельные маленькие таблицы.

3. Используйте cause-effect graphing (рассматривается в уроке 3.5) для выявления ограничений между условиями.

Таблицы решений для тестирования API

Таблицы решений отлично подходят для тестирования API-эндпоинтов с несколькими параметрами, влияющими на ответ:

Пример: GET /orders endpoint

П1П2П3П4П5П6
Токен auth валиден?ЛИИИИИ
Есть разрешение?-ЛИИИИ
Фильтр status валиден?--ЛИИИ
Результаты существуют?---ЛИИ
Страница в диапазоне?----ЛИ
Ответ
401 UnauthorizedX
403 ForbiddenX
400 Bad RequestX
200 Пустой списокX
416 Ошибка диапазонаX
200 С даннымиX

Обратите внимание на каскадный паттерн: ранние отказы (auth, разрешение) делают последующие условия несущественными (помечены -).

Расширенные таблицы решений

Вместо И/Л условия могут иметь конкретные значения. Это называется таблица с расширенным входом.

Пример: Расчёт налога

П1П2П3П4
СтранаUSUSEUEU
Сумма< $100>= $100< €100>= €100
Налог
Ставка0%8%0%20%
Нужна форма?НетДаНетДа

Упражнение: Постройте таблицу решений

Сценарий: Система одобрения банковских кредитов использует следующие правила:

  • Кредитный рейтинг: Хороший (700+) или Плохой (<700)
  • Занятость: Работает или Не работает
  • Существующий долг: Низкий (<50% от дохода) или Высокий (>=50%)

Правила:

  • Хороший рейтинг + Работает + Низкий долг → Одобрить по стандартной ставке
  • Хороший рейтинг + Работает + Высокий долг → Одобрить по повышенной ставке
  • Хороший рейтинг + Не работает + Низкий долг → Ручная проверка
  • Хороший рейтинг + Не работает + Высокий долг → Отклонить
  • Плохой рейтинг + Работает + Низкий долг → Одобрить по повышенной ставке
  • Плохой рейтинг + Работает + Высокий долг → Отклонить
  • Плохой рейтинг + Не работает → Отклонить (независимо от долга)

Задание: Постройте таблицу решений. Сколько тест-кейсов нужно? Можно ли упростить какие-то правила?

Подсказка

Начните с 2^3 = 8 комбинаций. Последнее бизнес-правило («Плохой рейтинг + Не работает → Отклонить независимо от долга») означает, что две строки можно объединить.

Решение

Полная таблица (до упрощения):

П1П2П3П4П5П6П7П8
РейтингХор.Хор.Хор.Хор.Плох.Плох.Плох.Плох.
Работает?ИИЛЛИИЛЛ
Низкий долг?ИЛИЛИЛИЛ
Действие
Одобрить стандартX
Одобрить повышеннаяXX
Ручная проверкаX
ОтклонитьXXXX

Упрощённая таблица (П7 + П8 объединены):

П1П2П3П4П5П6П7*
РейтингХор.Хор.Хор.Хор.Плох.Плох.Плох.
Работает?ИИЛЛИИЛ
Низкий долг?ИЛИЛИЛ-
Действие
Одобрить стандартX
Одобрить повышеннаяXX
Ручная проверкаX
ОтклонитьXXX

7 тест-кейсов необходимо (уменьшено с 8 за счёт объединения правил «Плохой + Не работает»).

Советы профессионала

  • Начинайте со спецификации. Каждое «если/то» в требованиях отображается в условия и действия. Выделяйте их.
  • Валидируйте со стейкхолдерами. Таблицы решений делают бизнес-правила видимыми. Пройдитесь по таблице с product owner, чтобы обнаружить отсутствующие или противоречивые правила.
  • Следите за действиями по умолчанию. Что происходит, когда ни одно правило не совпадает? Спецификация может не указывать — это дефект спецификации.
  • Используйте таблицы решений для выбора регрессионных тестов. При изменении бизнес-правила затронутые правила в таблице показывают, какие именно тест-кейсы нужно перезапустить.
  • Комбинируйте с EP и BVA. После определения комбинаций правил таблицей решений, используйте EP и BVA для выбора конкретных значений каждого условия.