Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
FINAL.doc
Скачиваний:
80
Добавлен:
04.06.2015
Размер:
1.29 Mб
Скачать
    1. Методы повышения надежности программных систем

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

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

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]