Скачиваний:
387
Добавлен:
01.05.2014
Размер:
1.33 Mб
Скачать

1. Тестирование на основе потока управления

При проведении структурного тестирования на основе управляющего графа программы используются следующие критерии:

  • покрытие операторов (вершин графа) – заключается в выполнении каждого оператора программы хотя бы один раз. Этот критерий является весьма слабым (пропускает много ошибок), так как выполнение каждого оператора программы хотя бы один раз есть необходимое, но не достаточное условие для приемлемого тестирования по методу “белого ящика”;

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

  • покрытие условийкаждое логическое условие в программе должно выполняться хотя бы один раз.

  • покрытие условий/решений – поскольку критерии покрытия решений и условий не заменяют друг друга, поэтому их можно объединить, получив критерий покрытия условий/решений. Он требует такого набора тестов, чтобы все возможные результаты каждого условия в решении выполнялись по крайней мере один раз и все результаты каждого решения выполнялись по крайней мере один раз. Недостатком критерия покрытия решений/условий является невозможность его применения для выполнения всех результатов всех условий (некоторые условия могут быть скрыты другими условиями). Например, результаты условий при выполнении операций И и ИЛИ могут блокировать действия других условий. Так, если условие И есть ложь, то никакое из последующих условий в выражении не будет выполнено. Аналогично, если условие ИЛИ есть истина, то никакое из последующих условий в выражении не будет выполнено.

  • комбинаторное покрытие условий – требует такого набора тестов, чтобы все возможные комбинации результатов условия в каждом решении выполнялись по крайней мере один раз. Слово возможные употреблено потому, что не все комбинации условий могут быть реализуемыми; например, в выражении (A>2) & (A<10) могут быть реализованы только три комбинации условий. Набор тестов, удовлетворяющий критерию комбинаторного покрытия условий, удовлетворяет также и критериям покрытия решений, покрытия условий и покрытия решений/условий;

  • покрытие путей – каждый путь хотя бы один раз (это наиболее полный, но нереализуемый критерий);

  • покрытие функций - каждая функция должна быть выполнена хотя бы один раз;

  • покрытие вызовов – каждый вызов каждой функции хотя бы один раз.

Пример

if ( (A > 1) & ( B=0 ) ) then X:=X/A;

if ( (A = 2) Or ( X>1 ) ) then X:=X+1;

  1. Покрытие операторов

  1. Можно выполнить каждый оператор с помощью теста, который бы реализовал путь ace (A=2; B=0; X=3):

  • Если в программе записано (A>1) OR (B=0) – Ошибка не обнаруживается!

  • Если в программе (A=2) ! (X>0) – Ошибка не обнаруживается!

  1. На пути abd все ошибки не обнаруживаются!

  1. Покрытие ветвей

Покрытие решений может быть реализовано двумя тестами, покрывающими либо пути ace и abd, либо пути acd и abe. Если выбрать второе покрытие, то входами двух тестов являются: A=3; B=0; X=3 (путь acd) и A=2; B=1; X=1 (путь

abe). Эти тесты также недостаточны. Например, если выбрано первое покрытие (путь acd),путь, где X не изменяется, будет проверен с вероятностью 50%. Если во втором условии имеется ошибка (например, X<1 вместо X>1), то эта ошибка тестами не будет обнаружена!

  1. Покрытие условий

В программе имеются 4 условия: A > 1, B = 0, A = 2 и X > 1. Следовательно, требуется достаточное число тестов, чтобы реализовать ситуации, где A>1, A1, B=0 и B0 (первое условие) и A=2, A2, X>1, X1 (второе условие). Тесты, удовлетворяющие критерию покрытия условий, и соответствующие им пути:

  • A=2; B=0; X=4 (путь ace);

  • A=1; B=1; X=1 (путь abd)

Критерий покрытия условий обычно лучше критерия покрытия решений, поскольку оно может вызвать выполнение решений в условиях, не реализуемых при покрытии решений.

С другой стороны, критерий покрытия условий может не удовлетворять критерию покрытия решений. Для рассмотренного примера предложенные тесты покрытия условий покрывают результаты всех решений, но это случайное совпадение. Например, два альтернативных теста: A=1, B= 0, X=3 и

A=2, B=1, X=1 покрывают результаты всех условий, но только два из четырех результатов решений (оба они покрывают путь abe и, следовательно, не выполняют результат истина первого решения и результат ложь второго решения).

  1. Комбинаторное покрытие условий

По этому критерию должны быть покрыты тестами следующие 8 комбинаций:

(1) A > 1, B = 0 (5) A = 2, X >1

(2) A > 1, B 0 (6) A = 2, X 1

(3) A < 1, B = 0 (7) A 2, X >1

(4) A < 1, B 0 (8) A 2, X 1

Следует обратить внимание, что комбинации (5) – (8) представляют собой значения второго оператора if. Поскольку X может быть изменено до выполнения этого оператора, значения, необходимые для его проверки, следует восстановить исходя из логики программы с тем, чтобы найти соответствующие входные значения.

Для того, чтобы протестировать эти комбинации, необязательно использовать все восемь тестов. Фактически они могут быть покрыты четырьмя тестами:

A=2, B=0, X=4 покрывает 1,5

A=2, B=1, X=1 покрывает 2,6

A=1, B=0, X=2 покрывает 3,7

A=2, B=0, X=4 покрывает 4,8