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

 

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

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

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

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

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

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

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

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

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

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

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

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

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