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

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

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

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

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

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

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

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

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

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

Пример

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

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

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

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

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

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

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

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

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

Покрытие решений может быть реализовано двумя тестами, покрывающими либо пути 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), то эта ошибка тестами не будет обнаружена!

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

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

· 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и, следовательно, не выполняют результат истина первого решения и результат ложь второго решения).

Наши рекомендации