III. Если в идентификаторах используются цифры, помещайте их только в конце.




IV. Никогда не используйте в качестве идентификаторов ключевые слова.

V. Избегайте промежуточных переменных.

VI. Во избежание неоднозначности употребляйте скобки.

VII. Располагайте только один оператор на строке.

VIII. Не изменяйте значение параметра цикла в теле цикла.

 

§ Лучшей документацией внутренней логики программы является простая и ясная структура текста КП, использование сдвига по строке в соответствии с уровнем вложенности конструкции ЯП. Физически “выдвигайте” все комментарии из текста собственно КП.

§ Объявляйте все переменные явно. Объявляйте все атрибуты каждой переменной. Профессиональный программист должен явно определять или объявлять все переменные в самом начале модуля.

 

§ Никогда не используйте переменную более чем для одной цели.

 

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

 

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

§ Прокомментируйте все переменные: каждое предложение в тексте КП, объявляющее некоторую переменную, должно сопровождаться комментарием, поясняющим ее смысл. Но - избегайте обилия комментариев!

 

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

1. Изучите и используйте возможности языка: в основательное обучение ЯП выгодно вкладывать средства – в результате и КП становятся короче, и исключаются определенные типы ошибок в КП

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

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

4. Внимательно прочтите раздел о “подводных камнях” в руководстве по вашему языку. Там часто содержатся сведения о распространенных ошибках и недоразумениях при работе с этим языком. Экономьте время, учитесь на ошибках других!


10.2. отладка программы

 

10.2.1. Что такое - отладка компьютерной программы

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

 

10.2.2. Виды ошибок в компьютерных программах

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

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

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

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

К случайным ошибкам в КП относятся опечатки, пропуски строк (случайное стирание строки в тексте КП), изменение имени не всюду в тексте КП и т. п.

 

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

 

1. Проверка КП за столом.

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

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

 

2. Устранение синтаксических ошибок с использованием транслятора.

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

 

3. Организация прогонов КП на простых (отладочных) тестах.

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

В случае если полученные результаты неверны, следует провести анализ результатов прогонов КП с целью идентифицировать возникшие ситуации и определить дальнейшую стратегию отладки КП.

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

 

4. Анализ результатов прогона КП на тестовых (отладочных) данных.

Если результаты прогона КП на тестовых данных оказались неверными, то возможны следующие ситуации:

· Синтаксических ошибок не обнаружено, но КП не компилируется.

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

· КП скомпилирована, работает, но не выдает результатов.

Эти неполадки могут вызываться системными или логическими ошибками.

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

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

· КП скомпилирована, работает, но происходит преждевременный останов.

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

· КП скомпилирована, работает, но выдает неверные результаты.

Опытные программисты уже считают эту ситуацию удачей: КП считается в принципе правильной, а её логика – почти точной. Можно применять традиционные методы отладки.

· КП зациклилась.

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

 

5. Эхо-проверка - распечатка введенных данных сразу после их ввода.

 

6. Распечатка текущего состояния КП.

Распечатка текущего состояния используется для фиксации фактических значений переменных для проверки правильности хода вычислений: в текст КП в те места, которые считаются “критическими”, вставляют процедуры распечатки текущего состояния переменных, интересующих программиста.


 

7. Внесение в текст КП точек останова.

В текст КП вставляют процедуры останова программы. Например, можно вставить процедуру, которая выводит сообщение “Достигнута точка № n ” и инициирует паузу до нажатия на любую клавишу.

Первая точка останова вставляется в том месте КП, до которого, Вы знаете, КП успешно выполняется; вторая точка ставится в конце “подозреваемой” процедуры, а третья где-то посредине между первой и второй. Вновь компилируется и выполняется программа. Если она дошла до третьей точки, то зацикливание, очевидно, произошло между третьей и второй точками, а иначе – между первой и второй. Постоянно сжимая район поисков, Вы найдете ошибочный участок.

 

8. Трассировка КП.

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

 

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

10.2.4. Средства отладки

 

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

1. Программа “Отладчик” в составе среды программирования.

 

1.1. Отладчик в среде Borland Pascal

 

Подробное описание возможностей, предоставляемых отладчиком в среде Borland C, можно найти, например, в [4]. Кроме того, среда поддерживает функцию Помощь (Help), которой также можно воспользоваться для изучения возможностей этого отладчика.

Добавить текст!!!

 

1.2. Отладчик в среде Borland C

 

Подробное описание возможностей, предоставляемых отладчиком в среде Borland C, можно найти, например, в [5]. Кроме того, среда поддерживает функцию Помощь (Help), которой также можно воспользоваться для изучения возможностей этого отладчика.

 

Отметим основные особенности отладчика, реализуемые за счет его опций:

§ возможность слежения за ходом выполнения программ,

§ возможность анализа результатов выполнения программы по ходу их выполнения,

§ возможность наблюдения за изменениями значений переменных и выражений,

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

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

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

 

Debug/Source Debugging On

и

Options/Compiler/Code Generation/OBJ Debug Info. On

 

После этого инициировать отладку можно с помощью меню режима Run:

Опция Go to Cursor, Trace Into, Step over.

 

2. Пакет подпрограмм, встраиваемых в КП для автоматического исправления ошибок.

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

 

3. Программы для отслеживания хода выполнения алгоритма.

 

3.1. Процедуры останова программы

 

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

 

3.2. Слежение за ходом выполнения алгоритма

 

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

§ для контроля передач управления,

§ для контроля значений переменных,

§ для контроля вызовов подпрограмм.

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

Слишком подробное отслеживание может увеличить время выполнения КП в 10 – 40 раз. Поэтому средства контроля (подпрограммы) проектируют так, чтобы их можно было подключать и отключать в определенных точках КП для проверки только нужных её частей. Эти средства контроля используют списки меток операторов, имен переменных и имен подпрограмм КП, обращения к которым должны быть отслежены.

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

 

 

.

 

10.2.5. Общие рекомендации по отладке

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

Помните, что в среднем отладка КП занимает около 70 % рабочего времени программиста на её разработку.

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

 

 
 
Не считайте причиной ошибок машину!!!


Первым делом проверяйте программу за столом.

В период отладки в текст КП вставляйте операторы для эхо-проверки вводимых данных.

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

 


 

Литература:

1. Д. Ван Тассел. Стиль, разработка, эффективность, отладка и испытание программ: Пер. с англ. - М.: Мир, 1985. - 332 с.

2. Г. Майерс. Надежность программного обеспечения. Пер. с англ. - М.: Мир, 1980.-360 с.

3. Румянцев Д.Г., Монастырский Л.Ф. Путь программиста: Опыт создания личности программиста. – М.: “Издательский Дом ИНФРА-М”, 2000. – 864 с. Гл. 11, 28.

4. Документация по BP

5. Белецкий Я. Энциклопедия языка Си: Пер. с польск. – М.: Мир, 1992. - 687 с.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-07-14 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: