Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ИнфТехнКомпТехн

.pdf
Скачиваний:
18
Добавлен:
02.04.2015
Размер:
35.33 Mб
Скачать

19. Тестирование и отладка

Подготовка к работе

1.Изучить по литературе и методическим указаниям:

Способы получения данных состояния программы.

Отладочная печать.

Использование окна отладки «Наблюдатели» (Watches).

Пошаговое выполнение программы в версиях «Пропуск блока» (Step over) и «Трассировка» (Trace into).

Выполнение программы до позиции курсора.

Использование окна «СтопТочки» (Breakpoints).

Использование окна «Стек вызова» (Call stack).

Использование окон «CPU» и «FPU».

Использование опции «Вычислить/Изменить» (Evaluate/Modify).

2.Изучить алгоритм и программу учебной задачи в данной работе.

3.Получить для численного примера набор данных для отладочного контроля.

4.Контрольные вопросы

5.Способы получения данных о состоянии программы.

6.Отладочная печать и ее использование при тестировании программ.

7.Структура и использование окна отладки «Наблюдатели» (Watches).

8.Пошаговое выполнение программы в версии «Пропуск блока» (Step over).

9.Пошаговое выполнение программы в версии «Трассировка» (Trace into).

10.Использование опции прогона программы до позиции курсора.

11.Структура и использование окна «СтопТочки» (Breakpoints)..

12.Структура и использование окна «Стек вызова» Call stack.

13.Назначение и использование окон «CPU» и «FPU».

14.Использование опции «Вычислить/Изменить» (Evaluate/Modify).

Задание к работе

В работе используется учебная программа, которая по паре вводимых чисел c,d в цикле для i=1...10 вычисляет значения пары других параметров a=(c+d)*i, b=(c-d)*i. Функция Ample вычисляет квадратный корень из суммы квадратов целых частей от a,b, и эти значения суммируются в s. По завершении цикла вычисляется среднее арифметическое sm от выходных параметров функции Ample. Функция Ample оформлена в виде подпрограммы. В программе определены метки, задающие точки останова. Варианты задания представлены в табл. 19.1.

Листинг программы: program Prg_16_1;

{$APPTYPE CONSOLE} uses

SysUtils, RusTrans; // Ссылка на модули label

m1,m2,m3,m4,m5,m6; var

a,b,c,d,s,f,sm: real; i: integer;

function Ample(x,y:real):real; var x1,y1,f: real;

begin

m5: x1:=Int(x);

241

m6: y1:=Int(y); Result:=sqrt(x1*x1+y1*y1); end;

begin

writeln(Rus('Введите c,d')); readln(c,d); writeln; s:=0; for i:=1 to 10 do

begin

m1: a:=(c+d)*i; m2: b:=(c-d)*i; m3: f:=Ample(a,b);

m4: s:=s+f; writeln('s[',i,']=',s:8:3); end;

sm:=s/10; writeln; writeln('Resultat=',sm:8:3); readln; end.

 

 

 

Таблица 19.1 - Варианты заданий

 

Переменные

 

 

 

N

для окна

Строки

Выражение для окна «Вычислить/Изменить»

 

«Наблюдатели

останова

 

 

»

 

 

 

 

 

 

 

 

1

 

m1,m2,m3

 

 

2

 

m4,m5,m6

 

 

 

m2,m3,m4

 

 

3

a, b, f c, d, s

 

 

m1,m5,m6

 

 

4

 

a + b a * b

 

a, c, s

m3,m4,m5

 

5

b, d, f a, d, c b,

m1,m2,m6

a - b

 

m4,m5,m6

 

6

a, s c, d, f d, c, a

m1,m2,m3

a / b a + b a * b a – b a / b a + b a * b a – b a / b a * b

 

7

f, d, b s, f, c a, s,

m5,m6,m1

a – b a / b

 

f b, a, s c, d, f s,

m4,m2,m3

 

 

8

d, c a, c, f

m6,m1,m2

 

 

 

m3,m4,m5

 

 

 

 

 

 

9

 

m1,m3,m5

 

 

 

m4,m5,m3

 

 

 

 

 

 

10

 

m2,m1,m6

 

 

 

 

 

 

 

Пример выполнения Задание

Протестировать учебную программу с условиями:

С помощью отладочной печати контролировать массив s[i].

Переменные для окна «Наблюдатели» (Watches) - a,b,s,i.

Точки останова - m1,m2,m4.

Выражение для окна «Вычислить/Изменить» (Evaluate/ Modify) «a+b»

242

Выполнение

1.Создаем консольное приложение.

2.Размещаем в нем код учебной программы.

3.Проверка значений s[i] с помощью отладочной печати. Отладочная печать - вывод значений переменных в окно приложения осуществляется при прогоне программы. Ниже показано окно приложения при прогоне.

4.Командой Инструменты=>Опции отладчика вызвать диалоговое окно, в котором установить флаг «Встроенная отладка». После этого доступны средства тестирования и отладки программ.

5. Командой Вид =>Окна отладки=>Наблюдатели создаем окно «Наблюдатели». В начале оно пустое.

6. Командой Запуск=>Добавить наблюдателя через окно «Свойства наблюдателя» последовательно заносим в него переменные a, b, s, i.

243

После занесения переменных окно «Список наблюдателей» приобретает вид

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

7.Осуществляем проверку программы с помощью пошагового выполнения в версии «Пропуск блока» (Step over). При этом на каждом шаге в редакторе кода указывается

строка кода для исполнения.

Она выделяется цветом и помечается стрелкой зеленого цвета слева от строки кода.

При исполнении шага меняется содержание окна «Список наблюдений».

244

8.Осуществить проверку программы с помощью пошагового выполнения в версии «Трассировка» (Trace into). Все происходит аналогично, но с заходом в подпрограмму.

9.Командой Вид=>Окна отладки=>СтопТочки создаем окно «СтопТочки» (Breakpoints). В начале окно пустое.

10.Задаем в нем точки останова. Для этого командой Запуск=>Добавить СтопТочку=>СтопТочка исходника вызываем окно

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

В редакторе кода точки и строки кода получают цветовое выделение, а в окне «Список СтопТочек» появляются сведения об этих точках.

12.Осуществить проверку программы с использованием точек останова. Для этого использовать команду Запуск. При каждом выполнении осуществляется прогон до следующей точки останова.

13.На любом шаге трассировки командой «Запуск=>Вычислить/Изменить» можно вызвать окно «Вычислить/Изменить» (Evaluate/Modify),

245

В нем ввести в поле «Выражение» формулу и командой Вычислить в поле «Результат» получить вычисленное значение. Если в поле «Выражение» введено имя переменной, то будет доступна команда Изменить, по которой значение, введенное в поле «Новое значение», будет пРисвоено этой переменной.

Выводы по работе

1.Данные о состоянии программы можно получить, используя отладочную печать или отладочные средства ИСР.

2.Чтобы сделать отладочные средства доступными, нужно командой Инструменты=>Опции отладчика вызвать диалоговое окно, в котором установить флаг «Встроенная отладка».

3.Для контроля значений переменных можно использовать окно отладки «Наблюдатели». В нем при каждом останове программы можно наблюдать текущие значения переменных или выражений с их использованием.

4.Для трассировки программы предназначено пошаговое выполнение программы в версиях «Пропустить блок» и «Трассировка». В первом случае подпрограмма исполняется за один шаг, а во втором происходит построчное исполнение кодов подпрограммы.

5.Если есть уверенность в правильности программы до определенной строки, то для ускорения трассировки следует использовать команду Запуск=>Запуск до курсора.

6.Для задания произвольных точек останова используются команда Запуск=>Добавить СтопТочкува=>На строку исходника и окно «СтопТочки».

7.Для контроля вызова подпрограмм используется окно «Стек вызова».

8.Для контроля состояния регистров процессора используются окно «CPU» в котором отображаются 16-ричные коды содержимого регистров процессора и значения флагов, а также окно «FPU», в ко-

9.тором отображаются данные о регистрах сопроцессора, выполняющего команды с плавающей точкой.

10.При каждом останове программы можно, используя команду Запуск=>Вычислить/Изменить, вычислить выражение с текущими значениями переменных, либо присвоить выбранной переменной новое значение.

246

20. Квадратное уравнение

Подготовка к работе

По указанной литературе изучить:

1.Cвойства компонентов Label, Button, Edit, StringGrid.

2.Cобытия onClick, onChange, onCreate.

3.Как создать код обработчика события.

4.Контрольные вопросы

5.События onClick, onCreate.

6.Назначение и свойства компонента кнопка.

7.Назначение и свойства компонент метка.

8.Назначение и свойства Компонента однострочный редактор.

9.Как создать обработчик события onClick.

10.Как создать обработчик события onDblClick.

11.Как создать обработчик события onChange.

12.Подпрограммы. Основные понятия.

Задание

Создать проект “Решение квадратного уравнения”.

Пример выполнения

1.Запустить Delphi.

2.Создать в ней новое приложение.

3.ПРисвоить свойству Caption компонента Form1 значение Решение квадратного уравнения.

4.Сохранить модуль под именем Roots, а проект под именем SQR.

5.Установить на форме компоненты: однострочные редакторы Edit1 - Edit3, метки

Label1 - Label5, кнопки Button1But- ton3 (все со страницы Standard). Компоненты расположить, как это показано на Рис.20.1.

Рисунок 20.1 - Заготовка интерфейса проекта "Решение квадратного уравнения"

6. В Инспекторе объектов задать следующие свойства компонент меток Label:

Name

Label1

Label2

 

 

Label3

Label4

Label5

Caption

*

Уравнение

задается

Коэффициент А

Коэффициент B

Коэффициент C

коэффициентами

 

 

 

 

 

 

 

AutoSize

True

True

 

 

False

False

False

 

 

 

 

247

 

 

 

Top

136

8

 

 

48

48

 

48

 

Left

24

40

 

 

24

136

 

248

 

Height

24

24

 

 

24

24

 

24

 

Width

40

270

 

95

95

 

95

 

Parent Fond

True

False

 

True

 

True

 

True

 

FontName

 

 

 

Arial

 

 

 

 

 

 

 

FontSize

 

 

 

11

 

 

 

 

 

 

 

*Компонент Label1 предназначен для вывода значений корней квадратного уравнения

Ax2+Bx+C=0 или сообщений об ошибках.

 

 

 

 

 

 

 

7. В Инспекторе объектов задать следующие свойства компонент кнопок Button:

 

 

 

Name

 

 

Button1

Button2

 

Button3

 

 

 

 

 

Caption

 

 

Вычислить

Новое

 

Завершить

 

 

 

 

 

Top

 

 

208

208

 

208

 

 

 

 

 

 

Left

 

 

24

136

 

248

 

 

 

 

 

 

Height

 

 

25

25

 

25

 

 

 

 

 

 

Width

 

 

81

81

 

81

 

 

 

8. После вышеперечисленных установок интерфейс проекта примет вид Рис. 20.2.

Рисунок 20.2 - Интерфейс проекта в режиме конструирования

1.Создать обработчик события OnCliсk для кнопки "Вычислить", в котором необходимо описать:

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

процедуру преобразования текста в число для трех коэффициентов уравнения,

код вычисления коэффициентов уравнения, при вводе в соответствующее текстовое поле коэффициентов и вывода полученных корней x1 и x2 в Label1,

сообщения о некорректности задания коэффициентов уравнения при А=0,

сообщения об отсутствия решения, если дискриминант меньше 0.

процедуру преобразования числа в строку при выводе корней уравнения.

2.Создать обработчик событий OnClik для кнопки "Новое". Он должен очищать поля редактирования от первоначальных записей и устанавливать курсор в поле ввода коэффициента при второй степени неизвестного.

3.Создать обработчик событий OnClik для кнопки "Завершить", который завершает работу приложения.

4.Сохранить модуль проекта под именем Prg_19_1_, а проект под именем Prg_19_1.

248

5.Запустить программу командой Run, а затем вести такие коэффициенты квадратного уравнения, чтобы проверить все виды сообщений и вывода корней уравнения.

6.Закрыть проект SQR, а затем запустить его из среды Windows и проверить на его работоспособность.

Пример выполнения Код модуля проекта: unit Unit1 interface uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;

type

TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit;

Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel;

var end;

Label5: TLabel;

procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private

{Private declarations } public

{Public declarations } Form1: TForm1; implementation

{$R *.DFM}

// обработчик события OnCliсk для кнопки "Вычислить" procedure TForm1.Button1Click(Sender: TObject);

var a,b,c:real;

// коэффициенты уравнения d:real;

// дискриминант x1,x2:real;

// корни уравнения code:integer;

// для преобразования текста в число st1,st2:string[10];

begin // ввод исходных данных из полей редактирования val(Edit1.text,a,code);

// преобразование текста в число val(Edit2.text,b,code); val(Edit3.text,c,code); if a=0

then Label1.caption:='Коэффициенты при второй степени'+chr(13)+'неизвестного равен нулю!';

else

begin // решение уравнения d:=b*b-4*a*c;

if d<0

then Label1.caption:='Дискриминант < 0' +chr(13)+'Уравнение не имеет корней'

else

249

begin

 

 

 

 

x1:=(-b+sqrt(d))/(2*a);

 

 

 

x2:=(-b-sqrt(d))/(2*a);

в переменные str1, str2 помещаются

str(x1:10:5,st1);

//

str(x2:10:5,st2);

//

строковые

изображения

корней

Label1.Caption:='Корни

уравнения:'+

chr(13)+'x1='+st1+

chr(13)+'x2='+st2;

 

 

 

 

end;

 

 

 

 

end;end;

 

 

 

 

//обработчик событий OnClik для кнопки "Новое" procedure TForm1.Button2Click(Sender: TObject); begin

Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Label1.Caption:='';

Edit1.SetFocus;

end;

//обработчик событий OnClik для кнопки "Завершить"

procedure TForm1.Button3Click(Sender: TObject); begin

Close;

end;

end.

На Рис. 20.3 приведен вид окна работающего приложения после ввода коэффициентов и вычислений.

Рисунок 20.3 - Вид окна работающего приложения

Выводы

1.Для управления используются компоненты Button (кнопка) и их обработчики событий.

2.Для пояснений используются компоненты Label (метка).

3.Для ввода данных используются компоненты Edit (однострочный редактор).

4.Кнопка “Выход” дублирует стандартную кнопку завершения приложения Windows.

250