Приложение N 12

к руководству по безопасности

при использовании атомной энергии

"Рекомендации по порядку выполнения

анализа надежности систем и элементов

атомных станций, важных для безопасности,

и их функций", утвержденному приказом

Федеральной службы по экологическому,

технологическому и атомному надзору

от "__" _________ 20__ г. N _____

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
ПО ВЫПОЛНЕНИЮ АНАЛИЗА НАДЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

1. К числу основных факторов, влияющих на надежность ПО, относятся:

взаимодействие ПО с внешней средой (программно-технические средства, трансляторы, операционная система);

взаимодействие с человеком (разработчиком или пользователем);

организация ПО (проектирование, постановка задачи и способы их достижения и реализации) и качество его разработки. Этот фактор оказывает наибольшее влияние на надежность ПО;

тестирование.

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

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

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

К логическим ошибкам относится, например, неправильная передача управления, ошибки при формировании условия поиска. Логические ошибки приводят к искажению алгоритма обработки данных. К ним также относится семантическая несовместимость модулей используемого ПО, которая возникает, когда идентичные, синтаксически корректные символы используются для обозначения различных понятий.

К ошибкам ввода-вывода относятся, например, недопустимые форматы данных, неправильное указание размещения на экране или бумаге, неверное задание числа разрядов.

Ошибки компиляции могут быть вызваны дефектом компилятора.

К ошибкам пользователей относятся, например, неправильное понимание выводимых указаний, ввод недопустимых данных.

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

Некорректное использование ПО может произойти, если ранее разработанное ПО применяется, например, после модификации технических средств.

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

3. Модели надежности ПО.

Модели надежности ПО принято разделять на аналитические и эмпирические.

Аналитические модели надежности ПО дают возможность рассчитывать количественные показатели надежности, основываясь на данных о поведении программы в процессе тестирования. Аналитические модели представлены двумя группами: динамические модели и статические модели. В динамических моделях поведение ПО (появление отказов) рассматривается во времени. В статических моделях появление отказов не связывают со временем, а учитывают только зависимость количества ошибок от числа тестовых прогонов (по области ошибок) или зависимость количества ошибок от характеристики входных данных (по области данных). К динамическим моделям относятся, в частности, модель надежности Шумана [10, 11, 12], модели роста надежности ПО или SGRM-модели [13]. К статическим моделям относятся, в частности, модель надежности Миллса [10, 14], модель надежности Липова [9, 10, 15], модель последовательности испытаний Бернулли [10, 11, 16].

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

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

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