logo
Разработка и стандартизация ПС и ИТ

13. Функциональное тестирование. Способ разбиения по эквивалентности и анализа граничных значений.

Особенности тестирования «черного ящика»

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

- набор, образуемый такими входными данными, которые приводят к аномали­ям поведения программы (назовем его IТ);

- набор, образуемый такими выходными данными, которые демонстрируют де­фекты программы (назовем его ОТ).

Любой способ тестирования «черного ящика» должен:

- выявить такие входные данные, которые с высокой вероятностью принадлежат набору IT;

- сформулировать такие ожидаемые результаты, которые с высокой вероятнос­тью являются элементами набора ОТ.

Принцип «черного ящика» не альтернативен принципу «белого ящика». Скорее это дополняющий подход, который обнаруживает другой класс ошибок. Тестирование «черного ящика» обеспечивает поиск следующих категорий ошибок:

  1. некорректных или отсутствующих функций;

  2. ошибок интерфейса;

  3. ошибок во внешних структурах данных или в доступе к внешней базе данных;

  4. ошибок характеристик (необходимая емкость памяти и т. д.);

  5. ошибок инициализации и завершения;

Подобные категории ошибок способами «белого ящика» не выявляются.

В отличие от тестирования «белого ящика», которое выполняется на ранней ста­дии процесса тестирования, тестирование «черного ящика» применяют на поздних стадиях тестирования. При тестировании «черного ящика» пренебрегают управ­ляющей структурой программы. Здесь внимание концентрируется на информаци­онной области определения программной системы.

Техника «черного ящика» ориентирована на решение следующих задач:

- сокращение необходимого количества тестовых вариантов (из-за проверки не статических, а динамических аспектов системы);

- выявление классов ошибок, а не отдельных ошибок.

Способ разбиения по эквивалентности

Разбиение по эквивалентности — самый популярный способ тестирования «чер­ного ящика».

В этом способе входная область данных программы делится на классы эквивалент­ности. Для каждого класса эквивалентности разрабатывается один тестовый ва­риант.

Класс эквивалентности — набор данных с общими свойствами. Обрабатывая раз­ные элементы класса, программа должна вести себя одинаково. Иначе говоря, при обработке любого набора из класса эквивалентности в программе задействуется один и тот же набор операторов (и связей между ними).

На рис. 7.2 каждый класс эквивалентности показан эллипсом. Здесь выделены вход­ные классы эквивалентности допустимых и недопустимых исходных данных, а также классы результатов.

Допустимые исходные данные

Недопустимые исходные данные

Выходные классы результатов

Способ анализа граничных значений

Как правило, большая часть ошибок происходит на границах области ввода, а не в центре. Анализ граничных значений заключается в получении тестовых вариан­тов, которые анализируют граничные значения. Данный способ тес­тирования дополняет способ разбиения по эквивалентности.

Основные отличия анализа граничных значений от разбиения по эквивалент­ности:

  1. тестовые варианты создаются для проверки только ребер классов эквивалент­ности;

  2. при создании тестовых вариантов учитывают не только условия ввода, но и Область вывода.

Сформулируем правила анализа граничных значений.

1. Если условие ввода задает диапазон п...т, то тестовые варианты должны быть построены:

- для значений n и m;

- для значений чуть левее п и чуть правее m на числовой оси.

Например, если задан входной диапазон -1,0... +1,0, то создаются тесты для зна­чений -1,0, +1,0, -1,001, +1,001.

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

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

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

Так, если входной файл может содержать от 1 до 255 записей, то создаются те­сты для 0, 1, 255, 256 записей.

3. Правила 1 и 2 применяются к условиям области вывода.

Рассмотрим пример, когда в программе требуется выводить таблицу значений. Количество строк и столбцов в таблице меняется. Задается тестовый вариант для минимального вывода (по объему таблицы), а также тестовый вариант для максимального вывода (по объему таблицы).

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

  2. Если входные или выходные данные программы являются упорядоченными множествами (например, последовательным файлом, линейным списком, таб­лицей), то надо тестировать обработку первого и последнего элементов этих множеств.

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