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

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

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

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

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

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

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

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

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

Группа: 0305

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

2004

Для заданного варианта программы обработки данных, представленной на языке Паскаль, разработать вычислительный алгоритм и варианты программ его реализации на языках программи-рования Си и Ассемблер. Добиться, чтобы программы на Паскале и Си были работоспособны и давали корректные результаты (это потребуется в дальнейшем при проведении с ними измерительных экспериментов). Для получения ассемблерного представления программы можно либо самостоятельно написать код на ассемблере, реализующий заданный алгоритм, либо установить опцию "Code generation/Generate assembler source" при компиляции текста программы, представленной на языке Си. При этом в ассемблерном представлении программы нужно удалить директивы описаний и отладочные директивы, оставив только исполняемые операторы.

Примечание!

******************************************************************

В заданных на Паскале вариантах программ обработки данных важен только вычислительный алгоритм, реализуемый программой. Поэтому для получения более корректных оценок характеристик программ следует учитывать только вычислительные операторы и по возможности исключить операторы, обеспечивающие интерфейс с пользователем и выдачу текстовых сообщений.

В сути алгоритма, реализуемого программой, нужно разобраться достаточно хорошо для возможности внесения в программу модификаций, выполняемых в дальнейшем с целью проведения измерений и улучшения характеристик качества программы.

Для измеряемых версий программ в дальнейшем нужно будет исключить операции ввода данных с клавиатуры и вывода на печать, потребляющие основную долю ресурса времени при выполнении программы. Поэтому можно уже в этой работе предусмотреть соответствующие преобразования исходной программы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для каждой характеристики следует рассчитать как саму харак-теристику, так и ее оценку.

Расчет оценок программ выполнить двумя способами:

1) вручную или с помощью одного из доступных пакетов математических вычислений DERIVE, MATHCAD или MATLAB.

2) с помощью программы автоматизации расчета метрик Холстеда, краткая инструкция по работе с которой приведена в файле usage.rtf (для С- и Паскаль-версий программ).

Для варианта расчета с использованием программы автоматизации желательно провести анализ влияния учета тех или иных групп операторов исследуемой программы на вычисляемые характеристики за счет задания разных ключей запуска.

Результаты расчетов представить в виде таблиц с текстовыми комментариями.

Паскаль

program matr1;

{ pascal program to perform matrix multiplication }

const rmax = 5;

cmax = 5;

type ary = array[1..rmax] of real;

arys = array[1..cmax] of real;

ary2 = array[1..rmax,1..cmax] of real;

ary2s = array[1..cmax,1..cmax] of real;

var y : ary;

g : arys;

x : ary2;

a : ary2s;

nrow,ncol : integer;

procedure get_data(var x: ary2;

var y: ary;

var nrow,ncol: integer);

{ get the values for nrow, ncol, and arrays x,y }

var i,j : integer;

begin

nrow:=2;

ncol:=2;

for i:=1 to nrow do

begin

x[i,1]:=1;

for j:=2 to ncol do

x[i,j]:=i*x[i,j-1];

y[i]:=2*i

end

end; { procedure get_data }

procedure write_data;

{ print out the answers }

var

i,j : integer;

begin

{ClrScr;}

writeln;

writeln(' X Y');

for i:=1 to nrow do

{ LA SUITE DU PROGRAMME}

begin

for j:=1 to ncol do

write(x[i,j]:7:1,' ');

writeln(':',y[i]:7:1)

end;

writeln(' A G');

for i:=1 to ncol do

begin

for j:=1 to ncol do

write(a[i,j]:7:1,' ');

writeln(':',g[i]:7:1)

end

end; { write_data }

procedure square(x: ary2;

y: ary;

var a: ary2s;

var g: arys;

nrow, ncol: integer);

{matrix multiplication routine }

{ a= transpose x times x }

{ g= y times x }

var

i,k,l : integer;

begin { square }

for k:=1 to ncol do

begin

for l:=1 to k do

begin

a[k,l]:=0;

for i:=1 to nrow do

begin

a[k,l]:=a[k,l]+x[i,l]*x[i,k];

if k<>l then a[l,k]:=a[k,l]

end

end; { l-loop }

g[k]:=0;

for i:=1 to nrow do

g[k]:=g[k]+y[i]*x[i,k]

end { k-loop }

end; { square }

begin { MAIN program }

get_data(x, y,nrow , ncol);

square(x ,y ,a ,g ,nrow ,ncol);

write_data

end.

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

Операторы

Оператор

f1j

1

;

44

2

:

46

3

,

34

4

Real

4

5

()

10

6

Const

1

7

=

26

8

Integer

6

9

If then

1

10

:=

20

11

*

4

12

-

1

13

+

2

14

<>

1

15

.

13

16

for to do

10

17

Writeln

5

18

[]

24

Операнды

Операнд

f1i

1

rmax

3

2

cmax

5

3

ary

4

4

arys

3

5

ary2

4

6

ary2s

3

7

array

4

8

ncol

11

9

nrow

10

10

y

9

11

g

7

12

a

10

13

x

11

14

i

22

15

j

9

16

k

14

17

0

1

18

l

9

19

5

2

20

2

4

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

  2. Общее число всех операторов N1= 252

  3. Число простых операндов ŋ 2= 20

  4. Общее число всех операторов N2=155

  5. Словарь ŋ=ŋ12=18+20=38

  6. Опытная (экспериментальная) длина Nэ=N1+N2=252+155=407

  7. Теоретическая длина программы NТ 1log2 ŋ12 log2 ŋ2= 18log218+20log220=

= 18*4.17+20*5.52= 75.05 +86.43 = 161.48

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

  1. Объем V=Nэlog2ŋ =407log238=407*5.24=2135.90

  2. Потенциальный объем V*=Nlog2ŋ =(ŋ 1* 2*)log2 1* + ŋ 2*)=(6 + 7)log2(6 +7)=13*log213=13*3.7=48.1

  3. Граничный объем Vгр=(ŋ 1*log2ŋ 1* 2*log2ŋ 2* )log2 2* + ŋ 1*)= (6*log26 +7*log27)log2(6 + 7) = ( 15.50 + 19.65 ) * 3.7 = 130.05

  4. Уровень программы L=V*/V=48.1/2135.90 = 0,02251

  5. Сложность программы S=1/L=1/0,0043=44.40

  6. Оценка уровня программы L^=2/ ŋ1 * ŋ2/N2=2/18*20/155=0.0143

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

I=2ŋ2 1N2 *(N1 +N2) log2 1+ ŋ2) = 2 * 20 / (18 * 155 ) * ( 252 + +155)log238= 2*20/2790*407*5.24= 2*0.0071*2135.90= 30.62

  1. Работа по программированию E=Nlog2 ŋ/L=V2/V*=2135.90*2135.90/48.1=94845.50

  2. Время программирования Tпр =E/S= 94845.50/44.40=2136.15

  3. Уровень языка программирования λ=V**L=48.1*0,02251=1.0827

  4. Ожидаемое число ошибок B=E/E0*k=

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