Правила и этапы построения надежного программного обеспечения
Маршрутная карта обеспечения функциональной надежности программного обеспечения
Для создания функционально надежного ПО должны решаться следующие первоочередные задачи:
- • формирование квалифицированных и организованных команд программистов;
- • применение рекомендованных международным сообществом технологии проектирования и хорошо зарекомендовавших себя методов и технических приемов;
- • проведение сертификационных испытаний как в целях оценки соответствия, так и в целях устранения выявленных недостатков. Стандартами [1—7] определена маршрутная карта обеспечения безопасности ПО. В ней исчерпывающим образом указаны все этапы жизненного цикла безопасности ПС. Интерпретация этой маршрутной карты применительно к функциональной надежности ПО представлена на рис. 4.1.
Для обеспечения приемлемого уровня безошибочности ПО при разработке ПО целесообразно руководствоваться следующими правилами:
- • применять методы нисходящего проектирования;
- • обеспечивать модульность программ;
- • осуществлять проверку каждой фазы жизненного цикла разработки программ;
- • стремиться использовать проверенные модули и библиотеки модулей;
- • разрабатывать понятную документацию;
- • создавать документы, которые доступны аудиту;
- • проводить аттестационные испытания.
В соответствии с маршрутной картой и указанными правилами в целях обеспечения функциональной надежности и безопасности ПО должен быть осуществлен следующий порядок действий:
1. Разработка спецификации требований к ПО.
- 2. Разработка архитектуры ПО.
- 3. Создание проекта ПО и его реализация.
- 4. Верификация ПО.
- 5. Интеграция ПО с аппаратными средствами системы.
- 6. Аттестация ПО.

Рис. 4.1. Маршрутная карта функциональной надежности ПО
Модели надежности программного обеспечения
Исходные данные и некоторые понятия
На основании приведенных выше (см. главу 1) определений понятий «ошибка» и «функциональный отказ» можно трактовать надежность программного обеспечения как вероятность того, что отказ ПО, вызывающий отклонение получаемого выходного результата от требуемого за допустимые пределы, не произойдет при определенных условиях внешней среды в течение заданного периода наблюдения. Рассмотрим данную трактовку более подробно, останавливаясь при этом на некоторых понятиях, вошедших в дефиницию трактуемого термина.
Прежде всего следует иметь в виду, что к снижению надежности ПО приводят не все отказы, а только те, которые вызывают недопустимое отклонение выходного результата от требуемого.
Под определенными условиями внешней среды следует понимать описание входных данных и состояние ИС в процессе выполнения программы. Состояние ИС описывается в основном объемом оперативной памяти и зависит от требований к ПО в части его способности нормально функционировать при наличии отказов.
Под способностью подразумеваются свойства ПО, которые закладываются при его проектировании (например, возможность смены программ в памяти; возможность возобновления работ с некоторых контрольных точек и т.д.). В общем случае работа в условиях внешней среды, не предусмотренных техническим заданием и проектом ПО, приведет к снижению надежности последнего.
Заданный период наблюдений, как правило, представляет собой время, необходимое для выполнения поставленной задачи. Выделение определенного интервала наблюдений для оценки качества ПО, по-видимому, целесообразно в случае систем реального времени, в которых непредсказуемыми являются число прогонов любой из действующих программ, состояние базы данных и моменты начала выполнения той или иной программы. В условиях так называемого пакетного режима работы, т.е. когда состояние системы, включая базу данных, достоверно известно, в качестве периода наблюдений следует выбрать рабочий цикл или прогон. В общем случае каждый раз перед повторным выполнением программы необходимо либо восстанавливать состояние памяти, либо осуществлять серию последовательных прогонов программы, при которых определенным образом последовательно изменяется состояние базы данных.
Введем следующие обозначения. Пусть П — машинная программа, которая может быть определена как описание некоторой вычислимой функции F на множестве Е всех значений наборов входных данных, таких, что каждый элемент Е{ множества Е представляет собой набор значений данных, необходимый для выполнения прогона программы:
Интуитивное определение надежности и безопасности ПО может быть уточнено в статистическом смысле на основе следующих простых соображений:
- • выполнение программы П приводит к получению для каждого Et определенного значения функции F(^);
- • множество Е определяет все возможные вычисления в программе П, т.е. каждому набору входных данных Е; соответствует прогон программы П и, наоборот, каждому прогону соответствует некоторый набор входных данных Et;
- • наличие дефектов в программе П приводит к тому, что ей на самом деле соответствует функция F', отличная от заданной функции F;
- • для некоторого Е{ отклонение выхода F'(?j), полученного в результате выполнения программы, не должно превышать некоторый установленный уровень безопасности программного обеспечения S(E;), т.е. безопасность обеспечивается при соблюдении ограничения F'(?f) < S(?t).
Вопрос о том, приводит ли некоторое отклонение выхода к нарушению условия надежности и, особенно, безопасности, должен решаться в каждом конкретном случае отдельно, поскольку все определяется конкретными особенностями поведения системы после нарушения ее работы.