
- •Московский энергетический институт (Технический университет) Типовое задание по информатике
- •Внешняя спецификация программы
- •Постановка задачи
- •Состав данных
- •3.1 Сегмент 1. Внутренняя спецификация
- •3.2 Сегмент 2. Внутренняя спецификация
- •3.3 Сегмент 3. Внутренняя спецификация
- •5. Отладка программы
- •Отладка программы блочной структуры
- •Тестирование программы модульной структуры
- •7. Рекомендации по использованию программы
5. Отладка программы
Отладка программы блочной структуры
Сперва мной был проведен визуальный контроль корректности программы, в ходе которого были обнаружены и исправлены следующие ошибки:
В описании типа вместо знака «=» было поставлено двоеточие;
В описании данных были пропущены переменные текстового типа «f1» и «f2»;
Был пропущен вывод по образцу 1;
В некоторых строках кода были пропущены «;»;
Функции SredB не был присвоен тип “real”;
В функции neusp отсутствовал end;
После визуального контроля корректности программы мной был проведён синтаксический контроль с помощью, встроенного в оболочку TURBO PASCAL 7.0, компилятора (использовался режим Compile). Компилятор выявил следующие ошибки:
Несовпадение имени функции kolVS3 с её именем в основной программе;
Была допущена орфографическая ошибка в названии типа Boolean
После исправления выявленных ошибок и повторной компиляции, которая была удачной, мной был сделан вывод о первом уровне корректности программы.
Затем было проведено тестирование на тестах, представленных в пункте 1.8.
Мной использовался метод нисходящего тестирования.
Тестирование основной программы:
Все три функции в коде программы были заменены на «заглушки»:
Текст программы с «заглушками»:
program konkurs;
type mas=array[1..5,1..5] of integer;
Var A:mas;
n,bt,i,j:integer;
srb:real;
dv:boolean;
f1,f2:text;
Function SredB(A:mas;n:integer):real;
VAR s:real;
BEGIN
s:=4,5;
SredB:=s;
END;
Function kolVS3(A:mas;n:integer):integer;
VAR bt: integer;
BEGIN
bt:=2;
kolVS3:=bt;
END;
Function neusp(A:mas;n:integer):boolean;
var
dv:boolean;
BEGIN
dv:=false;
neusp:=dv
END;
BEGIN
assign (f1,'input.pas');
assign (f2,'output.pas');
reset(f1);
rewrite(f2);
writeln (F2, 'РЕЗУЛЬТАТ');
for i:=1 to 5 do
begin
for j:=1 to 5 do
read (f1,a[i,j]);
readln(f1);
end;
readln(f1,n);
srb:=SredB(a,n);
bt:=kolVS3(a,n);
dv:=neusp(a,n);
if ((dv=false) and (bt<(n/2)) and (srb>4)) then
writeln(f2,'Группа попадает на конкурс лучших групп')
else
writeln(f2, 'Группа не попадает на конкурс лучших групп');
close (f1);
close (f2);
end.
Тестирование основной программы дало следующие результаты:
№ теста, назначение |
Входные данные (значения функций) |
Результат |
||
SredB |
kolVS3 |
neusp |
||
1. получение положительного результата |
4,5 |
2 |
false
|
Группа попадает на конкурс лучших групп
|
2. получение отрицательного результата (количество троечников больше половины) |
3 |
3 |
true |
Группа не попадает на конкурс лучших групп
|
Тестирование подпрограмм-функций:
Каждая «заглушка» по очереди была заменена на реальный код программы.
Тестирование всех подпрограмм-функций показало корректные результаты (совпадающие с тестами), отсюда следует, что каждая функция работает корректно.
Для проверки алгоритма и структуры программы был применен метод тестовых счётчиков.
Мной были вставлены счетчика в начало и конец алгоритма, на каждую ветвь ветвления в каждый цикл.
Текст программы с счетчиками (текст программы сокращен):
program konkurs;
type mas=array[1..5,1..5] of integer;
Var A:mas;
l1,l2,l3,n,bt,i,j:integer;
srb:real;
dv:boolean;
f1,f2:text;
Function SredB(A:mas;n:integer):real;
.
.
END;
Function kolVS3(A:mas;n:integer):integer;
.
.
END;
Function neusp(A:mas;n:integer):boolean;
.
.
END;
BEGIN
l1:=0;
l2:=0;
l3:=0;
assign (f1,'input.pas');
assign (f2,'output.pas');
reset(f1);
rewrite(f2);
writeln (F2, 'РЕЗУЛЬТАТ');
for i:=1 to 5 do
begin
for j:=1 to 5 do
read (f1,a[i,j]);
readln(f1);
end;
readln(f1,n);
srb:=SredB(a,n);
bt:=kolVS3(a,n);
dv:=neusp(a,n);
if ((dv=false) and (bt<(n/2)) and (srb>4)) then
begin
l1:=l1+1;
writeln(f2,'Группа попадает на конкурс лучших групп')
end
else
begin
l2:=l2+1;
writeln(f2, 'Группа не попадает на конкурс лучших групп');
end;
l3:=l3+1;
writeln (f2, l1, ' ',l2, ' ',l3);
close (f1);
close (f2);
end.
Результаты тестов:
№ теста, назначение |
Входные данные |
Результат |
Показания счётчиков |
|||||
A |
N |
L1 |
L2 |
L3 |
||||
1. получение положительного результата |
3 4 5 4 3 5 5 4 5 5 4 3 3 4 4 4 4 4 5 5 5 5 5 5 4 |
5
|
Группа попадает на конкурс лучших групп
|
1 |
0 |
1 |
||
2. получение отрицательного результата |
3 4 3 4 3 5 5 4 4 5 4 3 3 3 4 4 2 3 3 5 4 4 4 4 4 |
5
|
Группа не попадает на конкурс лучших групп
|
0 |
1 |
1 |
||
|
Суммарное показание счётчиков |
1 |
1 |
2 |
Из суммарного показания счётчиков очевидно, что при выполнении двух тестов выполняется каждая ветвь алгоритма, от сюда следует, что количество тестов подобрано верно.
Так как по результатам нисходящего тестирования были получены корректные результаты, то программе можно присвоить третий уровень корректности.