Анализ граничных значений

Как показывает опыт, тесты, исследующие граничные условия, приносят большую пользу, чем тесты, которые их не исследуют. Граничные условия – это ситуации, возникающие непосредственно на, выше или ниже границ входных и выходных классов эквивалентности.

Границы классов эквивалентности бывают:

закрытые (100 ≤ N < 999)

открытые (1000 ≤ N)

 

Анализ граничных значений имеет два подхода:

первый – когда граница соседних эквивалентных классов проходит между ними и не принадлежит ни одному из классов, в данном случае мы имеем два граничных значения

второй – когда граница принадлежит одному из классов, в этом случае необходимо проверить три значения – саму границу, значение «справа» от границы и значение «слева» от границы

 

Анализ граничных значений отличается от эквивалентного разбиения в двух отношениях:

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

2. При разработке тестов рассматривают не только входные условия (пространство входов), но и пространство результатов (т. е. выходные классы эквивалентности).

Суть метода заключается в выполнении следующих правил:

1. Если входное условие, то есть условие ввода, задает диапазон чисел X [1, 100], то необходимо создать тесты:

- для значений 1 и 100;

- для значения чуть левее 1 и чуть правее 100.

Например,

x1 = 1.0

x2 = 100.0

x3 = 0.9

x4 = 100.1.

2. Если условие ввода задает дискретное множество значений, то необходимо создать тесты:

- для проверки минимального и максимального значений;

- для значения чуть меньше минимума и чуть больше максимума.

Например, если X [2, 5, 7], то

x1 = 2

x2 = 7

x3 = 1

x4 = 8.

3. Ранее названное правило 1 применяется к условиям области вывода. Например: выходной (формируемый) файл содержит 1000 записей. Поэтому нужно создать тесты для создания соответственно 0, 1, 1000 и 1001 записи.

Например, если программа вычисляет ежемесячный расход и если минимум расхода составляет $0.00, а максимум – $1165.25, то построить тесты, которые вызывают расходы с $0.00 и $1165.25. Кроме того, построить, если это возможно, тесты, которые вызывают отрицательный расход и расход больше 1165.25 дол.

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

5. Если вход или выход программы есть упорядоченное множество (например, последовательный файл, линейный список, таблица), то сосредоточить внимание на первом и последнем элементах этого множества. Например, если задан на языке Си массив целых чисел, состоящий из 100 элементов, т.е. int a[100], то необходимо создать тесты для проверки соответственно a[-1], a[0], a[99], a[100] элементов массива.

 

Пример 1

В зависимости от суммы на текущем счету в банке, ежемесячно насчитывается бонус:

От 100 до $1000 (включительно) : +3%

От $1000 до $10 000 : +5%

$10 000 и больше : +7%

 

 

 

Правило “хорошего тона”

При наличии нескольких полей (переменных):

минимальные значения валидных границ объединяются в один тест-кейс

максимальные значения валидных границ объединяются в другой тест-кейс

невалидные границы тестируются отдельно, как и в случае с невалидными классами

 

Пример2: программа поиска делением пополам.

 

Поиск выполняется в массиве элементов М, возвращается индекс I элемента массива, значение которого соответствует ключу поиска Key.

Предусловия:

1) массив должен быть упорядочен;

2) массив должен иметь не менее одного элемента;

3) нижняя граница массива (индекс) должна быть меньше или равна его верхней границе.

Постусловия:

1) если элемент найден, то флаг Result=True, значение I — номер элемента;

2) если элемент не найден, то флаг Result=False, значение I не определено.

Примеры тестовых вариантов:

 

Тестовый вариант 1 (единичный массив, элемент найден) ТВ1:

ИД: М=15; Кеу=15.

ОЖ.РЕЗ.: Resutt=True; I=1.

 

Тестовый вариант 3 (четный массив, найден последний элемент) ТВЗ:

ИД: М=15, 20, 25, 30, 35, 40; Кеу=40.

ОЖ.РЕЗ:. Result=True; I=6.

 

Тестовый вариант 7 (нечетный массив, найден промежуточный элемент) ТВ7:

ИД: М=15, 20, 25, 30,35, 40, 45; Кеу=30.

ОЖ.РЕЗ.: Result=True; I=4.

 

Тестовый вариант 8 (четный массив, не найден элемент) ТВ8:

ИД: М=15, 20, 25, 30, 35,40; Кеу=23.

ОЖ.РЕЗ.: Result=False; I=?

 

Тестовый вариант 11 (нарушены предусловия) ТВ11:

ИД: М=15, 10, 5, 25, 20, 40, 35; Кеу=35.

ОЖ.РЕЗ.: Аварийное донесение: Массив не упорядочен.