Ошибка в программе

Автор работы: Пользователь скрыл имя, 22 Марта 2012 в 19:47, реферат

Краткое описание

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

Содержание работы

1.Определение понятия "ошибка в программе"
2. Классификация ошибок в программе
3. Классификация ошибок с точки зрения тестировщика
4. Классификация ошибок по степени их критичности
5. Классификация ошибок в зависимости от их места в жизненном цикле программного изделия
6. Классификация программных ошибок (багов) с точки зрения субъективного восприятия их программистами

Содержимое работы - 1 файл

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

— 113.00 Кб (Скачать файл)

не инициализирована переменная, управляющая циклом;

не инициализирован указатель;

не очищена строка;

не инициализированы регистры;

не сброшен флаг;

данные должны были инициализироваться в другом месте;

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

предположение (не верное), что данные не были инициализированы;

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

не предполагавшаяся модификация данных, выполняемая другими подпрограммами;

ошибочная инициализация;

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

 

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

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

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

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

переход по GOTO;

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

шумы;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

 

Классификация ошибок с точки зрения тестировщика

 

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

Предлагается различать.

1.       Ошибки кодирования.

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

3.       Предложения тестировщика по улучшению программы.

4.       Расхождение с документацией.

5.       Взаимодействие с аппаратурой.

6.       Поведение программы, вызывающее вопросы тестировщика.

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

Классификация ошибок по степени их критичности

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

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

Классификация может быть следующей.

Разрушение системы (Causes crash) - Под ним объединяют все те ошибки в программе, которые могут вызвать крах или зависание всей системы, нарушить стабильность ее работы.

Косметические (Cosmetic) - под этим понятием объединяют ошибки дизайна (например, не тот цвет линии или шрифт), пользовательского интерфейса и т.п., которые не мешают работать программе, но портят ее "товарный вид".

Критические (Critical) – ошибки, которые приводят к «зависанию» или «падению» самой программы, не затрагивая операционной системы в целом.

Error Handling - ошибки при обработке ошибок.

Functional - ошибки функциональности, не относящиеся к критическим.

Setup - ошибки инсталляции.

Minor - малозначимые.

Suggestion – предложения по улучшению программы (так называемые «фичи» (feature).

Во многих отраслевых и корпоративных стандартах для ответственных систем принят подобный принцип классификации ошибок, который является главным

В зависимости от того, какого рода ошибки могут встретиться в конкретной программе, определяется ее уровень. От этого уровня зависят требования, которые предъявляются к ее тестированию и верификации.

 

Классификация ошибок в зависимости от их места в жизненном цикле программного изделия

Еще одним принципом классификации ошибок может быть их место в жизненном цикле программного изделия.

Можно наметить следующую схему такой классификации.

 

1.       Ошибки при постановке задачи и при составлении ТЗ.

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

2.1.   Ошибки в структуре ПО.

2.2.   Ошибки функциональности отдельных модулей.

2.3.   Ошибки программных интерфейсов.

2.4.   Ошибки в спецификациях программ.

2.5.   Недостатки программы и методики тестирования.

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

3.       Ошибки кодирования.

3.1.   Опечатки при кодировании.

3.2.   Ошибки при реализации спецификаций.

3.3.   Не выполнение критериев добротности программы.

3.4.   Недостатки оформления и документирования исходных текстов.

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

4.1.   Не реализована полностью программа и методика тестирования.

4.2.   Не все ошибки отражены в отчете.

4.3.   Не все ошибки исправлены.

4.4.   Недостатки в документировании ошибок.

5.       Ошибки и недочеты в документации на ПО.

6.       Ошибки на этапе эксплуатации и модернизации.

6.1.   Отсутствие системы сбора ошибок и пожеланий пользователей.

6.2.   Не все ошибки фиксируются.

Информация о работе Ошибка в программе