1.5. Модели надежности программного и информационного обеспеченияНадежность является важным и естественным требованием, предъявляемым к качеству разрабатываемых программных и информационных компонентов АСОИУ. Теория надежности аппаратных средств АСОИУ разработана достаточно глубоко, поэтому при исследовании надежности программного и информационного обеспечения большинство методов используют идеи теории надежности технических средств. Это позволяет инженеру не только оценивать, но и прогнозировать надежность программно-информационных продуктов. С точки зрения надежности между техническими устройствами и программными продуктами кроме несомненных аналогий имеются существенные различия. Так, небрежно написанный и отлаженный программный модуль, непродуманная схема технического устройства могут давать неправильные результаты уже на первых этапах тестирования. Однако на этом сходство заканчивается. Дело в том, что любое, даже самое надежное, техническое устройство подвержено эксплуатационному износу и со временем начинает отказывать из-за старения. Программные же модули лишены подобных недостатков, и их надежность может в ходе эксплуатации только увеличиваться за счет устранения выявляемых ошибок. Поэтому теоретически может возникнуть ситуация, когда при тестировании программного модуля ошибки уже не будут обнаруживаться. В процессе анализа надежности программное и информационное обеспечение (ИО) можно рассматривать как подсистемы АСОИУ. Работоспособным называется такое состояние программного средства, при котором оно способно выполнять заданные функции с параметрами, установленными требованиями технического задания. С переходом в неработоспособное состояние связано событие отказа. Причиной отказа программного средства является невозможность его полной проверки в процессе тестирования и испытаний. При эксплуатации программного средства в реальных условиях может возникнуть такая комбинация входных данных, которая вызовет отказ. Следовательно, работоспособность программного средства зависит от входных данных, и чем меньше эта зависимость, тем выше уровень надежности. В общем случае отказы программного обеспечения определяются как отклонения от правильного хода выполнения программы вследствие ошибок, допущенных в процессе преобразования исходного алгоритма в действующую программу. А ошибка — это регистрируемый пользователем факт неудовлетворенности качеством программы, причина дефекта системы программного обеспечения; и наоборот, дефект рассматривается как проявление допущенной ранее ошибки. Таким образом, надежность программного (и информационного) обеспечения можно определить как вероятность того, что отказ программного обеспечения, вызывающий отклонение получаемых результатов — выход их за допустимые пределы, не произойдет в течение заданного периода времени (при определенных условиях внешней среды). Следует иметь в виду, что не все отказы приводят к уменьшению надежности программного обеспечения, а только те, которые вызывают отклонение результата расчета от допустимых пределов. Под определенными условиями внешней среды обычно понимается состояние АСОИУ и описание входных данных в процессе выполнения программы. Состояние АСОИУ определяется в основном возможностями вычислительных средств обработки и хранения информации (например, объемом главной оперативной памяти) и зависит от требований к программному обеспечению в части его способности нормально функционировать при наличии отказов. Под способностью подразумеваются свойства программного обеспечения, которые закладываются при его проектировании (например, возможность смены программ в памяти; возможность возобновления работ с некоторых контрольных точек и т. д.). В общем случае работа в условиях внешней среды, не предусмотренных техническим заданием и проектом программного обеспечения, приведет к снижению надежности последнего.^ Временной факторпри расчете надежности учитывает время, необходимое для вычислительного процесса решения той или иной задачи. Выделение определенного временного интервала для оценки качества программного обеспечения, по-видимому, целесообразно для систем реального времени, в которых непредсказуемыми являются число расчетов по любой из действующих программ, состояние базы данных и моменты начала выполнения той или иной программы. Каждый раз перед повторным запуском программы необходимо либо восстанавливать исходное состояние памяти, либо осуществлять серию последовательных просчетов программы, при которых определенным образом последовательно изменяется состояние базы данных.^ Модель надежности программного и информационного обеспечения—это математическая модель, построенная для оценки зависимости надежности программного и информационного обеспечения от некоторых определенных параметров. Например, параметров, связанных с какой-либо ветвью программы на подмножестве наборов входных данных, с помощью которых эта ветвь контролируется. Или частоты ошибок, которая позволяет оценить качество систем реального времени, функционирующих в непрерывном режиме, и при этом получить косвенные данные о надежности программного и информационного обеспечения. Известные модели надежности программного и информационного обеспечения АСОИУ можно классифицировать по различным признакам, в частности по тому, какой из перечисленных процессов они поддерживают (предсказывающие, прогнозные, оценивающие, измеряющие). Модели надежности, которые в качестве исходной информации используют данные об интервалах между отказами, можно отнести к измеряющим или к оценивающим в равной степени. Некоторые модели, основанные на информации, полученной в ходе тестирования программного средства, дают возможность делать прогнозы его поведения в процессе эксплуатации. Аналитические модели позволяют рассчитать количественные показатели надежности, основываясь на данных о поведении программы в процессе тестирования (измеряющие и оценивающие модели).^ Аналитические модели реализуются в виде динамических и статических. В динамических моделях надежности программно-информационных средств поведение программы (появление отказов) рассмат-ривается во времени. В статических моделях появление отказов не связывают со временем, а учитывают только зависимость количества ошибок от числа тестовых прогонов (по области ошибок) или зависимость количества ошибок от характеристики входных данных (по области данных). Именно аналитическим моделям уделено особое внимание в данном параграфе.^ Эмпирические модели базируются на анализе структурных особенностей программ. При разработке эмпирических моделей надежности программного и информационного обеспечения предполагается, что связь между надежностью и другими параметрами является статической. Эти модели рассматривают зависимость показателей надежности от числа межмодульных связей, количества циклов в модулях, отношения количества прямолинейных участков к количеству точек ветвления и т. п. Иначе говоря, при разработке эмпирической модели стремятся иметь дело с такими параметрами, соответствующее изменение значений которых должно приводить к повышению надежности программного и информационного обеспечения. Необходимо отметить, что нередко эмпирические модели не дают конечных результатов показателей надежности.^ Основные количественные показатели надежности программного и информационного обеспечения Для оценки надежности используются три группы показателей: качественные, порядковые и количественные. К основным количественным показателям надежности программного средства относятся:^ Вероятность безотказной работы P(t3) — это вероятность того, что в пределах заданной наработки отказ системы не возникает. При этом под наработкой понимается продолжительность или объем работ. где t— случайное время работы программно-информационного обеспечения до отказа; t3— заданная наработка.Вероятность отказа — вероятность того, что в пределах заданной наработки отказ программно-информационной системы возникает. Это показатель, обратный предыдущему: гдеf(t)—плотностьвероятностиотказавмоментвремениL Связь между λ(t) и P(t) определяется следующим соотношением:^ Интенсивность отказов ПО и ИО системы λ( t) — это условная плотность вероятности возникновения отказа программного или информационного обеспечения в определенный момент времени при условии, что до этого времени отказ не возник. В частном случае при λ ■ constЕсли в процессе тестирования фиксируется определенное число отказов за некоторый интервал времени, то интенсивность отказов системы λ(t) характеризует число отказов в единицу времени. где t— время работы программного или информационного обеспечения от (i -1 )-го до i -го отказа.^ Средняя наработка до отказа Т. — математическое ожидание времени работы программного или информационного обеспечения АСОИУ до очередного отказа. где ti— время работы программного средства между отказами; ι = 1, 2, ..., n —количество отказов. Среднее время восстановления Ti — математическое ожидание времени восстановления (tвi), времени, затраченного на восстановление и локализацию отказа (tолi), времени устранения отказа (iyoi), времени пропускной проверки работоспособности (tnni): Для этого показателя термин «время» означает время, затраченное программистом на перечисленные виды работ.^ Коэффициент готовности Кi оценивается как вероятность того, что программное и информационное обеспечение АСОИУ будет находиться в работоспособном состоянии в произвольный момент времени его использования по назначению: Напомним, что работоспособным называется такое состояние программно-информационного обеспечения, при котором оно способно выполнять заданные функции с параметрами, установленными требованиями технического задания. С переходом в неработоспособное состояние связано событие отказа. Причиной отказа программного и информационного обеспечения является невозможность его полной проверки в процессе тестирования и испытаний. При эксплуатации ПО и ИО в реальных условиях может возникнуть такая комбинация входных данных, которая может вызвать отказ. Следовательно, работоспособность рассматриваемых подсистем может зависеть и от значений входных данных. Причем чем меньше эта зависимость, тем выше уровень надежности подсистем АСОИУ. Основным средством определения количественных показателей надежности являются модели надежности, под которыми понимают математические модели, построенные для оценки зависимости надежности от заранее известных или оцененных в ходе создания программного средства параметров. В связи с этим определение надежности показателей принято рассматривать в единстве трех процессов — предсказание, измерение, оценивание.Предсказание — определение количественных показателей надежности исходя из характеристик будущего программно-информационного продукта.Измерение— определение количественных показателей надежности, основанное на анализе данных об интервалах между отказами, полученных при выполнении программных заданий в условиях тестовых испытаний.Оценивание— определение количественных показателей надежности, основанное на данных об интервалах между отказами, полученных в процессе испытания ПО и ИО АСОИУ в реальных условиях функционирования.^ Динамические модели Аналитическое моделирование надежности программного средства включает четыре шага: определение предположений, связанных с процедурой тестирования программного средства; разработку или выбор аналитической модели, базирующейся на предположениях о процедуре тестирования; • выбор параметров моделей с использованием полученных данных; • применение модели расчета количественных показателей надежности. Аналитические модели представлены двумя группами: динамические и статические модели надежности. Наиболее известными динамическими моделями являются модели Шумана, La Padula, Джелин-ского-Моранды, Шика-Волвертона, Муса. К статическим относят модели Миллса, Липова, Коркорэна, Нельсона. В динамических моделях надежности программного средства поведение программы (появление отказов) рассматривается во времени. Для использования динамических моделей необходимо иметь данные о появлении отказов во времени. Рассмотрим некоторые из указанных выше динамических моделей.^ Модель Шумана относится к динамическим моделям дискретного времени, данные для которой собираются в процессе тестирования программного обеспечения в течение фиксированных или случайных интервалов времени. Каждый интервал — это стадия, на которой выполняется последовательность тестов и фиксируется некоторое число ошибок. Целесообразность применения модели Шумана для оценки надежности программного и информационного обеспечения зависит от принятых допущений и условий, наиболее важным из которых является условие существования программы для исследования системы. Остальные допущения и условия не связаны с какими-либо специфическими свойствами программного обеспечения. Они сводятся к следующему. Предполагается, что в начальный момент компоновки программных средств в системе имеется E1 ошибок. С этого момента начинается отсчет времени отладки t, которое включает затраты времени на выявление ошибок с помощью тестов, на контрольные проверки и т. п. При этом время исправного функционирования системы не учитывается. Считается, что значение функции частоты отказов m(t) пропорционально числу ошибок, оставшихся в программном обеспечении после использования отведенного на отладку исследуемой программы времени L Программа тестирования системы должна снабжать испытываемые программные средства входными данными, отражающими реальные условия функционирования. Такие данные называются функциональным разрезом и определяются главным образом через распределение вероятностей значений входных переменных. Использование модели Шумана предполагает, что тестирование проводится в несколько этапов. Каждый этап представляет собой выполнение программы на полном комплексе разработанных тестовых данных. Выявленные ошибки регистрируются (собирается статистика об ошибках), но не исправляются. По завершении этапа на основе собранных данных о поведении программно-информационной системы на очередном этапе тестирования может быть использована модель Шумана для расчета количественных показателей надежности. После этого исправляются ошибки, обнаруженные на предыдущем этапе. При необходимости корректируются тестовые наборы и проводится новый этап тестирования. При использовании мо- дели Шумана предполагается, что исходное количество ошибок в программе постоянно и в процессе тестирования может уменьшаться по мере того, как ошибки выявляются и исправляются. Считается, что новые ошибки при корректировке не вносятся. Скорость обнаружения ошибок пропорциональна числу оставшихся ошибок. Общее число программных инструкций в рамках одного этапа тестирования постоянно. Положим, что до начала тестирования имеется Eiошибок. В течение времени тестирования τ обнаруживается ξс ошибок в расчете на одну команду программы. Таким образом, удельное число ошибок на одну команду, оставшихся в системе после τ времени тестирования, равно где Ii — общее число команд программы, которое предполагается постоянным в рамках одного этапа тестирования. Будем считать, что значение функции частоты отказов Z(t) пропорционально числу ошибок, оставшихся в программе после использования отведенного для тестирования времени τ: где С— некоторая постоянная; t—время работы программы без отказов. Тогда, если время работы программы без отказа готсчитывается от точки t = 0, а τ остается фиксированным, функция надежности, или вероятность безотказной работы в интервале от 0 до t, будет равна Необходимо найти начальное значение ошибок Ei и коэффициент пропорциональности С. В процессе тестирования собирается информация о времени и количестве ошибок на каждом прогоне, т. е. общее время тестирования τ складывается из времени каждого прогона: гдеАi— количествоошибокнаi-мпрогоне.Предполагая, что интенсивность появления ошибок постоянна и равна λ, можно вычислить ее как число ошибок в единицу времени: На основании приведенных выше уравнений получимИмея данные для двух различных моментов тестирования Ха и хь, которые выбираются произвольно при условии, что ξс(τa) > ξс(τb), можно записать следующие соотношения: Определив значения E1 и С, можно рассчитать надежность программной или информационной системы.Модель La Padula. По этой модели выполнение последовательности тестов производится за т этапов. Каждый этап заканчивается внесением изменений (исправлений) в тестируемую программу. Возрастающая функция надежности базируется на числе ошибок, обнаруженных в ходе каждого тестового прогона. Надежность тестируемой программы в течение i-го этапа определяется соотношением где А — параметр роста. Теоретически при бесконечном числе прогонов программы она будет обладать предельной надежностью R(°°): Модель является прогнозной и на основании данных тестирования позволяет предсказать вероятность безотказной работы программы на последующих этапах ее выполнения. Модель Джелинского-Моранды относится к динамическим моделям непрерывного времени. Исходные данные для ее использования собираются в процессе тестирования программной системы. При этом фиксируется время до очередного отказа. Особенностью данной модели является то, что значение интервалов времени тестирования между обнаружением двух ошибок имеет экспоненциальное распределение с частотой ошибок (или интенсивностью отказов), пропорциональной числу еще не выявленных ошибок. Каждая обнаруженная ошибка устраняется. При этом число оставшихся ошибок уменьшается на единицу. Здесь λ. — частота отказов (интенсивность отказов), которая пропорциональна числу еще не выявленных ошибок в программе:Функция плотности распределения времени обнаружения i-й ошибки, отсчитываемого от момента выявления (ί- 1)-й ошибки, имеет вид где ^ N- число ошибок, первоначально присутствующих в программе; С— коэффициент пропорциональности. Рассчитав значение λi можно определить вероятность безотказной работы в различных временных интервалах. На основе полученных расчетных данных строится график зависимости вероятности безотказной работы от времени.Модель Шика-Волвертона. Модификация модели Джелинского-Моранды для случая возникновения в рассматриваемом интервале более одной ошибки предложена Волвертоном и Шиком. При этом считается, что исправление ошибок производится лишь по истечении интервала времени, в котором они возникли. В основе модели Шика—Волвертона лежит предположение, согласно которому частота ошибок пропорциональна не только количеству ошибок в программах, но и времени тестирования, т. е. вероятность обнаружения ошибок с течением времени возрастает. Частота ошибок (интенсивность обнаружения ошибок) λi предполагается постоянной в течение интервала времени ti и пропорциональна числу ошибок, оставшихся в программе по истечении (i - 1)-го интервала. Но она также пропорциональна и суммарному времени, уже затраченному на тестирование (включая среднее время выполнения программы в текущем интервале): X1=C(N-W14)(^1+ί,./2). В данной модели наблюдаемым событием является число ошибок, обнаруживаемых в заданном временном интервале, а не время ожидания каждой ошибки, как это было для модели Джелинского—Mo-ранды. В связи с этим модель относят к группе дискретных динамических моделей.^ Модель Муса относят к динамическим моделям непрерывного времени. Это значит, что в процессе тестирования фиксируется время выполнения программы (тестового прогона) до очередного отказа. Но считается, что не всякая ошибка программы может вызвать отказ. Поэтому допускается обнаружение более одной ошибки при выполнении программы до возникновения очередного отказа. Предполагается, что на протяжении всего жизненного цикла процесса выполнения программы может произойти M0 отказов и при этом будут выявлены все N0 ошибок, которые присутствовали в программе до начала тестирования. Общее число отказов M0 связано с первоначальным числом ошибок N0 соотношениемN0 = BM0, где В — коэффициент уменьшения числа ошибок. Положим, что после проведения тестирования, на которое потрачено определенное время ί, зафиксировано т отказов и выявлено η ошибок. Тогда из соотношенияп=Bτ можно определить коэффициент уменьшения числа ошибок Bτ как число, характеризующее количество устраненных ошибок, приходящихся на один отказ. В модели Муса различают два вида времени: суммарное время функционирования х, которое учитывает чистое время тестирования до контрольного момента, когда производится оценка надежности; оперативное время t— время выполнения программы, планируемое от контрольного момента и далее, при условии, что дальнейшего устранения ошибок не будет (время безотказной работы в процессе эксплуатации). Для суммарного времени функционирования τ предполагается: • интенсивность отказов пропорциональна числу неустраненных ошибок; • скорость изменения числа устраненных ошибок, измеряемая относительно суммарного времени функционирования, пропорциональна интенсивности отказов. Один из основных показателей надежности, который рассчитывается по модели Муса, — средняя наработка на отказ. Этот показатель определяется как математическое ожидание временного интервала между последовательными отказами и связан с надежностью следующим уравнением: где t— время работы до отказа. Если интенсивность отказов постоянна (т. е. длительность интервалов между последовательными отказами имеет экспоненциальное распределение), то средняя наработка на отказ обратно пропорциональна интенсивности отказов. По модели Муса средняя наработка на отказ зависит от суммарного времени функционирования τ: где T0 — средняя наработка на отказ в начале испытаний (тестирования); С— коэффициент сжатия тестов, который вводится для устранения избыточности при тестировании. Например, если 1 ч тестирования соответствует 12 ч работы в реальных условиях, то коэффициент сжатия тестов равен 12. Параметр T (средняя наработка на отказ до начала тестирования) можно рассчитать с помощью соотношения где f— средняя скорость исполнения программы, отнесенная к числу операторов; К— коэффициент проявления ошибок, связывающий частоту возникновения ошибок со «скоростью ошибок» (скорость, с которой бы встречались ошибки программы, если бы программа выполнялась линейно-последовательно по командам), значение /Сопределя-ют эмпирическим путем по однотипным программам, оно лежит в пределах от 1,54 10-7 до 3,99 · 10-7; N0- начальное число ошибок, которое можно рассчитать с помощью другой модели, позволяющей определить эту величину на основе статистических данных, полученных при тестировании (например, с помощью модели Шумана). Надежность R для оперативного периода τ выражается равенством В литературе указывается, что практическое использование рассматриваемой модели требует громоздких вычислений и делает необходимым наличие ее программной поддержки.^ Статические модели надежностиСтатические модели принципиально отличаются от динамических прежде всего тем, что в них не учитывается время появления ошибок в процессе тестирования. Этот тип моделей учитывает только статистические характеристики появления ошибок.Модель Миллса. Использование этой модели предполагает внесение в программу некоторого количества известных ошибок. Они вносятся случайным образом и фиксируются в протоколе искусственных ошибок. Специалист, проводящий тестирование, не знает ни количества, ни характера внесенных ошибок до момента оценки показателей надежности по модели Миллса. Предполагается, что все ошибки (как имеющиеся в исследуемой программе, так и искусственно внесенные) имеют равную вероятность быть найденными в процессе тестирования. Тестируя программу в течение некоторого времени, собирают статистику об ошибках. В момент оценки надежности по протоколу искусственных ошибок все ошибки делятся на ошибки собственно программы и искусственные. С помощью соотношения (формулы Миллса) можно оценить первоначальное число ошибок в программе (N). Здесь S- количество искусственно внесенных ошибок, η — число найденных собственных ошибок, V— число обнаруженных к моменту оценки искусственных ошибок. Например, если в программу внесено дополнительно 50 ошибок и к некоторому моменту тестирования обнаружено 25 собственных и 5 внесенных, то по формуле Миллса делается предположение, что первоначально в программе было 250 ошибок. Вторая часть модели связана с проверкой гипотезы об оценке первоначального числа ошибок Nb программе. Допустим, что в программе имеется Л" собственных ошибок. Внесем в нее еще S ошибок. Положим, что в процессе тестирования были обнаружены все S внесенных и л собственных ошибок программы. Тогда по формуле Миллса получим, что первоначально в программе было N= n ошибок. Вероятность, с которой можно высказать такое предположение, рассчитывается с помощью следующих соотношений: Величина С является мерой «доверия» к модели и показывает вероятность того, насколько правильно найдено значение N. Эти два связанных между собой по смыслу соотношения образуют полезную модель ошибок: первое предсказывает возможное число первоначально имевшихся в программе ошибок, а второе используется для установления доверительного уровня прогноза. Однако приведенная выше формула для расчета С не может быть использована, если не обнаружены все внесенные ошибки. где числитель и знаменатель при n Если оценка надежности производится до момента обнаружения всех внесенных ошибок (S), величина С рассчитывается по модифицированной формуле: В реальной практике модель Миллса можно использовать для оценки N после каждой найденной ошибки. Предлагается во время всего периода тестирования отвечать на графике число найденных ошибок и текущие значения N К достоинствам модели относят простоту применяемого математического аппарата, наглядность и возможность использования в процессе тестирования. Самым существенным недостатком считают необходимость внесения искусственных ошибок (этот процесс плохо формализуем) и достаточно вольное допущение величины К, которое основывается исключительно на интуиции и опыте испытателя, проводящего оценку, т. е. допускает большое влияние субъективного фактора.Модель Липова. Липов модифицировал модель Миллса, рассмотрев вероятность обнаружения ошибки при использовании различного числа тестов. Если сделать то же предположение, что и в модели Миллса, т. е. что собственные и внесенные ошибки имеют равную вероятность быть найденными, то вероятность обнаружения n собственных и Vвнесенных ошибок может быть определена с помощью соотношения где т — количество тестов, используемых при тестировании; q— вероятность обнаружения ошибки в каждом из т тестов, рассчитанная по формуле; S- общее количество внесенных ошибок; N— количество собственных ошибок, имеющихся в программе до начала тестирования. Оценки максимального правдоподобия (наиболее вероятное значение) для N осуществляются с помощью соотношенийДля использования модели Липова должны выполняться следующие условия: Модель Липова дополняет модель Миллса, позволяя оценить вероятность обнаружения определенного количества ошибок к моменту оценки.Модель Коркорэна относится к статическим моделям надежности ПО, так как в ней не используются параметры времени тестирования, а учитывается только результат N испытаний, в которых выявлено Niошибок i-ro типа. Применение модели предполагает знание следующих ее показателей: модель содержит изменяющуюся вероятность отказов для различных источников ошибок и соответственно разную вероятность их исправления; в модели используются такие параметры, как результат Nиспытаний, в которых наблюдается Ni ошибок г-го типа; обнаруженные в ходе ^испытаний ошибки г-го типа появляются с вероятностью аi Показатель уровня надежности R вычисляют по формуле где N0 — число безотказных (или безуспешных) испытаний, выполненных в серии из ^испытаний; к— известное число типов ошибок; Y— вероятность появления ошибок: при N>0 Y. = аi при N = 0 У>0. Отметим, что в данной модели вероятность а. оценивается на основании априорной информации или данных предшествующего периода функционирования однотипных программных средств.Модель Нельсона создана в аэрокосмической компании США TRW. При расчете надежности программно-информационного обеспечения учитывается вероятность выбора определенного тестового набора для очередного выполнения программы. Для описания модели вводятся следующие обозначения. Совокупность действий, включающая ввод Еi выполнение программы и получение результата F'(E), называется прогоном программы. При этом значения входных переменных, образующих Eiне должны одновременно подаваться на вход программ. Таким образом, вероятность (P) того, что прогон программы приведет к обнаружению дефекта, равна вероятности того, что набор данных Eiиспользуемый в прогоне, принадлежит множеству Ei. Если обозначить через пе число различных наборов входных данных, содержащихся в Е. то есть вероятность того, что прогон программы на наборе входных данных Ei случайно выбранном из E среди равновероятных, закончится обнаружением дефекта. Однако в процессе функционирования программы выбор входных данных из E обычно осуществляется не с одинаковыми априорными вероятностями, а диктуется определенными условиями работы. Эти условия характеризуются некоторым распределением вероятностей (р) того, каким будет выбран определенный набор входных данных Ei Распределение ^ P может быть найдено через р. с помощью величины у., которая принимает значение О, если прогон программы на наборе £ заканчивается получением приемлемого результата, и значение 1, если этот прогон заканчивается обнаружением дефекта. Поэтому есть вероятность того, что прогон программы на наборе входных данных Ei, выбранных случайно с распределением вероятностей рi, закончится обнаружением дефекта. При этом есть вероятность того, что прогон программы на наборе входных данных Ei выбранных случайно с распределением вероятностей рi, приведет к получению приемлемого результата. Так как ^ R- вероятность того, что единичный прогон программы не закончится отказом на наборе входных данных, выбранных в соответствии с распределением рi то вероятность успешного выполнения n прогонов этой программы при независимом для каждого прогона выборе входных данных в соответствии с распределением Рбу-дет равна Таким образом, можно дать следующее математическое определение надежности программы: надежность программы - это вероятность безотказного выполнения n прогонов программы. Поэтому прогон является единичным испытанием программы. На практике выбор входных данных для каждого прогона нельзя считать независимым. Исключение составляют лишь такие последовательности прогонов, которые определяются возрастающими значениями некоторой входной переменной или некоторым порядком установленных процедур, как в случае программ, работающих в реальном масштабе времени. С учетом введенного определения функциональный разрез должен быть переопределен в терминах вероятностей р выбора £ в качестве входных данных при j-м прогоне из некоторой последовательности прогонов. Тогда вероятность того, что j-й прогон закончится отказом, может быть записана в виде Надежность R(n) программы равна вероятности того, что в последовательности из η прогонов ни один из них не закончится отказом: Этаформуламожетбытьпредставленаввиде Некоторые свойства функции R(n) могут стать более явными при следующих допущениях: дляРj еслиРj=Pдлявcexj,то С помощью соответствующих замен переменных и подстановок можно выразить функцию R(п) через время функционирования tОбозначим через Δt время выполнения j-гo прогона, а через ΣΔti - суммарное время выполнения первых jпрогонов программы. Введем h(t)\ В случае Рj Тогда На практике вероятность выбора очередного набора данных для прогона (Pi) определяется путем разбиения всего множества значений входных данных на подмножества и нахождения вероятностей того, что выбранный для очередного прогона набор данных будет принадлежать конкретному подмножеству. Определение этих вероятностей основано на эмпирической оценке вероятности появления тех или иных входов в реальных условиях функционирования. Поскольку в основу модели Нельсона положены свойства программного обеспечения, она допускает развитие за счет более детального описания других аспектов надежности. Некоторые из полученных обобщений модели могут рассматриваться в контексте исследования проблемы безопасности программ. Вследствие отмеченных особенностей модели ее можно рассматривать в целом как математическую теорию надежности программного и информационного обеспечения, а не как простую модель надежности.^ Эмпирические модели надежности Эмпирические модели в основном базируются на структурном анализе особенностей программы или программного обеспечения в целом. Они часто не дают конкретных значений параметров надежности программы. Однако их использование считается полезным на этапе проектирования программ для прогнозирования ресурсов тестирования и т. д.Модель сложности. В литературе неоднократно подчеркивается тесная взаимосвязь между сложностью и надежностью ПО. Если придерживаться упрощенного понимания сложности ПО, то она может быть описана такими характеристиками, как размер ПО (количество программных модулей), количество и сложность межмодульных интерфейсов и т. д. Под программным модулем в данном случае понимается программная единица, выполняющая определенную функцию (ввод, вывод, вычисление и т. д.) и взаимосвязанная с другими модулями ПО. Сложность модуля ПО может быть описана, если рассматривать структуру программы как последовательность узлов, дуг и петель в виде направленного графа.Некоторые базовые понятия для определения характеристик сложности даны в табл. 1.2. В качестве структурных характеристик модуля ПО или программы и