Скачиваний:
30
Добавлен:
01.05.2014
Размер:
231.94 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ

РОССИЙСКОЙ ФЕДЕРАЦИИ

САНКТ – ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНГИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ»

Кафедра МОЭВМ

Дисциплина: Метрология программного обеспечения

ОТЧЕТ

по лабораторной работе № 1

«Расчет метрическимх характеристик

качества разработки программ

по метрикам Холстеда»

Выполнил ст. гр. 3305

Заречнев М.

Проверил:

Санкт – Петербург

2007

Постановка задачи

Для заданного варианта процедуры, реализованной на языке Pascal, разработать аналогичный алгоритм и реализовать его на языках программирования С и Assembler (в ассемблерном представлении програмы нужно удалить директивы описаний и отладочные директивы, оставив только исполняемые операторы).

Для каждой из программ определить следующие метрические характеристики(по Холстеду):

1. Измеримые характеристики программ:

  • число простых (отдельных) операторов, в данной реализации;

  • число простых (отдельных) операндов, в данной реализациии;

  • общее число всех операторов в данной реализации;

  • общее число всех операндов в данной реализации;

  • число вхождения j-го оператора в тексте программы;

  • число вхождения j-го операнда в тексте программы;

  • словарь программы;

  • длина программы.

2. Расчетные характеристики программы:

  • длина программы;

  • реальный, потенциальный и граничный объем программы;

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

  • интеллектуальное содержание программы;

  • уровень используемого языка прораммирования.

  1. Исходные тексты программ

    1. 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.

    1. 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;

}

  1. Выполнение работы

    1. Измеримые свойства алгоритмов

      1. 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

      1. 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

      1. 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

Соседние файлы в папке Лабораторная работа №11