Т1, Т2 – продолжительности работы системы, которые соответствуют x1 и x2
n1 и n2 – число ошибок в ПО, обнаруженных в период времени x1x2
Из (6) и (7)
Е0 =
(8)где
Т0i – среднее время безотказной работы, соответствующее периоду отладки xi
Т0i = Тi/ni
Подставляя (8) в (6), имеем:
КS =
(9)Основана на допущении: система проходит через последовательность «исправных» (Up) и неисправных (down) состояний. Состояние называется исправным, если после начала компоновки и тестирования программы, ошибка еще не появилась или уже исправлена, а следовательно ошибка еще не появилась.
Диаграмма состояний:
Запишем д.у. состояния для этой системы:
n–k(t)= –lkPn–k(t)+mk–1Nm–k+1(t) (10) m–k(t) = –mkPm–k(t)+lkPn–k(t) (11)Pm–k(0) = 0 k = 1, 2… (12)
Pn(0) = 1 (13)
Решение уравнений (10) и (11) можно получить используя любой из методов численного интегрирования.
После того как будут получены вероятности всех состояний, неготовность системы определится с помощью формулы:
U(t) =
Pm–k(t)(14)Т.к. вероятности зависят от kMAX, то при больших значениях kMAX можно получить величину U(t) близкую к истинной.
данная модуль как и Шумана основана на допущении об экспоненциальном распределении времени безотказной работы ПО. Предполагается, что частота появления ошибок ~ числу остаточных ошибок:
lУМ(xi) = KУМ[E0 – (i – 1)] (15)
KУМ – коэффициент пропорциональности
xi – интервал времени м/ i и u(i-1) ошибкой
С помощью (15) можно найти вероятность безотказной работы:
P(ti) = exp[–KУМ(E0 – i + 1)ti] (16)
Среднее время безотказной работы:
Т0 =
P(ti)dti = (17)Основа модели – положение о том, что интенсивность появления ошибок ~ не только количеству оставшихся в программе ошибок, но и времени, потраченному на отладку.
"–" рассмотренных моделей:
- при неточном определении первоначального числа ошибок в программе, интенсивность отказов делается отрицательной;
- здесь предполагается, что после обнаружения ошибка ликвидируется и не вносятся новые ошибки.
В целях преодоления "–" была предложена модель, основанная на допущениях о том, что поток возникновения ситуаций, в которых возможен отказ, является Пуассоновским с параметром l. Однако, по мере обнаружения и исправления ошибок, отказы в этих ситуациях возникают с вероятностью <1. Другими словами, этот поток отказов представляется в виде разреженного потока, с переменным коэффициентом разряжения pi, i – номер отказа.
В простейшем случае:
pi = 1 – (1 – pН)qi–1 (18)
где 0<q<1
pН = p1 – начальный коэффициент разряжения потока.
Данная модель подходит не только для прогнозирования интенсивности следующего отказа, но и для прогнозирования параметра потока отказов.
Из (18)
, что изображение параметра потока по Лапласу:w*(S) =
(19)Приближенное значение оригинала:
w(t) = (1–p1)l– ((1–p1)l)2(1–q)t + ((1–p1)l)3(1–q)(1–q2)t2/2!–...–(–1)n.((1–p1)l)n+1(1–q) ––…(1–qn)tn/n!
с погрешностью не более:
Dw(t) = (–1)n+1((1–p)l)n+2(1–q)…(1–qn+1En+1)/(n+1)! (20)
Приведенные модели представляют интерес прежде всего для прогнозирования отказов в процессе эксплуатации и отладки. Здесь значение параметров определяется в рабочем режиме.
Т.к. надежность программ, которая м.б. достигнута технологическими методами, ограничена, вызвана необходимость
надежности программ за счет времени резервирования.Для этого готовятся 2 или несколько версий программ для решения одной задачи. Желательно, чтобы версии имели существенные различия, т.е. основываться на различных алгоритмах или хотя бы д.б. выполнены различными программами.
ошибки м.б. обнаружены по расхождению результатов, которые получены при одних и тах же исходных данных по различным версиям программ. Эти ошибки м.б. обнаружены в ходе отладки версий или при сравнении результатов.Существует идея //-го (одновременного) или последовательного во времени выполнения различных версий программ непосредственно в процессе эксплуатации. Если таких версий 2, то принято говорить о дуальном программировании.
Если обнаружено расхождение в результатах, необходимо определить по к-л дополнительным критериям, какой из результатов правильный.
при n-версионном программировании подготавливается n версий программ, и правильный результат определяется по мажоритарному признаку при помощи подходящих аппаратных или программных средств.Дуальное и n-версионное программирование целесообразно использовать в том случае, если имеет место нагруженное резервирование вычислительной аппаратуры.
Модифиционное дуальное программирование на ряду с достаточно точной, но сложной основной программой, использует менее точную, но простую резервную программу. Если при одинаковых исходных данных результаты отличаются на величину > допустимой, делается предположение о том, что отказала основная программа. В качестве правильного результата принимается результат, полученный при помощи резервной программы.
средняя погрешность работы 2-ух программ несколько , но зато вероятность отказа .Обозначим погрешность I программы d1, а II – d2. Пусть вероятность отказа I программы – q1, II– q2. При независимости этих программ возможны следующие несовместные события:
1) обе программы работают безотказно
p = 1 – q1– q2 +q1q2
2) откажет основная программа, тогда:
q01 = q1(1 – q2) = q1– q1q2
3) отказ резервной программы
q10 = q2(1 – q1) = q2– q1q2
4) откажут основная и резервная программы
q11 = q22 (погрешность d3)
Следовательно, средняя погрешность не отказавшей системы из 2-х программ:
В случае, когда имеется только основная программа: погрешность d1
вероятность отказа q1
Наряду с вычислительной функцией по иной программе определяется некоторая функция, которая находится с основной, в некоторых соотношениях, которые называются контрольными соотношениями.
Простейшим примером применения контрольных соотношений является вычисление функций sinxи cosx по отдельным соотношениям.
Тестирование – проверка работы программы по результатам ее выполнения на специально подобранных наборах исходных данных или тестах.
Существуют следующие методы тестирования:
1. полное
2. выборочное
3. структурное выборочное
(3) основывается на разделении пространства исходных данных на классы. Каждый класс позволяет подтвердить определенный свойства или работоспособность отдельных элементов структуры программы.
Здесь основная задача: построение генератора тестовых наборов.
Исходя из тестируемой программы Т выбирается набор путей П в структуре программы, который удовлетворяет критериям К (критерий тестирования). Наиболее часто К основываются на структуре программы.
Достаточно простое требование может заключаться в том, что выбранные пути должны перекрывать (задействовать) все операторы или команды программы. Затем генерируются ограничения О, которые позволяют реализовать тот или иной путь на графе программы.
О преобразуются модулем ПВ в ограничения к исходным данным. Тогда с помощью алгоритма А генерируются тестовые наборы числовых значений исходных данных ТН, которые удовлетворяют отдельным ограничениям.
Структура генератора тестов: