软件可靠性
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.7 软件可靠性
7.7.1 基本概念 1. 软件可靠性的定义
定义 1 软件可靠性(software reliability )是指软件在规定的运行环境中和规定的时间内无失效运行的概率[ANSI91]。
所以它是时间t 的函数,我们用)(t R 来表示。
定义 2 软件故障率(failure rate )是指在单位时间内软件发生故障的概率。
它和软件可靠性的关系如下:
)
()
()(t R dt t dR t -
=λ 或者是:
))(exp()( 0 ⎰-=t
dt t t R λ
定义3 软件平均无故障时间(MTTF)。
指软件从开始运行到出现一个故障的期望时间,根据可靠性的定义有:
⎰
∞
=
)(dt t R MTTF
和软件中错误相关的定义
定义4 软件错误(Software Error )。
指在软件生存期内的不希望或不可接受的人为错误。
软件错误是一种人为的行为,相对于软件本身是一种外部行为。
定义 5 软件缺陷(Software Defect )。
指存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差。
其结果是软件在某一特定条件时出现运行故障。
当软件指程序时,软件缺陷即程序污点(Bug )。
定义 6 软件故障(Software Fault )。
指软件运行过程中出现的一种不希望或不可接受的内部状态。
软件故障是一种动态行为。
定义 7 软件失败(Software Failure )。
指软件运行时产生的一种不希望或不可接受的外部行为结果。
2. 软件的可用性定义
程序在给定的时间点,按照SRS 的规定,成功地运行的概率。
可靠性与可用性的区别:
可靠性指在0到t 这段时间间隔内系统没有失效;可用性仅仅意味着在时刻t ,系统是正常运行的。
在时刻t 系统是可用的,意味着两种可能:1)在0到t 这段时间间隔内系统一直没有失败;2)在0到t 这段时间间隔内,系统失效了若干次,但都被修复好了。
如果一端时间内,软件系统故障停机时间分别为t d1 , t d2 ,⋯⋯,正常运行时间分别为t u1 , t u2 ,⋯⋯。
则系统的稳态可用性Ass 为:
∑∑∑+=
di
ui ui
SS t t t
A
如果引入系统平均无故障时间MTTF 和平均维修时间MTTR 的概念,则
MTTR
MTTF MTTF A SS +=
其中平均维修时间MTTR 是修复一个故障所需时间,它取决于维护人员的技术水平、对系统的熟悉程度、系统的可维护性。
平均无故障时间MTTF 是系统按照SRS 成功地运行地平均间隔时间,它主要取决于系统中潜伏的故障数目。
7.7.2 估算MTTF 的方法 1. 符号
E T ——测试之前程序中故障总数 I T ——程序长度(机器指令总数) τ ——测试(包括调试)时间 E d (τ)——在0到 τ 期间发现的错误数 E c (τ)——在0到 τ 期间改正的错误数
2. 基本假设
(1)E T /I T 近似为常数。
通常介于千分之5到千分之20
(2)失效率(软件故障率)正比于软件中剩余的(潜在的)故障数,而MTTF 反比于软件中剩余的(潜在的)故障数。
且假设错误一旦发现就得以纠正,并没有引入新的错误。
因此 E c (τ) = E d (τ) 剩余的故障数)(τc T r E E E -= 单位程度程序中剩余故障数T
c T T
r r I E E I E )
()()(τττε-=
=
3. 估算 MTTF
经验表明,MTTF 与单位程度程序中剩余故障数成反比。
MTTF
k I E E E E k I k MTTF T T c c T T
r ⋅-
=-=
=)())
(()
(1
τττε
K 为经验常数,其典型值为200
4. 估计故障总数的方法
(1) 植入故障法
植错法是最早的一种排错性测试方法,它起源于通过软件测试来估计软件中所包含的错误的个数。
其基本思想与经典的“估计一个鱼池中某种鱼的数目”的统计方法相类似。
为了估计一个鱼池中的某种鱼的数目,可以先从鱼池中随机地捕一批适当数量的鱼,设其数量为K ,并给它们做上记号,再放回鱼池中。
等这批放回的鱼在鱼池中与其它鱼充分均匀混合后,再捕一批鱼,在这批鱼中找出做过记号的鱼。
假设在第二批鱼中,做过记号的鱼的数目是N ,而未做过记号的这种鱼的数目是M ,那么,由最大似然法进行统计推理,该鱼池中共有这种鱼约(M+N )K/N 条。
(2) 分别测试法
是对植错法的改进。
因为人为植入的错误和程序原有的可能性质不同,测试时所发现的概率不同,发现的难易程度也可能不同。
如果能对程序中原有的错误加上标记,然后再通过进一步的测试,就可以对潜在故障进行估计。
解决的办法是,由两个测试组分别测试同一个程序的两个副本,并把其中一个加上标记,然后再测试、估算。
影响软件可靠性的原因分析
影响软件可靠性的原因是多方面的,从一般意义上而言,任何和软件开发相关的活动都有可能影响软件可靠性。
它包括技术层面的、经济层面的乃至社会和文化科学层面的因素的影响。
在这里我们主要讨论在软件生存期内影响软件可靠性的因素,也称软件可靠性因素。
从软件开发的角度而言,影响软件可靠性的主要因素包括:
软件规模。
从直观上而言,软件的规模越大,影响其可靠性的问题也就越多。
简单软件的可靠性问题很容易通过较为全面的测试而解决,所以软件可靠性主要是针对于中型以上的软件而言。
对于这点在Halstead 的“软件科学”的思想中可以得到体现[Healstead77]。