1.4. Модель анализа надежности программных средств
Анализ надежности программных средств базируется на модели взаимодействия следующих компонентов:
объектов уязвимости,
дестабилизирующих факторов и угроз надежности,
методов предотвращения угроз надежности,
методов повышения надежности.
Модель взаимодействия этих компонент представлена на рис.1.1.
Рисунок 1.1 – Модель анализа надежности программных средств
Объектами уязвимости, влияющими на надежность ПС являются:
динамический вычислительный процесс обработки данных;
информация, накопленная в базах данных;
объектный код программ, исполняемых вычислительными средствами в процессе функционирования ПС;
информация, выдаваемая потребителям.
1.5. Дестабилизирующие факторы и угрозы надежности функционирования программных средств
На объекты уязвимости воздействуют различные дестабилизирующие факторы, которые делятся на внутренние и внешние.
Внутренние источники угроз надежности функционирования сложных программных средств присущи самим объектам уязвимости. Ими являются:
системные ошибки при постановке целей и задач создания ПС, при формулировке требований к функциям и характеристикам решения задач, определении условий и параметров внешней среды, в которой предстоит применять ПС;
алгоритмические ошибки разработки при непосредственной спецификации функций программных средств, при определении структуры и взаимодействия компонент комплексов программ, а также при использовании информации баз данных;
ошибки программирования в текстах программ и описаниях данных, а также в исходной и результирующей документации на компоненты и ПС в целом;
недостаточную эффективность используемых методов и средств оперативной защиты программ и данных от сбоев и отказов и обеспечения надежности функционирования ПС в условиях случайных негативных воздействий.
Внешние дестабилизирующие факторы обусловлены средой, в которой функционируют объекты уязвимости. Ими являются:
ошибки персонала при эксплуатации;
искажение информации в каналах связи;
сбои и отказы аппаратуры;
изменение конфигурации аппаратуры информационных систем.
На практике полностью исключить дестабилизирующие факторы невозможно, поэтому необходимо разработать средства и методы уменьшения их влияния на надежность ПС.
1.6. Методы предотвращения угроз надежности
В современных автоматизированных технологиях создания сложных ПС с позиции обеспечения их необходимой и заданной надежности можно выделить методы и средства позволяющие:
— создавать программные модули и функциональные компоненты высокого, гарантированного качества;
— предотвращать дефекты проектирования за счет эффективных технологий и средств автоматизации обеспечения всего жизненного цикла комплексов программ и баз данных;
— обнаруживать и устранять различные дефекты и ошибки проектирования, разработки и сопровождения программ путем систематического тестирования на всех этапах жизненного цикла ПС;
— удостоверять достигнутые качество и надежность функционирования ПС в процессе их испытаний и сертификации перед передачей в регулярную эксплуатацию;
— оперативно выявлять последствия дефектов программ и данных и восстанавливать нормальное, надежное функционирование комплексов программ.
Внешние дестабилизирующие факторы имеют различную природу. Современные достижения микроэлектроники значительно снизили влияние сбоев и отказов вычислительных средств на надежность функционирования программных средств. Однако ошибки персонала, искажения данных в каналах телекоммуникации, а также случайные (при отказах части аппаратуры) и необходимые изменения конфигурации вычислительных средств остаются существенными внешними угрозами надежности ПС. Негативное влияние этих факторов может быть значительно снижено соответствующими методами и средствами защиты и восстановления программ и данных.
Степень влияния всех внутренних дестабилизирующих факторов и некоторых внешних угроз на надежность ПС в наибольшей степени определяется качеством технологий проектирования, разработки, сопровождения и документирования ПС и их основных компонент. При ограниченных ресурсах на разработку ПС для достижения заданных требований по надежности необходимо управление обеспечением качества в течение всего цикла создания программ и данных.
Для обнаружения и устранения ошибок проектирования все этапы разработки и сопровождения программных средств должны быть поддержаны методами и средствами систематического тестирования. Тестирование – это основной метод измерения качества, определения корректности и реальной надежности функционирования программ на каждом этапе разработки. Результаты тестирования должны сравниваться с требованиями технического задания или спецификацией.
Кроме того, обеспечение качества ПС предполагает формализацию и сертификацию технологии их разработки, а также выделение в специальный процесс поэтапное измерение и анализ текущего качества создаваемых и применяемых компонент.
Итак, основные методы предотвращения угроз надежности:
предотвращение ошибок проектирования в CАSE-технологиях;
систематическое тестирование;
обязательная сертификация
Комплексное применение этих методов позволяет значительно ослаблять влияние угроз. Таким образом, уровень достигнутой надежности зависит от ресурсов, выделяемых на его достижение и от качества технологий, используемых на всех этапах жизненного цикла программного средства.
1.7. Оперативные методы повышения надежности функционирования программных средств
Чтобы обеспечить высокую надежность функционирования ПС, необходимы вычислительные ресурсы для максимально быстрого обнаружения проявления дефектов и выполнения автоматических мероприятий, обеспечивающих быстрое восстановления нормального функционирования ПС. Для этих целей используются следующие оперативные методы повышения надежности:
временная избыточность,
информационная избыточность,
программная избыточность.
Временная избыточность состоит в использовании некоторой части производительности компьютера для контроля исполнения программ и восстановления вычислительного процесса. Для этого при проектировании информационной системы должен предусматриваться запас производительности, который будет затем использоваться на контроль и оперативное повышение надежности функционирования. Величина временной избыточности зависит от требований к надежности и находится в пределах от 5-10% производительности компьютера до 3-4-кратного дублирования производительности отдельной машины в многопроцессорных вычислительных системах. Временная избыточность используется для контроля и обнаружения искажений, на их диагностику и выработку решений по восстановлению вычислительного процесса или информации, а также на реализацию операций восстановления.
Информационная избыточность состоит в дублировании накопленных исходных и промежуточных данных, обрабатываемых программами. Избыточность используется для сохранения достоверности данных, которые в наибольшей степени влияют на нормальное функционирование ПС и требуют значительного времени для восстановления. Их защищают 2-3 кратным дублированием с периодичным обновлением.
Программная избыточность используется для контроля и обеспечения достоверности наиболее важных решений по обработке информации. Она заключается в сопоставлении результатов обработки одинаковых исходных данных программами, различающимися используемыми алгоритмами, и в исключении искажений при несовпадении результатов. Программная избыточность необходима также для реализации программ автоматического контроля и восстановления данных с использованием информационной избыточности и для функционирования всех средств обеспечения надежности, использующих временную избыточность.
Средства оперативного программного контроля включаются после использования прикладных и сервисных программ, поэтому средства программного контроля обычно не могут обнаружить непосредственно причину возникновения искажения вычислительного процесса или данных и фиксирует только последствия первичного искажения, т.е. вторичную ошибку. Результаты первичного искажения могут приобрести катастрофический характер при запаздывании их обнаружения и локализации. Для обеспечения надежности дефекты нужно обнаружить с минимальным запаздыванием, при этом желательны минимальные затраты аппаратных ресурсов, поэтому используются иерархические схемы контроля, при которых последовательно используется несколько методов в порядке углубления контроля и увеличения затрат до выявления источника искажения. Целесообразно акцентировать ресурсы на потенциально наиболее опасных дефектах и достаточно частых режимов восстановления: при искажениях программ и данных, при перегрузках по производительности и при параллельном использовании программ.
1.8. Характеристики программных ошибок
При тестировании и отладке обычно сначала обнаруживаются вторичные ошибки, т. е. результаты проявления исходных дефектов, которые являются первичными ошибками. Локализация и корректировка таких первичных ошибок приводит к устранению ошибок, первоначально обнаруживаемых в результатах функционирования программ.
Проявление дефектов и ошибок в разной степени влияет на работоспособность программ. По величине ущерба проявление вторичных ошибок делятся на 3 группы:
сбои, которые не отражаются на работоспособности программ, ущербом от которым можно пренебречь,
ординарные отказы, ущерб от которых находится в некоторых допустимых пределах,
катастрофические отказы, ущерб от которых так велик, что определяет безопасность применения данного ПС.
Характеристики и конкретные реализации первичных ошибок не позволяют однозначно предсказать типы и степень проявления вторичных ошибок. На практике простейшие ошибки программ и данных могут привести к катастрофическим последствиям. В то же время системные дефекты могут только немного ухудшать эксплуатационные характеристики и не отражаются на безопасности функционирования ПС. Статистика ошибок в программных комплексах и их характеристики могут служить ориентиром для разработчиков при распределении усилий на отладку. Однако регистрация, сбор и анализ характеристик ошибок в программах – это сложный и трудоемкий процесс. Кроме того, разработчики программ не афишируют свои ошибки. Все это препятствует получению объективных данных об ошибках.
Первичные ошибки в порядке усложнения их обнаружения можно разделить на следующие виды:
технологические ошибки подготовки данных и документации,
программные ошибки из-за неправильной записи текста программ на языке программирования и ошибок трансляции программы в объектный код,
алгоритмические ошибки, связанные с неполным формулированием необходимых условий решения и некорректной постановкой задач,
системные ошибки, обусловленные отклонением функционирования ПС в реальной системе и отклонением характеристик внешних объектов от предполагаемых при проектировании.
Перечисленные ошибки различаются по частоте и методам их обнаружения на разных этапах проектирования. При автономной и в начале комплексной отладки доля системных ошибок составляет около 10%. На завершающих этапах комплексной отладки она возрастает до 35-40%. В процессе сопровождения системные ошибки являются преобладающими и составляют около 80% от всех ошибок. Частота появления вторичных ошибок при функционировании программ и частота их обнаружения при отладке зависит от общего количества первичных ошибок в программе. Наиболее доступно для измерения число вторичных ошибок в программе, выявленных в единицу времени в процессе тестирования. Возможна также регистрация отказов и искажение результатов при эксплуатировании программ.
1.9. Математические модели описания статистических характеристик ошибок в программах
Путем анализа и обобщения экспериментальных данных в реальных разработках было предложено несколько математических моделей, описывающих основные закономерности изменения суммарного количества вторичных ошибок в программах.
Модели имеют вероятностный характер, и достоверность прогнозов в значительной степени зависит от точности исходных данных. Модели дают удовлетворительные результаты при относительно высоких уровнях интенсивности проявления ошибок, т.е. при невысокой надежности ПС. В этих условиях математические модели предназначены для приближенной оценки:
потенциально возможной надежности функционирования программ в процессе испытаний и эксплуатации;
числа ошибок, оставшихся не выявленными в анализируемых программах;
времени тестирования, требующегося для обнаружения следующей ошибки в функционирующей программе;
времени, необходимого для выявления всех имеющихся ошибок с заданной вероятностью.
Построение математических моделей базируются на предположении о жесткой связи между следующими тремя параметрами:
суммарным количеством первичных ошибок в программе,
числом ошибок, выявленных в единицу времени в процессе тестирования и отладки,
интенсивностью искажения результатов в единицу времени на выходе комплекса программ при нормальном его функционировании из-за невыявленных первичных ошибок.
Предполагается, что все три показателя связаны коэффициентом пропорциональности (рис.1.2).
Рисунок 1.2 – Суммарное число первичных ошибок (сплошная кривая), число ошибок, выявляемых в единицу времени (пунктир), интенсивность искажения результатов в единицу времени (штрих-пунктир) в зависимости от времени отладки
В настоящее время описаны несколько математических моделей, основой которых являются различные гипотезы о характере проявления вторичных ошибок в программах. Экспоненциальная математическая модель распределения ошибок в программах основана на следующих предположениях:
Интервалы времени между обнаруживаемыми искажениями результатов предполагаются статистически независимыми.
Интенсивность проявления ошибок остается постоянной пока не произведено исправление первичной ошибки или не изменена программа по другой причине. Если каждая обнаруженная ошибка исправляется, то значения интервалов времени между их проявлениями изменяются по экспоненциальному закону.
Интенсивность обнаружения вторичных ошибок пропорциональна суммарному числу первичных ошибок, имеющихся в данный момент в комплексе программ.
Приведенные предположения позволяют построить экспоненциальную математическую модель распределения ошибок в программах и установить связь между интенсивностью обнаружения ошибок при отладке dn/dt, интенсивностью проявления ошибок при нормальном функционировании комплекса программ l и числом первичных ошибок. Предположим, что в начале отладки комплекса программ при t=0 в нем содержалось N первичных ошибок. После отладки в течение времени t осталось по первичных ошибок и устранено п ошибок (n0+n = N ). При этом время t соответствует длительности исполнения программ на компьютере для обнаружения ошибок и не учитывает время, необходимое для анализа результатов и проведения корректировок. Календарное время отладочных и испытательных работ с реальным комплексом программ больше, так как после тестирования программ, на которое затрачивается машинное время t, необходимо время на анализ результатов, на обнаружение и локализацию ошибок, а также на их устранение. Однако для определения характеристик проявления ошибок играет роль только длительность непосредственного функционирования программ на компьютере.
При постоянных усилиях на тестирование и отладку интенсивность обнаружения искажений вычислительного процесса, программ или данных вследствие еще невыявленных ошибок пропорциональна количеству оставшихся первичных ошибок в комплексе программ. Как уже отмечалось, предположение о сильной корреляции между значениями n и dn/dt достаточно естественно и проверено анализом реальных характеристик процесса обнаружения ошибок. Тогда
dn/dt=K1k=Kn0=K(N0-n) , (1.1)
где коэффициенты К и К1 учитывают: масштаб времени, используемого для описания процесса обнаружения ошибок, быстродействие компьютера, распределение тестовых значений на входе проверяемого комплекса и другие параметры. Значение коэффициента К можно определить как изменение темпа проявления искажений при переходе от функционирования программ на специальных тестах к функционированию на нормальных типовых исходных данных. В начале отладки это различие может быть значительным, однако, при завершении отладки и при испытаниях тестовые данные практически совпадают с исходными данными нормальной эксплуатации. Поэтому ниже К1 полагается равным единице (К1 =1). Таким образом, интенсивность обнаружения ошибок в программе и абсолютное число устраненных первичных ошибок связываются уравнением:
dn/dt + Kn = KN0 (1.2)
Так как выше предполагалось, что в начале отладки при t =0 отсутствуют обнаруженные ошибки, то решение уравнения (2) имеет вид:
n=N0 [1-exp(-Kt)] . (1.3)
Число оставшихся первичных ошибок в комплексе программ
n0 = N0 exp(-Kt) (1.4)
пропорционально интенсивности обнаружения dn/dt с точностью до коэффициента К.
Наработка между проявлениями ошибок, которые рассматриваются как обнаруживаемые искажения программ, данных или вычислительного процесса, равна величине, обратной интенсивности обнаружения ошибок
T = 1 / (dndt) = 1/KN0 * exp (Kt) (1.5)
Следует подчеркнуть статистический характер приведенных соотношений. Дальнейшая детализация модели описания характеристик программных ошибок связана с уточнением содержания и значения коэффициента пропорциональности К и с учетом затрат на отладку. При исследовании ошибок в программах различными авторами был сформулирован ряд уточнений и допущений, отличных от приведенных выше. Эти допущения, а также специфические методы построения послужили основой создания нескольких более сложных математических моделей, отличающихся от простейшей экспоненциальной. Однако ни одна из этих моделей не имеет явных преимуществ по точности аппроксимации распределений и прогнозирования числа программных ошибок по сравнению с простейшей экспоненциальной моделью.