Телефон: +7 (383)-202-16-86

Статья опубликована в рамках: Научного журнала «Студенческий» № 10(30)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5, скачать журнал часть 6

Библиографическое описание:
Акимов Д.Н., Соколов В.В., Можаров Г.П. СРАВНИТЕЛЬНЫЙ АНАЛИЗ МОДЕЛЕЙ НАДЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ // Студенческий: электрон. научн. журн. 2018. № 10(30). URL: https://sibac.info/journal/student/30/108453 (дата обращения: 24.08.2019).

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

Акимов Данил Николаевич

магистрант, кафедра ИУ6 МГТУ им. Н.Э. Баумана,

РФ, г. Москва

Соколов Владимир Владимирович

магистрант, кафедра ИУ6 МГТУ им. Н.Э. Баумана,

РФ, г. Москва

Можаров Геннадий Петрович

канд. техн. наук, доц., кафедра ИУ6 МГТУ им. Н.Э. Баумана,

РФ, г. Москва

АННОТАЦИЯ

Рассмотрена проблема получения количественной оценки надежности для сложных программ. Особенное внимание уделено программам, функциони­рующим в составе программно-технических комплексов систем управления. Рассмотрена и уточнена суть понятия «надежности» программного обеспечения с приведением ряда его характерных особенностей. Установлено соответствие между жизненным циклом ПО и его влиянием на возникновение программных ошибок. Приведены три подхода к оценке надежности программы. Первый ориентирован на оценку уровня надежности, достигнутого к данному моменту времени. Второй − на пред­сказание уровня надежности, который может быть достигнут в ПО. Третий – на оценку надежности по серии тестовых прогонов. Произведено сравнение всех трех подходов с выводами о выгодности применения каждого из них на разных этапах жизненного цикла ПО.

Ключевые слова: программное обеспечение, модели надежности, сопровождение, надежность, жизненный цикл

 

Введение

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

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

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

Математические модели оценки надежности ПО

Все математические модели надежности ПО (рисунок 1) можно подразделить на прогнозирующие (эмпирические), оценочные (динамические) и измерительные (статические).

Оценочные модели – наиболее распространенный и развитый тип моделей. Они служат для априорного оценивания надежности по серии тестовых прогонов и обычно используются на этапе тестирования и отладки. По поведению программы в тестовой среде определяется вероятность отказа в операционной среде. Предполагается, что тестовая и операционная среды связаны известными соотношениями. Среди оценочных моделей надежности наиболее распространенными являются экспоненциальные, среди которых можно выделить модели Шумана, Lа Раdula, Джелинского-Моранды, Шика-Волвертона, Мусы и некоторые другие.

 

Рисунок 1. Математические модели надежности

 

В качестве примера рассмотри более подробно модель Джелинского-Моранды. Эта модель является одной из самых ранних среди программных моделей надежности. Множество существующих программных моделей надежности – это варианты или расширения этой основной модели. Предположения в этой модели включают следующее:

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

Интенсивностью отказов программы в -ом интервале будет:

,                           (1)

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

Например, начальная интенсивность отказа:

и после первого отказа, интенсивность отказа уменьшается:

 

и т.д.. Плотность распределения вероятности и интегральная функция распределения вероятности случайной величины  будут равны:

и

,

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

.                                               (2)

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

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

.

Приравняв первую частную производную относительно , получаем

Полагая  , можно получить .

Для оценки неизвестных параметров  и  снова используем логарифм функции наибольшего правдоподобия и получаем:

.

Беря производные  относительно  и , получаем:

 

и

.

Из этих двух уравнений получаем:

                                                    (3)

и

.                 (4)

Одним их подходов, к оценке надежности ПО, является метод, который ба­зируется на моделировании процессов выявления отказов и исправления причин отказов в ПО − неоднородными случайными процессами Пуассона. Причиной отказа ПО является проявление одной или нескольких ошибок. Общий подход к моделированию процессов неоднородными случай­ными процессами Пуассона дан по [2]:

,       (5)

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

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

.                                                  (6)

Вероятность того, что на интервале  ошибки не проявятся, определяет­ся  соответствии с (5) и (6):

.                             (7)

Для оценки показателя (7) необходимо по заданной статистике доработки программного обеспечения по результатам опытной эксплуатации ПО постро­ить функцию, аппроксимирующую  или . На основании этого получить верхнюю оценку  или , с заданным уровнем доверия. После подстановки этой оценки в (13) можно вычислить показатель безотказности ПО.

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

При использовании этого метода необходимо учитывать, что с ростом на­дежности программного обеспечения (на этапе его сопровождения) экспоненци­альная модель не в полной мере отражает реальную оценки среднего числа про­явлений ошибок  в единицу времени, т.к. после некоторого периода отладки количество отказов ПО из-за проявлений ошибок не будет стремиться к 0, а скорее к некоторой фиксированной средней величине  и достигнув ее оста­нется константной т.е.  [2]. Последнее связано с объективным фактом, что невозможно гарантировать внесение новой ошибки при устранении обнаруженной ранее и низким тестовым покрытием, как в процессе испытаний, так и в процессе эксплуатации сложных программ.

Вероятность ошибки в программе

Количество ошибок , содержащееся в ПО, как правило, зависит от объема исходного кода ПО, точнее, зависит от количества элементов на используемом языке программирования. Поэтому одним из способов оценить вероятность ошибки в программе является применение «метрики затраченных усилий» [3]. Она основана на расчете следующих параметров:

 − число уникальных операндов в коде программы (переменные и кон­станты);

− число уникальных операторов в коде программы;

 − число операндов в программе;

  − число операторов в программе;

 – объема модуля

                                                           (8)

где

, .                                             (9)

Оценка среднего числа ошибок в коде

,                                                             (10)

где   эмпирическое значение. В работе [5]. Значение коэффициен­та  должен корректироваться для конкретной группы разработчиков, вы­бранной технологии проектирования и построения программы. Используя метрику «затраченных усилий» запишем вероятность ошибки в про­грамме

.                                                            (11)

Исследуем вопрос о том какова вероятность () того, что более одной ошибке содержится в одной строке программы, т.е. набор операнд или оператор в строке содержит одну и более ошибку при условии, что внесение ошибки в элемент программы носит случайный характер. Тогда, согласно формуле (10)  и , для большинства программ написанных на современных языках программирования , т.е.  и используя комбинаторный анализ легко показать [5], что

,                                                      (12)

где .

Произведенный анализ показывает, что в практических приложениях можно исключить из рассмотрения случай, когда в одном локализованном месте про­граммы (допустим строке) встречается две и более ошибки в элементах про­граммы, и с некоторой осторожностью говорить о «независимости» проявлений ошибок в программе.

Примеры расчета надежности ПО

Модель Джелинского-Моранды:

Тестовые наборы, а также результаты тестирования представлены в таблицах 1а и 1б.

Буквенные обозначения:

1)    - интервал времени между моментами обнаружения  и i ошибок;

2)      — номер обнаруженной ошибки;

3)      – число обнаруженных ошибок;

4)     – плотность вероятности для момента t;

5)     – среднее время между отказами.

Таблица 1а.

Тестирование по модели Джелинского-Моранды (ожидаемые результаты)

N

ti

f(ti)

Tc

3

0,083

4,236

0,847

 

0,25

1,24

 

 

0,117

2,752

 

 

 

 

 

2

0,3

1,191

0,081

 

0,233

1,519

 

 

 

 

 

1

0,5

0,736

не определено

 

 

 

 

2

0,6

0,531

0,099

 

0,17

0,593

 

 

Расчет ожидаемых результатов:

1 этап:

2 этап:

3 этап:

4 этап:

 

Таблица 1б.

Тестирование по модели Джелинского-Моранды (рассчитанные результаты)

n

ti

f(ti)

Tc

3

0,083

4,236

0,847

 

0,25

1,24

 

 

0,117

2,752

 

 

 

 

 

2

0,3

1,191

0,081

 

0,233

1,519

 

 

 

 

 

1

0,5

0,736

не определено

 

 

 

 

2

0,6

0,531

0,099

 

0,17

0,593

 

 

Вероятность ошибки в программе:

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

Исходные данные для модели, а также полученные в результате тестирования результаты представлены в таблице 2.

Буквенные обозначения:

1)     - число уникальных операндов в коде программы (переменные и константы);

2)     - число уникальных операторов в коде программы;

3)     - число операторов в программе;

4)     - число операндов в программе;

5)     - вероятность ошибки в программе.

Таблица 2.

Тестирование по модели оценки вероятности ошибки в программе

n1

n2

N1

N2

Pf

ожид.

рассчит.

12

18

130

20

0.001633

0.00164

28

20

283

44

0.001862

0.00186

35

25

484

74

0.001970

0.00197

42

25

634

100

0.002022

0.00202

56

25

927

134

0.002113

0.00211

 

Расчет ожидаемых значений:

1 этап:

2 этап:

3 этап:

4 этап:

5 этап:

Как видно из результатов тестирования показатель, характеризующий вероятность ошибки в программе, при введенных данных ведет себя стабильно. Его значение не превышает 0,002.

Сравнительная оценка моделей надежности ПО

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

Если говорить о динамических моделях надежности, то здесь учитываются времена появления ошибок, предположения о вероятности их появлений и пр. Поэтому все они разрешают вносить корректировки в программу на текущем этапе тестирования. Так, например, модель Шумана позволяет проводить изменения в тексте программы непосредственно во время тестирования и не разбивать процесс на этапы, что может значительно упростить задачу исправления ошибок для программиста, которому не придется дожидаться окончания тестирования ПО. Модель La Padula также позволяет вносить изменения в текст программы по ходу тестирования, но кроме того она является прогнозной и, основываясь на данных, полученных в ходе тести­рования, дает возможность предсказать вероятность безотказ­ной работы программы на последующих этапах ее выполнения. В моделях Джелинского-Моранды и Шика-Волвертона тестирование основывается на фиксации момента времени, в который была найдена очередная ошибка, считая от начала работы программы. Модель Мусы учитывает только те ошибки, которые приводят к отказу, поэтому при тестировании допускается возникновение более одной ошибки за один тест, если они не приводят к отказу. Модель переходных вероятностей позволяет накапливать знания об ошибках, но ее использование не всегда целесообразно из-за больших расходов, связанных с применением, а также из-за необходимости наличия программной поддержки и громоздких вычислений.

Статистические модели принципиально отличаются от динамических, так как в них тестирование основывается только на статистических данных. Корректировка программы осуществляется после проведения тестирования. Так, например, модель Миллса предполагает внесение своих ошибок, так называемое «засорение» программы. Модель проста и наглядна, но из-за внесения искусственных ошибок есть вероятность большого влияния субъективного фактора. А в модели Коркорэна используются результаты N-тестирований и не учитываются времена появления ошибок и сбоев.

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

Заключение

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

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

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

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

 

Список литературы:

  1. Андреев А.М., Можаров Г.П., Сюзев В.В. Многопроцессорные вычислительные системы: теоретический анализ, математические модели и применение. М.: Изд-во  МГТУ  им. Н.Э. Баумана. 2011. 334 с.
  2. Половко А.М., Гуров С.В. Основы теории надежности.  2-е изд., перераб. и доп.  СПб.: БХВ-Петербург, 2008. 704 с.
  3. Андреев А.М., Березкин Д.В., Можаров Г.П., Свирин Ил.С. Математическое моделирование надежности компьютерных систем и сетей // Вестник МГТУ им. Баумана. Сер. «Приборостроение». 2012. Спец. выпуск «Моделирование и идентификация компьютерных систем и сетей».  с. 3-46.
  4. Стенли P. Перечислительная комбинаторика: Пер. с англ. Т. 2. М.: Мир. 2009. 767 с.
  5. Баранов В.И., Стечкин Б.С. Экстремальные комбина­торные задачи и их приложения. 2-е изд., исправ, и доп. М.: ФИЗМАТЛИТ. 2004. 240 с.

Оставить комментарий