Что такое Таблица принятия решений?
Это техника тест-дизайна, которая помогает визуализировать и протестировать систему со сложными правилами. Она идеально подходит, когда результат зависит от комбинации нескольких условий.
Алгоритм создания:
- Определить условия и действия. Что система проверяет (условия) и что она может сделать в ответ (действия)?
- Построить полную таблицу. Создать по одному столбцу (правилу) для каждой возможной комбинации. Если у вас
nбинарных (Да/Нет) условий, то получится2^nправил. - Заполнить действия. Для каждого правила отметить, какие действия выполняются (например, знаком 'X').
- Упростить ("схлопнуть") таблицу. Найти правила, которые приводят к одинаковым действиям, и объединить их, заменив различающиеся условия на знак "неважно" (
-). - Создать тест-кейсы. Каждый столбец в итоговой, упрощенной таблице — это один тест-кейс.
Пример 1: Расчет скидки в интернет-магазине
Условия (Conditions):
- Пользователь - новый клиент?
- Сумма заказа > 5000 руб?
- Есть активный промокод?
Действия (Actions):
- Скидка 10% (для новичков)
- Скидка 5% (за сумму)
- Скидка 15% (по промокоду)
- Бесплатная доставка
- Нет скидки / действий
Сначала строим таблицу со всеми возможными комбинациями. У нас 3 условия, каждое "Да/Нет", значит 2³ = 8 правил.
| Правила | ||||||||
|---|---|---|---|---|---|---|---|---|
| Условия | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| Новый клиент? | Да | Да | Да | Да | Нет | Нет | Нет | Нет |
| Сумма > 5000? | Да | Да | Нет | Нет | Да | Да | Нет | Нет |
| Есть промокод? | Да | Нет | Да | Нет | Да | Нет | Да | Нет |
| Действия | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| Скидка 15% (промокод) | X | X | X | X | ||||
| Скидка 10% (новичок) | X | X | ||||||
| Скидка 5% (сумма) | X | X | ||||||
| Бесплатная доставка | X | X | X | X | ||||
| Нет действий | X | |||||||
Теперь упрощаем. Например, если есть промокод (правила 1, 3, 5, 7), результат всегда один: скидка 15% и, если сумма позволяет, доставка. Статус клиента не важен. Это можно объединить.
| Правила | |||||
|---|---|---|---|---|---|
| Условия | R1 | R2 | R3 | R4 | R5 |
| Новый клиент? | - | Да | Да | Нет | Нет |
| Сумма > 5000? | Да | Да | - | Да | Нет |
| Есть промокод? | Да | Нет | Нет | Нет | Нет |
| Действия | R1 | R2 | R3 | R4 | R5 |
| Скидка 15% (промокод) | X | ||||
| Скидка 10% (новичок) | X | X | |||
| Скидка 5% (сумма) | X | X | |||
| Бесплатная доставка | X | X | X | ||
| Нет действий | X | ||||
Каждый столбец из упрощенной таблицы — это готовый тест-кейс, который проверяет уникальный сценарий.
- Тест-кейс 1 (по правилу R1): Условия: Есть промокод, Сумма > 5000. Ожидаемый результат: Скидка 15%, Бесплатная доставка.
- Тест-кейс 2 (по правилу R2): Условия: Новый клиент, Сумма > 5000, Промокода нет. Ожидаемый результат: Скидка 10%, Скидка 5%, Бесплатная доставка.
- Тест-кейс 3 (по правилу R3): Условия: Новый клиент, Промокода нет, Сумма < 5000. Ожидаемый результат: Скидка 10%.
- Тест-кейс 4 (по правилу R4): Условия: Старый клиент, Сумма > 5000, Промокода нет. Ожидаемый результат: Скидка 5%, Бесплатная доставка.
- Тест-кейс 5 (по правилу R5): Условия: Старый клиент, Сумма < 5000, Промокода нет. Ожидаемый результат: Нет скидок и действий.
Пример 2: Тестирование прав доступа (CRUD) для ролей
Таблицы отлично подходят для проверки ролевой модели. Здесь нет смысла строить полную таблицу, так как условия (роли) взаимоисключающие. Сразу создаем итоговую таблицу.
Условие (Condition):
- Роль пользователя
Действия (CRUD Actions):
- Создать (Create)
- Прочитать (Read)
- Редактировать (Update)
- Удалить (Delete)
Каждая роль — это правило. Мы просто отмечаем, какие действия ей доступны.
| Правила (Роли) | |||
|---|---|---|---|
| Условие | Администратор | Редактор | Читатель |
| Роль пользователя | Админ | Редактор | Читатель |
| Действия | |||
| Создать (Create) | Да | Да | Нет |
| Прочитать (Read) | Да | Да | Да |
| Редактировать (Update) | Да | Да | Нет |
| Удалить (Delete) | Да | Нет | Нет |
Тест-кейсы на основе таблицы:
- Тест-кейс 1: Пользователь: Администратор. Действия для проверки: Попробовать создать, прочитать, отредактировать и удалить сущность. Ожидаемый результат: Все операции успешны.
- Тест-кейс 2: Пользователь: Редактор. Действия для проверки: Попробовать создать, прочитать, отредактировать и удалить сущность. Ожидаемый результат: Создание, чтение, редактирование - успешно. Удаление - отклонено (ошибка доступа).
- Тест-кейс 3: Пользователь: Читатель. Действия для проверки: Попробовать создать, прочитать, отредактировать и удалить сущность. Ожидаемый результат: Чтение - успешно. Создание, редактирование, удаление - отклонены (ошибка доступа).