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

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

Для обнаружения и устранения ошибок выделяется ИТ этапа – отладки программ. Большинство специалистов считают, что отладка (вместе с тестированием) занимает 50% времени разработки программ.

Цель ИТ отладки – изменить программу таким образом, чтобы она была в состоянии решить запланированную задачу.

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

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

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

ИТ тестирования разделяют на три фазы:

— ИТ составления (генерации) тестовых наборов;

— ИТ выполнения программы на этих наборах;

— ИТ оценки результатов выполнения программы.

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

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

Представим отладку программы в виде контура управления, в котором объектом управления является отлаживаемая программа Р. Цель такой системы – повышение уровня безошибочности программы.

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

Т – это задание на тестирование, включающее и тестовый набор. Блок М определяет корректность выполнения тестового задания, блок А определяет причину некорректности, блок С осуществляет целенаправленное изменение. Изменение может быть направлено на программу Р (с тем чтобы добиться корректного выполнения тестового задания или включить в программу инструментальные вставки – счетчики, команды печати, команды прерываний и т.п. – для облегчения последующего анализа), или на само тестовое задание (если ошибка обнаружена в задании), или на порядок выполнения тестовых заданий (если задание уже выполнилось корректно или полученных результатов недостаточно для определения причины некорректности).

Как устроен процесс разработки? ДЛЯ НОВИЧКОВ / Про IT / Geekbrains

Рис. 13.5. Схема отладки программы

Таким образом, блоки М и А олицетворяют анализ, а блок С – внесение изменений, Т – тестируемая последовательность, У – результат теста, D – комплекс ИТ управления тестированием программ.

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

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

Остаточная программа – понятие, введенное А.П. Ершовым в связи с определением смешанных вычислений. Остаточная программа — это программа, получаемая в результате адаптации исходной программы к некоторым дополнительным условиям.

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

Не всегда дополнительные условия определяют требования к значениям входных величин. Условия могут быть достаточно сложными и касаться разных объектов, свойств или функций программы. Важным частным случаем представляется, например, такое условие: программа при выполнении должна проходить через заданный оператор. Адаптация к такому условию реализуется преобразованием к новой программе, из которой, по сравнению с исходной, удалены пути, не проходящие через оператор. Назовем такую новую программу «остатком исходной программы по конкретному заданному оператору».

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

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

Технология повышения помехоустойчивости программ

Помехой будем называть некорректное значение внешнего воздействия или входной величины. Ранее мы уже определили, что такое корректное внешнее воздействие: его значение должно принадлежать ареалу и поступать оно в программу должно в оговоренное время (можно, по-видимому, рассматривать внешнее воздействие как пару – значение и время появления; тогда и ареал должен состоять из двух компонентов, один из которых оговаривает допустимые значения, размеры воздействия, а другой – допустимые моменты времени).

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

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

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

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

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

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

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

Читайте также:
Глюк в программе ПК 4 буквы

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

— временнУю, поскольку для реализаций методов требуется дополнительное машинное время;

— информационную, поскольку для проведения контроля необходима дополнительная информация;

— программную, поскольку реализация методов программная;

— эргатическую, поскольку не всегда удается устранить помеху автоматически; в этих случаях может помочь только вмешательство человека.

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

Повторение выполнения программ

Чаще всего программистами применяются два способа повторения выполнения фрагментов программ – двойной счет и контрольные точки.

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

Здесь мы опять встречаемся с контуром управления. Объектом управления в таком контуре является фрагмент программы. Цель контура – достижение высокой достоверности решения ценой потери времени.

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

Контрольные точки организуются в программах, время выполнения которых достаточно велико – несколько десятков минут, например. Цель этого способа – экономия времени выполнения программы при достаточно высоком уровне достоверности полученного результата.

Сам способ заключается в том, что в программе расставляются так называемые контрольные точки, в которые помещается обращение к процедуре «фотографирования» оперативной памяти во внешнюю память. Контрольные точки расставляются таким образом, чтобы время выполнения программы между контрольными точками было в пределах 5-10 минут. Если в какой-то момент в промежутке между контрольными точками произошел сбой оборудования или появилась какая-либо помеха, не позволяющая ожидать достоверный результат решения, то программу можно запустить не с самого начала, потеряв все время решения, а с предыдущей контрольной точки, предварительно восстановив соответствующее состояние оперативной памяти. Потеряно будет практически только время, прошедшее после организации соответствующей контрольной точки.

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

Технологии защиты от проникновения помехи

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

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

Программирование с защитой от помех обычно отнимает слишком много времени при подготовке программы (по некоторым оценкам, больше 20%).

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

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

Назовем фильтрацией величины Х из программы Р (см. рис.4) автоматизированный процесс, предотвращающий проникновение некорректных значений величины Х в программу Р. Этот процесс включает проверку корректности значения величины Х и реакции на некорректность такого значения. Программные средства, реализующие процесс фильтрации, назовем фильтрами. Существенным для фильтра в применении к практическому программированию является его ориентация на спецификацию контролируемой величины, включающую в себя ареал величины и описание реакций на некорректность значения этой величины.

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

Ареалом величины Х из программы Р называется множество значений, которые могут быть присвоены Х исходя из назначения и условия применения программы Р.

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

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

Реакция на некорректность контролируемой величины может быть разной:

— сообщение об ошибке;

— замена некорректного значения стандартным значением;

— замена ближайшим (по некоторому критерию) значением;

— обращение к подпрограмме пользователя;

— прекращение вычислений и т.д.

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

Фильтр – стандартизованное средство, автоматически настраиваемое на спецификацию (точнее на ареал) фильтруемой величины. Настройка эта может выполняться как при использовании фильтра, так и при его построении. Для того чтобы выполнить фильтрацию, необходимо узнать:

— имя фильтруемого объекта или значение объекта;

— точку пуска фильтрации.

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

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

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

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

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

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

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

1. Что такое отказ и какие отказы вы знаете?

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

2. Что включает понятие надежности системы управления?

3. От каких факторов зависит эффективность и уровень надежности АСОУ?

4. Какие существуют показатели надежности?

5. Каков общий порядок оценки надежности АСОУ?

6. Перечислите основные свойства АСУ, реализующих общесистемную интегрированную информационную технологию управления?

7. Что такое общая энтропия АСОУ и из чего она складывается?

8. Что такое надежная программа и каковы ее свойства?

9. Какие вы знаете технологии отладки программ?

10. Какие существуют виды избыточности?

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

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

Тестирование программного обеспечения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • ручного тестирования;
  • индукции;
  • дедукции;
  • обратного прослеживания.

Метод ручного тестирования

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

Метод индукции

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

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

Самый ответственный этап — выявление симптомов ошибки. Организуя данные об ошибке, целесообразно записать все, что известно о её проявлениях, причем фиксируют, как ситуации, в которых фрагмент с ошибкой выполняется нормально, так и ситуации, в которых ошибка проявляется. Если в результате изучения данных никаких гипотез не появляется, то необходима дополнительная информация об ошибке. Дополнительную информацию можно получить, например, в результате выполнения схожих тестов. В процессе доказательства пытаются выяснить, все ли проявления ошибки объясняет данная гипотеза, если не все, то либо гипотеза не верна, либо ошибок несколько.

Метод дедукции

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

Читайте также:
Программа сделать карикатуру из фотографии

Метод обратного прослеживания

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

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

Для получения дополнительной информации об ошибке можно выполнить добавочные тесты или использовать специальные методы и средства:

  • отладочный вывод;
  • интегрированные средства отладки;
  • независимые отладчики.

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

Уроки 50 — 51
§4.1. Алгоритм и кодирование основных алгоритмических структур

§4.1.4. Приёмы отладки программ. Трассировка программ

§4.1.4. Приёмы отладки программ. Трассировка программ

Приёмы отладки программ. Трассировка программ

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

Поиск и исправление ошибок в программе называют её отладкой.

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

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

Второй шаг отладки — проверка правильности работы программы на каком-то одном типовом примере. Цель этой проверки — убедиться, что в программе не допущено семантических (смысловых) ошибок.

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

Приведём пример трассировки программы вычисления факториала натурального числа:

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

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

В последней строке таблицы трассировки, соответствующей команде вывода результата, для соответствующей переменной (F) мы видим полученное значение (720).

Проверяем его правильность, зная математическую формулу расчета факториала:

6! = 6 • 5 • 4 • 3 • 2 • 1 == 720.

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

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

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

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

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

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

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

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

Вопросы и задания

1. Что такое отладка программы? Для чего она нужна?

2. Перечислите основные этапы отладки программы. Опишите назначение каждого этапа и характер обнаруживаемых с его помощью недочётов программы.

3. Что такое таблица трассировки? Как она составляется? Приведите свой пример программы и составленной для неё таблицы трассировки.

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

*5. Приходилось ли вам при работе на компьютере сталкиваться со сбоями в работе программ? Как вы считаете — вызвано ли это недостаточно тщательным тестированием этих программ при их разработке? Предположите, какие меры разработчику этих программ потребовалось (или потребуется) предпринять для исправления этих ошибок и оцените примерные затраты на это исправление.

Следующая страница §4.1.5. Типовые алгоритмы

Cкачать материалы урока

Источник: xn—-7sbbfb7a7aej.xn--p1ai

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