Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы 1-4.doc
Скачиваний:
29
Добавлен:
01.05.2014
Размер:
421.38 Кб
Скачать

4. Расчёт метрических характеристик

Формулы для вычисления метрических характеристик по Холстеду:

Число уникальных операторов (n1):

Число уникальных операндов (n2):

Общее число операторов (N1):

Общее число операндов (N2):

Словарь программы (n): n1+n2

Экспериментальная длина программы (Nэ): N1+N2

Теоретическая длина программы (Nт): n1∙log2(n1) + n2∙log2(n2)

Объём программы (V): Nэ∙log2(n)

Потенциальный объём (V*): (n1*+n2*)∙log2(n1* + n2*)=11,6

Граничный объём (V**): (n1*∙log2(n1*)+n2*∙log2(n2*))∙log2(n1* + n2*)=15.6844

Уровень программы (L): V* / V (от 0 до 1)

Сложность программы (C): L-1

Ожидание уровня программы (L^): (2/n1)∙(n2/N2)

Интеллектуальное содержание программы (I): L^ ∙ V

Работа по программированию (Е): V∙С ≡ V/L

Время кодирования (T): E/S (S – число Страуда от 5 до 20, берем 10)

Ожидаемое время кодирования (T^): n1∙N2 ∙ NТ∙log2(n) / (2∙n2∙S)

Уровень языка программирования (Lam): (V*)∙(V*)/V

Уровень ошибок (В): E2/3/3000

Ожидаемый уровень ошибок (В^): V / 3000

4.1 Язык Паскаль

Сначала произведём ручной расчёт метрических характеристик по Холстеду:

Операторы

Количество

Операнды

Количество

1

const

1

1

n

11

2

type

1

2

8

1

3

ary

3

3

1

4

4

integer

3

4

x

6

5

real

3

5

y

5

6

procedure linfit1

1

6

y_calc

4

7

(), begin…end

10

7

i

11

8

:=

23

8

a

5

9

for…to…do

3

9

b

5

10

+

6

10

sum_x

8

11

*

9

11

sum_y

8

12

-

4

12

sum_xy

6

13

/

8

13

sum_x2

6

14

[]

3

14

sum_y2

5

15

random

2

15

xi

6

16

linfit1

1

16

yi

6

Итого

81

17

sxy

3

18

sxx

4

19

syy

2

20

0.0

5

21

2000

2

22

100

2

Итого

115

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

Число уникальных операторов (n1):

16

Число уникальных операндов (n2):

22

Общее число операторов (N1):

81

Общее число операндов (N2):

115

Словарь программы (n):

38

Экспериментальная длина программы (Nэ):

196,0000

Теоретическая длина программы (Nт):

162,1068

Объём программы (V):

1028,5884

Потенциальный объём (V*):

11,6096

Граничный объём (V**):

15.6844

Уровень программы (L):

0,0113

Сложность программы (C):

88,6714

Ожидание уровня программы (L^):

0,0239

Интеллектуальное содержание программы (I):

24,5967

Работа по программированию (Е):

91206,3735

Время кодирования (T):

9120,6374

Ожидаемое время кодирования (T^):

3557,5575

Уровень языка программирования (Lam):

0,1308

Уровень ошибок (В):

0,6703

Ожидаемый уровень ошибок (В^):

0,3429

Теперь произведём расчёт метрических характеристик по Холстеду при помощи программ Parser_Pas.exeиMetrics.exe.

parser_pas -i pas1.pas -o pas1.lxm –t

metrics -i pas1.lxm -o result_pas.txt -f -n 3 -s 10

Ниже приведены результаты роботы программы:

Statistics for module pas1.lxm

=====================================

The number of different operators : 17

The number of different operands : 24

The total number of operators : 84

The total number of operands : 114

Dictionary ( D) : 41

Length ( N) : 198

Length estimation ( ^N) : 179.526

Volume ( V) : 1060.8

Potential volume ( *V) : 11.6096

Limit volume (**V) : 15.6844

Programming level ( L) : 0.0109443

Programming level estimation ( ^L) : 0.0247678

Intellect ( I) : 26.2736

Time of programming ( T) : 9692.69

Time estimation ( ^T) : 3883.35

Programming language level (lambda) : 0.127059

Work on programming ( E) : 96926.9

Error ( B) : 0.703356

Error estimation ( ^B) : 0.353598

Table:

====================================

Operators:

| 1 | 8 | ()

| 2 | 9 | *

| 3 | 6 | +

| 4 | 4 | -

| 5 | 8 | /

| 6 | 22 | =

| 7 | 6 | []

| 8 | 3 | ary

| 9 | 1 | const

| 10 | 3 | for

| 11 | 3 | integer

| 12 | 2 | linfit1

| 13 | 1 | procedure

| 14 | 1 | program

| 15 | 2 | random

| 16 | 4 | real

| 17 | 1 | type

====================================

Operands:

| 1 | 5 | 0.0

| 2 | 4 | 1

| 3 | 2 | 100

| 4 | 2 | 2000

| 5 | 1 | 8

| 6 | 5 | a

| 7 | 1 | ary

| 8 | 5 | b

| 9 | 8 | i

| 10 | 11 | n

| 11 | 1 | pLinear

| 12 | 8 | sum_x

| 13 | 6 | sum_x2

| 14 | 6 | sum_xy

| 15 | 8 | sum_y

| 16 | 5 | sum_y2

| 17 | 4 | sxx

| 18 | 3 | sxy

| 19 | 2 | syy

| 20 | 6 | x

| 21 | 6 | xi

| 22 | 5 | y

| 23 | 4 | y_calc

| 24 | 6 | yi