
- •1. Введение в надежность
- •2. Надежность технических элементов
- •2.1. Основные понятия и определения
- •2.2. Функциональные показатели надежности элемента
- •Функция ненадежности элемента
- •2.3. Числовые показатели надежности
- •2.4. Основные законы распределения наработки до отказа
- •Распределение Вейбулла
- •Экспоненциальное распределение
- •Распределение Релея
- •Нормальное распределение
- •Усеченное нормальное распределение
- •Суперпозиции экспоненциальных распределений
- •2.5. Ремонтопригодность технических элементов
- •Функциональные показатели ремонтопригодности
- •Числовые показатели ремонтопригодности
- •Экспоненциальное распределение вероятности восстановления
- •Комплексные показатели ремонтопригодности
- •2.6. Определение показателей надежности элементов по результатам испытаний
- •Определительные испытания
- •Контрольные испытания
- •Лабораторные испытания элементов
- •3. Надежность технических систем
- •3.1. Надежность простых технических систем
- •3.2. Расчет надежности локальных технических систем
- •3.3. Надежностный синтез технических систем
- •4. Надежность программного обеспечения
- •4.1. Общие сведения о программном обеспечении
- •Жизненный цикл программного обеспечения
- •4.2. Показатели надежности программы и программного обеспечения
- •Понятие ошибки программы
- •Модель ошибки сертифицированного по
- •Модели поведения ошибок функционирующего по
- •Функциональные и числовые характеристики надежности по
- •4.3. Повышение надежности программного обеспечения
- •Повышение надежности по путем резервирования
- •Программное резервирование по предусматривает наличие двух (или более) алгоритмов , решения одной и той же задачи с одинаковыми исходными данными и двух по1 и по2 (рис. 4.13).
- •5. Литература
Понятие ошибки программы
Введенное
определение надежности ПО базируется
на понятии «отказ» программы, трактуемом
как наблюдаемое экспертами случайное
событие
(не принадлежность y
множеству
)
при
.
Если используемые при этом технические
средства считаются абсолютно надежными,
а сама программа рассматривается только
как фрагмент некоторой информации, то
невольно возникает вопрос: каковы же
истинные причины отказа? Что «ломается»,
«разрушается» в программе, если она в
случайные моменты вдруг выдает
«неразумные» результаты? Ответы на эти
вопросы может дать понятие ошибки
(неточности, дефекта) программы,
вносимой программистом при написании
алгоритма и текста программы и проявляющей
себя при некотором, возможно весьма
редком сочетании кодов перерабатываемой
информации, погрешности округления при
выполнении вычислительных операций,
адресации команд и др. Эти ошибки попадают
в программный комплекс на стадии
разработки спецификации, проектирования
ПО и реализации программ. Процесс
появления ошибок при разработке ПО
иллюстрируют рис. 4.1 и, особенно рис.
4.3, где N(t)
– число ошибок в момент времени t,
.
Рис. 4.3 – Зависимость числа ошибок N на стадиях разработки ПО
Вероятнее всего,
что наибольшее количество ошибок Nmax
накапливается в программе к концу
этапа реализации (кодирования) программ.
На этапах отладки отдельных программ
и всего ПО число ошибок N(t)
естественно уменьшается относительно
Nmax.
Этому способствует и этап динамического
тестирования, когда ПО (или программа)
полностью и правильно решает тестовые
задачи. К моменту времени tр
, когда заканчивается оформление
документов о приемке-сдаче ПО в
эксплуатацию, в полностью готовом
программном комплексе остается
не выявленных ошибок. При этом, судя по
американскому опыту, для ПО РВ величина
N(0)
0,5 Nmax
и несколько меньше для ПО
универсальных ЭВМ, в частности N(0)
(0,2 - 0,3) Nmax
.
Итак, сертифицированное ПО, принятое в эксплуатацию пользователем, содержит некоторое число N(0) скрытых ошибок, которые могут проявить себя в случайный момент времени функционирующего программного обеспечения (на этапе эксплуатации ПО) и вызвать его отказы.
Классификация программных ошибок
Все ошибки, вносимые разработчиком в программы, можно классифицировать по их целевому назначению на преднамеренные (неслучайные) и случайные (непреднамеренные).
Преднамеренные ошибки вводятся специально в программу с целью искажения или разрушения ее текста (информации) в некоторый заранее заданный момент времени «икс» или при возникновении тех или иных условий. Такие неслучайные ошибки получили название «компьютерные вирусы» или программы-«вандалы». Первоначально подобные программы писались в 60-е годы высококвалифицированными специалистами для компьютерных игр, а с начала 80-х годов – «одержимыми» программистами - фанатами или «хакерами» для уничтожения чужих программ в конкурентных целях или без каких-либо видимых целей (термин «хакер» происходит от английского слова Hack – рубить, кромсать, он отражает цель вирусных программ – «кромсание» других ПО).
Широкому распространению компьютерных вирусов способствовало массовое появление программно совместимых персональных ЭВМ, локальных и глобальных сетей передачи данных, расширение класса слабо подготовленных пользователей ПО.
Термин «преднамеренная ошибка» в ПО трактуется как неслучайная ошибка для ее создателей. Действительно, при написании подпрограммы-вируса ее авторы знают момент времени или условия, когда эта ошибка проявится и вызовет отказ ПО. Чаще всего авторам вируса известны и масштабы последствия отказа программы. Вместе с тем пользователи ПО, в которое внесены вирусы, не располагают информацией о числе вирусов, их характеристиках, моментах времени или условиях проявления и последствиях отказов программ. Для пользователей отказ ПО, вызванный неслучайной ошибкой-вирусом – случайное событие, наблюдаемое в случайный момент времени. После неоднократного наблюдения таких отказов ПО, проявивший себя вирус может быть идентифицирован и для борьбы с ним написана специальная антивирусная программа, удаляющая из текста ПО фрагменты вируса.
Применительно к условиям функционирования АСУ РВ процесс распространения компьютерных вирусов идет значительно медленнее, чем для вычислительных систем коллективного пользования или персональных ЭВМ, объединенных глобальными и локальными сетями. Этому способствует ограниченный доступ к ЭВМ, входящим в состав АСУ РВ, слабые и ограниченные информационные связи со смежными и выше- (ниже) стоящими АСУ, более жесткие правила эксплуатации ЭВМ и высокая квалификация пользователей ПО РВ.
Случайные (непреднамеренные) ошибки вносятся в программы разработчиками алгоритмического и программного обеспечения без какого-либо умысла, чаще всего из-за невысокой квалификации, недостаточной эрудиции в смежных областях знаний (вычислительная математика, вычислительная техника, теория алгоритмов и т.д.), усталости, невнимательности и др. Место нахождения случайной ошибки и условия ее проявления безусловно неизвестны как разработчику, так и пользователю ПО. Поэтому моменты времени проявления ошибки и, как следствие, наблюдаемого отказа программы также являются случайными и для пользователя и для разработчика ПО.
Случайные ошибки могут вызывать сбои ПО и устойчивые отказы программного комплекса.
Ошибка, вызывающая наблюдаемый сбой ПО, функционирует короткое время и может прекратить свое действие при последующем прогоне ПО. При этом исчезает и отказ ПО, последствия которого, как правило, несущественно влияют на качество работы программного комплекса. Природа ошибок, приводящих к сбоям, изучена недостаточно глубоко, статистическое исследование сбоев (и их причин - ошибок) затруднено сложностью их своевременного обнаружения, чему способствует стремление использовать в АСУ малочувствительные (робастные, устойчивые) к сбоям методы и алгоритмы решения задач управления.
Случайные ошибки, вызывающие устойчивые отказы ПО, являются систематическими ошибками программ, которые должны быть устранены программистом-разработчиком или пользователем. Иными словами, при обнаружении устойчивого отказа ПО начинается процесс восстановления программ, заключающейся в обнаружении программистом ошибки и ее исправлении.
Систематические ошибки подразделяются на первичные (закладываются на 1 – 2 этапах жизненного цикла программного комплекса) и вторичные (являются следствием первичных ошибок и возникают на этапах реализации и отладки программ).
С функциональной точки зрения систематические ошибки ПО можно классифицировать на следующие группы:
- вычислительные ошибки (погрешность округления, неустойчивые математические операции, деление на нуль, неединственность решений, неверная индексация и т.п.);
- логические ошибки (пропуски логических условий, неверное использование символов >, ≥, <, ≤ и др.);
- ошибки манипулирования данными (изменения формата упакованных данных, нарушение границ варьирования данными, неверные адресации);
- ошибки сопряжения интерфейсов (межмодульные, межпрограммные, программно-технические, информационные, временные и др.);
- ошибки ввода-вывода информации;
- ошибки документации, технических заданий, инструкций.