Таблицы решений для сложных правил
Таблица решений превращает правило с несколькими условиями в сетку, где каждое сочетание условий видно отдельно. Из неё нельзя прочитать правило двумя способами.
Статья 02-11 показала, что правило лучше записывать отдельно от процесса. Но у правила могут быть несколько условий сразу, и обычная фраза начинает путать. Для таких случаев используют таблицу решений.
Таблица решений - это таблица, где столбцы слева задают условия, столбец справа задаёт результат, а каждая строка описывает одно правило. Условие - то, что проверяется (например, «постоянный покупатель»). Результат (действие) - то, что делает система, когда условия совпали (например, «скидка 5%»).
Кейс: скидки в «Узелке»
Владелец магазина «Узелок» сформулировал правило так: постоянным покупателям скидка 5%, при заказе от 3000 тоже 5%. Разработчик прочитал это как «скидки складываются» и сделал 10% для постоянного покупателя с большим заказом. Владелец имел в виду «берётся одна скидка», то есть 5%.
Никто не ошибся: фраза допускает оба прочтения. Расхождение нашли только по жалобе, когда магазин уже отдал лишние проценты.
Проценты и сумма в этом кейсе условные: мы взяли их для иллюстрации, а не из реального магазина.
Когда обычной фразы недостаточно
Фраза справляется, пока условие одно. Если условий два и больше, у читателя возникают вопросы: складываются ли результаты, что приоритетнее, что происходит, если не выполнено ничего. Вопросов тем больше, чем больше условий.
Признаки того, что пора переходить к таблице:
- в тексте правила встречаются слова «и», «или», «кроме», «но» подряд;
- разные люди пересказывают правило по-разному;
- результат зависит сразу от нескольких условий;
- при каждом изменении правила приходится перечитывать весь абзац.
Как устроена таблица
Слева идут условия, справа результат. Каждая строка задаёт одно сочетание условий и то, что из него следует. Для скидок из кейса получается такая таблица (числа условные):
| № | Постоянный покупатель | Сумма от 3000 | Скидка |
|---|---|---|---|
| 1 | да | да | 10% |
| 2 | да | нет | 5% |
| 3 | нет | да | 5% |
| 4 | нет | нет | 0% |
В строке 1 видно решение, которое во фразе скрывалось: при выполнении обоих условий скидка 10%. Владельцу достаточно посмотреть на строку и сказать «да» или «нет». Если он хотел 5%, в таблице меняется одна ячейка, и разночтения больше нет.
Столбцы условий называют входами, столбцы результата выходами. Такой язык использует и стандарт DMN (Decision Model and Notation): в нём таблица решений служит одним из способов описать решение, которое компания принимает много раз. Если команда использует инструменты на основе DMN, таблицу из этой статьи можно перенести в них почти без изменений.
Как проверить таблицу
Перед отправкой в работу таблицу проверяют на три вещи.
Полнота. Для каждого сочетания условий должна быть строка. Два условия со значениями «да» и «нет» дают четыре сочетания, три условия дают восемь. Если строки не хватает, система не знает, что делать в таком случае.
Противоречия. Две строки с одинаковыми условиями и разными результатами недопустимы. Разработчик выберет одну из них наугад. В таблицах из нескольких десятков строк такие пары легко пропустить, поэтому проверяют их по очереди.
Лишние строки. Если две строки дают один результат и отличаются одним условием, это условие в них безразлично. Их можно слить в одну, поставив прочерк: он значит «любое значение». Таблица становится короче, а правило читается быстрее.
Что делать, если подходят несколько строк
В примере выше каждому сочетанию соответствует ровно одна строка. В других таблицах подойти могут сразу несколько строк: например, правила для нескольких акций одновременно. Тогда нужно договориться, что считать итогом. В DMN это называют политикой попадания (hit policy). Её значения описаны в документации инструментов: например, UNIQUE означает, что подходит не больше одной строки, FIRST означает, что берётся результат первой подходящей строки, COLLECT означает, что собираются результаты всех подходящих строк.
Политику UNIQUE обычно берут по умолчанию. Для первых таблиц стоит держаться её: одна строка на одно сочетание условий, без исключений.
Где это встречается в работе
- В расчётах: скидки, стоимость доставки, комиссии, сроки.
- В правилах доступа: кто какое действие может выполнять в зависимости от роли и статуса.
- В выборе способа обработки: какой шаблон письма отправить, на какую очередь направить обращение.
- В тестировании: каждая строка таблицы превращается в один тестовый сценарий.
Итог
- Таблица решений нужна, когда результат зависит от нескольких условий сразу.
- Строка таблицы - одно правило: условия слева, результат справа.
- Таблица проверяется на полноту, на противоречия и на лишние строки.
- При пересечении строк нужно заранее договориться, какой результат считается итоговым.
- Таблицу из этой статьи можно перенести в инструменты на основе DMN.
Что дальше
- 02-18 Неполные и противоречивые требования: как находить пробелы и противоречия в описании.
- 02-25 От требований к тестированию: как превратить строки таблицы в тест-кейсы.
- 02-11 Бизнес-правила: к чему относится правило и как оформить его паспорт.
5 вопросов