Как следует планировать процесс отладки программы

Отладка — процесс локализации и устранения ошибок.

Отладка программы — процесс творческий и плохоформализуемый. Тем не менее, основной идее отладки (базирующейся на анализе данных) можно придать вид следующего алгоритма:

1) Следует начать с изучения уже доступных исходных и результирующих данных.

2) Сформулировать некоторую гипотезу, которая объясняет получение таких результирующих данных.

3) Подготовить новые исходные данные и провести эксперимент, который позволит доказать или опровергнуть гипотезу.

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

1) Если программа прекращает работу с порождениями «предсмертного дампа памяти» (core-файла), то практически любой отладчик позволит по этому дампу восстановить динамический стек вызовов процедур и локализовать место проблемы.

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

21. Отладка программ [Универсальный программист]

Средства отладки в интегрированных системах программирования включают:

· Средства пошагового выполнения программы и трассировки (Step over / Trace into)

· Использование точек останова (Breakpoints)

· Просмотр значений переменных (Watch)

· Интерактивное изменение значений переменных (Evaluate / modity)

· Просмотр содержимого стека (Call stack)

· Просмотр содержимого регистров (Register)

В процессе разработки и выполнения программ возникают следующие виды ошибок:

– Синтаксические

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

– Логические

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

– Динамические

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

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

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

Без этого вы не станете программистом! Найти ошибку в коде. Отладка. Как пользоваться отладчиком #23

Вот некоторые типы операций, которые могут привести к исключительным ситуациям:

– обработка файла;

– выделение памяти;

– работа с ресурсами системы;

– работа с объектами и формами, создаваемыми во время выполнения программы;

– аппаратные конфликты и конфликты операционных систем.

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

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

EAbort Аварийное завершение работы без диалогового окна

EAbstractError Абстрактная ошибка метода

AssertionFailed Утверждают неудавшийся запрос

EBitsError Булев массив ошибок

ECommonCalendarError Календарная ошибка

EDateTimeError Ошибка DateTime

EMonthCalError Ошибка месяца

EConversionError Вызывается Convert

EConvertError Ошибка конвертирования объекта

EDatabaseError Ошибка базы данных

EExternal Ошибка аппаратных средств/Windows

EAccessViolation Нарушение прав доступа

EControlC Произошло аварийной завершение работы пользователем

EExternalException Другая Внутренняя ошибка

EIntError Целочисленная ошибка

EDivByZero Деление на ноль

EIntOverflow Переполнение целого числа

ERangeError Вне диапазона значений

EMathError Ошибка с плавающей запятой

EInvalidArgument Плохое значение аргумента

EInvalidOp Несоответствующая операция

EOverflow Значение слишком большое

EUnderflow Значение слишком маленькое

EZeroDivide Деление на ноль

EStackOverflow Серьёзная проблема Delphi

EHeapException Проблемы динамической памяти

EInvalidPointer Плохой указатель памяти

EOutOfMemory Нет возможности распределить память

EInOutError Ошибка ввода/вывода

EInvalidCast Ошибка произведенная объектом

EInvalidOperation Плохая операция компонента

EMenuError Ошибка пункта меню

EOSError Ошибка операционной системы

Читайте также:
Skype бесплатная программа или нет

EParserError Ошибка синтаксического анализа

EPrinter Ошибка принтера

EPropertyError Ошибка свойства класса

EPropReadOnly Недопустимое обращение к свойству

EPropWriteOnly Недопустимое обращение к свойству

EThread Ошибка потока

EVariantError Различная ошибка

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

Источник: mydocx.ru

61. Последовательность действий при отладке ПО.

Цель отладки – не продемонстрировать правильность программы, а найти в ней ошибки. Этой цели должен быть подчинен план отладки и наборы тестов для отладки. Отладка программ включает в себя: 1) составление плана отладки в соответствии с критериями отладки, перечня маршрутов на графе ПО по управлению, 2) составление тестовых наборов входных данных, обеспечивающих реализацию намеченных маршрутов на графе программы либо программного комплекса при комплексной отладке ПО, 3) подготовка эталонных результатов, 4) тестирование – исполнение тестов на ЦВМ, 5) анализ и сравнение результатов с эталоном для обнаружения ошибок, 6) диагностика и локализация ошибок при их обнаружении, 7) коррекция обнаруженных ошибок, 90

8) контроль правильности устранения ошибок путём повторения вариантов отладки, 9) выпуск отчета об отладке с приведением тестов и результатов. Необходимо исходить из того, что ошибки в программе есть. Отладка должна быть построена таким образом, чтобы целенаправленно искать ошибки, а не демонстрировать их отсутствие.

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

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

Принципы выделения маршрутов для отладки.

Для проверки работоспособности программы при отладке используются несколько критериев выделения маршрутов (путей) на ее графе по управлению. Эти критерии справедливы и для программного комплекса ПО в целом при комплексной отладке. В этом случае ПО рассматривается как единая программа, а маршруты определяются межпрограммными переходами.

Совокупность маршрутов на графе ПК (программы), обеспечивающих выполнение критерия отладки, со- ставляют основу плана отладки. Сначала рассмотрим «узкий» граф структуры ПО. В вершинах или узлах данного графа находятся программные модули или программы (для ПО). Рёбра этого графа определяют передачу управления между модулями или программами.

Начнем с «неправильного критерия» выбора вариантов на отладку, применение которого недопустимо, так как приводит к пропуску большого числа ошибок,- однократно накрыть(исполнить) все узлы. В нашем примере это исполнить маршрут а1,в1,с1. Ясно ,что этого не достаточно, так как наличие ошибки в передачах управления по дугам а2 или в2 илис2 и соответствующие маршруты не проверяются.

Рассмотрим применяемые критерии выбора маршрутов на графе ПО, связанные с накрытием дуг. I критерий (минимальный). Каждая дуга проходится хотя бы один раз. 1. а1 в1 с1 2. а2 в2 [Введите текст]

3. а2 в1 с2

Рис.18 Рассматриваемый «узкий» граф ПО
II критерий (максимальный)
1) а1 в1 с1 3) а2 в1 с2 5) а1 в 2 маршруты обеспечивают
2) а2 в1 с1 4) а1 в1 с2 6) а2 в2 все возможные сочетания дуг

Непроверенные варианты исполнения ПО, например, при непроверенном сочетании дуг а2,в1,с1 могут содержать ошибку. Назначенное число тестов в соответствии с первым критерием не обеспечивает исполнения каждой программы ПК (каждого модуля) при различных сочетаниях предшествующих условий и последовательности исполнения предшествующих и последующих модулей или программ, то есть не обеспечивают выполнение всех путей на графе. Второй критерий выбора маршрутов — выделение полного состава маршрутов, учитывающий также все возможные сочетания дуг графа программы. 92

Источник: studfile.net

Методы отладки программного обеспечения

Целью лекции является дать представление о процессе и методах отладки программного обеспечения.

Читайте также:
Самые популярные вредоносные программы

1. Классификация ошибок

2. Методы отладки программного обеспечения

3. Методы и средства получения дополнительной информации об ошибке

4. Методика отладки программного обеспечения

Список литературы

Основная литература

1. Иванова Г.С. Технология программирования М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. — 320 с.

2. Жоголев Е.А. Технология программирования М.: Научный мир, 2004. — 216 с.

3. Гагарина Л.Г., Кокорева Е.В., Виснадул Б.Д. Технология разработки программного обеспечения. М.: ИД «ФОРУМ» — ИНФРА-М, 2008. — 400с.

Дополнительная литература

1. Канер С., Фолк Д., Нгуен Е. Тестирование программного обеспечения. М.: ДиаСофт, 2001. — 544с.

2. Брауде Э. Технология разработки программного обеспечения. СПб.: Питер, 2004. — 655 с.

3. Баранов С.Н., Домарацкий А.Н., Ласточкин Н.К., Морозов В.П. Процесс разработки программных изделий. М.: ФИЗМАТЛИТ, Наука, 2000. — 176с.

1. www.intuit.ru — Интернет-университет информационных технологий.

2. http://citforum.ru/ — Центр информационных технологий.

3. http://www.tstu.ru/r.php?r=education — Электронная библиотека ТГТУ.

4. http://www.edu.ru/ — Библиотека Федерального портала «Российское образование»

Содержание лекции

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

— специфики управления используемыми техническими средствами,

— среды и языка программирования,

— природы и специфики различных ошибок,

— методик отладки и соответствующих программных средств.

Обсуждению последних двух вопросов и посвящается данная лекция.

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

В целом сложность отладки обусловлена следующими причинами:

— требует от программиста глубоких знаний специфики управления используемыми техническими средствами, операционной системы, среды и языка программирования, реализуемых процессов, природы и специфики различных ошибок, методик отладки и соответствующих программных средств;

— психологически дискомфортна, так как необходимо искать собственные ошибки и, как правило, в условиях ограниченного времени;

— возможно взаимовлияние ошибок в разных частях программы, например, за счет затирания области памяти одного модуля другим из-за ошибок адресации;

— отсутствуют четко сформулированные методики отладки.

В соответствии с этапом обработки, на котором проявляются ошибки, различают (рис. 1):

— синтаксические ошибки — ошибки, фиксируемые компилятором (транслятором, интерпретатором) при выполнении синтаксического и частично семантического анализа программы;

— ошибки компоновки — ошибки, обнаруженные компоновщиком (редактором связей) при объединении модулей программы;

— ошибки выполнения — ошибки, обнаруженные операционной системой, аппаратными средствами или пользователем при выполнении программы.

Рисунок 1 — Классификация ошибок по этапу обработки программы

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

Следует иметь в виду, что чем лучше формализованы правила синтаксиса языка, тем больше ошибок из общего количества может обнаружить компилятор и, соответственно, меньше ошибок будет обнаруживаться на следующих этапах. В связи с этим говорят о языках программирования с защищенным синтаксисом и с незащищенным синтаксисом. К первым, безусловно, можно отнести Pascal, имеющий очень простой и четко определенный синтаксис, хорошо проверяемый при компиляции программы, ко вторым – C/C++ со всеми их модификациями. Чего стоит хотя бы возможность выполнения присваивания в условном операторе в С/С+, например:

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

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

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

Читайте также:
Как удалить программу мой мир

— появление сообщения об ошибке, зафиксированной схемами контроля выполнения машинных команд, например, переполнении разрядной сетки, ситуации “деление на ноль”, нарушении адресации и т. п.;

— появление сообщения об ошибке, обнаруженной операционной системой, например, нарушении защиты памяти, попытке записи на устройства, защищенные от записи, отсутствии файла с заданным именем и т. п.;

— «зависание» компьютера, как простое, когда удается завершить программу без перезагрузки операционной системы, так и «тяжелое», когда для продолжения работы необходима перезагрузка;

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

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

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

— неверное определение исходных данных,

— накопление погрешностей результатов вычислений (рис. 2).

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

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

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

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

— ошибки межмодульного интерфейса, например, игнорирование системных соглашений, нарушение типов и последовательности припередачи параметров, несоблюдение единства единицизмерения формальных и фактических параметров, нарушение области действия локальных и глобальных переменных;

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

Накопление погрешностей результатов числовых вычислений возникает, например, при некорректном отбрасывании дробных цифр чисел, некорректном использовании приближенных методов вычислений, игнорировании ограничения разрядной сетки представления вещественных чисел в ЭВМ и т. п.

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

— опосредованного проявления ошибок;

— возможности взаимовлияния ошибок;

— возможности получения внешне одинаковых проявлений разных ошибок;

— отсутствия повторяемости проявлений некоторых ошибок от запуска к запуску (стохастические ошибки);

— возможности устранения внешних проявлений ошибок в исследуемой ситуации при внесении некоторых изменений в программу, например, при включении в программу диагностических фрагментов может аннулироваться или измениться внешнее проявление ошибок;

— написания отдельных частей программы разными программистами.

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

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

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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru