- •2007 Г.
- •1. Формулировка задания
- •2. Разработка вычислительного алгоритма
- •3. Реализация вычислительного алгоритма
- •3.1 Язык Паскаль
- •Преобразованная программа:
- •3.2 Язык c
- •Преобразованная программа:
- •3.3 Язык Assembler
- •Преобразованная программа:
- •4. Расчёт метрических характеристик
- •4.1 Язык Паскаль
- •4.2 Язык c
- •4.3 Язык Assembler
- •4. Выводы
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