
- •Обзорная лекция
- •Санкт-Петербург
- •1. Введение
- •2. Основные показатели надежности по
- •3. Модели, основанные на использовании функции риска
- •3.1. Модель Джелинского-Моранды.
- •3.2 Простая экспоненциальная модель.
- •3.3. Модель Шика-Уолвертона.
- •3.4. Модели Липова.
- •3.5. Геометрические модели.
- •3.6. Модель Шнейдевинда.
- •4. Модели, основанные на методе "посева" и разметки ошибок
- •5. Модели, основанные на использовании структуры входных данных
- •5.1. Модель Нельсона. Применение последовательного анализа Вальда для снижения количества прогонов программы.
- •5.2. Модель, разработанная специалистами компании ibm.
- •6. Повышение надежности программного обеспечения.
Министерство образования РФ
СПб Государственный электротехнический университет "ЛЭТИ"
Кафедра МО ЭВМ
Обзорная лекция
по дисциплине “Метрология программного обеспечения”
на тему
"Математические модели и методы повышения надежности ПО"
Доцент каф. МОЭВМ Кирьянчиков Владимир Андреевич
Санкт-Петербург
2001
1. Введение
Степень надежности ПО может быть оценена при помощи некоторых метрик. Модели надежности ПО служат для предсказания значений этих метрик, и кроме того, они позволяют оценить надежность на различных этапах тестирования программного продукта. Например, в том случае, если к некоторому моменту тестирования количество обнаруженных и исправленных ошибок уже достаточно велико, это может создать впечатление, что тестирование продукта близится к завершению, то есть ошибок в программе осталось немного. Однако, это может совершенно не соответствовать действительности, и как раз использование моделей надежности программ может помочь прояснить подобную ситуацию.
2. Основные показатели надежности по
Пусть P(t) - вероятность того, что ни одной ошибки не будет обнаружено на временном интервале [0,t]. Тогда вероятность хотя бы одного отказа за этот период будет Q(t) = 1 – P(t), и плотность вероятности отказов можно записать как
Рассмотрим функцию риска R(t), как условную плотность вероятности отказа программы в момент времени t, при условии, что до этого момента отказов не было:
(2.1)
Функция
риска имеет размерность [1/время].
Из выражения (2.1), ясно, что
,
и, следовательно,
или
(2.2)
Равенство (2.2) является одним из самых важных в теории надежности. Различные виды поведения функции риска во времени порождают различные модели надежности ПО. Интенсивность обнаружения ошибок (функция риска), вместе с вероятностью безотказной работы программы и количеством оставшихся в программе ошибок, являются важнейшими показателями надежности программ.
Прогон
программы – это набор действий, включающий
в себя: ввод в программу одной из возможных
комбинаций Ei
пространства входных данных E ();
выполнение программы, которое заканчивается
либо получением результата F(Ei),
либо отказом.
Для
некоторых наборов входных данных Ei,
отклонение полученного на выходе
результата (F’(Ei))
от требуемого результата F(Ei)
находится в пределах допустимого
отклонения
,
то есть выполняется следующее неравенство:
а
для всех остальных Ei
из подмножества
,
выполнение программы не дает приемлемого
результата, то есть
Случаи, описанные неравенством (2.4), называются отказами программы.
Рассмотрим
бинарную переменную
:
Тогда статистическая оценка вероятности отказа программы в течении m прогонов будет равна:
3. Модели, основанные на использовании функции риска
3.1. Модель Джелинского-Моранды.
Это одна из первых и простейших моделей классического типа, послужившая основой для дальнейших разработок в этом направлении. Модель была использована при разработке таких значительных программных проектов, как программа Аполло (некоторых ее модулей). Модель Джелинского-Моранды основана на следующих предположениях:
Интенсивность обнаружения ошибок R(t) пропорциональна текущему количеству ошибок в программе, то есть изначальному количеству ошибок за вычетом количества ошибок , уже обнаруженных на данный момент.
Все ошибки в программе равновероятны и не зависят друг от друга.
Все ошибки имеют одинаковую степень важности.
Время до следующего отказа программы распределено экспоненциально.
Исправление ошибок происходит без внесения в программу новых ошибок.
R(t) = const в промежутке между любыми двумя соседними моментами обнаружения ошибок.
Согласно этим предположениям, функция риска будет представлена как:
В этой формуле t – это произвольный момент времени между обнаружением (i-1)-й и i-й ошибок; K – неизвестный коэффициент масштабирования; B – начальное количество оставшихся в программе ошибок (также неизвестное).
Таким образом, если в течении времени t было обнаружено (i-1) ошибок, это означает, что в программе еще остается B-(i-1) необнаруженных ошибок.
Полагая, что
и используя предпосылку 6, а также равенство (2.2), можно заключить, что все Xi имеют экспоненциальное распределение:
и
плотность вероятности отказа,
соответственно, равна:
Тогда функцию правдоподобия (согласно предпосылке 2) можно записать как
или, переходя к логарифму функции правдоподобия, имеем:
(3.2)
Максимум функции правдоподобия можно найти, используя следующие условия:
(3.3)
(3.4)
Из формулы (3.3) получается оценка максимального правдоподобия для K:
(3.5)
Подставляя
выражение (3.5) в (3.4), находим нелинейное
уравнение для вычисления
–оценки
максимального правдоподобия для B:
(3.6)
Это уравнение можно упростить перед тем, как искать его решение, если записать его с использованием следующих обозначений:
(3.7)
где
Поскольку
имеют смысл лишь целочисленные значения
,
функции из выражения (3.7) можно рассматривать
только для целочисленных аргументов.
Более того,
,
поскольку n ошибок с программе уже
обнаружено. Таким образом, оценка
максимального правдоподобия для B может
быть получена с помощью вычисления
начальных значений функций fn(m)
и gn(m)
для m=n+1, n+2…, и анализа разницы
|fn(m)-gn(m)|.
Поскольку
правая и левая части выражения (3.7)
одинаково монотонны, это порождает
проблему единственности решения, а
также проблему его существования.
Конечное решение
в области
существует тогда и только тогда, когда
выполняется неравенство:
(3.8)
В
противном случае оценка максимального
правдоподобия будет
Условие
(3.8) можно переписать в более удобном
виде:
(3.9)
где A – то же самое выражение, что и в формуле (3.7). Необходимо отметить, что, A является интегральной характеристикой n встретившихся в программе за время тестирования ошибок, и представляет (в статистическом смысле) набор интервалов Xi между ошибками.
Рассмотрим
пример использования модели
Джелинского-Моранды, в котором она
применяется к следующим экспериментальным
данным: в течение 250 дней было обнаружено
26 ошибок, интервалы между обнаружением
которых представлены в таблице 3.1. Для
этих данных мы имеем n=26 и
.
Условие (3.9) выполняется, и, таким образом,
оценка максимального правдоподобия
имеет единственное решение. В таблице
3.2 представлены начальные значения
функций, входящих в уравнение (3.7), для
множества аргументов
Наилучшим
решением для уравнения (3.7) является
m=32 (соответствующая строка в таблице
дает минимальное значение разницы
функций по модулю, то есть максимально
приближает ее к нулю, что нам и требуется),
то есть
=
m-1=31. Из выражения (3.5) находим
= 0.007.
Среднее
время
(время, оставшееся до обнаружения (n+1)-й
ошибки) есть инвертированная оценка
интенсивности для предыдущей ошибки:
В
этом примере,
,
и время до полного завершения тестирования
Таблица 3.1. Интервалы между обнаружением ошибок.
I |
Xi |
i |
Xi |
i |
Xi |
i |
Xi |
1 |
9 |
8 |
8 |
15 |
4 |
21 |
11 |
2 |
12 |
9 |
5 |
16 |
1 |
22 |
33 |
3 |
11 |
10 |
7 |
17 |
3 |
23 |
7 |
4 |
4 |
11 |
1 |
18 |
3 |
24 |
91 |
5 |
7 |
12 |
6 |
19 |
6 |
25 |
2 |
6 |
2 |
13 |
1 |
20 |
1 |
26 |
1 |
7 |
5 |
14 |
9 |
|
|
|
|
Таблица 3.2. Значения функций.
m |
|
|
|
27 |
3.854 |
2.608 |
1.246 |
28 |
2.891 |
2.371 |
0.520 |
29 |
2.427 |
2.172 |
0.255 |
30 |
2.128 |
2.005 |
0.123 |
31 |
1.912 |
1.861 |
0.051 |
32 |
1.744 |
1.737 |
0.007 |
33 |
1.608 |
1.628 |
-0.020 |
34 |
1.496 |
1.532 |
-0.036 |