Лабораторная работа №51
.docМинистерство Образования и Науки РФ
Санкт-Петербургский Государственный Электротехнический Университет им. В.И. Ульянова (Ленина) СПбГЭТУ «ЛЭТИ»
Факультет Компьютерных Технологий и Информатики
Кафедра МОЭВМ
Отчет
к лабораторной работе № 5 по дисциплине
Метрология ПО на тему:
Анализ сложности графовых моделей программ
Вариант №20
Выполнил: студент гр. 3305
Филиппов К.В.
Проверил: Боханова Е.В.
Санкт - Петербург
2007
Отчет к лабораторной работе № 5.
Содержание:
Содержание: 2
Задание 3
Формулировка задания 3
Краткие сведения и указания к выполнению работы 4
Заданная структура упр. Графа (в.20) 5
Критерий 1: 6
Критерий 2: 6
Анализ при помощи программы 7
Вычисление функции ошибок распределения Гаусса(вар.2). 10
Критерий 1: 10
Критерий 2: 10
Выводы 12
Задание
Вариант 20.
Формулировка задания
Выполнить оценивание структурной сложности двух программ с помощью критериев:
-
Минимального покрытия дуг графа;
-
Выбора маршрутов на основе цикломатического числа графа.
Варианты программ:
-
Программа с заданной преподавателем структурой управляющего графа;
-
Программа из 1-ой лабораторной работы (управляющий граф составить самостоятельно).
Оцениваемые характеристики структурной сложности:
-
Число учитываемых маршрутов проверки программы для заданного критерия;
-
Цикломатическое число;
-
Суммарное число ветвлений по всем маршрутам.
Краткие сведения и указания к выполнению работы
Структурная сложность программного модуля может быть определена путем расчета количества маршрутов M в программе и сложности каждого i-го маршрута i. Эти показатели в совокупности определяют сложность набора тестов для проверки программных модулей. Сложность программного модуля определяется по формуле:
где i – количество условий-предикатов, определяющих i-й маршрут.
Выделение маршрутов выполнения программы, минимально необходимых для ее проверки, могут осуществляться по различным критериям.
Первый критерий (простейший) состоит в выборе минимального множества маршрутов программы, охватывающих все последовательности передач управления (ветвления при условных операторах и переключателях) и учитывающих исполнение программы по каждому направлению при ветвлении. По этому критерию граф программы по управлению должен быть покрыт минимальным набором путей, проходящих через каждый оператор ветвления по каждой дуге хотя бы один раз. При этом в процессе проверки гарантируется выполнение всех переходов между операторами программы и каждого оператора не менее одного раза.
Однако минимальное число маршрутов, выделяемых по первому критерию, не обеспечивает исполнения каждого оператора при различных сочетаниях предшествующих условий и последовательностей операторов, образующих весь набор маршрутов, проходящих через данное ветвление передачи управления.
Второй критерий выбора маршрутов для оценки сложности структуры заключается в анализе базовых маршрутов в программе, формируемых на основе определения цикломатического числа исходного графа проверяемой программы. Для определения цикломатического числа – Z исходного графа программы используется полное число вершин N, количество связывающих дуг Y и число связных компонент P
Z = Y – N + 2*P
Вычисление цикломатического числа осуществляется по величинам, определяемым по максимально связанному графу, т.е. графу, у которого любая вершина доступна из любой другой. В максимально связном графе цикломатическое число равно максимальному числу его линейно-независимых циклов. Величина Pсоответствует количеству связных компонент исходного графа или количеству дуг, необходимых для превращения исходного графа в максимально связный граф. Для большинства правильных (корректных) графов достаточно замыкания начальной и конечной вершин. В этом случае Р = 1, т.е. требуется одна замыкающая дуга. Если граф (программа) составлены некорректно и в нем имеются тупиковые или висячие вершины, то для его превращения в максимально связный граф потребуется большее количество замыкающих дуг.
Таким образом, данный критерий требует проверки каждого линейно-независимого цикла в максимально связном графе программы. В исходном графе программы это соответствует однократной проверке каждого линейно-независимого ациклического маршрута и каждого линейно-независимого цикла, в совокупности образующих базовые маршруты. Каждый линейно-независимый цикл или маршрут отличается от всех остальных хотя бы одной вершиной или дугой, т.е. его структура не может быть полностью образована компонентами других маршрутов.
Для структурированных программ определение цикломатического числа может осуществляться на основе количества вершин, в которых происходит ветвление: Z = nв + 1. Структурированными считаются программы, которые не имеют циклов с несколькими выходами, а также не имеют переходов внутрь циклов или условных операторов.
Заданная структура упр. Графа (в.20)
Количество вершин: 16
К
1
15
2
6
10
5
16
8
3
11
12
13
19
20
14
21
22
7
17
9
4
18
Критерий 1:
Минимальный набор путей:
-
1-3-9-13-15-16
-
1-3-6-12-6-8-11-8-11-12-14-15-16
-
1-2-5-7-11-12-14-15-16
-
1-2-4-7-11-12-14-15-16
-
1-2-4-10-4-10-14-15-16
Количество ветвлений
S1 = ( 1, 3 ) = 2
S2 = ( 1,3,6,12,6,8,11,8,11,12,) = 10
S3 = ( 1,2,11,12) = 4
S4 = (1,2,4,11,12) = 5
S5 = (1,2,4,10,4,10) = 6
Структурная сложность s=si = 27
Критерий 2:
Кол-во связных компонент = 1
В графе 22 дуги и 16 вершин.
Z = Y – N +2* = 22 – 16 + 2*1 = 8 (цикломатическое число)
Линейно-независимые циклы:
-
4-10
-
8-11
-
6-12
Линейно-независимые ациклические маршруты:
-
1-3-9-13-15-16
-
1-3-18-6-12-14-15-16
-
1-2-5-7-11-12-14-15-16
-
1-3-18-8-11-12-14-15-16
-
1-2-17-4-10-14-15-16
-
1-2-17-7-11-12-14-15-16
Количество ветвлений:
ЛНЦ:
-
S1 = (10,4) = 1
-
S2 = (11,8) = 1
-
S3 = (12,6) = 1
ЛНАМ:
-
S11 = (1,3) = 2
-
S12 = (1,3,18,12) = 4
-
S13 = (1,2,11,12) = 4
-
S14 = (1,3,18,11,12) = 5
-
S15 = (1,2,17,10) = 4
-
S16 = (1,2,17,11,12) = 5
Структурная сложность s=si = 27
Анализ при помощи программы
Требования к анализируемому графу:
-
наличие одной начальной вершины
-
наличие одной конечной вершины
-
граф должен быть структурированным
-
отсутствие ветвей из конечной вершины
-
в вершине графа не может заканчиваться более одного цикла
-
отсутствие структур вида
их следует преобразовать в структуры вида
Преобразованный граф:
Файл для ways:
Nodes{
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
}
Top{1}
Last{16}
Arcs{
arc(1,3);
arc(1,2);
arc(2,17);
arc(2,5);
arc(3,18);
arc(3,9);
arc(4,10);
arc(5,7);
arc(6,12);
arc(7,11);
arc(8,11);
arc(9,13);
arc(10,4);
arc(10,14);
arc(11,8);
arc(11,12);
arc(12,6);
arc(12,14);
arc(13,15);
arc(14,15);
arc(15,16);
arc(17,4);
arc(17,7);
arc(18,6);
arc(18,8);
}
Результат запуска ways:
Вычисление функции ошибок распределения Гаусса(вар.2).
Главная функция:
float erf(float x)
{
const sqrtpi = 1.7724538,
tol = 1.0E-4; // NODE 1
float x2,sum,sum1,term;
int k,i;
x2 = x*x;
sum=x;
term=x;
for(i=0; term<tol*sum; i++) { // NODE 2
sum1=sum;
term=2.0*term*x2/(1.0+2.0*i); // NODE 3
sum=term+sum1;
}
return (2*sum*exp(-x2)/sqrtpi); // NODE 4
}
Граф:
Количество вершин: 4
Количество дуг: 4
Критерий 1:
Минимальный набор путей:
-
1-2-3-2-3-4
Количество ветвлений
S1 = ( 2,3 ) = 2
Структурная сложность:
s=si = 2
Критерий 2:
Кол-во связных компонент = 1
В графе 4 дуги и 4 вершины.
Z = Y – N +2* = 2 – 2 + 2*1 = 2 (цикломатическое число)
Линейно-независимые циклы:
-
2-3
Линейно-независимые ациклические маршруты:
-
1-2-3-4
Количество ветвлений:
ЛНЦ:
-
S1 = (3) = 1
ЛНАМ:
-
S11 = (3) = 1
Структурная сложность:
s=si = 2
Файл для ways:
Nodes{
1,2,3,4
}
Top{1}
Last{4}
Arcs{
arc(1,2);
arc(2,3);
arc(3,4);
arc(3,2);
}
Результаты запуска ways:
Выводы
В ходе работы мы выполнили оценивание структурной сложности двух программ с помощью критериев:
-
Минимального покрытия дуг графа;
-
Выбора маршрутов на основе цикломатического числа графа.
Оцениваемые характеристики структурной сложности:
-
Число учитываемых маршрутов проверки программы для заданного критерия;
-
Цикломатическое число;
Суммарное число ветвлений по всем маршрутам