Добавлен: 06.07.2023
Просмотров: 176
Скачиваний: 5
Основные понятия
Надежность программного обеспечения - способность программного продукта безотказно выполнять определенные функции при заданных условиях в течение заданного периода времени с достаточно большой вероятностью.
Степень надежности характеризуется вероятностью работы программного продукта без отказа в течение определенного периода времени.
Существует 4 основные составляющие функциональной надежности
программных систем:
- безотказность - свойство программы выполнять свои функции во время эксплуатации;
- работоспособность - свойство программы корректно работать весь заданный период эксплуатации;
- безопасность - свойство программы быть не опасной для людей и окружающих систем;
- защищенность - свойство программы противостоять случайным или умышленным вторжениям в нее.
Модель анализа надежности программных средств
-
- Факторы, влияющие на надежность ПО
К числу основных факторов, влияющих на надежность ПО отнесены:
- взаимодействие ПО с внешней. Этот фактор вносит наименьший вклад в надежность ПО при современном уровне надежности аппаратуры, ОС и компиляторов;
- взаимодействие с человеком (разработчиком и пользователем);
- организация ПО (проектирование, постановка задачи и способы их достижения и реализации) и качество его разработки. Этот фактор вносит наибольший вклад в надежность;
- тестирование.
- Ошибки ПО
В борьбе со сложностью ПО используются две концепции:
Иерархическая структура. Иерархия позволяет разбить систему по уровням понимания (абстракции, управления). Концепция уровней позволяет анализировать систему, скрывая несущественные для данного уровня детали реализации других уровней. Иерархия позволяет понимать, проектировать и описывать сложные системы.
Независимость. В соответствии с этой концепцией, для минимизации сложности, необходимо максимально усилить независимость элементов системы. Это означает такую декомпозицию системы, чтобы её высокочастотная динамика была заключена в отдельных компонентах, а межкомпонентные взаимодействия (связи) описывали только низкочастотную динамику системы.
Методы обнаружения ошибок, которые базируются на введении в ПО системы различных видов избыточности:
Временная избыточность. Использование части производительности ЭВМ для контроля исполнения и восстановления работоспособности ПО после сбоя.
Информационная избыточность. Дублирование части данных информационной системы для обеспечения надёжности и контроля достоверности данных.
Программная избыточность включает в себя: взаимное недоверие - компоненты системы проектируются, исходя из предположения, что другие компоненты и исходные данные содержат ошибки, и должны пытаться их обнаружить; немедленное обнаружение и регистрацию ошибок; выполнение одинаковых функций разными модулями системы и сопоставление результатов обработки; контроль и восстановление данных с использованием других видов избыточности.
Задача обеспечения ПО устойчивости к ошибкам направлены на применение методов минимизации ущерба, вызванного появлением ошибок, и включают в себя:
- обработку сбоев аппаратуры;
- повторное выполнение операций;
- динамическое изменение конфигурации;
- сокращенное обслуживание в случае отказа отдельных функций системы;
- копирование и восстановление данных;
- изоляцию ошибок.
Дается 4 группы принципов обеспечения надежности:
- предупреждение ошибок;
- обнаружение ошибок;
- исправление ошибок;
- обеспечение устойчивости к ошибкам.
Действия, направленные на минимизацию ошибок и сбоев:
- предотвращение ошибок за счет структурного программирования;
- сокрытие информации или дозированный доступ к данным со стороны программных средств и объектов в объектно-ориентированном программировании;
- отладка;
- устойчивость к сбоям;
- обработка исключительных ситуаций (перехват ошибок, например, деление на ноль) и локализация ошибок и сбоев;
- восстановление программы после сбоя.
В соответствии с ГОСТ 19.004-80 различают следующие виды работ, направленные на устранение ошибок в ПО: проверка, отладка и испытание программы.
Чем интенсивнее использование программного изделия (ПИ), тем быстрее выявляются в нем ошибки.
Рисунок 1 Интенсивность обнаружения ошибок от интенсивности использования
где K – число пользователей, K1 > K2 > K3.
Процентные частоты появления ошибок в ПО по типам ошибок представлены в таблице 1.
Таблица 1 – Процентные частоты появления ошибок в ПО
ТИП ОШИБКИ |
ЧАСТОТА ПОЯВЛЕНИЯ, % |
Не полная или ошибочная спецификация |
28 |
Отклонение от спецификации |
12 |
Пренебрежение правилами программирования |
10 |
Ошибочная выборка данных |
10 |
Ошибочная логика или последовательность операций |
12 |
Ошибочные арифметические операции |
9 |
Нехватка времени для решения |
4 |
Ошибка обработки прерываний |
4 |
Ошибка в исходных данных |
3 |
Неточная запись |
8 |
Как видно из таблицы 1 основное количество ошибок делается из-за неверной спецификации или ТЗ. Эти ошибки, в свою очередь, могут быть разделены на следующие категории:
Таблица 2 – Категории ошибок в ПО
ПРИЧИНА ОШИБКИ |
ЧАСТОТА ПОЯВЛЕНИЯ, % |
Ошибки в числовых значениях |
12 |
Недостаточные требования к точности |
4 |
Ошибочные символы или знаки |
2 |
Ошибки оформления |
15 |
Неправильное описание или требование к аппаратуре |
2 |
Исходные данные для разработки неполные, неточные или ошибочные |
52 |
Двусмысленность требований |
13 |
Из этих таблиц, кстати, следует, на что нужно обращать особое внимание при проведении валидации и верификации ПО (верификация отвечает на вопрос, правильно ли и качественно ли создана программа, а валидация (или аттестация) - на вопрос правильно ли работает программа).
Средства и способы повышения надёжности ПО
На основании методов обнаружения ошибок были разработаны следующие средства повышения надёжности ПО.
Средства, использующие временную избыточность: авторизация доступа пользователей к системе, анализ доступных пользователю ресурсов, выделение ресурсов согласно ролям и уровням подготовки пользователей, разграничение прав доступа пользователей к отдельным задачам, функциям управления, записям и полям баз данных.
Средства обеспечения надёжности, использующие информационную избыточность: ссылочная целостность баз данных обеспечивается за счёт системы внутренних уникальных ключей для всех информационных записей системы, открытая система кодирования, позволяющая пользователю в любой момент изменять коды любых объектов классификации, обеспечивает стыковку системы классификации АИС делопроизводство с ПО других разработчиков, механизмы проверки значений контрольных сумм записей системы, обеспечивают выявление всех несанкционированных модификаций (ошибок, сбоев) информации.
Способы обеспечения и повышения надежности ПО:
- усовершенствование технологии программирования (например, формальное описание этапов программирования при помощи языка UML);
- выбор алгоритмов, не чувствительных к различного рода нарушениям
- вычислительного процесса (использование алгоритмической избыточности);
- резервирование программ - N-версионное программирование;
- верификация и валидация программ с последующей коррекцией.
- Проблемы исследования надежности ПО
К основным проблемам исследований надежности ПО относятся:
- прежде всего - разработка методов оценки и прогнозирования надежности ПО;
- определение основных факторов, влияющих на надежность ПО;
- разработка методов, обеспечивающих достижение заданного уровня надежности ПО;
- совершенствование методов повышения надежности ПО в процессе проектирования и эксплуатации.
- Тестирование ПО
Важным этапом жизненного цикла ПО, определяющим качество и надёжность системы, является тестирование. Тестирование - процесс выполнения программ с намерением найти ошибки и включает в себя следующие этапы:
- автономное тестирование;
- тестирование сопряжений;
- тестирование функций;
- комплексное тестирование;
- тестирование полноты и корректности документации;
- тестирование конфигураций.
Надежность ПО повышается также с помощью применения различных методов тестирования. Полное тестирование ПО невозможно. Обычно применяют следующие виды тестирования:
- тестирование ветвей;
- математическое доказательство правильности алгоритма решения задачи;
- символическое тестирование, еще называется статическим тестированием. Удобно при локализации ошибки, проявление которой выявлено при конкретном узком или строго заданном диапазоне входных значений;
- динамическое тестирование (с помощью динамически генерируемых входных данных), что удобно при быстром тестировании во всем широком диапазоне входных параметров;
- тестирование путей выполнения программы;
- функциональное тестирование;
- проверки по времени выполнения программы;
- проверка по использованию ресурсов и стрессовое тестирование.
Модели надежности ПО
Все модели надежности можно классифицировать по тому, какой из перечисленных процессов они поддерживают (предсказывающие, прогнозные, измеряющие и т.д.). Нужно отметить, что модели надёжности, которые в качестве исходной информации используют данные об интервалах между отказами, можно отнести и к измеряющим, и к оценивающим в равной степени. Некоторые модели, основанные на информации, полученной в ходе тестирования ПО, дают возможность делать прогнозы поведения ПО в процессе эксплуатации.
Аналитические модели дают возможность рассчитывать количественные показатели надежности, основываясь на данных о поведении программы в процессе тестирования (измеряющие и оценивающие модели).
Эмпирические модели базируются на анализе структурных особенностей программ. Они рассматривают зависимость показателей надёжности от числа межмодульных связей, количества циклов в модулях и т.д. Часто эмпирические модели не дают конечных результатов показателей надёжности, однако они включены в классификационную схему, так как развитие этих моделей позволяет выявлять взаимосвязь между сложностью АСОД и его надежностью. Эти модели можно использовать на этапе проектирования ПО, когда осуществляется разбивка на модули и известна его структура.
Аналитические модели представлены двумя группами: динамические модели и статические. В динамических поведение ПС (появление отказов) рассматривается во времени. В статических моделях появление отказов не связывают со временем, а учитывают только зависимость количества ошибок от числа тестовых прогонов (по области ошибок) или зависимость количества ошибок от характеристики входных данных (по области данных).
Для использования динамических моделей необходимо иметь данные о появлении отказов во времени. Если фиксируются интервалы каждого отказа, то получается непрерывная картина появления отказов во времени (группа динамических моделей с непрерывным временем). С другой стороны, может фиксироваться только число отказов за произвольный интервал времени.
Динамические модели надежности
Модель Шумана
Исходными данными для модели Шумана, которая относится к динамическим моделям дискретного времени, собираются в процессе тестирования АСОД в течение фиксированных или случайных временных интервалов.
Каждый интервал - это стадия, на котором выполняется последовательность тестов и фиксируется некоторое число ошибок.
Модель Шумана может быть использована при определенном образе организованной процедуре тестирования. Использование модели Шумана предполагает, что тестирование поводиться в несколько этапов. Каждый этап представляет собой выполнение на полном комплексе разработанных тестовых данных. Выявление ошибки регистрируется, но не исправляются. По завершении этапа на основе собранных данных о поведении ПО на очередном этапе тестирования может быть использована модель Шумана для расчета количественных показателей надежности. При использовании модели Шумана предполагается, что исходное количество ошибок в программе постоянно, и в процессе тестирования может уменьшаться по мере того, как ошибки выявляются и исправляются.