Таблицы решений для сложных правил

Таблица решений превращает правило с несколькими условиями в сетку, где каждое сочетание условий видно отдельно. Из неё нельзя прочитать правило двумя способами.


Статья 02-11 показала, что правило лучше записывать отдельно от процесса. Но у правила могут быть несколько условий сразу, и обычная фраза начинает путать. Для таких случаев используют таблицу решений.

Таблица решений - это таблица, где столбцы слева задают условия, столбец справа задаёт результат, а каждая строка описывает одно правило. Условие - то, что проверяется (например, «постоянный покупатель»). Результат (действие) - то, что делает система, когда условия совпали (например, «скидка 5%»).

Кейс: скидки в «Узелке»

Владелец магазина «Узелок» сформулировал правило так: постоянным покупателям скидка 5%, при заказе от 3000 тоже 5%. Разработчик прочитал это как «скидки складываются» и сделал 10% для постоянного покупателя с большим заказом. Владелец имел в виду «берётся одна скидка», то есть 5%.

Никто не ошибся: фраза допускает оба прочтения. Расхождение нашли только по жалобе, когда магазин уже отдал лишние проценты.

Рисунок 1. Одно правило скидки словами и два его разных прочтения

Проценты и сумма в этом кейсе условные: мы взяли их для иллюстрации, а не из реального магазина.

Когда обычной фразы недостаточно

Фраза справляется, пока условие одно. Если условий два и больше, у читателя возникают вопросы: складываются ли результаты, что приоритетнее, что происходит, если не выполнено ничего. Вопросов тем больше, чем больше условий.

Признаки того, что пора переходить к таблице:

  • в тексте правила встречаются слова «и», «или», «кроме», «но» подряд;
  • разные люди пересказывают правило по-разному;
  • результат зависит сразу от нескольких условий;
  • при каждом изменении правила приходится перечитывать весь абзац.

Как устроена таблица

Слева идут условия, справа результат. Каждая строка задаёт одно сочетание условий и то, что из него следует. Для скидок из кейса получается такая таблица (числа условные):

Рисунок 2. Таблица решений: две проверки и четыре строки со скидками
№ Постоянный покупатель Сумма от 3000 Скидка
1 да да 10%
2 да нет 5%
3 нет да 5%
4 нет нет 0%

В строке 1 видно решение, которое во фразе скрывалось: при выполнении обоих условий скидка 10%. Владельцу достаточно посмотреть на строку и сказать «да» или «нет». Если он хотел 5%, в таблице меняется одна ячейка, и разночтения больше нет.

Столбцы условий называют входами, столбцы результата выходами. Такой язык использует и стандарт DMN (Decision Model and Notation): в нём таблица решений служит одним из способов описать решение, которое компания принимает много раз. Если команда использует инструменты на основе DMN, таблицу из этой статьи можно перенести в них почти без изменений.

Как проверить таблицу

Перед отправкой в работу таблицу проверяют на три вещи.

Рисунок 3. Три проверки таблицы решений: полнота, противоречия и сжатие

Полнота. Для каждого сочетания условий должна быть строка. Два условия со значениями «да» и «нет» дают четыре сочетания, три условия дают восемь. Если строки не хватает, система не знает, что делать в таком случае.

Рисунок 4. Два условия дают четыре сочетания, три условия дают восемь

Противоречия. Две строки с одинаковыми условиями и разными результатами недопустимы. Разработчик выберет одну из них наугад. В таблицах из нескольких десятков строк такие пары легко пропустить, поэтому проверяют их по очереди.

Лишние строки. Если две строки дают один результат и отличаются одним условием, это условие в них безразлично. Их можно слить в одну, поставив прочерк: он значит «любое значение». Таблица становится короче, а правило читается быстрее.

Что делать, если подходят несколько строк

В примере выше каждому сочетанию соответствует ровно одна строка. В других таблицах подойти могут сразу несколько строк: например, правила для нескольких акций одновременно. Тогда нужно договориться, что считать итогом. В DMN это называют политикой попадания (hit policy). Её значения описаны в документации инструментов: например, UNIQUE означает, что подходит не больше одной строки, FIRST означает, что берётся результат первой подходящей строки, COLLECT означает, что собираются результаты всех подходящих строк.

Рисунок 5. Три значения политики попадания: UNIQUE, FIRST и COLLECT

Политику UNIQUE обычно берут по умолчанию. Для первых таблиц стоит держаться её: одна строка на одно сочетание условий, без исключений.

Где это встречается в работе

  • В расчётах: скидки, стоимость доставки, комиссии, сроки.
  • В правилах доступа: кто какое действие может выполнять в зависимости от роли и статуса.
  • В выборе способа обработки: какой шаблон письма отправить, на какую очередь направить обращение.
  • В тестировании: каждая строка таблицы превращается в один тестовый сценарий.

Итог

  • Таблица решений нужна, когда результат зависит от нескольких условий сразу.
  • Строка таблицы - одно правило: условия слева, результат справа.
  • Таблица проверяется на полноту, на противоречия и на лишние строки.
  • При пересечении строк нужно заранее договориться, какой результат считается итоговым.
  • Таблицу из этой статьи можно перенести в инструменты на основе DMN.

Что дальше

  • 02-18 Неполные и противоречивые требования: как находить пробелы и противоречия в описании.
  • 02-25 От требований к тестированию: как превратить строки таблицы в тест-кейсы.
  • 02-11 Бизнес-правила: к чему относится правило и как оформить его паспорт.
Проверка знаний

5 вопросов