Загрузка...

Сложность тестирования структуры ПМ


Сложность программы определяется числом взаимодействующих компонент, числом связи между компонентами и сложностью их взаимодействия. При функционировании программы разнообразие её поведения и разнообразие связей входных и результативных данных в большей степени определяется набором маршрутов, по которым используется программа. Установлено, что сложность ПМ зависит не только от числа строк теста, сколько от отдельных маршрутов использования программы. При создании программы должны быть проверены все маршруты возможной обработки данных. Этим определяется сложность тестирования программы.

Экспериментально подтверждена адекватность использования структурной сложности программ для оценки трудоемкости тестирования. Сложность тестирования ПМ можно оценивать по числу маршрутов необходимых для их проверки или более полно по суммарному числу условий, которое необходимо задать в тестах для прохождения всех маршрутов программы.
Ek=?Ei, где Mk-количество маршрутов необходимых для проверки, Ei-количество условий определяющих i-й маршрут
Пример оценки сложности тестирования программ
Пример исходного графа модуля программы. Этот граф содержит 14 вершин, 20 дуг, 3 цикла и 7 предикатных узлов. Эта программа не высокой сложности, которая содержит около 30-50 операторов на языке высокого уровня. Ее можно рассматривать как типичную. Для полной проверки этого модуля по 1 критерию достаточно 4-х маршрутов: 1-2-14; 1-3-4-6-8-6-8-14; 1-3-5-7-10-11-12-14;1-3-4-5-7-9-10-9-10-11-7-9-10-11-12-13-14; Ek=1+5+5+9=20

По этому критерию гарантируется проверка всех передач управления между операторами программы и каждого оператора не менее 1раза. Самый длинный маршрут не охватывает только 3 вершины из 14 и 6 дуг из 20. После проверки ещё 2 маршрутов вне контроля остается ещё 1 вершина и 2 дуги. Однако при исполнении этого критерия не учитывается комбинаторика условий на разных участков маршрутов. Например, при сочетании направлений ветвлений в вершинах 3 и 12. Сложность программы при выделении маршрутов по этому критерию характеризуется числом маршрутов =4 и сложностью тестирования=2. Эта величина характеризует суммарное число условий, которые необходимо задать в тестах для полной проверки всех маршрутов, выделенных по I критерию. Условие в вершинах каждого маршрута могут для автономного формирования предикатов в соответствующих тестах.
II критерий выбора маршрутов при оценке сложности тестирования обеспечивает в исходном графе программы однократную проверку каждого линейно независимого цикла, в совокупности образующих базовые маршруты. Каждый линейно не зависимый маршрут или цикл отличается от всех остальных хотя бы 1 вершиной или дугой. Для определения количества таких маршрутов удобно использовать величину цикломатической сложности (ЦС) графа.
ЦС — это метрика ПО, которая обеспечивает полную оценку логической сложности программы. Она определяет количество независимых маршрутов в программе и верхнюю оценку количества тестов, которое гарантирует однократную проверку всех операторов. ЦС вычисляется 3 способами:
1. ЦС = количеству замкнутых областей графа
2. по формуле ЦС= a-b+2, а — количество дуг, b — количество узлов.
3. ЦС — количество предикатных узлов в графе +1
Маршруты по II критерию: 6-8, 9-10, 7-9-10-11, 1-2-14, 1-3-4-6-8-14, 1-3-5-7-9-10-11-12-14, 1-3-4-5-7-9-10-11-12-14,1-3-4-5-7-9-10-11-11-12-13-14.
Суммарная сложность тестов, учитывая все условия прохождения маршрутов, равна 25.
Наиболее глубокий III критерий проверки и определения сложности тестирования структуры программы включает требования однократной проверки не только множества независимых, но и всех линейно зависимых циклов и ацикличных маршрутов. Он заключается в анализе хотя бы один раз каждого из реальных ацикличных маршрутов исходного графа программы и каждого цикла, достижимого из всех этих маршрутов. Для графа программы в примере по третьему критерию необходимо выполнить 6 ацикличных и 5 маршрутов включающих элементарные циклы. Надо создать 11 тестов они должны содержать 66 условий. При этом особенностью 4 маршрутов с циклами и соответствующим им ацикличных маршрутов является полный перебор сочетаний ветвлений 3 и 12 вершины. В реальных программах некот. маршруты нереализуемые из-за несовместимых условий, кот. Последовательно реализуются в каждых вершинах. Для каждого реализуемого маршрута может быть необходима проверка при нескольких прохождениях циклов и нескольких значениях каждой обрабатываемой переменной. Важно проверять циклы с if выходом на 1-2 промежуточных, а также max и min числе витков исполнения циклов. В результате число необходимых тестов и длительность проверки увеличивается.
Сложность тестирования ацикличных ПМ
При инженерных оценках числа маршрутов в ацикличном ПМ целесообразно пользоваться критерием цикломатического числа. Для оценки суммарной сложности тестов, необходимых для полной проверки ацикличных ПМ, можно использовать величину равную произведению числа маршрутов на число вершин в самом длинном маршруте/2. Максимальная сложность тестов по критерию II для реальных ацикличных программ близка к числу ветвлений в квадрате. Увеличение количества вершин графа в 4 раза, приводит к возрастанию структурной сложности более чем в 10 раз, следовательно, для упрощения тестирования программы, нужно ограничивать размеры ПМ в пределах 10-20 вершин.
Сложность тестирования программ, содержащих циклы
Наличие циклов в программе резко увеличивает сложность ее тестирования. Исчерпывающее тестирование должно охватывать проверку каждого маршрута в цикле при всех возможных итерациях циклов и при всех сочетаниях циклов с маршрутами ацикличной части программы. Предположим для простоты, что число маршрутов в нижней части М3=1, тогда полное множество маршрутов состоит из полной совокупности всех маршрутов М1 в верхней части программы и группы маршрутов М2, у которых к каждому маршруту из М1 присоединено несколько итераций цикла.

При этом на каждой итерации выполняется, по крайней мере, 1 из внутренних маршрутов тела цикла. Например, для графа, имеющего 1 цикл, требующего исполнения 5 витков с тремя внутренними маршрутами и содержащего М1=10 ациклических маршрутов, проходящих через цикл, суммарное число маршрутов для исчерпывающего тестирования = 5*3*10 = 150. При увеличении каждого из сомножителей увеличивается сложность тестирования, следовательно, исчерпывающее тестирование реальных сложных программ практически невозможно.
На сложность тестирования цикла оказывает влияние его структура и 2 параметра: число маршрутов в теле цикла и число итераций цикла. При реальном исполнении простейшего цикла между его итерациями могут существовать зависимости трех видов: 1) На разных итерациях цикла используется независимо всевозможные маршруты тела цикла; 2) на всех итерациях цикла используется один и тот же маршрут тела цикла или некоторая определенная их последовательность; 3) на разных итерациях цикла в силу наличия семантических связей используется подмножество реализуемых маршрутов тела цикла, зависящие от данных или от номера итерации. Зависимость 1-го вида встречается наиболее редко. В этом случае возникает необходимость в полном переборе всех внутренних маршрутов тела цикла в сочетании с каждым числом итераций.
При этом сложность тестирования цикла определяется сразу обоими параметрами и приближается к сложности исчерпывающего тестирования.
При зависимости 2 вида число маршрутов тела цикла практически не влияет на сложность цикла. Определяющим становится кол-во итераций, необходимых для тестирования вычислений в теле цикла (например, с учетом требуемой точности).
Наиболее распространенной является 3 зависимость. Определяющим при оценке сложности тестирования является не число итераций цикла, а число маршрутов тела цикла. Простейшие оценки сложности циклических структур целесообразно поводить, предполагая, что порядок реализации маршрутов тела цикла не зависит от номера итерации. В этом случае при оценке сложности циклических структур конструктивным является подход с позиции min необходимого числа проверок итераций циклов.
Для оценки сложности структурного тестирования логических программ с простейшими циклами желательно уточнить критерии проверки. По 1 критерию ациклическая часть программы покрывается min числом маршрутов, в которое входят маршруты, проходящие через цикл, размыкающий его и образующие min покрытие тела цикла. Кроме того, к покрытию добавляется маршрут, содержащий замыкающую дугу цикла.

По 2 критерию ациклическая часть программы проверяется количеством тестов равным сложности ациклической части. При этом к каждому такому маршруту присоединяется все примыкающие к нему циклы. Проверка каждого цикла осуществляется одним маршрутом, содержащим столько итераций какова сложность тела цикла, а тело цикла покрывается линейно независимыми маршрутами.
При таких оценках определяющими факторами являются полнота проверки тела цикла, условий его замыкания/размыкания.
Разнообразие реальных циклических структур в программах сильно усложняет их анализ и получение обобщенных характеристик сложности и достигаемой корректности тестирования.
При применении вложенных циклов со сложной структурой и с большим количеством ветвлений в теле цикла, сложность тестирования резко возрастает вероятность сохранения в программе необнаруженных ошибок.
Циклы с простейшей структурой приводят к небольшому возрастанию суммарной сложности тестов, следовательно, в процессе проектирования программы необходимо в максимальной степени упрощать циклические компоненты в структуре.

Загрузка...