ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 20.11.2019
Просмотров: 9469
Скачиваний: 184
измерения
формальных
и
фактических
параметров
,
нарушение
области
действия
локальных
и
глобальных
переменных
;
другие
ошибки
кодирования
,
например
,
неправильная
реализация
логики
программы
при
кодировании
,
игнорирование
особенностей
или
ограничений
конкретного
языка
программирования
.
Н
а
к
о
п
л
е
н
и
е
п
о
г
р
е
ш
н
о
с
т
е
й
результатов
числовых
вычислений
возникает
,
например
,
при
некорректном
отбрасывании
дробных
цифр
чисел
,
некорректном
использовании
приближенных
методов
вычислений
,
игнорировании
ограничения
разрядной
сетки
представления
вещественных
чисел
в
ЭВМ
и
т
.
п
.
Все
указанные
выше
причины
возникновения
ошибок
следует
иметь
в
виду
в
процессе
отладки
.
Кроме
того
,
сложность
отладки
увеличивается
также
вследствие
влияния
следующих
факторов
:
опосредованного
проявления
ошибок
;
возможности
взаимовлияния
ошибок
;
возможности
получения
внешне
одинаковых
проявлений
разных
ошибок
;
отсутствия
повторяемости
проявлений
некоторых
ошибок
от
запуска
к
запуску
–
так
называемые
стохастические
ошибки
;
возможности
устранения
внешних
проявлений
ошибок
в
исследуемой
ситуации
при
внесении
некоторых
изменений
в
программу
,
например
,
при
включении
в
программу
диагностических
фрагментов
может
аннулироваться
или
измениться
внешнее
проявление
ошибок
;
написания
отдельных
частей
программы
разными
программистами
.
10.2.
Методы
отладки
программного
обеспечения
Отладка
программы
в
любом
случае
предполагает
обдумывание
и
логическое
осмысление
всей
имеющейся
информации
об
ошибке
.
Большинство
ошибок
можно
обнаружить
по
косвенным
признакам
посредством
тщательного
анализа
текстов
программ
и
результатов
тестирования
без
получения
дополнительной
информации
.
При
этом
используют
различные
методы
:
ручного
тестирования
;
индукции
;
дедукции
;
обратного
прослеживания
.
Метод
ручного
тестирования
.
Это
-
самый
простой
и
естественный
способ
данной
группы
.
При
обнаружении
ошибки
необходимо
выполнить
тестируемую
программу
вручную
,
используя
тестовый
набор
,
при
работе
с
которым
была
обнаружена
ошибка
.
Метод
очень
эффективен
,
но
не
применим
для
больших
программ
,
программ
со
сложными
вычислениями
и
в
тех
случаях
,
когда
ошибка
связана
с
неверным
представлением
программиста
о
выполнении
некоторых
операций
.
Данный
метод
часто
используют
как
составную
часть
других
методов
отладки
.
Метод
индукции
.
Метод
основан
на
тщательном
анализе
симптомов
ошибки
,
которые
могут
проявляться
как
неверные
результаты
вычислений
или
как
сообщение
об
ошибке
.
Если
компьютер
просто
«
зависает
»,
то
фрагмент
проявления
ошибки
вычисляют
,
исходя
из
последних
полученных
результатов
и
действий
пользователя
.
Полученную
таким
образом
информацию
организуют
и
тщательно
изучают
,
просматривая
соответствующий
фрагмент
программы
.
В
результате
этих
действий
выдвигают
гипотезы
об
ошибках
,
каждую
из
которых
проверяют
.
Если
гипотеза
верна
,
то
детализируют
информацию
об
ошибке
,
иначе
-
выдвигают
другую
гипотезу
.
Последовательность
выполнения
отладки
методом
индукции
показана
на
рис
. 10.3
в
виде
схемы
алгоритма
.
Самый
ответственный
этап
-
выявление
симптомов
ошибки
.
Организуя
данные
об
ошибке
,
целесообразно
записать
все
,
что
известно
о
ее
проявлениях
,
причем
фиксируют
,
как
ситуации
,
в
которых
фрагмент
с
ошибкой
выполняется
нормально
,
так
и
ситуации
,
в
которых
ошибка
проявляется
.
Если
в
результате
изучения
данных
никаких
гипотез
не
появляется
,
то
необходима
дополнительная
информация
об
ошибке
.
Дополнительную
информацию
можно
получить
,
например
,
в
результате
выполнения
схожих
тестов
.
В
процессе
доказательства
пытаются
выяснить
,
все
ли
проявления
ошибки
объясняет
данная
гипотеза
,
если
не
все
,
то
либо
гипотеза
не
верна
,
либо
ошибок
несколько
.
Метод
дедукции
.
По
методу
дедукции
вначале
формируют
множество
причин
,
которые
могли
бы
вызвать
данное
проявление
ошибки
.
Затем
анализируя
причины
,
исключают
те
,
которые
противоречат
имеющимся
данным
.
Если
все
причины
исключены
,
то
следует
выполнить
дополнительное
тестирование
исследуемого
фрагмента
.
В
противном
случае
наиболее
вероятную
гипотезу
пытаются
доказать
.
Если
гипотеза
объясняет
полученные
признаки
ошибки
,
то
ошибка
найдена
,
иначе
-
проверяют
следующую
причину
(
рис
. 10.4).
Метод
обратного
прослеживания
.
Для
небольших
программ
эффективно
применение
метода
обратного
прослеживания
.
Начинают
с
точки
вывода
неправильного
результата
.
Для
этой
точки
строится
гипотеза
о
значениях
основных
переменных
,
которые
могли
бы
привести
к
получению
имеющегося
результата
.
Далее
,
исходя
из
этой
гипотезы
,
делают
предложения
о
значениях
переменных
в
предыдущей
точке
.
Процесс
продолжают
,
пока
не
обнаружат
причину
ошибки
.
10.3.
Методы
и
средства
получения
дополнительной
информации
Для
получения
дополнительной
информации
об
ошибке
можно
выполнить
добавочные
тесты
или
использовать
специальные
методы
и
средства
:
•
отладочный
вывод
;
•
интегрированные
средства
отладки
;
•
независимые
отладчики
.
Отладочный
вывод
.
Метод
требует
включения
в
программу
дополнительного
отладочного
вывода
в
узловых
точках
.
Узловыми
считают
точки
алгоритма
,
в
которых
основные
переменные
программы
меняют
свои
значения
.
Например
,
отладочный
вывод
следует
предусмотреть
до
и
после
завершения
цикла
изменения
некоторого
массива
значений
. (
Если
отладочный
вывод
предусмотреть
в
цикле
,
то
будет
выведено
слишком
много
значений
,
в
которых
,
как
правило
,
сложно
разбираться
.)
При
этом
предполагается
,
что
,
выполнив
анализ
выведенных
значений
,
программист
уточнит
момент
,
когда
были
получены
неправильные
значения
,
и
сможет
сделать
вывод
о
причине
ошибки
.
Данный
метод
не
очень
эффективен
и
в
настоящее
время
практически
не
используется
,
так
как
в
сложных
случаях
в
процессе
отладки
может
потребоваться
вывод
большого
количества
-
«
трассы
»
значений
многих
переменных
,
которые
выводятся
при
каждом
изменении
.
Кроме
того
,
внесение
в
программы
дополнительных
операторов
может
привести
к
изменению
проявления
ошибки
,
что
нежелательно
,
хотя
и
позволяет
сделать
определенный
вывод
о
ее
природе
.
Примечание
.
Ошибки
,
исчезающие
при
включении
в
программу
или
удалению
из
нее
каких
-
либо
«
безобидных
»
операторов
,
как
правило
,
связаны
с
«
затиранием
»
памяти
.
В
результате
добавления
или
удаления
операторов
область
затирания
может
сместиться
в
другое
место
и
ошибка
либо
перестанет
проявляться
,
либо
будет
проявляться
по
-
другому
.
Интегрированные
средства
отладки
.
Большинство
современных
сред
программирования
(Delphi, Builder C++, Visual Studio
и
т
.
д
.)
включают
средства
отладки
,
которые
обеспечивают
максимально
эффективную
отладку
.
Они
позволяют
:
•
выполнять
программу
по
шагам
,
причем
как
с
заходом
в
подпрограммы
,
так
и
выполняя
их
целиком
;
•
предусматривать
точки
останова
;
•
выполнять
программу
до
оператора
,
указанного
курсором
;
отображать
содержимое
любых
переменных
при
пошаговом
выполнении
;
•
отслеживать
поток
сообщений
и
т
.
п
.
На
рис
. 10.5
показан
вид
программы
в
момент
перехода
в
режим
пошагового
выполнения
по
достижении
точки
останова
в
Delphi.
В
этот
момент
программист
имеет
возможность
посмотреть
значения
интересующих
его
переменных
.
Применять
интегрированные
средства
в
рамках
среды
достаточно
просто
.
Используют
разные
приемы
в
зависимости
от
проявлений
ошибки
.
Если
получено
с
о
о
б
щ
е
н
и
е
о
б
о
ш
и
б
к
е
,
то
сначала
уточняют
,
при
выполнении
какого
оператора
программы
оно
получено
.
Для
этого
устанавливают
точку
останова
в
начало
фрагмента
,
в
котором
проявляется
ошибка
,
и
выполняют
операторы
в
пошаговом
режиме
до
проявления
ошибки
.
Аналогично
поступают
при
«
з
а
в
и
с
а
н
и
и
»
к
о
м
п
ь
ю
т
е
р
а
.
Если
получены
н
е
п
р
а
в
и
л
ь
н
ы
е
р
е
з
у
л
ь
т
а
т
ы
,
то
локализовать
ошибку
обычно
существенно
сложнее
.
В
этом
случае
сначала
определяют
фрагмент
,
при
выполнении
которого
получаются
неправильные
результаты
.
Для
этого
последовательно
проверяют
интересующие
значения
в
узловых
точках
.
Обнаружив
значения
,
отличающиеся
от
ожидаемых
,
по
шагам
трассируют
соответствующий
фрагмент
до
выявления
оператора
,
выполнение
которого
дает
неверный
результат
.
Для
уточнения
природы
ошибки
возможен
анализ
машинных
кодов
,
флагов
и
представления
программы
и
значений
памяти
в
16-
ричном
виде
(
рис
. 10.6).
Причину
ошибки
определяют
,
используя
один
из
методов
,
рассмотренных
в
§ 10.2.
При
этом
для
проверки
гипотез
также
можно
использовать
интегрированные
средства
отладки
.
Отладка
с
использованием
независимых
отладчиков
.
При
отладке
программ
иногда
используют
специальные
программы
-
отладчики
,
которые
позволяют
выполнить
любой
фрагмент
программы
в
пошаговом
режиме
и
проверить
содержимое
интересующих
программиста
переменных
.
Как
правило
такие
отладчики
позволяют
отлаживать
программу
только
в
машинных
командах
,
представленных
в
16-
ричном
коде
.