Интерактивная шпаргалка: Таблица принятия решений

Научитесь превращать сложную бизнес-логику в простой и эффективный набор тестов.

Что такое Таблица принятия решений?

Это техника тест-дизайна, которая помогает визуализировать и протестировать систему со сложными правилами. Она идеально подходит, когда результат зависит от комбинации нескольких условий.


Алгоритм создания:

  1. Определить условия и действия. Что система проверяет (условия) и что она может сделать в ответ (действия)?
  2. Построить полную таблицу. Создать по одному столбцу (правилу) для каждой возможной комбинации. Если у вас n бинарных (Да/Нет) условий, то получится 2^n правил.
  3. Заполнить действия. Для каждого правила отметить, какие действия выполняются (например, знаком 'X').
  4. Упростить ("схлопнуть") таблицу. Найти правила, которые приводят к одинаковым действиям, и объединить их, заменив различающиеся условия на знак "неважно" (-).
  5. Создать тест-кейсы. Каждый столбец в итоговой, упрощенной таблице — это один тест-кейс.

Пример 1: Расчет скидки в интернет-магазине

Условия (Conditions):
  • Пользователь - новый клиент?
  • Сумма заказа > 5000 руб?
  • Есть активный промокод?
Действия (Actions):
  • Скидка 10% (для новичков)
  • Скидка 5% (за сумму)
  • Скидка 15% (по промокоду)
  • Бесплатная доставка
  • Нет скидки / действий

Сначала строим таблицу со всеми возможными комбинациями. У нас 3 условия, каждое "Да/Нет", значит 2³ = 8 правил.

Правила
Условия 12345678
Новый клиент? ДаДаДаДаНетНетНетНет
Сумма > 5000? ДаДаНетНетДаДаНетНет
Есть промокод? ДаНетДаНетДаНетДаНет
Действия 12345678
Скидка 15% (промокод) XXXX
Скидка 10% (новичок) XX
Скидка 5% (сумма) XX
Бесплатная доставка XXXX
Нет действий X

Теперь упрощаем. Например, если есть промокод (правила 1, 3, 5, 7), результат всегда один: скидка 15% и, если сумма позволяет, доставка. Статус клиента не важен. Это можно объединить.

Правила
Условия R1R2R3R4R5
Новый клиент? -ДаДаНетНет
Сумма > 5000? ДаДа-ДаНет
Есть промокод? ДаНетНетНетНет
Действия R1R2R3R4R5
Скидка 15% (промокод) X
Скидка 10% (новичок) XX
Скидка 5% (сумма) XX
Бесплатная доставка XXX
Нет действий 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: Пользователь: Читатель. Действия для проверки: Попробовать создать, прочитать, отредактировать и удалить сущность. Ожидаемый результат: Чтение - успешно. Создание, редактирование, удаление - отклонены (ошибка доступа).