可靠性设计,对于只有一些前端基础的我,真的是太友好了。如果论文出现可靠性设计和架构风格的题目,我一定会选这两个题目。
可靠性设计中需要准备的知识点选择一组软件操作作为容错设计单元,把普通的程序块变成恢复块。一个恢复块包含若干个功能相同、设计差异的程序块文本,一个运行文本,多个备份文本,构成“动态冗余”,一旦运行文本出现故障,则用备份文本替换。软件容错的恢复块方法就是使软件包含一些列的恢复块。
N版本程序的核心是通过设计出多个模块或者不同的版本,对于相同的初始条件和相同的输入的操作,实现多数表决,防止其中一个模块/版本的故障提供错误的服务,已实现软件容错。
在一套完整的软件体系之外,设计一种不同路径,不同算法或者不同实现方法的模块或系统作为备份,在出现故障的时候,可以用冗余的部分进行替换,从而维持软件系统的正常运行。缺点是费用和资源的消耗会增加。
在软件系统中,无需在线容错的地方,或者不能采用冗余设计技术的部分,如果对可靠性要求比较高,故障有可能导致严重后果时,一般需要采用检错技术,在软件出现故障的时候能及时发现并报警。缺点是不能自动解决故障。
软件系统的复杂度与可靠性有着密切的关系,是产生软件缺陷的重要根源。在设计时考虑降低软件的复杂度,是提高软件可靠性的重要手段。减低复杂度的设计思想是在保证实现软件功能的基础上,简化软件结构,缩短程序代码,优化软件数据流向,减低软件复杂度,从而提高软件的可靠性。
在软件可靠性设计之前和软件可靠性的设计过程中,都需要采用软件可靠性分析和预测方法,来确定当前系统中的主要可靠性因素和目标。常见的软件可靠性分析方法包括故障树分析方法、失效模式与效应分析方法。
一种自顶向下的软件可靠性分析方法,即从软件系统不希望发生的事件(顶事件),特别是对人员和设备的安全性产生重大影响的事件开始,向下逐步追查导致顶事件发生的原因,直至基本事件(底事件),从而确定软件故障的原因和各种可能组合方式和发生概率。基本的步骤是:
在软件开发的早期,通过软件失效模式,分析造成的后果,研究分析各种失效迷失产生的原因,寻找消除和减少有害后果的方法,一边今早发现潜在的问题,并采取相应的措施,从而提高软件可靠性和安全性。