3.2. Классы критериевВыделяют следующие классы критериев. Структурные критерии, которые используют информацию о структуре программы (критерии так называемого «белого ящика»). Функциональные критерии, которые формулируются в описании требований к программному изделию (критерии так называемого «черного ящика»). Критерии стохастического тестирования, которые формулируются в терминах проверки наличия заданных свойств у тестируемого приложения, средствами проверки некоторой статистической гипотезы. Мутационные критерии, которые ориентированы на проверку свойств программного изделия на основе подхода Монте-Карло. 3.2.1. Структурные критерии (класс I) Структурные критерии используют модель программы в виде «белого ящика», что предполагает знание исходного текста программы или спецификации программы в виде потокового графа управления. Структурная информация понятна и доступна разработчикам подсистем и модулей приложения, поэтому данный класс критериев часто используется на этапах модульного и интеграционного тестирования (Unit testing, Integration testing). Структурные критерии базируются на основных элементах УГП, операторах, ветвях и путях. Условие критерия тестирования команд (критерий С0) - набор тестов в совокупности должен обеспечить прохождение каждой команды не менее одного раза. Это слабый критерий, он, как правило, используется в больших программных системах, где другие критерии применить невозможно. Условие критерия тестирования ветвей (критерий С1) - набор тестов в совокупности должен обеспечить прохождение каждой ветви не менее одного раза. Это достаточно сильный и при этом экономичный критерий, поскольку множество ветвей в тестируемом приложении конечно и не так уж велико. Данный критерий часто используется в системах автоматизации тестирования. Условие критерия тестирования путей (критерий С2) - набор тестов в совокупности должен обеспечить прохождение каждого пути не менее 1 раз. Если программа содержит цикл (в особенности с неявно заданным числом итераций), то число итераций ограничивается константой (часто равной 2, или числом классов выходных путей). Для следующего примера простой программы рассмотрим условия ее тестирования в соответствии со структурными критериями. 1 public void Method (ref int x) { Тестовый набор из одного теста, удовлетворяет критерию команд (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
Критерий ветвей С2 проверяет программу более тщательно, чем критерии - C1, однако даже если он удовлетворен, нет оснований утверждать, что программа реализована в соответствии со спецификацией. Например, если спецификация задает условие, что |х| < 100, невыполнимость которого можно подтвердить на тесте (-177,-177). Действительно, операторы 3 и 4 на тесте (-177,-177) не изменят величину х = - 177 и результат не будет соответствовать спецификации. Структурные критерии не проверяют соответствие спецификации, если оно не отражено в структуре программы. Поэтому при успешном тестировании программы по критерию C2 мы можем не заметить ошибку, связанную с невыполнением некоторых условий спецификации требований.
|