МИНИСТЕРСТВО ОБРАЗОВАНИЯ
РОССИЙСКОЙ ФЕДЕРАЦИИ
САНКТ – ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНГИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ»
Кафедра МОЭВМ
Дисциплина: Метрология программного обеспечения
ОТЧЕТ
по лабораторной работе № 1
«Расчет метрическимх характеристик
качества разработки программ
по метрикам Холстеда»
Выполнил ст. гр. 3305
Заречнев М.
Проверил:
Санкт – Петербург
2007
Постановка задачи
Для заданного варианта процедуры, реализованной на языке Pascal, разработать аналогичный алгоритм и реализовать его на языках программирования С и Assembler (в ассемблерном представлении програмы нужно удалить директивы описаний и отладочные директивы, оставив только исполняемые операторы).
Для каждой из программ определить следующие метрические характеристики(по Холстеду):
1. Измеримые характеристики программ:
-
число простых (отдельных) операторов, в данной реализации;
-
число простых (отдельных) операндов, в данной реализациии;
-
общее число всех операторов в данной реализации;
-
общее число всех операндов в данной реализации;
-
число вхождения j-го оператора в тексте программы;
-
число вхождения j-го операнда в тексте программы;
-
словарь программы;
-
длина программы.
2. Расчетные характеристики программы:
-
длина программы;
-
реальный, потенциальный и граничный объем программы;
-
уровень программы;
-
интеллектуальное содержание программы;
-
уровень используемого языка прораммирования.
-
Исходные тексты программ
-
Pascal
-
program prog_pas;
type Tarr = array [1..8] of real;
procedure sort(var a: Tarr; n: integer);
var done : boolean;
jump,i,j: integer;
procedure swap(var p,q: real);
var hold : real;
begin
hold:=p;
p:=q;
q:=hold
end;
begin
jump:=n;
while jump>1 do
begin
jump:=jump div 2;
repeat
done:=true;
for j:=1 to n - jump do
begin
i:=j+jump;
if a[j]>a[i] then
begin
swap(a[j],a[i]);
done:=false
end
end
until done
end
end;
var mass: Tarr;
begin
for j:=1 to 8 do mass[j]:= j;
sort(mass, 8);
end.
-
C
void swap (float arr[], int i, int j)
{
float hold;
hold = arr[i];
arr[i]= arr[j];
arr[j]= hold;
}
void sort(float a[], int n)
{
int done, jump, i;
jump = n;
while (jump > 1)
{
jump = jump / 2;
do {
done = 1;
for (int j = 0; j < (n - jump); j++)
{
i = j + jump;
if (a[j] > a[i])
{
swap(a, i, j);
done = 0;
}
}
} while(! done) ;
}
}
int main()
{
float array[] = {1, 3, 2, 12, 5, 9, 7, 14};
sort(array, 8);
return 0;
}
-
Выполнение работы
-
Измеримые свойства алгоритмов
-
Pascal
-
-
Операторы |
Операнды |
||||
№ |
Оператор |
Число вхождений |
№ |
Операнд |
Число вхождений |
1 |
program |
1 |
1 |
prog_pas |
1 |
2 |
; |
20 |
2 |
Tarr |
3 |
3 |
type |
1 |
3 |
sort |
1 |
4 |
[..] |
6 |
4 |
swap |
1 |
5 |
procedure sort |
1 |
5 |
a |
5 |
6 |
procedure swap |
1 |
6 |
n |
2 |
7 |
var |
5 |
7 |
done |
4 |
8 |
: |
8 |
8 |
jump |
7 |
9 |
() |
4 |
9 |
i |
4 |
10 |
, |
5 |
10 |
j |
8 |
11 |
begin..end |
6 |
11 |
p |
3 |
12 |
while .. do |
1 |
12 |
q |
3 |
13 |
> |
2 |
13 |
hold |
3 |
14 |
div |
1 |
14 |
1 |
4 |
15 |
repeat .. until |
1 |
15 |
2 |
1 |
16 |
:= |
10 |
16 |
8 |
3 |
17 |
for .. to .. do |
2 |
17 |
mass |
3 |
18 |
- |
1 |
|
|
|
19 |
+ |
1 |
|
|
|
20 |
.. |
1 |
|
|
|
21 |
. |
1 |
|
|
|
Число уникальных операторов η1 = 21
Общее число всех операторов N1 = 89
Число уникальных операторов η2 = 17
Общее число всех операторов N2 = 55
Словарь программы η = 38
Длина программы N = 144
Теоретическая оценка длины N = 21log221 + 17log217= 112.098
-
C
Операторы |
Операнды |
||||
№ |
Оператор |
Число вхождений |
№ |
Операнд |
Число вхождений |
1 |
void swap |
1 |
1 |
arr |
5 |
2 |
, |
15 |
2 |
i |
7 |
3 |
; |
17 |
3 |
j |
9 |
4 |
void sort |
1 |
4 |
hold |
3 |
5 |
[] |
8 |
5 |
a |
3 |
6 |
() |
10 |
6 |
n |
3 |
7 |
while |
1 |
7 |
swap |
1 |
8 |
do ... while |
1 |
8 |
sort |
1 |
9 |
> |
2 |
9 |
done |
4 |
10 |
/ |
1 |
10 |
jump |
7 |
11 |
= |
10 |
11 |
1 |
3 |
12 |
- |
1 |
12 |
2 |
2 |
13 |
++ |
1 |
13 |
0 |
3 |
14 |
if |
1 |
14 |
array |
2 |
15 |
! |
1 |
|
|
|
16 |
int main |
1 |
|
|
|
17 |
return |
1 |
|
|
|
18 |
{ ... } |
7 |
|
|
|
Число уникальных операторов η1 = 18
Общее число всех операторов N1 = 71
Число уникальных операторов η2 = 14
Общее число всех операторов N2 = 53
Словарь программы η = 32
Длина программы N = 124
Теоретическая оценка длины N = 18log218 + 14log214= 88.373
-
Assembler
Операторы |
Операнды |
||||
№ |
Оператор |
Число вхождений |
№ |
Операнд |
Число вхождений |
1 |
proc |
3 |
1 |
bp |
12 |
2 |
push |
16 |
2 |
sp |
10 |
3 |
mov |
38 |
3 |
4 |
1 |
4 |
sub |
5 |
4 |
si |
11 |
5 |
shl |
6 |
5 |
di |
12 |
6 |
fld |
3 |
6 |
word ptr [bp+4] |
4 |
7 |
fstp |
2 |
7 |
word ptr [bp+6] |
3 |
8 |
fwait |
3 |
8 |
bx |
12 |
9 |
pop |
9 |
9 |
cl |
12 |
10 |
ret |
3 |
10 |
2 |
6 |
11 |
endp |
3 |
11 |
dword ptr [bx+si] |
3 |
12 |
jmp short @2@282 |
1 |
12 |
dword ptr [bp-4] |
1 |
13 |
cwd |
1 |
13 |
word ptr [bp+8] |
2 |
14 |
sar |
1 |
14 |
ax |
27 |
15 |
xor |
2 |
15 |
word ptr [bp-2] |
4 |
16 |
jmp short @2@226 |
1 |
16 |
word ptr [bx+si+2] |
1 |
17 |
add |
4 |
17 |
6 |
2 |
18 |
fcomp |
1 |
18 |
1 |
3 |
19 |
fstsw |
1 |
19 |
dword ptr [bx] |
2 |
20 |
sahf |
1 |
20 |
near ptr @swap$qpfii |
1 |
21 |
jbe short @2@198 |
1 |
21 |
0 |
2 |
22 |
call |
3 |
22 |
32 |
2 |
23 |
inc |
1 |
23 |
word ptr [bp-32] |
2 |
24 |
cmp |
3 |
24 |
ss |
1 |
25 |
lea |
2 |
25 |
offset DGROUP:d@w+0 |
1 |
26 |
jmp short @3@58 |
1 |
26 |
near ptr N_SCOPY@ |
1 |
27 |
jg short @2@142 |
1 |
27 |
near ptr @sort$qpfi |
1 |
28 |
je short @2@86 |
1 |
|
|
|
29 |
jg short @2@58 |
1 |
|
|
|
Число уникальных операторов η1 = 29
Общее число всех операторов N1 = 118
Число уникальных операторов η2 = 27
Общее число всех операторов N2 = 139
Словарь программы η = 56
Длина программы N = 256
Теоретическая оценка длины N = 29log229 + 27log227= 186.639