IF (А + В+ С)/3 = A,
то оно будет верным не для всех значений А, В и С (ошибка возникает в том случае, когда из двух значений В или С одно больше, а другое на столько же меньше А). Если концентрировать внимание только на тестировании путей, нет гарантии, что эта ошибка будет выявлена.
Таким образом, полное тестирование программы невозможно, т. е. никакое тестирование не гарантирует полное отсутствие ошибок в программе. Поэтому необходимо проектировать тесты таким образом, чтобы увеличить вероятность обнаружения ошибки в программе.
При использовании стратегии «белого ящика» тестовые наборы формируют путем анализа маршрутов, предусмотренных алгоритмом. Под маршрутами при этом понимают последовательности операторов программы, которые выполняются при конкретном варианте исходных данных. Тестирование, проводимое по составленным таким образом тестам, называют структурным или тестированием по маршрутам.
В основе структурного тестирования лежит концепция максимально полного тестирования всех маршрутов программы. Так, если алгоритм программы включает ветвление, то при одном наборе исходных данных может быть выполнена последовательность операторов, реализующая действия, которые предусматривает одна ветвь, а при втором — другая. Соответственно, для программы будут существовать маршруты, различающиеся выбранным при ветвлении вариантом.
Считают, что программа проверена полностью, если с помощью тестов удается осуществить выполнение программы по всем возможным маршрутам передач управления. Однако нетрудно видеть, что даже в программе среднего уровня сложности число неповторяющихся маршрутов может быть очень велико, и, следовательно, полное или исчерпывающее тестирование маршрутов, как правило, невозможно.
Последовательность составления тестов следующая:
1. На основе алгоритма (текста) программы формируется потоковый граф (или граф-схема). Узлы (вершины) потокового графа соответствуют линейным участкам программы, включают один или несколько операторов программы. Дуги (ориентированные ребра) потокового графа отображают поток управления в программе (передачи управления между операторами). Различают операторные и предикатные узлы. Из операторного узла выходит одна дуга, а из предикатного — две дуги. Предикатные узлы соответствуют простым условиям в программе. Составное условие программы (условие, в котором используется одна или несколько булевых операций (OR, AND)) отображается в несколько предикатных узлов. На рис. 1 показан пример такого преобразования для фрагмента программы: if a OR b then x else у end if.
Рис. 1. Прямое отображение фрагмента программы в потоковый граф и преобразованный потоковый граф
2. Выбирается критерий тестирования. Формирование тестовых наборов для тестирования маршрутов может осуществляться по нескольким критериям: покрытие маршрутов, покрытие операторов, покрытие решений (переходов), покрытие условий, покрытие решений/условий, комбинаторное покрытие условий, покрытие потоков данных, покрытие циклов.
3. Подготавливаются тестовые варианты, инициирующие выполнение каждого пути. Каждый тестовый вариант формируется в следующем виде:
Исходные данные (ИД):
Ожидаемые результаты (ОЖ.РЕЗ.):
Тесты, составленные по критерию покрытие маршрутов и обеспечивающие проверку базового множества, гарантируют однократное выполнение каждого оператора и выполнение каждого условия по True-ветви и по False-ветви. Базовое множество образуют все независимые пути графа. Независимым называется любой путь от начального до конечного узла графа, который вводит новый оператор обработки или новое условие. В терминах потокового графа независимый путь должен содержать дугу, не входящую в ранее определенные пути. Независимые пути формируются в порядке от самого короткого к самому длинному.
Число независимых линейных путей в базовом множестве определяется цикломатической сложностью алгоритма, которая вычисляется одним из трех способов:
цикломатическая сложность V(G) равна количеству регионов потокового графа; Регион - замкнутая область, образованная дугами и узлами. Окружающая граф среда рассматривается как дополнительный регион. Например, показанный на рис. 1 граф имеет три региона — Rl, R2, R3;
цикломатическая сложность определяется по формуле
V(G) = E-N+2,
где Е — количество дуг, N — количество узлов потокового графа;
цикломатическая сложность V(G) = р +1, где р – количество предикатных узлов G.
Достарыңызбен бөлісу: |