当前位置:课程学习>>第六章>>知识讲解>>文本学习>>知识点九

第六章  文本学习内容九



6.9软件可靠性



测试阶段的根本目标是消除错误,保证软件的可靠性。读者可能会问,什么是软件的可靠性呢?应该进行多少测试,软件才能达到所要求的可靠程度呢?这些正是本节要着重讨论的问题。


6.9.1基本概念

1.软件可靠性的定义

对于软件可靠性有许多不同的定义,其中多数人承认的一个定义是:软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。

在上述定义中包含的随机变量是时间间隔。显然,随着运行时间的增加,运行时出现程序故障的概率也将增加,即可靠性随着给定的时间间隔的加大而减少。

按照IEEE的规定,术语“错误”的含义是由开发人员造成的软件差错(bug),而术语故障的含义是由错误引起的软件的不正确行为。在下面的论述中,将按照IEEE规定的含义使用这两个术语.

2.软件的可用性

通常用户也很关注软件系统可以使用的程度。一般说来,对于任何其故障是可以修复的系统,都应该同时使用可靠性和可用性衡量它的优劣程度。

软件可用性的一个定义是:软件可用性是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。

可靠性和可用性之间的主要差别是,可靠性意味着在0到1这段时间间隔内系统没有失效,而可用性只意味着在时刻t,系统是正常运行的。因此,如果在时刻t系统是可用的,则有下述种种可能:在0到t这段时间内,系统一直没失效(可靠);在这段时间内失效了一次,但是又修复了;在这段时间内失效了两次修复了两次;……

如果在一段时间内,软件系统故障停机时间分别为td1,td2,…,正常运行时间分别为tu1,tu2,…,则系统的稳态可用性为:

A_ss=T_up/(T_up+T_down )(6.1)

其中,T_up=∑▒t_ui ,T_down=∑▒t_di

如果引入系统平均无故障时间MTTF和平均维修时间MTTR的概念,则(6.1)式可变成

A_ss=MTTF/(MTTF+MTTR)(6.2)

平均维修时间MFFR是修复一个故障平均需要用的时间,它取决于维护人员的技术水平和对系统的熟悉程度,也和系统的可维护性有重要关系,第7章将讨论软件维护问题。平均无故障时间MTTF是系统按规格说明书规定成功地运行的平均时间,它主要取决于系统中潜伏的错误的数目,因此和测试的关系十分密切。


6.9.2估算平均无故障时间的方法

 软件的平均无故障时间MTTF是一个重要的质量指标,往往作为对软件的一项要求,由用户提出来。为了估算MTTF,首先引入一些有关的量。

1.符号

在估算MTTF的过程中使用下述符号表示有关的数量。

ET——测试之前程序中错误总数;

IT——程序长度机器指令总数;

τ——测试(包括调试)时间;

E_d (τ)——在0至τ期间发现的错误数;

E_c (τ)——在0至τ期间改正的错误数。

2.基本假定

根据经验数据,可以作出下述假定。

(1)在类似的程序中,单位长度里的错误数ET/IT近似为常数。美国的一些统计数字表明,通常也就是说,在测试之前每1000条指令中大约有5-20个错误。

(2)失效率正比于软件中剩余的(潜藏的)错误数,而平均无故障时间MTTF的错误数成反比。

(3)此外,为了简化讨论,假设发现的每一个错误都立即正确地改正了(即,调试过程没有引入新的故障)。因此

E_c (τ)=E_d (τ)

剩余的故障数为

E_r (τ)=E_r-E_c (τ)(6.3)

单位长度程序中剩余的错误数为

ε_r (τ)=E_T/I_T -E_c (τ)/I_T(6.4)

3.估算平均无故障时间

经验表明,平均无故障时间与单位长度程序中剩余的错误数成反比,即

MTTF=1/(K(E_r/I_r -E_c (τ)/I_r))(6.5)

其中K为常数,它的值应该根据经验选取。美国的一些统计数字表明,K的典型值是200。

估算平均无故障时间的公式,可以评价软件测试的进展情况。此外,由式(6.5)可得

E_c=E_r-I_T/(K×MTTF)

因此,也可以根据对软件平均无故障时间的要求,估计需要改正多少个错误之后,测试工作才能结束。

4.估计错误总数的方法

程序中潜藏的错误的数目是一个十分重要的量,它既直接标志软件的可靠程度,又是计算软件平均无故障时间的重要参数。显然,程序中的错误总数ET与程序规模、类型、开发环境、开发方法论、开发人员的技术水平和管理水平等都有密切关系。下面介绍估计ET的两个方法。

(1)植入错误法

使用这种估计方法,在测试之前由专人在程序中随机地植入一终错误,测试之后,根据侧试小组发现的错误中原有的和植入的两种错误的比例,来估计程序中原有错误的总数ET。

假设人为地植入的错误数为Ns,经过一段时间的测试之后发现ns个植入的错误,此外还发现了n个原有的错误。如果可以认为测试方案发现植入错误和发现原有错误的能力相同,则能够估计出程序中原有错误的总数为

N ̂=n/n_s N_s

其中N ̂即是错误总数ET的估计值。

(2)分别测试法

 

植入错误和发现原有错误的概率相同。但是,人为地植入的错误和程序中原有的错误可能性质很不相同,发现它们的难易程度自然也不相同,因此,上述基本假定可能有时和事实不完全一致。

如果有办法随机地把程序中一部分原有的错误加上标记,然后根据测试过程中发现的有标记错误和无标记错误的比例,估计程序中的错误总数,则这样得出的结果比用植入错误法得到的结果更可信一些。

为了随机地给一部分错误加标记,分别测试法使用两个测试员(或测试小组),彼此独立地测试同一个程序的两个副本,把其中一个测试员发现的错误作为有标记的错误。具体做法是,在测试过程的早期阶段,由测试员甲和测试员乙分别测试同一个程序的两个副本,由另一名分析员分析他们的测试结果。用表示测试时间,假设

τ=0时错误总数为B0;

τ=τ_1时测试员甲发现的错误数为B1;

τ=τ_1时测试员乙发现的错误数为B2;

τ=τ_1时两个测试员发现的相同错误数为bc。

如果认为测试员甲发现的错误是有标记的,即程序中有标记的错误总数为B1,则测试员乙发现的B2个错误中有bc个是有标记的。假定测试员乙发现有标记错误和发现无标记错误的概率相同,则可以估计出测试前程序中的错误总数为

(B_0 ) ̂=B_2/b_c B_1(6.8)

使用分别测试法,在测试阶段的早期,每隔一段时间分析员分析两名测试员的测试结果,并且用(6.8)的估计值计算。如果几次估算的结果相差不多,则可用的的平均值作为ET的估计值。此后一名测试员可以改做其他工作,由余下的一名测试员继续完成测试工作,因为他可以继承另一名测试员的测试结果,所以分别测试法增加的测试成本并不太多。


请同学们继续学习

< /div>