可靠性的基本概念
可靠性(Reliability)是指产品在规定条件下、规定的时间内完成规定功能的能力。
- 规定时间
我们一般用系统的执行时间来算,这样比较准确。
- 规定的条件
规定条件,一般是指软件的运行环境。在不同的环境下,软件的可靠性是不同的。有了明确的环境条件,我们就可以有效的判断软件系统是否失效,责任方是在用户方还是开发方。
- 所要求的的功能
要求的功能不一样,软件的运行情况会有所区别,其可靠性也不同。所以要准确度量软件系统的准确性,必须先明确它的任务和功能。
可靠性的定量描述
以上三个概念,还只是定性的描述。无法定量的比较可靠性。下面我们开始探讨软件可靠性的定量描述,并相应的引入一些概念。
- 规定的时间
也就是系统运行了时间,而没有出现问题。
- 失效概率
是指软件到t时刻时,运行出现问题的概率。
一般来说,软件失效概率在初始状态是0,失效概率时间递增,趋近于1.
- 可靠度
就是系统运行到t时刻还没有出现问题的概率。
可靠度 = (1 - 失效概率) 。
- 失效强度
以上2个概念都是指在时间段内的评估结果。失效强度,是指失效概率在t时刻的导数,也就是单位时间出现问题的概率。
- 失效率
就是在0-t时刻,系统未出现失效的情况下,t时刻出现问题的概率。
有点类似于概率论里的条件概率。
- 平均无失效时间
软件一直有效运行的时间的平均值。
可靠性目标
以上几个概念,都还只是统计学上的意义。并没有考虑到不同失效情况的严重性。
不同的失效问题,对财务上的损失是不一样的。
不同的失效问题,对系统能力的影响是不一样的。有的失效问题,直接导致系统崩溃,有的则对系统的运行只有细微影响。
不同的失效问题,对系统的可靠性影响不一样的。
上述也是最常见的一些标准,也就是:
- 对成本的影响
- 对系统能力的影响
- 对可靠性目标的影响
软件的可靠性设计与管理
也就是一些常见的提高软件可靠性的方法
冗余技术
- 结构冗余
(1)静态冗余
有点类似于N版本程序设计
(2)动态冗余
有点类似于 恢复块设计
(3)混合冗余
上述2种的混合
- 信息冗余
实现正常功能的情况下,添加一些额外的信息,例如一些纠错码就是信息冗余的例子。
- 时间冗余
就是额外增加时间,重复执行软件,来消除瞬时错误的影响。
- 冗余附加技术
就是为实现上述冗余技术需要的资源和技术。包括程序、指令、数据、存放和调度数据的空间和通道。
软件容错
- 恢复块设计
系统中有若干个相同的模块,主模块失效后,就是用备用的模块,直到所有的模块耗尽。
这是一种后向的恢复策略,就是失效以后再做一些处理。
- N版本程序设计
系统中有若干个功能相同的模块,这些模块完全由不同的人,不同的设计思路或者编程语言来实现。彼此之间不做任何沟通交流。N个版本的模块同时工作,投票来决定该功能最后的执行结果。
- 防卫式程序设计
就是软件发生错误时,可以撤销错误的结果,使之恢复到正确运行的状态。
有点类似于编程语言里的try... catch。
集群技术
利用多台服务器,提供更稳定的服务。包括负载均衡集群等。