Смекни!
smekni.com

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

6. ГОСТ Р ИСО/МЭК 9126–93. Информационная технология. Оценка программной продукции. Характеристики качества и руководства по их применению. – 12 с.

7. ГОСТ 28195–89. Оценка качества программных средств. Общие положения. – М.: Госком. СССР по стандартам – 38 с.

8. Соммервилл И. Инженерия программного обеспечения. – М.: Вильямс, 2002. – 624 с.

9. Larson D., Miller K. Silver Bullets for Little Monsters: Making Software More Trustworthy, IEEE IT Pro, March/April 2005 (русская версия: Ларсон Д., Миллер К. Серебряные пули для маленьких монстров //Открытые системы №5–6, 2005 С.20 – 23)

10. ISO/IEC 91261:1998. Информационная технология. – Характеристики и метрики качества программного обеспечения. – Часть 1: Характеристики и подхарактеристики качества.

11. Майерс Г. Надежность программного обеспечения. – М.: Мир, 1980. – 360 с.

12. Гаспер Б.С. Надежность функционирования автоматизированных систем. – Пермь: ПГТУ, 1999. – 70 с.

13. Иыуду К.А. Надежность, контроль и диагностика вычислительных машин и систем. – М.: Высшая школа, 1989. – 320 с.

14. Липаев В.В. Функциональная безопасность программных средств. – М.: СИНТЕГ, 2004. – 340 с.

15. Vincent J., Waters A., Sinclair J. Software quality assurance. Vol II. A programmer guide. – Englewood Cliff, New Yersey: Prentice–Hall. – 1988. – 192 p.

16. Тейер Т., Липов М., Нельсон Э. Надежность ПО. – М.: Мир, 1981. – 328 с.

17. Международный стандарт. МЭК 60880–2. Программное обеспечение компьютеров в системах важных для безопасности атомных электростанций. – IEC. М.: 2002. – 90 с.

18. Кулаков А.Ф. Оценка качества программы ЭВМ. – К.: Техника, 1984. – 168 с.

19. Липаев В.В. Надежность программных средств. – М.: СИНТЕГ, 1998. – 232 с.

20. Полонников Р.И., Никандров А.В. Методы оценки надежности программного обеспечения. – СПб: Политехника, 1992. – 80 с.

21. Штрик А.А., Осовецкий Л.Г., Мессих И.Г. Структурное проектирование надежных программ встроенных ЭВМ. – Л.: Машиностроение, 1989. – 296 с.

22. Вентцель Е.С. Исследование операций. – М.: Сов. Радио, 1972. – 552 с.

23. Гаспер Б.С. Надежность функционирования автоматизированных систем. – Пермь: ПГТУ, 1999. – 70 с.

24. Куракин А.Л. Фактор надежности в оптимизации аппаратуры для научных исследований //Технологии приборостроения №1(5) (СНИИП) – 2003. – С. 62‑65.

25. Ханджян А.О. Моделирование надежности программного обеспечения. - http://www.software-testing.ru/lib/handzhyan/software_quality_modeling.htm


Приложение А. Примеры моделей надежности ПО

Экспоненциальная модель роста надежности Джелински, Моранда, Шумана

Это одна из самых распространенных на сегодняшний день моделей надежности ПО опирается на теорию надежности аппаратуры [11, 13, 16, 19, 20, 21, 23].

Один из способов оценки СВМО – наблюдение за поведением программы в течение некоторого периода времени и нанесение на график значений между последовательными ошибками. На рис. А.1 изображено увеличение надежности ПО (кривые R1, R2, R3 – функции надежности, т. е. вероятность того, что ни одна ошибка в программе не произойдет или не будет обнаружена на временном интервале [0…t]) при исправлении в нем ошибок.

Рисунок A.1 – Увеличение надежности ПО при исправление в нем ошибок

Для разработки модели вводят следующие предположения:

li = Z(t) постоянно до обнаружения и исправления ошибки или интенсивность обнаружения ошибок;

li = Z(t) = K · ( N – i ) – т.е. Z(t) прямо пропорционально числу оставшихся ошибок, где N – неизвестное первоначальное число ошибок, i – число обнаруженных ошибок, K – некоторая неизвестная константа. Эта зависимость отображена на рис.А.2.

Рисунок A.2 – Функция риска

При обнаружении и исправлении ошибки функция риска уменьшается на K.

Неизвестные N и K можно оценить, если некоторое количество ошибок уже обнаружено. Предположим, что обнаружено n ошибок, а x[1], x[2], …, x[n] – интервалы времени между этими ошибками. Тогда, в предположении что Z(t) постоянно между ошибками, плотность вероятности для x[i] будет равна

p( x[i] ) = K · ( N – i ) · exp{ –K · ( N – i ) · x[i] }.

Значение N даст основной результат – оценку полного числа ошибок. Знание K позволяет использовать уравнение для предсказания времени до появления (n+1)‑й ошибки и последующих ошибок.

Это частный случай модели Шумана. Предположим, что интервалы времени отладки между обнаружениями двух ошибок имеет экспоненциальную зависимость и частота ошибок пропорциональна числу еще необнаруженных ошибок. Таким образом, функция плотности распределения времени обнаружения i–ой ошибки, отсчитываемого от момента выявления (i–1)–ой ошибки имеет вид

,

где

и N – число первоначально присутствующих в ПО ошибок.

Эта модель построена на следующих допущениях:

время до следующего отказа распределено экспоненциально;

интенсивность отказов пропорционально оставшимся в ПО ошибкам.

Тогда вероятность безотказной работы ПО:

, (А.1)

где

li=CD * ( N0–(i–1) ), (А.2)

CD – коэффициент пропорциональности,

N0 – первоначальное число ошибок в ПО.

В (А.1) отчет времени начинается от момента последнего (i–1)–го отказа.

Если известны все моменты обнаружения ошибок ti и каждый раз в этот момент устраняется одна ошибка, то, используя метод максимального правдоподобия, можно получить уравнение для определения значения начального количества ошибок N0.

По методу максимального правдоподобия находим CD и N0. Функция правдоподобия имеет вид:

.

Откуда получаем условия для нахождения экстремумов:

,

Отсюда получаем решение для CD и N0:

,(А.3)

.(А.4)

Уравнение (А.4) решается методом перебора.

Пусть в ходе отладки зафиксированы интервалы времени между отказами ПО t1=10, t2=20, t3=25 ч. Определим по вышеприведенным формулам вероятность

отсутствия 4–го отказа, начиная с момента устранения 3–го отказа.

Решаем (А.4) методом перебора и получаем N=4. Следовательно, из (А.3) имеем CD=0,02. Тогда из (А.1, А.2) получаем P(t4)=exp(0,02*t4) и, следовательно, l4=0,02 и среднее время до следующего отказа программы составляет <t4>=1/l4=50 ч.

Это одна из первых и простых моделей. Модель использована при разработке весьма ответственных проектов (например, для программы Apollo). В ее основу положены следующие допущения:

интенсивность обнаружения ошибки R(t) пропорциональна текущему числу ошибок в программе;

все ошибки равно вероятны и их появления независимы друг от друга;

время до следующего отказа распределено экспоненциально;

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

R(t) = const на интервале между двумя соседними ошибками;

В соответствии с этими допущениями функцию распределения (риска) интенсивности ошибок между (i–1) и i–ой ошибками можно представить как:

R(t) = K×[N0 – (i–1)],

где K – коэффициент пропорциональности; N0 – исходное число ошибок в ПО.

Все интервалы времени

Dti = ti – ti–1

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


P(Dti) = exp{– K×[N0 – (i–1)] ×Dti }.

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

,(А.5)

.(А.6)

Нелинейное уравнение (А.6) достаточно сложно для решения численными методами, так как оно имеет локальные экстремумы и не всегда имеет решение.

Модель позволяет найти время до обнаружения следующей ошибки tn+1 и время необходимое для обнаружения всех ошибок T:

,

.

Можно посчитать Dn – количество ошибок, которое следует обнаружить и устранить для повышения наработки между обнаружениями ошибок от T1 до T2:

Dn = N0 · T0 · ( 1/T1 – 1/T2).(А.7)


Также можно получить затраты времени Dt на проведение тестирования, которые позволяют устранить Dn ошибок и соответственно повысить наработку от T1 до T2:

Dt = N0 · T0 · ln( T2 / T1 ) / K .(А.8)

Коэффициент готовности:

,

Коэффициент простоя КП = 1 – КГ, где t' – период проверок, t1 – время затрат ресурсов на проверки, tВ – длительность восстановления работоспособности программы.

Относительная длительность отладки в этой модели:

,

где H – количество систем, в которых функционирует программа; tЭ – длительность эксплуатации программы; c ‑ коэффициент увеличения затрат ресурсов на единицу машинного времени.

Средняя наработка на отказ:

Тср = 1/l.

Следует подчеркнуть статистический характер приведенных соотношений.

Из (А.8) видно, что время, затрачиваемое на тестирование, пропорционально квадрату первоначального количества ошибок T0 в программе. Приведем пример: пусть N0 = 1000; T0 = 1 час. Требуется повысить надежность программы с T1 =1 час до T2 = 1 месяц = 720 часов. Тогда из (А.7) Dn = 999, что фактически означает, что нужно обнаружить все ошибки для получения устойчивой работы ПО в 1 месяц. И на это будет затрачено время Dt ~ 60 дней (при расчете K по формуле (А.5) было сделано предположение о неизменности

, в этом случае