Главная страница

лр расчет метрик. лабораторная метрическая оценка ПО (1). Лабораторная работа по теме Метрическая оценка по


Скачать 356.5 Kb.
НазваниеЛабораторная работа по теме Метрическая оценка по
Анкорлр расчет метрик
Дата31.12.2022
Размер356.5 Kb.
Формат файлаdoc
Имя файлалабораторная метрическая оценка ПО (1).doc
ТипЛабораторная работа
#870034

Ульяновский государственный университет
Факультет Математики и информационных технологий

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


Лабораторная работа по теме:

«Метрическая оценка ПО».

.


Ульяновск - 2013г.

МЕТРИКИ СЛОЖНОСТИ ПРОГРАММЫ.


МЕТРИКИ РАЗМЕРА ПРОГРАММ.

Метрика Холстеда.

Линейная программа.



Программа с указателями.

Программа с модулями.



МЕТРИКИ СЛОЖНОСТИ ПОТОКА УПРАВЛЕНИЯ ПРОГРАММЫ.

Метрика Маккейба.

Линейная программа.


G(Z) = 16 - 13 + 2 = 5


Программа с указателями.


G(Z) = 18 - 15 + 2 = 5


Программа с модулями.


G(Z) = 6 - 5 + 2 = 3


Метрика граничных значений.

Линейная программа.









Вершины отбора

2

5

6

13

Вершины перехода

3, 4, 13

7, 8

9, 10

1

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

11

3

3

13

Вершины подграфа

3, 4, 5, 6, 7, 8, 9, 10, 11, 12

7, 8

9, 10

1-12

Нижняя граница подграфа

13

11

12

14


Sa = 11+3+3+13+9=39

So=1-13/39=0.66

Программа с указателями.







Вершины отбора

3

6

7

14

Вершины перехода

4, 5, 14

8, 9

10, 11

2, 15

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

11

3

3

14

Вершины подграфа

4, 5, 6, 7, 8, 9, 10, 11, 12 , 13

8, 9

10, 11

2-14

Нижняя граница подграфа

14

12

13

15


Sa=11+3+3+14+10=41

So=1-14/41=0.66

Программа с модулями.







Вершины отбора

2

5

Вершины перехода

3, 4, 5

1

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

3

5

Вершины подграфа

3, 4

1-4

Нижняя граница подграфа

5

6


Sa=3+5+3=11

So=1-5/11=0.55

Метрика Джилба.

Линейная программа.


CL=3

cl = CL/N=3/120=0.025

Программа с указателями.


CL=3

cl = CL/N=3/130=0.023

Программа с модулями.


CL=3

cl=CL/N=3/133=0.022

МЕТРИКИ СЛОЖНОСТИ ПОТОКА ДАННЫХ.

Метрика спена.




Линейная программа.




Программа с указателями.




Программа с модулями.





Choice

1

1

1

File

1

2

1

Num

1

1

2

Path

1

1

3

St

7

8

11


Метрика Чепина.




Линейная программа.




Программа с указателями.




Программа с модулями.





P

(для расчетов и вывода)

Path

Path

Path

M

(модифицируемые или создаваемые)

Num, st, choice

Choice, st, file, num

Choice, num, st(в main() и search())

C

(участвующие в управлении)

File, choice

File, choice

File(в add() и search()), choice

Q

(неиспользуемые)











Q = 1*P+2*M+3*C+0.5*Q
Q1=1+2*3+3*2=13

Q2=1+2*4+3*2=15

Q3=1+2*4+3*3=18

МЕТРИКИ СТИЛИСТИКИ И ПОНЯТНОСТИ ПРОГРАММ.

Метрика уровня комментированности программ.





1

2

3

Количество строк

78

84

50

Строк в сегменте

13

14

10

Кол-во сегментов

6

6

5




Количество

комментариев



Количество

комментариев

Fi

Количество

комментариев

Fi

1 сегмент

3

1

3

1

3

1

2 сегмент

2

1

3

1

2

1

3 сегмент

2

1

2

1

2

1

4 сегмент

1

-1

2

1

3

1

5 сегмент

3

1

2

1

2

1

6 сегмент

1

-1

2

1












2




6




5



Метрики Холстеда.


n = n1+n2 словарь программы

N = N1+N2 длина программы

N ^= n1 log2 n1 + n2 log2 n2 теоретическая длина программы

V = Nlog2n объем программы

V* = n*log2n* потенциальный объем программы

L = V*/V уровень качества программирования

L^ = 2n2/n1N2 уровень программы (без оценки теоретического объема)

I = L^V интеллектуальное содержание алгоритма

E = V2/V* интеллектуальные усилия при программировании

 

1

2

3

n1

30

32

35

n2

23

23

23

N1

179

190

203

N2

60

65

67

n

53

55

58

N

239

255

270

V

1369

1474,2

1581,7

V*

303,58

317,97

339,76

N^

251,2486

264,0419

283,5668

L

0,221757

0,215686

0,214815

L^

0,025556

0,022115

0,019616

I

34,98487

32,60353

31,02607

E

6173,293

6835,144

7362,876



Метрики использования языков программирования и технологических средств.

Метрики Денисенко.


Оценка эффективности контроля соответствия типов данных.

T(T-1) + N1(n1-1) + N2(n2-1)

g = Т ------------------------------

тип N1(n1-T) + N2(n2-T)

где T - число типов данных;

N1 - число операторов;

n1 - словарь операторов;

N2 - число операндов;

n - словарь операндов





1

2

3

Используемые типы данных

Char, STUDENT, fstream, unsigned int, char[]

Char, PSTUDENT, fstream, unsigned int, char[]

Char, STUDENT, unsigned int, fstream, char[]

Количество типов

5

5

5

gтип

5,878

5,825

5,793


Оценка эффективности ограничения области доступности переменных.

nсв - число внешних переменных





1

2

3

Внешние переменные

Path, st

Path, st

Path, st

Количество внешних переменных

2

2

2

dм

1,018

1,017

1,015

Уровень языка программирования.


 

1

2

3

4

5

n1

17

22

15

19

12

n2

16

19

22

20

11

N1

82

59

66

106

38

N2

27

41

63

52

26



















n

33

41

37

39

23

N

109

100

129

158

64

V

549,839

535,755

672,019

835,094

289,508

V*

166,465

219,66

192,75

206,131

104,0419




























0,069717

0,04213

0,04656

0,04049

0,070513










2,672453

0,95087

1,45688

1,3688

1,43945

 

6

7

8

9

10

n1

25

18

30

32

35

n2

27

21

23

23

23

N1

49

29

179

190

203

N2

58

31

60

65

67



















n

52

39

53

55

58

N

107

60

239

255

270

V

609,947

317,124

1368,973

1474,247

1581,655

V*

296,4229

206,131

303,5798

317,9748

339,7629




























0,037241

0,07527

0,025556

0,022115

0,019616










0,845948

1,79663

0,894058

0,72104

0,608614

λср=1,275475

Δx = 1,396978

Линейная программа.


#include

#include

#include

#include

typedef struct _STUDENT

{

char fio[20];

char group[10];

unsigned int grant;

}STUDENT, *PSTUDENT;
char path[] = "students.dat";

STUDENT st;
void main()

{
char choice;

fstream file;

unsigned int num;
do

{

clrscr();

cout<<"1-add new record\n";

cout<<"2-search record\n";

switch(choice = getch())

{

case '1':

{

file.open(path,ios::app);

if(!file)

{

cout<<"File could not be opened!!!\n";

}

else

{

cout<<"fio=";cin>>st.fio;

cout<<"group=";cin>>st.group;

cout<<"grant=";cin>>st.grant;

file.write((char*)&st,sizeof(STUDENT));

file.close();

}

getch();

break;

}

case '2':

{

file.open(path,ios::in);

if(!file)

{

cout<<"File could not be opened!!!\n";

}

else

{

cout<<"Enter number of record:";cin>>num;

file.seekp(num*sizeof(STUDENT));

file.read((char*)&st,sizeof(STUDENT));

file.close();

cout<<"fio="<

cout<<"group="<

cout<<"grant="<

}

getch();

break;

}

}

}

while(choice != 27);

}

Программа с указателями.


#include

#include

#include

#include

typedef struct _STUDENT

{

char fio[20];

char group[10];

unsigned int grant;

}STUDENT, *PSTUDENT;
char path[] = "students.dat";

PSTUDENT st;
void main()

{
char choice;

unsigned int num;

fstream *file;
st = new STUDENT;

file = new fstream();

do

{

clrscr();

cout<<"1-add new record\n";

cout<<"2-search record\n";

switch(choice = getch())

{

case '1':

{

file->open(path,ios::app);

if(!file)

{

cout<<"File could not be opened!!!\n";

}

else

{

cout<<"fio=";cin>>st->fio;

cout<<"group=";cin>>st->group;

cout<<"grant=";cin>>st->grant;

file->write((char*)st,sizeof(STUDENT));

file->close();

}

getch();

break;

}

case '2':

{

file->open(path,ios::in);

if(!file)

{

cout<<"File could not be opened!!!\n";

}

else

{

cout<<"Enter number of record:";cin>>num;

file->seekp(num*sizeof(STUDENT));

file->read((char*)st,sizeof(STUDENT));

file->close();

cout<<"fio="<fio<

cout<<"group="<group<

cout<<"grant="<grant<

}

getch();

break;

}

}

}

while(choice != 27);

delete file;

delete st;

}

Программа с модулями.



#pragma argsused

#include "type.h"

#include

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

char path[] = "students.dat";

STUDENT st;
void main()

{

char choice;

unsigned int num;
do

{

clrscr();

switch(choice=menu())

{

case '1':

{

cout<<"fio=";cin>>st.fio;

cout<<"group=";cin>>st.group;

cout<<"grant=";cin>>st.grant;

add(path, st);

break;

}

case '2':

{

cout<<"Enter number of record:";cin>>num;

st = search(path,num);

print(st);

break;

}

}

}

while(choice != 27);

}
//---------------------------------------------------------------------------

#include "Unit1.h"

//---------------------------------------------------------------------------

char menu()

{

cout<<"1-add new record\n";

cout<<"2-search record\n";

return getch();

}

#pragma package(smart_init)
//---------------------------------------------------------------------------

#include "Unit2.h"

//---------------------------------------------------------------------------

void add(char *path, STUDENT st)

{

fstream file;

file.open(path,ios::app);

if(!file)

{

cout<<"File could not be opened!!!\n";

}

else

{

file.write((char*)&st,sizeof(STUDENT));

file.close();

}

}

//---------------------------------------------------------------------------

#include "Unit3.h"

//---------------------------------------------------------------------------

STUDENT search(char *path, int num)

{

fstream file;

STUDENT st;

file.open(path,ios::in);

if(!file)

{

cout<<"File could not be opened!!!\n";

}

else

{

file.seekp(num*sizeof(STUDENT));

file.read((char*)&st,sizeof(STUDENT));

file.close();

}

return st;

}

//---------------------------------------------------------------------------

#include "Unit4.h"

//---------------------------------------------------------------------------

void print(STUDENT st)

{

cout<<"fio="<

cout<<"group="<

cout<<"grant="<

getch();

}


написать администратору сайта