Опубликован: 05.03.2005 | Уровень: специалист | Доступ: платный
Лекция 3:

Критерии выбора тестов

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Аннотация: Рассматриваются требования к идеальному критерию тестирования и классы частных критериев. Рассматриваются особенности применения структурных и функциональных критериев на базе конкретных примеров. Рассматриваются особенности применения методов стохастического тестирования и метод оценки скорости выявления ошибок. Описывается мутационный критерий и на примере иллюстрируется техника работы с ним.

Требования к идеальному критерию тестирования

Требования к идеальному критерию были выдвинуты в работе [ 11 ] :

  1. Критерий должен быть достаточным, т.е. показывать, когда некоторое конечное множество тестов достаточно для тестирования данной программы.
  2. Критерий должен быть полным, т.е. в случае ошибки должен существовать тест из множества тестов, удовлетворяющих критерию, который раскрывает ошибку.
  3. Критерий должен быть надежным, т.е. любые два множества тестов, удовлетворяющих ему, одновременно должны раскрывать или не раскрывать ошибки программы
  4. Критерий должен быть легко проверяемым, например вычисляемым на тестах

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

Поэтому мы стремимся к идеальному общему критерию через реальные частные.

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

  1. Структурные критерии используют информацию о структуре программы (критерии так называемого "белого ящика")
  2. Функциональные критерии формулируются в описании требований к программному изделию ( критерии так называемого "черного ящика" )
  3. Критерии стохастического тестирования формулируются в терминах проверки наличия заданных свойств у тестируемого приложения, средствами проверки некоторой статистической гипотезы.
  4. Мутационные критерии ориентированы на проверку свойств программного изделия на основе подхода Монте-Карло.

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

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

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

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

На пример 3.1 приведен пример простой программы. Рассмотрим условия ее тестирования в соответствии со структурными критериями.

1    public void Method (ref int x)
    {
2        if (x>17)
3            x = 17-x;
4        if (x==-13)
5            x = 0;
6    }
3.1. Пример простой программы, для тестирования по структурным критериям
1    void Method (int *x)
    {
2        if (*x>17)
3            *x = 17-*x;
4        if (*x==-13)
5            *x = 0;
6    }
3.1.1. Пример простой программы, для тестирования по структурным критериям

Тестовый набор из одного теста, удовлетворяет критерию команд (C0):

(X,Y)={(xвх=30, xвых=0)} покрывает все операторы трассы 1-2-3-4-5-6

Тестовый набор из двух тестов, удовлетворяет критерию ветвей (C1):

(X,Y)={(30,0), (17,17)} добавляет 1 тест к множеству тестов для С0 и трассу 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 приведен в таблица 3.1

Таблица 3.1. Условия операторов if
(30,0) (17,17) (-13,0) (21,-4)
2 if (x>17) > \le \le >
4 if (x==-13) \ne \ne = \ne

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

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

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

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Сергей Чурбанов
Сергей Чурбанов
Валерий Слиж
Валерий Слиж
Беларусь
Андрей Морозов
Андрей Морозов
Россия, Минск