软件可靠性设计详解
扫描二维码
随时随地手机看文章
定义:是软件产品再规定的条件下和规定的时间区间完成归档功能的能力。简而言之,规定时间周期内,在所述条件下程序执行所要求的功能的能力。
规定的条件:
直接与软件运行相关的使用该软件的计算机系统的状态和软件的输入条件,或统称为软件运行时的外部输入条件。
只要指运行环境,运行所需的各种支持要素,环境涉及的硬件、OS、数据库、中间件。。。
规定的时间区间:
软件的实际运行时间区间。
软件可靠性只体现在软件运行阶段,所以运行时间是规定时间的度量。运行时间包括工作与挂起。
由于软件运行的环境与程序路径选取的随机性,软件的失效为随机事件,所以运行时间属于随机变量。
规定的功能:
提供给定的服务,必备的功能。
软件可靠性与规定的任务和功能有关。由于要完成的任务不同,运行情况也有区别,调用的子模块不同,可靠性也不同,所以度量软件系统可靠性必须明确任务和功能。
软件可靠性定义具有的特点:
①用内在的“缺陷”和外在的“失效”关系来描述可靠性,更能深刻地体现软件的本质特点。
②定义使人们对软件可靠性进行量化评估成为可能。对于软件的可靠性这样一个质量特性,很难用一个明确直观的数值去体现。而依据这个定义,人们有可能通过分析影响可靠性的因素,用函数的形式,按照不同的目的建立各种数学模型去分析软件可靠性。
③用概率的方法去描述可靠性是比较科学的。前面讲到,软件失效是随机的外部表现,完全是一个随机事件,而软件缺陷是软件固有的没有损耗的内在特点。定义用规定时间内其操作不出现软件失效的概率,也就是输入未碰到软件缺陷的概率来描述可靠性,这种方法就是用概率来描述纯粹的随机事件,是比较合理的,也是可行的。
在设计中充分借鉴多项军工产品的软件可靠性技术成果,按照软件工程化设计准则进行软件设计,确保系统可靠性指标。具体措施如下:
(1)加强软件的可靠性设计,在软件需求分析,设计和编码等各个阶段,明确并细化与其它系统的接口关系,使系统需求完整、清晰、无二义性,并且是可验证的;软件容错设计,所有可能引起系统异常行为(如溢出等)的软件模块,均需设置异常处理程序进行处理;采用严格的评审和测试措施,对软件进行严格的检验,以确保软件可靠性指标满足要求;
(2)设计采用程序分层结构,尽量简化,自顶向下的模块化方法,一个完整的执行软件以“软件包”形式并存放在固定的数据库内,当需要执行该软件时,立即以“软件包”方式全部调入执行区,防止运行过程中受扰。
(3)在软件生存期内,通过完善的文档规范,包括软件需求分析、软件详细设计和总结报告等文件的编写和控制,来消除设计人员对软件状态的随意更改,确保软件状态,提高软件可靠性。
(4)为缩短开发周期,提高开发效率,进而提高软件的可维护性和可靠性,在设计软件方案时将最大限度地重用现有的成熟软件。因为现有的成熟软件,已经过严格的运行检测,大量的错误已在开发、运行和维护过程中排除,可靠性较高。
(5)软件开发前期各阶段完成之后,将通过严格的测试来进一步提高软件可靠性。具体措施是成立专门的软件测试小组编写测试标准和规范,对软件的稳定性进行全面测试,特别是针对需要人工输入各种命令、参数(例如监控席上的各类人员输入的有关操作命令)实施严格的检查,以防止错误的输入引起系统异常,测试过程中测试人员详细记录试验现象和出现的问题,测试结束后由测试小组提供完整的测试报告。
(6)采用分层、逐级的软件测试方法。为了在测试阶段尽可能多地发现并纠正软件错误,将按单元测试、软件配置项集成测试以及系统测试的步骤执行测试。
硬件可靠性设计
(1)元器件是电路可靠性设计的基础,在设计中压缩和限制元器件的品种、规格和数量,选用合格供应单位的元器件且为国产或进口工业级产品;
(2)元器件和原材料的采购确保优质定点,对采用的新材料、新器件进行充分论证和试验,严格元器件的采购与筛选工作;
(3)严格科研与生产管理程序;
(4)硬件设计首先确保设计可靠性,充分利用成熟的EDA工具进行仿真、分析和验证,硬件模块经过充分测试与试验;
(5)对电路进行详细分析计算,对每一个器件的工作电流、电压、机内温升、使用环境等应力进行设计,并根据可靠性要求,合理地确定元器件降额准则和安全系数。
(6)线性电路尽量采用集成电路,对数字电路应尽力采用中、大规模集成电路,提高单元、分机的集成度、减小体积、降低功耗。
(7)采用模块化、简单化设计,在满足任务要求情况下,尽量采用成熟的、现有的技术成果,减少开发风险。
(8)采用必要的冗余技术,如整件热备份技术,对接插件、开关等增加冗余接点,实行多点并接等提高可靠性指标。
(9)在设计时,对元器件特别是半导体器件、电容器、电感器等在瞬态过程中的承受能力进行分析并采取相应措施,抑制过载的发生。
软件可测试设计
软件可测试设计用于系统内各软件的故障诊断,包括:
(1)软件测试性应符合测试要求,建立合理的软件框架,减少模块之间的耦合;
(2)预留测试节点:软件的结构设计充分考虑测试的需求,在模块的输入/输出函数中预留测试节点,并设计方便读取、映射、强制修改输入/输出的参数、关键参数的方法。
(3)模块设计中考虑测试:软件易于测试,调用各模块时都应有返回信息可供测试,对各模块的接口都有详细的测试方法和说明。