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

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

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

Лабораторная работа № 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

If then

1

2

:=

20

3

for to do

10

4

Writeln

5

5

get_data(x, y, nrow , ncol);

1

6

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

1

7

write_data();

1

Операнды

Операнд

f1i

1

rmax

3

2

cmax

5

3

ncol

12

4

nrow

11

5

y

8

6

g

5

7

a

3

8

x

9

9

i

21

10

j

9

11

k

14

12

0

1

13

l

9

14

5

2

15

2

4

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

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

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

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

  5. Словарь ŋ=ŋ12=7+15=22

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

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

= 7 * 2.8 + 15 * 3.9= 78.25

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

  1. Объем V=Nэlog2ŋ = 155log222=155*5.24=691.21

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

  3. Граничный объем Vгр=(ŋ 1*log2ŋ 1* 2*log2ŋ 2* ) log2 2* + ŋ 1*)= (3*log23+10*log210) log2(3 + 10) = 140.5040

  4. Уровень программы L=V*/V=48.1/1826.55 = 0.05764

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

  6. Оценка уровня программы L^=2/ ŋ1 * ŋ2/N2=2/7*15/116=0.03694

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

I=2ŋ2 1N2 *(N1 +N2) log2 1+ ŋ2) = 2 * 15 / (7 * 116 ) * ( 39+116)log222

= 119.91

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

  2. Время программирования Tпр =E/S =9932.87/17.34=572.82

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

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

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