您当前所在位置:首页 > 论文 > 计算机论文 > 软件项目管理

浅议软件可靠性测试领域所面临的难点问题

编辑:sx_chengl

2016-08-17

软件可靠性测试充分性准则是用于确定软件可靠性测试进行得是否充分、软件可靠性测试可否停止的准则,这里是一篇软件可靠性测试领域所面临的难点问题,接下来让我们一起看看吧!

摘要:在分析了软件可靠性测试充分性准则研究的重要意义的基础上,阐述了软件测试充分性准则的概念、分类以及软件可靠性测试充分性准则与整个软件测试充分性准则体系的关系,提出了其在软件可靠性测试中的一种实现方法,是借鉴已有的软件测试充分性方面的理论,对软件可靠性测试充分性问题进行的初步探索。

关键词:软件;可靠性;运行;软件可靠性测试;软件可靠性测试充分性准则;运行剖面

众所周知,穷尽测试是不可能的。即使对于非常简单的软件来说,所有可能的测试数据集合的元素个数也是难以承受的。测试不可能无休止地进行下去,那么需要对软件进行多少测试才算足够,何时停止测试,使得软件在已经执行的测试数据上的表现能够代表软件的整体表现,对于发布的软件质量具有足够的信心。这些都是软件测试充分性需要研究和解决的问题。当“测试充分性”达到一定要求时,测试可以停止,从而可以有效地控制软件测试的质量和开销。

软件可靠性测试技术作为保障软件质量和可靠性的重要手段,越来越受到人们的重视。同软件测试一样,软件可靠性测试也面临充分性问题,该问题是软件可靠性测试的关键技术和难点问题之一。

针对该问题,借鉴已有的软件测试充分性理论,对软件可靠性测试充分性进行初步的探索。

1 软件测试充分性准则的定义

对于什么是“软件测试充分性”,尚未见到任何文献给出其明确定义。从字面上理解,其定义的落脚点应为软件测试应该具备或者表现出什么样的性质,因此有人曾提出“软件测试充分性”表示当被测软件成功地通过测试集合中的所有测试数据时,该测试集合能够证明程序中不存在错误的能力[1]。显而易见,目前已有的许多充分性度量都不能满足这一要求。软件测试充分性最初是由Goodenough和Gerhert在验证程序正确性时提出的[2],因此人们也试图从软件正确性或可靠性的角度定义测试充分性,但很遗憾的是,人们发现:测试充分性与软件正确性或可靠性之间尚无确切的、必然的联系[1],因此从这两个角度定义充分性的作法目前尚处于难以自圆其说的状况。基于不同目的、不同要求和不同信息的测试对应不同的测试充分性,因此建议目前不要急于给出测试充分性的统一定义。

显然,人们目前说某一测试集合是充分的,是相对于某一准则来说是充分的,语句覆盖达到100%的测试数据集合相对于语句覆盖充分性准则来说是充分的,但其对于分支覆盖充分性准则来说则不一定是充分的。而且,可以肯定的一点是,如果根据一个非常基本的准则,如语句覆盖准则或分支覆盖准则,测试是不充分的,那么软件的质量是无法保证的。

人们在不断的测试实践中,分析不同测试方法的特征,给出了不同的测试充分性准则,这些准则规定了不同的测试充分性,软件测试充分性准则的定义分为谓词形式和定量度量函数形式两种[3]。

谓词形式的软件测试充分性准则C是一个定义在T×P×S上的谓词,即C: T×P×S→{true, false}。 C (t, p, s)=true表示用测试数据集t针对规则s来测试程序p是充分的;否则,该测试是不充分的。这里将s定义为规则,区别于文献[4]中的功能规约。这是为了使该定义具有普适性而作的扩展。从定义可以看出,规定不同的s,就可以得到不同的充分性准则。考虑到度量充分性时所依据的信息和测试目标的不同,将s分为两个层次,称第1层次为规范层,包括功能规范、使用规范和程序规范,其具体内涵参见表1,这些规范是度量充分性时所依据的信息;称第2层次为目的层,包括对揭错能力的度量、对覆盖的度量、对输入域的度量和对可靠性指标的满足,这些是度量充分性时的测试目标。规范层和目的层的不同组合构成不同的s。这样根据不同的s就可以定义不同的软件测试充分性准则。

度量函数形式的充分性准则是一个从测试数据集合、被测程序及其规则到实数区间[0,1]的函数。 C (t, p, s)=r表示程序p相对于规则s在测试数据集合t上的测试充分度为r。 r越大,充分度越高。注意这里同样将文献[4]中的功能规约改为规则。

两种定义之间是有联系的。谓词形式的充分性准则是度量形式的充分性准则的特例,将谓词形式的充分性准则的值域看作是集合{0,1}。

度量形式的充分性准则M以及一个充分度要求r,可以定义一个谓词形式的充分性准则Cr,使得一个测试数据集合是Cr充分的,当且仅当其M充分度大于等于r[4]。

2 软件测试充分性准则的分类

为了明确软件可靠性测试充分性准则与其它软件测试充分性准则之间的关系,阐明其与其它充分性准则之间的区别与联系,将充分性准则进行分类。软件测试的目的:一是为了发现错误,称其基于正确性的软件测试;另一目的是为了确保软件满足使用要求,称其基于可靠性的软件测试。下面先依据测试目的的不同将软件测试充分性准则分为两大类,再依据前面定义中的s的不同将软件测试充分性准则进行分类,具体情况如图1所示。

由图可见,软件可靠性测试充分性准则从测试目的上区别于为了发现错误(从而验证程序正确性)而进行的软件正确性测试充分性准则,从依据的规则上区别于基于程序规范的语句覆盖充分性准则。对于基于程序规范的充分性准则来说,可以将程序看作一个纯粹的语法对象,因此结构覆盖信息可以衡量测试进行的程度。对于基于功能规范的充分性准则来说,功能覆盖信息则可用来衡量测试进行的程度。软件可靠性测试充分性准则区别于已有的这些经常使用的充分性准则,它是基于软件的使用信息,即输入数据空间的概率分布等。迄今为止尚未见到比较成熟的理论体系或者比较完善的准则。因此对于软件可靠性测试充分性准则进行研究本身是一种开创性的工作,具有相当的难度。

3 软件可靠性测试充分性准则定义

对于软件可靠性测试充分性准则,其定义就在于给出s的明确定义。需要强调指出的是:软件可靠性测试是基于运行剖面随机生成测试用例对软件进行测试的一种测试方法[5]。因此此时定义中的s是包含用户使用要求的功能规范,亦即此时的s是包含运行剖面信息的使用规范和功能规范的组合。当测试数据集t满足由使用规范和功能规范复合而成的规则s来测试程序p是充分的,则软件可靠性测试是充分的;否则,该测试是不充分的。

软件可靠性测试充分性准则区别于一般的基于功能规范的测试充分性准则的特点在于,测试数据集合还需满足使用规范中定义的运行剖面的特征,即运行剖面对于软件可靠性测试充分与否具有一定的影响。

如果遵循文献[4]中的功能规约的定义,则对于软件可靠性测试充分性准则来说其所谓的通用定义形式显然是不适用的,因为功能规约不包含使用需求信息的使用规范,即不包含运行剖面方面的信息。因此,若要定义软件测试充分性准则的通用定义,则定义中应该是“规则”,而不能是功能规约。

4 可靠性测试充分性准则的提法

由文献[6]知,依据软件测试充分性准则测试后的软件中不再含有大量的、严重的错误。充分的软件可靠性测试应该保障测试后的软件具有满足要求的可靠性。因此,提出的准则中包含被测软件满足R≥Rc

的要求。其中, R为被测软件的可靠度; Rc为需要被测软件可靠度达到的最小值。

该要求同样可以表示为θ≤θc(θ为软件的失效概率,即不可靠度)。依据可靠性的定义可知上述要求可以保障软件中高发生概率的错误及早暴露,这对于一般的、非安全关键软件来说,测试是足够了,但对于安全关键软件来说,某些低发生概率的致命错误也许不会在如此短的测试时间内暴露出来,一旦其出现,就会引起系统崩溃、人员伤亡等致命伤害,所以对于安全关键软件,应增加一条要求Npi≥Nci  (i =1,…,n)

其中 Npi为排除的严酷度等级为i的错误数;

Nci为需要排除的严酷度等级为i的最小错误数;

n为严酷度等级的总数。

综上所述,提出软件可靠性测试充分性准则包含下列内容:

R≥Rc

Npi≥Nci (i =1,…,n)

满足上述要求的软件可靠性测试数据集合可认为是实现软件可靠性测试充分的数据集合,或者说,经过满足上述要求的软件可靠性测试数据集合测试后的软件,实现了充分的软件可靠性测试。限于篇幅,不讨论软件可靠性测试数据的生成,感兴趣者可以参见相关文献。当然,如果欲将上述准则作为广而适之的准则,还需要经过验证其满足充分性准则的公理化理论。这是下面将提出的一种保障软件可靠性测试充分性准则实现的测试用例数确定方法的理论基础。

5 测试数据数量的确定方法

软件可靠性测试的充分性必须通过度量来体现,有人称之为度量形式的软件可靠性测试充分性准则[4]。软件可靠性测试充分性度量可以分为3类:①以概率为基础的充分性度量;②以可信度为基础的度量;③以可靠性估计为基础的度量[4]。下面详细阐述第②类充分性度量方法,该方法借鉴了Parnas等提出的可靠性估计的可信度理论,建立以可信度为基础的度量。

Parnas等应用假设检验方法,根据随机测试样本的大小(也就是测试数据集的元素个数)和其中发现软件错误的测试数据的个数,给出了软件的可靠性估计公式。对于一个给定的可靠性估计,例如可靠性大于等于r,那么软件的实际可靠性大于等于r的概率即为这一估计的可信度的一种度量[7]。这样的可靠性估计体现了可靠性理论与概率统计理论的密切联系,从直观上符合期望。这样的可靠性估计的可信度是测试数据集的大小的函数。建议的方法给出了一个可信度要求,如果软件在测试过程中未发现错误,即可对软件的可靠性进行估计,使得这样的估计满足可信度要求。

软件可靠性测试隶属于黑盒测试,被测程序在完全不考虑程序内部结构和内部特性的情况下,依据需求规格说明书中提供的程序输入和输出之间的关系,判断测试结果的正确性[8]。设θ是根据规范判断程序的输出不符合预期结果的概率,即失效概率。由可靠性理论,提出如下假设:

H:θ<1/h (对软件的失效概率的要求)假定在n个测试数据上进行测试,当在所有测试数据上都满足输出符合预期结果时,就接受该假设,即认为该软件的失效概率小于一预先规定的门限值;否则,就拒绝该假设,认为软件的失效概率不满足指标要求。这是将文献[9]中传统意义的假设检验具体应用于软件可靠性测试中。对于软件的可靠性测试来说,第2类错误比第1类错误更严重,当软件的失效率高于某值却接受了该软件,其危害性是不言而喻的,尤其对于安全关键软件来说,其危害是难以想象的。根据犯第2类错误的概率小于ε(预先规定的任意小的正数)的约束条件确定测试数据n的大小,即确定满足充分性要求的测试用例的数量。

设H为假时接受假设,即θ≥1/h时在测试n个测试数据时未发生失效,则此情况下n次测试时未发生失效的概率为PⅡ= (1-θ)n≤(1-1/h)n(1)

令(1-1/h)n<ε(2)

对(2)式两边同时取以e为底的对数,则有nln(1-1/h) 可得n >lnεln(h-1)-lnh(4)

因此,当对n个测试用例进行测试成功时,H为假时接受该假设的概率,即犯第2类错误的概率小于ε。

若取ε=1/h,即得文献[10]中的表达式n >lnhlnh-ln(h-1)(5)

此为当对至少n个测试用例测试成功时,犯第2类错误的概率小于1/h时对n的约束条件。对于充分大的h,显见需要相当大的测试量来保障统计意义上的可信性,这与直观概念相吻合。鉴于n的表达式过于复杂,本文根据不等式(1-x-1)x0) (6)

确定n的简化表达式。

不妨令x=h代入(6)式,则有(1- h-1)h对不等式(7)进行变换,则有hln(1-1/h) <-1(8)

可得hlnh >lnhlnh-ln(h-1)(9)

根据(5)式的要求,只需n > hlnh (10)

就能够保障测试用例的大小满足所需要求。

例如:想获得H:θ<1/100,则根据(5)

式,取nmin=459;根据(10)式,取nmin=461,误差为0·4%。可见可利用简式(10)确定测试用例的大小。

下面讨论当n满足上述约束条件时,犯第1类错误的概率,即n次测试中至少发生一次失效的概率为PⅠ=1-(1-θ)n(11)

考虑y =1-(1-θ)x(12)

当0<1-θ<1时,有y′x>0,所以犯第1类错误的概率PⅠ当n>lnhlnh-ln(h-1)时单调递增。

这说明在保障犯第2类错误的概率小于1/h时,使得犯第1类错误的概率增加。因此有必要改变验收准则:当n次测试中失效数小于t*时接受假设H,则t*的求解是一个最优化过程,使得在保障犯第2类错误的概率小的同时犯第1类错误的概率尽可能小,此时的t*/n作为失效概率θ的最优估计,限于篇幅,该问题不详细讨论。

6 结束语

软件可靠性测试充分性准则是用于确定软件可靠性测试进行得是否充分、软件可靠性测试可否停止的准则,这是软件可靠性测试领域所面临的难点问题之一。为此,阐述了软件可靠性测试充分性准则的定义,提出了一种准则形式和在软件可靠性测试中确定保障可靠性测试充分的测试数据数量的方法,借鉴已有的软件测试充分性方面的理论,作为对于软件可靠性测试充分性问题的研究的初步尝试。

参考文献(References)

[1] Gardiner S。 Testing safety-related software: A practical handbook[C]。 NewYork: Springer Verlag, 1999。 143~154

[2] Goodenough J B, Gerhert SL。 Toward a theory of test data selection

[J]。 IEEETransactionson Software Engineering, 1975, SE-3: 156~173

[3] ZhuHong, Test data adequacymeasurement [J]。 Software Engineering Journal, 1993, 8 (1): 21~29

这篇关于软件可靠性测试领域所面临的难点问题的文章,希望给正在阅读本文的你带来帮助!

相关推荐:

计算机机房管理系统的研发设计探析  

浅议UML集成化软件开发环境的设计思想 

免责声明

精品学习网(51edu.com)在建设过程中引用了互联网上的一些信息资源并对有明确来源的信息注明了出处,版权归原作者及原网站所有,如果您对本站信息资源版权的归属问题存有异议,请您致信qinquan#51edu.com(将#换成@),我们会立即做出答复并及时解决。如果您认为本站有侵犯您权益的行为,请通知我们,我们一定根据实际情况及时处理。