Тестирование по таблице решений (decision table testing) - техника тестирования методом чёрного ящика, при которой тест-кейсы строятся по таблице решений: таблице, где перечислены условия бизнес-правила, действия, которые из них следуют, и сочетания значений условий, ведущие к каждому набору действий. Каждое сочетание - правило таблицы, и каждое правило, которое может встретиться на практике, становится хотя бы одним тест-кейсом.
Технику определяют международный стандарт ISO/IEC/IEEE 29119-4:2021, Software testing, Part 4: Test techniques (раздел 5.2.6, покрытие - в разделе 6.2.6), и силлабус ISTQB Certified Tester Foundation Level версии 4.0.1 (раздел 4.2.3). Тот же стандарт описывает построение графа причин и следствий (cause-effect graphing, раздел 5.2.7) - смежную технику, описанную в книге Glenford Myers The Art of Software Testing, впервые изданной в 1979 году. Обе техники работают с правилами решений: ISO/IEC/IEEE 29119-4 определяет таблицу решений как табличное представление правил решений, которые связывают причины, выраженные булевыми условиями, со следствиями.
Какую задачу решают таблицы решений
Бизнес-правила записывают предложениями: «Участники программы получают скидку. Заказы от 100.00 доставляются бесплатно. Участники со статусом Gold всегда получают бесплатную доставку». Каждое предложение понятно само по себе. Вопросы возникают между ними: получает ли участник Gold обе скидки, действует ли бесплатная доставка для гостя, что происходит, когда два предложения противоречат друг другу.
Тесты, написанные прямо по такому тексту, проверяют случаи, которые текст называет явно. Сочетания, которых в тексте нет, остаются непроверенными, и именно в них реализация и ожидание часто расходятся. Таблица решений перечисляет все сочетания условий, поэтому каждое из них получает явный результат или помечается как невозможное. Силлабус ISTQB называет два результата техники: она систематически выявляет все сочетания условий и помогает найти пробелы и противоречия в требованиях.
Устройство таблицы решений
Условия и действия
В таблице решений строки двух видов. Условия (conditions) - входы правила: факты о данных или ситуации, которые определяют результат, например «покупатель - зарегистрированный участник» или «сумма заказа 100.00 или больше». Действия (actions) - выходы: что делает система, например «применить скидку 10 процентов» или «доставить бесплатно».
Правила
Каждый столбец таблицы - правило решения (decision rule): одно сочетание значений условий и действия, которые из него следуют. ISO/IEC/IEEE 29119-4 описывает правило решения как сочетание условий и действий, которое даёт определённый результат. Столбец читается сверху вниз: «если C1 истинно, C2 ложно и C3 истинно, выполнить A2 и A3».
Обозначения
Силлабус ISTQB v4.0.1 использует в ячейках таблицы следующие обозначения.
| Обозначение | Значение |
|---|---|
| T | Условие выполнено |
| F | Условие не выполнено |
| - | Значение условия не влияет на результат |
| N/A | Условие невыполнимо для этого правила |
| X | Действие выполняется |
| Пусто | Действие не выполняется |
Таблицы с ограниченными и расширенными записями
В таблице решений с ограниченными записями (limited-entry decision table) все значения условий и действий булевы: истина или ложь, кроме безразличных и невыполнимых. В таблице решений с расширенными записями (extended-entry decision table) часть условий или действий принимает больше значений, например диапазоны чисел, классы эквивалентности или отдельные значения вроде «гость, участник, участник Gold».
Таблица с расширенными записями короче: одна строка заменяет несколько булевых условий. Её значениями часто служат классы эквивалентности, и выбор таких классов описан в статье Классы эквивалентности и граничные значения.
От бизнес-правила к полной таблице
Правило интернет-магазина в примере:
- зарегистрированные участники получают скидку 5 процентов, участники со статусом Gold - 10 процентов;
- заказы на сумму 100.00 или больше доставляются бесплатно;
- участники со статусом Gold всегда получают бесплатную доставку;
- статус Gold может быть только у зарегистрированного участника.
У правила три булевых условия и три действия. Полная таблица решений (full decision table) содержит все сочетания значений условий. Для n булевых условий это 2 в степени n столбцов, здесь 8. Для таблицы с расширенными записями число столбцов равно произведению чисел значений всех условий.
Полная таблица примера приведена ниже.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|
| C1 Зарегистрированный участник | T | T | T | T | F | F | F | F |
| C2 Статус Gold | T | T | F | F | N/A | N/A | F | F |
| C3 Сумма 100.00 или больше | T | F | T | F | T | F | T | F |
| A1 Скидка 10 процентов | X | X | ||||||
| A2 Скидка 5 процентов | X | X | ||||||
| A3 Бесплатная доставка | X | X | X | X |
Столбцы 1-4 описывают участников, столбцы 7 и 8 - гостей. Столбцы 5 и 6 сочетают «не участник» и «статус Gold», что правило исключает; это отмечает обозначение N/A в строке C2.
Невозможные сочетания
Столбцы 5 и 6 - невыполнимые сочетания (infeasible combinations): сочетания значений условий, которые не могут возникнуть. Они появляются всякий раз, когда условия зависят друг от друга. Типичные источники - взаимоисключающие условия («возраст меньше 18» и «возраст 65 или больше»), условия, одно из которых следует из другого (статус Gold требует участия в программе), и условия на одно и то же значение с разными порогами.
Силлабус ISTQB описывает удаление невыполнимых столбцов как упрощение полной таблицы. В примере упрощённая таблица содержит 6 столбцов. Невыполнимость сочетания - утверждение о системе, а не только о правиле. Если импорт или API может создать запись гостя со статусом Gold, сочетание возможно, и для него в таблице нужно правило.
Таблица с расширенными записями может исключить такие сочетания по построению. Одно условие «тип покупателя: гость, участник, участник Gold» заменяет C1 и C2, и в таблице 3 на 2, то есть 6 столбцов, все выполнимые.
Покрытие таблицы решений
При тестировании по таблице решений элементы покрытия - столбцы с выполнимыми сочетаниями условий. Покрытие таблицы решений (decision table coverage) в определении силлабуса ISTQB v4.0.1 - число проверенных столбцов, делённое на общее число выполнимых столбцов, в процентах. Для покрытия 100 процентов нужны тест-кейсы, проверяющие все такие столбцы.
В примере выполнимы столбцы 1, 2, 3, 4, 7 и 8. Тест-кейсы для столбцов 1, 3, 4, 7 и 8 проверяют 5 из 6 выполнимых столбцов, что даёт 83 процента. Столбец 2, участник Gold с заказом меньше 100.00, остаётся непроверенным.
Мера зависит от того, какая таблица считается. Те же пять тест-кейсов дают 100 процентов для сокращённой таблицы, описанной ниже, потому что в ней столбцы 1 и 2 - один столбец. Поэтому значение покрытия таблицы решений приводится вместе с таблицей, к которой оно относится.
Сокращение таблицы
Безразличные значения
Число столбцов полной таблицы растёт экспоненциально с числом условий: 10 булевых условий дают 1024 столбца. Силлабус ISTQB называет два способа его уменьшить: минимизированную таблицу решений и выбор на основе рисков.
Таблицу минимизируют, объединяя столбцы, в которых часть условий не влияет на результат. В примере у столбцов 1 и 2 одинаковые действия, а различаются они только условием C3: для участника Gold сумма заказа не важна. Их объединяют в один столбец с обозначением «-» в строке C3. В сокращённой таблице пять столбцов.
| R1 | R2 | R3 | R4 | R5 | |
|---|---|---|---|---|---|
| C1 Зарегистрированный участник | T | T | T | F | F |
| C2 Статус Gold | T | F | F | F | F |
| C3 Сумма 100.00 или больше | - | T | F | T | F |
| A1 Скидка 10 процентов | X | ||||
| A2 Скидка 5 процентов | X | X | |||
| A3 Бесплатная доставка | X | X | X |
Остальные столбцы объединить нельзя: каждая пара различается хотя бы одним действием или больше чем одним условием. Алгоритмы минимизации лежат за пределами силлабуса Foundation Level.
Риски сокращения
Безразличное значение - утверждение, что условие не влияет на результат. Тест-кейс для объединённого столбца использует одно значение этого условия, а другое остаётся непроверенным. Если реализация даёт участнику Gold бесплатную доставку только от 100.00, тест-кейс для R1 с заказом на 150.00 проходит. Дефект обнаруживает только заказ меньше 100.00, то есть столбец 2 полной таблицы.
Поэтому сокращение обменивает покрытие сочетаний на меньшее число тест-кейсов. Риск ограничивают три приёма:
- Полная таблица как эталон. Полная или упрощённая таблица сохраняется, и покрытие приводится и для неё, и для сокращённой.
- Оба значения для правил с высоким риском. Объединённый столбец правила с высоким риском проверяется с каждым значением безразличного условия.
- Пересмотр при изменении. При изменении требования объединённые столбцы снова разворачиваются: условие, которое было безразличным, может стать значимым.
Столбцы сокращённой таблицы не должны пересекаться. Если одно сочетание значений условий подходит к двум столбцам с разными действиями, таблица, а обычно и требование за ней, содержит противоречие.
Правила, названные по результату
Номер столбца ничего не говорит о содержании правила. Название, которое называет результат, делает таблицу читаемой и даёт каждому тест-кейсу заголовок, который можно сверить с требованием. Названия правил сокращённой таблицы в примере:
| Правило | Название |
|---|---|
| R1 | Gold: 10 процентов, бесплатная доставка |
| R2 | Участник, 100.00 или больше: 5 процентов, бесплатная доставка |
| R3 | Участник, меньше 100.00: 5 процентов, платная доставка |
| R4 | Гость, 100.00 или больше: без скидки, бесплатная доставка |
| R5 | Гость, меньше 100.00: без скидки, платная доставка |
Название правила становится названием тест-кейса. Непройденный тест-кейс тогда указывает на бизнес-правило, а не на номер столбца. Связи таких тест-кейсов с требованием описаны в статье Трассируемость и покрытие требований.
Тест-кейсы по таблице
Каждый столбец становится хотя бы одним тест-кейсом. Значения условий становятся предусловиями и входными данными, значения действий - ожидаемыми результатами. Конкретные значения берутся из классов каждого условия:
| Правило | Покупатель | Сумма заказа | Ожидаемая скидка | Ожидаемая доставка |
|---|---|---|---|---|
| R1 | Участник Gold | 40.00 | 10 процентов | Бесплатная |
| R2 | Участник | 100.00 | 5 процентов | Бесплатная |
| R3 | Участник | 99.99 | 5 процентов | Платная |
| R4 | Гость | 100.00 | Нет | Бесплатная |
| R5 | Гость | 99.99 | Нет | Платная |
C3 - условие на упорядоченное значение, поэтому его значения берутся на границе: 100.00 для «истины» и 99.99 для «лжи». Таблица и анализ граничных значений вместе проверяют и сочетания, и край порога. Для R1 сумма 40.00 выбрана ниже порога - тот случай, на котором сказался бы дефект в безразличном условии.
Сценарии Gherkin по таблице
У таблицы решений есть прямой аналог в Gherkin, языке спецификаций Cucumber. Scenario Outline (синоним Scenario Template) - шаблон шагов с параметрами в угловых скобках. Он содержит один или несколько разделов Examples (синоним Scenarios), и шаблон выполняется по разу для каждой строки таблицы примеров, кроме заголовка. Необязательное ключевое слово Rule, которое есть в Gherkin с версии 6, представляет одно бизнес-правило.
Соответствие прямое. Бизнес-правило становится Rule. Условия становятся шагами Given, действия - шагами Then, а каждый столбец таблицы решений - строкой Examples. Столбец с названием правила заполняет заголовок каждого сценария: компилятор Gherkin подставляет параметры не только в шаги шаблона, но и в его название.
Feature: Order discount and delivery
Rule: Members get 5 percent and Gold members 10 percent; orders from 100.00 and Gold members get free delivery
Scenario Outline: <rule>
Given a customer of type "<customer>"
And an order with the total <total>
When the customer opens the checkout
Then the discount is <discount> percent
And the delivery is <delivery>
Examples:
| rule | customer | total | discount | delivery |
| Gold: 10 percent, free delivery | gold | 40.00 | 10 | free |
| Member, 100.00 or more: 5 percent, free | member | 100.00 | 5 | free |
| Member, below 100.00: 5 percent, paid | member | 99.99 | 5 | paid |
| Guest, 100.00 or more: no discount, free | guest | 100.00 | 0 | free |
| Guest, below 100.00: no discount, paid | guest | 99.99 | 0 | paid |Файл даёт пять сценариев с названиями правил в заголовках. Невыполнимые столбцы строк не дают. Объединённый столбец даёт одну строку, и к нему относится тот же риск, что описан выше: вторая строка с другим значением безразличного условия восстанавливает полное сочетание.
Таблицы решений и граф причин и следствий
Построение графа причин и следствий (cause-effect graphing) - техника тестирования методом чёрного ящика, при которой тест-кейсы строятся по графу причин и следствий. ISO/IEC/IEEE 29119-4 определяет граф как графическое представление правил решений, которые связывают причины, выраженные булевыми условиями, со следствиями, выраженными булевыми выражениями. Причины и следствия - узлы графа; их соединяют логические операции, а ограничения между причинами фиксируют, что некоторые сочетания невозможны.
Технику описал Myers в The Art of Software Testing; в указателе третьего издания (2011) перечислены символы графа и символы ограничений, включая ограничение исключения (exclusive constraint). По данным обзора Badhera, Purohit и Taruna 2012 года, графы причин и следствий восходят к отчёту IBM 1973 года, автор которого W. R. Elmendorf, а Myers дал процедуру построения таблицы решений по графу.
Граф и таблица описывают одни и те же правила решений. Граф показывает, как причины сочетаются через промежуточные узлы и где действуют ограничения, - это помогает, когда правило большое. Таблица перечисляет получившиеся сочетания по столбцам, и тест-кейсы берутся из неё. ISO/IEC/IEEE 29119-4 сохраняет обе техники как отдельные, с отдельными мерами покрытия.
Ограничения техники
Таблица решений описывает одно решение в один момент. Вне её области несколько случаев:
- Много условий. Число столбцов удваивается с каждым булевым условием. Уже при нескольких условиях нужны сокращение или выбор столбцов по риску, и покрытие сочетаний соответственно уменьшается.
- Много независимых параметров. Когда параметры не образуют одного правила, число сочетаний сокращает попарное тестирование.
- Порядок и история. В таблице нет понятия последовательности событий. Поведение, которое зависит от предыдущего состояния, описывает тестирование переходов состояний.
- Значения внутри условия. Таблица проверяет сочетания, а не значения внутри каждого условия; их края даёт анализ граничных значений.
Таблицы решений и смежные техники
В таблице тестирование по таблице решений сравнивается с техниками, с которыми его чаще всего сочетают или путают.
| Техника | Тестовая модель | Элементы покрытия |
|---|---|---|
| Разбиение на классы эквивалентности | Классы одного элемента данных | Классы |
| Тестирование по таблице решений | Условия, действия, правила | Выполнимые столбцы |
| Построение графа причин и следствий | Граф причин, следствий и ограничений | Правила решений графа |
| Попарное тестирование | Независимые параметры и значения | Пары значений |
| Тестирование переходов состояний | Состояния, события, переходы | Состояния или переходы |
Разбиение на классы эквивалентности даёт значения условий, а таблица решений их сочетает. Построение графа причин и следствий приходит к тем же правилам решений через граф, а не через список.
Попарное тестирование и таблицы решений отвечают на разные вопросы. Таблица решений исходит из того, что результат зависит от известного сочетания условий, и покрывает все такие сочетания. Попарное тестирование исходит из того, что параметры в основном независимы, и покрывает только каждую пару значений.
Термины
| Термин | Значение |
|---|---|
| Тестирование по таблице решений (decision table testing) | Техника тестирования методом чёрного ящика, при которой тест-кейсы строятся по выполнимым правилам таблицы решений |
| Таблица решений (decision table) | Таблица условий, действий и правил, которая показывает, какие действия следуют из каждого сочетания условий |
| Правило решения (decision rule) | Столбец таблицы решений: одно сочетание значений условий и действия, которые из него следуют |
| Таблица решений с ограниченными записями (limited-entry decision table) | Таблица решений, в которой все условия и действия принимают булевы значения |
| Таблица решений с расширенными записями (extended-entry decision table) | Таблица решений, в которой часть условий или действий принимает больше двух значений, например классы |
| Полная таблица решений (full decision table) | Таблица решений, которая содержит все сочетания значений условий |
| Невыполнимое сочетание (infeasible combination) | Сочетание значений условий, которое не может возникнуть в системе |
| Покрытие таблицы решений (decision table coverage) | Число проверенных выполнимых столбцов, делённое на общее число выполнимых столбцов, в процентах |
| Минимизированная таблица решений (minimized decision table) | Таблица решений, в которой столбцы, результат которых не зависит от части условий, объединены с помощью безразличных значений |
| Построение графа причин и следствий (cause-effect graphing) | Техника тестирования методом чёрного ящика, при которой тест-кейсы строятся по графу причин, следствий и ограничений между ними |
Источники
- ISTQB Certified Tester Foundation Level Syllabus v4.0.1, раздел 4.2.3, ISTQB, 2024(откроется в новой вкладке) (на английском)
- Глоссарий ISTQB(откроется в новой вкладке) (на английском)
- Зеркало глоссария ISTQB: decision table testing, imbus(откроется в новой вкладке) (на английском)
- Зеркало глоссария ISTQB: cause-effect graphing, imbus(откроется в новой вкладке) (на английском)
- ISO/IEC/IEEE 29119-4:2021, Software testing, Part 4: Test techniques, ISO(откроется в новой вкладке) (на английском)
- The Art of Software Testing, 3rd Edition, Glenford J. Myers, Tom Badgett, Corey Sandler, Wiley, 2011(откроется в новой вкладке) (на английском)
- Fault Based Techniques for Testing Boolean Expressions: A Survey, Badhera, Purohit, Taruna, arXiv, 2012(откроется в новой вкладке) (на английском)
- Gherkin reference, Cucumber(откроется в новой вкладке) (на английском)
- Парсер и компилятор Gherkin, cucumber/gherkin, GitHub(откроется в новой вкладке) (на английском)