Способ анализа граничных значений.
Способ разбиения по эквивалентностям.
В этом методе область входных данных ПС делится на так называемые классы эквивалентности — области таких значений данных, обрабатывая которые программа ведет себя одинаково. Поэтому на каждый класс эквивалентности требуется всего один тест (раз для всех значений класса программа ведет себя одинаково :-)). Существует два типа классов эквивалентности — класс допустимых значений и класс недопустимых значений.
Классы эквивалентности могут быть определены по спецификации на программу.
Эквивалентность устанавливается для множества значений данных, допустимых или недопустимых по условиям ввода. Условие ввода может задавать как определенное значение, так и диапазон значений, а также множество конкретных величин или булево условие.
Правила формирования классов эквивалентности могут быть сформулированы следующим образом.
1. Если условие ввода задает конкретное значение а, то определяется один допустимый и два недопустимых класса эквивалентности:
· V_Class={a};
· Inv_Class1={x | для любого x: x < a} — первый недопустимый класс эквивалентности;;
· Inv_Class2={y|для любого y: y > a} — второй недопустимый класс эквивалентности.
2. Если условие ввода задает диапазон n..m, то определяются один допустимый и два недопустимых класса эквивалентности:
7. V_Class={n…m} — допустимый класс эквивалентности;
8. Inv_Class1={x | для любого x: x < n}
9. Inv_Class2={y | для любого y: y > m.}
3. Если условие ввода задает множество значений {a, b, c}, то определяются один допустимый и один недопустимый класс эквивалентности:
· V_Class={a, b, c};
· Inv_Class={x | для любого x: (x ≠ a) &(x≠ b) & (x ≠ c)}.
4. Если условие ввода задает булево значение, например true, то определяются один допустимый и один недопустимый класс эквивалентности:
· V_Class={true};
· Inv_Class={false}.
После построения классов эквивалентности разрабатываются тестовые варианты. Тестовый вариант выбирается так, чтобы проверить сразу наибольшее количество свойств класса эквивалентности.
Например, если спецификация задает в качестве допустимых входных величин 5-разрядные целые числа в диапазоне 15 000...70 000, то класс эквивалентности допустимых исходных данных включает величины от 15 000 до 70 000, а два класса эквивалентности недопустимых исходных данных составляют числа меньшие, чем 15 000 и числа большие, чем 70 000. В этом случае достаточно трех тестов — по одному на каждый класс.
Подоплека метода состоит в том, что на практике большинство ошибок происходят на границах области ввода, а не в центре. Поэтому в этом методе тестовые варианты строятся для границ областей эквивалентности ( т.о. этот метод дополняет разбиение по эквивалентностям ), проверяются «ребра» классов эквивалентности. Основное отличие анализа граничных значений от разбиения по эквивалентности состоит в том, что при создании тестовых вариантов учитывают не только условия ввода, но и область вывода.
Правил анализа граничных значений напоминают правила выделения классов эквивалентности. Всего правил пять.
Правило 1. Если условие ввода задает диапазон n…m, то тестовые варианты должны быть построены:
· Для значений n и m;
· Для значений чуть левее n и чуть правее m на числовой оси.
Например, если задан входной диапазон -1.0…+1.0, то создаются тесты для значений
-1.0, +1.0, -1.001, +1.001.
Правило 2. Если условие ввода задает дискретное множество значений a, b, c, …,d то создаются тестовые варианты:
Для проверки минимального и максимального значений из набора;
Для значений чуть меньше минимума и чуть больше максимума.
Например, если входной файл может содержать от 1 до 255 записей, то создаются тесты входного файла с 1записью, ,255 записями, пустой файл (0 записей ) и файл с 256 записями.
Правило 3. Правила 1 и 2 применяются к условиям области вывода.
Например, если программа должна вводить таблицу значений, количество строк и столбцов в которой меняется, то строятся два тестовых варианта - для минимального вывода (по объему таблицы) и для максимального вывода.
Правило 4. Если внутренние структуры данных программы имеют предписанные границы, то разрабатываются тестовые варианты, проверяющие эти структуры на их границах.
Правило 5. Если входные или выходные данные программы являются упорядоченными множествами (например, последовательным файлом, линейным списком, таблицей), то надо тестировать обработку первого и последнего элементов этих множеств.
Большинство разработчиков используют этот способ интуитивно. При применении описанных правил тестирование границ будет более полным, в связи с чем возрастет вероятность обнаружения ошибок.
Хороший пример тестов для способа граничных значений приведен в [7].