Фирма

«Инрэко ЛАН»

Введение

Все описанное ниже основывается на книге Рекса Блэка "Advanced Software Testing". В этой первой статье будет рассмотрена концепция таблиц альтернатив.

Таблицы альтернатив

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


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


Говоря "транзакционные ситуации", имеются в виду те ситуации, для которых условия (входные данные, предусловия, и т.п.), существующие в определенный момент времени для конкретной транзакции, сами по себе достаточны для определения действия, которое должна произвести система.


Лежащая в основе модель представляет собой либо таблицу (чаще), либо булев граф (реже), она объединяет комбинации условий с действиями, которые должны произойти при удовлетворении каждой конкретной комбинации условий. Если используется граф, то такая методика называется диаграммой причинно-следственных связей. Это формальное название такого графа. Однако важно всегда помнить, что любая таблица альтернатив может быть трансформирована в диаграмму причинно-следственных связей и наоборот. Поэтому, что использовать - на усмотрение тест-аналитика.


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


При использовании таблицы альтернатив критерий покрытия сводится к простому для запоминания правилу - не менее одного теста для каждого столбца в таблице.


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


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


Как только платежная информация поступает для валидации в компанию, осуществляющую обработку кредитной карты, то как это можно протестировать? Опять же, можно применить эквивалентное разбиение, но на самом деле существует целый набор условий, определяющий процесс обработки:

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

Таблица альтернатив в табл. 1 показывает, как эти четыре условия взаимодействуют для того, чтобы определить, какое из трех действий произойдет:

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

Как работает таблица. Условия перечислены в левой верхней части таблицы, а действия в левой нижней. Каждый столбец справа от самого левого столбца содержит бизнес-правило. Каждое правило утверждает, вкратце: "В этой конкретной комбинации условий (отображенной в верхней части правила) необходимо выполнить конкретную комбинацию действий (отображенную в нижней части правила)".

 

  Табл. 1. Пример таблицы альтернатив (полная)

Количество столбцов - т.е. количество бизнес-правил - равняется 2 в степени числа условий: 24 = 16. Когда условие строго булево (истина или ложь), и мы имеем дело с полной таблицей альтернатив (а не свернутой), то этого всегда верно.


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

Получение тестовых сценариев в этом примере простое: каждый столбец соответствует тестовому сценарию. Когда дело дойдет до выполнения тестов, будут созданы условия, которые являются входными данными для тестов. Условия "Истина/Ложь" будут заменены на реальные входные значения для номера кредитной карты, секретного кода, даты истечения срока действия и имени держателя карты во время проектирования тестов или возможно даже во время выполнения тестов. Будут проверены действия, которые являются ожидаемыми результатами для тестов.


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

Сворачивание таблицы альтернатив

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


В некоторых случаях можно свернуть таблицу альтернатив, объединив некоторые столбцы, добившись лаконичности (иногда ощутимой) таблицы альтернатив. В любой ситуации, когда значение одного или нескольких конкретных условий не могут повлиять на действия для двух или более комбинаций условий, можно свернуть таблицу альтернатив. Это подразумевает объединение двух или более столбцов, в которых одно или более условие не могут повлиять на действия. Столбцы, которые можно объединить, обычно, но не всегда, находятся рядом. По крайней мере, можно начать с рассмотрения соседних столбцов.
Для объединения двух и более столбцов нужно рассмотреть два или более столбца, которые приводят к одинаковому набору действий. Необходимо помнить, что действия должны быть одинаковыми для всех действий в таблице, а не просто некоторых. В этих столбцах некоторые условия будут одинаковыми, а другие отличными. Те, которые различаются, очевидно, не влияют на результат. Поэтому можно заменить условия, которые различаются в этих столбцах, прочерком ("-"). Прочерк обычно означает: не важно, не имеет значения или этого не может произойти при заданных условиях.


Теперь нужно повторить этот процесс для всех следующих столбцов, которые содержат такие же комбинации действий для всех действий в таблице.


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


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

Табл. 2. Пример таблицы альтернатив (свернутая)

Исходная нумерация столбцов сохранена для простоты сравнения. Нельзя свернуть столбцы 2 и 3, потому что это приведет к прочерку для «В пределах лимита» и для «Расположение ок». Если проанализировать эту таблицу или полную, то можно заметить, что одно из этих условий должно быть не Истина, чтобы связались с держателем карты. Сворачивание правила 4 в правило 3 говорит, что если карта превысила лимит, то с держателем свяжутся независимо от расположения. Такая же логика применятся при сворачивании правила 8 в правило 7.


При этом формат не изменяется. Условия перечислены в левой верхней части таблицы, а действия в левой нижней. Каждый столбец справа от самого левого столбца содержит бизнес-правило. Каждое правило говорит: <При конкретно такой комбинации условий (отображенных в верхней части правила, некоторые из которых не учитываются), нужно выполнить конкретно такую комбинацию действий (отображенную в нижней части правила, каждое из которых полностью определено)>.


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

Неразделимые правила в таблицах альтернатив

Иногда более чем одно правило может быть применено к транзакции. В табл. 3 показан расчет комиссий по кредитной карте. Есть три условия, при этом 0, 1, 2 или все три условия могут выполниться в одном месяце. Как эта ситуация влияет на тестирование? Это немного осложняет тестирование, но можно использовать методический подход и тестирование на основе рисков для того, чтобы избежать значительных затрат.
Табл. 3. Пример неразделимых правил
Для начала нужно проверить таблицу альтернатив как обычную таблицу, по каждому правилу и удостовериться в том, что условия, которые не относятся к этому правилу, не тестируются. Это позволяет тестировать правила отдельно - как это приходится делать в ситуациях с разделимыми правилами. Далее нужно оценить тестирование комбинаций правил. Именно "оценить", но не "протестировать все возможные комбинации правил". Это поможет избежать неперебираемого числа комбинаций, что происходит, когда тестировщики начинают тестировать комбинации условий без оценки таких тестов. Теперь в этом случае есть только 8 комбинаций - 3 условия, 2 варианта значений для каждого условия, 2 в третьей степени равняется 8. Однако если имеется 6 условий по 5 вариантов значений для каждого, то комбинаций будет 15625.

Определение возможных комбинаций и последующее использование весов риска этих комбинаций - способ избежать неперебираемого числа комбинаций. Нужно постараться получить важные комбинации и не думать об остальных. Еще одним способом избежать неперебираемого числа комбинаций является использование таких методик как дерево классификации и попарное тестирование, которые рассматриваются в книгах Рекса Блэка "Advanced Software Testing" или "Pragmatic Software Testing".

Заключение

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

Андрей Конушин, ведущий инженер-тестировщик

Метки: тестирование

Добавить комментарий