3. НАДЁЖНОСТЬ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Исследования в области программной надёжности находятся на начальном этапе своего развития.
Целесообразно выделить две стороны программного обеспечения объекта: программную надёжность объекта - свойство объекта выполнять заданные функции, обусловленные качеством программного обеспечения; надёжность программного обеспечения - свойство программного обеспечения выполнять предписанные ему требования.
Программная надёжность изделия проявляется при совместной работе аппаратуры и программы. Она характеризует способность изделия выполнять заданные функции при условии, что программа будет находиться в том или другом состоянии.
Надёжность программного обеспечения характеризует качественное состояние программы. Её иногда называют правильностью программы, корректностью программы, надёжностью программы.
Программная надёжность объекта - это то, что интересует его потребителя. Для её обеспечения необходимо, чтобы программа была “правильной”, “корректной”, “надёжной”, т.е. чтобы она не содержала ошибок. Может оказаться, что некоторые из ошибок совсем не проявятся при работе объекта или, наоборот, при работе объекта обнаружатся дополнительные несовершенства (“ошибки”) программы. Однако очевидно, что необходимым условием надёжной работы объекта является “корректность” программ, т.е. отсутствие в них ошибок.
Программная надёжность становится особо актуальной, когда программы являются самостоятельным изделием. В этом случае они изготовляются, проверяются и подвергаются приёмосдаточным испытаниям так же, как обычные объекты.
Положения о двух сторонах надёжности программного обеспечения полезно иметь в виду при исследовании надёжности программно-управляемых объектов.
3.1 Сравнительные характеристики программных и аппаратурных отказов
Программные отказы изделия и аппаратурные отказы имеют много общего, но во многом существенно различаются. Общее между ними:
а) невыполнение объектом заданных функций;
б) времена до отказов и времена устранения отказов носят случайный характер;
в) методы обработки статистических данных об отказах одинаковы, а потому статистические оценки показателей надёжности аппаратурной и программной, полученные по результатам испытаний и эксплуатации, могут быть одинаковыми по своему названию: средняя наработка объекта на программный отказ, интенсивность программных отказов объекта и т.д. Возможны и объединённые (комплексные) оценки: средняя наработка объекта на программный и аппаратурный отказ и т.п.
Вместе с тем отказы программные существенно отличаются от отказов аппаратурных:
а) отказ аппаратурный зависит либо от времени, либо от объёма выполненной работы, а отказ программный - от той функции, которую выполняет изделие под управлением программы (точнее, от того, с какой вероятностью программа выйдет на такой участок, который содержит ошибку);
б) обнаружение и устранение аппаратурного отказа (заменой отказавшего элемента исправным) не означает, что такой же отказ не повторится при дальнейшей работе изделия, а обнаружение и устранение отказа программного (исправление программы) означает, что такой отказ в дальнейшем не повторится;
в) программный отказ, обнаруживаемый при автономной проверке программы, может переходить в разряд недействующих, если состояние аппаратуры делает её нечувствительной к данному виду программного отказа. Например, если в программе ошибочно не предусмотрена программная защита от аппаратурного сбоя, то это программный отказ, но если при этом в аппаратуре не возникает сбоя, то отказ программный становится недействующим;
г) прогнозировать возникновение аппаратурных отказов сравнительно легко, а прогнозировать возникновение отдельных программных отказов трудно, а часто и невозможно. Для отдельных программных отказов трудно предвидеть время, когда они становятся действующими, а когда-недействующими;
д) аппаратурные отказы целесообразно подразделять на внезапные и постепенные, т.е. отказы, различные по своей физической природе, законам распределения времени до отказа, методам борьбы за снижение их вероятности. Программные отказы нет смысла делить на внезапные и постепенные. Они возникают внезапно, как только программа переходит на такой участок, который содержит “ошибку”. В то же время они по природе своей не совпадают с внезапными аппаратурными отказами. Вероятность их возникновения не связана с продолжительностью работы изделия, а связана с условной вероятностью того, что программа содержит ошибку в данной части программы, и вероятностью того, что изделие будет работать под управлением этой части программы.
3.2 Проверка и испытания программ
Испытания программ на надёжность и испытания изделий на надёжность их программного обеспечения - обязательные этапы при проверке надёжности систем.
Испытания с целью проверки надёжности программ осуществляются с помощью специальных программ (тестирование) и специальных (имитационных) стендов. Проверяется при этом степень отработанности программы и её соответствие заданным требованиям.
Испытания с целью проверки надёжности изделий, работающих под управлением программ, осуществляются при совместной работе программы и изделия. Проверяются при этом и степень отработанности программы в соответствии с заданными требованиями, и корректность этих требований, и согласованность взаимодействий программы и аппаратуры.
Степень отработанности программы может проверяться различными методами. Чем выше требование к достоверности проверки, тем более сложен метод проверки.
Рассмотрим один из наиболее простых методов. В процессе проверки “корректности” программы (с помощью наблюдений за работой либо изделия, либо имитирующего устройства, либо на специальном стенде с помощью тестов) фиксируются времена обнаружения ошибок в программе. Результаты проверки обрабатываются при следующих предположениях: 1) ошибки программы независимы. Каждый раз после обнаружения они устраняются и в дальнейшем не проявляются. 2) интенсивность ошибок уменьшается по мере их обнаружения и устранения (ступенчато, как показано на рисунке 3.1).
Выявление и устранение ошибок производится до тех пор, пока значение будет меньше заданного значения. Заданное значение назначается с учётом требований к надёжности изделия. Ориетировочно можно исходить из того, что интенсивность программных ошибок, приводящих к отказу, на этапе отладочных испытаний должна быть не больше интенсивности аппаратурных отказов.
Положение о том, что при создании программного обеспечения больших систем возможно возникновение ошибок и что выявление программных ошибок - чрезвычайно трудная задача, не только не должно обезоруживать разработчиков систем, а наоборот, должно ориентировать их на максимальное сосредоточение сил для ликвидации программных отказов.
Влияние программных ошибок на надёжность изделия должно непрерывно уменьшаться с каждым новым этапом освоения программ (разработка - отладка - опытная эксплуатация - нормальная эксплуатация) так, чтобы на этапе нормальной эксплуатации объекта программная надёжность его была на уровне заданных требований.
3.3 Основные проблемы исследования надёжности программного обеспечения
В сложной программно - управляемой технической системе любого типа можно выделить две основные, относительно независимые части.
1. Совокупность автономно, паралельно работающих технических схем и устройств - аппаратная часть.
2. Совокупность программ, ориентированных на решение данного комплекса задач, представляющих математическое обеспечение технической системы и образующих её программную часть (операционная система и рабочие программы пользователей).
При общем анализе характеристик технической системы (её надёжности) следует учитавать, что если аппаратная часть жестко задана, неизменна и её надёжность может быть обеспечена на требуемом уровне, то программная часть в каждом отдельном случае может иметь ряд модификаций, является достаточно гибкой, изменяемой частью технической системы и в обеспечении совокупной надёжности системы определяет наибольшее количество ошибок. Авторы [19] считают, что в настоящее время около половины отказов сложных вычислительных систем обусловлено ошибками программ, а с ростом надёжности элементной базы (ИС, БИС) число откзов, связанных с математическим обеспечением, возрастает до 90% от общего числа отказов.
К основным проблемам исследования надёжности программного обепеспечения (ПО) относится:
1. Разработка методов оценки и прогнозирования надёжности ПО на основе совокупности количественных показателей и характеристик, идентичных показателям аппаратурной надёжности.
2. Определение факторов, влияющих на достижение заданного уровня надёжности ПО.
3. Разработка методов, обеспечивающих достижение заданного уровня надёжности ПО.
4. Совершенствование методов повышения надёжности ПО в процессе проектирования и эксплуатации.
Эффективный способ повышения надёжности ПО - использование методов структурного проектирования программ, так как в зависимости от структуры ПО последствия отдельных ошибок могут быть легко обнаружены, локализованы и исправлены на некотором небольшом участке программы либо распространиться на другие уровни и модули ПО.
3.4 Критерии оценки надёжности программных изделий
Всё множество различных показателей надёжности программных систем можно разбить на две большие группы:
1. Количественные показатели надёжности ПО.
2. Качественные показатели надёжности ПО.
Не рассматривая качественные характеристики надёжности, которые достаточно подробно исследованы в [20, 21], остановимся более подробно на возможности использования количественных показателей для оценки и прогнозирования надёжности ПО.
Наиболее удобно в качестве таких показателей использовать статистические (вероятностные) критерии хорошо разработанной теории надёжности радиоэлектронной аппаратуры. Следует учитывать, что оценка надёжности ПО на основе статистической теории надёжности аппаратуры возможна в пределах некоторых ограничений, учитывающих специфику ПО как определённого вида продукта человеческого труда.
Можно выделить следующие характеристики и количественные показатели надёжности ПО:
1. Безотказность. Говоря о безотказности ПО, характеризующей способность ПО выполнять заданные функции в заданных условиях эксплуатации технической системы, будем считать, что отказ программы - это результат проявления скрытой ошибки. Следует иметь в виду, что входные данные и данные создаваемые программой, не являются элементами ПО, поскольку их надёжность связана с работой внешних устройств и аппаратной части системы. Только константы, вводимые программистом, считаются частью ПО.
Для невосстанавливаемых в ходе эксплуатации программ обобщённой характеристикой надёжности (безотказности) является вероятность безотказной работы P(t), характеризующая вероятность того, что за время t отказа не произойдёт:
P(t) = P(T ³ t) = 1 - q(t); (3.2)
где T - время работы ПО до отказа или наработка ПО до отказа (T - случайная величина); q(t) - вероятность отказа ПО.
Из (3.2) можно определить функцию интенсивности отказов:
; (3.3)
Среднее время наработки до наступления отказа (среднее время безотказной работы) определяется как математическое ожидание временного интервала между двумя последовательными нарушениями работоспособности ПО:
(3.4)
Для экспоненциального закона распределения отказов:
; (3.5)
Поскольку программы имеют явно выраженные производственные циклы работы, то наработка программы может быть выражена либо через календарное время, либо через машинное время, либо через количество отработанных операторов, решённых задач и т.п.
Один из способов оценки - наблюдение за поведением программы в определённый временной период. Тогда величину среднего времени между отказами (сбоями) ПО можно определить так:
(3.6)
где H - общее количество часов успешного прогона программы, определяемое по формуле:
; (3.7)
где - время непрерывного прогона в часах безошибочной работы ПО;
n - общее количество прогонов ПО; r - количество прогонов ПО без ошибок; l = n -r - количество прогонов с ошибками; - время прогона в часах до проявления ошибки ПО.
Полагая количество ошибок постоянным, можно вычислить интенсивность отказов ПО, приведённую к одному часу работы , и среднее время между соседними отказами ПО.
(3.8)
(3.9)
Классифицируя отказы ПО по видам отказов - аппаратные, программные, оператора и т.д., можно определить частные (взвешенные) интенсивности отказов по соответствующим видам ошибок - ап, пр, оп и т.д., а общая надёжность определяется как сумма таких интенсивностей. Такой подход может значительно облегчить сбор статистических данных по соответствующим видам отказов на основе независимого анализа программных изделий различных типов.
В случае, если в ходе эксплуатации возможна корректировка ПО или восстановление программы после отказа, вызванного действием помех (сбоев) от внепрограммных источников, а время восстановления достаточно мало по сравнению с временем между отказами или сбоями, обобщающей характеристикой безотказности ПО является интенсивность потока отказов во времени .
; (3.10)
; (3.11)
где H(t) - среднее число отказов за время t; - среднее время наработки между двумя отказами.
Для программ, время корректировки которых сравнимо с временем между отказами, обобщающей характеристикой безотказности является функция коэффициента готовности в зависимости от времени. Показатель готовности характеризует вероятность застать систему в заданный момент времени в работоспособном состоянии.
2. Устойчивость. Устойчивость ПО определяет способность системы выполнять заданные функции в условиях действия помех (ошибок, сбоев, отказов), возникающих во внепрограммных источниках (техническое обеспечение, исходные данные). При оценке устойчивости ПО должны быть заданы параметры окружающей среды, по отношению к которой оценивается устойчивость программ.
Показатели устойчивости - это показатели безотказности, но с использованием условных вероятностей. Условием, при котором вычисляются вероятности, является отказ (сбой) в программе или аппаратуре.
Для невосстанавливаемых (некорректируемых) программ обобщённым показателем устойчивости служит условная вероятность безотказной работы:
(3.12)
где P(A) - вероятность ошибки (сбоя) программы или отказа аппаратуры.
Безотказность и устойчивость - динамические характеристики, то есть они характеризуют надёжность ПО в процессе работы.
3. Корректируемость. Этот показатель надёжности ПО аналогичен показателю ремонтопригодности радиоэлектронной аппаратуры, характеризует приспособленность ПО к поиску и устранению ошибок и внесению в него изменений в ходе эксплуатации. Он используется для характеристики восстанавливаемых в ходе эксплуатации программ. Показатели корректируемости: время корректировки , вероятность корректировки программы за заданное время , коэффициент готовности , параметр потока корректировок .
4. Защищённость и долговечность. Дополнительными характеристиками надёжности ПО являются: показатель защищённости от посторонних вмешательств в работу ПО и показатель долговечности, характеризующий свойства программ избегать морального старения при длительном использовании. Защищённость характеризуется вероятностью внесения искажений при постороннем вмешательстве, а долговечность - временем отказа ПО вследствие морального старения.
В зависимости от условий применения ПО можно выделить три режима (типа) его работы:
1. Программа не корректируется, и любой отказ является полным, т.е. после отказа ПО не восстанавливается. Основные показатели надёжности для этого режима работы программ - безотказность, устойчивость и защищённость.
2. Программа не корректируется, однако после отказа ПО система продолжает функционировать нормально. Основные показатели надёжности - безотказность, устойчивость, защищённость и долговечность.
3. После каждого отказа ПО корректируется, отлаживается и только после этого снова сдаётся в эксплуатацию. Основные показатели надёжности - безотказность, устойчивость, корректируемость, защищённость, а также потери времени.
3.5 Критерии надёжности сложных комплексов программ
Для оценки надёжности программ, как и при исследовании характеристик аппаратуры, как правило, приходится ограничиваться интегральными показателями наработки на отказ и средним временем восстановления. Определение остальных показателей сопряжено с большими трудностями, которые обусловлены тем, что для определения показателей надёжности комплексов программ необходимы длительные эксперименты или сложные расчёты при определённых исходных данных.
Оценка достоверности результатов и надёжности функционирования комплекса программ представляет собой сложную задачу из-за “проклятия размерности”. Естественным становится статистический подход к анализу надёжности функционирования и статистическая оценка достоверности результатов. Качество отладки определяется интенсивностью (частостью) отказов и значениями ошибок в выходных результатах, полученными за счёт невыявленных ошибок в программах и искажений исходных данных. Интенсивность (частость) отказов в комплексе программ иначе называется как частость проявления ошибок в комплексе программ.
Точное определение полного количества ошибок в программе прямыми методами измерения невозможно. Имеются только косвенные пути статистической оценки их полного количества. Такие оценки базируются на построении математических моделей в предположении жёсткой корреляции между общим количеством и проявлениями ошибок в комплексе программ после его отладки в течении времени t, т.е. между следующими параметрами:
суммарным количеством ошибок в комплексе программ,
количеством ошибок, выявляемых в единицу времени dn/dt в прцессе тестирования и отладки при постоянных усилиях на их проведение;
интенсивностью отказов l или числом искажений результатов на выходе комплекса программ вследствие невыявленных ошибок при нормальном функционировании системы в единицу времени.
... первоначальное количество ошибок можно оценить как: Поставленная задача позволяет определить такие важные характеристики функционирования программного комплекса, как: расчет текущего времени наработки до отказа; расчет среднего времени наработки до отказа за все время моделирования работы системы; расчет вероятности отказа ПО в единицу расчёт коэффициента готовности Таким образом, наша ...
... , что каждый из них можно представить как шкалу в многомерном фазовом пространстве, тогда конкретным АСУ в этом пространстве будут соответствовать точки или определенные области. 2.2. Классификация систем и автоматизация управления сложными системами Прежде всего система – это целостная совокупность некоторых элементов, не сводящаяся к простой сумме своих частей, т.е. представляющая собой ...
... разных этапах производства (потребления) электроэнергии. Основная цель создания таких систем – дальнейшеё повышение эффективности технических и программных средств автоматизации и диспетчеризации СЭС для улучшения технико-экономических показателей и повышения качества и надёжности электроснабжения ПП. Реформирование электроэнергетики России требует создания полномасштабных иерархических систем ...
... , повысить вероятность выявления дефектов и, с другой стороны, снизить различные технико-экономические затраты на проведение контроля. 2. Проектирование системы контроля знаний 2.1 Общая структура системы По своей логической структуре система состоит из трёх частей: - подсистемы конфигурирования теста; - подсистемы тестирования; - подсистема сервиса. ...
0 комментариев