Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на экзаменационные вопросы по ЭСТП.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
399.63 Кб
Скачать

25. Понятие отладки. Основные принципы отладки. Принципы локализации ошибок. Принципы устранения ошибок.

ОТЛАДКА ПРОГРАММ

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

ПРИНЦИПЫ ОТЛАДКИ

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

ПРИНЦИПЫ ЛОКАЛИЗАЦИИ ОШИБОК.

Думайте.

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

Если вы зашли в тупик, отложите рассмотрение про­граммы.

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

Если вы зашли в тупик, изложите задачу кому-нибудь еще.

Сделав это, вы, вероятно, обнаружите что-то новое.

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

Используйте средства отладки только как вспомо­гательные.

Не применяйте эти средства вместо того, чтобы обду­мывать задачу Как отмечалось ранее в настоящей главе, такие средства, как дампы и трассы, отражают случай­ный подход к отладке. Эксперименты показали, что про­граммисты, избегающие применения средств отладки, даже при отлаживании незнакомых им программ выпол­няют ее лучше, чем те, кто пользуется этими средства­ми [3]

Избегайте экспериментирования Пользуйтесь им только как последним средством.

Наиболее общей ошибкой, которую допускают начи­нающие программисты, занимающиеся отладкой, явля­ется попытка решить задачу посредством внесения в про­грамму экспериментальных изменений («Я не знаю, что неправильно, но я изменю этот оператор DO и посмотрю что получится».) Этот абсолютно неверный подход не может даже рассматриваться как отладка; он основан на случайности. Экспериментирование не только уменьшает вероятность успеха, но часто и усложняет задачу, по скольку при этом в программу вносятся новые ошибки.

ПРИНЦИПЫ ИСПРАВЛЕНИЯ ОШИБОК.

Там, где есть одна ошибка, вероятно, есть и другие

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

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

Вероятность правильного нахождения ошибки не равна 100%.

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

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

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

Остерегайтесь внесения при корректировке новой ошибки.

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

Процесс исправления ошибки должен временно возвращать разработчика на этап проектирования.

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

Изменяйте исходный текст, а не объектный код

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