УДК 004(06) Компьютерные системы и технологии В.В. ГУРОВ Московский инженерно-физический институт (государственный университет) ОЦЕНКА НАДЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ КОМПЛЕКСОВ ОТВЕТСТВЕННОГО НАЗНАЧЕНИЯ Рассматриваются особенности разработки моделей надежности программного обеспечения программно-аппаратных комплексов с повышенными требованиями к надежности. 1. Построение логической схемы надежности программного обеспечения (ПО) требует учета ряда факторов, которые в значительной степени отличают надежность ПО от надежности аппаратного обеспечения. Отметим среди них следующие: 2. – каждая программа представляет собой уникальное изделие, для которого, в отличие от аппаратуры, принципиально отсутствуют какие-либо заводские показатели надежности типа наработки на отказ; 3. – формулировка отказа системы представляет собой зачастую нетривиальную задачу; 4. – программные средства практически всегда следует рассматривать как систему, имеющую время восстановления, отличное от нуля, так как, в отличие от аппаратуры, здесь нельзя заменить один отказавший модуль на другой, заведомо исправный; 5. – программы, обеспечивающие дублирование выполняемых функций, нельзя рассматривать как два полностью идентичных блока. Каждая из них является самостоятельным изделием, с присущими только ей ошибками проектирования, которое характеризуются собственными потоками отказов; 6. – большое влияние на показатели надежности программного комплекса оказывают условия функционирования, в число которых входят помимо характеристик технических средств также состав и режимы работы других программных средств, установленных на данном компьютере. 7. Данные принципы были положены в основу разработки модели надёжности программного обеспечения сложного распределенного информационно-вычислительного комплекса. Основными особенностями функционирования комплексов ответственного назначения являются высокие требования к их надежности и, как следствие, необходимость учёта всех определяющих её факторов. При разработке моделей учитывалось, что в системе параллельно функционируют три группы программ, каждая из которых вносит свой вклад в показатели надежности: операционная система, системные программы, например, СУБД, а также прикладные программы. 8. Учет показателей надежности первых двух типов программ весьма затруднен, так как для них производителями не приводятся какие-либо надёжностные характеристики. Поэтому здесь приходится использовать оценочные показатели, связанные с длиной программы. В системах, прошедших тестирование, по различным оценкам остается от шести до ста ошибок на 1000 строк исполняемого кода [1, 2]. В [1] показано, что число ошибок на тысячу строк кода стремится к стабилизации по мере роста числа выпущенных версий, но асимптотически этот показатель отличается от нуля. Для систем ответственного назначения, к которому можно отнести операционные системы и другое системное ПО, к моменту поставки системы клиенту в нем может содержаться всего около 0,1 ошибки на 1000 строк кода программы [3]. Однако даже такая незначительная величина не позволяет полностью отбросить влияние ошибок в этих программных средствах ввиду их собственного большого объема. Так в ядре ОС Linux содержится более 2,5 миллионов строк кода, в ядре Windows XP – в два с лишним раза больше. При таких оценках ядро Linux содержит около 250 ошибок, а Windows XP – больше 500 ошибок. Еще хуже то, что около 70% кода операционных систем занимает код драйверов устройств, для которых частота появления ошибок от трех до семи раз выше, чем в других частях ядра. Так в Windows XP 85% всех аварийных отказов обуславливается наличием ошибок в коде драйверов [2]. 9. Чтобы оценить вклад системных программ в общую надежность программного обеспечения, необходимо знать не только количество имеющихся в нём ошибок, но и законы распределения времени их обнаружения. Такая информация может быть получена на основе анализа протоколов тестирования программных средств, которые для данного вида программ не доступны пользователю. Оценка вида и параметров этих законов может быть проведена путём ретроспективного анализа на основе информации о времени подготовки к выходу новой версии ПО и её объёме. 10. Для оценки надежности прикладного программного обеспечения, функционирующего в системе, могут быть использованы более точные модели, базирующиеся на информации о его структуре, протоколах тестирования и отладки, а также журналах неисправностей, имеющихся на объекте. Список литературы 1. Фатрелл Р.T., Шафер Д.Ф., Шафер Л.И.. Управление программными проектами: достижение оптимального качества при минимуме затрат. - Изд. "Вильямс", 2004. 1136 с. 2. A Lightweight Method for Building Reliable Operating Systems Despite Unreliable Device Drivers. - Technical Report IR-CS-018, January 2006. 3. Липаев В.В. Анализ и сокращение рисков проектов сложных программных средств. - М.: СИНТЕГ. 2005, 224 с. ISBN 978-5-7262-0883-1. НАУЧНАЯ СЕССИЯ МИФИ-2008. Том 12 1