Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


3.2. Классы критериев

Выделяют следующие классы критериев. Структурные критерии, которые используют информацию о структуре программы (критерии так называемого «белого ящика»).

Функциональные критерии, которые формулируются в описании требований к программному изделию (критерии так называемого «черного ящика»).

Критерии стохастического тестирования, которые формулируются в терминах проверки наличия заданных свойств у тестируемого приложения, средствами проверки некоторой статистической гипотезы.

Мутационные критерии, которые ориентированы на проверку свойств программного изделия на основе подхода Монте-Карло.

3.2.1. Структурные критерии (класс I)

Структурные критерии используют модель программы в виде «белого ящика», что предполагает знание исходного текста программы или спецификации программы в виде потокового графа управления. Структурная информация понятна и доступна разработчикам подсистем и модулей приложения, поэтому данный класс критериев часто используется на этапах модульного и интеграционного тестирования (Unit testing, Integration testing).

Структурные критерии базируются на основных элементах УГП, операторах, ветвях и путях.

Условие критерия тестирования команд (критерий С0) - набор тестов в совокупности должен обеспечить прохождение каждой команды не менее одного раза. Это слабый критерий, он, как правило, используется в больших программных системах, где другие критерии применить невозможно.

Условие критерия тестирования ветвей (критерий С1) - набор тестов в совокупности должен обеспечить прохождение каждой ветви не менее одного раза. Это достаточно сильный и при этом экономичный критерий, поскольку множество ветвей в тестируемом приложении конечно и не так уж велико. Данный критерий часто используется в системах автоматизации тестирования.

Условие критерия тестирования путей (критерий С2) - набор тестов в совокупности должен обеспечить прохождение каждого пути не менее 1 раз. Если программа содержит цикл (в особенности с неявно заданным числом итераций), то число итераций ограничивается константой (часто равной 2, или числом классов выходных путей).

Для следующего примера простой программы рассмотрим условия ее тестирования в соответствии со структурными критериями.

1 public void Method (ref int x) {
2            if (x>17)
3                      x = 17-x;
4            if (x==-13)
5                      x = 0;
6 }

Тестовый набор из одного теста, удовлетворяет критерию команд (C0): (Х,У)=((хвх=30, хвых=0)} покрывает все операторы трассы 1-2-3-4-5-6.

Тестовый набор из двух тестов удовлетворяет критерию ветвей (C1): (X,Y)={(30,0), (17,17)}, добавляет 1 тест к множеству тестов для СО и трассу 1-2-4-6. Трасса 1-2-3-4-5-6 проходит через все ветви достижимые в операторах if при условии true, а трасса 1-2-4-6 через все ветви, достижимые в операторах if при условии false.

Тестовый набор из четырех тестов удовлетворяет критерию путей (C2): (X,Y)={(30,0), (17,17), (-13,0), (21,-4)}.

Набор условий для двух операторов if c метками 2 и 4 приведен ниже (Таблица 2).

Таблица 2

 

(30,0)

(17,17)

(-13,0)

(21,-4)

2 if (x>17)

<=

<=

4 if (x==-13)

=

!=

=

!=

Критерий ветвей С2 проверяет программу более тщательно, чем критерии - C1, однако даже если он удовлетворен, нет оснований утверждать, что программа реализована в соответствии со спецификацией.

Например, если спецификация задает условие, что |х| < 100, невыполнимость которого можно подтвердить на тесте (-177,-177). Действительно, операторы 3 и 4 на тесте (-177,-177) не изменят величину х = - 177 и результат не будет соответствовать спецификации.

Структурные критерии не проверяют соответствие спецификации, если оно не отражено в структуре программы. Поэтому при успешном тестировании программы по критерию C2 мы можем не заметить ошибку, связанную с невыполнением некоторых условий спецификации требований.

 



<< ПредыдущаяОглавлениеСледующая >>