在《装备软件质量和可靠性管理》一书中,对John Musa定义的软件可靠性工程过程进行了改进,给出了软件可靠性工程框架——Ruan模型,描述了覆盖软件全生命周期的各项可靠性工程活动。
![391ad24ee52eebc4dbd9de3f3c153eda.png](https://i-blog.csdnimg.cn/blog_migrate/7f89897fd03da6c401b416773fb49b7d.jpeg)
由于篇幅原因,本文仅简单介绍一下可靠性设计、可靠性参数的内容(其实是因为本人是个二把刀,很多东西也一知半解的原因^_^)。
一、软件可靠性
在《GB/T 11457-2006 信息技术 软件工程术语》中,对软件可靠性的定义如下:
- a)在规定条件下、在规定时间内,软件不引起系统失效的概率。该概率是系统输入和系统使用的函数,也是软件中存在的缺陷的函数。系统输入将确定是否会遇到已存在的缺陷(如果有缺陷存在的话);
- b)在规定的时间周期内所述条件下程序执行所要求的功能的能力。
在《GB/T 16260.1-2006 软件工程 产品质量 第1部分:质量模型》中,作为软件六大质量特性之一,软件可靠性的定义是:在指定条件下使用时,软件产品维持规定的性能级别的能力。
![2384bc75731ccc880c34b0b97835e70e.png](https://i-blog.csdnimg.cn/blog_migrate/996764708ef1dc48570e7b7b8c778882.jpeg)
上图中对软件可靠性与硬件可靠性进行了比较,其中有两点要特别说明一下。首先是时间相关性,实际上软件的失效率虽然不是常数,但往往也不会随时间单调下降的(那只是个美好的愿望)。我们在后面介绍软件维护性时,会再说起这个话题;另一个是为什么说软件无标准件?在介绍了可靠性预计后,应该就好理解了。
二、软件失效机理
![4fbe320684be89ba625d12d6a328595d.png](https://i-blog.csdnimg.cn/blog_migrate/2c16de698f7b53f4eb097985a9beddbb.jpeg)
在软件开发过程中的疏忽、失误或者错误,导致软件中存在了缺陷;在软件运行过程中,当缺陷被激活(软件运行于某一特定条件,俗称“踩雷”),使软件产生错误状态即出现了故障;而若无适当的处理措施(容错)对故障加以处理,最终使软件无法向用户提供其所期望的服务,即产生了失效。
换一个角度解释:错误是一种从外部输入的行为;缺陷和故障都属于软件内部不希望或不可接受的偏差,区别在于前者是静态的而后者是动态的;失效是一种向外部输出的状态。
因此,软件可靠性设计的实质就是减少缺陷和避免暴露,形象点说就是把门关起来&#x