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

Ошибки ПО: причины, источники, классификация

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

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

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

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

Контроль текста подразделяется на лексический, синтаксический и семантический.

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

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

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

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

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

Для проведения отладки программы разрабатывается контрольный пример, который на основе конкретных допустимых исходных данных рассчитывают «вручную», и принимают за эталон. Контрольный пример по возможности должен содержать всевозможные варианты и ситуации; обработку, которая предусмотрена в программе. Затем приступают к отладке программы, используя те же исходные данные, что и для контрольного примера. Получаемые значения результатов сравнивают с эталоном. Отладку ведут до тех пор, пока значения выходных данных, полученных на ЭВМ и эталон будут отличаться.

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