Что такое отладка программы какие ошибки можно выявить в ходе отладки

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

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

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

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

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

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

115 Отладка программ

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

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

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

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

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

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

Как включить «Режим отладки» на Android смартфоне

if(c=n) x=0;/* в данном случае не проверятся равенство с и n, а выполняется присваивание с значения n, после чего результат операции сравнива­ется с нулем, если программист хотел выполнить не присваивание, а сравне­ние, то эта ошибка будет обнаружена только на этапе выполнения при полу­чении результатов, отличающихся от ожидаемых*/

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

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

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

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

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

  • неверное определение исходных данных,
  • логические ошибки,
  • накопление погрешностей результатов вычислений (рис. 10.2).

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

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

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

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

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

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

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

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

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

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

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

  1. Синтаксическая ошибка. Неправильное употребление синтаксических конструкций, например употребление оператора цикла For без то или Next.
  2. Семантическая ошибка. Нарушение семантики той или иной конструкции, например передача функции параметров, не соответствующих ее аргументам.
  3. Логическая ошибка . Нарушение логики программы, приводящее к неверному результату. Это наиболее трудный для «отлова» тип ошибки, ибо подобного рода ошибки, как правило, кроются в алгоритмах и требуют тщательного анализа и всестороннего тестирования.

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

В каждой современной системе программирования существует специальное средство отладки программ — отладчик (debugger), который позволяет в режиме интерпретации установить контрольные точки, выполнить отдельные участки программы и посмотреть результаты работы операторов. Естественно, что редактор Visual Basic имеет подобное средство, с которым мы сейчас и познакомимся. В вышеописанной программе мы специально допустили ошибки, на примере которых и продемонстрируем работу отладчика VBA.

Замечание

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

Первый шаг отладки — это запуск компилятора: Debug > compile . Компилятор, просматривая код программы, найдет ошибку и выдаст сообщение: sub or Function not defined (Процедура или функция не определены), выделив место ошибки (creatitem) в теле процедуры.

Итак, допущена синтаксическая ошибка, мы сделали опечатку (вместо createitem ввели creatitem), и компилятор стал расценивать это как вызов процедуры пользователя, которая нигде не объявлена. Быстро исправим эту оплошность, добавив злополучную е в код:

Set tsk = Createltem(olTaskltem)

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

Замечание

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

Запуск программы в VBA осуществляется разными способами. Уже упоминалась возможность запуска программы посредством нажатия клавиши или с помощью команды Run SubUserForm меню Run. Однако при таком вызове запускается активная процедура, т. е. процедура, в которой находится курсор. Другим Способом является вызов диалогового окна Macros из меню Tools. В этом окне можно выбрать запускаемую процедуру, не делая ее активной.

Итак, мы запустили программу. Что же происходит? Сразу после запуска появляется диалоговое ОКНО об ошибке: Object variable or With block variable not set (объектная переменная или переменная блока with не определена) и четыре варианта продолжения работы с программой (рис. 22.6):

  1. Continue. Продолжить выполнение программы.
  2. End. Закончить выполнение программы.
  3. Debug. Прервать выполнение программы и перейти в режим отладки.
  4. Help. Вывести подробную справку об ошибке.

Замечание

Хотя в данном случае кнопка Continue не активна, она бывает очень полезна в ряде случаев. Например, при прерывании хода программы комбинацией клавиш + только для проверки контрольных значений в окне Immediate, когда нет необходимости переходить в режим отладки, если все значения удовлетворительны. Кнопка End используется для окончательного прерывания хода программы, как правило, когда ошибка сразу видна и не требует отладочных средств.

Диалоговое окно Run-time error

Рис. 22.6. Диалоговое окно Run-time error ’91’

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

В нашем же случае произошла семантическая ошибка: неправильное присваивание переменной значения ссылки на объект. Для устранения этой ошибки необходимо добавить оператор присваивания set перед переменной tsk. Давайте еще раз запустим программу. На этот раз она успешно завершилась, дойдя до конца и выдав сообщение «Задача успешно поручена».

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

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

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

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

Сгенерированная задача

Рис. 22.7. Сгенерированная задача

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

Читайте также:
Табличный процессор Microsoft excel это прикладная программа

Чтобы создать точку останова, следует в отлаживаемой процедуре установить точку ввода в любом месте строки кода VBA, перед выполнением которой вы хотите остановить выполнение процедуры. Затем нужно выбрать команду > Debug > Toggle Breakpoint или просто нажать клавишу . При этом строка будет выделена коричневым цветом, а на левом поле окна кода появится жирная коричневая точка. Для снятия точки останова нужно еще раз повторить те же действия. Если напротив оператора стоит точка ос танова, это означает, что выполнение программы будет приостановлено перед выполнением этого оператора.

Замечание

Есть и более простой и, на наш взгляд, естественный способ установки точек останова: достаточно просто сделать щелчок мышью по серой полоске у левого края соответствующей строки кода. Снять эту точку можно повторным щелчком по жирной коричневой точке. Наконец, если вы хотите снять все ранее поставленные точки останова, вовсе необязательно снимать все эти точки поодиночке. Достаточно воспользоваться командой меню > Debug > Clear All Breakpoints.

Наши подозрения вызвали следующие места программы, в которых мы и расставили точки останова (рис. 22.8).

  • Инициализация переменной tsk (чему равняется значение по умолчанию).
  • Вызов стандартной функции NOW (действительно ли возвращается текущее время).
  • Установка даты окончания задачи (правильно ли происходит суммирование).

После расстановки точек останова необходимо, как было сказано, указать, значения каких переменных мы хотели бы наблюдать. Естественно, что мы выбрали значения полей tsk.startoate и tsk.DueDate. Для наблюдения за несколькими свойствами или переменными существуют специальные окна Locals Window и Watch Window. Эти окна можно открыть с помощью соответствующих кнопок на панели Debug или команд меню View.

В окне локальных переменных можно наблюдать за значением всех локальных переменных выполняемой в данный момент процедуры, а окно контрольных значений предназначено для постоянного наблюдения за выбранными пользователем переменными или свойствами. Чтобы определить контрольное значение, достаточно выделить в окне модуля любую переменную, выражение или свойство и нажать кнопку Quick Watch на панели инструментов Debug. При этом появится диалоговое окно, в котором указано имя подпрограммы, само выражение, а также его текущее значение (рис. 22.8).

Нажав на расположенную в правой части диалогового окна кнопку Add, можно переместить это выражение в список наблюдаемых контрольных значений в окне Watch. При этом в момент останова отлаживаемой программы весь список наблюдаемых выражений и их значения будут сразу же видны в соответствующем подокне, располагающемся обычно в нижней части экрана. Добавим переменную tsk. star toate вышеописанным способом. Чтобы наблюдать значение переменной, необходимо выполнить следующее действие.

Точки останова и диалоговое окно Quick Watch

Рис. 22.8. Точки останова и диалоговое окно Quick Watch

Пример 22.8. Добавление переменной в окно Add Watch

1R Add Watch. (рис. 22.9)

Итак, точки останова расставлены, окно Add Watch с наблюдаемыми переменными активно, следовательно, с замиранием сердца переходим к трассировке программы. Итак, нажимаем клавишу , как и предполагалось, перед инициализацией переменной происходит останов программы. Все правильно. Теперь давайте посмотрим, как изменились значения переменных В окне Add Watch: tsk.StartDate = 01:01:4501, tsk.StartDate = 01:01:4501, a duration = 5.

Диалоговое окно Add Watch

Рис. 22.9. Диалоговое окно Add Watch

Для единичного просмотра значения переменной можно просто подвести к ней указатель мыши, и вы увидите всплывающую подсказку. Например, duration = 5.

Для дальнейшего пошагового выполнения программы можно воспользоваться одним из трех способов:

  1. Step Into. При нажатии клавиши выполняется очередной оператор, после чего выполнение программы приостанавливается и программа становится доступна для корректировки.
  2. Step Over. Нажатие комбинации клавиш + осуществляет вызов вспомогательных процедур и функций за один шаг, что дает возможность не задерживаться на их выполнении.
  3. Step Out. Данная комбинация клавиш ++ позволяет выйти из выполняемой вспомогательной процедуры, не дожидаясь конца ее пошагового выполнения.

Итак, нам необходимо нажать клавишу и посмотреть, чему стало равно значение tsk.startDate. Как и следовало ожидать, переменной было присвоено значение 21.08.01. (текущая дата 21 августа 2001 года). Следовательно, функция Now работает корректно.

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

Значение переменной duration равно 5, прибавляя его к значению текущей даты, мы прибавляем не месяцы (как хотелось бы), а дни. Исправим эту ошибку, изменив код ошибочной строки на следующий:

.DueDate = DateAdd(«m», duration, .StartDate)

Замечание

Встроенная функция DateAdd предназначена для добавления или вычитания из даты указанного числа временных интервалов.

В конце рассказа об отладчике мы решили на рис. 22.10 показать панель инструментов Отладка (Debug) с кнопками, используемыми при отладке, а в табл. 22.1 привести краткую справку по всем использованным и неиспользованным средствам отладчика.

Кнопки панели Отладка

Рис. 22.10. Кнопки панели Отладка

Команда Назначение
Compile Компиляция программы
Run Sub/UserForm Запуск процедуры или формы
Break Прерывание выполнения программы +
Reset Остановка выполнения программы
Toggle Breakpoints Установить точку останова
Clear All Breakpoints Снять все точки останова
Step Into Шаг с заходом во вспомогательные процедуры
Step Over Шаг с обходом вспомогательных процедур
Step Out Шаг с выходом из вспомогательной процедуры
Step to Cursor Шаг до курсора. Запускает программу на выполнение до строки с курсором
Set Next Statement Позволяет устанавливать следующий выполняемый оператор
Show Next Statement Показывает следующий выполняемый оператор
Immediate Window Отображает окно отладочных результатов вычисления
Locals Window Отображает окно локальных переменных процедуры
Watch Window Отображает окно контрольных выражений программы
Add Watch Добавляет выражение в окно Watch
Edit Watch Исправляет выражение в окне Watch
Quick Watch Просматривает значение выделенного выражения
Call Stack Позволяет показать стек вызовов процедур в текущий момент. Эта кнопка очень полезна при работе с рекурсивными процедурами
Comment Block Позволяет закомментировать выделенный блок операторов
Uncomment Block Отменяет сделанные комментарии
Toggle Bookmarks Устанавливает закладку
Clear All Bookmarks Снимает все установленные закладки
Find Вызывает диалоговое’ окно поиска, посредством которого можно найти ту или иную переменную, выражение и т. д.

Таблица 22.1. Средства отладчика

К сожалению, не все приемы отладки можно рассмотреть на нашем простейшем примере.

Источник: www.taurion.ru

ЛАБОРАТОРНАЯ РАБОТА №6

Лабораторная работа

Цель работы: Получить практические навыки отладки программ с помощью отладчика среды программирования.

Теоретические основы.

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

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

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

Читайте также:
Программа для того чтобы делать надписи на картинках

1) причина найдена, исправлена, уничтожена;

2) причина не найдена.

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

Возможные разные способы проявления ошибок:

1) программа завершается нормально, но выдает неверные результаты;

2) программа зависает;

3) программа завершается по прерыванию;

4) программа завершается, выдает ожидаемые результаты, но хранимые данные испорчены (это самый неприятный вариант).

Характер проявления ошибок также может меняться. Симптом ошибки может быть:

q пороговым (проявляется при превышении некоторого порога в обработке — 200 самолетов на экране отслеживаются, а 201-й — нет);

q отложенным (проявляется только после исправления маскирующих ошибок).

В ходе отладки мы встречаем ошибки в широком диапазоне: от мелких неприятностей до катастроф. Следствием увеличения ошибок является усиление давления на отладчика — «найди ошибки быстрее. ». Часто из-за этого давления разработчик устраняет одну ошибку и вносит две новые ошибки.

Английский термин debugging (отладка) дословно переводится как «ловля блох», который отражает специфику процесса — погоню за объектами отладки, «блохами». Рассмотрим, как может быть организован этот процесс «ловли блох».

Различают две группы методов отладки :

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

Общая стратегия отладки — обратное прохождение от замеченного симптома ошибки к исходной аномалии (месту в программе, где ошибка совершена).

В простейшем случае место проявления симптома и ошибочный фрагмент совпадают. Но чаще всего они далеко отстоят друг от друга.

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

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

Основное преимущество аналитических методов отладки состоит в том, что исходная программа остается без изменений.

В экспериментальных методах для прослеживания выполняется:

1. Выдача значений переменных в указанных точках.

2. Трассировка переменных (выдача их значений при каждом изменении).

3. Трассировка потоков управления (имен вызываемых процедур, меток, на которые передается управление, номеров операторов перехода).

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

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

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

Классический научный подход включает следующие этапы:

1. Сбор данных при помощи повторяющихся экспериментов.

2. Формулирование гипотезы, объясняющей релевантные данные.

3. Разработка эксперимента, призванного подтвердить или опровергнуть гипотезу.

4. Подтверждение или опровержение гипотезы.

5. Повторение процесса в случае надобности.

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

1. Стабилизация ошибки.

2. Определение источника ошибки.

a. Сбор данных, приводящих к дефекту.

b. Анализ собранных данных и формулирование гипотезы, объясняющей дефект.

c. Определение способа подтверждения или опровержения гипотезы, основанного или на тестировании программы, или на изучении кода.

d. Подтверждение или опровержение гипотезы при помощи процедуры, определенной в п. 2(c).

3. Исправление дефекта.

4. Тестирование исправления.

5. Поиск похожих ошибок.

Способ подтверждения или опровержения гипотезы может быть одним из следующего списка:

1. сокращение подозрительной области кода;

2. проверка классов и методов, в которых дефекты обнаруживались ранее;

3. проверка кода, который изменялся недавно.

Отладка — это тот этап разработки программы, от которого зависит возможность её выпуска. Конечно, лучше всего вообще избегать ошибок. Однако потратить время на улучшение навыков отладки все же стоит, потому что эффективность отладки, выполняемой лучшими и худшими программистами, различается минимум в 10 раз.

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

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

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

Инструменты отладки значительно облегчают разработку ПО. Найдите их и используйте. Большинство современных сред программирования ( IntelliJ IDEA , C++ Builder, Visual Studio и т.д.) включают средства отладки, которые обеспечивают максимально эффективную отладку. Они позволяют:

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

· предусматривать точки останова;

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

· отображать содержимое любых переменных при пошаговом выполнении;

· отслеживать поток сообщений и т.п.

1. Отладить один из модулей вашей ИС с использованием встроенных в среду разработки инструментальных средств.

2. Составить отчет по лабораторной работе.

Отчет по лабораторной работе должен включать:

1. Текст модуля на языке программирования до отладки и после.

2. Выявленные ошибки и как вы их исправили.

3. Ответы на контрольные вопросы.

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

1. Что такое тестирование программы?

2. Что такое отладка программы? Какие ошибки можно выявить в ходе отладки?

3. Какие стадии тестирования выделяют при разработке программного обеспечения?

4. Какие различают подходы в формировании тестовых наборов?

5. В чем суть тестирования методом “покрытия операторов”?

6. В чем суть тестирования методом “покрытия решений”?

7. В чем суть тестирования методом “покрытия условий”?

8. В чем суть тестирования методом “комбинаторного покрытия условий”?

9. В чём суть метода эквивалентных разбиений?

10. В чём суть метода анализа граничных значений?

11. В чём суть метода анализа причинно-следственных связей?

ЛАБОРАТОРНАЯ РАБОТА №6 Отладка отдельных модулей программного проекта

ЛАБОРАТОРНАЯ РАБОТА №6 Отладка отдельных модулей программного проекта

Аналитические методы базируются на анализе выходных данных для тестовых прогонов

Аналитические методы базируются на анализе выходных данных для тестовых прогонов

Подтверждение или опровержение гипотезы при помощи процедуры, определенной в п

Подтверждение или опровержение гипотезы при помощи процедуры, определенной в п

В чем суть тестирования методом “покрытия решений”? 7

В чем суть тестирования методом “покрытия решений”? 7

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

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

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