Смекни!
smekni.com

Разработка программно–алгоритмических средств для определения надёжности программного обеспечения на основании моделирования работы системы типа "клиент–сервер" (стр. 11 из 13)

K=n*T0/(сумма ар. прогрессии)).

На практике же будет затрачено гораздо меньше времени и найдено гораздо меньше ошибок, так как предположение о равномерности использования всего текста программы в процессе эксплуатации не верно. И, скорее всего, будет за меньшее время обнаружено 99% ошибок в той части программы, которая исполняется чаще, чем другая. В малоэксплуатируемой части останется не обнаруженными до 99% ошибок. Отсюда следует вывод о большой важности точного подбора входных данных при тестировании как можно более соответствующих режиму эксплуатации и вывод о необходимости сокращать время тестирования за счет меньшего тестирования малоиспользуемых ветвей программы. При этом важно не забывать о различных режимах эксплуатации ПО: нормальном, аварийном, ждущем и т.п.

Постулат, что программа не меняется за исключением исправления ошибки, а новые ошибки не вносятся, является спорным. Желание выразить надежность ПО некоторой функцией времени вполне логично, однако в действительности она от времени не зависит. Надежность ПО является функцией числа ошибок, их серьезности и расположения, а также того, насколько интенсивно система используется (интенсивность входного потока данных).

Статистическая модель Миллса

Описана в [11] и [20]. Программа специально "засоряется" некоторым количеством заранее известных ошибок. Эти ошибки вносятся в программу случайным образом, а затем делается предположение, что для ее собственных и искусственно внесенных ошибок вероятность обнаружения при последующем тестировании одинакова и зависит только от их количества. Тестируя программу в течении некоторого времени и отсортировывая собственные и внесенные ошибки можно оценить N – первоначальное число ошибок в программе.

Пусть: S – число специально внесенных ошибок; n – число найденных собственных ошибок в программе; u – число найденных внесенных ошибок; n+u – количество обнаруженных ошибок при тестировании.

Тогда по методу максимального правдоподобия имеем: N = S · n / u.

Основное допущение модели – распределение «посеянных» ошибок совпадает с распределением по программе собственных ошибок, и, следовательно, обнаружение, как тех, так и других ошибок равновероятно – что является существенным недостатком этой модели.

При этом можно выдвигать и проверять гипотезы об N. Пусть в программе не более k собственных ошибок и внесли нее еще S ошибок. Теперь программа тестируется, пока не будут обнаружены все специально внесенные ошибки. Причем в этот момент подсчитывается число обнаруженных собственных ошибок (обозначим его, как и раньше, как n). Введем уровень значимости C:

(А.9)

С – мера доверия к модели, то есть мера правильности нашего предположения о количестве k собственных ошибок и дает оценку для количества ошибок

,

которое нужно внести в программу, чтобы проверить гипотезу с заданным уровнем значимости.

Например, если мы утверждаем, что в программе нет ошибок (k = 0), и внося в программу 4 ошибки, все их обнаруживаем, не встретив ни одной собственной ошибки, то C = 0.80. А чтобы достичь уровня 95 %, надо было бы внести в программу 19 ошибок.

Этот метод не очень эффективен в случае применения его в реальной практике, так как если предположить что в программе своих ошибок n = 1000 (что более реально, чем n = 0), то для достижения уровня правдоподобия 0,95 в программу придется ввести 19019 ошибок, что само по себе уже тяжелая задача.

Формулу (А.9) можно модифицировать так, чтобы устранить недостаток, заключающийся в том, что C нельзя предсказать до тех пор, пока не будут обнаружены все искусственно внесенные ошибки (а это может и не произойти за ограниченное время, отведенное на тестирование). Модифицированной формулой можно пользоваться уже после того, как найдено j внесенных ошибок:

(А.10)

Это математически очень простая и интуитивно понятная модель. Процесс внесения ошибок – само слабое звено модели, так как должны вноситься "типичные" для данной программы ошибки (то есть искусственно внесенные ошибки должны иметь то же распределение вероятности, что и собственные ошибки). Кроме того, эта модель не учитывает системных ошибок, то есть ошибок вносимых на этапе проектирования, а не самого кодирования.

Модель Бейзина

Пусть ПО содержит Nk команд [20]. Случайным образом из них выбирается n команд, в которые вводятся ошибки. Затем для тестирования случайным образом выбирается r команд. Если в ходе тестирования будет обнаружено n собственных и m привнесенных («посеянных») ошибок, то полное число N0 ошибок содержащихся в программе перед началом тестирования (следует из метода максимального правдоподобия) можно определить как:

.

Простая экспоненциальная модель

В отличие от модели Джелинского–Моранды R(t) ¹ const [20].

Пусть N(t) – число обнаруженных к моменту времени t ошибок и пусть функция риска пропорциональна числу оставшихся к моменту t в программе ошибок: R(t) = K×(N(0) – N(t)).

Продифференцируем обе части этого уравнения по времени:

.

Учитывая, что dN(t)/dt есть R(t) (число ошибок, обнаруженных в единицу времени), получим дифференциальное уравнение:

с начальными условиями N(0) = 0, R(0) = K×N0.

Решением этого уравнения является функция:

R(t) = K×N0×exp(–K×t).(А.11)

Для K и N0 получают следующие оценки (с применением МНК) для первых n ошибок:

,

,

где

.

Используя (А.11) можно определить время необходимое для снижения интенсивности появления ошибок с R1(t) до R2(t):

.

Дискретная модель Шика–Уолвертона

Эта модель рассмотрена в работах [12, 20, 21]. Применяется при следующих допущениях:

предполагается, что частота проявления ошибок (интенсивность отказов) линейно зависит от времени испытаний ti между моментами обнаружения последовательных i–й и (i–1)–й ошибок;

появление ошибок равновероятно и независимо;

ошибки корректируются без введения новых.

Тогда:

,

где k – коэффициент пропорциональности, обеспечивающий равенство единице площади под кривой вероятности обнаружения ошибок.

В этом случае для оценки вероятности безотказной работы получается выражение, соответствующее распределению Релея:

,

где P(ti) = P(T³ti).

Отсюда плотность распределения времени наработки на отказ:

.

Использовав функцию максимального правдоподобия, получим оценку для N0 и K:

,
.

Модель Вейбулла

В [12] и [20] приводится модель надежности ПО с учетом ступенчатого характера изменения надежности при устранении очередной ошибки.

Функция риска для этой модели представляется в виде: R(t) = (a/b) ×(t/b)a–1, где a > 0, и b > 0 – константы модели; t – интервал времени безошибочной работы.

Если a > 1, то интенсивность обнаружения ошибок растет со временем, если a < 1, то – падает.

Плотность распределения вероятности до появления очередной ошибки описывается распределением Вейбулла:

.

Наработка до отказа выражается через гамма–функцию:

,

где P(t) – вероятность безотказной работы и P(t) = 1 – Q(t), где Q(t) – вероятность отказа:

.

Для оценки параметров a и b используются следующие формулы:

,

где

b = exp{–b0/a},

,

k – число интервалов тестирования,

,

Dtj – длина j–го интервала тестирования,

,

Ni – нормированное суммарное число ошибок, обнаруженных к моменту ti.

Определение надежности по результатам тестирования

Рассмотрены в работе [13]. Оценку надежности ПО при стохастическом (когда входные данные выбираются согласно своим функциям распределения и основным статистическим моментам) функциональном тестировании целесообразно производить на основании заключительной серии стохастических тестов (например, при приемочных испытаниях), когда отказы программы отсутствуют. Тогда для оценки вероятности безотказной работы программы может быть использована формула (оценка безошибочности ПО производится таким же методом как оценка безотказности аппаратуры):