Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
типовик Саши.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
237.57 Кб
Скачать

IV Отладка программ:

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

Сначала я провела визуальный контроль корректности программы. Был обнаружен и исправлен ряд ошибок, таких как наличие ненужного знака присваивания (:=) при описании типов, отсутствие описания текстовых файлов, совпадения имени массива SU и процедуры общего назначения SUMST, отсутствие задания начального значения переменной M в описании функции, отсутствие учета поля выходных данных при их выводе в файл, описание лишней переменной, не использовавшейся в программе, отсутствие служебного слова Var перед описанием формальных параметров-массивов и перед описанием выходных формальных параметров-переменных. Остальная часть ошибок была связана с отсутствием ‘;’ в конце строк или, наоборот, присутствием их в ненужных местах.

Затем мной был проведен синтаксический контроль корректности программы с помощью компиляции (используется режим компилятора Compile). Компилятор ошибок не выявил, что позволило говорить о 1-ом уровне корректности.

Далее я провела тестирование на ранее подготовленных тестах. Использовала метод нисходящего тестирования, поскольку метод восходящего тестирования имеет существенный недостаток – проверка программы начинается с тестирования сегментов-процедур.

Проверка основной программы.

Все 4 подпрограммы я заменила «заглушками»:

PROGRAM tipovichok;

TYPE MATRICA=array[1..5,1..6] of real;

MASSIV=array[1..6] of real;

VAR A,B:MATRICA;

C,SU:MASSIV;

N,i,j:integer;

f1,f2:text;

Procedure SUMST(Var A:MATRICA; Var S1:MASSIV);

Begin

S1[1]:=19.6; S1[2]:=8.5; S1[3]:=8.5; S1[4]:=37.3; S1[5]:=-1.5; S1[6]:=2

End;

Function MST(Var S2;D:integer):integer;

Var ms:integer;

Begin

ms:=4;

MST:=ms

End;

Procedure SOZMATR(Var A:MATRICA;N1:integer;Var B1:MATRICA);

Begin

B1[1,1]:=0.0; B1[1,2]:=-12.2; B1[1,3]:=-13.3; B1[1,4]:=14.4;

B1[2,1]:=16.6; B1[2,2]:=17.7; B1[2,3]:=18.8; B1[2,4]:=19.9;

B1[3,1]:=1.0; B1[3,2]:=1.0; B1[3,3]:=1.0; B1[3,4]:=1.0;

B1[4,1]:=0.0; B1[4,2]:=0.0; B1[4,3]:=0.0; B1[4,4]:=0.0;

B1[5,1]:=2.0; B1[5,2]:=2.0; B1[5,3]:=2.0; B1[5,4]:=2.0

End;

Procedure SOZMAS(Var A:MATRICA;N2:integer;Var C1:MASSIV);

Begin

C[1]:=99.0; C[2]:=-100.0; C[3]:=1.0; C[4]:=0.0; C[5]:=2.0

End;

BEGIN

assign(f1,'slish.pas');

assign(f2,'mish.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;

Read(f1,N);

Writeln(f2,' ':35,'Результаты');

Writeln(f2);

SUMST(A,SU);

If MST(SU,6)>N Then

begin

SOZMATR(A,MST(SU,6),B);

Writeln(f2,' ':13,'{B}:');

For i:=1 to 5 do

begin

Write(f2,' ':10);

For j:=1 to MST(SU,6) do

write(f2,B[i,j]:6:1,' ');

Writeln(f2)

end;

end

Else

begin

SOZMAS(A,N,C);

Write(f2,' ':10,'{C}: ');

For i:=1 to 5 do

Write(f2,C[i]:6:1,' ')

end;

close(f1);

close(f2)

END.

Тестирование основной программы на разработанном мной наборе тестов дало корректные результаты.

Далее я провела тестирование сегментов-процедур. При этом заменяла каждую «заглушку» по одной реальными текстами подпрограмм.

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

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

Счетчики были вставлены:

  • в начало и конец алгоритма

  • в каждую ветвь ветвления

Ниже следует текст программы со вставленными счетчиками. Все операторы, появившиеся в связи с использованием метода счетчиков выделены полужирным шрифтом. Текст описания подпрограмм сокращен.

PROGRAM tipovichok;

TYPE MATRICA=array[1..5,1..6] of real;

MASSIV=array[1..6] of real;

VAR A,B:MATRICA;

C,SU:MASSIV;

N,i,j,t1,t2,t3:integer;

f1,f2:text;

Procedure SUMST(Var A:MATRICA;Var S1:MASSIV);

.

.

.

End;

Function MST(Var S2;D:integer):integer;

.

.

.

End;

Procedure SOZMATR(Var A:MATRICA;N1:integer;Var B1:MATRICA);

.

.

.

End;

Procedure SOZMAS(Var A:MATRICA;N2:integer;Var C1:MASSIV);

.

.

.

End;

BEGIN

t1:=0;

t2:=0;

t3:=0;

assign(f1,'slish.pas');

assign(f2,'mish.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;

Read(f1,N);

Writeln(f2,' ':35,'Результаты');

Writeln(f2);

SUMST(A,SU);

If MST(SU,6)>N Then

begin

t1:=t1+1;

SOZMATR(A,MST(SU,6),B);

Writeln(f2,' ':13,'{B}:');

For i:=1 to 5 do

begin

Write(f2,' ':10);

For j:=1 to MST(SU,6) do

write(f2,B[i,j]:6:1,' ');

Writeln(f2)

end;

end

Else

begin

t2:=t2+1;

SOZMAS(A,N,C);

Write(f2,' ':10,'{C}: ');

For i:=1 to 5 do

Write(f2,C[i]:6:1,' ')

end;

t3:=t3+1;

writeln(f2);

write(f2,t1,’ ’,t2,’ ’,t3);

close(f1);

close(f2)

END.

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

Тест1: 1 1 0

+

Т ест2: 1 0 1

2 1 1

Из суммарных показаний счетчиков следует, что при данном наборе тестов выполняется каждый оператор и каждая ветвь ветвления, следовательно количество тестов в наборе подобрано верно.

Поскольку на разработанном мной наборе тестов были получены корректные результаты, можно говорить о третьем уровне корректности программы.

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

Сначала был проведен визуальный контроль корректности программы. Поскольку основная часть ошибок исправлена при отладке блочной структуры программы, то выявились ошибки, связанные с построением структуры модуля : в модуле A1 отсутствовал “END.”, в модуле B1 не было прописано использование модуля OBIVL; также в основной программе отсутствовали операторы закрытия текстовых файлов ( close(f1), close(f2) ).

Затем мной был проведен синтаксический контроль корректности программы с помощью компиляции (использован режим компилятора build, поскольку он проводит компиляцию каждого модуля и гарантирует учет всех изменений исходных pas-файлов). Компилятор ошибок не выявил, что позвонило говорить о 1-ом уровне корректности.

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

Проверка основной программы.

Все 4 подпрограммы я заменила «заглушками». В модуле OBIVL нет описания процедур и функций, поэтому «заглушками» заменять там нечего.

UNIT A1;

INTERFACE

USES OBIVL;

Procedure SUMST(Var A:MATRICA;Var S1:MASSIV);

Function MST(Var S2;D:integer):integer;

IMPLEMENTATION

Procedure SUMST;

Begin

S1[1]:=19.6; S1[2]:=8.5; S1[3]:=8.5; S1[4]:=37.3; S1[5]:=-1.5; S1[6]:=2

End;

Function MST;

Var ms:integer;

Begin

ms:=4;

MST:=ms

End;

END.

UNIT B1;

INTERFACE

USES OBIVL;

Procedure SOZMATR(Var A:MATRICA;N1:integer;Var B1:MATRICA);

Procedure SOZMAS(Var A:MATRICA;N2:integer;Var C1:MASSIV);

IMPLEMENTATION

Procedure SOZMATR;

Begin

B1[1,1]:=0.0; B1[1,2]:=-12.2; B1[1,3]:=-13.3; B1[1,4]:=14.4;

B1[2,1]:=16.6; B1[2,2]:=17.7; B1[2,3]:=18.8; B1[2,4]:=19.9;

B1[3,1]:=1.0; B1[3,2]:=1.0; B1[3,3]:=1.0; B1[3,4]:=1.0;

B1[4,1]:=0.0; B1[4,2]:=0.0; B1[4,3]:=0.0; B1[4,4]:=0.0;

B1[5,1]:=2.0; B1[5,2]:=2.0; B1[5,3]:=2.0; B1[5,4]:=2.0

End;

Procedure SOZMAS;

Begin

C[1]:=99.0; C[2]:=-100.0; C[3]:=1.0; C[4]:=0.0; C[5]:=2.0

End;

END.

Program tipovichok_mod;

USES OBIVL,A1,B1;

Begin

For i:=1 to 5 do

begin

For j:=1 to 6 do

Read(f1,A[i,j]);

Readln(f1);

end;

Read(f1,N);

Writeln(f2,' ':35,'Результаты');

Writeln(f2);

SUMST(A,SU);

If MST(SU,6)>N Then

begin

SOZMATR(A,MST(SU,6),B);

Writeln(f2,' ':13,'{B}:');

For i:=1 to 5 do

begin

Write(f2,' ':10);

For j:=1 to MST(SU,6) do

write(f2,B[i,j]:6:1,' ');

Writeln(f2)

end;

end

Else

begin

SOZMAS(A,N,C);

Write(f2,' ':10,'{C}: ');

For i:=1 to 5 do

Write(f2,C[i]:6:1,' ')

end;

close(f1);

close(f2)

end.

Тестирование основной программы на разработанном мной наборе тестов дало корректные результаты.

Далее я провела тестирование сегментов-процедур. При этом заменяла каждую «заглушку» по одной реальными текстами подпрограмм.

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

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

Счетчики были вставлены:

  • в начало и конец алгоритма

  • в каждую ветвь ветвления

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

Program tipovichok_mod;

USES OBIVL,A1,B1;

Var t1,t2,t3:integer;

BEGIN

t1:=0;

t2:=0;

t3:=0;

assign(f1,'slish.pas');

assign(f2,'mish.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;

Read(f1,N);

Writeln(f2,' ':35,'Результаты');

Writeln(f2);

SUMST(A,SU);

If MST(SU,6)>N Then

begin

t1:=t1+1;

SOZMATR(A,MST(SU,6),B);

Writeln(f2,' ':13,'{B}:');

For i:=1 to 5 do

begin

Write(f2,' ':10);

For j:=1 to MST(SU,6) do

write(f2,B[i,j]:6:1,' ');

Writeln(f2)

end;

end

Else

begin

t2:=t2+1;

SOZMAS(A,N,C);

Write(f2,' ':10,'{C}: ');

For i:=1 to 5 do

Write(f2,C[i]:6:1,' ')

end;

t3:=t3+1;

writeln(f2);

write(f2,t1,’ ’,t2,’ ’,t3);

close(f1);

close(f2)

END.

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

Тест1: 1 1 0

+

Т ест2: 1 0 1

2 1 1

Из суммарных показаний счетчиков следует, что при данном наборе тестов выполняется каждый оператор и каждая ветвь ветвления, следовательно количество тестов в наборе подобрано верно.

Поскольку на разработанном мной наборе тестов были получены корректные результаты, можно говорить о третьем уровне корректности программы.