Объединение показателей надежности
При разработке сложных технических систем, состоящих как из аппаратной части, так и ПО, возникает необходимость рассчитать комплексный показатель надежности системы, т.е. объединить показатели надежности аппаратной и программной подсистем.
В данном учебном пособии мы будем поступать следующим образом. Надежность ПО зависит как собственно от надежности программы, так и от надежности носителя программы, например, ОЗУ или ПЗУ. Надежность носителя учитывается при расчете аппаратной части.
В качестве примера рассмотрим типовой передающий полукомплект системы телемеханики (тракт телеизмерений – ТИ), структура которого приведена на рис. 3.8.
Рис. 3.8. Структурная схема передающего полукомплекта системы телемеханики
Для расчета воспользуемся методикой, приведенной в подразд. 2.3.2 и подразд. 2.3.5. Система состоит из датчиков (N = 10), подсистемы сбора информации (ПСИ) и подсистемы передачи информации (ППИ). Никакой избыточности с точки зрения надежности (резервирования, встроенных схем контроля) в системе нет.
Предположим, что датчики не интеллектуальные, т.е. не содержат встроенных программных средств. Пусть датчики однотипные и имеют одинаковые интенсивности отказов λд = 4,5·10–5 1/ч и интенсивности восстановления μд = 2 1/ч.
ПСИ и ППИ реализованы с использованием промышленных контроллеров, т.е. наряду с аппаратной частью в них «зашито» программное обеспечение. Надежность носителей ПО (ОЗУ, ПЗУ и т.д.) учтена при определении надежностных характеристик аппаратной части. Примем, что интенсивность отказов аппаратуры ПСИ λап_пси = 10–7 1/ч, интенсивность восстановления аппаратуры ПСИ μап пси = 0,4 1/ч, λап_ппи, интенсивность отказов аппаратуры ППИ λап_ппи = 10–7 1/ч, интенсивность восстановления аппаратуры ППИ μап ппи = 0,7 1/ч.
Для ПСИ и ППИ дополнительно выделим надежностные характеристики программной составляющей – λпрг_пси, μпрг пси, λпрг_ппи, μпрг ппи. Определим значения надежностных характеристик программной составляющей, используя самую простую статистическую модель надежности ПО (подразд. 3.4.4).
Пусть число операторов в ПО ПСИ – 2500. Тогда, учитывая, что на 1000 операторов приходится 10 оставшихся в программе ошибок, в ПО ПСИ осталось 25 ошибок, приводящих к отказу системы. Если интенсивность отказов из-за одной ошибки – 10–4 1/ч, то λпрг_пси = 2,5·10–3 1/ч.
Пусть число операторов в ПО ППИ – 3050. Тогда в ПО ППИ осталась 31 ошибка (округлим до ближайшего большего). Следовательно, λпрг_ппи = 3,1·10–3 1/ч.
После отказа системы вследствие ошибки в ПО следует предпринять несколько шагов. Во-первых, определить по симптомам место ошибки. Во-вторых, исправить эту ошибку. И, наконец, загрузить в контроллер исправленную версию ПО. Предположим, что в среднем на указанные шаги и для ПСИ, и для ППИ требуется 5 часов. Тогда интенсивность восстановлений μпрг пси = μпрг ппи = 0,2 1/ч. Для приблизительных расчетов надежности ПО (а принятая модель надежности ПО позволяет провести только приблизительный расчет) пересчитывать интенсивность отказов блока, в котором была исправлена ошибка (и, следовательно, общее количество ошибок уменьшилось на единицу), нет смысла.
Определив надежностные характеристики блоков, составим усеченный граф переходов передающего полукомплекта (рис. 3.9).
Состояние 0 – все элементы исправны.
Состояние 1 – неисправен один из N датчиков.
Состояние 2 – неисправна аппаратная часть ПСИ.
Состояние 3 – неисправна программная часть ПСИ.
Состояние 4 – неисправна аппаратная часть ППИ.
Состояние 5 – неисправна программная часть ППИ.
Рис. 3.9. Усеченный граф переходов для передающего полукомплекта
Составим по графу систему уравнений:
Решив ее относительно P(0) (поскольку только в этом состоянии система работоспособна), мы найдем значение комплексного коэффициента готовности, учитывающего как надежность аппаратного, так и надежность программного обеспечения системы передающего полукомплекта:
Kг = P(0) = 0,738.
Выводы
В данной главе были рассмотрены вопросы, касающиеся построения надежного ПО. Было показано, что определение надежности, введенное для аппаратного обеспечения, с некоторыми оговорками применимо и для ПО, сформулированы понятия ошибки в ПО и отказа ПО.
Проектирование надежного ПО выполняется иерархически, поэтапно, при этом каждый этап все более приближает к конечной цели – созданию программного комплекса. Ошибки могут возникать как на любом этапе проектирования ПО, так и на сопряжении этапов. Соответственно, наиболее рациональным представляется, что для обнаружения ошибок каждого этапа следует задействовать проектировщиков предыдущего этапа и разработчиков, готовых приступить к следующему этапу.
На этапе проектирования модулей появляется возможность применить пассивные и активные меры обнаружения ошибок в ПО. Пассивные меры предполагают проводить проверку на допустимость входных данных, а для особенно важных данных вводить избыточность, которая позволит обнаружить искажение введенных данных. Активные меры применяются реже, поскольку требуют внедрения в ПО параллельно работающего диагностического монитора.
Тестирование разработанного ПО также представляет собой сложную проблему. Поход к программе как к «черному ящику» (структура программы неизвестна) требует в качестве теста использовать все возможные комбинации входных данных, что нереально из-за их бесконечного количества. Подход к программе как к «белому ящику» (структура программы известна) позволяет сократить количество тестовых наборов, но не дает гарантии, что будут обнаружены все ошибки. На практике рекомендуется творческое сочетание обоих методов.
Для определения характеристик надежности спроектированного ПО существует целый ряд методик, однако все они базируются на серьезных упрощениях, поэтому авторы взяли для примера, позволяющего оценить комплексную надежность программно-аппаратной системы, самую простую статистическую модель. Приведенный в учебном пособии пример расчета комплексного коэффициента готовности технической системы может быть рекомендован в качестве базового при выполнении курсовых и дипломных проектов.
Вопросы и задания
1. Сформулируйте понятие отказа в программном обеспечении.
2. Приведите примеры синтаксических ошибок и семантических ошибок.
3. Кратко охарактеризуйте модель происхождения ошибок в ПО.
4. Какие принципы и методы относятся к группе «предупреждение ошибок»?
5. Какие принципы и методы относятся к группе «обеспечение устойчивости к ошибкам»?
6. Перечислите и дайте краткую характеристику основным этапам проектирования ПО.
7. В чем состоит правило проверки «n плюс-минус один»?
8. В чем состоит разница между целями продукта и проекта?
9. Сформулируйте цели этапа внешнего проектирования.
10. Какие вы можете привести разновидности прочности модулей?
11. Приведите пример модулей, сцепленных по данным.
12. В чем заключается принцип пассивного обнаружения ошибок, называемый «взаимное недоверие»?
13. Какие сведения должны содержать внешние спецификации модуля?
14. В чем достоинства метода пошаговой детализации создания программных модулей по сравнению с методом блок-схем?
15. Чем эффективность отличается от «микроэффективности»?
16. Будет ли 2,0·2,0 в цифровой вычислительной машине равно 4,0?
17. Сравните технологию тестирования программы как «черного ящика» с технологией тестирования программы как «белого ящика».
18. В чем заключается модель роста надежности ПО?
19. Как на практике воспользоваться методом накопления статистики?
20. Вычислите значение комплексного коэффициента готовности для примера из подразд. 3.4.5, предположив, что подсистема передачи информации реализована аппаратно и не имеет программной составляющей.
Список литературы
1. Майерс Г. Надежность программного обеспечения. – М.: Мир, 1980. – 360 с.
2. Тейер Т., Лилов М., Нельсон Э. Надежность программного обеспечения. – М.: Мир, 1981. – 323 с.
3. Надежность функционирования программного обеспечения / С.И. Баглюк [и др.]. – СПб.: Логос, 1991. – 78 c.
4. Крылов Е.В., Острейковский В.А., Типикин Н.Г. Техника разработки программ: в 2 кн. Кн. 2. Технология, надежность и качество программного обеспечения. – М.: Высшая школа, 2008. – 469 с.
5. Кнут Д. Искусство программирования для ЭВМ. Т. 1. Основные алгоритмы. – М.: Мир, 1976. – 627 с.
6. Майерс Г. Искусство тестирования программ. – М.: Финансы и статистика, 1982. – 176 с.
7. Jelinski Z., Moranda P.B. Software Reliability Research, in W. Freiberg, Ed., Statistical Computer Performance Evalution. New York: Academic Press, 1972. – Pp. 465–484. (329)
8. Shooman M. L. Probabilistic Models for Software Reliability Prediction, in W. Freiberger, Ed., Statistical Computer Performance Evalution. – New York: Academic Press, 1972. – Pp. 485–502. (329)
9. Littlwood B., Verrall J.L. A Bayesian Reliability Growth Model for Computer Software, Record of the 1973 IEEE Symposium on Computer Software Reliability. – New York: IEEE, 1973. – Pp. 70–77.(329)
10. Schneidewind N.F. Analyses of Error Processes in Computer Software, Proceedings of the 1975 International Conference on Reliable Software. –New York: IEEE, 1975. – Pp. 337–346. (329)
11. Shooman M.L. Operational Testing and Software Reliability Estimation during Program Development, Record of the 1973 IEEE Symposium on Computer Software Reliability. – New York: IEEE, 1973. – Pp. 51–57. (329)
12. Schneidewind N.F. An Approach to Software Reliability Prediction and Quality Control, Proceedings of the 1972 Fall Joint Computer Conference. Montvale. – N. J.: AFIPS Press, 1972. – Pp. 837–847. (329)
13. Mills H.D. On the Statistical Validation jf Computer Programs, FSC-72-6015, IBM Federal System Div., Gaithersburg, Vd., 1972.
14. Richards F.R. Computer Software: Testing, Reliability, Models, and Quality Assurance, NPS-55RH74071A, Naval Postgraduate School, Monterey, Ca., 1974. (329)