ТЕСТИРОВАНИЕ ПО ПРИНЦИПУ БЕЛОГО ЯЩИКА.


Стратегия тестирования по принципу белого ящика или стратегия тестирования, управляемая логикой программы ( с учетом алгоритма ) позволяет проверить внутренняя структуру программы. В этом случае тестирующий получает готовые данные путем анализа логики программы.
Исчерпывающему входному тестированию стратегии «черного ящика» здесь можно сопоставить исчерпывающее тестирование маршрутов ( критерий покрытия маршрутов ). Подразумевается , что программа проверена полностью, если с помощью тестов удается осуществить выполнение программы по всем возможным маршрутам передачи управления.
Однако не трудно видеть , что даже в программе среднего уровня сложности число не повторяющихся маршрутов астраномическое и , следовательно, исчерпывающее тестирование маршрутов невозможно.
Кроме того метод исчерпывающего тестирование имеет ряд недостатков:
1 метод не обнаруживает пропущенные маршруты.
2 не обнаруживает ошибок , появление которых зависит от обрабатываемых данных.

3 не дает гарантии , что программа соответствует описанию. Например , если вместо сортировки по убыванию написана сортировка по возрастанию.
Стратегия «белого ящика» включает в себя следующие методы тестирования:
1. покрытие операторов.
2. Покрытие решений.
3. Покрытие условий.
4. Покрытие решений/ условий.
5. Комбинаторное покрытие условий.
1. ПОКРЫТИЕ ОПЕРАТОРОВ.
Критерий покрытия операторов подразумевает выполнение каждого оператора программы хотя бы один раз. Это необходимое ,но не достаточное условие для приемлемого тестирования.
Рассмотрим пример:
Void m (const float a, const float b, float x){
If( a>1) && (b==0)
X=X/a;
If (a==2)||(x>1)
X=X++;
}

Для привиденного фрагмента можно было бы выполнить каждый оператор 1-н раз, задав в качестве входных данных а=2,b=0,х=1, но при этом из 2-го условия следует, что Х может принимать любое значение и оно не проверяется. Кроме того:
1 если при написании программы в 1-м условии написать а>1 || b=0, то ошибка обнаружена не будет.
2 если во 2-м условии вместо x>1 записано x>0 ,то ошибка тоже не будет обнаружена.
3 существует путь a в d ,в котором х вообще не меняется и ,если здесь есть ошибка, то она не будет обнаружена.
2. ПОКРЫТИЕ РЕШЕНИЙ.
Решением будем считать логическую функцию, предшествующую оператору.(а>1 && b=0 – решение). Для реализации этого критерия необходимо достаточное число тестов такое , что каждое решение на этих тестах принимает значение «истина» или «ложь» по крайней мере 1-н раз.
Не трудно показать , что критерий покрытия решений удовлетворяет критерию покрытия операторов, но является более сильным.
Приведенная программа может быть протестирована по методу покрытия решений двумя тестами, покрывающими , либо путь асе аbc , либо асd и abe.
Если мы выбираем 2-е покрытие, то входами 2-ч тестов являются:
а=3 ,b=0, x=3
a=2 ,b=1, x=1
если во 2-м условии вместо x>1 записать x<1 , то ошибка не будет обнаружена двумя тестами.
3. ПОКРЫТИЕ УСЛОВИЙ.
Критерий покрытия условий более сильный по сравнению с предыдущим. В этом случае записывается число тестов достатачное для того , чтобы все возможные результаты каждого условия в решении были выполнены по крайней мере 1-н раз.
Однако как и случай покрытия решений это покрытие не всегда приводит к выполнению каждого оператора по крайней мере 1-н раз. К этому критерию требуется дополнение, заключающееся в том, что каждой точке входа управление должно быть передано по крайней мере 1-н раз.
Приведенная программа имеет 4-е условия:
a>1, b==0, a==2, x>1
необходимо реализовать ситуацию, где а>1, a<=1;b=0, b!=0; a==2, a!=2; x>1 ,x<=1;
тесты , удовлетворяющие этому условию.
1) a=2, b=0, x=4 (ace)
2) a=1, b=1, x=1 (abd)
когда кол-во тестов такое же как в случае покрытия решений, этот критерий может вызвать выполнение решения в условиях, не реализуемых при покрытии решений. То есть этот критерий в основном удовлетворяет критерию покрытия решений, но не всегда тесты покрытия условия для ранее рассмотренных примеров покрывает результаты всех решений, но это случайное совпадение.
Например тесты:
1) a=1, b=0, x=3
2) a=2, b=1, x=1
покрывают результаты всех условий , но только 2-а из 4-х результатов решений ( не выполняется результат «истина» 1-го решения и результат «ложь» 2-го.).
4. Покрытие решений/условий.
Этот метод требует составить тесты так, чтобы все возможные результаты каждого условия выполнялись, по крайней мере, один раз и каждой точке управления передается, по крайней мере, один раз.
Недостатки метода.
1. Не всегда можно проверить все условия.
2. Невозможно проверить условия, которые скрыты другими условиями.
3. Недостаточная чувствительность к ошибкам в логических выражениях.
5. Комбинаторное покрытие условий.
Этот критерий требует создания такого числа тестов, чтобы в каждом решении все точки входа выполнялись, по крайней мере, один раз.

Для приведённого примера покрыть тестами 8 следующих комбинаций:
1. A>1, B=0; 2. A>1, B!=0; 3. A<=1, B=0; 4. A<=1, B!=0; 5. A=2, X>1; 6. A=2, X<=1; 7. A!=2, X>1; 8. A!=2, X<=1.
Эти комбинации можно проверить четырьмя тестами:
1. A=2, B=0, X=4 K: 1, 5 2. A=2, B=1, X=1 K: 2, 6
3. A=1, B=0, X=2 K: 3, 7 4. A=1, B=1, X=1 K: 4, 8
В данном случае то, что четырём тестам соответствуют четыре пути, является совпадением. Представленные тесты не покрывают всех путей (например, acd). Т.о. для программ, содержащих только одно условие на каждое решение, минимальным является критерий, набор тестов которого:
1. Вызывает выполнение всех результатов каждого решения, по крайней мере, один раз.
2. Передаёт управление каждой точке входа хотя бы один раз (чтобы обеспечить выполнение каждого оператора, по крайней мере, один раз).
Для программ, содержащих решение, каждое из которых имеет более одного условия, минимальный критерий состоит из набора тестов, вызывающих выполнение всех возможных комбинаций результатов условий в каждом решении и передающих управление каждой точки входа, по крайней мере, один раз. Термин “возможных” употреблён здесь потому, что некоторые комбинации условий могут быть не реализуемы. Например, для комбинаций K<0, K>40 задать К невозможно.

Загрузка...