Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PGTU / 5 семестр / Надежность / Nadezhnost_4-ya_redaktsia.doc
Скачиваний:
336
Добавлен:
29.03.2015
Размер:
12.07 Mб
Скачать

Типы ошибок в программном обеспечении

Существуют три типа ошибок программирования:

синтаксические ошибки,

ошибки выполнения,

семантические ошибки.

В любом языке программирования каждое предложение (оператор) строится по определенным правилам. Когда в программе встречается предложение, которое нарушает эти правила, то говорят о наличии синтак­сической ошибки. Синтаксическая ошибка легко обнаруживается компи­ляторами и интерпретаторами языка и легко исправляется.

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

Семантические (смысловые) ошибкиэто применение опе­раторов, которые не дают нужного эффекта (например, (ab) вместо (a+b)), ошибка в структуре алгоритма, в логической взаи­мосвязи его частей, в применении алгоритма к тем данным, к которым он неприменим и т.д. Правила семан­тики не фор­мализуемы. Поэтому поиск и устранение семантической ошибки и составляет основу отладки.

3.1.2. Причины появления ошибок в программном обеспечении

Прежде всего необходимо понять первопричины ошибок программ­ного обеспечения и связать их с процессом создания программных ком­плексов. В данном учебном пособии считается, что создание программного обеспечения можно описать как ряд процессов перевода, начинающихся с постановки задачи и заканчивающихся большим набором подробных ин­струкций, управляющих ЭВМ при решении этой задачи. Создание про­граммного обеспечения в этом случае – просто совокупность процессов трансляции, т.е. перевода исходной задачи в различные промежуточные решения, пока наконец не будет получен подробный набор машинных ко­манд [1]. Когда не удается полно и точно перевести некоторое представле­ние задачи или решения в другое, более детальное, тогда и возникают ошибки в программном обеспечении.

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

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

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

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

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

4. Последний процесс – перевод описания логики программы в пред­ложения языка программирования. Хотя на этом шаге часто делается много ошибок, они обычно незначительные, легко обнаруживаются и кор­ректируются.

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

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

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

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

И наконец, при непосредственном взаимодействии пользователя с ПО, если слабо разработан диалог человек – машина (отсутствие «друже­ственного интерфейса»), вероятность ошибки пользователя увеличивается. Ошибки пользователя же ставят систему в новые, непредвиденные обстоя­тельства, увеличивая таким образом шансы проявления оставшихся в про­грамме ошибок.

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

Соседние файлы в папке Надежность