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

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

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

Сперва мной был проведен визуальный контроль корректности программы, в ходе которого были обнаружены и исправлены следующие ошибки:

  • В описании типа вместо знака «=» было поставлено двоеточие;

  • В описании данных были пропущены переменные текстового типа «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

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

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