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

министерство образования РФ

Санкт-Петербургский государственный электротехнический университет «ЛЭТИ»

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

Лабораторная работа № 1

по дисциплине

«Метрология Программного обеспечения»

Преподаватель: Кирьянчиков В.А.

Выполнилa: Нго Макеме

Факультет: КТИ

Группа: 0305

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

2004

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

Для заданного варианта программы обработки данных, представленной на языке Паскаль, разработать вычислительный алгоритм и варианты программ его реализации на языках программирования Си и Ассемблер.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- работа программиста;

- время программирования;

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

  • ожидаемое число ошибок в программе.

Паскаль

  1. Текст программы

program besy;

var x,ordr : real;

done : boolean;

function bessy(x,n: real): real;

const small = 1.0E-8;

euler = 0.57721566;

pi = 3.1415926;

pi2 = 0.63661977;

var j : integer;

x2,sum,sum2,t,t2,

ts,term,xx,y0,y1,

ya,yb,yc,ans,a,b,

sina,cosa : real;

begin

if x<12 then

begin

xx:=0.5*x;

x2:=xx*xx;

t:=ln(xx)+euler;

sum:=0.0;

term:=t;

y0:=t;

j:=0;

repeat

j:=j+1;

if j<>1 then sum:=sum+1/(j-1);

ts:=t-sum;

term:=-x2*term/(j*j)*(1-1/(j*ts));

y0:=y0+term

until abs(term)<small;

term:=xx*(t-0.5);

sum:=0.0;

y1:=term;

j:=1;

repeat

j:=j+1;

sum:=sum+1/(j-1);

ts:=t-sum;

term:=(-x2*term)/(j*(j-1))*((ts-0.5/j)/(ts+0.5/(j-1)));

y1:=y1+term

until abs(term)<small;

y0:=pi2*y0;

y1:=pi2*(y1-1/x);

if n=0.0 then ans:=y0

else if n=1.0 then ans:=y1

else

begin

ts:=2.0/x;

ya:=y0;

yb:=y1;

for j:=2 to trunc(n+0.01) do

begin

yc:=ts*(j-1)*yb-ya;

ya:=yb;

yb:=yc

end;

ans:=yc

end;

bessy:=ans;

end

else bessy:=sqrt(2/(pi*x))*sin(x-pi/4-n*pi/2)

end;

begin

done:=false;

writeln;

ordr:=1;

repeat

{ write('Order? ');

readln(ordr);}

if ordr<0.0 then done:=true

else

begin

repeat

{ write('Arg? ');

readln(x)}

x:=5;

until x>=0.0;

writeln(

bessy(x,ordr));

ordr:=-1;

end

until done

end.

Метрические характеристики

Операторы

Оператор

f1j

1

Program

1

2

;

48

3

Var

2

4

:

6

5

,

20

6

Real

4

7

function bessy

1

8

() begin end

32

9

Const

1

10

=

6

11

Integer

1

12

If then else

5

13

<

4

14

:=

40

15

*

17

16

Ln

1

17

+

9

18

repeat until

2

19

<>

1

20

/

13

21

-

16

22

Trunk

1

23

Abs

2

24

Sqrt

1

25

Sin

1

26

.

1

27

Boolean

1

28

for to do

1

29

Writeln

1

Операнды

Операнд

f1i

1

x

11

2

ordr

5

3

done

4

4

besy

1

5

bessy

2

6

n

5

7

small

3

8

1.0e-8

1

9

euler

2

10

0.57721566

1

11

pi

4

12

3.1415926

1

13

pi2

3

14

0.63661977

1

15

j

19

16

x2

4

17

sum

9

18

sum2

1

19

t

7

20

t2

1

21

ts

8

22

term

12

23

xx

6

24

y0

8

25

y1

8

26

ya

4

27

yb

5

28

yc

4

29

ans

5

30

a

1

31

b

1

32

sina

1

33

cosa

1

34

12

1

35

0.5

4

36

0.0

5

37

0

1

38

1

15

39

2.0

1

40

1.0

1

41

2

3

42

0.01

1

43

4

1

44

true

1

45

false

1

46

-1

1

  1. Число простых операторов

ŋ1=29

  1. Общее число всех операторов

N1=239

  1. Число простых операндов

ŋ 2=46

  1. Общее число всех операторов

N2=185

  1. Словарь

ŋ=ŋ12=29+46=75

  1. Опытная (экспериментальная) длина

Nэ=N1+N2=239+185=424

  1. Теоретическая длина программы

NТ = ŋ1log2ŋ12log2ŋ2=29log229+46log246=29*4.85+46*5.52= 140.65 +253.92 =394.57

| Nэ - NТ|/ Nэ *100% =7%

  1. Объем

V=Nэlog2ŋ =424log275=424*6.22=2637.28

  1. Потенциальный объем

V*=Nlog2ŋ =(ŋ 1* 2*)log2 1* + ŋ 2*)=(2 + 3) log2(2 +3)=5* log25=5*2,32=11,6

  1. Граничный объем

Vгр=(ŋ 1*log2ŋ 1* 2*log2ŋ 2* ) log2 2* + ŋ 1*)=(2*log22 +3*log23) log2(2 + 3) = ( 2 * 1 + 3 * 1,58 ) * 2,32 = ( 2 + 4,74 ) * 2,32 = =6,74*2,32=15,64

  1. Уровень программы

L=V*/V=11,6/2637,28=0,0043

  1. Сложность программы

S=1/L=1/0,0043=227,35

  1. Оценка уровня программы

L^=2/ ŋ1 * ŋ2/N2=2/29*46/185=0.0171

  1. Информационное (интеллектуальное) содержание программы

I=2ŋ2 1N2 *(N1 +N2) log2 1+ ŋ2) = 2 * 46 / (29 * 185 ) * ( 239 + +185)log275=45.097

  1. Работа по программированию

E=Nlog2 ŋ/L = V2 /V*=2637.282 /11,6=566560,155

  1. Время программирования

Tпр=E/S = 599590,155/227,35=2637.3

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

λ= V**L=11,6*0.0043=0,04988

  1. Ожидаемое число ошибок

B=E/E0*k=0.8799

Данные, полученные с помощью программы автоматизации расчета метрик Холстеда.

Учитывается операторы описания типов в качестве операторов программы и учитывается «;» в качестве оператора программы

Statistics for module lab1.lxm

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

The number of different operators : 27

The number of different operands : 47

The total number of operators : 220

The total number of operands : 180

Dictionary ( D) : 74

Length ( N) : 400

Length estimation ( ^N) : 389.448

Volume ( V) : 2483.78

Potential volume ( *V) : 19.6515

Limit volume (**V) : 38.2071

Programming level ( L) : 0.00791192

Programming level estimation ( ^L) : 0.0193416

Intellect ( I) : 48.0402

Time of programming ( T) : 17440.5

Time estimation ( ^T) : 6946.06

Programming language level (lambda) : 0.155481

Work on programming ( E) : 313929

Error ( B) : 1.53969

Error estimation ( ^B) : 0.827927

Table:

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

Operators:

| 1 | 26 | ()

| 2 | 17 | *

| 3 | 9 | +

| 4 | 16 | -

| 5 | 13 | /

| 6 | 64 | ;

| 7 | 4 | <

| 8 | 1 | <>

| 9 | 43 | =

| 10 | 2 | abs

| 11 | 1 | bessy

| 12 | 1 | boolean

| 13 | 1 | const

| 14 | 1 | for

| 15 | 1 | function

| 16 | 4 | if

| 17 | 1 | integer

| 18 | 1 | ln

| 19 | 1 | program

| 20 | 1 | readln

| 21 | 4 | real

| 22 | 2 | repeat

| 23 | 1 | sin

| 24 | 1 | sqrt

| 25 | 1 | trunc

| 26 | 2 | write

| 27 | 1 | writeln

Operands:

| 1 | 1 | 'Arg? '

| 2 | 1 | 'Order? '

| 3 | 1 | 0

| 4 | 4 | 0.0

| 5 | 1 | 0.01

| 6 | 4 | 0.5

| 7 | 1 | 0.57721566

| 8 | 1 | 0.63661977

| 9 | 15 | 1

| 10 | 1 | 1.0

| 11 | 1 | 1.0E-8

| 12 | 1 | 12

| 13 | 3 | 2

| 14 | 1 | 2.0

| 15 | 1 | 3.1415926

| 16 | 1 | 4

| 17 | 1 | a

| 18 | 5 | ans

| 19 | 1 | b

| 20 | 2 | bessy

| 21 | 1 | besy

| 22 | 1 | cosa

| 23 | 3 | done

| 24 | 2 | euler

| 25 | 1 | false

| 26 | 18 | j

| 27 | 5 | n

| 28 | 4 | ordr

| 29 | 4 | pi

| 30 | 3 | pi2

| 31 | 1 | sina

| 32 | 3 | small

| 33 | 9 | sum

| 34 | 1 | sum2

| 35 | 7 | t

| 36 | 1 | t2

| 37 | 12 | term

| 38 | 1 | true

| 39 | 8 | ts

| 40 | 9 | x

| 41 | 4 | x2

| 42 | 6 | xx

| 43 | 8 | y0

| 44 | 8 | y1

| 45 | 4 | ya

| 46 | 5 | yb

| 47 | 4 | yc

Summary:

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

The number of different operators : 27

The number of different operands : 47

The total number of operators : 220

The total number of operands : 180

Dictionary ( D) : 74

Length ( N) : 400

Length estimation ( ^N) : 389.448

Volume ( V) : 2483.78

Potential volume ( *V) : 19.6515

Limit volume (**V) : 38.2071

Programming level ( L) : 0.00791192

Programming level estimation ( ^L) : 0.0193416

Intellect ( I) : 48.0402

Time of programming ( T) : 17440.5

Time estimation ( ^T) : 6946.06

Programming language level (lambda) : 0.155481

Work on programming ( E) : 313929

Error ( B) : 1.53969

Error estimation ( ^B) : 0.827927

Си

  1. Текст программы

#include <math.h>

#include <stdio.h>

float bessy (float x, float n)

{

const float small = 1.0E-8;

const float euler = 0.57721566;

const float pi = 3.1415926;

const float pi2 = 0.63661977;

int j;

float x2,sum,sum2,t,t2,

ts,term,xx,y0,y1,

ya,yb,yc,ans,a,b,

sina,cosa;

if (x<12) {

xx = 0.5 * x;

x2 = xx * xx;

t= log(xx) + euler;

sum = 0.0;

term = t;

y0 = t;

j = 0;

do{

j=j+1;

if (j != 1) {sum = sum + 1 / (j - 1);}

ts = t - sum;

term = -x2 * term / (j * j)*(1 - 1/(j * ts));

y0 = y0 + term;

}while ( fabs(term) >= small);

term = xx * (t - 0.5);

sum = 0.0;

y1 = term;

j = 1;

do{

j = j + 1;

sum = sum + 1.0 / (j - 1);

ts = t - sum;

term = (-x2 * term)/(j * (j - 1))*((ts - 0.5/j)/(ts + 0.5/(j - 1)));

y1 = y1 + term;

}while (fabs(term) >= small);

y0 = pi2 * y0;

y1 = pi2 * (y1 - 1/x);

if (n==0.0) {ans = y0;}

else {if (n==1.0) {ans = y1;}

else

{

ts = 2.0 / x;

ya = y0;

yb = y1;

for (j=2; j<ceil(n+0.01);j+1)

{

yc = ts * (j - 1) * yb - ya;

ya = yb;

yb = yc;

}

ans = yc;

}}

return ans;

}

else return sqrt(2 /(pi * x)) * sin(x - pi/4 - n * pi/2);

}

void main (void)

{

float x;

float ordr;

int done;

done = 0;

ordr = 1;

do{

if (ordr<0.0) {done = 1;}

else

{

do{

x = 5;

}while (x < 0.0);

printf("%f",bessy(x,ordr));

ordr = -1;

}

}while (done == 0);

}

Метрические характеристики

Операторы

Оператор

f1j

1

#include

2

2

<math.h>

1

3

<stdio.h>

1

4

float

10

5

const

4

6

int

2

7

bessy

2

8

() {}

51

9

;

55

10

=

42

11

,

20

12

if else

5

13

<

4

14

==

3

15

*

17

16

log

1

17

+

10

18

do while

4

19

>=

2

20

“%f”

1

21

-

16

22

ceil

1

23

fabs

2

24

sqrt

1

25

sin

1

26

/

13

27

!=

1

28

for

1

29

printf

2

30

return

2

31

void

2

32

main

1

Операнды

Операнд

f1i

1

x

11

2

ordr

5

3

n

5

4

small

3

5

1.0e-8

1

6

euler

2

7

0.57721566

1

8

pi

4

9

3.1415926

1

10

pi2

3

11

0.63661977

1

12

j

21

13

x2

4

14

sum

9

15

sum2

1

16

t

7

17

t2

1

18

ts

8

19

term

12

20

xx

6

21

y0

8

22

y1

8

23

ya

4

24

yb

5

25

yc

4

26

ans

5

27

a

1

28

b

1

29

sina

1

30

cosa

1

31

12

1

32

0.5

4

33

0.0

5

34

0

3

35

1

16

36

2.0

1

37

1.0

2

38

2

3

39

0.01

1

40

4

1

41

-1

1

42

done

4

1. Число простых операторов

ŋ1=32

  1. Общее число всех операторов

N2=280

  1. Число простых операндов

ŋ 2=42

  1. Общее число всех операторов

N2=186

  1. Словарь

ŋ=ŋ12=32+42=74

  1. Опытная (экспериментальная) длина

Nэ=N1+N2=260+186=446

  1. Теоретическая длина программы

NТ = ŋ1log2ŋ12log2ŋ2=32log232+42log242=32*5+42*5.39= 160 +226.38 =386.38

| Nэ - NТ|/ Nэ *100% =13.4%

  1. Объем

V=Nэlog2ŋ =446log274=446*6.2=2740.4

  1. Потенциальный объем

V*=Nlog2ŋ =(ŋ 1* 2*)log2 1* + ŋ 2*)NТ=(2 +3)log2(2 +3) =5 log25=5*2,32=11,6

  1. Граничный объем

Vгр=(ŋ 1*log2ŋ 1* 2*log2ŋ 2* ) log2 2* + ŋ 1*)=(2 log22+3log23) log2(2 +3)=(2*1+3*1,58)*2,32=(2+4,74)*2,32=15,64

  1. Уровень программы

L=V*/V=11,6/2740.4=0,00423

  1. Сложность программы

S=1/L=1/0.00423=236,24

  1. Оценка уровня программы

L=2/ ŋ1 * ŋ2/N2=2/32*42/186=0.0141

  1. Информационное (интеллектуальное) содержание программы

I=2ŋ2 1N2 *(N1 +N2) log2 1+ ŋ2) = 2 * 42 / (32 * 186 ) * ( 280 + +186)log274=38.63964

  1. Работа по программированию

E=Nlog2 ŋ/L = V2 /V*=2740.42/11,6=647395,88

  1. Время программирования

Tпр=E/S = 647395,88/236,24=2740.42

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

λ= V**L=11,6*0.00423=0,049068

  1. Ожидаемое число ошибок

B=E/E0*k=0,9135

Данные, полученные с помощью программы автоматизации расчета метрик Холстеда.

Учитывается операторы описания типов в качестве операторов программы и учитывается «;» в качестве оператора программы

Statistics for module LAB1.lxm

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

The number of different operators : 29

The number of different operands : 43

The total number of operators : 257

The total number of operands : 188

Dictionary ( D) : 72

Length ( N) : 445

Length estimation ( ^N) : 374.211

Volume ( V) : 2745.62

Potential volume ( *V) : 19.6515

Limit volume (**V) : 38.2071

Programming level ( L) : 0.0071574

Programming level estimation ( ^L) : 0.015774

Intellect ( I) : 43.3094

Time of programming ( T) : 21311.4

Time estimation ( ^T) : 8131.7

Programming language level (lambda) : 0.140654

Work on programming ( E) : 383605

Error ( B) : 1.75982

Error estimation ( ^B) : 0.915206

Table:

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

Operators:

| 1 | 1 | !=

| 2 | 31 | ()

| 3 | 17 | *

| 4 | 10 | +

| 5 | 20 | ,

| 6 | 14 | -

| 7 | 13 | /

| 8 | 57 | ;

| 9 | 4 | <

| 10 | 42 | =

| 11 | 3 | ==

| 12 | 2 | >=

| 13 | 3 | _-

| 14 | 2 | bessy

| 15 | 1 | ceil

| 16 | 4 | const

| 17 | 4 | dowhile

| 18 | 2 | fabs

| 19 | 10 | float

| 20 | 1 | for

| 21 | 5 | if

| 22 | 2 | int

| 23 | 1 | log

| 24 | 1 | main

| 25 | 1 | printf

| 26 | 2 | return

| 27 | 1 | sin

| 28 | 1 | sqrt

| 29 | 2 | void

Operands:

| 1 | 1 | "%f"

| 2 | 3 | 0

| 3 | 5 | 0.0

| 4 | 1 | 0.01

| 5 | 4 | 0.5

| 6 | 1 | 0.57721566

| 7 | 1 | 0.63661977

| 8 | 17 | 1

| 9 | 2 | 1.0

| 10 | 1 | 1.0E-8

| 11 | 1 | 12

| 12 | 3 | 2

| 13 | 1 | 2.0

| 14 | 1 | 3.1415926

| 15 | 1 | 4

| 16 | 1 | 5

| 17 | 1 | a

| 18 | 5 | ans

| 19 | 1 | b

| 20 | 1 | cosa

| 21 | 4 | done

| 22 | 2 | euler

| 23 | 21 | j

| 24 | 5 | n

| 25 | 5 | ordr

| 26 | 4 | pi

| 27 | 3 | pi2

| 28 | 1 | sina

| 29 | 3 | small

| 30 | 9 | sum

| 31 | 1 | sum2

| 32 | 7 | t

| 33 | 1 | t2

| 34 | 12 | term

| 35 | 8 | ts

| 36 | 11 | x

| 37 | 4 | x2

| 38 | 6 | xx

| 39 | 8 | y0

| 40 | 8 | y1

| 41 | 4 | ya

| 42 | 5 | yb

| 43 | 4 | yc

Summary:

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

The number of different operators : 29

The number of different operands : 43

The total number of operators : 257

The total number of operands : 188

Dictionary ( D) : 72

Length ( N) : 445

Length estimation ( ^N) : 374.211

Volume ( V) : 2745.62

Potential volume ( *V) : 19.6515

Limit volume (**V) : 38.2071

Programming level ( L) : 0.0071574

Programming level estimation ( ^L) : 0.015774

Intellect ( I) : 43.3094

Time of programming ( T) : 21311.4

Time estimation ( ^T) : 8131.7

Programming language level (lambda) : 0.140654

Work on programming ( E) : 383605

Error ( B) : 1.75982

Error estimation ( ^B) : 0.915206

Ассемблер

  1. Текст программы

.386p

ifndef ??version

?debug macro

endm

publicdll macro name

public name

endm

endif

?debug V 300h

?debug S "LAB1.CPP"

?debug C E9BA656930084C4142312E435050

?debug C E94019CA1814433A5C42435C494E434C5544455C4D4154482E48

?debug C E94019CA1815433A5C42435C494E434C5544455C5F444546532E48

?debug C E94019CA1815433A5C42435C494E434C5544455C535444494F2E48

?debug C E94019CA1816433A5C42435C494E434C5544455C5F4E46494C452E+

?debug C 48

?debug C E94019CA1815433A5C42435C494E434C5544455C5F4E554C4C2E48

LAB1_TEXT segment byte public use16 'CODE'

LAB1_TEXT ends

DGROUP group _DATA,_BSS

assume cs:LAB1_TEXT,ds:DGROUP

_DATA segment word public use16 'DATA'

d@ label byte

d@w label word

_DATA ends

_BSS segment word public use16 'BSS'

b@ label byte

b@w label word

_BSS ends

LAB1_TEXT segment byte public use16 'CODE'

?debug C E801084C4142312E435050BA656930

;

; float bessy (float x, float n)

;

?debug L 4

assume cs:LAB1_TEXT

@bessy$qff proc far

?debug B

enter 76,0

push si

?debug C E6016E0E0A0A000001780E0A060000

?debug B

;

; {

; const float small = 1.0E-8;

;

?debug L 6

mov dword ptr [bp-4],large 0322BCC77h

;

; const float euler = 0.57721566;

;

?debug L 7

mov dword ptr [bp-8],large 03F13C468h

;

; const float pi = 3.1415926;

;

?debug L 8

mov dword ptr [bp-12],large 040490FDAh

;

; const float pi2 = 0.63661977;

;

?debug L 9

mov dword ptr [bp-16],large 03F22F983h

;

;

; int j;

; float x2,sum,sum2,t,t2,

; ts,term,xx,y0,y1,

; ya,yb,yc,ans,a,b,

; sina,cosa;

;

; if (x<12) {

;

?debug L 17

fld dword ptr [bp+6]

fcomp dword ptr DGROUP:s@

fstsw word ptr [bp-66]

fwait

mov ax,word ptr [bp-66]

sahf

jb short @@15

jmp @1@646

@@15:

;

; xx = 0.5 * x;

;

?debug L 18

fld dword ptr [bp+6]

fmul dword ptr DGROUP:s@+4

fstp dword ptr [bp-40]

;

; x2 = xx * xx;

;

?debug L 19

fld dword ptr [bp-40]

fmul dword ptr [bp-40]

fstp dword ptr [bp-20]

;

; t= log(xx) + euler;

;

?debug L 20

fld dword ptr [bp-40]

sub sp,8

fstp qword ptr [bp-86]

fwait

call far ptr _log

add sp,8

fadd dword ptr [bp-8]

fstp dword ptr [bp-28]

;

; sum = 0.0;

;

?debug L 21

fwait

mov dword ptr [bp-24],large 0

;

; term = t;

;

?debug L 22

mov eax,dword ptr [bp-28]

mov dword ptr [bp-36],eax

;

; y0 = t;

;

?debug L 23

mov eax,dword ptr [bp-28]

mov dword ptr [bp-44],eax

;

; j = 0;

;

?debug L 24

xor si,si

@1@86:

;

; do{

; j=j+1;

;

?debug L 26

mov ax,si

inc ax

mov si,ax

;

; if (j != 1) {sum = sum + 1 / (j - 1);}

;

?debug L 27

cmp si,1

je short @1@142

mov bx,si

dec bx

mov ax,1

cwd

idiv bx

mov word ptr [bp-66],ax

fild word ptr [bp-66]

fadd dword ptr [bp-24]

fstp dword ptr [bp-24]

fwait

@1@142:

;

; ts = t - sum;

;

?debug L 28

fld dword ptr [bp-28]

fsub dword ptr [bp-24]

fstp dword ptr [bp-32]

;

; term = -x2 * term / (j * j)*(1 - 1/(j * ts));

;

?debug L 29

mov ax,si

imul si

fwait

mov word ptr [bp-66],ax

fild word ptr [bp-66]

fld dword ptr [bp-20]

fchs

fmul dword ptr [bp-36]

fdivr

mov word ptr [bp-66],si

fild word ptr [bp-66]

fmul dword ptr [bp-32]

fld1

fdivr

fld1

fsubr

fmul

fstp dword ptr [bp-36]

;

; y0 = y0 + term;

;

?debug L 30

fld dword ptr [bp-44]

fadd dword ptr [bp-36]

fstp dword ptr [bp-44]

fwait

;

; }while ( fabs(term) >= small);

;

?debug L 31

fld dword ptr [bp-36]

sub sp,8

fstp qword ptr [bp-86]

fwait

call far ptr _fabs

add sp,8

fcomp dword ptr [bp-4]

fstsw word ptr [bp-66]

fwait

mov ax,word ptr [bp-66]

sahf

jb short @@16

jmp @1@86

@@16:

;

; term = xx * (t - 0.5);

;

?debug L 32

fld dword ptr [bp-40]

fld dword ptr [bp-28]

fsub dword ptr DGROUP:s@+4

fmul

fstp dword ptr [bp-36]

;

; sum = 0.0;

;

?debug L 33

fwait

mov dword ptr [bp-24],large 0

;

; y1 = term;

;

?debug L 34

mov eax,dword ptr [bp-36]

mov dword ptr [bp-48],eax

;

; j = 1;

;

?debug L 35

mov si,1

@1@226:

;

; do{

; j = j + 1;

;

?debug L 37

mov ax,si

inc ax

mov si,ax

;

; sum = sum + 1.0 / (j - 1);

;

?debug L 38

fld dword ptr [bp-24]

mov ax,si

dec ax

mov word ptr [bp-66],ax

fild word ptr [bp-66]

fld1

fdivr

fadd

fstp dword ptr [bp-24]

;

; ts = t - sum;

;

?debug L 39

fld dword ptr [bp-28]

fsub dword ptr [bp-24]

fstp dword ptr [bp-32]

;

; term = (-x2 * term)/(j * (j - 1))*((ts - 0.5/j)/(ts + 0.5/(j - 1)));

;

?debug L 40

fld dword ptr [bp-32]

mov word ptr [bp-66],si

fild word ptr [bp-66]

fdivr dword ptr DGROUP:s@+4

fsub

fld dword ptr [bp-32]

mov ax,si

dec ax

mov word ptr [bp-66],ax

fild word ptr [bp-66]

fdivr dword ptr DGROUP:s@+4

fadd

fdiv

mov dx,si

dec dx

mov ax,si

imul dx

mov word ptr [bp-66],ax

fild word ptr [bp-66]

fld dword ptr [bp-20]

fchs

fmul dword ptr [bp-36]

fdivr

fmul

fstp dword ptr [bp-36]

;

; y1 = y1 + term;

;

?debug L 41

fld dword ptr [bp-48]

fadd dword ptr [bp-36]

fstp dword ptr [bp-48]

fwait

;

; }while (fabs(term) >= small);

;

?debug L 42

fld dword ptr [bp-36]

sub sp,8

fstp qword ptr [bp-86]

fwait

call far ptr _fabs

add sp,8

fcomp dword ptr [bp-4]

fstsw word ptr [bp-66]

fwait

mov ax,word ptr [bp-66]

sahf

jb short @@17

jmp @1@226

@@17:

;

; y0 = pi2 * y0;

;

?debug L 43

fld dword ptr [bp-16]

fmul dword ptr [bp-44]

fstp dword ptr [bp-44]

;

; y1 = pi2 * (y1 - 1/x);

;

?debug L 44

fld1

fdiv dword ptr [bp+6]

fsubr dword ptr [bp-48]

fmul dword ptr [bp-16]

fstp dword ptr [bp-48]

;

; if (n==0.0) {ans = y0;}

;

?debug L 45

fld dword ptr [bp+10]

fldz

fcompp

fstsw word ptr [bp-66]

fwait

mov ax,word ptr [bp-66]

sahf

jne short @1@338

mov eax,dword ptr [bp-44]

mov dword ptr [bp-64],eax

jmp @1@562

@1@338:

;

; else {if (n==1.0) {ans = y1;}

;

?debug L 46

fld dword ptr [bp+10]

fld1

fcompp

fstsw word ptr [bp-66]

fwait

mov ax,word ptr [bp-66]

sahf

jne short @1@394

mov eax,dword ptr [bp-48]

jmp @1@534

@1@394:

;

; else

; {

; ts = 2.0 / x;

;

?debug L 49

fld dword ptr [bp+6]

fdivr dword ptr DGROUP:s@+8

fstp dword ptr [bp-32]

;

; ya = y0;

;

?debug L 50

fwait

mov eax,dword ptr [bp-44]

mov dword ptr [bp-52],eax

;

; yb = y1;

;

?debug L 51

mov eax,dword ptr [bp-48]

mov dword ptr [bp-56],eax

;

; for (j=2; j<ceil(n+0.01);j+1)

;

?debug L 52

mov si,2

jmp short @1@478

@1@422:

;

; {

; yc = ts * (j - 1) * yb - ya;

;

?debug L 54

mov ax,si

dec ax

mov word ptr [bp-66],ax

fild word ptr [bp-66]

fmul dword ptr [bp-32]

fmul dword ptr [bp-56]

fsub dword ptr [bp-52]

fstp dword ptr [bp-60]

;

; ya = yb;

;

?debug L 55

fwait

mov eax,dword ptr [bp-56]

mov dword ptr [bp-52],eax

;

; yb = yc;

;

?debug L 56

mov eax,dword ptr [bp-60]

mov dword ptr [bp-56],eax

?debug L 52

mov ax,si

inc ax

@1@478:

mov word ptr [bp-66],si

fild word ptr [bp-66]

fstp tbyte ptr [bp-76]

fld dword ptr [bp+10]

fadd qword ptr DGROUP:s@+12

sub sp,8

fstp qword ptr [bp-86]

fwait

call far ptr _ceil

add sp,8

fld tbyte ptr [bp-76]

fcompp

fstsw word ptr [bp-66]

fwait

mov ax,word ptr [bp-66]

sahf

jb short @1@422

;

; }

; ans = yc;

;

?debug L 58

mov eax,dword ptr [bp-60]

@1@534:

mov dword ptr [bp-64],eax

@1@562:

;

; }}

; return ans;

;

?debug L 60

fld dword ptr [bp-64]

@1@590:

jmp short @1@674

;

; }

;

?debug L 61

jmp short @1@674

@1@646:

;

; else return sqrt(2 /(pi * x)) * sin(x - pi/4 - n * pi/2);

;

?debug L 62

fld dword ptr [bp-12]

fmul dword ptr [bp+6]

fdivr dword ptr DGROUP:s@+8

sub sp,8

fstp qword ptr [bp-86]

fwait

call far ptr _sqrt

add sp,8

fstp tbyte ptr [bp-76]

fld dword ptr [bp-12]

fdiv dword ptr DGROUP:s@+20

fsubr dword ptr [bp+6]

fld dword ptr [bp+10]

fmul dword ptr [bp-12]

fdiv dword ptr DGROUP:s@+8

fsub

sub sp,8

fstp qword ptr [bp-86]

fwait

call far ptr _sin

add sp,8

fld tbyte ptr [bp-76]

fmul

jmp short @1@590

@1@674:

;

; }

;

?debug L 63

pop si

leave

ret

?debug C E603616E730E02C0FF000279630E02C4FF000279+

?debug C 620E02C8FF000279610E02CCFF000279310E02D0+

?debug C FF000279300E02D4FF000278780E02D8FF000474+

?debug C 65726D0E02DCFF000274730E02E0FF0001740E02+

?debug C E4FF000373756D0E02E8FF000278320E02ECFF00+

?debug C 016A04040600037069320E02F0FF000270690E02+

?debug C F4FF000565756C65720E02F8FF0005736D616C6C+

?debug C 0E02FCFF0001780E0A060000016E0E0A0A0000

?debug E

?debug E

@bessy$qff endp

;

; void main (void)

;

?debug L 65

assume cs:LAB1_TEXT

_main proc far

?debug B

enter 10,0

push si

?debug B

;

; {

; float x;

; float ordr;

; int done;

;

; done = 0;

;

?debug L 71

xor si,si

;

; ordr = 1;

;

?debug L 72

mov dword ptr [bp-8],large 03F800000h

@2@58:

;

; do{

; if (ordr<0.0) {done = 1;}

;

?debug L 74

fld dword ptr [bp-8]

fldz

fcompp

fstsw word ptr [bp-10]

fwait

mov ax,word ptr [bp-10]

sahf

jbe short @2@114

mov si,1

jmp short @2@198

@2@114:

;

; else

; {

; do{

; x = 5;

;

?debug L 78

mov dword ptr [bp-4],large 040A00000h

;

; }while (x < 0.0);

;

?debug L 79

fld dword ptr [bp-4]

fldz

fcompp

fstsw word ptr [bp-10]

fwait

mov ax,word ptr [bp-10]

sahf

ja short @2@114

;

; printf("%f",bessy(x,ordr));

;

?debug L 80

fld dword ptr [bp-8]

sub sp,4

fstp dword ptr [bp-16]

fld dword ptr [bp-4]

sub sp,4

fstp dword ptr [bp-20]

fwait

push cs

call near ptr @bessy$qff

add sp,8

sub sp,8

fstp qword ptr [bp-20]

push offset DGROUP:s@+24

fwait

call far ptr _printf

add sp,10

;

; ordr = -1;

;

?debug L 81

mov dword ptr [bp-8],large 0BF800000h

@2@198:

;

; }

; }while (done == 0);

;

?debug L 83

or si,si

je short @2@58

;

; }

;

?debug L 84

pop si

leave

ret

?debug C E604646F6E6504040600046F7264720E02F8FF00+

?debug C 01780E02FCFF00

?debug E

?debug E

_main endp

?debug C E9

?debug C FA00000000

LAB1_TEXT ends

_DATA segment word public use16 'DATA'

s@ label byte

db 0

db 0

db '@A'

db 0

db 0

db 0

db '?'

db 0

db 0

db 0

db '@{'

db 20

db 174

db 'G'

db 225

db 'z'

db 132

db '?'

db 0

db 0

db 128

db '@%f'

db 0

_DATA ends

LAB1_TEXT segment byte public use16 'CODE'

LAB1_TEXT ends

public _main

public @bessy$qff

extrn _printf:far

extrn _sqrt:far

extrn _sin:far

extrn _log:far

extrn _fabs:far

extrn _ceil:far

_s@ equ s@

?debug C EA050A

?debug C E31800000023010400

?debug C EC055F6D61696E181800

?debug C E319000000230E0400

?debug C EC0A40626573737924716666191800

?debug C E31A00000023040401

?debug C EB075F7072696E74661A00

?debug C E31B0B5F657863657074696F6E6C22001E01

?debug C E31C000200150204

?debug C E31D09657863657074696F6E1C001E07

?debug C E31E000000230F0400

?debug C EB055F737172741E00

?debug C E31F000000230F0400

?debug C EB045F73696E1F00

?debug C E320000000230F0400

?debug C EB045F6C6F672000

?debug C E321000000230F0400

?debug C EB055F666162732100

?debug C E322000000230F0400

?debug C EB055F6365696C2200

?debug C E60666706F735F740606000673697A655F740A06+

?debug C 000B5F657863657074696F6E6C1B070009657863+

?debug C 657074696F6E1D0700

?debug C E20004747970650400046E616D651C0004617267+

?debug C 311000046172673210000672657476616C10C022+

?debug C 000000

?debug C E20004747970650400046E616D651C0004617267+

?debug C 310F0004617267320F000672657476616C0FC01C+

?debug C 000000

end

Метрические характеристики

Операторы

Оператор

f1j

1

.386p

1

2

far

15

3

sahf

8

4

ifndef

1

5

endm

2

6

publicdll

1

7

macro

1

8

name

2

9

public

9

10

endif

1

11

segment

6

12

assume

3

13

label

5

14

call

8

15

dword ptr

107

16

qword ptr

8

17

word ptr

34

18

push

4

19

pop

2

20

mov

61

21

fmul

15

22

fcomp

4

23

fcompp

4

24

large

9

25

leave

2

26

fstsw

8

27

ja

1

28

:

39

29

jb

4

30

jbe

1

31

fsubr

3

32

ends

6

33

extrn

6

34

db

23

35

word

5

36

tbyte ptr

4

37

jmp

10

38

sub

9

39

xor

2

40

fwait

24

41

byte

6

42

use16

6

43

group

1

44

proc

2

45

add

8

46

fadd

7

47

fsub

6

48

enter

2

49

fld

31

50

fldz

3

51

fld1

5

52

jne

2

53

fdiv

4

54

fdivr

8

55

fsp

27

56

ret

2

57

endp

2

58

,

86

59

cmp

1

60

inc

3

61

fild

9

62

je

2

63

or

1

64

short

15

65

offset

1

66

near

1

67

ptr

8

68

cwd

1

69

idiv

1

70

imul

1

71

fchs

2

72

equ

1

73

end

1

74

dec

5

Операнды

Операнд

f1i

1

ax

31

2

eax

19

3

sp

17

4

[bp-8]

6

5

[bp-10]

4

6

[bp-4]

6

7

[bp-20]

5

8

[bp-16]

4

9

[bp-66]

30

10

[bp-40]

5

11

[bp-28]

6

12

[bp-32]

7

13

[bp-76]

4

14

[bp-12]

4

15

[bp-86]

6

16

[bp-64]

3

17

[bp-48]

7

18

[bp-60]

3

19

[bp-52]

3

20

[bp-56]

4

21

[bp-36]

11

22

[bp-44]

7

23

[bp-24]

8

24

[bp+6]

6

25

[bp+10]

4

26

si

30

27

cs

4

28

ds

1

29

_DATA

5

30

_BSS

3

31

‘CODE’

3

32

DGROUP

13

33

‘DATA’

2

34

‘BSS’

1

35

LAB1_TEXT

9

36

@bessy$qff

4

37

76

1

38

d@

1

39

d@w

1

40

b@

1

41

b@w

1

42

0322bcc77h

1

43

03f13c468h

1

44

040490fdah

1

45

03f22f983h

1

46

03f800000h

1

47

040a00000h

1

48

0bf800000h

1

49

bx

3

50

dx

3

51

_log

2

52

_fabs

3

53

_ceil

2

54

_sqrt

2

55

_sin

2

56

_main

3

57

_printf

2

58

@@15

2

59

s@

3

60

s@+4

3

61

s@+8

3

62

s@+20

1

63

s@+24

1

64

s@+12

1

65

_s@

1

66

@1@646

2

67

@1@86

2

68

@@16

2

69

@1@226

2

70

@1@338

2

71

@1@394

2

72

@1@422

2

73

@1@142

2

74

@@17

2

75

@1@562

2

76

@1@534

2

78

@1@478

2

79

@1@590

2

80

@1@674

3

81

@2@114

3

82

@2@198

2

83

@2@58

2

84

0

15

85

8

14

86

10

2

87

20

1

88

174

1

89

225

1

90

132

1

91

128

1

92

1

4

93

2

1

94

4

2

95

‘@%f’

1

96

‘?’

2

97

‘z’

1

98

‘G’

1

99

‘@A’

1

100

‘@{’

1

  1. Число простых операторов

ŋ1=74

  1. Общее число всех операторов

N2=719

  1. Число простых операндов

ŋ 2=100

  1. Общее число всех операторов

N2=426

  1. Словарь

ŋ=ŋ12=74+100=174

  1. Опытная (экспериментальная) длина

Nэ=N1+N2=719+426=1145

  1. Теоретическая длина программы

NТ = ŋ1log2ŋ12log2ŋ2=74log274+100log2100=74*6.2+100*6.64= 458.8 +664 = 1122.8

| Nэ - NТ|/ Nэ *100% = 2%

  1. Объем

V=Nэlog2ŋ =1145log2174=1145*7.44=8518.8

  1. Потенциальный объем

V*=Nlog2ŋ = (ŋ1*2*)log2 1* + ŋ 2*)=(2 +3)log2(2 +3)=5 log25=5*2,32=11,6

  1. Граничный объем

Vгр=(ŋ 1*log2ŋ 1* 2*log2ŋ 2* ) log2 2* + ŋ 1*)=(2log22+3log23) log2(2 + 3 ) = ( 2 * 1 + 3 * 1,58 ) * 2,32 = ( 2 + 4,74 ) * 2,32 = 15,64

  1. Уровень программы

L=V*/V=11,6/8518.8=0.00136

  1. Сложность программы

S=1/L=1/0.00136=735,294

  1. Оценка уровня программы

L^=2/ ŋ1 * ŋ2/N2=2/74*100/719=0.00376

  1. Информационное (интеллектуальное) содержание программы

I=2ŋ2 1N2 *(N1 +N2) log2 1+ ŋ2) = 2 * 74 / 100 * 719 * ( 719 + +426)log2174=32.030688

  1. Работа по программированию

E=Nlog2 ŋ/L = V2 /V*=8518.82/11,6=6256030,469

  1. Время программирования

Tпр=E/S = 6256030,469/735,294=8508,203

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

λ= V**L=11,6*0.00136=0,015776

  1. Ожидаемое число ошибок

B=E/E0*k=2,8396

Метрические характеристики (по Холстеду)

Сводная таблица

Паскаль

Си

Ассемблер

Расчетное

Программное

Расчетное

Программное

Расчетное

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

Число простых операторов

29

27

32

29

74

Число простых операндов

46

47

42

43

100

Общее число всех операторов

239

220

280

257

719

Общее число всех операндов

185

180

186

188

426

Число вхождений j-го оператора

-

-

-

-

-

Число вхождений j-го операнда

-

-

-

-

-

Словарь программы

75

74

74

72

174

Длина программы

424

400

446

445

1145

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

Длина программы

394.57

389.448

368.38

374.211

1122.8

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

2637.28

122.2

453.315

2483.78

19.6515

38.2071

2740.4

122.2

457.122

2745.62

19.6515

38.2071

8518.8

655.875

3690.655

Уровень программы

0.0463

0.00791192

0.04459

0.0071574

0.07699

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

45.097

48.0402

38.63964

43.3094

32.030688

Работа программиста

56916.9

313929

61454.928

383605

110646.0125

Время программирования

2635.386

17440.5

2740.269

21311.4

8521.79876

Уровень языка

2.08962

0.155481

1.72302

0.140654

50.495846

Ожидаемое число ошибок

0.006

1.53969

0.006

1.75982

0.00012

34

Соседние файлы в папке Sissy_Metr