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) было сделано предположение о неизменности
, в этом случае