Отладка блочной структуры программы

Визуальный контроль корректности программы:

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

Синтаксический контроль корректности программы:

· синтаксический контроль корректности программы осуществлялся за ЭВМ с использованием компиляторов среды программирования TurboPascal7. Также на этой стадии была проведена локализация места ошибок.

Семантический контроль корректности программы

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

7.2 Отладка модульной структуры программы:

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

8. Тестирование:

Для проверки корректности программы использован метод восходящего тестирования.

Для каждой подпрограммы были составлены программы-драйверы:

Драйвер для сегмента 1

назначение контроль данных
Исходные данные выходные данные
на положительный результат 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 1 1 1 1 1 5 5 5 5 5 10
на аномалию 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5
на отрицательный результат 5 5 5 5 5 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 1 1 1 1 1

Program sigment1

type matr=array[1..5,1..6] of real;

massiv=array[1..5] of real;

var a:matr;

b:massiv;

f1,f2:text;

i,j:integer;

procedure nov(var a;n,m:integer;var b);

type ma=array[1..100,1..100] of real;

mas=array[1..10922] of real;

var i,j:integer;

Begin

for i:=1 to n do

begin

mas(b)[i]:=0;

for j:=1 to m do

mas(b)[i]:=mas(b)[i]+ma(a)[i,j];

end;

End;

BEGIN

assign(f1,'vdoh.pas');

assign(f2,'vidoh.pas');

reset(f1);

rewrite(f2);

for i:=1 to 5 do

begin

for j:=1 to 6 do

read(f1,a[i,j]);

readln(f1);

end;

nov(a,5,10,b);

for i:=1 to 5 do

write(f2,b[i],' ');

writeln(f2);

close(f1);

close(f2);

END.

Драйвер для сегмента 2

назначение контроль данных
Исходные данные выходные данные
на положительный результат k=5
на аномалию k=5  
на отрицательный результат k=1

Program sigment2;

Type massiv=array[1..5] of real;

var b:massiv;

f1,f2:text;

i,j,k:integer;

function max(var b;n:integer):integer;

type mas=array[1..10922] of real;

var k,i:integer;

Begin

k:=1;

for i:=2 to n do

if mas(b)[k]<mas(b)[i] then

begin

mas(b)[k]:=mas(b)[i];

k:=i;

end;

max:=k;

End;

BEGIN

assign(f1,'vdoh.pas');

assign(f2,'vidoh.pas');

reset(f1);

rewrite(f2);

for i:=1 to 5 do

read(f1,b[i]);

readln(f1);

max(b,5)

write(f2,k);

close(f1);

close(f2);

END.

Драйвер для сегмента 3

Program sigment3;

назначение контроль данных
Исходные данные выходные данные
на положительный результат l=4
на аномалию l=1  
на отрицательный результат l=5

type massiv=array[1..5] of real;

var b:massiv;

f1,f2:text;

i,j,l:integer;

function min(var b;n:integer):integer;

type mas=array[1..10922] of real;

var l,i:integer;

Begin

l:=1;

for i:=2 to n do

if mas(b)[l]>mas(b)[i] then

begin

mas(b)[l]=mas(b)[i];

l:=i;

end;

min:=l;

End;

BEGIN

assign(f1,'vdoh.pas');

assign(f2,'vidoh.pas');

reset(f1);

rewrite(f2);

for i:=1 to 5 do

read(f1,b[i]);

readln(f1);

min(b,5)

write(f2,l);

close(f1);

close(f2);

END.

Драйвер для сегмента 4

Program sigment4;

назначение контроль данных
Исходные данные выходные данные
на положительный результат l=1 k=5 5 5 5 5 5 3 3 3 3 3 4 4 4 4 4 2 2 2 2 2 1 1 1 1 1
на аномалию l=1 k=5 5 5 5 5 5 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 1 1 1 1 1
на отрицательный результат l=5 k=1 Матрица не изменена

type matr=array[1..5,1..6] of real;

var a:matr;

f1,f2:text;

i,j,k,l:integer;

g,h:real;

procedure verhvniz(var a;n,k,l:integer);

type ma=array[1..100,1..100] of real;

var j:integer;

g, h:real;

Begin

for j:=1 to n do

begin

g:=ma(a)[z,j];

ma(a)[z,j]:=ma(a)[h,j];

ma(a)[h,j]:=g;

end;

End;

BEGIN

assign(f1,'vdoh.pas');

assign(f2,'vidoh.pas');

reset(f1);

rewrite(f2);

for i:=1 to 5 do

begin

for j:=1 to 6 do

read(f1,a[i,j]);

readln(f1);

end;

if (max(b,k)=1) and (min(b,l)=5) then

write(f2,’матрица не изменена’)

else

begin

z:=1

h:=k

verhvniz(a,j,z,h,max(b,i));

z:=5;

h:=L

verhvniz(a,j,z,h,max(b,i));

end;

for i:=1 to 5 do

for j:=1 to 6 do

write(f2,a[i,j],' ');

writeln(f2);

close(f1);

close(f2);

END.

Наши рекомендации