Что такое тестирование таблицами решений?
Тестирование таблицами решений (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 отмечает, какие действия должны произойти для каждого правила
Построение таблицы решений: пошагово
Пример: Обработка страховых заявок
Бизнес-правила:
- Если заявитель — участник И сумма < $1000, автоматически одобрить
- Если заявитель — участник И сумма >= $1000, отправить менеджеру
- Если заявитель — НЕ участник И сумма < $1000, отправить на ревью
- Если заявитель — НЕ участник И сумма >= $1000, отклонить
Условия:
- Участник? (И/Л)
- Сумма < $1000? (И/Л)
Таблица решений:
| П1 | П2 | П3 | П4 | |
|---|---|---|---|---|
| Участник? | И | И | Л | Л |
| Сумма < $1000? | И | Л | И | Л |
| Действия | ||||
| Автоматически одобрить | X | |||
| Отправить менеджеру | X | |||
| Отправить на ревью | X | |||
| Отклонить | X |
4 правила = 4 тест-кейса. Каждый тест-кейс проверяет уникальную комбинацию.
Работа с более чем двумя значениями
Когда условия имеют более двух значений, таблица растёт соответственно. Условие с 3 значениями в комбинации с бинарным условием даёт 3 x 2 = 6 правил.
Пример: Скорость доставки + членство
| П1 | П2 | П3 | П4 | П5 | П6 | |
|---|---|---|---|---|---|---|
| Доставка | Standard | Standard | Express | Express | Overnight | Overnight |
| Premium-участник? | И | Л | И | Л | И | Л |
| Действия | ||||||
| Бесплатная доставка | X | X | ||||
| Плата $5 | X | |||||
| Плата $10 | X | X | ||||
| Плата $25 | X |
Упрощение таблиц решений
Когда два правила имеют одинаковые действия и отличаются только в одном условии, их можно объединить. Несущественное условие помечается прочерком (-).
До упрощения:
| П1 | П2 | |
|---|---|---|
| Условие А | И | Л |
| Условие Б | И | И |
| Действие: Обработать | X | X |
После упрощения:
| П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 Unauthorized | X | |||||
| 403 Forbidden | X | |||||
| 400 Bad Request | X | |||||
| 200 Пустой список | X | |||||
| 416 Ошибка диапазона | X | |||||
| 200 С данными | X |
Обратите внимание на каскадный паттерн: ранние отказы (auth, разрешение) делают последующие условия несущественными (помечены -).
Расширенные таблицы решений
Вместо И/Л условия могут иметь конкретные значения. Это называется таблица с расширенным входом.
Пример: Расчёт налога
| П1 | П2 | П3 | П4 | |
|---|---|---|---|---|
| Страна | US | US | EU | EU |
| Сумма | < $100 | >= $100 | < €100 | >= €100 |
| Налог | ||||
| Ставка | 0% | 8% | 0% | 20% |
| Нужна форма? | Нет | Да | Нет | Да |
Упражнение: Постройте таблицу решений
Сценарий: Система одобрения банковских кредитов использует следующие правила:
- Кредитный рейтинг: Хороший (700+) или Плохой (<700)
- Занятость: Работает или Не работает
- Существующий долг: Низкий (<50% от дохода) или Высокий (>=50%)
Правила:
- Хороший рейтинг + Работает + Низкий долг → Одобрить по стандартной ставке
- Хороший рейтинг + Работает + Высокий долг → Одобрить по повышенной ставке
- Хороший рейтинг + Не работает + Низкий долг → Ручная проверка
- Хороший рейтинг + Не работает + Высокий долг → Отклонить
- Плохой рейтинг + Работает + Низкий долг → Одобрить по повышенной ставке
- Плохой рейтинг + Работает + Высокий долг → Отклонить
- Плохой рейтинг + Не работает → Отклонить (независимо от долга)
Задание: Постройте таблицу решений. Сколько тест-кейсов нужно? Можно ли упростить какие-то правила?
Подсказка
Начните с 2^3 = 8 комбинаций. Последнее бизнес-правило («Плохой рейтинг + Не работает → Отклонить независимо от долга») означает, что две строки можно объединить.
Решение
Полная таблица (до упрощения):
| П1 | П2 | П3 | П4 | П5 | П6 | П7 | П8 | |
|---|---|---|---|---|---|---|---|---|
| Рейтинг | Хор. | Хор. | Хор. | Хор. | Плох. | Плох. | Плох. | Плох. |
| Работает? | И | И | Л | Л | И | И | Л | Л |
| Низкий долг? | И | Л | И | Л | И | Л | И | Л |
| Действие | ||||||||
| Одобрить стандарт | X | |||||||
| Одобрить повышенная | X | X | ||||||
| Ручная проверка | X | |||||||
| Отклонить | X | X | X | X |
Упрощённая таблица (П7 + П8 объединены):
| П1 | П2 | П3 | П4 | П5 | П6 | П7* | |
|---|---|---|---|---|---|---|---|
| Рейтинг | Хор. | Хор. | Хор. | Хор. | Плох. | Плох. | Плох. |
| Работает? | И | И | Л | Л | И | И | Л |
| Низкий долг? | И | Л | И | Л | И | Л | - |
| Действие | |||||||
| Одобрить стандарт | X | ||||||
| Одобрить повышенная | X | X | |||||
| Ручная проверка | X | ||||||
| Отклонить | X | X | X |
7 тест-кейсов необходимо (уменьшено с 8 за счёт объединения правил «Плохой + Не работает»).
Советы профессионала
- Начинайте со спецификации. Каждое «если/то» в требованиях отображается в условия и действия. Выделяйте их.
- Валидируйте со стейкхолдерами. Таблицы решений делают бизнес-правила видимыми. Пройдитесь по таблице с product owner, чтобы обнаружить отсутствующие или противоречивые правила.
- Следите за действиями по умолчанию. Что происходит, когда ни одно правило не совпадает? Спецификация может не указывать — это дефект спецификации.
- Используйте таблицы решений для выбора регрессионных тестов. При изменении бизнес-правила затронутые правила в таблице показывают, какие именно тест-кейсы нужно перезапустить.
- Комбинируйте с EP и BVA. После определения комбинаций правил таблицей решений, используйте EP и BVA для выбора конкретных значений каждого условия.