Отладка программы модульной структуры:
Как и в отладке программы блочной структуры я начал с визуального контроля, но большая часть ошибок уже была мной исправлена. Я заметил, что перепутал местами служебные слова INTERFACE и IMPLEMENTATION, тем самым допустив синтаксическую ошибку.
Далее я осуществил синтаксический контроль программы, используя тип компиляции make. Компиляция прошла с ошибкой. я забыл исправить синтаксические ошибки, которые по моей невнимательности перешли из блочной структуры в модульную.
Проведя метод нисходящего тестирования, я провел тестирование на наборе подготовленных мною тестов. Для отладки программы модульной структуры был использован тот же набор тестов, что и для программы блочной структуры.
Компиляция прошла успешно – ошибок не выявлено, следовательно, мной достигнут первый уровень корректности программы.
Мною была проверена основная программа, а подпрограммы заменены «заглушками»:
Проверка основной программы:
UNIT OBIVL;
INTERFACE
TYPE MATRICA=array[1..5,1..6] of real;
MASSIV=array[1..6] of real;
VAR A,B:MATRICA;
K:MASSIV;
i,j:integer;
f1,f2:text;
IMPLEMENTATION
BEGIN
assign(f1,’isdan.pas');
assign(f2,'vdan.pas');
reset(f1);
rewrite(f2);
END.
UNIT PART1;
INTERFACE
USES OBIVL;
Procedure NEWMATR(Var A:MATRICA; Var K:MASSIV);
Function STR(Var K:integer):integer;
IMPLEMENTATION
Procedure NEWMATR;
Begin
K[1]:=1; K[2]:=4; K[3]:=0; K[4]:=0; K[5]:=0
End;
Function STR(Var K:integer):integer;
Begin
imax:=1;
STR:=imax
End
END;
Program tipovik_v2_mod;
USES OBIVL,PART1,PART2;
Begin
For i:=1 to 5 do
begin
For j:=1 to 6 do
Read(f1,A[i,j]);
Readln(f1)
end;
Writeln(f2,' ':35,'Результаты');
Writeln(f2);
MASK(A,K);
If STR(K,6)=1 Then
begin
NEWMATR(A,B);
Writeln(f2,' ':20,'SR1=',SR1:6:1,' ':15,'SR2=',SR2:6:1);
end
else
Write(f2,'Наибольшее кол-во эл-тов не в первой строке');
close(f1);
close(f2)
End.
Тестирование главной программы прошло успешно. Далее было проведено тестирование сегментов-процедур (заглушки я заменял текстами соответствующих подпрограмм, пока не были устранены все заглушки).
Результаты полученные в программе на том же наборе тестов не отличаются от результатов которые я посчитал - следовательно все подпрограммы работают корректно.
Я использовал метод структурного тестирования, чтобы убедиться что при данном наборе тестовых данных в тестируемой программе выполняется любой оператор, и при разных тестовых данных проходит все ветвления. Для этого я реализовал метод тестовых счетчиков. Я поместил счетчики на каждую ветвь ветвления, в начало и конец алгоритма.
Program tipovik_v2_mod;
USES OBIVL,PART1,PART2;
VAR sch1,sch2,sch3:integer;
BEGIN
sch1:=0;
sch2:=0;
sch3:=0;
assign(f1,'isdan.pas');
assign(f2,'vdan.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;
Writeln(f2,' ':35,'Результаты');
Writeln(f2);
MASK(A,K);
If STR(K,6)=1 Then
Begin
sch1:= sch1+1;
NEWMATR(A,B);
Writeln(f2,' ':20,'SR1=',SR1:6:1,' ':15,'SR2=',SR2:6:1);
end
else
begin
sch2:= sch2+1;
Write(f2,‘Наибольшее кол-во эл-тов не в первой строке')
end;
sch3:= sch3+3;
writeln(f2);
write(f2,sch1,’ ’,sch2,’ ’,sch3);
close(f1);
close(f2)
End.
Значения счетчиков, полученных при тестировании:
1) 1 0 1
2) 0 1 1
Складываем:
1 1 2
Я узнал значение счетчиков при данном наборе тестов.
Очевидно, что все счетчики изменили свои значения, каждая ветвь ветвления и каждый оператор пройдены.
Достигнут 3-ий уровень корректности программы.
Визуальный контроль корректности программы:
- В программе описаны все переменные и массивы.
- Переменные со сходными именами отсутствуют.
- Вычисления или операнды недопустимых типов отсутствуют.
- Переполнения или потеря результата при вычислении значения невозможна.
- Деление на нуль невозможно.
- Значение переменных исходных данных не выходит за их диапазон.
· При каждом обращении выполнены правила соответствующих параметров.
· Ошибки в водимом тексте отсутствуют.
Синтаксический контроль корректности программы:
- Все базовые управляющие структуры построены и закодированы корректно.
Семантический контроль корректности программы
- В ходе семантического контроля программы не было выявлено никаких отклонений от корректного использования конструкций языка.
- Порядок ввода-вывода выдержан правильно.
- Лишних переменных нет.
Рекомендации по использованию программ
Данная программа не является универсальной. Она выполняет задачу определенного назначения. и не является востребованной в широком кругу пользователей. Пользователю необходимо четко понимать поставленные перед компьютером условия, изучить внешнюю спецификацию, и корректно вводить исходные данные по требуемым формам ввода. При возникновении вопросов по использованию задачи обращаться к создателю программы: Вербило Виталию Аркадьевичу.