Определение
понятия ошибки и исключения.
Классификация
ошибок.
Общий способ обработки
ошибок.
Обработка ошибок в языке Java.
— исключение в Java.
— причины возникновения исключений
в Java
— конструкция обработки исключения
— асинхронные исключения
—
иерархия исключений
—
классы Exception и RuntimeException
— класс Error
Приложения.
Определение понятия ошибки и исключения.
В
качестве введения рассмотрим определения
понятия «ошибка». Начнем с наиболее
общего трактования этого:
В самом
общем случае под ошибкой понимается
какой-то сбой в программе на этапе ее
выполнения.
По определению стандарта
ISO
9241-13 ошибка это – несоответствие между
целями пользователя и ответом системы.
Ошибкой также можно назвать
недокументированные или нежелательные,
«побочные» реакции программы на
те или иные действия пользователя равно
как и при использовании ее одновременно
с другим программами или на другой
аппаратной платформе.
В книге «К.
Браун, Р. Калбертсон, Г. Кобб. Быстрое
тестирование» приводится такое
определение программных ошибок: «Говоря
простыми словами, программная ошибка
— не что иное, как изъян в разработке
программного продукта, который вызывает
несоответствие ожидаемых результатов
выполнения программного продукта и
фактически полученных результатов.
Дефект может возникнуть на стадии
кодирования, на стадии формулирования
требований или на стадии проектирования,
либо же его причина может крыться в
некорректной конфигурации или данных.
Дефектом может быть также что-то другое,
что не соответствует ожиданиям заказчика
и что может быть, а может и не быть
определено в спецификации программного
продукта».
Для исключения Г.
Шилдт дает такое определение: исключение
– это нештатная ситуация , возникающая
во время выполнения последовательности
кода.
Как можно заметить, под понятием
ошибки и исключительной ситуацией можно
подразумевать одно и то же.
Исключение
— это некое специальное событие, которое
сигнализирует об ошибке в программе.
Другими
словами, исключение – это ошибка времени
выполнения.
Классификация
ошибок.
Ошибки
при написании, отладке и работе программ
можно разделить на этапы их времени
возникновения, такие как: ошибки
компиляции, выполнения, компоновки и
логические ошибки.
Ошибки компиляции
обнаруживаются при непосредственной
трансляции исходного кода в объектный
модуль или в машинный код. Невозможно
перейти к стадии времени выполнения
программы, пока не будут ликвидированны
все ошибки стадии компиляции.
Ошибки
выполнения относятся
к самой непредсказуемой группе . Прежде
всего они могут иметь разную природу,
и соответственно по-разному проявляться.
Часть ошибок обнаруживается и
обрабатываются операционной системой.
Ошибки компоновки, как следует из
названия, связаны с проблемами,
обнаруженными при разрешении внешних
ссылок. В разных языках может осуществляться
на различных этапах.
Логические
ошибки имеют разную природу. Так они
могут следовать из ошибок, допущенных
при проектировании, например, при выборе
методов, разработке алгоритмов или
определении структуры классов, а могут
быть непосредственно внесены при
кодировании модуля.
Ошибки
компиляции:
1. Синтаксические
ошибки.
2. Семантические ошибки.
1. Описания идентификаторов.
1. Неинициализированный
указатель.
2.
Неинициализированная переменная.
3. Ошибочная инициализация.
2. Статический контроль
типов.
1. Не корректное
присваивание.
2. Не
корректная операция.
3. Не корректная передача параметров.
Ошибки
выполнения:
1. Синхронные ошибки.
1. Ошибки определения данных.
1. Ошибки передачи.
2.
Ошибки преобразования.
3.
Ошибки перезаписи.
4. Ошибочные
данные.
5. Динамический
контроль типов.
6. Ошибки
индексации.
2. Ошибки накопления
погрешностей.
1. Игнорирование
способов уменьшения погрешностей.
2. Переполнение разрядной
сетки.
3. Арифметические ошибки.
4. Ссылочные ошибки.
5. Ошибки
сети.
6. Ошибки ввода/вывода.
2.
Асинхронные ошибки.
1. Ошибки
виртуальной машины.
2. Ошибки системы.
Ошибки
компоновки
1. Ошибки получения
данных по внешним ссылкам.
2.
Объединение модулей
1. Ошибки
обнаружения модулей.
2.
Ошибка состыковки списков параметров
модулей.
Логические
ошибки
1. Ошибки проектирования
1. Неприменимый метод.
2. Неверный алгоритм.
3. Неверная структура данных.
2.
Ошибки кодирования
1.
Некорректное вычисление.
2. Ошибки реализации алгоритмов.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Подборка по базе: Строительные материалы и их пожароопасные свойства. Виды, назнач, Савина.Т.А_ПГСБЗ-21-3 Определение гранулометрического состава пе, ДЛЯ УРОКА Алгоритм свойства виды.pptx, Лабораторная работа Определение режимов сварки вариант 30.docx, Понятие и виды государственных пенсий.docx, Понятие и виды социальной защиты населения РФ.docx, Курсовая работа Понятие и виды убийств.doc, Лр№2 Определение содержания хлорида калия.docx, Продуктивные виды деятельности. 2 курс..docx, 10 виды вооружений.docx
Виды ошибок. Определение ошибок ПО. Классификация ошибок
Ошибки в программах могут допускаться от самого начального этапа составления алгоритма решения задачи до окончательного оформления программы. Разновидностей ошибок достаточно много. Рассмотрим некоторые группы ошибок и соответствующие примеры:
| Вид ошибки | Пример |
| Неправильная постановка задачи | Правильное решение неверно сформулированной задачи |
| Неверный алгоритм | Выбор алгоритма, который привел к неточному или неэффективному решению задачи |
| Ошибка анализа | Неполный перечень ситуаций, которые могут возникнуть при решении задачи, наличие логических ошибок |
| Семантические ошибки | Неправильное понимание порядка выполнение оператора |
| Синтаксические ошибки | Нарушение правил, которые определяются выбранным ЯП |
| Ошибки при выполнении операций | Использование слишком большого числа, деление на ноль, извлечение квадратного корня из отрицательного не комплексного числа и т.д. |
| Ошибки в данных | Неправильно определен возможный диапазон изменения данных |
| Опечатки | Неправильное использование схожих по внешнему виду символов |
| Ошибки ввода/вывода | Неправильное считывание входных данных, неправильное задание форматов данных |
Также, ошибки могут относится к самым разным частям кода:
- ошибки обращения к данным,
- ошибки описания данных,
- ошибки вычислений,
- ошибки при сравнении,
- ошибки в передаче управления,
- ошибки ввода-вывода,
- ошибки интерфейса,
Ошибки
Ошибки компоновки Ошибки компиляции |
| Классификация ошибок по этапу обработки программы |
Ошибки выполнения
Ошибки определения данных
Проектирования
|
| Классификация ошибок этапа выполнения |
Ошибки анализа.
Связаны либо с неполным учетом ситуации, которые могут возникнуть, либо с неверным решением задачи.
К первому случаю относятся, например, пренебрежение возможностью появления отрицательных значений переменных, малых и больших величин.
Во втором случае обычно имеют место крупные и мелкие логические ошибки, из которых можно назвать:
- Отсутствие заданий начальных значений переменных.
- Неверные условия окончания цикла.
- Неверную индексацию цикла.
- Отсутствие задания условий инициирования цикла.
- Неправильное указание ветви алгоритма для продолжения процесса решения задачи.
Ошибки общего характера.
После того, как найден подходящий алгоритм решения задачи, на этапе программирования также могут появиться ошибки, независимо от выбранного языка.
Такими ошибками могут быть:
- ошибки из-за недостаточного знания или понимания программистом языка программирования или самой машины
- ошибки, допущенные при программировании алгоритма, когда команды, используемые в программе, не обеспечивают последовательности событий, установленной алгоритмом.
Ошибки физического характера.
Можно назвать несколько типов ошибок, вызываемых неверными действиями разработчика:
- Пропуск некоторых операторов.
- Отсутствие необходимых данных.
- Непредусмотренные данные.
- Неверный формат данных.
Большое значение для успешной отладки программы имеют простота и рациональность ее кодирования. Когда программа написана аккуратно и логично, легче избежать ошибок или выявить их в случае возникновения.
Следует избегать возможных «костылей», т.к. чем их больше, тем труднее отладка программы для самого автора, а кто-то другой этого сделать просто не сможет.
Правильность программ.
Любые программы — правильные в отношении их логического построения только для определенного типа данных, поэтому необходимо четко определить область значений данных, в которой программа способна функционировать. Необходимо вводить операторы, позволяющие проверить, находятся ли данные в установленных границах.
Нарушение правильности может проявляться двумя способами:
- неверная синтаксическая конструкция программы
- программа выдает неверные результаты
Правильность синтаксиса означает, что должны быть точно сформированы наименования переменных; арифметические и логические операции должны подчиняться определенным синтаксическим правилам и т.п.
Синтаксические ошибки.
Выявление транслятором синтаксических ошибок представляет собой самый важный и необходимый этап отладки программы.
Если под синтаксической ошибкой понимать «всякое нарушение требований языка программирования», то следует признать, что многие ошибки остаются необнаруженными.
В качестве примеров синтаксических ошибок можно назвать:
- пропуск необходимого знака пунктуации
- несогласованность скобок
- пропуск нужных скобок
- неправильное формирование оператора
- неверное образование имени переменной
- неправильное использование арифметических операторов
- неверное написание зарезервированных слов
Примерами синтаксических ошибок, охватывающих взаимодействие двух или более операторов, могут служить:
- Противоречивые команды.
- Отсутствие условий окончания цикла.
- Дублирование или отсутствие меток.
- Отсутствие описания массива.
- Запрещенный переход.
Советы по устранению ошибок:
- Если ошибок много, то в первую очередь устранить очевидные.
- Обратиться к руководству по программированию на данном языке (справка).
- Выбрать хороший отладочный компилятор.
Неопределенные переменные.
Распространенными источниками программных ошибок являются неопределенные переменные и переменные, для которых не заданы начальные значения.
Определение начальных значений:
- Присваивание.
- Ввод.
- Чтение из файла.
Разные прогоны программы с одними и теми же данными могут привести к различным результатам.
Обнаружение ошибок.
Ситуации, по которым мы определяем, что в программе есть ошибка:
- Отсутствует уверенность в том, что программа начала выполняться.
- Программа начала выполняться, но произошел преждевременный останов с выдачей или без выдачи сообщений о системной ошибке.
- Программа начала выполняться, но зациклилась.
- Программа выдала неправильную информацию.
Любая из этих ситуаций требует проверки последовательности выполнения команд. Обычно для этого пригодна трассировка. Процесс обнаружения ошибок характеризуется выявлением двух мест в программе:
- точки обнаружения
- точки происхождения
Точка обнаружения — место в программе, где ошибка себя проявляет или становится очевидной.
Точка происхождения — место в программе, где возникают условия для появления ошибки.
Точка обнаружения выявляется первой и служит отправным пунктом для поиска точки происхождения. Действительная ошибка исходит не из точки обнаружения, а из точки происхождения.
Логическая ошибка, или алогизм, — это ход мысли, нарушающий какие-то законы или правила логики.
Если ошибка допущена неумышленно, ее называют паралогизмом.
Когда ошибка допускается преднамеренно, ее обычно именуют софизмом, хотя, как увидим далее, многие из софизмов не сводятся к логической ошибке.
Ошибки в доказательствах уже обсуждались. Рассмотрим теперь ошибки в определениях, в делениях (классификациях) и софизмы.
Все определения делятся на неявные и явные.
Явное определение — это определение, имеющее форму равенства двух понятий (определяемого и определяющего).
Неявное определение — определение, не имеющее формы равенства двух понятий.
К неявным относятся определения путем указания отрывка текста, в котором встречается определяемое понятие, определения посредством показа предмета, подпадающего под это понятие, и т. п. В явных определениях отождествляются, приравниваются друг к другу два имени. Одно — определяемое имя, содержание которого требуется раскрыть, другое — определяющее имя, решающее эту задачу.
Обычное словарное определение гиперболы: «Гипербола — это стилистическая фигура, состоящая в образном преувеличении, например: „Наметали стог выше тучи“». Определяющая часть выражается словами «стилистическая фигура, состоящая.» и слагается из двух частей. Сначала понятие гиперболы подводится под более широкое понятие «стилистическая фигура». Затем гипербола отграничивается от всех других стилистических фигур. Это достигается указанием признака «образное преувеличение», присущего только гиперболе и отсутствующего у других стилистических фигур, за которые можно было бы принять гиперболу. Явное определение гиперболы дополняется примером.
К явным определениям, и в частности к классическим, предъявляется ряд достаточно простых и очевидных требований. Их называют правилами определения.
1. Определяемое и определяющее понятия должны быть взаимозаменяемы. Если в каком-то предложении встречается одно из этих понятий, всегда должна существовать возможность заменить его другим. При этом предложение, истинное до замены, должно остаться истинным и после нее.
Для определений через род и видовое отличие это правило формулируется как правило соразмерности определяемого и определяющего понятий: совокупности предметов, охватываемые ими, должны быть одними и теми же.
Соразмерны, например, имена «гомотипия» и «сходство симметричных органов» (скажем, правой и левой руки). Соразмерны также «голкипер» и «вратарь», «нонсенс» и «бессмыслица». Встретив в каком-то предложении слово «нонсенс», мы вправе заменить его на «бессмыслицу» и наоборот.
Если объем определяющего понятия шире, чем объем определяемого, говорят об ошибке слишком широкого определения. Такую ошибку мы допустили бы, определив, к примеру, ромб просто как плоский четырехугольник. В этом случае к ромбам были бы отнесены и трапеции, и все прямоугольники, а не только те, у которых равны все стороны.
Если объем определяющего понятия уже объема определяемого, имеет место ошибка слишком узкого определения. Такую ошибку допускает, в частности, тот, кто определяет ромб как плоский четырехугольник, у которого все стороны и все углы равны. Ромб в этом случае отождествляется со своим частным случаем — квадратом, и из числа ромбов исключаются четырехугольники, у которых не все углы равны.
2. Нельзя определять имя через само себя или определять его через такое другое имя, которое, в свою очередь, определяется через него. Это правило запрещает порочный круг.
Содержат очевидный круг определения «Война есть война» и «Театр — это театр, а не кинотеатр». Задача определения — раскрыть содержание ранее неизвестного имени и сделать его известным. Определение, содержащее круг, разъясняет неизвестное через него же. В итоге неизвестное так и остается неизвестным. Истину можно, к примеру, определить как верное отражение действительности, но только при условии, что до этого верное отражение действительности не определялось как такое, которое даст истину.
3. Определение должно быть ясным. Это означает, что в определяющей части могут использоваться только имена, известные и понятные тем, на кого рассчитано определение. Желательно также, чтобы в этой части не встречались образы, метафоры, сравнения, т. е. все то, что не предполагает однозначного и ясного истолкования.
Можно определить, к примеру, пролегомены как пропедевтику. Но такое определение будет ясным лишь для тех, кто знает, что пропедевтика — это введение в какую-либо науку.
Не особенно ясны определения «Архитектура — это застывшая музыка», «Овал — круг в стесненных обстоятельствах», «Дети — это цветы жизни» и т. п. Они образны, иносказательны, ничего не говорят об определяемом предмете прямо и по существу, каждый человек может понимать их по-своему.
Ясность не является, конечно, абсолютной и неизменной характеристикой. Ясное для одного может оказаться не совсем понятным для другого и совершенно темным и невразумительным для третьего. Представления о ясности меняются и с углублением знаний. На первых порах изучения каких-то объектов даже не вполне совершенное их определение может быть воспринято как успех. Но в дальнейшем первоначальные определения начинают казаться все более туманными. Встает вопрос о замене их более ясными определениями, соответствующими новому, более высокому уровню знания.
Интересно отметить, что наши обычные загадки представляют собой, в сущности, своеобразные определения. Формулировка загадки — это половина определения, его определяющая часть. Отгадка — вторая его половина, определяемая часть. «Утром — на четырех ногах, днем — на двух, вечером — на трех. Что это?» Понятно, что это — человек в разные периоды своей жизни. Саму загадку можно переформулировать так, что она станет одним из возможных его определений.
Контекстуальный характер определений хорошо заметен на некоторых вопросах, подобных загадкам. Сформулированные для конкретного круга людей, они могут казаться странными или даже непонятными за его пределами.
Древний китайский буддист Дэн Инь-фэн однажды задал такую загадку своим ученикам. «Люди умирают сидя и лежа, некоторые умирают даже стоя. А кто умер вниз головой?» — «Мы такого не знаем», — ответили ученики. Тогда Дэн встал на голову и. умер.
Сейчас такого рода «загадка» кажется абсурдом. Но в то давнее время, когда жил Дэн, в атмосфере полемики с существующими обычаями и ритуалом его «загадка» и предложенная им «разгадка» показались вполне естественными. Во всяком случае, его сестра, присутствовавшая при этом, заметила только: «Живой ты, Дэн, пренебрегал обычаями и правилами и вот теперь, будучи мертвым, опять нарушаешь общественный порядок!»
| < Предыдущая | Следующая > |
|---|





