Тестирование и отладка программы

Как можно определить и исправить ошибки, допущенные во время программирования?

Тестирование и отладка программы

Подумай

  • Как мы замечаем и исправляем ежедневно допускаемые нами ошибки?
  • Можно ли эти ошибки классифицировать по общим признакам и разделить на группы?

Чем больше опыта у программиста, тем меньше ошибок он допускает. В любой среде программирования есть специальные инструмен-ты, позволяющие провести отладку программы и вовремя исправить ошибки. В среде программирования Lazarus также имеются средства для отладки и исправления программ.

Программисты могут допустить три различных вида ошибок при написании программ:

  1. Синтаксические.
  2. Зависимые от времени.
  3. Алгоритмические ошибки.
Рис. 4.49. Ошибка в программе

Синтаксическая ошибка легко выявляется и исправляется (рис. 4.49).

1. Синтаксическая ошибка

На рис. 4.49 ошибка – пропущено служебное слово Var. Эти ошибки сразу выявляются при компиляции программы. Если ошибку не исправить вовремя, то программа останавливает свою работу.

Рис. 4.50. Сообщение об ошибке

2. Ошибки, зависимые от времени

Еще один вид ошибки – это ошибка во время выполнения программы (run-time errors). Появляется она при запуске или во время

тестирования программы. При наличии этой ошибки на экране появляется следующее сообщение (рис. 4.50).

Причина возникновения этой ошибки заключается в том, что программа пытается прочитать текстовый файл MyFile.txt., которого нет на компьютере. В этом случае нужно остановить программу, выполняя команду “Запуск -> Сбросить отладчик”, и исправить место, где допущена ошибка. Если программу выполнить напрямую в Windows, эта ошибка появится снова. Если вы нажмете кнопку “OK” и запустите программу еще раз, она все равно не будет работать корректно. К такого рода ошибкам можно отнести также ошибки, когда программист не выделяет в памяти место для используемой величины или ошибки, появляющиеся при работе с объектами.

ProcedureTForm1.Button1Click(Sender:
TObject);
var num1, num2, result: integer;
begin
num1:=StrToInt(edit1.text);
num2:=StrToInt(edit2.text);
result:=num1+num2;
edit3.text:=IntToStr(result);
end;

  • 5
  • 125
  • 20
  • 30

ProcedureTForm1.Button1Click(Sender:
TObject);
var num1, num2, result: integer;
begin
num1:=StrToInt(edit1.text);
num2:=StrToInt(edit2.text);
result:=num1+num2;
edit3.text:=IntToStr(result);
end;

  • MainMenu, Button, Memo
  • Edit, Label, Button
  • ListBox, Label,, Memo
  • Edit, ListBox, Label

ProcedureTForm1.Button1Click(Sender:
TObject);
var num1, num2, result: integer;
begin
num1:=StrToInt(edit1.text);
num2:=StrToInt(edit2.text);
result:=num1+num2;
edit3.text:=IntToStr(result);
end;

  • выводит на экран слово "result"
  • переводит строку в дробное число
  • сложение двух чисел
  • переводит строку в целое число

3. Алгоритмические ошибки

Тестирование это ввод в компьютер данных, специально приготовленных для проверки работоспособности программы. Если при тестировании программа выполняет одну часть правильно, а другую неправильно, то ошибка была допущена при составлении алгоритма решения задачи. Например, когда программист, запутавшись, вместо знака «+» ставит «-» или знак «*». Этот вид ошибки во время компиляции не проявляется. Программа запускается правильно. Однако ответы, выданные при тестировании, бывают ошибочными. Для исправления ошибки необходимо пересмотреть код программы и выявить ошибки. Вот этот процесс и называется отладкой программы.

Синтез

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

Рассмотрим ниже простой пример.

Дано двузначное число. Разработайте проект, определяющий, является ли сумма цифр данного числа четной или нечетной.

Формы проекта во время разработки и во время выполнения представлены на рис. 4.51 и 4.52 соответственно.

Код программы, написанной для кнопки «Выполнить».

procedure TForm1.Button1Click(Sender: TObject);
​var
​k:integer;
​begin
​k:=StrToInt(edit1.text);
​if (k mod 10+ k div 10) mod 2 =0 then edit2.text:=('четное число');
​end;

В общем, программа проходит компиляцию и в рабочем состоянии. Но этот код определяет только «четное» число. Для случая, когда число «нечетное», код не отвечает. Это называется алгоритмической ошибкой. Если мы снова остановим программу и добавим строку Else edit2.text:=(‘нечетное число’), то код программы будет исправлен и ответ будет получен и для случая «нечетного числа».

Рис. 4.51. Форма
Рис. 4.52. Выполнение проекта

Анализ

Проанализируйте следующие темы в малых группах:

1. Причины возникновения ошибок при программировании.

2. Какие навыки требуются человеку, занимающийся программировани-ем, чтобы не допускать такие ошибки?

3. Из 3 видов ошибок какая самая сложная для исправления?

Вопросы

1. Объясните, откуда возникают ошибки при программировании?

2. Какие виды ошибок встречаются при написании программ в Lasarus?

3. Что такое синтаксическая ошибка?

4. Что такое алгоритмическая ошибка?

5. Почему мы говорим «тестирование»?

6. Для чего нужно тестирование программы?

7. Какая ошибка относится к ошибке, возникающей во время работы программы?

8. Какие действия мы выполняем, если программа составлена с ошибками?

Выполни

1. Вспомните ошибки, допущенные вами при выполнении проектов на прошлых уроках в программе Lasarus. К каким видам вы отнесли бы эти ошибки? Запишите ответы в тетрадях.

2. Определите сотни, десятки и единицы целого трехзначного числа.

3. Найдите арифметическую и геометрическую середину данных двух чисел.

Оценка

Насколько важны математические знания для написания программы?

Өтінемін күте тұрыңыз