Статья опубликована в рамках: Научного журнала «Студенческий» № 10(30)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5, скачать журнал часть 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-тестирований и не учитываются времена появления ошибок и сбоев.
Эмпирические модели часто не дают окончательного представления о показателях надежности ПО, однако, как уже было сказано, использование их на этапе проектирования ПС полезно для прогнозирования требующихся ресурсов тестирования, уточнения плановых сроков завершения проекта и т.д. Так, например, модель сложности позволяет принимать оптимальные проектные решения, опираясь на характеристики ошибок, оцениваемые с помощью имитационной модели. Кроме того, она дает возможность прогнозировать требуемые ресурсы тестирования, определять меру сложности программ и предсказывать возможное число ошибок. При этом у данной модели существуют такие недостатки, как, например, высокая стоимость метода, поскольку он требует дополнительных затрат на составление имитационной модели, а также – приблизительный характер получаемых показателей. Модель, определяющая время доводки программ, позволяет определять возможное число необходимых исправлений и время для доведения ПО до рабочего состояния при тестовой сборке системы.
Заключение
Рассмотрена проблема получения количественной оценки надежности сложного ПО, используемого для современных вычислительных систем различного назначения, и обоснована необходимость различного подхода к ее оценке на различных этапах жизненного цикла программ.
Произведенный анализ показывает, что в практических приложениях можно исключить из рассмотрения случай, когда в одном локализованном месте программы (допустим, строке) встречается две и более ошибки в элементах программы, и с некоторой осторожностью говорить о «независимости» проявлений ошибок в программе.
Эмпирические модели целесообразно использовать на этапах проектирования и сборки, так как они позволяют принимать оптимальные проектные решения. Динамические модели надежности ПО возможно использовать на этапе сборки и отладки ПО, так как они дают возможность вносить исправления в программу по мере тестирования. А статистические модели удобно использовать после отладки программы, а также после внедрения на этапе сопровождения, так как в таких моделях тестирование основывается на введении тестовых наборов и сборе статистической информации о проведенных тестах.
Для этапов опытной эксплуатации и модернизации приведена модель отказов, основанная на неоднородном процессе Пуассона. Для этапа сопровождения может быть получена ожидаемая оценка надежности программы, основанная на метрике «затраченных усилий».
Список литературы:
- Андреев А.М., Можаров Г.П., Сюзев В.В. Многопроцессорные вычислительные системы: теоретический анализ, математические модели и применение. М.: Изд-во МГТУ им. Н.Э. Баумана. 2011. 334 с.
- Половко А.М., Гуров С.В. Основы теории надежности. 2-е изд., перераб. и доп. СПб.: БХВ-Петербург, 2008. 704 с.
- Андреев А.М., Березкин Д.В., Можаров Г.П., Свирин Ил.С. Математическое моделирование надежности компьютерных систем и сетей // Вестник МГТУ им. Баумана. Сер. «Приборостроение». 2012. Спец. выпуск «Моделирование и идентификация компьютерных систем и сетей». с. 3-46.
- Стенли P. Перечислительная комбинаторика: Пер. с англ. Т. 2. М.: Мир. 2009. 767 с.
- Баранов В.И., Стечкин Б.С. Экстремальные комбинаторные задачи и их приложения. 2-е изд., исправ, и доп. М.: ФИЗМАТЛИТ. 2004. 240 с.
Оставить комментарий