Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Классификация ошибок






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

В соответствии с этапом обработки, на котором проявляются ошибки, различают:

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

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

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

Программа не соответсвует спецификации.

Спецификация не соответствует требованиям.

Вид программной ошибки Способ обнаружения
Синтаксические Статический контроль и диагностика компилятором
Компоновки Статический контроль и диагностика компоновщиком
Выполнения: - переполнение, защита памяти; - несоответствие типов; - зацикливание Динамический контроль: - аппаратурой процессора; - run-time системы программирования; - операционной системой – по превышению лимита времени
Программа не соответсвует спецификации   Целенаправленное тестирование
Спецификация не соответсвует требованиям Испытания, бета-тестирование

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

- системные;

- алгоритмические;

- программные;

- технологические.

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

АЛГОРИТМИЧЕСКИЕ(ЛОГИЧЕСКИЕ) ошибки (30%) - ошибки, обусловленные некорректной постановкой задачи, неполным учетом всех условий решения задачи, ошибки связей модулей, просчеты в использовании доступных ресурсов ЗВМ и т.д. Эти ошибки очень сложно устраняются.

ПРОГРАММНЫЕ ошибки (30%) - деление на 0, обработка отсутствующих данных, использование индекса за пределами массива, корень квадратный из отрицательного числа и т.д.

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

ТЕХНОЛОГИЧЕСКИЕ ошибки(5-10%) - связаны с вводом программы, ее копированием, редактированием и т.д. Ошибки, возникающие при вводе в компьютер неверных данных.

Сложность отладки обусловлена следующими причинами:

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

• психологически дискомфортна, так как необходимо искать собственные ошибки и, как правило, в условиях ограниченного времени;

• возможно взаимовлияние ошибок в разных частях программы, например, за счет затирания области памяти одного модуля другим из-за ошибок адресации;

• отсутствуют четко сформулированные методики отладки.

В соответствии с этапом обработки, на котором проявляются ошибки, различают (рис. 10.1):

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

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

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

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

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

защищенным синтаксисом и с незащищенным синтаксисом. К первым, безусловно, можно отнести Pascal, имеющий очень простой и четко определенный синтаксис, хорошо проверяемый при компиляции программы, ко вторым - Си со всеми его модификациями. Чего стоит хотя бы возможность выполнения присваивания в условном операторе в Си, например: if (c = n) x = 0; /* в данном случае не проверятся равенство с и n, а выполняется присваивание с значения n, после чего результат операции сравнивается с нулем, если программист хотел выполнить не присваивание, а сравнение, то эта ошибка будет обнаружена только на этапе выполнения при получении результатов, отличающихся от ожидаемых */

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

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

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

• появление сообщения об ошибке, обнаруженной операционной системой, например, нарушении защиты памяти, попытке записи на устройства, защищенные от записи, отсутствии файла с заданным именем и т. п.;

• «зависание» компьютера, как простое, когда удается завершить программу без перезагрузки операционной системы, так и «тяжелое», когда для продолжения работы необходима перезагрузка;

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

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

1) попробует понять, что произошло, ища свою вину,

2) либо обратится за помощью,

3) либо постарается никогда больше не иметь дела с этим продуктом.

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

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

• неверное определение исходных данных,

• логические ошибки,

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

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

предотвратить только часть этих ошибок, о чем безусловно не следует забывать.

Л о г и ч е с к и е о ш и б к и имеют разную природу. Так они могут следовать из ошибок, допущенных при проектировании, например, при 1) выборе методов,

2) разработке алгоритмов или

3) определении структуры классов,

4) а могут быть непосредственно внесены при кодировании модуля.

К последней группе относят:

ошибки некорректного использования переменных, например,

4) неудачный выбор типов данных,

5) использование переменных до их инициализации,

6) использование индексов, выходящих за границы определения массивов,

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

ошибки вычислений, например,

1) некорректные вычисления над неарифметическими переменными,

2) некорректное использование целочисленной арифметики,

3) некорректное преобразование типов данных в процессе вычислений,

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

ошибки межмодульного интерфейса, например,

1) игнорирование системных соглашений,

2) нарушение типов и последовательности при передачи параметров,

3) несоблюдение единства единиц измерения формальных и фактических параметров,

4) нарушение области действия локальных и

глобальных переменных;

другие ошибки кодирования, например,

1) неправильная реализация логики программы при кодировании,

2) игнорирование особенностей или ограничений конкретного языка программирования.

Н а к о п л е н и е п о г р е ш н о с т е й результатов числовых вычислений возникает, например,

1) при некорректном отбрасывании дробных цифр чисел,

2) некорректном использовании приближенных методов вычислений, игнорировании ограничения разрядной сетки представления вещественных чисел в ЭВМ и т. п.

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

· опосредованного проявления ошибок;

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

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

· отсутствия повторяемости проявлений некоторых ошибок от запуска к запуску – так называемые стохастические ошибки;

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

фрагментов может аннулироваться или измениться внешнее проявление ошибок;

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.