Главные вкладки

    Надёжность программного обеспечения
    учебно-методический материал

    1. Понятие надёжности ПО:
      1. Составляющие надёжности;
      2. Понятие отказа.
    2. Количественные характеристики надёжности:
      1. Вероятность безотказной работы;
      2. Коэффициент готовности.
    3. Методы оценки и измерения характеристик надёжности:
      1. Метод (модель надёжности) Миллса;
      2. Метод (модель надёжности испытаний) Бернулли.

    Скачать:

    ВложениеРазмер
    Файл nadyozhnost_po.docx57.32 КБ

    Предварительный просмотр:

    Тема: «Требования к надёжности программных продуктов. Количественные характеристики надёжности.»

    План.

    1. Понятие надёжности ПО:
    1. Составляющие надёжности;
    2. Понятие отказа.
    1. Количественные характеристики надёжности:
    1. Вероятность безотказной работы;
    2. Коэффициент готовности.
    1. Методы оценки и измерения характеристик надёжности:
    1. Метод (модель надёжности) Миллса;
    2. Метод (модель надёжности испытаний) Бернулли.
    1. Надёжность – свойство ПП сохранять работоспособность в течение определённого периода времени. Это комплексное свойство включает две составляющие:

    •  безошибочность (correctness) — соответствие спецификации;

    •  устойчивость   (robustness)   или   отказоустойчивость   (fault-tolerance) — способность продолжать правильно работать после отказов.

    Улучшение первого качества достигается хорошей технологией, предупреждающей ошибки (fault-avoidance). Здесь уместно сказать о надёжности языка программирования. Под надёжностью ЯП будем понимать его свойство, которое характеризуется_вероятностью безошибочного написания и трансляции программ заданного размера. Это определение нуждается в пояснениях. Во-первых, ошибки в написании программы зависят не только (и не столько!) от свойств языка, сколько от квалификации программиста. Поэтому надежность языка — понятие относи тельное; можно представить себе, что один и тот же программист, в равной мере владеющий двумя языками, при использовании одного из них совершает в программе меньше ошибок, чем при использовании другого. Следовательно, вполне естественно говорить, что первый из этих языков более надежен. Во-вторых, в определение вошел также процесс трансляции. Это объясняется двумя причинами. Во-первых, надежность транслятора связана со свойствами языка, во-вторых, способность транслятора обнаруживать ошибки тоже в значительной мере зависит от конструкции языка. Например, указание типа данных, принятое в большинстве распространенных языков, повышает надежность языка, поскольку компилятор осуществляет проверку соответствия типов переменных, участвующих в операции. Однако наличие правила объявления по умолчанию, призванного облегчить труд программиста, может существенно усложнить дело. Однако 100%-ное отсутствие ошибок недостижимо. Устойчивость должна быть относительно любых видов отказов, для ее поддержания создаются специальные программно-аппаратные средства.

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

    • эффективностью контроля за доступом к данным (контроль типов, структур,размера);                                                          
    • степенью обеспечения их секретности и сохранности (защита б/д);                                                          
    • селекцией достоверных данных, поступающих из внешней среды (живучесть);
    • средствами обнаружения аномалий процесса функционирования ПС (диалоговые сообщения).
    1. Отказ (failure) по ГОСТу — нарушение работоспособности изделия и его соответствия требованиям технической документации (рис. 5.2). Применительно к программам (стандарт IEEE/ANSI) отказ есть неспособность функциональной

    единицы системы, зависящей от программы, выполнять требуемую функцию в заданных пределах.

    Классификация причин отказов:

    1. Физические дефекты:

    •  внутренние (старение, износ);

    •  внешние воздействия (радиация, высокая температура).

    2. Ошибки людей:

    •  ошибки эксплуатации или взаимодействия;

    •  проектные ошибки.

    Повреждение (Fault) — неисправность уже появилась, но еще не проявилась вовне. Например, отказала ячейка памяти, но из нее еще не читали или в нее еще не писали. Отказ компонента — это повреждение системы. Время нахождения в неисправном, но работоспособном состоянии называется латентным (скрытым) периодом отказа.

    Восстановление (Recovery) — возврат в исправное состояние путем:

    •  ручного ремонта, замены, исправления;

    •  автоматически — задействованием резервов;

    •  самопроизвольно, обычно быстро.

    В 3-м случае отказ называется сбоем, т. е. сбой — это кратковременный самовосстанавливающийся отказ. Остальные отказы называются устойчивыми (по умолчанию отказ — устойчивый). В электронной аппаратуре сбои происходят на порядок чаще устойчивых. Их причины — флюктуации питания, ситуации «гонок» сигналов, альфа-частицы и др. В программах аналогично сбоям ведут себя времязависимые ошибки — их иногда называют «мерцающими» (blinking bugs).

    Типичный пример восстановления — с помощью резервной (backup) копии данных. Если выполнить восстановление в латентном периоде отказа, то он никогда не проявится вовне — в этом состоит идеальная отказоустойчивость.

    1. Количественные характеристики надежности программ

    Надежность нужно оценивать, измерять, предсказывать — обеспечивать заданные требования к надежности в проекте и проверять их выполнение в продукте [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. Методы оценки и измерения характеристик надежности

    «Внутренняя» характеристика — число оставшихся ошибок (безошибочность)— абсолютное или относительное. Считается, что в хорошо отлаженной программе — не более одной ошибки на 1 тыс. строк исходного кода. Для ответственных применений требуется то же на 10 тыс. строк и больше. Например, для СОИ этот показатель был задан как не более 2,5 ошибок на 103 операторов языка Ада.

    Как проверить соответствие ПП таким требованиям?

    1. Метод Миллса (IBM, 1972 г.) использует прием биологов, метод «меченых рыб». Группа тестирования засоряет программу искусственно ошибками и, продолжая тестирование, анализирует долю внесенных ошибок среди обнаруженных.

    Пусть внесено s ошибок, обнаружено n собственных и v внесенных ошибок. Предполагая, что вероятность обнаружения внесенных и собственных ошибок одинакова, получим первоначальное количество оставшихся ошибок N=sn/v. Проверка гипотезы: осталось k и s/(s + к + 1) при n< k.

    В методе Руднера (1977 г.) тестирование осуществляется двумя независимыми группами тестеров параллельно, они обнаруживают m1 и m2 ошибок соответственно, из которых m1,2 ошибок — общие. Используя гипергеометрическое распределение, методом максимального правдоподобия может быть найдена оценка числа первоначально содержавшихся в программе ошибок N = m1m2/m1,2.

    1. Модель последовательности испытаний Бернулли

    Рассмотрим для простоты класс программ, имеющих единственный вход и выход, т.е. не содержащих бесконечных циклов. Фазу выполнения программы от начала до завершения будем называть запуском. Все возможные результаты запуска разобьем на два класса: правильные и неправильные (ошибочные). Будем считать, что любой результат всегда можно отнести к одному из этих классов. (Ясно, что по этому вопросу возможны разногласия между изготовителями программы и пользователями, однако будем предполагать, что имеется какой-то общий критерий, например, "клиент всегда прав".) Рассмотрим классическую вероятностную модель последовательности испытаний Бернулли. Пространство элементарных событий в этой модели содержит 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) следует, что оценка надежности программы растет с увеличением числа ее запусков по гиперболическому закону. Это подтверждает интуитивно ясное соображение о том, что программа тем надежнее, чем больше опыт ее эксплуатации, который зависит как от интенсивности использования программы, так и от тиража компьютера, на котором она установлена и функционирует.


    По теме: методические разработки, презентации и конспекты

    Программа профессионального модуля "Разработка программных модулей программного обеспечения"

    Образовательная программа профессионального модуля разработана на основе Федерального государственного образовательного стандарта по специальностям среднего профессионального образования (СПО) 230115 ...

    КОС по ПМ.01 «Разработка программных модулей программного обеспечения для компьютерных систем»

    Комплект контрольно - оценочных средств (далее - КОС) по профессиональному модулю 01 «Разработка программных модулей программного обеспечения для компьютерных систем»разработан на основе Федерального ...

    Фонд оценочных средств ПМ. 01 «Разработка программных модулей программного обеспечения для компьютерных систем»

    Фонд оценочных средствНазначение: Фонд оценочных средств предназначен контроля и оценки результатов освоения профессионального модуляСпециальность: 230115 «Программирование в компьютерных системах»Инд...

    Рабочие программы практик УП. 02 ПМ.02 Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования по профессии 230103.04 Наладчик аппаратного и программного обеспечения

    Рабочие программы практик УП. 02 ПМ.02 Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования по профессии 230103.04 Наладчик аппар...

    Рабочая программа для профессии 230103.04 Наладчик аппаратного и программного обеспечения: ПМ 02 Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования

    Рабочая программа для профессии 230103.04 Наладчик аппаратного и программного обеспечения: ПМ 02 Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устр...

    Рабочая программа для профессии 230103.04 Наладчик аппаратного и программного обеспечения: ПМ 04 Модернизация программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования

    Рабочая программа для профессии 230103.04 Наладчик аппаратного и программного обеспечения:   ПМ 04 Модернизация программного обеспечения персональных компьютеров, серверов, периферийных устр...