Шаг 2.
Классификация ошибок
На этом шаге мы приведем классификацию ошибок.
Ошибки можно объединить в следующие группы [1, 2]:
- ошибки обращения к данным - использование переменных с неустановленными значениями, ошибки индексации, несоответствие структур данных;
- ошибки описания данных - отсутствие явного описания или неполное описание данных, отсутствие или неправильное присвоение начальных значений, несогласованность инициализации переменной с ее описанием;
- ошибки вычислений - наличие в последовательных вычислениях данных недопустимых типов, несогласованность масштабов, приводящая к переполнению или потере точности, возможность деления на нуль;
- ошибки при сравнениях - использование при операциях сравнения величин несовместимых типов, искажение смысла операций отношения (>, =, <) и логических операций (NOT, AND, OR), сравнение чисел с фиксированной и плавающей запятой;
- ошибки в передачах управления - ошибки организации циклов, приводящие к возможности зацикливания или неправильного выполнения цикла, наличие неполного числа выходов в операторах-переключателях;
- ошибки программного интерфейса - несоответствие количества, типов или размерности фактических и формальных параметров подпрограмм при их вызове, несоответствие описаний переменных требованиям на выходе модуля,
несогласованность описаний глобальных переменных и их интерпретации операторами программы (модуль - это замкнутая программа, которую можно вызвать из любого другого модуля в программе и можно отдельно компилировать).
Напомним, что программный интерфейс определяет совокупность допустимых процедур или операций и их параметров, список общих переменных, областей памяти или других объектов;
- ошибки ввода-вывода - неполное или неправильное описание атрибутов файлов или оператора обращения к файлу, несогласованность размера записи и выделенной памяти, неполный контроль и регистрация операций с файлами;
- помехозащита - отсутствие контроля входных данных, отсутствие сохранения исходных данных и возможности повторного запуска модуля при сбоях;
- никогда не считайте, что Вы точно знаете причину ошибочного выполнения программы; очень часто в этом виновна ошибка, встретившаяся гораздо раньше (иногда ее называют отложенной ошибкой);
- и, наконец, ошибки могут быть также следствием неверной работы оборудования - это так называемые аппаратные ошибки. Если в регистр памяти компьютера на одном из этапов работы программы занесено число 12, а при чтении
из этого же регистра оно прочиталось как 11, то и дальнейшие результаты, разумеется, будут неверными. Возможен случай, когда из-за такой ошибки результат вовсе не будет получен (процесс решения задачи аварийно прекратится).
Разработаны надежные методы борьбы с аппаратными ошибками и их последствиями - повторные вычисления с последующим сравнением результатов, хранение нескольких экземпляров данных с целью их защиты от искажения и т.д.
Поэтому среди встречающихся на практике случаев выдачи компьютерами неверных результатов или невыдачи их вообще доля ошибок, порожденных аппаратными средствами, составляет ничтожный процент.
Так, согласно одному из определений компьютер - это вычислительная машина с надежностью военной аппаратуры и ценой изделия бытовой электроники [3].
Приведенная классификация полезна тем, что для каждой из перечисленных групп ошибок и для каждого типа ошибки в группе можно выделить операторы каждого конкретного языка программирования, потенциально допускающие данный тип ошибок.
(1) Майерс Г. Надежность программного обеспечения. - М.: Мир, 1980.
(2) Майерс Г. Искусство тестирования программ. - М.: Финансы и статистика, 1982.
(3) Громов Г.Р. Профессиональные приложения персональных ЭВМ // Микропроцессорные средства и системы, 1985, №3.
На следующем шаге мы поговорим о систематических и случайных ошибках.
Предыдущий шаг
Содержание
Следующий шаг