软件容错方法之——软件冗余

发表于:2008-01-24来源:作者:点击数: 标签:软件冗余
软件容错的主要目的是提供足够的冗余信息和算法程序,使系统在实际运行时能够及时发现程序设计错误,采取补救措施,以提高软件 可靠性 ,保证整个计算机系统的正常运行。 软件容错技术主要有恢复块方法和N-版本程序设计,另外还有防卫式程序设计等。 (1)恢
软件容错的主要目的是提供足够的冗余信息和算法程序,使系统在实际运行时能够及时发现程序设计错误,采取补救措施,以提高软件可靠性,保证整个计算机系统的正常运行。

  软件容错技术主要有恢复块方法和N-版本程序设计,另外还有防卫式程序设计等。

(1)恢复块方法

  故障的恢复策略一般有两种:前向恢复和后向恢复。所谓前向恢复是指使当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况,这需有错误的详细说明。所谓后向恢复是指系统恢复到前一个正确状态,继续执行。这种方法显然不适合实时处理场合。

  1975年B.Randell提出了一种动态屏蔽技术棗恢复块方法。恢复块方法采用后向恢复策略。它提供具有相同功能的主块和几个后备块,一个块就是一个执行完整的程序段,主块首先投入运行,结束后进行验收测试,如果没有通过验收测试,系统经现场恢复后由一后备块运行。这一过程可以重复到耗尽所有的后备块,或者某个程序故障行为超出了预料,从而导致不可恢复的后果。设计时应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和后备块之间的共性错误降到最低限度。验收测试程序完成故障检测功能,它本身的故障对恢复块方法而言是共性,因此,必须保证它的正确性。

 

图 恢复块方法

(2)N-版本程序设计

  1977年出现的N版本程序设计,是一种静态的故障屏蔽技术,采用前向恢复的策略,其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N份程序必须由不同的人独立设计,使用不同的方法,不同的设计语言,不同的开发环境和工具来实现。目的是减少N版本软件在表决点上相关错误的概率。另外,由于各种不同版本并行执行,有时甚至在不同的计算机中执行,必须解决彼此之间的同步问题。

图 N版本程序设计

(3)防卫式程序设计

  防卫式程序设计是一种不采用任何一种传统的容错技术就能实现软件容错的方法,对于程序中存在的错误和不一致性,防卫式程序设计的基本思想是通过在程序中包含错误检查代码和错误恢复代码,使得一旦错误发生,程序能撤消错误状态,恢复到一个已知的正确状态中去。其实现策略包括错误检测,破坏估计和错误恢复三个方面。

  除上述三种方法外,提高软件容错能力亦可以从计算机平台环境、软件工程和构造异常处理模块等不同方面达到。此外,利用高级程序设计语言本身的容错能力,采取相应的策略,也是可行的办法。如c++语言中的try_except处理法:try_finally中止法等。

  软件容错虽然起步较晚,但具有独特的优势,费用增加较少。而硬件容错的每一种策略都要增加费用。目前,软件容错已成为容错领域重要分支之一。

原文转自:http://www.ltesting.net