Таблицы решений: как проверить сложную логику и ничего не забыть
Когда в требованиях появляется несколько «если», разобраться в них на слух невозможно. Таблица решений превращает путаницу в сетку, где сразу видно пропущенные случаи.
Что это такое
Таблица решений — способ разложить логику «если — то» на две части: условия (что может быть истинно) и действия (что происходит). Каждый столбец — одно правило: сочетание условий и результат.
Техника простая, но у неё есть свойство, которого нет у остальных: она находит дефекты в самих требованиях, ещё до того как их запрограммировали. Это самый дешёвый дефект из возможных.
Пример: скидка в интернет-магазине
Требования звучат так: «Постоянным клиентам скидка 10%. При заказе от 5000 ₽ скидка 5%. Скидки не суммируются, применяется большая. По промокоду скидка 15%, промокод не сочетается с другими скидками».
На слух кажется понятным. Раскладываем:
| Условие | П1 | П2 | П3 | П4 | П5 | П6 |
|---|---|---|---|---|---|---|
| Постоянный клиент | да | да | нет | нет | да | нет |
| Сумма ≥ 5000 | да | нет | да | нет | да | да |
| Есть промокод | нет | нет | нет | нет | да | да |
| Скидка | 10% | 10% | 5% | 0% | 15% | 15% |
И вот тут начинается интересное. Разложив, мы получили конкретные вопросы, которых не было видно в тексте:
- Правило 5: промокод 15% против скидки постоянного 10% — применяется 15%. А если бы скидка постоянного была 20%? В требованиях не сказано.
- А что, если промокод даёт меньше, чем скидка постоянного клиента? «Не сочетается» — значит, клиент теряет свою скидку?
- Сумма 5000 — это до применения скидки или после?
- Промокод проверяется на срок действия и число использований? В требованиях об этом ни слова.
Четыре вопроса, найденные за десять минут с таблицей, — это четыре дефекта, которые не появятся. Исправить требование стоит минуту разговора. Исправить готовый код, из-за которого клиенты получили не ту скидку, — намного дороже.
Как построить таблицу
- Выпишите условия. Всё, от чего зависит результат: статус клиента, сумма, наличие промокода, регион.
- Выпишите действия. Что система делает: применяет скидку, отказывает, показывает сообщение.
- Постройте комбинации. При n логических условий их 2ⁿ: три условия — восемь столбцов.
- Заполните результаты. Здесь и всплывают пробелы: столбцы, для которых в требованиях ответа нет.
- Уберите невозможные сочетания и объедините одинаковые.
- Превратите оставшиеся столбцы в проверки. Каждый столбец — один тест-кейс.
Пятый шаг важен: если при трёх условиях получилось восемь столбцов, но четыре из них дают одинаковый результат, их можно свернуть в один — и проверок станет меньше.
Где эта техника незаменима
- Скидки, тарифы, начисления — везде, где считаются деньги по правилам.
- Права доступа. Кто что видит и может: роль, владелец, статус записи.
- Статусы и переходы. Что можно сделать с заказом в каждом состоянии.
- Условия отображения. Когда кнопка активна, когда блок показывается.
- Расчёт доставки. Регион, вес, способ, сумма заказа — классический случай.
Ещё пример: доступ к документу
Права доступа — вторая классическая область для этой техники, и там пробелы в требованиях встречаются почти всегда.
Условия: пользователь — владелец документа; у пользователя роль администратора; документ опубликован. Действия: читать, редактировать, удалять.
| Условие | П1 | П2 | П3 | П4 |
|---|---|---|---|---|
| Владелец | да | нет | нет | нет |
| Администратор | нет | да | нет | нет |
| Опубликован | нет | нет | да | нет |
| Чтение | да | да | да | нет |
| Редактирование | да | да | нет | нет |
| Удаление | да | да | нет | нет |
И сразу вопросы, которых не было в тексте требований: может ли администратор редактировать чужой опубликованный документ без ведома автора? Что происходит при снятии публикации — доступ пропадает мгновенно или до конца сессии? Владелец может удалить документ, на который уже ссылаются другие?
Каждый такой вопрос — потенциальная дыра в правах, то есть дефект безопасности. Найти его таблицей стоит десять минут, найти в проде — совсем других денег.
Чем отличается от попарного тестирования
Обе техники работают с комбинациями, но решают разные задачи, и их часто путают.
| Таблица решений | Попарное | |
|---|---|---|
| Задача | Разобрать логику и найти пробелы | Сократить число комбинаций |
| Полнота | Все комбинации условий | Только пары значений |
| Когда применять | Правил немного, но они запутаны | Параметров много, логика простая |
| Что находит | Противоречия в требованиях | Дефекты сочетаний |
На практике их применяют вместе: таблица показывает правила, а если параметров становится слишком много, набор сокращают попарным методом. Разбор второй техники — в статье про попарное тестирование.
Когда таблица не нужна
Честно о границах: при одном-двух условиях таблица избыточна, проще проверить напрямую. При десяти условиях она разрастается до тысячи столбцов и становится нечитаемой — тогда логику дробят на части и строят несколько таблиц поменьше.
Рабочий диапазон — три-пять условий. Это как раз тот случай, когда на слух уже не удержать, а формализовать ещё несложно.
Как применять таблицу, если требований нет?
Тогда она нужна ещё больше. Постройте её по тому, как система работает сейчас, и покажите аналитику: «вот что я вижу, вот эти четыре случая непонятны». Это превращает отсутствие требований из проблемы в задачу.
Обязательно ли рисовать в таблице?
Формат не важен: подойдёт лист бумаги, таблица или список. Важна сама процедура — перебрать сочетания и найти пустые клетки.
Что спрашивают на собеседовании?
Обычно просят объяснить технику и привести пример. Сильный ответ — рассказать не про проверки, а про найденные противоречия в требованиях: это показывает, что вы техникой пользовались.