itmo_conspects

Лекция 5. Таблицы решений и комбинации условий

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

Таблица решений, один из способов записи правил, состоит из 4 компонентов:

Правила задаются требованиями, например:

VIP-клиент получает скидку 10% при заказе от 10000 рублей
В остальных случаях действующий промокод предоставляет скидку 5%
Скидки не суммируются: применяется максимальная

В этом примере выделяются ключевые условия: статус клиента, сумма заказа и промокод

При сопоставлении условий, их значений и действий получаем такую таблицу:

Условие \ Правило R1 R2 R3 R4 R5 R6 R7 R8
VIP-клиент ✅ ✅ ✅ ✅ ❌ ❌ ❌ ❌
Сумма заказа не менее 10000 ✅ ✅ ❌ ❌ ✅ ✅ ❌ ❌
Действующий промокод ✅ ❌ ✅ ❌ ✅ ❌ ✅ ❌
Действия                
Скидка 10% ☑️ ☑️            
Скидка 5%     ☑️   ☑️   ☑️  
Без скидки       ☑️   ☑️   ☑️

Классы эквивалентности помогают сократить количество тестов. Например, сумма заказа делится на диапазоны “менее 0”, “от 0 до 9999” и “не менее 10000”, но на логику влияют только два последних, поэтому условие упрощается до используется бинарное сравнение “не менее 10000” и “менее 10000” вместо точного значения суммы

При трех бинарных условиях полная таблица содержит 8 правил, но при увеличении параметров число комбинаций растет экспоненциально, например, 4 параметра по 3 значения дают 81 тест. По этой причине применяются способы сокращения:

Например, если два столбца с одинаковым результатом “VIP-клиенту с заказом на сумму не менее 10000 дают скидку 10%” можно объединить в одну, так как промокод не влияет на действие. Таким же образом исключаются комбинации условий, которые противоречат друг другу (например, “новый клиент” и “пользователь, который был в системе больше года”). Такие комбинации исключаются из позитивных тестов, но могут стать негативными тестами для проверки обработки ошибок, поэтому важно документировать невозможность сценария

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

Таблица решений дополнительно выявляет в требованиях:

После объединения таблица из примера выше сокращается до трех правил (здесь применяется первое подходящее правило):

Условие \ Правило R1 R2 R3
VIP-клиент ✅ ➖ ➖
Сумма заказа не менее 10000 ✅ ➖ ➖
Действующий промокод ➖ ✅ ❌
Действия      
Скидка 10% ☑️    
Скидка 5%   ☑️  
Без скидки     ☑️

Правило “VIP-клиенту с заказом на сумму не менее 10000 дают скидку 10%” превращается в готовый тестовый сценарий, где предусловие - это “VIP-клиент с заказом 12000”, действие - это “оплатить без применения промокода”, а ожидаемый результат - это “получение скидки 10% к итоговой сумме”

Здесь дополнительные тесты могут проверять граничные значения, в этом примере можно проверить заказы на сумму 9999 и на сумму 10000

Обычно нет надобности отдельно тестировать невлияющее условие (в этом примере проверять те же условия, но с действующим промокодом), но такое решение зависит от критичности логики и риска проявления дефекта в этой части логики


Дополнительные параметры, такие как браузеры, ОС, языки и устройства, усложняют тесты. Например, для 4 параметров “браузер”, “ОС”, “язык” и “роль” по 3 значения полный перебор займет $3^4 = 81$ тест

Полный перебор непрактичен, поэтому используются подходы попарной проверки и проверки всех комбинаций из $T$ параметров

Выбор параметра $T$ зависит от критичности функции, стоимости выполнения теста, сложности взаимодействия, истории дефектов и требований к покрытию


Подытожим:

Алгоритм работы для построения таблицы решений и попарных проверок выглядит так: