Принципы и методы обеспечения надежности

 

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

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

Предупреждение ошибок. К этой группе относятся принципы и ме­тоды, цель которых – не допустить появления ошибок в готовой про­грамме. Большинство методов концентрируется на отдельных процессах перевода и направлено на предупреждение ошибок в этих процессах. Их можно разбить на следующие категории:

– методы, позволяющие справиться со сложностью, свести ее к ми­нимуму, так как сложность процесса – главная причина ошибок перевода;

– методы достижения большей точности при переводе;

– методы улучшения обмена информацией;

– методы немедленного обнаружения и устранения ошибок, которые следует обнаруживать на каждом шаге перевода, не откладывая это до тес­тирования готовой программы.

Очевидно, что предупреждение ошибок – оптимальный путь к дос­тижению надежности ПО. Гарантировать отсутствие ошибок, однако, не­возможно никогда. Другие три группы методов опираются на предположе­ние, что ошибки все-таки будут.

Обнаружение ошибок. Если предполагать, что в программном обес­печении ошибки все-таки будут, то лучшая стратегия – включить средства обнаружения ошибок в само ПО. Такие методы часто применя­ются в аппа­ратуре. Это коды, обнаруживающие ошибки (см. подразд. 4.3.8).

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

Исправление ошибок. Следующий шаг – исправление ошибок. По­сле того как ошибка обнаружена, либо она сама, либо ее последствия должны быть исправлены программным обеспечением

При проектировании систем аппаратурного обеспечения такой метод оказался плодотворным. При резервировании замещением, как показано в подразд. 2.2, некоторые устройства способны обнаружить неисправные компоненты и перейти к использованию идентичных запасов. Аналогич­ные методы неприменимы к программному обеспечению вследствие глу­боких внутренних различий между отказами аппаратуры и ошибками в программах. Если некоторый программный модуль содержит ошибку, идентичные «запасные» модули будут содержать ту же ошибку.

Во второй главе (подразд. 2.5.2) был рассмотрен другой вариант этой идеи: коды, исправляющие ошибки. Для ПО аналогичный подход к ис­правлению связан с попытками восстановить разрушения, вызванные ошибками, например искажения записей в базе данных или управляющих таблицах системы. Польза от методов борьбы с искажениями ограниченна, поскольку предполагается, что разработчик заранее должен предугадать все возможные типы искажений и предусмотреть программно реализуемые функции для их устранения.

Устойчивость к ошибкам. Методы этой группы ставят своей целью обеспечить функционирование программной системы при наличии в ней ошибок. Они разбиваются на три подгруппы: динамическая избыточность, методы отступления и методы изоляции ошибок.

Истоки концепции динамической избыточности наряду со статиче­ской избыточностью лежат в проектировании аппаратурного обеспечения. Одна из концепций динамической избыточности – мажоритарный метод. Данные обрабатываются независимо несколькими идентичными устройст­вами и результаты сравниваются. Если большинство устройств вырабо­тало одинаковый результат, то он считается правильным. И опять-таки, при ко­пировании программного модуля мы скопируем имеющуюся в нем ошибку. Предполагаемый поход к устранению этого затруднения – созда­ние неидентичных копий модуля. Это означает, что все копии либо реали­зуют разные алгоритмы, либо выполнены разными лицами, что далеко не всегда возможно.

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

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



?>