Критериивыделения маршрутов для тестирования соответствуют критериям определения структурной сложности программных модулей. В основном используются следующие критерии:
Xj — покрытие графа программы минимальным количеством маршрутов, охватывающих каждую дугу графа хотя бы один раз;
Х2 — выделение всех линейно независимых маршрутов, отличающихся хотя бы одной дугой в маршруте от остальных;
Х3 — выделение маршрутов при всех возможных комбинациях дуг, входящих в маршруты.
Планировать тестирование можно по одному из критериев или используя последовательно более жесткие критерии выделения маршрутов, при которых возрастают соответственно объем и сложность тестирования. К значительному возрастанию числа маршрутов обычно приводят циклы в программах.
Стратегии упорядочения маршрутов. Показатель важности маршрута для тестирования программы и для оценивания ее корректности может учитывать сложность маршрута и тестов для его проверки: число операторов, условных переходов и циклов в маршруте; частость его исполнения при рабочем функционировании ПС; сложность получения соответствующих эталонных данных. В первую очередь для установления корректности программы целесообразно производить проверку основной группы маршрутов с экстремальными значениями выбранного показателя сложности в пределах ресурсов, выделенных для тестирования. При имеющихся ограничениях ресурсов некоторая часть маршрутов может оказаться непроверенной и характеризует достигнутую корректность данной программы по выбранному критерию.
Упорядочение маршрутов при планировании тестирования базируется на использовании в основном трех характеристик программных модулей:
стратегия 1 учитывает число строк текста программы в выделенных маршрутах или расчетную длительность их исполнения при функционировании программы;
стратегия 3 базируется на использовании вероятности исполнения маршрутов при реальном функционировании программы.
Эти стратегии тестирования позволяют сосредоточивать внимание разработчика на анализе наиболее важных для корректности компонентах программ. При стратегии 1 первичному тестированию подлежат маршруты, наиболее длинные по числу строк и/или по времени исполнения. Им соответствуют обычно маршруты с наибольшим объемом вычислений и преобразований переменных. Эта стратегия целесообразна при планировании тестирования программ, имеющих вычислительный характер обработки данных при небольшом числе логических условий и маршрутов исполнения программ.
При стратегии 2 приоритет отдается маршрутам, наиболее сложным по числу анализируемых условий. Такая стратегия предпочтительна при тестировании логических программ с небольшим объемом вычислений. При обеих стратегиях на завершающие этапы тестирования остаются простые по вычислениям или по логике маршруты, которые отражают потенциальную, структурную некорректность программы. Это соответствует традиционной стратегии многих разработчиков программ подготавливать вначале тесты с возможно большим охватом вычислительных или логических компонентов программы и скорейшим достижением по возможности высокого уровня их корректности.
При упорядочении маршрутов по стратегии 3 основная сложность состоит в оценке и учете вероятностей ветвления в условных переходах и переключателях, а также числа исполнения циклов. Их значения должны указываться разработчиками программ, что достаточно трудоемко и субъективно. Тем не менее такая стратегия позволяет наиболее детально планировать тестирование и оценивать предельный уровень корректности программ.
Эффективность тестирования определяется полнотой проверки программного модуля или вероятностью наличия невыявленных ошибок в зависимости от затрат ресурсов: на создание тестов, исполнение программ и анализ результатов тестирования. Затраты в значительной степени зависят от суммарной сложности формирования тестов, проверяющих маршруты исполнения программы. На каждой дуге графа программы между условными переходами производятся вычисления и преобразования переменных, объем которых может изменяться в широких пределах. Для упрощения анализа и оценивания тестирования структуры программ предположим, что длительность и сложность вычислений на дугах графов программ одинаковы и относительно невелики. Некоторые вершины графа программы могут образовываться в результате схождения дуг без последующего ветвления. Такие вершины не влияют на число маршрутов, и их можно обобщать с ближайшей последующей вершиной, в которой происходит ветвление. При этих предположениях сложность теста, проверяющего каждый z-й маршрут, в первом приближении пропорциональна числу дуг графа программы, входящих в этот маршрут, или числу Et условий, которые необходимо задать в тесте.
Экспериментально подтверждена адекватность использования структурной сложности программ для оценки трудоемкости тестирования, а также вероятности наличия невыявленных ошибок и затрат на разработку программных модулей в целом. Сложность тестирования ПМ можно оценивать по числу маршрутов Мх,необходимых для их проверки, или более полно по суммарному числу условий Ех, которое необходимо задать в тестах для прохождения всех маршрутов программы, выделенных по Х-му критерию:
Мх
(13.1)
/=1
где Е i — число условий-предикатов, определяющих z-й маршрут.
Маршруты исполнения программного модуля можно разделить на два вида’.
маршруты исполнения преимущественно вычислительной части программы и преобразования непрерывных переменных;
маршруты принятия логических решений и преобразования логических переменных.