Классификация программных ошибок

Автор: Пользователь скрыл имя, 07 Ноября 2011 в 21:11, статья

Описание работы

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

Работа содержит 1 файл

К вопросу о классификации программных ошибок.doc

— 145.00 Кб (Скачать)

     Ошибки  управления потоком.

     В этот раздел относится все то, что  связано с последовательностью  и обстоятельствами выполнения операторов программы.

     Выделяются  подпункты:

     очевидно  неверное поведение программы;

     переход по GOTO;

     логика, основанная на определении вызывающей подпрограммы;

     использование таблиц переходов;

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

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

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

     путаница  имен переменных и команд;

     неверное  предположение о состоянии программы  или данных после вызова;

     обработка ошибок выполнения процедур (имеются  в виду ошибки, когда программист не предусмотрел такую обработку);

     возврат не в ту точку кода (сюда включены несколько видов ошибок: испорченный  стек, переполнение и выход за нижнюю границу стека, выход из подпрограммы по GOTO вместо RETURN);

     прерывания (сюда включены несколько видов ошибок: неверная таблица прерываний, ошибки, связанные с модификацией программами таблицы прерываний, ошибки, связанные с блокированием прерываний, неудачное возобновление работы программы после прерывания);

     завершение  работы программы;

     «зависание» компьютера;

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

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

     неверный  приоритет пользователя или процесса;

     циклы (сюда включены несколько видов ошибок: бесконечный цикл, неверное начальное  значение переменной управления циклом, случайное изменение переменной управления циклом, ошибочный критерий выхода из цикла, команды, которые должны или не должны выполняться внутри цикла, ошибка вложенности циклов);

     условные  операторы (Сюда включены несколько  видов ошибок: неправильное сравнение, неверные результаты сравнений, условный оператор не учитывает модификации программы, ошибки сравнения значений переменных с плавающей точкой из-за округлений, спутаны логические операторы, присваивание вместо сравнения, ошибки в использовании конструкции THRN/ELSE, команды, которые не входят ни в одно из предложений, не проверен флаг, не сброшен флаг. Кроме этого в этом же подразделе рассматривается сложный условный оператор, содержащий многочисленные варианты ветвления. В этом случае возможны следующие ошибки: пропущен блок, выполняемый во всех остальных случаях, неверно определены действия для всех остальных случаев, пропущенные варианты, требуется подразделение одного варианта на несколько, пересекающиеся условия, неверные условия и невозможные случаи). 

     Ошибки  обработки или  интерпретации данных.

     Выделяются  подпункты:

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

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

     проблемы  с обменом сообщений (сюда включены несколько видов ошибок: отправка сообщения не тому процессу или не в тот порт,  ошибка распознавания полученного сообщения, недостающие или несинхронизированные сообщения, сообщение передано только N процессам из N+1,  порча данных, хранящихся на внешнем устройстве, потеря изменений, не сохранены введенные данные, объем данных слишком велик для процесса-получателя, неудачная попытка отмены записи данных). 

     Ситуация  гонок.

     Выделяются  подпункты:

     гонки при обновлении данных;

     предположение, что одно задание завершится до начала другого;

     предположение, что в течение определенного  короткого интервала времени не будет ввода данных;

     предположение, что в течение определенного  короткого интервала времени  не будет прерываний;

     ресурс  только что стал недоступен;

     предположение, что человек, устройство или процесс  ответят быстро;

     реальный  набор опций в процессе перерисовки экрана;

     задание начинается до того, как выполнены  подготовительные действия;

     сообщения приходят одновременно или не в том  порядке, в котором они были отправлены. 

     Повышенные  нагрузки.

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

     требуемый ресурс недоступен;

     не  освобожден ресурс;

     нет сигнала об освобождении устройства;

     старый  файл не удален с накопителя;

     системе не возвращена неиспользуемая память;

     лишние  затраты компьютерного времени;

     нет свободного блока памяти достаточного размера;

     недостаточный размер буфера ввода или очереди;

     не  очищен элемент очереди, буфера или  стека;

     потерянные  сообщения;

     снижение  производительности;

     повышение вероятности ситуационных гонок;

     при повышенной нагрузке объем необязательных данных не сокращается;

     не  распознается сокращенный вывод  другого процесса при повышенной загрузке;

     не  приостанавливаются задания с низким приоритетом;

     задания с низким приоритетом вообще не выполняются.

     В этом разделе хотелось бы обратить внимание на следующее:

     1) Часть ошибок из этого раздела  могут проявляться и при не  очень высоких нагрузках, но, возможно, они будут проявляться реже  и через более длительные интервалы времени;

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

     Аппаратное  обеспечение.

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

     неверное  устройство;

     неверный  адрес устройства;

     устройство  недоступно;

     устройство  возвращено не в тот пул;

     данному пользователю или программе использование  устройства запрещено;

     данный  уровень привилегий не позволяет получить доступ к устройству;

     шумы;

     прерывание  связи;

     проблемы  тайм-аута;

     неверный  накопитель;

     не  проверяется содержимое текущего диска;

     не  закрыт файл;

     неожиданный конец файла;

     ошибки, связанные с длиной файлов и дисковыми  секторами;

     неверный  код операции или команды;

     неверно интерпретирован код состояния  или возврата;

     ошибка  протокола обмена с устройством;

     неполное  использование возможностей устройства;

     игнорирование или неправильно используется механизм страничного управления памятью;

     игнорирование ограничений канала;

     предположения о наличии или отсутствии устройства или его инициализации;

     программируемые функциональные клавиши.

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

     Контроль  версий и идентификаторов.

     Выделяются  подпункты:

     таинственным  образом появляются старые ошибки;

     обновление  не всех копий данных или программных  файлов;

     отсутствие  заголовка;

     отсутствие  номера версии;

     неверный номер версии в заголовке экрана;

     отсутствующая или неверная информация об авторских  правах;

     программа, скомпилированная из архивной копии, не соответствует проданному варианту;

     готовые диски содержат неверный код или  данные. 

     Ошибки  тестирования.

     Являются ошибками сотрудников группы тестирования, а не программы. Выделяются подпункты:

     пропущенные ошибки в программе;

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

     пропуск ошибок на экране;

     не  документирована проблема (отмечаются следующие причины этого: тестировщик  неаккуратно ведет записи, тестировщик  не уверен в том, что данные действия программы являются ошибочными, ошибка показалась слишком незначительной, тестировщик считает, что ошибку не будет исправлена, тестировщика просили не документировать больше подобные ошибки);

     не  выполнен запланированный тест (отмечаются следующие причины этого: тестовые материалы и записи плохо организованы, тестировщику скучно выполнять однотипные примеры, в одном тесте объединено слишком много действий);

     не  описаны временные зависимости  появления ошибок;

     слишком сложный тест (не позволяет ошибку и добиться ее воспроизведения);

     преувеличения;

     личные  выпады. 

     Ошибка  выявлена и забыта.

     Описываются ошибки использования результатов  тестирования. По-моему, раздел следует  объединить с предыдущим. Выделяются подпункты:

     не  составлен итоговый отчет;

     серьезная проблема не документирована повторно;

     не  проверено исправление;

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

Информация о работе Классификация программных ошибок