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

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

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

***ERROR***SUBSCRIPT NUMBER 3 OF ARRAY MATR

HAS VALUE 0

STATEMENT NUMBER 10 OF PROGRAM TPROG

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

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

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

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

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

Это интересно