ТестированиеРучное тестированиеИнженер по ручному тестированию

В правилах скидки результат зависит от трёх независимых условий. Как выявить комбинации условий, которые не...

В правилах скидки результат зависит от трёх независимых условий. Как выявить комбинации условий, которые не покрывает набор тестов?

Проходите собеседования с ИИ помощником Hintsage

Краткий ответ

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

Исторический контекст

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

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

Постановка проблемы

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

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

Подробное решение

Сначала выделите условия и их возможные значения. Например: клиент является постоянным или новым; сумма заказа достигает порога или нет; промокод действителен или недействителен.

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

После этого сравните таблицу с существующими тестами. Если один тест проверяет несколько комбинаций благодаря параметрам или ветвлениям, это нужно явно зафиксировать; иначе нельзя уверенно утверждать, что все правила покрыты.

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

Если комбинаций слишком много, применяют анализ рисков, объединение эквивалентных правил или попарное покрытие. Компромисс состоит в том, что сокращённый набор экономит время, но может пропустить дефект, возникающий только при взаимодействии трёх и более условий.

Ситуация из практики

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

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

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

Что кандидаты часто упускают

1. Достаточно ли проверить каждое условие отдельно?

Нет. Такие проверки показывают поведение системы при изменении одного фактора, но не подтверждают корректность их совместного влияния. Дефект может проявляться только в конкретной комбинации, например при одновременном выполнении двух условий или при конфликте приоритетов.

2. Нужно ли включать в таблицу все математически возможные комбинации?

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

3. Чем таблица решений отличается от проверки каждого требования по отдельности?

Проверка требований по отдельности может не показать связи между ними. Таблица решений рассматривает условия совместно и делает видимыми конфликты, пропуски и неоднозначные результаты для одной комбинации.