Понятие ошибки программы

Введенное определение надежности ПО базируется на понятии «отказ» программы, трактуемом как наблюдаемое экспертами случайное событие Понятие ошибки программы - student2.ru (не принадлежность y множеству Понятие ошибки программы - student2.ru ) при Понятие ошибки программы - student2.ru . Если используемые при этом технические средства считаются абсолютно надежными, а сама программа рассматривается только как фрагмент некоторой информации, то невольно возникает вопрос: каковы же истинные причины отказа? Что «ломается», «разрушается» в программе, если она в случайные моменты вдруг выдает «неразумные» результаты? Ответы на эти вопросы может дать понятие ошибки (неточности, дефекта) программы, вносимой программистом при написании алгоритма и текста программы и проявляющей себя при некотором, возможно весьма редком сочетании кодов перерабатываемой информации, погрешности округления при выполнении вычислительных операций, адресации команд и др. Эти ошибки попадают в программный комплекс на стадии разработки спецификации, проектирования ПО и реализации программ. Процесс появления ошибок при разработке ПО иллюстрируют рис. 4.1 и, особенно рис. 4.3, где N(t) – число ошибок в момент времени t, Понятие ошибки программы - student2.ru .

Понятие ошибки программы - student2.ru

Рис. 4.3 – Зависимость числа ошибок N на стадиях разработки ПО

Вероятнее всего, что наибольшее количество ошибок Nmax накапливается в программе к концу этапа реализации (кодирования) программ. На этапах отладки отдельных программ и всего ПО число ошибок N(t) естественно уменьшается относительно Nmax. Этому способствует и этап динамического тестирования, когда ПО (или программа) полностью и правильно решает тестовые задачи. К моменту времени tр , когда заканчивается оформление документов о приемке-сдаче ПО в эксплуатацию, в полностью готовом программном комплексе остается Понятие ошибки программы - student2.ru не выявленных ошибок. При этом, судя по американскому опыту, для ПО РВ величина N(0) » 0,5 Nmax и несколько меньше для ПО универсальных ЭВМ, в частности N(0) »(0,2 - 0,3) Nmax .

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

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

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

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

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

Термин «преднамеренная ошибка» в ПО трактуется как неслучайная ошибка для ее создателей. Действительно, при написании подпрограммы-вируса ее авторы знают момент времени или условия, когда эта ошибка проявится и вызовет отказ ПО. Чаще всего авторам вируса известны и масштабы последствия отказа программы. Вместе с тем пользователи ПО, в которое внесены вирусы, не располагают информацией о числе вирусов, их характеристиках, моментах времени или условиях проявления и последствиях отказов программ. Для пользователей отказ ПО, вызванный неслучайной ошибкой-вирусом – случайное событие, наблюдаемое в случайный момент времени. После неоднократного наблюдения таких отказов ПО, проявивший себя вирус может быть идентифицирован и для борьбы с ним написана специальная антивирусная программа, удаляющая из текста ПО фрагменты вируса.

Применительно к условиям функционирования АСУ РВ процесс распространения компьютерных вирусов идет значительно медленнее, чем для вычислительных систем коллективного пользования или персональных ЭВМ, объединенных глобальными и локальными сетями. Этому способствует ограниченный доступ к ЭВМ, входящим в состав АСУ РВ, слабые и ограниченные информационные связи со смежными и выше- (ниже) стоящими АСУ, более жесткие правила эксплуатации ЭВМ и высокая квалификация пользователей ПО РВ.

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

Случайные ошибки могут вызывать сбои ПО и устойчивые отказы программного комплекса.

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

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

Систематические ошибки подразделяются на первичные (закладываются на 1 – 2 этапах жизненного цикла программного комплекса) и вторичные (являются следствием первичных ошибок и возникают на этапах реализации и отладки программ).

С функциональной точки зрения систематические ошибки ПО можно классифицировать на следующие группы:

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

- логические ошибки (пропуски логических условий, неверное использование символов >, ≥, <, ≤ и др.);

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

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

- ошибки ввода-вывода информации;

- ошибки документации, технических заданий, инструкций.

Наши рекомендации