Вид критерия Что должно обеспечивать множество тестов
А. Функциональные
1. Тестирование классов вх. данных ! Содержать представителей всех вх или вых
2. Тестирование классов вых. данных ! классов и точки на границах классов
3. Тестирование функций Каждая функция внешнего интерфейса должна быть проверена >= 1раза
Б. Структурные
1. Тестирование команд Каждая команда (оператор) д.б. выполнена
>= 1раза
2. Критерий С1 – тестир. ветвей Каждая ветвь д.б. выполнена >= 1раза
3. Критерий С2 – тестир. путей Каждый путь в графе программы д.б.
выполнен >= 1раза (Вопрос 3)
На рис 10-1 а) видно отличие тестирования команд (достаточен один тест) от С1 (необходимы два теста как минимум). Рис 10-1 б) иллюстрирует отличие С1 (достаточно двух тестов, покрывающих пути 1, 4 или 2, 3) от С2 (необходимо 4 теста для всех четырех путей). С2 в принципе недостижим в реальных программах из-за их цикличности, поэтому ограничиваются тремя путями для каждого цикла: 0, 1 и N повторений цикла.
Идея назначения классов эквивалентности вх/вых данных для функционального тестирования основана на разумном предположении, что программа на всем классе ведет себя так же, как на его одном представителе. Классы назначаются исходя из семантики решаемой задачи. В таблице 1 дан пример тестирования классов выходных данных: минимальный набор тестов для программы нахождения вещественных корней квадратного уравнения ax2 + bx + c = 0 (Грюнбергер, 1968).
Рис.10-1. Траектории вычислений при структурном тестировании
Таблица 1
a | b | c | Ожидаемый результат | Что проверяется | |
-5 | x1=2, x2=0.5 | Случай вещественных корней | |||
Сообщение | Случай комплексных корней | ||||
-12 | x1=4, x2=0 | Нулевой корень | |||
Сообщение | Неразрешимое уравнение | ||||
Сообщение | Неразрешимое уравнение | ||||
Сообщение | Не квадратное уравнение (деление на 0) | ||||
x1=x2=0 | Корень из 0 |
Таким образом, для этой программы предлагается минимальный набор из 7 функциона-льных тестов, исходя из 7 классов выходных данных.
Пример, где назначаются классы входных данных – на рис. 10-2. Здесь классы- точечные множества; внутри области А они отмечены штриховкой; символом * отмечены представители классов - тестовые значения. На рис. 10-2 предложен минимальный набор из 18 тестов – по одному для каждого класса и границы –
стороны многоугольника, ограничивающего область А. В состав тестового набора следует включать значения, непосредственно примыкающие к граничным. Например, если допустимые входные значения – целые от 1 до 99, то для тестирования допусти-мых данных можно выбрать 1 и 99, а для недопустимых – 0 и 100. Если программа получает 8 входных данных, то нужно предусмотреть 3 теста: ввод 8, 7 и 9 данных.
Запись классов эквивалентности входных данных в текстовой форме является частным случаем плана тестирования, пример которого приведен на рис. 10-3. Заметим, что классы эквивалентности могут пересекаться, как в этом примере (классы 1.2.4.1 и 1.2.4.3) – это приводит к некоторой избыточности, но не страшно. Задание 4.
Рис 10-2. Классы входных данных для тестирования
1. Ввод числа
1.1 Допустимые варианты
1.1.1 Числа от 0 до 99
1.2 Недопустимые варианты
1.2.1 0
1.2.2 > 99
1.2.3 Отрицательные числа
1.2.4 Буквы и другие нечисловые символы
1.2.4.1 Буквы
1.2.4.2 Символы с ASCII-кодами, меньшими кода 0
1.2.4.3 Символы с ASCII-кодами, большими кода 9
2. Ввод первой буквы имени
2.1 Допустимые варианты
2.1.1 Первый символ является заглавной буквой
<и т.д.>
Рис 10-3. Классы входных данных: фрагмент плана тестирования
Различие между функциональным и структурным тестированием относительно. Для интерактивных и реального времени программ оно стирается: входные данные – различные последовательности действий пользователя или внешних событий – однозначно отображаются на различные траектории переключения состояний программы, т.е. пути в ней. Таких траекторий – необозримо много, поэтому приходится ограничиваться тестированием наиболее вероятных действий пользователя или последовательностей событий, имитируемых специальной тестовой программой. К ним добавляются случайные действия, например, нажатие клавиш в случайные моменты времени. Профессиональные тестеры составляют схемы меню – диаграммы состояний и переходов при вводе диалоговых команд – для контроля полноты прохождения типичных траекторий диалога.
Нагрузочные тесты проверяют работу программы при различных конфигурациях аппаратуры (особенно при минимальных) и при совместном выполнении в мультипро-граммной среде.