Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №5

.doc
Скачиваний:
32
Добавлен:
01.05.2014
Размер:
339.97 Кб
Скачать

Министерство общего и профессионального образования РФ

───────────────────────────

Санкт-Петербургский Государственный

Электротехнический Университет

“ЛЭТИ”

──────────────

Кафедра МОЭВМ

Отчёт

к лабораторной работе № 5

«Анализ структурной сложности

графовых моделей программ»

по дисциплине

Метрология программного обеспечения ”

за VIII семестр.

ВАРИАНТ 15

Проверила: Боханова Е. В.

Выполнил: студент гр. № 3305

Мещеряков А. А.

2007 г.

1. Формулировка задания

Выполнить оценивание структурной сложности двух программ с помощью критериев:

  • Минимального покрытия дуг графа;

  • Выбора маршрутов на основе цикломатического числа графа.

Варианты программ:

  • Программа с заданной преподавателем структурой управляющего графа;

  • Программа из 1-ой лабораторной работы (управляющий граф составить самостоятельно).

Оцениваемые характеристики структурной сложности:

  • Число учитываемых маршрутов проверки программы для заданного критерия;

  • Цикломатическое число;

Суммарное число ветвлений по всем маршрутам.

2. основные теоретические сведения

Структурная сложность программного модуля может быть определена путем расчета количества маршрутов M в программе и сложности каждого i-го маршрута i. Эти показатели в совокупности определяют сложность набора тестов для проверки программных модулей. Сложность программного модуля определяется по формуле:



где i – количество условий-предикатов, определяющих i-й маршрут.

Выделение маршрутов выполнения программы, минимально необходимых для ее проверки, могут осуществляться по различным критериям.

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

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

Второй критерий выбора маршрутов для оценки сложности структуры заключается в анализе базовых маршрутов в программе, формируемых на основе определения цикломатического числа исходного графа проверяемой программы. Для определения цикломатического числа – Z исходного графа программы используется полное число вершин N, количество связывающих дуг Y и число связных компонент P

Z = YN + 2*P

Вычисление цикломатического числа осуществляется по величинам, определяемым по максимально связанному графу, т.е. графу, у которого любая вершина доступна из любой другой. В максимально связном графе цикломатическое число равно максимальному числу его линейно-независимых циклов. Величина Pсоответствует количеству связных компонент исходного графа или количеству дуг, необходимых для превращения исходного графа в максимально связный граф. Для большинства правильных (корректных) графов достаточно замыкания начальной и конечной вершин. В этом случае Р = 1, т.е. требуется одна замыкающая дуга. Если граф (программа) составлены некорректно и в нем имеются тупиковые или висячие вершины, то для его превращения в максимально связный граф потребуется большее количество замыкающих дуг.

Таким образом, данный критерий требует проверки каждого линейно-независимого цикла в максимально связном графе программы. В исходном графе программы это соответствует однократной проверке каждого линейно-независимого ациклического маршрута и каждого линейно-независимого цикла, в совокупности образующих базовые маршруты. Каждый линейно-независимый цикл или маршрут отличается от всех остальных хотя бы одной вершиной или дугой, т.е. его структура не может быть полностью образована компонентами других маршрутов.

Для структурированных программ определение цикломатического числа может осуществляться на основе количества вершин, в которых происходит ветвление: Z = nв + 1. Структурированными считаются программы, которые не имеют циклов с несколькими выходами, а также не имеют переходов внутрь циклов или условных операторов.

3. Выполнение работы

3.1 Заданная программа

Графовая модель программы:

2

1

3

4

6

7

9

5

8

10

11

12

13

14

15

18

16

17

19

20

21

Количество вершин: 15

Количество дуг: 21

Критерий 1:

Минимальный набор путей:

  1. 131415

  2. 1369129121415

  3. 12469121415

  4. 12579121415

  5. 125810121415

  6. 125810131415

  7. 125811131415

Подсчёт количества ветвлений:

s1 = (1, 3) =2

s2 = (1, 3, 12, 12) =4

s3 = (1, 2, 12) =3

s4 = (1, 2, 5, 12) =4

s5 = (1, 2, 5, 8, 10, 12) =6

s6 = (1, 2, 5, 8, 10) =5

s7 = (1, 2, 5, 8) =4

Структурная сложность: s=si = 28

Критерий 2:

В графе 21 дуга и 15 вершин.

Z = Y – N +2* = 21 – 15 + 2*1 = 8 (цикломатическое число)

Линейно-независимые циклы:

(1) 912

Линейно-независимые ациклические маршруты:

(2) 1369121415

(3) 131415

(4) 12469121415

(5) 12579121415

(6) 125810121415

(7) 125810131415

(8) 125811131415

Подсчёт количества ветвлений:

s1 = (12) =1

s2 = (1, 3, 12) =3

s3 = (1, 3) =2

s4 = (1, 2, 12) =3

s5 = (1, 2, 5, 12) =4

s6 = (1, 2, 5, 8, 10, 12) =6

s7 = (1, 2, 5, 8, 10) =5

s8 = (1, 2, 5, 8) =4

Структурная сложность: s=si = 28

3.2 Протоколы

Граф, в понятном для программы ways виде (файл test.1):

Nodes{

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

}

Top{1}

Last{15}

Arcs{

arc(1,2);

arc(1,3);

arc(2,4);

arc(2,5);

arc(3,6);

arc(3,14);

arc(4,6);

arc(5,7);

arc(5,8);

arc(6,9);

arc(7,9);

arc(8,10);

arc(8,11);

arc(9,12);

arc(10,12);

arc(10,13);

arc(11,13);

arc(12,9);

arc(12,14);

arc(13,14);

arc(14,15);

}

Результаты работы программы:

Min ways….

Z ways….

Complexity = 28

3.3 Приближённая линеаризация опытных данных

Текст анализируемого метода с комментариями:

void linfit1(const ary x, const ary y, ary y_calc)

{

int i; //1 узел

float sum_x = 0, sum_y = 0, sum_xy = 0,

sum_x2 = 0, sum_y2 = 0;

float xi, yi, sxy, sxx, syy;

for(i = 0; i < n; ++i) //2 узел

{

xi = x[i]; //3 узел

yi = y[i];

sum_x += xi;

sum_y += yi;

sum_xy += xi*yi;

sum_x2 += xi*xi;

sum_y2 += yi*yi;

}

sxx = sum_x2 - sum_x*sum_x/n; //4 узел

sxy = sum_xy - sum_x*sum_y/n;

syy = sum_y2 - sum_y*sum_y/n;

b = sxy/sxx; //5 узел

a = ((sum_x2*sum_y - sum_x*sum_xy)/n)/sxx;

for(i = 0; i < n; ++i) //6 узел

y_calc[i] = a + b*x[i]; //7 узел

};

Графовая модель программы:

1

2

3

4

5

6

7

8

Количество вершин: 7

Количество дуг: 8

Критерий 1:

Минимальный набор путей:

  1. 123234567

Подсчёт количества ветвлений:

s1 = (3, 3) =2

Структурная сложность: s=si = 2

Критерий 2:

В графе 8 дуг и 7 вершин.

Z = Y – N +2* = 8 – 7 + 2*1 = 3 (цикломатическое число)

Линейно-независимые циклы:

  1. 23

  2. 67

Линейно-независимые ациклические маршруты:

(3) 1234567

Подсчёт количества ветвлений:

s1 = (3) =1

s2 = () =0

s3 = (3) =1

Структурная сложность: s=si = 2

3.4 Протоколы

Граф, в понятном для программы ways виде (файл test.2):

Nodes{

1, 2, 3,4,5,6,7

}

Top{1}

Last{7}

Arcs{

arc(1,2);

arc(2,3);

arc(3,2);

arc(3,4);

arc(4,5);

arc(5,6);

arc(6,7);

arc(7,6);

}

Результаты работы программы:

4 Заключение

8