сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Теория тестирования

Таблицы решений

Таблицы решений

Условий на скидку четыре: есть подписка, сумма больше порога, первый заказ, действует промокод. Сочетаний «да-нет» получается 16. Пять условий дали бы 32, шесть - 64. В требованиях при этом обычно описаны три случая, а про остальные тринадцать не сказано ничего.

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

// Формулировки: «когда нужна таблица решений?», «в чём её главная ценность?», «что делать с невозможными сочетаниями?».

Как устроена таблица

Сверху перечисляют условия, снизу - действия, а каждый столбец описывает одно сочетание: какие условия выполнены и что система должна сделать. Число столбцов при условиях типа «да-нет» равно двойке в степени числа условий: три условия дают 8 столбцов, четыре - 16, пять - 32, шесть - 64.

Заполнение идёт механически - именно в этом сила. Ты не придумываешь случаи, а перебираешь их подряд, и каждая ячейка «что должна сделать система» требует ответа. Там, где ответа нет, ты нашёл дыру в требованиях.

// Условия не обязаны быть двоичными. Статус заказа с четырьмя значениями даёт четыре ветки, а не две, и число столбцов растёт как произведение: четыре статуса на два признака на три тарифа - 24 столбца.

таблица решений
условия сверху, действия снизу, столбец = одно сочетание

Главная ценность и свёртка

Главная ценность таблицы - не сами тесты, а вопросы к аналитику. В моём примере с четырьмя условиями требования описывали три случая из шестнадцати. Остальные тринадцать - это тринадцать вопросов «а что должно происходить тут», заданных ДО разработки. Каждый такой вопрос дешевле бага на проде в разы.

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

// Свёртка - это шаг ПОСЛЕ полного перебора, а не вместо него. Свернёшь заранее, «на глазок» - и потеряешь ровно те сочетания, которые никто не рассматривал; они и есть самые интересные.

свёртка таблицы
столбцы с одинаковым результатом схлопываются в один

Невозможное и рост размера

Часть сочетаний невозможна физически: «первый заказ» и «есть история покупок» вместе не бывают. Такие столбцы помечают невозможными и не тестируют как сценарий - но обязательно проверяют, что система не даст их создать. Невозможное состояние, которое всё-таки возникло, обычно и есть источник самых загадочных багов.

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

// Признак, что таблица нужна: в требованиях встречаются «и», «или», «кроме случая, когда». Такая формулировка почти всегда прячет незаданные сочетания, и таблица вытаскивает их наружу.

невозможное сочетание
не тестируется как сценарий, но проверяется его недостижимость

Как отвечать: «Когда нужна таблица решений и в чём её главная ценность?»

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

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

На чём валят

  • Сворачивать таблицу до полного перебора. Теряются ровно те сочетания, которые никто не рассматривал.
  • Тестировать все шестнадцать столбцов как есть. После свёртки содержательных обычно пять-шесть.
  • Молча решить за аналитика, что должно быть в незаданном случае. Это вопрос к требованиям, а не догадка тестировщика.
  • Игнорировать невозможные сочетания. Тестировать их как сценарий не надо, а проверить недостижимость надо.
  • Строить одну таблицу на восемь условий. Двести пятьдесят шесть столбцов не читаются - разбивай по смыслу.

Проверьте себя

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

  1. #decision_tables1 / 5
    Что описывает таблица решений (decision table)?
    A)Матрица «условия → действия»: комбинации входных условий и заданный для каждой ожидаемый результат
    B)Последовательность шагов пользователя от входа в систему до достижения нужного результата
    C)Список найденных дефектов с их серьёзностью и приоритетом, отсортированный по важности
    D)График переходов системы между её состояниями по внешним событиям во времени
    показать ответ и разбор
    +A)Матрица «условия → действия»: комбинации входных условий и заданный для каждой ожидаемый результат

    // разбор: Таблица решений — компактная форма записи логики «если условия, то действия». Строки-условия перечисляют входные факторы (например: клиент новый? сумма > 1000?), а столбцы-правила задают их комбинации (да/нет) и соответствующее каждой комбинации действие или результат. Такая таблица systematically показывает все сочетания условий и требуемую реакцию — и служит прямым источником тест-кейсов: каждое правило (столбец) становится тестом. Особенно полезна там, где результат зависит от нескольких условий сразу и словесное описание становится запутанным.

  2. #decision_tables2 / 5
    В каких ситуациях таблица решений — самая подходящая техника тест-дизайна?
    A)Когда у поля широкий числовой диапазон и нужно покрыть его края тестами
    B)Когда результат зависит от комбинации нескольких условий
    C)Когда система долго переходит между множеством внутренних состояний по событиям
    D)Когда требуется проверить производительность системы под множеством одновременных запросов
    показать ответ и разбор
    +B)Когда результат зависит от комбинации нескольких условий

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

  3. #decision_tables3 / 5
    Сколько комбинаций условий даёт таблица решений с 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 важно и для оценки объёма тестирования: каждое новое условие потенциально вдвое увеличивает число проверяемых правил.

  4. #decision_tables4 / 5
    Что означает свёртка правил таблицы решений через «безразлично» (don't care)?
    A)Удаление из таблицы правил, которые слишком редко встречаются в реальной эксплуатации и кажутся мелкими
    B)Объединение двух разных действий в одно ради сокращения числа столбцов таблицы
    C)Замена конкретных значений условий на диапазоны для более компактной записи таблицы
    D)Правила с одинаковым действием, различающиеся лишь несущественным условием, объединяют
    показать ответ и разбор
    +D)Правила с одинаковым действием, различающиеся лишь несущественным условием, объединяют

    // разбор: Если для нескольких комбинаций результат один и тот же, а различаются они значением условия, которое на этот результат не влияет, такие столбцы избыточно детальны. Их сливают в одно правило, поставив у несущественного условия «—» (don't care). Например, если при «клиент заблокирован» отказ следует независимо от суммы заказа, два столбца (сумма да/нет) сворачиваются в один с «—» у суммы. Так полная таблица 2^N ужимается до нескольких значимых правил, оставаясь эквивалентной по логике и удобной для вывода тест-кейсов.

  5. #decision_tables5 / 5
    Чем ценна незаполненная (пропущенная) комбинация условий в таблице решений?
    A)Она обнажает дыру в спецификации: для этого сочетания условий не задано, что система должна делать
    B)Пропущенная комбинация — это опечатка в таблице, её молча удаляют перед прогоном тестов
    C)Она показывает, что данное сочетание условий физически не может возникнуть в системе
    D)Пустая клетка означает, что для этой комбинации подойдёт результат из соседнего правила
    показать ответ и разбор
    +A)Она обнажает дыру в спецификации: для этого сочетания условий не задано, что система должна делать

    // разбор: Полная таблица требует указать результат для каждой комбинации условий. Если для какого-то сочетания клетка «действие» пуста, это не мелочь оформления, а сигнал: требования не описывают, как система должна себя вести в этой ситуации. Такие пробелы — источник багов, потому что разработчик реализует что-то на своё усмотрение, а тестировщик не знает эталона. Ценность таблицы в том, что она превращает неявный пробел в явный вопрос к аналитику/владельцу продукта до написания кода. Это профилактика дефектов, а не только их поиск.

дальше

Теорию прочитали. Навык ставится повторением

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