Отладка блочной структуры программы
Визуальный контроль корректности программы:
- Учитывая, что типом в списке формальных параметров может быть только стандартный или ранее объявленный тип то в разделе описания типов заранее был определен тип одномерного и двумерного массивов. Переменные были описаны в соответствии с внешней спецификацией программы. Формальные переменные процедур были описаны в соответствии с внутренней спецификацией подпрограмм, исключая нетипизированные переменные, типы которых были описаны в самих процедурах.
- 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.