Модель роста надежности
Вероятно, самой известной моделью надежности является модель, разработанная Джелински и Морандой [7] и Шуманом [8]. Она опирается на теорию надежности аппаратуры, основы которой были приведены в подразд. 1.2. В частности, в данной модели используются: вероятность безотказной работы P(t), интенсивность отказов λ(t) и среднее время между отказами Т.
Один из способов оценки среднего времени между отказами – наблюдение за поведением программы в течение некоторого периода времени и нанесение на график значений времени между последовательными ошибками. Можно надеяться, что при этом будет обнаружено явление роста надежности;помере того как ошибки обнаруживаются и исправляются, время между последовательными ошибками становится больше. Экстраполируя эту кривую в будущее, можно предсказать среднее время между отказами в любой момент времени и предсказать полное число ошибок в программе.
Такая экстраполяция, однако, в слишком большой степени основана на догадках и обычно уводит в сторону. Было бы лучше опираться на какое-то априорное представление об имеющемся распределении вероятностей ошибок, затем использовать сведения о найденных ошибках для оценки параметров этого распределения и только потом использовать эту модель для предсказания событий в будущем.
Разработка такой модели начинается с уточнения поведения функции λ(t)– интенсивности отказов ПО.В большинстве моделей аппаратного обеспечения λ(t) сначала уменьшается со временем (этап, когда обнаруживаются и исправляются ошибки проектирования и производства), затем остается постоянной в течение большей части срока службы системы (соответствует случайным отказам) и в конце полезного срока службы системы увеличивается (см. рис. 3.1). В теории надежности аппаратуры в основном рассматривается средний период, где интенсивность отказов постоянна. Однако предположение о постоянстве интенсивности отказов вряд ли применимо в случае программного обеспечения, для которого эта функция должна уменьшаться по мере обнаружения и исправления ошибок. Поэтому, как показано на рис. 3.6, интенсивность отказов со временем уменьшается.
Рис. 3.6. Предполагаемая интенсивность отказов
![]() |
Первое существенное предположение состоит в том, что λ(t)постоянно до обнаружения и исправления ошибки, после чего λ(t)опять становится константой, но уже с другим, меньшим, значением. Это означает, что λ(t)пропорционально числу оставшихся ошибок. Второе предположение состоит в том, что λ(t) прямо пропорционально числу оставшихся ошибок, т.е.
λ(t) = – K(N – i), (3.1)
где N – неизвестное первоначальное число ошибок; i – число обнаруженных ошибок; K – некоторая неизвестная константа. Каждый раз, когда ошибка обнаруживается (модель предполагает, что задержка между обнаружением ошибки и ее исправлением отсутствует), λ(t)уменьшается на некоторую величину K. На оси времени может быть представлено календарное время или время работы программы (последнее может быть масштабировано с учетом интенсивности использования программы).
Параметры N и K можно оценить, если некоторое количество ошибок уже обнаружено (например, если фаза тестирования уже частично пройдена). Предположим, что обнаружено п ошибок, а х:[1], х[2], ..., х[n]– интервалы времени между этими ошибками. В предположении, что λ(t)постоянно между ошибками, плотность вероятности для x[i]
. (3.2)
Полагая Т равным сумме х-ов и используя функцию максимального правдоподобия для этого уравнения, получаем второе уравнение:
(3.3)
K и N в этих уравнениях – приближения для рассмотренных выше K и N. Получилось два уравнения с двумя неизвестными N и K.Зная, что обнаружено п ошибок с интервалами x[i]между ними, эти уравнения можно решить относительно N и K с помощью простой программы численного анализа. Значение N дает основной результат – оценку полного числа ошибок. Знание параметра K позволяет использовать уравнения для предсказания времени до появления (n+1)-й ошибки, (n+2)-й и т.д.
Эта основная модель может быть развита в различных направлениях. Например, частота отказов нередко увеличивается после завершения некоторого начального периода, по мере того как разрабатываются тесты или программа начинает использоваться интенсивнее.
Чтобы очертить границы применимости этой модели, требуется понимать лежащие в ее основе допущения (упрощения).
Первое из них – ошибка исправляется немедленно (или программа не используется до тех пор, пока найденная ошибка не будет исправлена). Предполагается также, что программа не изменяется (за исключением исправления ошибок). Второе допущение – при всех исправлениях найденные ошибки устраняются, и новых ошибок не вносится.
Третье, основное, допущение – это то, что функция λ(t) носит одинаковый характер для всех программ. Тем самым предполагается, что каждая ошибка уменьшает λ(t)на постоянную величину K – на практике это, вероятно, нереально, однако, по-видимому, с такого предположения вполне разумно начать. Хотя желание выразить надежность программного обеспечения некоторой функцией времени вполне разумно, следует понимать, что в действительности она от времени не зависит. Надежность программного обеспечения является функцией числа ошибок, их серьезности и их расположения, а также того, как система используется.
В реальности частота отказов в большой системе при измерении в течение нескольких лет может иметь тенденцию к понижению, но внутри этого периода возможны большие колебания. Анализ частоты обнаружения ошибок при тестировании 14 различных систем [1] показал, что частота эта в пяти проектах достигала пика в начале работы, в пяти – в середине и в четырех – в конце.
Отметим, наконец, что описанная выше модель кажется чересчур оптимистичной. Например, при п = 10 (десять обнаруженных ошибок) с интервалами между отказами (в минутах)
9, 17, 21, 54, 32, 78, 82, 33, 57, 82
модель предсказывает, что осталось 3,3 ошибки (т.е. изначально в программе было N = 13,3 ошибки). При этом интервалы времени между 10, 11, 12 и 13 ошибками оцениваются в 135, 245 и 1265 минут.