Надежность программного обеспечения (ПО)
Интерес к оцениванию надежности ПО возник одновременно с появлением программ. Он был вызван естественным стремлением получить традиционную вероятностную оценку надежности технического устройства (ЭВМ), работа которого, в основном, и предназначалась для функционирования ПО. Последнее было определено, как одна из составляющих частей машины, поэтому подход к оцениванию надежности программной части первоначально мало отличался от оценивания надежности техники и заключался в переносе известных статистических методов классической теории надежности на новую почву, образовав ее отдельную ветвь – теорию надежности ПО. В целом этот подход сохранился до сегодняшнего дня. Однако по мере развития вычислительной техники пришло четкое понимание того, что ПО – не просто составная часть ЭВМ. В современных условиях развития цифровой техники специальное ПО перестало быть принадлежностью одной вычислительной системы (как это было раньше), а стало использоваться на сотнях и тысячах аналогичных ЭВМ (в основном – персональных). Даже если не касаться вопросов информационной безопасности, проблема обеспечения устойчивого функционирования расчетных программ, выявления их ошибок сегодня крайне остро стоит перед разработчиками.
При применении понятий надежности к программным средствам (ПС) следует учитывать особенности и отличия этих объектов от традиционных технических систем, для которых первоначально разрабатывалась теория надежности:
- не для всех видов программ применимы понятия и методы теории надежности – их можно использовать только к ПС, функционирующим в реальном времени и непосредственно взаимодействующим с внешней средой;
- при разработке и оценке качества программных компонент к ним не применимы понятия надежности функционирования, если при обработке информации они не используют значения реального времени и не взаимодействуют непосредственно с внешней средой;
- доминирующими факторами, определяющими надежность программ, являются дефекты и ошибки проектирования и разработки, и второстепенное значение имеет физическое разрушение программных компонент при внешних воздействиях;
- относительно редкое разрушение программных компонент и необходимость их физической замены, приводит к принципиальному изменению понятий сбоя и отказа программ и к разделению их по длительности восстановления относительно некоторого допустимого времени простоя для функционирования информационной системы;
- для повышения надежности комплекса программ особое значение имеют методы автоматического сокращения длительности восстановления и преобразования отказов в кратковременные сбои, путем введения в программные средства временной, программной и информационной избыточности;
- непредсказуемость места, времени и вероятности проявления дефектов и ошибок, а также их редкое обнаружение при реальной эксплуатации достаточно надежных программных средств, не позволяет эффективно использовать традиционные методы априорного расчета показателей надежности сложных систем, ориентированные на стабильные, измеряемые значения надежности составляющих компонент;
- традиционные методы форсированных испытаний надежности систем путем физического воздействия на их компоненты не применимы для программных средств и их следует заменять на методы форсированного воздействия информационных потоков внешней среды.
С учетом перечисленных особенностей применение основных понятий теории надежности сложных систем к жизненному циклу и оценке качества комплексов программ позволяет адаптировать и развивать эту теорию в особом направлении – надежность программных средств.
К задачам теории и анализа надежности сложных ПС можно отнести следующие:
- формулирование основных понятий, используемых при исследовании и применении показателей надежности программных средств (ПС);
- выявление и исследование основных факторов, определяющих характеристики сложных программных комплексов;
- выбор и обоснование критериев надежности для комплексов программ различного типа и назначения;
- исследование дефектов и ошибок, динамики их изменения при отладке и сопровождении, а также влияния на показатели надежности ПС;
- исследование методов и средств контроля и защиты от искажений программ, вычислительного процесса и данных путем использования различных видов избыточности и помехозащиты;
- разработка методов и средств определения и прогнозирования характеристик надежности в жизненном цикле комплексов программ с учетом их функционального назначения, сложности, структурного построения и технологии разработки.
Результаты решения этих задач являются основой для создания современных сложных ПС с заданными показателями надежности.
Классификация отказов ПС:
- программными – из-за не выявленных ошибок в программе, которые возникают при определенном сочетании данных и команд, соответствующем спецификации;
- информационными – результаты работы искажаются из-за ошибок входных данных;
- аппаратными – возникают в результате перемежающихся отказов технических средств и/или возникновения ошибок в операционных средах (сбоев);
- эргатическими – возникают из-за некорректных действий пользователей.
При определении надежности программных средств рассматривают, как правило, только программные отказы, обусловленные наличием не выявленных ошибок в программе.
Свойства программ:
1. Корректность – статическое свойство программы, определяемое как отсутствие ошибок в программе. Корректность программ обеспечивается отладкой (проверкой) на множестве исходных данных, регламентированных документацией.
2. Устойчивость – динамическое свойство программы, которое характеризует способность программы давать правильные результаты при аппаратных, информационных и эргатических воздействиях. При этом выделяют два вида устойчивости:
- толерантность – способность программы продолжать свою работу и выдавать правильные результаты при наличии перечисленных воздействий.
- консервативность – способность программы при наличии возмущений, не позволяющих правильно решить задачу, перевести вычислительную систему в состояние отказа, из которого с минимальными потерями можно выполнить процедуру рестарта. Устойчивость программ обеспечивают структурной, информационной, временной и алгоритмической избыточностью.
Показатели качества и надежности современных ПС.Формализации показателей качества ПС посвящена группа нормативных документов, в которых выделены характеристики, позволяющие оценивать ПС с позиции пользователя, разработчика и управляющего проектом. Рекомендуется 6 основных характеристик качества ПС, каждая из которых детализируется несколькими (всего 21) субхарактеристиками:
1. Функциональная пригодность – это набор атрибутов, определяющий назначение, номенклатуру, основные необходимые и достаточные функции ПС, заданные техническим заданием заказчика или потенциального пользователя.Функциональная пригодность детализируется:
- пригодностью для применения;
- точностью;
- защищенностью;
- способностью к взаимодействию;
- согласованностью со стандартами и правилами проектирования.
2. Надежность – это способность программы обеспечивать достаточно низкую вероятность отказа в процессе функционирования в реальном времени. Надежность рекомендуется характеризовать:
- уровнем завершенности (отсутствия ошибок);
- устойчивостью к ошибкам;
- перезапускаемостью.
3. Применимость описывается:
- понятностью;
- обучаемостью;
- простотой использования.
4. Эффективность рекомендуется характеризовать:
- ресурсной избыточностью;
- временной избыточностью.
5. Сопровождаемость детализируется:
- удобством для анализа;
- изменяемостью;
- стабильностью;
- тестируемостью.
6. Переносимость предлагается отражать:
- адаптируемостью;
- структурированностью;
- замещаемостью;
- внедряемостью.
Дестабилизирующие факторы, влияющие на надежность ПС.При любом виде деятельности людям свойственно непредумышленно ошибаться, результаты чего проявляются в процессе создания или применения изделий или систем. В общем случае под ошибкой подразумевается дефект, погрешность или неумышленное искажение процесса или объекта. При этом предполагается, что известно правильное, эталонное состояние объекта, по отношению к которому может быть определено наличие отклонения – дефекта или ошибки.Для систематической, координированной борьбы с ними необходимы исследования факторов, влияющих на надежность ПС со стороны случайных, существующих и потенциально возможных дефектов в конкретных программах.
Анализ надежности ПС базируется на модели взаимодействия основных компонент, влияющих на надежность ПС:
1. Объекты уязвимости:
- динамический вычислительный процесс обработки данных, автоматизированной подготовки решений и выработки управляющих воздействий;
- информация, накопленная в базах данных, отражающая объекты внешней среды, и процессы ее обработки;
- объектный код программ, исполняемых вычислительными средствами в процессе функционирования ПС;
- информация, выдаваемая потребителям и на исполнительные механизмы, являющаяся результатом обработки исходных данных и информации, накопленной в базе данных.
На эти объекты воздействуют различные дестабилизирующие факторы, которые можно разделить на внутренние, присущие самим объектам уязвимости, и внешние, обусловленные средой, в которой эти объекты функционируют. К внутренним дестабилизирующим факторам относятся следующие дефекты программ:
- системные ошибки при постановке целей и задач создания ПС, при формулировке требований к функциям и характеристикам решения задач, определении условий и параметров внешней среды, в которой предстоит применять ПС;
- алгоритмические ошибки разработки при непосредственной спецификации функций ПС, при определении структуры и взаимодействия компонент комплексов программ, а также при использовании информации баз данных;
- ошибки программирования в текстах программ и описаниях данных, а также в исходной и результирующей документации на компоненты и ПС в целом;
- недостаточную эффективность используемых методов и средств оперативной защиты программ и данных от сбоев и отказов и обеспечения надежности функционирования ПС в условиях случайных негативных воздействий.
Внешними дестабилизирующими факторами являются:
- ошибки оперативного и обслуживающего персонала в процессе эксплуатации ПС;
- искажения в каналах телекоммуникации информации, поступающей от внешних источников и передаваемой потребителям, а также недопустимые для конкретной информационной системы характеристики потоков внешней информации;
- сбои и отказы в аппаратуре вычислительных средств;
- изменения состава и конфигурации комплекса взаимодействующей аппаратуры информационной системы за пределы, проверенные при испытаниях или сертификации и отраженные в эксплуатационной документации.
Методы обеспечения надежности функционирования ПС.В современных автоматизированных технологиях создания и развития сложных ПС с позиции обеспечения их необходимой и заданной надежности можно выделить методы и средства, позволяющие:
- создавать программные модули и функциональные компоненты высокого гарантированного качества;
- предотвращать дефекты проектирования за счет эффективных технологий и средств автоматизации обеспечения всего жизненного цикла комплексов программ и баз данных;
- обнаруживать и устранять различные дефекты и ошибки проектирования, разработки и сопровождения программ путем систематического тестирования на всех этапах жизненного цикла ПС;
- удостоверять достигнутые качество и надежность функционирования ПС в процессе их испытаний и сертификации перед передачей в регулярную эксплуатацию;
- оперативно выявлять последствия дефектов программ и данных и восстанавливать нормальное, надежное функционирование комплексов программ.
Комплексное, скоординированное применение этих методов и средств в процессе создания, развития и применения ПС позволяют исключать некоторые виды угроз или значительно ослаблять их влияние. Тем самым уровень достигаемой надежности ПС становится предсказуемым и управляемым.
Предотвращение ошибок и улучшение технико-экономических показателей создания ПС обеспечивается применением современных технологий и систем автоматизированного проектирования. Такие технологии позволяют исключать или значительно снижать уровень системных, алгоритмических и программных ошибок в ПС, передаваемых в эксплуатацию.
Для обнаружения и устранения ошибок проектирования все этапы разработки и сопровождения ПС должны быть поддержаны методами и средствами систематического, автоматизированного тестирования. Надежность функционирования ПС непосредственно зависит от полноты применяющихся комплектов тестов и адекватности генераторов тестов реальным объектам внешней среды и условиям будущей эксплуатации.
ЛЕКЦИЯ 8