Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Коваленко 5 курс.docx
Скачиваний:
2
Добавлен:
20.09.2019
Размер:
198.47 Кб
Скачать

18.Типичные ошибки

В соответствии с этапом реализации ПО, на котором проявляются ошибки, различают несколько разных типов ошибок.

Синтаксические ошибки — ошибки, фиксируемые компилятором (транслят0р0м, интерпретатором) при выполнении синтаксического, частично семантического анализов проги.

Ошибки компоновки — ошибки, обнаруженные компоновщиком и редактором связей) при объединении модулей программы. Ошибки выполнения — ошибки, обнаруженные ОС, аппарат.ср-вами илиюзеромм при ввыполнении проги.

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

if (с = n) х = 0;

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

Существует ряд языков (напр., Фортран), где новые переменные можно вводить автоматически, без декларации. Такая возможность дает еще один источник синтаксичес­ких ошибок. Как обнаружить незаконное исполь-ние объявл.переменной, что перепутаны имена? Многие системы прогр-ния позволяют вывод таблицы перекрестных ссылок, т. е. таблицы, содержащей список идентиф-ров и номеров строк, где идентиф-оры встретились. Анализ таблицы перекрестных ссы­лок дает возм-сть легко обнаруживать такие ситуации.

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

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

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

2. появление сообщения об ошибке, обнаруженной ОС, напр. о нарушении защиты памяти, попытке записи на устр-ва, защищ-ые от записи, отсут­ствии файла с заданным именем и т. п.;

3. «зависание» ПК, которое может быть вызвано, на­пр., наличием бесконечного цикла в проге, чрезмерной загрузкой проца вычислениями или бесконечным ожиданием освобождения ресурса, блокированного другой прогой;

4. несовпадение полученных резалтов с ожидаемыми.

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

1. неверное определение исходных данных;

2. логические ошибки;

3. накопление погрешностей результатов вычислений.

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

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

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

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

кодирования: неправильная реал-ия логики проги при кодир-ии, игнор особ-тей или огран-ний конкр.языка прогр-ия.

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

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

1.опосред-ного проявления ошибок;

2.возможности взаимовлияния ошибок;

3. возможности получения внешне одинаковых проявлений раз­ных ошибок;

4.отсутствия повторяемости проявлений некоторых ошибок от запуска к запуску(стохастические ошибки);

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

6. написания отдельных частей программы разными прогр-ми.

Инспекции исходного текста '

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

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

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

1. Контроль обращений к данным:

2. Контроль вычислений:

3. Контроль передачи управления:

4. Контроль межмодульных интерфейсов:

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