Надёжность программного обеспечения
учебно-методический материал
- Понятие надёжности ПО:
- Составляющие надёжности;
- Понятие отказа.
- Количественные характеристики надёжности:
- Вероятность безотказной работы;
- Коэффициент готовности.
- Методы оценки и измерения характеристик надёжности:
- Метод (модель надёжности) Миллса;
- Метод (модель надёжности испытаний) Бернулли.
Скачать:
Вложение | Размер |
---|---|
![]() | 57.32 КБ |
Предварительный просмотр:
Тема: «Требования к надёжности программных продуктов. Количественные характеристики надёжности.»
План.
- Понятие надёжности ПО:
- Составляющие надёжности;
- Понятие отказа.
- Количественные характеристики надёжности:
- Вероятность безотказной работы;
- Коэффициент готовности.
- Методы оценки и измерения характеристик надёжности:
- Метод (модель надёжности) Миллса;
- Метод (модель надёжности испытаний) Бернулли.
- Надёжность – свойство ПП сохранять работоспособность в течение определённого периода времени. Это комплексное свойство включает две составляющие:
• безошибочность (correctness) — соответствие спецификации;
• устойчивость (robustness) или отказоустойчивость (fault-tolerance) — способность продолжать правильно работать после отказов.
Улучшение первого качества достигается хорошей технологией, предупреждающей ошибки (fault-avoidance). Здесь уместно сказать о надёжности языка программирования. Под надёжностью ЯП будем понимать его свойство, которое характеризуется_вероятностью безошибочного написания и трансляции программ заданного размера. Это определение нуждается в пояснениях. Во-первых, ошибки в написании программы зависят не только (и не столько!) от свойств языка, сколько от квалификации программиста. Поэтому надежность языка — понятие относи тельное; можно представить себе, что один и тот же программист, в равной мере владеющий двумя языками, при использовании одного из них совершает в программе меньше ошибок, чем при использовании другого. Следовательно, вполне естественно говорить, что первый из этих языков более надежен. Во-вторых, в определение вошел также процесс трансляции. Это объясняется двумя причинами. Во-первых, надежность транслятора связана со свойствами языка, во-вторых, способность транслятора обнаруживать ошибки тоже в значительной мере зависит от конструкции языка. Например, указание типа данных, принятое в большинстве распространенных языков, повышает надежность языка, поскольку компилятор осуществляет проверку соответствия типов переменных, участвующих в операции. Однако наличие правила объявления по умолчанию, призванного облегчить труд программиста, может существенно усложнить дело. Однако 100%-ное отсутствие ошибок недостижимо. Устойчивость должна быть относительно любых видов отказов, для ее поддержания создаются специальные программно-аппаратные средства.
Устойчивость характерезует способность ПП к безотказному функционированию при наличии сбоев. Она зависит от уровня неустраненных ошибок и способности ПС реагировать на проявления ошибок так, чтобы это не отражалось на показателях надежности. Последнее определяется:
- эффективностью контроля за доступом к данным (контроль типов, структур,размера);
- степенью обеспечения их секретности и сохранности (защита б/д);
- селекцией достоверных данных, поступающих из внешней среды (живучесть);
- средствами обнаружения аномалий процесса функционирования ПС (диалоговые сообщения).
- Отказ (failure) по ГОСТу — нарушение работоспособности изделия и его соответствия требованиям технической документации (рис. 5.2). Применительно к программам (стандарт IEEE/ANSI) отказ есть неспособность функциональной
единицы системы, зависящей от программы, выполнять требуемую функцию в заданных пределах.
Классификация причин отказов:
1. Физические дефекты:
• внутренние (старение, износ);
• внешние воздействия (радиация, высокая температура).
2. Ошибки людей:
• ошибки эксплуатации или взаимодействия;
• проектные ошибки.
Повреждение (Fault) — неисправность уже появилась, но еще не проявилась вовне. Например, отказала ячейка памяти, но из нее еще не читали или в нее еще не писали. Отказ компонента — это повреждение системы. Время нахождения в неисправном, но работоспособном состоянии называется латентным (скрытым) периодом отказа.
Восстановление (Recovery) — возврат в исправное состояние путем:
• ручного ремонта, замены, исправления;
• автоматически — задействованием резервов;
• самопроизвольно, обычно быстро.
В 3-м случае отказ называется сбоем, т. е. сбой — это кратковременный самовосстанавливающийся отказ. Остальные отказы называются устойчивыми (по умолчанию отказ — устойчивый). В электронной аппаратуре сбои происходят на порядок чаще устойчивых. Их причины — флюктуации питания, ситуации «гонок» сигналов, альфа-частицы и др. В программах аналогично сбоям ведут себя времязависимые ошибки — их иногда называют «мерцающими» (blinking bugs).
Типичный пример восстановления — с помощью резервной (backup) копии данных. Если выполнить восстановление в латентном периоде отказа, то он никогда не проявится вовне — в этом состоит идеальная отказоустойчивость.
- Количественные характеристики надежности программ
Надежность нужно оценивать, измерять, предсказывать — обеспечивать заданные требования к надежности в проекте и проверять их выполнение в продукте [3].
«Внутренняя» характеристика надежности — количество оставшихся ошибок в программе — интересна больше разработчикам, чем потребителям. Для последних важны характеристики, традиционные для теории надежности, основанные на предположении о стохастичеком (случайном во времени) процессе возникновения отказов: среднее время безотказной работы (MTBF — Mean Time Between Failures) и коэффициент готовности. Третья характеристика, взаимосвязанная с первой — интенсивность отказов — среднее их количество в единицу времени. В предположении простейшего потока отказов (отказы независимы, редки, и их вероятность неизменна во времени) P(t) — вероятность безотказной работы за время t — подчиняется закону Пуассона (экспоненциальному распределению вероятностей):
P(t) = е-λt,
где λ — интенсивность отказов (обычно в 1/час).
В табл. 5.4 приведены средние значения MTBF для устойчивых отказов:
Вид компонента | Часы | Годы |
Электромеханическая аппаратура | 102—103 | 10-1 |
Электронная аппаратура | 103-104 | 1 |
Большие интегральные схемы | 106— 10s | 102-104 |
Обычные программы | lO1-lO3 | 10-3-10-1 |
Таким образом, программы вносят наибольший вклад в (не)надежность современных вычислительных систем. Между тем существуют столь ответственные (mission-critical) приложения, где требуется очень малая вероятность отказов. Например, для бортовой системы управления космическим зондом требуется λ=10-9, чтобы вероятность устойчивого отказа в первые 10 лет работы была не более 10-4 (или вероятность безотказной работы 0,9999), что означает MTBF = 100 тысяч лет!
Вообще говоря, λ не постоянна во времени. Для аппаратуры характерна зависимость вида рис. 5.3.
Многие программные продукты (ПП) имеют аналогичный характер изменения надежности: А — период начальной эксплуатации (расширенного бета-тестирования), С — накопление ошибок из-за модификаций.
Если отказ все же произошел, время восстановления должно быть минимальным. Это характеризуется показателем ремонтопригодности коэффициентов готовности (availability):
k=(T-Tnp)/T,
где Т — общее время работы; Tnp — время простоя из-за восстановлений.
В ответственных системах требуется, чтобы значение к почти не отличалось от 1: для цифровых АТС — 2 часа простоя суммарно за 15 лет; для системы управления воздушным движением — 3 с за год!
- Методы оценки и измерения характеристик надежности
«Внутренняя» характеристика — число оставшихся ошибок (безошибочность)— абсолютное или относительное. Считается, что в хорошо отлаженной программе — не более одной ошибки на 1 тыс. строк исходного кода. Для ответственных применений требуется то же на 10 тыс. строк и больше. Например, для СОИ этот показатель был задан как не более 2,5 ошибок на 103 операторов языка Ада.
Как проверить соответствие ПП таким требованиям?
- Метод Миллса (IBM, 1972 г.) использует прием биологов, метод «меченых рыб». Группа тестирования засоряет программу искусственно ошибками и, продолжая тестирование, анализирует долю внесенных ошибок среди обнаруженных.
Пусть внесено s ошибок, обнаружено n собственных и v внесенных ошибок. Предполагая, что вероятность обнаружения внесенных и собственных ошибок одинакова, получим первоначальное количество оставшихся ошибок N=sn/v. Проверка гипотезы: осталось
В методе Руднера (1977 г.) тестирование осуществляется двумя независимыми группами тестеров параллельно, они обнаруживают m1 и m2 ошибок соответственно, из которых m1,2 ошибок — общие. Используя гипергеометрическое распределение, методом максимального правдоподобия может быть найдена оценка числа первоначально содержавшихся в программе ошибок N = m1m2/m1,2.
- Модель последовательности испытаний Бернулли
Рассмотрим для простоты класс программ, имеющих единственный вход и выход, т.е. не содержащих бесконечных циклов. Фазу выполнения программы от начала до завершения будем называть запуском. Все возможные результаты запуска разобьем на два класса: правильные и неправильные (ошибочные). Будем считать, что любой результат всегда можно отнести к одному из этих классов. (Ясно, что по этому вопросу возможны разногласия между изготовителями программы и пользователями, однако будем предполагать, что имеется какой-то общий критерий, например, "клиент всегда прав".) Рассмотрим классическую вероятностную модель последовательности испытаний Бернулли. Пространство элементарных событий в этой модели содержит 2n точек, где n - число испытаний (в данном случае под испытанием подразумевается запуск программы). Каждый запуск программы имеет два исхода: правильный и неправильный. Обозначим вероятность неправильного исхода р, а вероятность правильного - (1-р). Вероятность того, что из n запусков k приведут к неправильному результату, выражается хорошо известной формулой биномиального распределения ([4]).
B(p,n,k) = C(n,k) * pk * (1-р) (n-k), (1)
где C(n,k) - число сочетаний. Вероятность р априори неизвестна, но по результатам запусков известны пик. Величина В как функция р имеет максимум при
р = k/n. (2)
В качестве меры надежности программы можно принять величину
R = 1 - k/n = (n-k)/n, (3)
значения которой (от 0 до 1) согласуются с общепринятым смыслом термина надежность: например, если все запуски окончились с ошибочным результатом (k= n), то надежность -нулевая.
Наиболее существенное предположение в данной модели состоит в том, что запуски программы считаются независимыми. Это означает, что результаты предыдущих запусков не дают никакой информации о результатах следующего. Ясно, что это предположение на практике выполняется не всегда: например, повторный запуск с теми же входными данными даст, очевидно, тот же самый результат/
Следует отметить, что изготовитель программы и ее пользователь располагают разной информацией о ней. Например, изготовителю заведомо известна логика программы, так что по результатам запуска с некоторыми исходными данными он иногда может точно предсказать результаты запусков с другими исходными данными (на этом, в конечном счете, основана любая методика тестирования), и в этом смысле предположение о независимости испытаний не выполняется. Однако пользователя редко интересует устройство программы, для него важно лишь одно: выполняет ли она требуемые функции, поэтому у пользователя нет оснований считать запуски зависимыми. Если же имеется желание использовать информацию об устройстве программы при оценке ее надежности, то следует придумать какую-то более сложную вероятностную модель, которая бы ее учитывала.
Некоторые следствия
Формула (3) позволяет оценить надежность программы по результатам ее запусков. Следует особо остановиться на двух предельных случаях: k - n (нулевая надежность) и k = 0 (абсолютная надежность). В обоих случаях результаты не следует интерпретировать буквально: нет никаких гарантий того, что очередной запуск приведет к тому же реультату, что и предыдущие. Однако с точки зрения пользователя эти случаи совершенно разные. Если нулевая надежность свидетельствует о том, что программа явно непригодна для эксплуатации, то показатель абсолютной надежности не должен вводить в заблуждение: такой вывод нельзя делать по результатам даже очень большого числа запусков. Следует подчеркнуть, что для оценки надежности в этом случае необходимо рассмотреть другие вероятностные модели.
Из формулы (3) следует, что оценка надежности программы растет с увеличением числа ее запусков по гиперболическому закону. Это подтверждает интуитивно ясное соображение о том, что программа тем надежнее, чем больше опыт ее эксплуатации, который зависит как от интенсивности использования программы, так и от тиража компьютера, на котором она установлена и функционирует.
По теме: методические разработки, презентации и конспекты
ПЛАН – КОНСПЕКТ УРОКА НА ТЕМУ: «Программное обеспечение. Классификация программного обеспечения»
много полезного и интересного...
![](/sites/default/files/pictures/2018/08/29/picture-624240-1535518845.jpg)
КОС по ПМ.01 «Разработка программных модулей программного обеспечения для компьютерных систем»
Комплект контрольно - оценочных средств (далее - КОС) по профессиональному модулю 01 «Разработка программных модулей программного обеспечения для компьютерных систем»разработан на основе Федерального ...
![](/sites/default/files/pictures/2018/08/29/picture-624240-1535518845.jpg)
Фонд оценочных средств ПМ. 01 «Разработка программных модулей программного обеспечения для компьютерных систем»
Фонд оценочных средствНазначение: Фонд оценочных средств предназначен контроля и оценки результатов освоения профессионального модуляСпециальность: 230115 «Программирование в компьютерных системах»Инд...
![](/sites/default/files/pictures/2015/11/06/picture-703616-1446802045.jpg)
Рабочие программы практик УП. 02 ПМ.02 Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования по профессии 230103.04 Наладчик аппаратного и программного обеспечения
Рабочие программы практик УП. 02 ПМ.02 Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования по профессии 230103.04 Наладчик аппар...
![](/sites/default/files/pictures/2015/11/06/picture-703616-1446802045.jpg)
Рабочая программа для профессии 230103.04 Наладчик аппаратного и программного обеспечения: ПМ 02 Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования
Рабочая программа для профессии 230103.04 Наладчик аппаратного и программного обеспечения: ПМ 02 Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устр...
![](/sites/default/files/pictures/2015/11/06/picture-703616-1446802045.jpg)
Рабочая программа для профессии 230103.04 Наладчик аппаратного и программного обеспечения: ПМ 04 Модернизация программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования
Рабочая программа для профессии 230103.04 Наладчик аппаратного и программного обеспечения: ПМ 04 Модернизация программного обеспечения персональных компьютеров, серверов, периферийных устр...