随着软件的日益普及,系统中的软件成分不断增加,使得系统对软件的依赖越来越强,软件的可靠性对系统可靠性的影响越来越大,实践证明保障软件可靠性最有效、最经济、最重要的手段是在软件设计阶段采取措施进行可靠性控制,为此提出了软件可靠性设计的概念。
软件可靠性设计就是在常规软件设计中,应用各种方法和技术使软件设计在兼顾用户功能和性能需求的同时全面满足软件的可靠性要求。软件可靠性设计应和软件的常规设计紧密结合,贯穿于软件设计过程的始终。
概要论述笔者参与管理和开发的软件项目,以及在其中所承担的主要工作。论述在项目开发过程中,进行如年可靠性设计时遵循的基本表原则并论述在该项目中所采用的的具体可靠性设计技术。阐述在具体的可靠性设计工作中,为了分析影响软件可靠性的主要因素所采用的可靠性分析方法。
可靠性设计需要遵循的原则
1,软件可靠性设计是软件设计的一部分,必须在软件的总体设计框架中进行,并且不能与其他设计原则相冲突。
2,软件可靠性设计在满足提高软件质量要求的前提下,以提高和保障软件可靠性为最终目标。
3,软件可靠性设计应确定软件的可靠性目标,不能无限扩大,并且在功能、用户需求、开发费用之后考虑。
可靠性设计技术
1,容错设计技术,对于软件失效后果特别严重的场合,采用容错设计技术。常见的容错设计技术有恢复块设计、N版本程序设计和冗余设计。
恢复块设计,选择一组软件操作作为容错设计单元,把普通的程序块变成恢复块,一个恢复块包括若干个功能相同、设计差异的程序块文本。一个运行文本和多个备份文本构成“动态冗余”,一旦运行文本出现故障,则用备份文本替换。软件容错的恢复块方法就是使软件包含一系列恢复块。
N版本程序设计,核心是通过设计多个模块或不同版本,对于相同初始条件和相同输入的操作结果,实心多数表决。防止其中某一软件模块的故障提供错误的服务,已实现软件容错。
冗余设计,在一套完整的软件系统之外,设计一种不同路径、不同算法或不同实现方法的模块或系统作为备份。在出现故障时可使用冗余的部分进行替换,从而维持软件系统的正常运行:缺点是费用和资源的消耗会有所增加。
2,检错技术,在软件系统中,对无须在线容错或不能采用如用于设计技术的部分,如果对可靠性要求较高,故障有可能导致严重的后果,则一般采用检错技术。即在软件出现故障后能及时发现并报警,提醒维护人员进行处理。检错技术实现的代价一般低于容错技术和若牛股技术,但它有一个明显的不足就是不能自动解决故障。如果出现故障后不能进行人工干预,将最终导致软件系统不能正常运行。采用检错设计技术要着重开率的要素是检测对象、检测延时、实现方式和处理方式。
3,减低复杂度设计,软件复杂性与软件可靠性有密切的关系,是产生软件缺陷的重要根源。在设计时考虑降低软件的复杂性,是提高软件可靠性的有效方法。降低复杂度设计的思想是保证实现软件功能的基础上,简化软件结构、缩短程序代码、优化软件数据流向及降低软件复杂度,从而提高软件可靠性。
软件可靠性分析方法
1,故障树分析方法,一种自顶向下的软件可靠性分析方法,即从软件系统不希望发生的事件(顶事件),特别是对人员和设备的安全及可靠性产生重要影响的事件开始向下逐步追查导致顶事件发生的原因,直至基本事件(底事件)。从而确定软件故障原因的各种可能组合方式和(或)发生概率,基本的步骤是软件故障树的建立、定性分析和定量分析。
2,失效模型和效应分析方法,在软件开发阶段的早期,通过识别软件失效模式分析造成的后果。研究分析各种失效模式产生的原因,寻找消除和减少其有害后果的方法。以便尽早发现潜在的问题,并采取响应的措施,从而提高软件的可靠性和安全性。SFMEA的分析对象可以是开发早期阶段的高层次的子系统、部件,也可以是详细设计阶段的单元、模块。对于不同的分析对象,其软件失效模式不同,采用的分析方法也不同,前者采用系统级分析方法,后者采用详细级分析方法,其基本的步骤是系统定义、软件失效模式分析、软件失效原因分析、软件失效影响分析、改进措施分析。