Способы оперативного повышения надежности ПО
Рассмотрим способы оперативного повышения надежности ПО (см. рис. 6.1). Под временной избыточностью понимается резерв времени, которыйимеет ПО (или аппаратура) для выполнения требуемой функции системой. В этом случае при сбое ПО ( или аппаратуры) можно повторить выполнение заданного ПО.
Для организации программного резервирования [6.7] подготавливаются две или несколько версий решения одной и той же задачи. Желательно, чтобы эти версии значительно отличались друг от друга, т.е. основывались на различных алгоритмах или, по крайней мере, выполнялись разными программистами. Маловероятно, что возможные ошибки различных версий программ совпадут. Далее параллельно или последовательно во времени рассматривают выполнение версий ПО непосредственно в процессе эксплуатации. Если версий программ две, то говорят о дуальном программировании, иначе (при нескольких подготовленных вариантах ПО) выполняется n-версионное программирование.
При дуальном программировании, если обнаруживается расхождение результатов (результаты сравниваются соответствующими аппаратными или программными средствами), необходимо определить по каким-либо дополнительным критериям, какой из результатов правильный и отбросить другой результат. При n-версионном программировании правильный результат выбирается по мажоритарному признаку (см. п. 4).
Программное резервирование требует избыток оборудования или времени для вычислений, если версии ПО выполняются последовательно во времени. Такое программирование целесообразно использовать, если имеет место нагруженное резервирование аппаратуры АСОИУ.
Часто используется модифицированное дуальное программирование, где наряду с достаточно точной, но сложной программой, используется менее точная, но простая резервная программа. Если при одинаковых исходных данных результаты работы двух ПО отличаются на величину, большую допустимой погрешности, предполагают, что имеет место отказ в основной программе, как менее надежной. В качестве правильного результата принимается результат, полученный при помощи резервной программы.
Рассмотренные методы резервирования применимы как для программ пользователя, так и для операционных систем. Так, для мультипрограммной обработки используются виртуальные машины, которые создают для пользователя иллюзию работы каждой программы на отдельной машине со своей ОС. Все методы программного резервирования не экономичны, как в смысле использования труда программиста, так и в смысле затрат памяти ЭВМ, аппаратуры и времени.
Существует более экономный способ повышения надежности ПО – метод контрольных функций. При этом методе наряду с вычисляемой функцией по иной программе определяется другая функция, находящаяся с основной функцией в определенных соотношениях. Эти соотношения позволяют не только обнаружить отказ в ПО, но и восстановить искаженный результат. Простейшим примером применения метода контрольных функций является вычисление функций sin x и cos x по отдельным программам. Контрольным соотношением в данном случае будет соотношение sin2 x + cos2 x = 1.
Метод контрольных функций, рассмотренный в общем виде, является обобщением методов избыточного кодирования с обнаружением и исправлением ошибок. Он позволяет исправлять не элемент кода, а вычисляемую функцию, содержащую ошибку.