Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Методы повышения надежности программных систем

Поиск

Модели повышения отказоустойчивости можно разделить на две группы: моноверсионные и мультиверсионные. Для работы первых требуется только один вариант алгоритмического модуля, в то время как для вторых – несколько различных модулей с одинаковой спецификацией (мультиверсий одного модуля).

Моноверсионные модели обеспечения надежности в соответствии с их целью можно разбить на четыре группы [13]: предупреждение ошибок, обнаружение ошибок, исправление ошибок и обеспечение устойчивости к отказам. К первой группе относятся методы, позволяющие минимизировать или вообще исключить ошибки. Методы второй группы сосредоточивают внимание на функциях самого программного обеспечения, помогающих выявлять ошибки. К третьей группе относятся методы, предназначенные для исправления ошибок или их последствий. Устойчивость к ошибкам – это способность программного комплекса продолжать функционирование независимо от наличия ошибок.

Все мультиверсионные модели основаны на двух основных методологиях: модели восстанавливающихся блоков и мультиверсионном программировании. Мультиверсии могут выполняться как последовательно, так и параллельно. Они используются как альтернативы (с отдельными средствами обнаружения ошибок), в парах (для обнаружения ошибок путем сравнения реплик) или в больших группах (для обхода ошибок через голосование). Использование множества версий имеет смысл только в том случае, когда такие версии существенно отличаются (разработаны разными разработчиками, работают по разным алгоритмам, созданы разными средствами разработки и т.д.) [14]. Такой подход дает гарантии того, что если один вариант даст сбой на некотором наборе данных, то хотя бы один из оставшихся альтернатив сможет вернуть приемлемый результат.

Моноверсионные модели

Данная модель является основой реализации надежного программного обеспечения. Использование свойств модульности, таких как ограничение распространения сбоев, является ключевым элементом разработки высоконадежных систем. А свойства структуры, такие как видимость (возможность одних модулей прямо и косвенно использовать части других модулей) и соединяемость (способность методов компонент вызываться напрямую или использоваться другими компонентами) следует рассматривать в контексте распространения ошибок и их потенциала к нарушению состояния системы при сбое [20].

Секционирование – техника обеспечения изоляции функционально незавизимых модулей [21]. Секционирование может быть вертикальным и горизонтальным в срезе модульной иерархии программной архитектуры. Горизонтальное секционирование выделяет основные программные функции в независимые структурные ветви, соединяемые через специальные интерфейсы управления модулями. Вертикальное секционирование нацелено на распределение функций управления и обработки по уровням архитектуры: модули верхнего уровеня отвечают за функции упраления, а модули нижнего уровня – осуществляют основную обработку данных. Преимущества применения секционирования заключаются в упрощении отладки и тестирования, упрощение обслуживания и слабое распространение сторонних эффектов [21].

Закрытость системы – это принцип повышения отказоустойчивости, гарантирующий то, что никакое действие не произойдет, если оно не было вызвано принудительно [27]. Под руководством этого принципа, ни одному элементу системы не предоставляется больше возможностей, чем это необходимо для выполнения его функций, а также ограничения должны сниматься непосредственно перед тем, как особые возможности будут использованы. Идея использования закрытости заключается в упрощении обработки ошибок, путем сокращения вероятности их распространения и повреждения системы до их обнаружения. В этом случае все взаимодействия известны и прозрачны, что упрощает задачу разработки механизмов обнаружения ошибок. Закрытость системы должна препятствовать выполнению нежелательных действий в случае ошибки работы модуля.

Обнаружение ошибок

Эффективное применение методов отказоустойчивости моноверсионных систем предполагает наличие двух признаков: самозащита и самопроверка [50] Свойство самозащиты означает, что модуль должен уметь защитить себя от некорректных данных, полученных от внешних взаимодействующих модулей (верификация данных) [13]. Самопроверка подразумевает что модуль должен уметь обнаруживать внутренние ошибки и принимать меры для предотвращения их распространения на другие модули. Степень, с которой механизм самозащиты используется в системе, ограничивается стоимостью дополнительной избыточностью. Заметим, что данная избыточность не повышает функциональность системы, а только лишь качество продукта, в то же время, снижая производительность системы. На практике использование методов повышения отказоустойчивости является компромиссом между функциональностью, производительностью, сложностью и надежностью.

Существует несколько видов проверок для обнаружения ошибок [39]:

· Проверка репликации представляет собой механизм обнаружения ошибок путем сравнения выходов модулей;

· Проверка сроков применима к системам и модулям, в спецификации которых содержатся ограничения времени реакции системы. Исходя из этих ограничений, разрабатываются проверки для выявления отклонений от приемлемого поведения модуля;

· Обратные проверки используют выход модуля для вычисления, основываясь на функции модуля, возможных входов. Если вычисленные входы не соответствуют действительному входу, то происходит ошибка.

· Проверки кода используют избыточность для представления информации с четкой связью между рабочими и избыточными данными. Обнаружение ошибок проверяет эту связь до и после операций. Примером таких проверок является контрольная сумма (также коды Хэмминга, циклические коды и т.д.) [80]. Данный вид проверок особенно эффективен, когда данные перекомпоновываются либо передаются из одной точки в другую без изменений. Многие арифметические операции также обладают свойствами между рабочими и избыточными данными, и поэтому могут быть проверены на ошибки своего выполнения.

· Проверка допустимости данных использует семантические свойства данных (диапазон, скорость изменения, последовательность) для обнаружения ошибок.

· Структурная проверка использует известные свойства структуры данных. Например, в списках, очередях и деревьях можно проверить правильность ссылок на элементы. Структурные проверки можно сделать более эффективными расширив структуру данных дополнительной (избыточной) информацией. Например, для деревьев можно хранить счетчик с количеством дочерних элементов, для списков – с общим количеством элементов, а также индивидуальные идентификаторы для всех элементов [47] [48].

Другим средством предупреждение отказов, являются проверки во время выполнения, такие как проверка деления на ноль, переполнение, нехватка памяти и т.д.. Несмотря на то, что такие проверки не связанны непосредственно с логикой задачи, тем не менее, они представляют собой эффективное средство обнаружения ошибок спецификации.

Несмотря на множество методов обнаружения ошибок, практика показывает, что невозможно предвидеть все отказы и сгенерировавшие их ошибки. Это связано в первую очередь с природой ошибок программного обеспечения [50].



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 359; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.116.15.124 (0.006 с.)