Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Модуль 3. Отладка.





3.1. Виды ошибок.

Ошибки анализа.
Связаны либо с неполным учетом ситуации, которые могут возникнуть, либо с неверным решением задачи.
К 1 случаю относятся, например, пренебрежение возможностью появления отрицательных значений переменных, малых и больших величин.
Во 2 случае обычно имеют место крупные и мелкие логические ошибки, из которых можно назвать:

  1. Отсутствие заданий начальных значений переменных.
  2. Неверные условия окончания цикла.
  3. Неверную индексацию цикла.
  4. Отсутствие задания условий инициирования цикла.
  5. Неправильное указание ветви алгоритма для продолжения процесса решения задачи.

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

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

Ошибки физического характера.
Можно назвать несколько типов ошибок, вызываемых неверными действиями программиста:

  1. Пропуск некоторых операторов.
  2. Отсутствие необходимых данных.
  3. Непредусмотренные данные.
  4. Неверный формат данных.

Большое значение для успешной отладки программы имеют простота и рациональность ее кодирования.
Когда программа написана аккуратно и логично, легче избежать ошибок или выявить их в случае возникновения.
Следует избегать возможных программистских трюков, т.к. чем их больше, тем труднее отладка программы для самого автора, а кто-то другой этого сделать просто не сможет.

Правильность программ.
Любые программы - правильные в отношении их логического построения только для определенного типа данных, поэтому необходимо четко определить область значений данных, в которой программа способна функционировать. Необходимо вводить операторы, позволяющие проверить, находятся ли данные в установленных границах.
Нарушение правильности может проявляться двумя способами:

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

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

Синтаксические ошибки.
Выявление транслятором синтаксических ошибок представляет собой самый важный и необходимый этап отладки программы.
Если под синтаксической ошибкой понимать "всякое нарушение требований языка программирования", то следует признать, что многие ошибки остаются необнаруженными.
В качестве примеров синтаксических ошибок можно назвать:

  • пропуск необходимого знака пунктуации
  • несогласованность скобок
  • пропуск нужных скобок
  • неправильное формирование оператора
  • неверное образование имени переменной
  • неправильное использование арифметических операторов
  • неверное написание зарезервированных слов

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

  1. Противоречивые команды.
  2. Отсутствие условий окончания цикла.
  3. Дублирование или отсутствие меток.
  4. Отсутствие описания массива.
  5. Запрещенный переход.

Советы по устранению ошибок:

  1. Если ошибок много, то в первую очередь устранить очевидные.
  2. Обратиться к руководству по программированию на данном языке (справка).
  3. Выбрать хороший отладочный компилятор.

Неопределенные переменные.
Распространенными источниками программных ошибок являются неопределенные переменные и переменные, для которых не заданы начальные значения.
Определение начальных значений:

  1. Присваивание.
  2. Ввод.
  3. Чтение из файла.

Разные прогоны программы с одними и теми же данными могут привести к различным результатам.


3.2. Обнаружение ошибок.

Ситуации, по которым мы определяем, что в программе есть ошибка:

  1. Отсутствует уверенность в том, что программа начала выполняться.
  2. Программа начала выполняться, но произошел преждевременный останов с выдачей или без выдачи сообщений о системной ошибке.
  3. Программа начала выполняться, но зациклилась.
  4. Программа выдала неправильную информацию.

Любая из этих ситуаций требует от программиста проверки последовательности выполнения команд. Обычно для этого пригодна трассировка.
Процесс обнаружения ошибок характеризуется выявлением двух мест в программе:

  • точки обнаружения
  • точки происхождения

Точка обнаружения - место в программе, где ошибка себя проявляет или становится очевидной.
Точка происхождения - место в программе, где возникают условия для появления ошибки.
Точка обнаружения выявляется первой и служит отправным пунктом для поиска точки происхождения.
Действительная ошибка исходит не из точки обнаружения, а из точки происхождения.
Виды отладки. Защитное программирование.
Отладка начинается с того момента, когда перестают выдаваться сообщения о синтаксических ошибках. Вначале процесса отладки надо использовать простые тестовые данные. Если при этом получаются верные результаты, следует переходить к тестированию программы на более сложных данных. Если результаты не верны, возможны следующие ситуации:

  1. Синтаксических ошибок нет, но программа не скомпилирована. Подобные ситуации встречаются редко и свидетельствуют о наличии какой-то принципиальной ошибке в программе. В этих случаях обычно появляется сообщение о тех или иных системных ошибках, которые можно использовать в качестве вспомогательного средства для выявления имеющихся ошибок.
  2. Программа скомпилирована, работает, но не выдает результатов. Такие неполадки вызываются какими-либо логическими или синтаксическими ошибками. Примером ошибки служит ситуация, когда программа начинает работу и сразу уходит на ветвь окончания выполнения задания, не выдав результатов. Системная ошибка имеет своей первоосновой некоторую программную ошибку, которая заставляет ОС прервать процесс выполнения программы. Сигнал прерывания может исходить от оборудования самой ОС или скомпилированной программы.
  3. Программа скомпилирована, работает, но происходит преждевременный останов. Ошибки, приводящие к преждевременному прекращению работы и сопровождаемые затем сообщением о системной ошибке, называют "взрывами " или "воронками".
  4. Программа скомпилирована, работает, но выдает неправильные результаты. Достижение этой стадии говорит, что программа в принципе работает правильно, а ее логика работает почти точно.
  5. Программа зациклилась. На этом этапе отладки необходимо произвести разбор циклов.

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


3.3. Методы отладки.

Методы отладки можно разделить на методы "грубой силы" и методы, основанные на обдумывании.
Методы "грубой силы" не являются самыми эффективными, но очень популярны, т.к. не требуют значительного внимания и больших умственных затрат. К ним относятся:

  1. Отладка в соответствии с общим предложением "расставить операторы печати по всей программе"
    Недостатки:
    • расстановка операторов печати заставляет программиста работать методом проб и ошибок
    • в процессе отладки придется протестировать большое число данных
    • требуется изменять программу при отладке. Эти изменения могут скрыть ошибку или внести новую
    • стоимость использования методов данной категории для больших программ или систем может быть слишком высокой
  2. Отладка с использованием автоматических средств
    Достоинства:
    • не нужно вносить изменения в программу

Общей проблемой метода "грубой силы" является то, что они игнорируют процесс обнаружения, с помощью которого быстрее и точнее находят ошибки. Использование данного метода рекомендуется только в том случае, если все остальные методы не дали желательного эффекта или в дополнение к процессам, основанным на обдумывании.
Методы, основанные на обдумывании:

  1. Метод индукции.
    Индукция - это анализ от частного к целому. Просматривая симптомы ошибки, установленные одним или несколькими тестами и взаимосвязи между ними, можно обнаружить причину ошибки.
  2. Метод дедукции.
    Данный метод позволяет на основе некоторых общих теорий или предпосылок, используя операторы исключения или уточнения, прийти к определенному заключению (обнаружить место ошибки). Чтобы сделать заключение мы должны просмотреть всю имеющуюся в нашем распоряжении информацию: все результаты всех тестов обо всех ошибках. Выдвинутые гипотезы поочередно исключаются из рассмотрения.
  3. Прослеживание логики в обратном порядке.
    Метод локализации для небольших ошибок. Отладка начинается в точке программы, где был обнаружен некоторый результат. Для этой точки на основании полученного результата следует установить, какими должны быть значения переменных. Мысленно выполняя из данной точки программы в обратном порядке и опять рассуждая примерно так: "Если бы в этой точке состояние программы было таким, то в другой точке должно быть следующее состояние", можно достаточно быстро и точно локализовать ошибку, т.е. найти место в программе между точкой, где состояние программы соответствовало ожидаемому и точкой, в которой состояние программы отличалось от ожидаемого.

Автоматизированные средства отладки программ.
В составе Borland Pascal есть интегрированный отладчик, который имеет 3 основных меню: Run, Debug, Options.
С помощью отладчика можно использовать следующие средства:

  1. Трассировку программ
  2. Просмотр изменения значений контролируемых переменных и выражений в процессе трассировки
  3. Модификацию значений переменных для тестирования программы
  4. Просмотр значений фактических параметров, вызванных подпрограмм
  5. Работу с точками прерывания.
  6. Просмотр выходной информации

После настройки отладчика надо задать выражения, в том числе, имена переменных, значения которых необходимо контролировать с помощью окна просмотра. Затем трассировать, т.е. выполнять программу поэтапно и при каждом останове программы проверять текущие значения заданных выражений и результаты работы программы в одном из окон.
Использование функциональных клавиш.
Начало трассировки:
F4 - выполнение программы до строки, в которой установлен курсор.
F7 - построчное выполнение подпрограмм.
F8 - построчное выполнение программы с выполнением подпрограмм от одного нажатия клавиши F8.
Выполнение программы по частям по каждой команде Ctrl+F9 до строки, в которой установлена очередная контрольная точка.
Выйти из отладочного режима трассировки программы можно с помощью клавиш Ctrl+F2.
Установка и просмотр текущих значений.
Чтобы задать (добавить или удалить) выражения можно использовать:

  1. Команду Debug/Add Watch (Ctrl+F7)
  2. При активном окне Watches можно использовать клавиши Insert для добавления выражения и Del - для удаления.

Чтобы вывести значения всех элементов массива, надо указать только имя массива. Если массив большой, тогда можно указать для наблюдения только часть массива:
имя_массива [n], m ,где n - индекс первого элемента массива, который надо увидеть, m - количество элементов.

Пример:
A[10], 5 - начиная с 10-го выведет 5 элементов

Изменение переменных в процессе выполнения программы.
По команде Debug/Evaluate/Modify (Ctrl+F4) на экране разворачивается дополнительное окно, содержащее три поля и 4 кнопки. Чтобы изменить значение переменной надо перейти в окно New Value и внести исправления, затем нажать кнопку Modify. В поле Result появится новое значение переменной. Модифицировать можно только значения переменных.
В окно Expression можно ввести имя любой переменной программы или любое допустимое выражение, которое надо вычислить. Выражение строится в соответствии с синтаксисом языка Pascal.
Работа с процедурами и функциями.
При каждом вызове подпрограммы Pascal запоминает вызов и передаваемые подпрограммой фактические параметры в стеке вызова. Каждый раз во время очередного останова программы, при ее трассировке, можно запросить текущий стек вызова с помощью команды Debug/Call Stack (Ctrl+F3).
Задать/отключить точку останова - Ctrl+F8.


Поделиться:

Дата добавления: 2015-04-11; просмотров: 284; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты