Таблицы решений
Условий на скидку четыре: есть подписка, сумма больше порога, первый заказ, действует промокод. Сочетаний «да-нет» получается 16. Пять условий дали бы 32, шесть - 64. В требованиях при этом обычно описаны три случая, а про остальные тринадцать не сказано ничего.
Стержень: таблица решений заставляет перебрать ВСЕ сочетания условий и тем самым вскрывает дыры в требованиях ещё до написания тестов.
// Формулировки: «когда нужна таблица решений?», «в чём её главная ценность?», «что делать с невозможными сочетаниями?».
Как устроена таблица
Сверху перечисляют условия, снизу - действия, а каждый столбец описывает одно сочетание: какие условия выполнены и что система должна сделать. Число столбцов при условиях типа «да-нет» равно двойке в степени числа условий: три условия дают 8 столбцов, четыре - 16, пять - 32, шесть - 64.
Заполнение идёт механически - именно в этом сила. Ты не придумываешь случаи, а перебираешь их подряд, и каждая ячейка «что должна сделать система» требует ответа. Там, где ответа нет, ты нашёл дыру в требованиях.
// Условия не обязаны быть двоичными. Статус заказа с четырьмя значениями даёт четыре ветки, а не две, и число столбцов растёт как произведение: четыре статуса на два признака на три тарифа - 24 столбца.
- таблица решений
- условия сверху, действия снизу, столбец = одно сочетание
Главная ценность и свёртка
Главная ценность таблицы - не сами тесты, а вопросы к аналитику. В моём примере с четырьмя условиями требования описывали три случая из шестнадцати. Остальные тринадцать - это тринадцать вопросов «а что должно происходить тут», заданных ДО разработки. Каждый такой вопрос дешевле бага на проде в разы.
После заполнения таблицу сворачивают. Если при выполненном первом условии результат не зависит от остальных, все эти столбцы схлопываются в один с пометкой «остальное неважно». Шестнадцать столбцов нередко превращаются в пять-шесть содержательных.
// Свёртка - это шаг ПОСЛЕ полного перебора, а не вместо него. Свернёшь заранее, «на глазок» - и потеряешь ровно те сочетания, которые никто не рассматривал; они и есть самые интересные.
- свёртка таблицы
- столбцы с одинаковым результатом схлопываются в один
Невозможное и рост размера
Часть сочетаний невозможна физически: «первый заказ» и «есть история покупок» вместе не бывают. Такие столбцы помечают невозможными и не тестируют как сценарий - но обязательно проверяют, что система не даст их создать. Невозможное состояние, которое всё-таки возникло, обычно и есть источник самых загадочных багов.
Когда условий становится много, таблица перестаёт помещаться в голову: восемь условий это 256 столбцов. Тут два выхода. Первый - разбить на несколько таблиц по смыслу: отдельно право на скидку, отдельно её размер. Второй - если сочетания слабо связаны, перейти к попарному покрытию из соседней подтемы.
// Признак, что таблица нужна: в требованиях встречаются «и», «или», «кроме случая, когда». Такая формулировка почти всегда прячет незаданные сочетания, и таблица вытаскивает их наружу.
- невозможное сочетание
- не тестируется как сценарий, но проверяется его недостижимость
Как отвечать: «Когда нужна таблица решений и в чём её главная ценность?»
Нужна там, где результат зависит от сочетания нескольких условий, а не от одного значения. Признак прямо в тексте требований: «и», «или», «кроме случая, когда». Строю так: условия сверху, действия снизу, каждый столбец - одно сочетание. При четырёх условиях типа «да-нет» столбцов шестнадцать, при пяти тридцать два. И вот главная ценность: в моём примере требования описывали три случая из шестнадцати, значит остальные тринадцать - это тринадцать вопросов аналитику, заданных ДО разработки. Найти незаданное поведение на этом этапе несравнимо дешевле, чем ловить его багом на проде. После заполнения таблицу сворачиваю: столбцы с одинаковым результатом схлопываются, и шестнадцать нередко превращаются в пять-шесть тестов. Но сворачиваю только ПОСЛЕ полного перебора - иначе потеряю как раз те сочетания, о которых никто не подумал.
Почему это сильный ответ: назван признак применимости, показан рост числа сочетаний, и главная ценность сформулирована как вопросы к требованиям, а не как количество тестов.
На чём валят
- −Сворачивать таблицу до полного перебора. Теряются ровно те сочетания, которые никто не рассматривал.
- −Тестировать все шестнадцать столбцов как есть. После свёртки содержательных обычно пять-шесть.
- −Молча решить за аналитика, что должно быть в незаданном случае. Это вопрос к требованиям, а не догадка тестировщика.
- −Игнорировать невозможные сочетания. Тестировать их как сценарий не надо, а проверить недостижимость надо.
- −Строить одну таблицу на восемь условий. Двести пятьдесят шесть столбцов не читаются - разбивай по смыслу.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 14, остальные разбираются в тренажёре.
- Что описывает таблица решений (decision table)?A)Матрица «условия → действия»: комбинации входных условий и заданный для каждой ожидаемый результатB)Последовательность шагов пользователя от входа в систему до достижения нужного результатаC)Список найденных дефектов с их серьёзностью и приоритетом, отсортированный по важностиD)График переходов системы между её состояниями по внешним событиям во времени
показать ответ и разбор
+A)Матрица «условия → действия»: комбинации входных условий и заданный для каждой ожидаемый результат// разбор: Таблица решений — компактная форма записи логики «если условия, то действия». Строки-условия перечисляют входные факторы (например: клиент новый? сумма > 1000?), а столбцы-правила задают их комбинации (да/нет) и соответствующее каждой комбинации действие или результат. Такая таблица systematically показывает все сочетания условий и требуемую реакцию — и служит прямым источником тест-кейсов: каждое правило (столбец) становится тестом. Особенно полезна там, где результат зависит от нескольких условий сразу и словесное описание становится запутанным.
- В каких ситуациях таблица решений — самая подходящая техника тест-дизайна?A)Когда у поля широкий числовой диапазон и нужно покрыть его края тестамиB)Когда результат зависит от комбинации нескольких условийC)Когда система долго переходит между множеством внутренних состояний по событиямD)Когда требуется проверить производительность системы под множеством одновременных запросов
показать ответ и разбор
+B)Когда результат зависит от комбинации нескольких условий// разбор: Таблица решений раскрывает силу там, где выход определяется не одним фактором, а комбинацией: право на скидку зависит от статуса клиента И суммы заказа И наличия промокода. Держать все сочетания в голове или в тексте легко ошибиться — какое-то забудется. Таблица перечисляет комбинации механически и требует указать результат для каждой, вскрывая и противоречия, и пробелы в требованиях. Для простой логики с одним условием она избыточна — там хватит классов и границ. Её ниша — комбинаторная бизнес-логика правил.
- Сколько комбинаций условий даёт таблица решений с N независимыми бинарными условиями?A)Ровно N комбинаций — по одной на каждое условие в таблицеB)N × 2 комбинаций: каждое условие проверяют в значении «истина» и «ложь» по отдельностиC)До 2^N комбинаций; часть свёртывают, когда действие не зависит от какого-то условия (don't care)D)Число комбинаций не зависит от количества условий, оно задаётся числом действий в таблице
показать ответ и разбор
+C)До 2^N комбинаций; часть свёртывают, когда действие не зависит от какого-то условия (don't care)// разбор: Каждое бинарное условие удваивает число комбинаций, поэтому N условий дают до 2^N столбцов-правил: 3 условия — 8, 4 — 16. Это верхняя граница «полной» таблицы. На практике её сокращают: если при определённом сочетании одно из условий на результат не влияет, его помечают «безразлично» (don't care, «—») и несколько столбцов сливают в один. Свёртка делает таблицу читаемой без потери логики. Понимание роста 2^N важно и для оценки объёма тестирования: каждое новое условие потенциально вдвое увеличивает число проверяемых правил.
- Что означает свёртка правил таблицы решений через «безразлично» (don't care)?A)Удаление из таблицы правил, которые слишком редко встречаются в реальной эксплуатации и кажутся мелкимиB)Объединение двух разных действий в одно ради сокращения числа столбцов таблицыC)Замена конкретных значений условий на диапазоны для более компактной записи таблицыD)Правила с одинаковым действием, различающиеся лишь несущественным условием, объединяют
показать ответ и разбор
+D)Правила с одинаковым действием, различающиеся лишь несущественным условием, объединяют// разбор: Если для нескольких комбинаций результат один и тот же, а различаются они значением условия, которое на этот результат не влияет, такие столбцы избыточно детальны. Их сливают в одно правило, поставив у несущественного условия «—» (don't care). Например, если при «клиент заблокирован» отказ следует независимо от суммы заказа, два столбца (сумма да/нет) сворачиваются в один с «—» у суммы. Так полная таблица 2^N ужимается до нескольких значимых правил, оставаясь эквивалентной по логике и удобной для вывода тест-кейсов.
- Чем ценна незаполненная (пропущенная) комбинация условий в таблице решений?A)Она обнажает дыру в спецификации: для этого сочетания условий не задано, что система должна делатьB)Пропущенная комбинация — это опечатка в таблице, её молча удаляют перед прогоном тестовC)Она показывает, что данное сочетание условий физически не может возникнуть в системеD)Пустая клетка означает, что для этой комбинации подойдёт результат из соседнего правила
показать ответ и разбор
+A)Она обнажает дыру в спецификации: для этого сочетания условий не задано, что система должна делать// разбор: Полная таблица требует указать результат для каждой комбинации условий. Если для какого-то сочетания клетка «действие» пуста, это не мелочь оформления, а сигнал: требования не описывают, как система должна себя вести в этой ситуации. Такие пробелы — источник багов, потому что разработчик реализует что-то на своё усмотрение, а тестировщик не знает эталона. Ценность таблицы в том, что она превращает неявный пробел в явный вопрос к аналитику/владельцу продукта до написания кода. Это профилактика дефектов, а не только их поиск.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.