Анализ моделей прогнозирования надежности программных средств
Хунов Т. Х., НИУ Высшая школа экономики, МИЭМ tkhkhunov@hse.ru
Аннотация
В данной работе приведен анализ моделей прогнозирования надежности программных средств. Рассмотрены 3 основных моделей: Джелински-Моранды, простая экспоненциальная и метод Хол-стеда числа оставшихся в ПО ошибок.
1 Введение
На сегодняшний день программное обеспечение (ПО) является одной из важнейших частей современного мира. ПО - это движущая сила, обеспечивающая функционирование торговли, промышленности и связывает страны и людей. Развитие мировой экономики тесно связано с развитием в сфере ПО и вычислительных средств.
Исходя из этого растет необходимость прогнозирования надежности и качества ПО на различных этапах жизненного цикла.
2 Модели прогнозирования надежности ПО
Прогнозирование надежности ПО выполняется с помощью математических моделей, в основе которых лежит теория вероятности и математической статистики.
В этих математических моделях осуществляется поиск общего числа ошибок, появляющихся в программе. Помимо этого, при помощи этих моделей можно найти надежность программы.
В наши дни можно выделить более десятка самых известных моделей надежности программного обеспечения (см. рис. 1). В этой работе все модели были сгруппированы по признакам.
- время нахождения ошибок в ПО;
- сложность самой программы;
- разметка ошибок (преждевременное
внесение в программное обеспечение
ошибок, которые известны заранее);
- структура входных данных.
- текстовая структура программы.
Рис. 1. Классификация моделей надежности ПО
В самой работе производится анализ трех моделей оценки надежности программных средств: модель Джелински-Моранды, простая экспоненциальная модель и метод Холстеда числа оставшихся в ПО ошибок.
2.1 Модель Джелински-Моранды
Разработана она в 1996г. Также модель называют моделью роста надежности. В ее основе лежит предположение об экспоненциальной зависимости плотности вероятности интервалов времени между проявлением ошибок от интенсивности ошибок. Полагается, что интенсивность ошибок на каждом случайном интервале времени линейно зависит от количества оставшихся в программе ошибок.
Она является одной из самых распространенных моделей надежности ПО.
Одним из вариантов прогнозирования надежности является наблюдение за ПО в течение некоторого отрезка времени и изображение на графике значений между ошибками, которые появляются последовательно. На Рисунке 2 изображено повышение надежности ПО (Я;, Я2, Яз - функции надежности, т. е. вероятность того, что в программе не будет ни одной ошибки или
ошибка не будет выявлена на промежутке времени от 0 до t).
Рис. 2. Увеличение надежности ПО при исправлении в нем ошибок.
Для создания модели необходимо ввести несколько предположений:
/. = К; постоянно до того, как ошибки будут выявлены и исправлены;
= 1(: = Л ■ (.V - ; - т.е. Z(t) прямо пропорционально числу оставшихся в ПО ошибок, где N - неопределенное начальное число ошибок, i - количество выявленных в эксплуатации программы ошибок, K - константа.
После выявления некоторого количества ошибок, неизвестные N и K уже могут оцениваться. Допустим, что обнаружено п ошибок, а х[1], х[2], ..., х[п] - это отрезки времени между выявленными ошибками. Тогда, учитывая то, что Z(t) постоянно между ошибками, вероятностная плотность для х/// станет равна:
Х[1]}
Результатом N будет оценка конечного числа ошибок. В том случае, когда известно значение К, имеется возможность использования этого уравнения, с целью предсказания времени до выявления (п + 1)-й ошибки и следующих ошибок.
Этот случай является частным случаем Шуманской модели. Допустим, что отрезки времени отладки между выявлениями 2-х ошибок имеет зависимость, называема экспоненциальной, и частота возникновения этих ошибок прямо пропорциональна числу необнаруженных ошибок. Функция плотности распределения времени обнаружения i-ой ошибки, считаема со времени обнаружения ^-1)-ой ошибки имеет следующим вид: р(^) = А^ ■ ехр ( ■ ££}, где
/.. = Ф ■ ' Л" : 1 и N - число ошибок, которые присутствуют изначально в ПО.
Вероятность безотказной работы ПО вычисляется следующим образом:
РЮ = где Л- = CD X
(1) (2)
Со - коэффициент пропорциональности, N0 - изначальное число ошибок в ПО. В (1) уравнении отчет времени начинается с момента последней (и1)-ой ошибки.
Используя метод максимального правдоподобия, есть возможность нахождения Со и N0. Функция правдоподобия будет иметь
следующий вид: " к к
Р = П^ = П Со ■ № - * + "
dt
¡=1 ¡=1 к
L = InF = У [1п(Св(Л?э - i +1) ) - Cd(N0 - i + i) ■ tj] Из этого находим условия для выявления
экстремумов:
1с
dl
¿=1
дСп
dl dN
= 0,
¡=i
LN0 - i +1
CD ■ t;
= 0
Отсюда находим значения CD и N0:
Ef=1CN0-i+i)-f
Sf=1CPfo-i+i)-ti
yk . ■ ¿4=1
(4)
Уравнение (4) решается методом перебора. Решив (3) и (4), получаем СО = 0,02 и N = 4, соответственно. Тогда из (1 и 2) получаем Л(£,) = ехрГ0,02 ■ . Следователь-
но, Х4 = 0,02 и примерное время до последующего отказа программного обеспечения составит < t4 >= 1/Х, = 50ч.
В основе этой модели лежит несколько допущений:
- интенсивность обнаружения ошибок R(t) прямо пропорциональна текущему числу ошибок в ПО;
- все ошибки могут появиться с одинаковой вероятностью;
- время до следующей ошибки распределено экспоненциально;
- корректировка ошибок осуществляется без внесения в программу других ошибок;
- R(t) = const между 2-мя соседними ошибками;
Учитывая во внимание эти допущения, функцию распределения интенсивности отказов между (/ - 1) и /-ой отказами имеет следующим вид:
ч
где К - коэффициент пропорциональности; N0- начальное число ошибок в ПО.
Все отрезки времени = — 1г_ 1 имеют экспоненциальное распределение:
Учитывая во внимание принцип максимального правдоподобия, значения К и N0 получаются следующими: К
(5)ЕГ=1
Xf=1CN0-i+l}-ilt3'
1 _ ri'Zf-^iltj
N0—i+ 1 Sf=1(N0-i+l>-Jtj
(6)
Получившееся уравнение (6) является нелинейным и его трудно решить численными методами.
При помощи данной модели имеется возможность для выявления времени до нахождения следующей ошибки (п+1 и время, которое требуется для выявления всех ошибок Т:
1
^1+1 =
Т =
At
£=п+1
Есть возможность посчитать Ап - число ошибок, необходимых найти и устранить для повышения наработки между обнаружением ошибок от Т1 до Т2:
An = Nn
^ тР
(7)
Также, можно посчитать временя А?, потраченное на тестирование, служащее для устранения Ап ошибок и повысить наработку от Т1 до Ту.
Л, = Л": ■ Т: ■ — (8)
Коэффициент готовности:
где ? - период проверок, - время затрат ресурсов на проверки, ?в - время, которое потребуется для восстановления работоспособности ПО.
Коэффициент простоя Ки = 1 — Кт,
Время, которое потребуется для отладки:
Тт — к
Н-^-К2 JVC^r+O
)
где Н - число систем, в которых корректно работает программа; - время, необходимое для эксплуатации программы; с
- это коэффициент увеличения затрат ресурсов на единицу машинного времени.
Средняя наработка на отказ: Ï" = -
>1
Из (8) уравнения видно, что время, требующееся на тестирование, прямо пропорционально квадрату начального количества ошибок Т0 в ПО. Например: допустим, .V- - 1 v С С ; Г- - 1час. Требуется повысить надежность ПО с Ti = 1час до Т2 = 1 месяц . В этом случае из (7) уравнения An = 999, из этого следует, что надо обнаружить все ошибки для того, чтобы за 1 месяц ПО работало устойчиво. Для этого необходимо время At ™ 60 дней. На практике понадобится в разы меньше времени и будет выявлено меньше ошибок. И есть вероятность, что за малое время будет обнаружено 99% ошибок в той части программы, выполняющейся чаще. А в части ПО, исполняющейся меньше, не обнаруженными останутся до 99% ошибок. Из этого можно сделать вывод, что важным является точная подборка входных данных при тестировании и вывод о необходимости уменьшать время тестирования за счет меньшего тестирования ма-лоиспользуемых ветвей ПО.
2.2 Простая экспоненциальная модель.
Отличительным свойством этой модели от модели Джелински-Моранды является то, что J[(t) Ф const.
Допустим N(t) - число шибок, обнаруженных к моменту времени t и функция риска прямо пропорциональна числу ошибок, не обнаруженных к моменту t в про-
Если продифференцировать обе части
уравнения по времени:
¿1 (¡1
Учитывая, что есть (число
ошибок, выявленных в единицу времени), мы получим дифференциальное уравнение:
dR g)
— К ' F.'.'t = " с начальными условия-
0) =К N0.
ми N(0) =0
Если решить это уравнение, получится следующая функция:
= К - Nn
К ■ t)
(9)
Значениями К и N0 для первых п ошибок
будет следующие выражения: 1
к =
У ^--(У1 tY
Используя (9) уравнение мы сможем определить время, которое необходимо для уменьшения интенсивности появления ошибок с Rift) до Rift): г±
— In —
Е R,
2.3 Метод Холстеда оценки числа оставшихся в ПО ошибок
На сегодняшний день это модель является единственной, используя которую мы сможем оценить количество ожидаемых ошибок в программном обеспечении еще на этапе разработки технического задания на ПО.
В этом случае для программы существует понятие длины самой программы N и объем программы (измеряемое в битах) V:
N = ni -log2ni + П2 -log2n2, V = N-log2(ni + n2), (10)
где n1 - количество различных операций (например, таких как IF, =, DO, PRINT и т.п.); n2 - количество различных переменных и констант.
Следующим шагом рассматриваем потенциальный объем программы (в битах) V*:
(11) Cn2 + 2)Xl0g2(n2+2)'
где nl - количество входных и выходных переменных.
Величину П2 можно будет обнаружить на стадии технического задания или технического проекта на разработку программного обеспечения.
Еще вводится понятие уровня программы L, который определяется как отношение потенциального объема V* к объему
ir*
.
v
Также вводятся величины:
^ L Vs'
.''. = !'■ Г - уровень языка программирования. Значения l для некоторых языков программирования: ассемблер - 0,88; фортран - 1,14; PL-1 - 1,53; С/С++ - 1,7; Pascal -1,8; JAVA - 1,9.
Следовательно,
CF'-P
_ Е _ <у*93 S [¡LxS)
(12) (13)
оценка времени, которое затрачивается на разработку программного обеспечения, где S - параметр Страуда.
Параметр Страуда - это психофизиологическая характеристика времени, которая необходима человеческому мозгу для выполнения элементарной мыслительной операции. S лежит в интервале от 5 до 20 различий в секунду. Холстедом используется значение S = 18, которое характеризует процесс программирования как довольно напряженную умственную работу.
Используя (13) уравнение мы сможем оценить выигрыш во времени разработки при переходе от одного языка программирования Л/ к другому языку Л2:
ж тг-т2 К
Тг Т, Л2
Например, выигрыш при переходе с C/C++ на JAVA составит около 10%, а с ассемблера на JAVA - 50%.
Основными предположения этой модели являются:
- общее количество ожидаемых ошибок N в программе определяется сложностью ее создания.
- мозг человека может обработать одновременно и безошибочно «7 ± 2» объектов (гипотеза Миллера).
Если взять нижнюю границу в 5 объектов и добавить еще один объект, мы получим максимальное число п\ = 6 различных входных и выходных параметров для потенциально безошибочной программы. Тогда потенциальный объем 1'0* по (10): Vo = (6 + 2} X 1иц2(б + 2) = 24 логических бита.
Из этого следует, что после обработки 24 битов информации на языке программирования человек совершит 1 ошибку. %)3 24-3
3000
А 2,16
Это значит, что на каждые 3000 бит объема V* приходится 1 ошибка. Тогда для реального объема ПО из (20) следует, что количество ошибок в программном обеспечении:
(14)
N
(ухУ2 зааахл
В качестве примера оценим по формуле (13) потенциальное количество ошибок в АСКРО:
Подсистема АСКРО Количество входных параметров
Метеокомплекс 10
Зона наблюдения 60
Промплощадка 40
АКРБ 40
Выбросы 14
Расход 6
Итого: 170
Учтем также, что на каждое значение приходится значение АУ и ПУ, а также на каждую подсистему приходится примерно по 8 параметров - контроль неисправности измерительных каналов и достоверности получаемых значений и датчиков.
Итак, = 170 X (8 + 2) = 1700 - число входных и выходных параметров, что дает для потенциального объема программы величину V = (1700 + 2) X log2(1700 + 2) ж 18300 бит.
Тогда из (14) получаем оценку для числа ошибок в АСКРО (учитывая, что используются языки программирования C/C++ и JAVA) N = 61800. И по формуле (13) получаем оценку для времени разработки T = 6150 лет, что превышает реальный срок разработки 1,5 года в 4100 раз. Поэтому количество ошибок в АСКРО можно оценить, уменьшив в это количество раз полученную ранее величину N и учтя количество работающих над ней программистов (около 5). Тогда получим число ошибок равное 100, что более соответствует действительности.
Выводы
Модель Джелински-Моранды актуальна при моделировании надежности небольшого ПО. Экспоненциальная модель приме ня-лась при тестировании реальных ПО и соответствует действительности.
На данный момент невозможно выбрать наилучшую модель среди предложенных, так как они используются в разных ситуациях.
Модели дают удовлетворительный результат при относительно высоких уровнях интенсивности проявления ошибок, т. е. при невысокой надежности ПО. В этих случаях модели предназначены для приближенной оценки:
- потенциально возможной надежности функционирования программ в процессе испытаний и эксплуатации;
- числа обнаруженных ошибок;
- время тестирования, требуемое для обнаружения следующей ошибки;
- время, необходимое для обнаружения с заданной вероятностью большинства имеющихся ошибок.
Математическая модель надежности дает плохой результат при низкой интенсивности отказов.
Большинство моделей сложны в приме -нении, так как требуют знаний таких характеристик ПО, которые можно вычислить только после длительной эксплуатации. Основываясь на данном обзоре, можно сделать вывод: отсутствует общее решение проблемы надежности программного обеспечения и существуют множество частных решений, которые не учитывают такие факторы как интенсивность внесения и устранения ошибок в программе.
Список литературы
Military Handbook. Electronic reliability design handbook, 1998.
Handbook of 217 plus. Reliability prediction models, 2006.
Липаев В.В. Надежность программных средств. - М.: СИНТЕГ, 1998.
Гуляев В.А., Коростиль Ю.М. Анализ и исследование методов оценки и увеличения надежности программ. - Киев, 1990.