Что такое Таблица принятия решений?
Это техника тест-дизайна, которая помогает визуализировать и протестировать систему со сложными правилами. Она идеально подходит, когда результат зависит от комбинации нескольких условий.
Алгоритм создания:
- Определить условия и действия. Что система проверяет (условия) и что она может сделать в ответ (действия)?
- Построить полную таблицу. Создать по одному столбцу (правилу) для каждой возможной комбинации. Если у вас
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: Пользователь: Читатель. Действия для проверки: Попробовать создать, прочитать, отредактировать и удалить сущность. Ожидаемый результат: Чтение - успешно. Создание, редактирование, удаление - отклонены (ошибка доступа).