Матрица вызовов достижимости




ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Тверской Государственный Технический Университет

Кафедра «Информационные технологии»

 

Расчетно-графическая работа

по дисциплине «Метрология и Стандартизация»

(Вариант 9)

 

Выполнил: студент 2-го курса

Группы ИСТ – 0502

Косоуров Д.А.

Проверил: Котов С.Л.

Тверь 2007

 

Часть 1:

 

1. По заданной матрице вызовов и достижимости построить модульную структуру программы:

 

 
 

 

 


2.Построить список путей вызовов (путей тестирования):

 

М1 – М2 – М4;

М1 – М2 – М5 – М8 – M11;

М1 – М2 – М5 – М9 – M11;

М1 – М3 – М6 – M10;

М1 – М3 – М7 – М10;

М1 – М3 – М7 – М11;

М1 – М3 – М7 – М12.

 

3. Определить количественные характеристики программы:

 

а) иерархическую сложность:

 

J=N/L, где N – число вершин в графе,

L – число уровней в графе (количество вершин в самом длинном пути);

J=12/5=2,4.

 

б) структурную сложность:

 

S=D/N, где N – число вершин,

D – число ребер в графе;

S=14/12=1.166666667…

 

в) тестируемость:

- доступность модулей:

 

A(Mj) = ∑nx=1 A(Mx)/ C(Mx), где A(Mx) – доступность модуля Mх, вызывающего модуль Mj,

 

C(Mx) – количество модулей, которые вызывают модуль Mj;

 

А(М1)=1

А(М2)=А(М3)=А(М1)/С(М1)=1/2;

А(М4)=А(М5)=1/2/2=1/4;

А(М6)=А(М7)=1/2/2=1/4;

А(М8)= А(М9)=1/4/2=1/8;

А(М10)=А(М6)+A(M7)/1+3=(1/4+1/4)/4=1/8

A(M11)=A(M7)+A(M8)+A(M9)/3+1+1=(1/4+1/8+1/8)/5=1/10

А(М12)=1/4/3=1/12.

- тестируемость i-го пути:

 

Pi = [ ∑kj=1 1/A(Mj) ]-1, где к – число модулей на j-ом пути вызова,

A(Mj) – доступность модуля Mj на пути Pi;

 

Р1=[ 1/А(М1)+1/А(М2)+1/А(М4)]-1=[1+2+4]-1=1/7;

P2=[1/A(M1)+1/A(M2)+1/A(M5) +1/A(M8)+1/A(M11)]-1=[1+2+4+8+10]-1=1/25;

P3=[1/A(M1)+1/A(M2)+1/A(M5) +1/A(M9)+1/A(M11)]-1=[1+2+4+8+10]-1=1/25;

P4=[1/A(M1)+1/A(M3)+1/A(M6)+1/A(M10)]-1=[1+2+4+8]-1=1/15;

P5=[1/A(M1)+1/A(M3)+1/A(M7)+1/A(M10)]-1=[1+2+4+8]-1=1/15;

P6=[1/A(M1)+1/A(M3)+1/A(M7)+1/A(M11)]-1=[1+2+4+10]-1=1/17;

P7=[1/A(M1)+1/A(M3)+1/A(M7)+1/A(M12)]-1=[1+2+4+12]-1=1/19.

 

- тестируемость:

 

Т = [ (1/NB)*(∑ai=1 1/Pi) ]-1, где NB – количество путей вызовов,

Pi – тестируемость i-ого пути;

 

Т=[(1/7)*(1/1/7+1/1/25+1/1/25+1/1/15+1/1/15+1/1/17+1/1/19)]-1=[(1/7)*(123)]-1=0,0569.

-энтропия вызовов:

 

E = [∑Li*log2(Li/∑Li)]/ ∑Li,гдеLi – длина (количество модулей) i-ого пути в графе вызовов

 

[3*log2(3/29)+2*5*log2(5/29)+4*4*log2(4/29)]/29=

=[3*(-3,273)+10*(-2,536)+16*(-2,858)]/29==[-9,819 – 25,36 – 45,728]/29=

=-80,907/29=-2.789896552.

 

Часть 2:

Текст программы:

 

#include "stdafx.h"

#include "stdio.h"

#include "math.h"

int main()

{

int m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12;

 

printf ("Preved,eto moy test na ydachy.Dlja nachala vvedi 2 ili 3\n");//////////////////////////////////////////////////////////(sobitie M1)

scanf ("%i",&m1);

 

if (m1==2)

{

printf ("vvedi 4 ili 5\n");////////////////////////////////////////////////////////////////////////////.//////////////(sobitie M2)

scanf ("%i",&m2);

if (m2==4)

{

printf ("100 rublei viigral:(\n");///////////////////////////////////////.///////////////////////////(sobitie M4)

}

else

{

printf ("8 ili 9\n");///////////////////////////////////////////////////////////////////////////////////////(sobitie M5)

scanf ("%i",&m5);

if (m5==8||m5==9)

{

printf ("Sorval cush:1000 rublikov:)\n");////////////////////////(sobitie M11)

}

}

}

else

printf ("6 ili 7\n");//////////////////////////////////////////////////////////////////////////////////////////////////////////////(sobitie M3)

scanf ("%i",&m3);

{

if (m3==6)

{

printf ("molodec,100 rublei yje viigral.Vozmesh bonus,esli vvedesh 10\n");//(sobitie M6)

scanf ("%i",&m6);

if (m6==10)

{

printf ("Geroi!!!Viigral 500 rublei\n");/////////////////////////////(sobitie M10)

}

}

else

{

printf ("Superslojno!Vvedi 10,11 ili 12\n");//…///////////////////////////////////////////(sobitie M7)

scanf ("%i",&m7);

{

switch (m7)

{

case 10:

printf ("Geroi!!!Viigral 500 rublei\n");////////////////(sobitie M10)

break;

 

 

case 11:

printf ("Sorval cush:1000 rublikov:)\n");///////////(sobitie M11)

break;

case 12:

printf ("Nichego.500 rublei-toje dengi\n");////////(sobitie M12)

break;

}

}

}

}

return 1;

}

 

 

Граф вызовов по исходному тексту программы

 

 

 


Матрица вызовов достижимости

  M1 М2 М3 М4 М5 М6 М7 М8 М9 М10 М11 М12
М1 ///// + + * * * * * * * * *
М2   //////   + +     * * *    
М3     //////     + +     * * *
М4       /////                
M5         /////     + +      
M6           /////       +    
M7             /////     + + +
M8               /////     +  
М9                 /////   +  

Примечание: + означает непосредственный вызов модуля

* означает вызов через цепочку последовательных вызовов

 

· иерархическая сложность:

J=N/L, где N – число вершин в графе, L – число уровней в графе (количество вершин в самом длинном пути);

J=12/5=2,4.

· структурная сложность:

S=D/N, где N – число вершин,

D – число ребер в графе;

S=14/12=1.166666667…

· Цикломатическая сложность графа программы (цикломатическое число Маккейба):

Z(G) = e – v + 2*p, где е – число дуг ориентированного графа G,

v – число вершин ориентированного графа G;

p – Число компонентов связанности графа(количество, которое необходимо добавить для преобразование графа в сильно связанный);

Z(G)=14-12+2*4=10.

тестируемость:

- доступность модулей:

 

A(Mj) = ∑nx=1 A(Mx)/ C(Mx), где A(Mx) – доступность модуля Mх, вызывающего модуль Mj, C(Mx) – количество модулей, которые вызывают модуль Mj;

 

А(М1)=1

А(М2)=А(М3)=А(М1)/С(М1)=1/2;

А(М4)=А(М5)=1/2/2=1/4;

А(М6)=А(М7)=1/2/2=1/4;

А(М8)= А(М9)=1/4/2=1/8;

А(М10)=А(М6)+A(M7)/1+3=(1/4+1/4)/4=1/8

A(M11)=A(M7)+A(M8)+A(M9)/3+1+1=(1/4+1/8+1/8)/5=1/10

А(М12)=1/4/3=1/12.

- тестируемость i-го пути:

 

Pi = [ ∑kj=1 1/A(Mj) ]-1, где к – число модулей на j-ом пути вызова,

A(Mj) – доступность модуля Mj на пути Pi;

Р1=[ 1/А(М1)+1/А(М2)+1/А(М4)]-1=[1+2+4]-1=1/7;

P2=[1/A(M1)+1/A(M2)+1/A(M5) +1/A(M8)+1/A(M11)]-1=[1+2+4+8+10]-1=1/25;

P3=[1/A(M1)+1/A(M2)+1/A(M5) +1/A(M9)+1/A(M11)]-1=[1+2+4+8+10]-1=1/25;

P4=[1/A(M1)+1/A(M3)+1/A(M6)+1/A(M10)]-1=[1+2+4+8]-1=1/15;

P5=[1/A(M1)+1/A(M3)+1/A(M7)+1/A(M10)]-1=[1+2+4+8]-1=1/15;

P6=[1/A(M1)+1/A(M3)+1/A(M7)+1/A(M11)]-1=[1+2+4+10]-1=1/17;

P7=[1/A(M1)+1/A(M3)+1/A(M7)+1/A(M12)]-1=[1+2+4+12]-1=1/19.

- тестируемость:

Т = [ (1/NB)*(∑ai=1 1/Pi) ]-1, где NB – количество путей вызовов,

Pi – тестируемость i-ого пути;

Т=[(1/7)*(1/1/7+1/1/25+1/1/25+1/1/15+1/1/15+1/1/17+1/1/19)]-1=[(1/7)*(123)]-1=0,0569.

Средняя текстовая сложность модуля (усилие на разработку по Холстеду):

E=V/L, где V – объем программы,

L – уровень программы;

 

V=N*Log2Y; N=N1+N2;

Y=Y1+Y2, где Y1 – количество уникальных операторов в программе;

Y2 – количество уникальных операндов в программе;

Y=4+12=16;

N=24+13

V=37*log216=37*4=148;

 

L=V*/V;

 

 

V* = (2+U)Log2(2+U), где V* - потенциальный объем программы,

U – число входных и выходных данных программы;

 

V*=(2+13)*log2(2+13)=58,0633;

L=58,0633/148=0.395;

 

E=148/0,395=374,683.

 

Часть 3:

№ функции Наименование (содержание) функции Объем функции ПС (строк исходного текста) Количество функций Суммарный объем функции ПС (строки сходного текста)
  Функции, обеспечивающие ввод-вывод и обработку данных      
  Библиотечные функции ввода/ вывода высокого уровня      
  Библиотечные функции ввода/ вывода с консольного терминала и порта.      
  Инициализация вызовов и выделение памяти через главную функцию      

· общий объем разрабатываемого ПС (Vo). Это сумма объемов входящих в него функций. Из таблицы:

Vo = V1 +… + Vn ≈ 45 (строк исходного текста).

· По таблице и для объема ПС Vo ≈ 0,1 ТСИ определяем значение базовой трудоемкости разработки ПС, тоже по таблице:

Норм < 7 чел.-дней

· ПС «Средство тестирования» относим к очень низкому уровню сложности, поэтому согласно таблице:

Ксложн = 0,73

Базовая трудоемкость равна:

Тб=Норм∙Ксложн<7∙0,73=5,11 чел.-дней

· Общая трудоемкость разработки определяется

То = Тб ∙Кн ∙Ккач

Значение Кн определяем по таблице ПС " Средство тестирования " разрабатывается на известном разработчикам типе ЭВМ (на ПЭВМ типа IBM PC) и в известной ОС (MS Windows), при наличии известных разработчикам аналогов, т.е. коэффициент новизны

Кн = 0,7

Значение Ккач является произведением коэффициентов Кнад,, Кпроизв, Кдокум и Кпик,, значения которых выбираются из таблицы

- коэффициент, учитывающий требования к надежности ПС

Кнад = 0,92;

- коэффициент, учитывающий требования к производительности ПС

Кпроизв = 0,9;

- коэффициент, учитывающий требования к уровню информативности документации на фазах жизненного цикла ПС

Кдокум = 0,91;

-коэффициент повторного использования программных компонентов

Кпик = 0,95.

Ккач = 0,92*0,9*0,91*0,95=0,715806.

Общая трудоемкость разработки будет равна

То = 5,11*0,7*0,715806=2,5604 чел.-дней

· Трудоемкость разработки ПС с учетом конкретных условий разработки (Тур) рассчитывается по формуле:

Тур = То ∙ Кср.упр.жиз∙Кср.разр

Значение поправочного коэффициента, учитывающего использование средств управления жизненным циклом выбирается из таблицы:

Кср.упр.жиз = 1,17

Значение поправочного коэффициента, учитывающего конкретные условия и средства разработки ПС выбирается из табл.5.11:

Кср.разр = 1

Подсчитываем Тур

Тур = 4,40.1,09.1=2,995 чел.-дней

· Разработчик известен, поэтому в таблицах находим значения коэффициентов Кквал и Копыт:

поправочный коэффициент, учитывающий уровень квалификации разработчика ПС

Кквал=1,26;

поправочный коэффициент, учитывающий опыт разработчика ПС

Копыт =1,0.

Рассчитываем трудоемкость с учетом рейтинга разработчиков:

Тр=2,995*1,26*1,0 = 3,7737 чел.-дней

Вывод:.

 

Первая Часть: Основное требование было описать модульную структуру программы по заданной матрице вызовов и достижимости. Модульная структура программы помогает выявить связи между модулями и определить количество входных и выходных модулей.

Вторая Часть: Основной целью являлось написание программы по заданной матрице вызовов и достижимости и проверка, используя её, первой части работы. Очевидно, что эта программа имеет небольшой объём, не достаточные требования к надёжности и производительности, не имеет документации, и разработчик не является профессионалом. Всё это говорит о низком уровне качества ПС, но она удовлетворяет поставленным ей требованиям, т.к. создавалась с целью обучения.

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

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: