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

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

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

  • Обращение к данным

Значения каждого из индексов у элементов массивов не выходит за границы, указанные в описании массивов.

В функции не было задано начальное значение переменной M.

Ошибки были исправлены.

  • Описание данных

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

Переменных со сходными именами не было.

  • Вычисления

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

Потеря результата при вычислениях значений выражений не возможна.

Деление на нуль невозможно.

Значение переменных выходных данных не может выходить за указанный диапазон.

Величины разных типов не сравниваются.

  • Управление вычислениями

Каждый цикл завершается.

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

  • Межмодульный интерфейс

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

  • Планирование ввода-вывода данных

Задание и размещение значений исходных данных соответствует их описанию в программе.

Была обнаружена орфографическая ошибка в выводимом тексте. А так же не учтены поля выходных данных при их выводе в файл.

оответствует их описанию в программе.

в описании массивов.00000000000000000000000

Синтаксический контроль корректности программ: все базовые управляющие структуры построены и закодированы корректно.

Семантический контроль корректности программ: конструкции языка программирования применены правильно. Порядок ввода-вывода выдержан верно. Лишних переменных нет.

V.Тестирование.

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

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

Драйвер для процедуры SUMST:

Входные данные:

0.0 -12.2 -13.3 14.4 15.5 99.0

16.6 17.7 18.8 19.9 -20.0 -100.0

1.0 1.0 1.0 1.0 1.0 1.0

0.0 0.0 0.0 0.0 0.0 0.0

2.0 2.0 2.0 2.0 2.0 2.0

Program SUMST;

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

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

VAR A:MATRICA;

B:MASSIV;

i,j:integer;

f1,f2: text;

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

Var i,j:integer;

Begin

For j:=1 to 6 do

begin

S1[j]:=0;

For i:=1 to 5 do

S1[j]:=S1[j]+A[i,j]

end

End;

BEGIN

assign(f1,'pr1.pas');

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

SUMST(A,B);

For i:=1 to 6 do

Write(f2,B[i],’ ’);

close(f1);

close(f2)

END.

Выходной протокол:

19.6 8.5 8.5 37.3 -1.5 2

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

Драйвер для функции MST:

Входные данные:

19.6 8.5 8.5 37.3 -1.5 2

Program MST;

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

Var A:MASSIV;

i:integer;

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

Type AXAXA=array[1..10922] of real;

Var i,ms:integer;

M:real;

Begin

M:=AXAXA(S2)[1];

ms:=1;

For i:=1 to D do

If AXAXA(S2)[i]>=M Then

begin

M:=AXAXA(S2)[i];

ms:=i

end;

MST:=ms

End;

BEGIN

assign(f1,'pr2.pas');

assign(f2,'pr3.pas');

reset(f1);

rewrite(f2);

For i:=1 to 6 do

Read(f1,A[i]);

Write(f2,MST(A,6));

Close(f1);

Close(f2)

End.

Выходной протокол:

4

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

Драйвер для процедуры SOZMATR:

Входные данные:

0.0 -12.2 -13.3 14.4 15.5 99.0

16.6 17.7 18.8 19.9 -20.0 -100.0

1.0 1.0 1.0 1.0 1.0 1.0

0.0 0.0 0.0 0.0 0.0 0.0

2.0 2.0 2.0 2.0 2.0 2.0

2

Program SOZMATR;

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

VAR A,B:MATRICA;

i,j,M:integer;

f1,f2:text;

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

Var i,j:integer;

Begin

For j:=1 to N1 do

For i:=1 to 5 do

B1[i,j]:=A[i,j]

End;

BEGIN

assign(f1,'pr4.pas');

assign(f2,'pr5.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,M);

SOZMATR(A,M,B);

For i:=1 to 5 do

begin

For j:=1 to M do

Write(f2,B[i,j]);

Writeln(f2);

end;

close(f1);

close(f2)

END.

Выходной протокол:

0.0 -12.2

16.6 17.7

1.0 1.0

0.0 0.0

2.0 2.0

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

Драйвер для процедуры SOZMAS:

Входные данные:

0.0 -12.2 -13.3 14.4 15.5 99.0

16.6 17.7 18.8 19.9 -20.0 -100.0

1.0 1.0 1.0 1.0 1.0 1.0

0.0 0.0 0.0 0.0 0.0 0.0

2.0 2.0 2.0 2.0 2.0 2.0

3

Program SOZMAS;

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

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

VAR A:MATRICA;

B:MASSIV;

i,j,M:integer;

f1,f2: text;

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

Var i:integer;

Begin

For i:=1 to 5 do

C1[i]:=A[i,N2]

End;

BEGIN

assign(f1,'pr6.pas');

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

Readln(f1,M);

SOZMAS(A,M,B);

For i:=1 to 5 do

Writeln(f2,B[i],’ ’);

Close(f1);

Close(f2)

END.

Выходной протокол:

-13.3 18.8 1.0 0.0 2.0

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

Все подпрограммы протестированы и исправно работают.

Тестирование основной программы было произведено на двух тестах. Чтобы определить достаточное ли количество тестов сделано, реализован метод тестовых счетчиков: в каждый цикл, в каждую ветвь ветвления вставляется «счетчик» - некоторая переменная целого типа. При выполнении программы на некотором тесте значение счетчика увеличивается на единицу при каждом прохождении той ветви, в которую вставлен этот счетчик. Набор тестов должен быть таким, чтобы при реализации всех тестов каждый из счетчиков хотя бы один раз изменил свое значение.

Для вывода значений счетчиков создан дополнительный файл.

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,m1,m2:integer;

f1,f2,f3:text;

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

Var i,j:integer;

m1,m2:integer;

Begin

m1:=0;

m2:=0

For j:=1 to 6 do

begin

m1:=m1+1;

S1[j]:=0;

For i:=1 to 5 do

begin

m2:=m2+1;

S1[j]:=S1[j]+A[i,j]

end

end;

Writeln(f3,m1,’ ’,m2)

End;

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

Type AXAXA=array[1..10922] of real;

Var i,ms:integer;

M:real;

m1,m2:integer;

Begin

M:=AXAXA(S2)[1];

ms:=1;

m1:=0;

m2:=0;

For i:=1 to D do

begin

If AXAXA(S2)[i]>=M Then

begin

m2:=m2+1;

M:=AXAXA(S2)[i];

ms:=i

end;

m1:=m1+1

end;

MST:=ms

writeln(f3,m1,’ ’,m2)

End;

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

Var i,j,m1,m2:integer;

Begin

m1:=0; m2:=0;

For j:=1 to N1 do

begin

m2:=m2+1;

For i:=1 to 5 do

begin

m1:=m1+1;

B1[i,j]:=A[i,j]

end;

end;

writeln(f3,m1,’ ’,m2)

End;

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

Var i,m1:integer;

Begin

m1:=0;

For i:=1 to 5 do

begin

m1:=m1+1;

C1[i]:=A[i,N2]

end

writeln(f3,m1)

End;

BEGIN

assign(f1,'slish.pas');

assign(f2,'mish.pas');

assign(f3,’nda.pas’);

reset(f1);

rewrite(f2);

rewrite(f3);

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);

m1:=0; m2:=0;

If MST(SU,6)>N Then

Begin

m1:=m1+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

m2:=m2+1;

SOZMAS(A,N,C);

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

For i:=1 to 5 do

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

end;

write(f3,m1,’ ’,m2);

close(f1);

close(f2)

END.

ТЕСТ 1. (Положительный результат)

Протокол ввода(slish.pas): Выходной протокол(mish.pas):

0.0 -12.2 -13.3 14.4 15.5 99.0 Результаты

16.6 17.7 18.8 19.9 -20.0 -100.0

1.0 1.0 1.0 1.0 1.0 1.0 {C}: 99.0 -100.0 1.0 0.0 2.0

0.0 0.0 0.0 0.0 0.0 0.0

2.0 2.0 2.0 2.0 2.0 2.0

6

Выходной протокол(nda.pas): Выходной протокол(nda.pas):

6 5 6 5

4 2 4 2

5 5 4

0 1 1 0

ТЕСТ 2. (Положительный результат)

Протокол ввода(slish.pas): Выходной протокол(mish.pas):

0.0 -12.2 -13.3 14.4 15.5 99.0 Результаты

16.6 17.7 18.8 19.9 -20.0 -100.0

1.0 1.0 1.0 1.0 1.0 1.0 {B}:

0.0 0.0 0.0 0.0 0.0 0.0 0.0 -12.2 -13.3 14.4

2.0 2.0 2.0 2.0 2.0 2.0 16.6 17.7 18.8 19.9

3 1.0 1.0 1.0 1.0

0.0 0.0 0.0 0.0

2.0 2.0 2.0 2.0

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

Для тестирования Паскаль-программы модульнуй структуры использовались те же тесты. Ошибки возникли только в правильном написании имени модулей.

VII Рекомендации по использованию программы.

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