CN102629232B - 引入测试有效性的软件可靠性验证测试方法 - Google Patents

引入测试有效性的软件可靠性验证测试方法 Download PDF

Info

Publication number
CN102629232B
CN102629232B CN201210130304.0A CN201210130304A CN102629232B CN 102629232 B CN102629232 B CN 102629232B CN 201210130304 A CN201210130304 A CN 201210130304A CN 102629232 B CN102629232 B CN 102629232B
Authority
CN
China
Prior art keywords
test
software
defect
failure
validity
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201210130304.0A
Other languages
English (en)
Other versions
CN102629232A (zh
Inventor
李秋英
王健
罗磊
刘力新
朱龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Tianhang Changying Technology Co ltd
Original Assignee
Beihang University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beihang University filed Critical Beihang University
Priority to CN201210130304.0A priority Critical patent/CN102629232B/zh
Publication of CN102629232A publication Critical patent/CN102629232A/zh
Application granted granted Critical
Publication of CN102629232B publication Critical patent/CN102629232B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提出了一种引入测试有效性的软件可靠性验证测试方法,分无失效与有失效两种情况,分别以离散型软件和连续型软件为对象,建立了统一的测试有效性度量形式。本发明方法针对离散型软件和连续型软件,结合用户给定的验证指标,利用统计故障注入方法,估计无失效情况下测试有效性
Figure DDA0000158461710000011
的值,或者有失效情况下测试有效性
Figure DDA0000158461710000012
的值,确定离散型软件测试所需的最小测试用例量或者连续型软件测试所需的连续执行时间,然后生成相应数量的测试用例进行测试验证。本发明方法降低了测试用例的数量和测试持续时间,加速了软件可靠性验证测试过程,节省了测试资源。

Description

引入测试有效性的软件可靠性验证测试方法
技术领域
本发明属于软件可靠性工程领域,尤其涉及软件可靠性测试领域,具体地说,是指一种引入测试有效性的软件可靠性验证测试方法。
背景技术
软件可靠性验证测试(Software Reliability Demonstration Testing,SRDT)是为了确定软件的当前可靠性水平是否达到了规定的可靠性定量指标要求而进行的测试;测试完成后,需要根据验证测试结果得出接收或者拒收该软件的结论。软件可靠性验证测试过程分为4个阶段:测试策划阶段、测试设计与实现阶段、测试执行阶段和测试总结阶段。其中,测试策划阶段需要给出软件可靠性验证测试方案,它是软件可靠性验证测试的核心组成部分,决定了软件可靠性验证测试的执行方式及验收标准。如图3所示,给出了传统的软件可靠性验证测试流程。在测试策划阶段,基于传统统计理论,来确定验证统计测试方案;在测试设计与实现阶段,根据所确定的测试方案,构造操作剖面、建立测试环境,生成测试用例;在测试执行阶段,执行测试用例,运行测试,分析测试结果,得到拒收/接收判定结果;在测试总结阶段,估计可靠性参数,得到可靠性验证测试结论。
目前,国内外针对软件可靠性验证测试方案已有很多研究成果。已经授权的中国专利201010161608.4号公开了“一种基于测试框架的软件测试方法”,其通过针对一系列软件构建一个基础测试框架,完成同一系列软件的测试问题,通过测试过程中对框架的实例化和框架复用,解决了软件测试领域中测试质量受资源限制明显的问题。已经授权的中国专利200910147769.5号公开了“一种实时嵌入式软件自动化闭环测试方法”,其利用基于编程语言实时扩展的实时嵌入式软件测试描述语言的灵活特性,及其执行引擎的可嵌入性、移植性和实时运行特性,可完成实时测试运行中测试人员与被测系统的实时反馈处理,实现实时嵌入式软件的自动化闭环测试。但是这些验证测试方案在高可靠软件系统领域的应用并不理想。因为无论是基于经典统计学方法,还是基于贝叶斯统计学方法得出的软件可靠性验证测试方案,都基于传统统计理论,没有考虑软件产品本身的影响因素,导致测试用例数量过大或测试时间过长。如何改进现有的软件可靠性验证测试方案,减少测试用例数目或测试时间,提高软件可靠性验证测试效率,加速软件可靠性验证测试进程,在有限的时间和资源消耗的条件下实现相同的可靠性验证测试目标,成为当前国内外软件可靠性工程领域的研究热点与难点之一。
为使软件可靠性测试结果更准确地反映软件产品的可靠性水平,越来越多的研究人员提出在软件可靠性模型中增加对软件产品本身的可度量特征或者测试覆盖水平等反映软件本身或测试过程的因素来对软件可靠性进行评估,或者在保证验证测试结果置信水平的前提下,通过使用不同的统计抽样手段或者实验设计来降低软件可靠性验证测试所需的测试数量,加速软件可靠性测试过程。
从20世纪90年代以来,软件测试性的研究逐渐被软件工程界所重视,对软件测试性的度量方法、基本设计原则等方面开展了研究。软件测试性是一种软件内部质量属性,其实质就是对软件进行有效测试难易程度的一个指标,简单的说就是软件中缺陷被检测到的概率。一般情况下,不同的缺陷被检测到的概率是不同的,即测试性不同。它影响着软件测试的执行效率,同时也影响着软件可靠性测试的执行效率。Kuball S于2004年在其论文《Test-Adequacy and statistical testing:Combing different properties of a test-set》中根据软件测试性定义提出了测试集合检错能力的概念,即测试有效性,并针对离散型软件建立了考虑测试有效性的贝叶斯无失效验证测试评估模型,与传统的贝叶斯可靠性验证测试方案相比,可以减少测试用例数量,达到加速测试的目的。随后,赵亮分别于2007年和2008年在其论文《软件易测性和软件可靠性关系研究》和《统计测试的软件可靠性保障能力研究》中也从测试有效性角度对软件测试性进行定义,并且针对离散型软件验证了统计测试对不同的软件具有不同的测试能力,因此,相同数量的统计测试对不同的软件应达到不同的可靠性保障水平。该结论支持通过改进软件测试性设计、加强测试有效性来减少达到一定可靠性目标所需要的统计测试的数量的目标,从而使高可靠性要求的软件质量保障成为可能。以上均是从测试有效性的角度对软件可靠性验证测试方法的改进进行了非常好的诠释,都采用了贝叶斯统计学方法,但是均以离散型软件作为阐述对象,只讨论了无失效情况下的软件可靠性验证测试方法,而对于连续型软件则没有进行阐述,更重要的是,对于有失效情况的软件可靠性验证测试方法也没有进行阐述。并且上述两个研究中对于测试有效性的度量方法也不一样,Kuball采用概率值的形式来对其进行描述,赵亮则是用贝叶斯先验分布来对其进行描述。
发明内容
本发明为了解决基于传统统计理论带来的高可靠软件可靠性测试效率低的问题,从软件测试性的角度出发,提出了一种引入测试有效性的软件可靠性验证测试方法。本发明分无失效与有失效两种情况,分别以离散型软件和连续型软件为对象,建立统一的测试有效性度量形式,提供了一种基于统计故障注入的测试有效性的估计方法,在此基础上给出引入测试有效性的软件可靠性验证测试的改进方法。
本发明提供的一种引入测试有效性的软件可靠性验证测试方法,包括如下步骤:
步骤1、区分被测软件为离散型软件还是连续型软件。
步骤2、调入用户给定的验证指标,离散型软件的验证指标为(p0,C,r),连续型软件的验证指标为(λ0,C,r),其中,p0为离散型软件失效概率的指标值,λ0为连续型软件失效率的指标值,C为置信度,r为所能容忍的最大失效数;根据能容忍的最大失效数r判断是无失效情况还是有失效情况:当最大失效数r等于0时,为无失效情况,当最大失效数r大于0时,为有失效情况。
步骤3、利用统计故障注入方法,估计无失效情况下测试有效性的值,或者有失效情况下测试有效性
Figure BDA0000158461690000032
的值。
步骤4、对于离散型软件,区分无失效情况或有失效情况,分别利用引入测试有效性的离散型软件无失效或有失效可靠性验证测试方案确定方法确定测试所需的最小测试用例量;对于连续型软件,区分无失效情况或有失效情况,分别利用引入测试有效性的连续型软件无失效或有失效可靠性验证测试方案确定方法确定测试所需的连续执行时间。
步骤5、根据被测软件特点和可靠性测试要求搭建可靠性测试环境。
步骤6、构造操作剖面,并根据步骤4确定的验证测试方案,生成相应数量的可靠性测试用例。
步骤7、执行测试用例,并收集失效信息。
步骤8、结合验证测试方案和实验结果,得到接收或拒收结论。
所述的步骤3具体包括如下步骤:
步骤3.1、构造软件缺陷池Θ;
步骤3.2、根据软件缺陷的统计分布规律,从软件缺陷池Θ中随机抽取缺陷,注入到原程序P中,得到一个包含注入缺陷的变异程序P′,通过注入缺陷的方法生成F个变异程序;
步骤3.3、根据测试情况估计测试有效性值:
(1)针对无失效方案情况,利用测试集合T对F个变异程序都进行测试,测试有效性
Figure BDA0000158461690000033
的估计值为:
Figure BDA0000158461690000035
对变异程序P′顺序执行T中的测试用例,直到有一个失效产生了,通过追踪,该失效是由注入P′的缺陷集合Fsi中的某个缺陷导致,此时X(Fsi)=1;对变异程序P′顺序执行T中的测试用例,但是没有失效产生,此时X(Fsi)=0;Fsi表示第i个变异程序所对应的注入的缺陷的集合。
(2)针对有失效方案情况,利用测试集合T对F个变异程序都进行测试,得到测试有效性
Figure BDA0000158461690000036
的估计值
Figure BDA0000158461690000037
为:
Figure BDA0000158461690000038
对变异程序P′顺序执行T中的测试用例,结果发现了k(k≠0)个失效,并且k个失效能追踪到植入P′的缺陷集合Fsi中,当k>r时,记φr+1=φr+1+1,初始变量φr+1的值为0。
所述的步骤4中,对于离散型软件,确定测试所需的最小测试用例量N:
在无失效情况下,最小测试用例量
Figure BDA0000158461690000039
取估计值
Figure BDA00001584616900000311
在有失效情况下,最小测试用例量N为满足下式中测试用例量n的最小值:
Figure BDA0000158461690000041
其中,
Figure BDA0000158461690000042
取估计值
Figure BDA0000158461690000043
β(1+r,1+n-r)(p)表示贝塔分布;
对于连续型软件,确定测试所需的连续执行时间Tα
在无失效情况下,连续执行时间
Figure BDA0000158461690000044
取估计值
在有失效情况下,连续执行时间Tα为满足下式中执行时间t的最小值:
其中,
Figure BDA0000158461690000048
取估计值
Figure BDA0000158461690000049
Gamma(1+r,t)(λ)表示伽玛分布。
本发明与现有技术相比,具有明显的优势和有益效果:
(1)本发明提出的引入测试有效性的软件可靠性验证测试方法,是基于传统贝叶斯统计理论的软件可靠性验证测试方案展开的,并从软件测试性的角度出发,将测试性因素——测试有效性显式地引入到软件可靠性验证测试方法中,即给出了引入测试有效性的软件可靠性验证测试改进方法,解决了传统软件可靠性验证测试方法基于统计理论导致测试用例过多或测试时间过长的局限性,而且从原理、方案、执行过程等方面对引入测试有效性的软件可靠性验证测试方法进行了覆盖。本发明提供的方法可以降低测试用例的数量和测试持续时间,加速软件可靠性验证测试过程,节省测试资源。对于软件可靠性测试的研究来说,提供了一种新的思路和方法,对于软件可靠性测试领域的理论研究及实践均具有重要的指导意义。
(2)本发明分无失效与有失效、连续型和离散型软件四种情况,分别推导了引入测试有效性的软件可靠性验证测试方案表达式,使研究更加全面与完备。并且本发明能够利用原有的可靠性测试方面的理论和成果,例如基于程序变异的软件缺陷池生成方法,以及在基于贝叶斯理论的软件可靠性验证测试方法基础上对传统验证测试方案进行改进,这些使得本发明提出的方法与现有的研究成果实现了很好的延续,而不是完全抛弃原有的研究成果的重头研究。
(3)通过实例应用,展示了本发明具有较好的测试效率的提升效果,且方法直观、意义明确,便于工程人员的理解和实际操作。
附图说明
图1为无失效情况下变异程序空间Ω的划分示意图;
图2为有失效情况下变异程序空间Ω的划分示意图;
图3为传统的软件可靠性验证测试流程示意图;
图4为本发明中的基于统计故障注入的测试有效性的估计流程示意图;
图5为本发明中的统计故障注入示意图;
图6为本发明中的引入测试有效性的软件可靠性验证测试改进流程示意图;
图7为tcas软件的测试有效性
Figure BDA0000158461690000051
的拟合图;
图8为tcas软件的测试有效性
Figure BDA0000158461690000052
的拟合图。
具体实施方式
以下结合附图和实施例对本发明进行详细说明,应当理解,此处所描述的实施例仅用于说明和解释本发明,并不用于限定本发明。
本发明考虑到软件具有无失效情况与有失效情况的不同特点和要求,还考虑到离散型软件和连续型软件的不同特点和要求,因此分别针对无失效与有失效两种情况,建立了引入测试有效性的离散型软件失效概率模型以及引入测试有效性的连续型软件失效率模型,并在此基础上,进一步给出了引入测试有效性的离散型软件可靠性验证测试方法以及引入测试有效性的连续型软件可靠性验证测试方法。在保证验证测试可靠性指标以及置信水平的前提下,有效地降低测试用例数量或者测试持续时间,从而加速软件可靠性验证测试进程,提高软件可靠性验证测试效率。
本发明提供一种引入测试有效性的软件可靠性验证测试方法,分别针对无失效方案与有失效方案,并分别针对连续型软件和离散型软件两种类型展开,即具体提供以下4种方法:1)引入测试有效性的连续型软件无失效可靠性验证测试方法;2)引入测试有效性的离散型软件无失效可靠性验证测试方法;3)引入测试有效性的连续型软件有失效可靠性验证测试方法;4)引入测试有效性的离散型软件有失效可靠性验证测试方法。
本发明提供的引入测试有效性的连续型或离散型软件无失效可靠性验证测试方法的原理为:
假定程序P和统计测试用例集合T。测试有效性用概率形式
Figure BDA0000158461690000053
来表示,即(测试集合T发现程序P中有缺陷),其中Pr表示概率。设可靠性测试的结果为执行了N个测试用例,没有发现失效,即失效数r=0,测试总时间为Tα。用符号
Figure BDA0000158461690000055
来表示此结果,即
Figure BDA0000158461690000056
Figure BDA0000158461690000057
设Ω为所有程序P′组成的程序空间,且P′是对P进行程序变异生成的任意程序,设PG为对P进行变异生成的完全无错的版本,显然程序P也包含在空间Ω中。不妨对空间Ω进行划分,分成2个子空间A0与A1,如图1所示。其中,A0是具有如下属性的变异程序P′的子集合:程序中包含缺陷,且测试集合T不能发现程序中的错误,即没有发现失效,形式化表示为 A 0 = { P ′ | ∀ P ′ ∈ Ω , ∀ fault ∈ P ′ , 0 failurebyT } . 其中:fault∈P′表示程序P′中的缺陷fault,0failure byT表示测试用例集合T不能发现失效。A1是具有如下属性变异程序P′的子集合:程序中包含缺陷,测试集合T至少能发现1个失效,或程序是无错的,形式化表示为 A 1 = { P ′ | ∀ P ′ ∈ Ω , fault ∈ P ′ , 1 failurebyTatleast } ∪ P G . 根据对概率
Figure BDA00001584616900000510
的定义以及程序空间的划分,可以知道:
Figure BDA0000158461690000062
其中,
Figure BDA0000158461690000063
表示在出现现象
Figure BDA0000158461690000064
Figure BDA0000158461690000065
的情况下程序P属于集合Ai的条件概率。即
Figure BDA0000158461690000066
表示程序P中有缺陷,但是不能被T检测出来的概率;
Figure BDA0000158461690000067
表示程序P中有缺陷,且能被T检测出来的概率。
测试结果
Figure BDA0000158461690000068
的出现,可能是由下列情况所引发的:1)P∈A0且失效率或失效概率分布未知;2)P∈A1且P=PG。下面令Ai(i=0,1)分别表示事件“P∈A0”,“P∈A1”,并设函数
Figure BDA0000158461690000069
表示程序P在已知条件
Figure BDA00001584616900000610
Figure BDA00001584616900000611
时的失效率(连续型软件)或失效概率(离散型软件)的条件概率密度函数,θ表示失效率或者失效概率。有如下关系:
其中,式(3)右边第一项表示在出现现象
Figure BDA00001584616900000613
Figure BDA00001584616900000614
时,程序P属于A0时的失效率(连续型软件)或失效概率(离散型软件)的条件概率密度函数:
Figure BDA00001584616900000615
Figure BDA00001584616900000616
Figure BDA00001584616900000617
Figure BDA00001584616900000618
其中,表示P属于事件A0、现象
Figure BDA00001584616900000620
Figure BDA00001584616900000621
失效率(连续型软件)或失效概率(离散型软件)为θ同时发生时的联合概率密度函数,
Figure BDA00001584616900000622
表示现象
Figure BDA00001584616900000623
Figure BDA00001584616900000624
同时发生的概率,
Figure BDA00001584616900000625
表示事件P∈A0、现象
Figure BDA00001584616900000626
Figure BDA00001584616900000627
同时发生时,失效率或失效概率θ的条件概率密度函数,
Figure BDA00001584616900000628
表示现象
Figure BDA00001584616900000629
Figure BDA00001584616900000630
同时发生下,程序P属于事件A0的条件概率,即程序P中有缺陷,但是不能被T检测出来的概率,等于
Figure BDA00001584616900000631
式(3)右边第二项表示在出现现象
Figure BDA00001584616900000632
Figure BDA00001584616900000633
时,程序P属于A1时的失效率(连续型软件)或失效概率(离散型软件)的条件概率密度函数:
Figure BDA00001584616900000634
Figure BDA00001584616900000635
Figure BDA00001584616900000636
Figure BDA00001584616900000637
其中,
Figure BDA00001584616900000638
表示P属于事件A1、现象失效率(连续型软件)或失效概率(离散型软件)为θ同时发生时的联合概率密度函数,
Figure BDA00001584616900000641
表示P属于事件A1、现象
Figure BDA00001584616900000642
Figure BDA00001584616900000643
同时发生时,失效率或失效概率θ的条件概率密度函数,表示现象同时发生下,程序P属于事件A1的概率,即等于
Figure BDA00001584616900000647
将式(4)和(5)带入式(3)中得到可靠性参数θ的概率密度函数为:
Figure BDA0000158461690000071
对于现象
Figure BDA0000158461690000072
由于没有失效发生,即失效数r=0,此时失效率或失效概率的概率分布函数用无先验信息贝叶斯后验分布来表示
Figure BDA0000158461690000073
对于连续型软件,满足伽玛(Gamma)函数分布,则有:
Figure BDA0000158461690000074
对于离散型软件,满足贝塔(β)函数分布,则有:
Figure BDA0000158461690000075
N表示执行的测试用例总数,对于分布函数
Figure BDA0000158461690000076
由于P=PG,即软件为无错版本。此时软件的失效率或失效概率为0,即θ=0的概率为1。用delta分布来近似表示失效率或失效概率的分布δ(θ):
δ ( θ ) = 1 / ϵ θ ∈ [ 0 , ϵ ] , ϵ > 0 , ϵ → 0 0 θ ∉ [ 0 , ϵ ] - - - ( 9 )
ε表示一个尽可能小的正数。
因此,对于连续型软件,其引入测试有效性的无失效情况下的失效率概率密度函数为:
Figure BDA0000158461690000078
对于离散型软件,其引入测试有效性的无失效情况下的失效概率概率密度函数为:
Figure BDA0000158461690000079
若给定可靠性验证指标(θ0,C),其中,θ0为失效率或失效概率的指标值,C为置信度。则由式(6)可以得到引入测试有效性的软件无失效可靠性验证测试方案可以通过计算如下的积分表达式得到:
Figure BDA00001584616900000710
(12)
Figure BDA00001584616900000711
本发明提供的引入测试有效性的连续型软件无失效验证测试方案的确定方法为:
假设连续型软件的失效率用符号λ表示。由式(10)可知,对于连续型软件,在无失效的情况下,其引入测试有效性的失效率λ的概率密度函数为:
Figure BDA00001584616900000712
t表示测试持续时间。对于给定的可靠性验证指标(λ0,C),其中,λ0为失效率的指标值,C为置信度,由式(12)可以得到引入测试有效性的连续型软件无失效验证测试方法所需的最小验证测试时间Tα为满足下式中t的最小值:
Figure BDA0000158461690000081
Figure BDA0000158461690000082
Figure BDA0000158461690000083
Figure BDA0000158461690000084
由式(13)有得到时间t为:
Figure BDA0000158461690000085
则最小验证测试时间Tα为:
当不考虑测试有效性对软件可靠性验证测试的影响时,对于连续型软件来说,在无失效的情况下,其失效率λ的概率密度函数为:f(λ)=Gamma(1,t)(λ)。对于同样的可靠性验证指标(λ0,C),所需的最小验证测试时间Tα为满足下式中t的最小值:
Pr ( λ ≤ λ 0 ) = ∫ 0 λ 0 f ( λ ) dλ = ∫ 0 λ 0 Gamma ( 1 , t ) ( λ ) dλ = 1 - e - t λ 0 ≥ C - - - ( 16 )
得到最小验证测试时间Tα为:
T a = - 1 λ 0 ln ( 1 - C ) - - - ( 17 )
由式(15)与式(17)可知,不考虑测试有效性的验证测试方法相当于把测试有效性
Figure BDA0000158461690000089
简化为0。对于式(15)来说,设
Figure BDA00001584616900000810
是自变量,Ta为因变量,即Ta
Figure BDA00001584616900000811
的函数,对
Figure BDA00001584616900000812
求导可得:
因为0<λ0
Figure BDA00001584616900000814
所以T′α<0。即Tα是关于的减函数,随着
Figure BDA00001584616900000816
的增大而减小。当
Figure BDA00001584616900000817
时,Ta取得最大值
Figure BDA00001584616900000818
所以在引入测试有效性的条件下,所需要的验证测试执行时间小于传统的不考虑测试有效性所给出的验证测试执行时间。
本发明提供的引入测试有效性的离散型软件无失效验证测试方案的确定方法为:
假设离散型软件的失效概率用符号p表示。由式(11)可知,对于离散型软件,在无失效的情况下,其引入测试有效性的失效概率p的概率密度函数为:
Figure BDA00001584616900000819
n表示测试用例数目。对于给定的可靠性验证指标(p0,C),p0为失效概率的指标值,C为置信度,由式(12)可以得到引入测试有效性的离散型软件无失效验证测试方法所需的最小验证测试用例数目N为满足下式中n的最小值:
Figure BDA0000158461690000091
Figure BDA0000158461690000093
Figure BDA0000158461690000094
由式(19)得到测试用例数目n为:
Figure BDA0000158461690000095
则最小验证测试用例数N为:
Figure BDA0000158461690000096
式中:[.]表示对.取整。
当不考虑测试有效性对软件可靠性验证测试的影响时,则对于离散型软件,在无失效的情况下,其失效概率p的概率密度函数为:f(p)=β(1,n+1)(p)。对于同样的可靠性验证指标(p0,C),所需的最小验证测试用例数目N为满足下式中n的最小值:
Pr ( p ≤ p 0 ) = ∫ 0 p 0 f ( p ) dp = ∫ 0 p 0 β ( 1 , n + 1 ) ( p ) dp = 1 - ( 1 - p ) n + 1 ≥ C - - - ( 22 )
即最小验证测试用例数目N为:
N=[1n(1-C)/ln(1-p0)]    (23)
由式(21)与式(23)可知,不考虑测试有效性的验证测试方案相当于把测试有效性
Figure BDA0000158461690000098
简化为0。对于式(21)来说,令
Figure BDA0000158461690000099
Figure BDA00001584616900000910
是自变量,Y为因变量,即Y是
Figure BDA00001584616900000911
的函数,对
Figure BDA00001584616900000912
求导可得:
Figure BDA00001584616900000913
因为0<p0<1
Figure BDA00001584616900000914
所以Y′<0。即Y是关于的减函数,随着
Figure BDA00001584616900000916
的增大而减小。当
Figure BDA00001584616900000917
时,Y取得最大值,即
Figure BDA00001584616900000918
所以在引入测试有效性的条件下,所需要的验证测试用例数目小于传统的不考虑测试有效性所给出的验证测试用例数目。
本发明提供的引入测试有效性的软件有失效可靠性验证测试方法的原理为:
假定程序P和统计测试用例集合T。测试有效性用概率形式
Figure BDA00001584616900000919
来表示,即
Figure BDA00001584616900000920
(测试集合T发现程序P中有缺陷)。假定可靠性测试的结果为执行了N个测试用例,至多发现r个失效(r不等于0),测试总时间为Tα。用符号
Figure BDA00001584616900000921
来表示此结果,即
Figure BDA00001584616900000922
根据测试结果
Figure BDA00001584616900000924
对测试有效性概率
Figure BDA00001584616900000925
进行如下分解,定义:(测试集合T只发现程序P中1个失效),
Figure BDA00001584616900000927
(测试集合T只发现程序P中2个失效),…,(测试集合T只发现程序P中r个失效),
Figure BDA0000158461690000102
(测试集合T至少发现程序P中r+1个失效)。根据
Figure BDA0000158461690000103
的定义,那么有如下关系成立:
Figure BDA0000158461690000104
设Ω为所有程序P′组成的程序空间,且P′是对P进行程序变异生成的任意程序,设PG为对P进行变异生成的完全无错的版本,显然程序P也包含在空间Ω中。对空间Ω进行划分,分成r+2个子空间A0,A1,A2,…,Ar,Ar+1,如图2所示。其中,A0是具有如下属性的变异程序P′的子集合:程序中包含缺陷,且测试集合T不能发现程序中的错误,即没有发现失效,形式化表示为 A 0 = { P ′ | ∀ P ′ ∈ Ω , ∀ fault ∈ P ′ , 0 failurebyT } . Ai(i=1,2,…,r)是具有如下属性的变异程序P′的子集合:程序中包含缺陷,测试集合T能够且只能够发现i个失效,形式化表示为: A i = { P ′ | ∀ P ′ ∈ Ω , fault ∈ P ′ , 1 failuresbyT } . Ar+1是具有如下属性变异程序P′的子集合:程序中包含缺陷,测试集合T至少发现了r+1个失效,或程序是无错的,形式化表示为: A r + 1 = { P ′ | ∀ P ′ ∈ Ω , fault ∈ P ′ , r + 1 failuresbyTatleast } ∪ P G . 根据对概率的定义以及程序空间的划分,可以得到:
Figure BDA0000158461690000109
Figure BDA00001584616900001010
其中,
Figure BDA00001584616900001011
表示在出现现象
Figure BDA00001584616900001012
Figure BDA00001584616900001013
时,程序P属于集合Ai的条件概率,即程序P中有缺陷,且能被T检测i个失效的概率。
Figure BDA00001584616900001014
表示程序P中有缺陷,但是不能被T检测出来的概率。
测试结果
Figure BDA00001584616900001015
的出现,可能是由下列情况所引发的:1)P∈A0且失效率或失效概率分布未知;2)P∈Ai(i=1,2,…,r)且失效率或失效概率分布未知;3)P∈Ar+1且P=PG。下面令Ai(i=0,1,2,…,r,r+1)分别表示事件“P∈A0”,“P∈A1”,…,“P∈Ar+1”,并设函数表示程序P在出现现象
Figure BDA00001584616900001017
Figure BDA00001584616900001018
时的失效率(连续型软件)或失效概率(离散型软件)的条件概率密度函数。有如下关系:
Figure BDA00001584616900001019
其中,
Figure BDA00001584616900001020
表示在出现现象
Figure BDA00001584616900001022
时,程序P属于A0时的失效率(连续型软件)或失效概率(离散型软件)的条件概率密度函数,
Figure BDA00001584616900001023
表示在出现现象
Figure BDA00001584616900001025
时,程序P属于Ai(i=1,…,r)时的失效率(连续型软件)或失效概率(离散型软件)的条件概率密度函数;表示在出现现象
Figure BDA00001584616900001027
Figure BDA00001584616900001028
时,程序P属于Ar+1时的失效率(连续型软件)或失效概率(离散型软件)的条件概率密度函数。
其中,式(28)右边第一项为:
Figure BDA0000158461690000111
Figure BDA0000158461690000112
Figure BDA0000158461690000113
Figure BDA0000158461690000114
其中,
Figure BDA0000158461690000115
表示P属于事件A0、现象
Figure BDA0000158461690000116
Figure BDA0000158461690000117
失效率(连续型软件)或失效概率(离散型软件)为θ同时发生时的联合概率密度函数,
Figure BDA0000158461690000118
表示现象
Figure BDA0000158461690000119
Figure BDA00001584616900001110
同时发生的概率,
Figure BDA00001584616900001111
表示P属于事件A0、现象
Figure BDA00001584616900001112
Figure BDA00001584616900001113
同时发生时,失效率或失效概率θ的条件概率密度函数,表示现象同时发生下,程序P属于事件A0的概率,即程序P中有缺陷,但是不能被T检测出来的概率,等于
Figure BDA00001584616900001117
式(28)右边第二项为:
Figure BDA00001584616900001118
Figure BDA00001584616900001121
其中,
Figure BDA00001584616900001122
表示P属于事件Ai、出现现象
Figure BDA00001584616900001123
Figure BDA00001584616900001124
失效率(连续型软件)或失效概率(离散型软件)为θ同时发生时的联合概率密度函数,
Figure BDA00001584616900001126
表示P属于事件Ai、现象
Figure BDA00001584616900001127
同时发生时,失效率或失效概率θ的条件概率密度函数,
Figure BDA00001584616900001129
表示现象
Figure BDA00001584616900001130
Figure BDA00001584616900001131
同时发生下,程序P属于事件Ai的概率,即等于
Figure BDA00001584616900001132
式(28)右边第三项为:
Figure BDA00001584616900001133
Figure BDA00001584616900001134
Figure BDA00001584616900001136
其中,
Figure BDA00001584616900001137
表示程序P属于Ar+1、出现现象
Figure BDA00001584616900001138
Figure BDA00001584616900001139
失效率(连续型软件)或失效概率(离散型软件)为θ同时发生时的联合概率密度函数,
Figure BDA00001584616900001140
表示事件“P∈Ar+1”、现象同时发生时,失效率或失效概率θ的条件概率密度函数,
Figure BDA00001584616900001143
表示现象
Figure BDA00001584616900001144
Figure BDA00001584616900001145
同时发生下,程序P属于Ar+1的条件概率。
将式(29)、(30)和(31)带入式(28)中得到可靠性参数θ的概率密度函数为:
Figure BDA0000158461690000121
式(32)中,
Figure BDA0000158461690000123
表示事件P∈Ai发生时,失效率或失效概率的条件概率密度函数。对于现象
Figure BDA0000158461690000124
由于至多有r个失效发生,此时失效率或失效概率的概率分布函数用无先验信息贝叶斯后验分布来表示
Figure BDA0000158461690000125
对于连续型软件,满足伽玛(Gamma)分布,有:
Figure BDA0000158461690000126
对于离散型软件,满足贝塔(β)分布,有:
Figure BDA0000158461690000127
对于分布函数
Figure BDA0000158461690000128
表示事件P∈Ar+1发生时,失效率或失效概率的条件概率密度函数。由于P=PG,即软件为无错版本,此时软件的失效率或失效概率为0,即θ=0的概率为1。用delta分布来近似表示失效率或失效概率的分布δ(θ):
δ ( θ ) = 1 / ϵ θ ∈ [ 0 , ϵ ] , ϵ > 0 , ϵ → 0 0 θ ∉ [ 0 , ϵ ] - - - ( 35 )
因此,对于连续型软件,其引入测试有效性的有失效情况下的失效率的概率密度函数为:
Figure BDA00001584616900001210
Figure BDA00001584616900001211
对于离散型软件,其引入测试有效性的有失效情况下的失效概率的概率密度函数为:
Figure BDA00001584616900001212
Figure BDA00001584616900001213
若给定可靠性验证指标(θ0,C,r),θ0为失效率或失效概率的指标值,C为置信度,r为验证测试过程中允许的最大失效数。则由式(32)可以得到引入测试有效性的软件有失效可靠性验证测试方案可以通过计算如下的积分表达式得到:
Figure BDA00001584616900001214
Figure BDA00001584616900001215
本发明提供的引入测试有效性的连续型软件有失效可靠性验证测试方案的确定方法为:
设连续型软件的失效率用符号λ表示。由式(36),对于连续型软件,在有失效的情况下,其引入测试有效性的失效率λ的概率密度函数为:
Figure BDA0000158461690000131
t表示测试持续时间。对于给定的可靠性验证指标(λ0,C,r),λ0为失效率的指标值,C为置信度,r为验证测试过程中允许的最大失效数。则由式(38)可以得到引入测试有效性的连续型软件有失效可靠性验证测试方案所需的最小验证测试时间Ta为满足下式中t的最小值:
Figure BDA0000158461690000132
Figure BDA0000158461690000133
Figure BDA0000158461690000134
Figure BDA0000158461690000135
进一步有,
Figure BDA0000158461690000136
当不考虑测试有效性对软件可靠性验证测试的影响时,对于连续型软件来说,在有失效的情况下,其失效率λ的概率密度函数为:f(λ)=Gamma(1+r,t)(λ)。对于相同的可靠性验证指标(λ0,C,r),所需的最小验证测试时间Ta为满足下式中t的最小值:
Pr ( λ ≤ λ 0 ) = ∫ 0 λ 0 f ( λ ) dλ = ∫ 0 λ 0 Gamma ( 1 + r , t ) ( λ ) dλ ≥ C - - - ( 41 )
对比式(40)与(41)不难看出,引入测试有效性的验证测试方案与不引入测试有效性的方案的差别相当于是置信度发生了变化,前者为
Figure BDA0000158461690000138
又由于 即引入测试有效性的验证测试方案相当于是把置信度降低了,所以其给出的验证测试所需最小测试时间要比传统的不考虑测试有效性所给出的验证测试所需最小测试时间小。
本发明提供的引入测试有效性的离散型软件有失效可靠性验证测试方法为:
假设离散型软件的失效概率用符号p表示。由式(37),对于离散型软件来说,在有失效的情况下,其引入测试有效性的失效概率p的概率密度函数为:
Figure BDA00001584616900001311
n表示测试用例数量。对于给定的可靠性验证指标(p0,C,r),p0为失效概率的指标值,C为置信度,r为验证测试过程中允许的最大失效数。则由式(38)可以得到引入测试有效性的离散型软件有失效可靠性验证测试方案所需的最小验证测试用例数N为满足下式中n的最小值:
Figure BDA0000158461690000141
Figure BDA0000158461690000142
Figure BDA0000158461690000143
Figure BDA0000158461690000144
因此有,
Figure BDA0000158461690000145
当不考虑测试有效性对软件可靠性验证测试的影响时,对于离散型软件来说,在有失效的情况下,其失效概率p的概率密度函数为:f(p)=β(1+r,1+n-r)(p)。对于相同的可靠性验证指标(p0,C,r),所需的最小验证测试用例数N为满足下式中n的最小值:
Pr ( p ≤ p 0 ) = ∫ 0 p 0 f ( p ) dp = ∫ 0 p 0 β ( 1 + r , 1 + n - r ) ( p ) dp ≥ C - - - ( 44 )
对比式(43)与(44)可看出,引入测试有效性的验证测试方案与不引入测试有效性的方案的差别相当于是置信度发生了变化,前者为
Figure BDA0000158461690000147
又由于
Figure BDA0000158461690000148
即引入测试有效性的验证测试方案相当于把置信度降低了,所以其给出的验证测试所需最小测试用例数目要比传统的不考虑测试有效性所给出的验证测试所需最小测试用例数目少。
本发明提供的基于统计故障注入的统计测试用例集合测试有效性的估计原理为:
设Ω为所有程序P′组成的程序空间,且P′是对P进行程序变异生成的任意程序,设PG为对P进行变异生成的完全无错的版本,显然程序P也包含在空间Ω中。统计测试用例集合T的测试有效性估计主要由以下三部分组成:1)基于程序变异的方法来生成软件缺陷,并由此构造一个包含所有可能故障的软件缺陷池Θ;2)根据软件缺陷数的概率分布规律,从缺陷池Θ中随机挑选一定数目的缺陷注入到原程序P中得到新的包含注入缺陷的程序,即变异程序P′。这样,注入的缺陷的程序P′就具有与原程序P相同的统计分布特征。这种构造变异程序的方法称之为统计故障注入方法,多次采用这种方法可构造一个变异程序P′的集合Ω′;3)根据统计测试用例集合T在空间Ω′上的运行情况来估计测试有效性。上述过程需要一些基本假设:①所有植入缺陷引起的失效都能在输出端被清楚地观察到;②在故障注入之前,原程序P中的缺陷不能被T检测出来;③每一个植入缺陷都是相互独立的,植入的缺陷与失效现象是一一对应的。
由于P′中注入的缺陷具有与P相同的统计分布特征,并且原程序P中的缺陷并不会被T检测出来,那么原来的缺陷就不会对T的测试有效性产生贡献。因此,T在P′上的测试情况就相当于其在无错版本PG的基础上加上随机注入的缺陷集合Fsi上的测试情况,即PG+Fsi。观察T在Fsi上的测试情况又相当于T在P0上的测试情况,其中P0是以PG为基础且按照与P相同的统计分布特征而随机注入缺陷得到的随机版本。由于程序P本身就是一个以无错版本PG为基础而包含随机缺陷的程序,所以观察T在Fsi上的测试情况就相当于T在P上的测试情况。
当考虑无失效验证测试方案时,只需计算测试有效性即可,具体参见引入测试有效性的连续型或离散型软件无失效可靠性验证测试方法。将通过统计故障注入技术得到的具有代表性的变异版本P′的集合分为2个子集合S1与S2。其中子集合S1表示那些能够被T检测出缺陷的变异程序P′的集合;S2表示那些不能够被T检测出缺陷来的P′的集合。计算变异程序P′落在集合S1的频率,此频率可作为测试有效性
Figure BDA0000158461690000152
的估计值。
当考虑有失效验证测试方案时,设容许的最大失效数为r,只需计算
Figure BDA0000158461690000153
即可,具体参见引入测试有效性的软件有失效可靠性验证测试方法。将通过统计故障注入技术得到的具有代表性的变异版本P′的集合分为r+2个子集合Si(i=0,1,2,…,r+1)。其中子集合S0表示那些不能够被T检测出缺陷的变异程序P′的集合;Si(i=1,2,…,r)表示那些只能够被T检测出i个失效的P′的集合;Sr+1表示那些能够被T检测出至少r+1个失效的变异程序P′的集合。计算变异程序P′落在集合Sr+1的频率,此频率可作为测试有效性
Figure BDA0000158461690000154
的估计值。
本发明提供的基于统计故障注入的统计测试用例集合测试有效性的估计方法,如图4所示,具体通过以下步骤实现:
步骤一、构造软件缺陷池Θ。
本发明讨论测试有效性对软件可靠性验证测试方案的影响时,仅从软件失效个数与时间的角度来估计软件的可靠性,所以在考虑生成人为缺陷的时候主要分析软件代码级别的情况,而不考虑系统功能的缺陷,也不考虑需求分析阶段的缺陷类型。因为这些缺陷类型最终都体现在软件代码上,所以本发明对软件源代码进行分析,改变源代码以达到引入缺陷的目的,因此选用了程序变异的方法来生成软件缺陷。
利用程序变异方法生成软件缺陷时,主要采用程序变异准则的方式,本发明以C语言的变异准则为例进行说明,但本领域的普通技术人员应当理解,当遇到其它编程语言时,只需按照本发明介绍的方法等同替换其它编程语言的程序变异准则即可。本发明使用的C语言的变异准则有20种:1)数组引用替换数组引用(AAR);2)绝对值插入(ABS);3)数组引用替换常量(ACR);4)算术运算符替换(AOR);5)数组引用替换标量变量(ASR);6)常量替换数组引用(CAR);7)可比较数组名替换(CNR);8)常量替换标量变量(CSR);9)DO语句改变(DER);10)逻辑连接符替换(LCR);11)关系操作符替换(ROR);12)RETUIN语句替换(RSR),将RETUIN语句放到与原先不同的位置;13)标量变量替换数组引用(SAR);14)标量变量替换常量(SCR);15)语句删除(SDL),将不影响程序运行而又破坏其功能的语句删除;16)标量变量替换(SVR);17)一元操作符插入(UOI);18)交换参数,即是改变参数的调用顺序;19)删除参数,即是删除不影响程序运行而又破坏其功能的参数;20)GOTO标签替换(GLR)。
合适的变异准则必须满足这样一个条件,即在多数情况下不会影响到程序的正确执行。然后再根据这些变异准则生成一个包含所有可能故障的软件缺陷池Θ。
步骤二、构造变异程序P′。
依据统计分布规律,从缺陷池Θ中随机抽取缺陷生成变异程序P′,如图5所示。具体可分解为以下4步:
1)确定程序P中的缺陷数的概率分布,具体可从一些先验信息中获得,或遵从现有的基本假设,通常认为缺陷服从泊松分布,指数分布等;
2)确定需要注入的缺陷数目Mi;Mi表示当前要生成的第i个变异程序所注入的缺陷数目。
3)根据缺陷数的概率分布,在缺陷池中按照统计分布随机抽样得到Mi个缺陷;
4)把随机抽样得到的Mi个缺陷,通过人工故障注入技术注入到原程序P中,即可得到变异程序P′。
5)重复3),4),直到得到F个变异程序。F的取值根据实际情况设定,应尽可能的大。
下面以泊松分布为例对步骤二进行说明:
1)假定程序中需要注入的缺陷数目Mi的平均值为
Figure BDA0000158461690000161
并且Mi服从泊松分布。泊松分布的参数
Figure BDA0000158461690000162
而对于一个软件程序来说,其包含的平均缺陷数目
Figure BDA0000158461690000163
可以根据程序的规模、复杂度等所估计得到,比如,Akiyam模型给出一个缺陷数目预测公式:
M ^ = 0.018 * Loc + 4.86 (Loc为程序P源代码行数)    (45)
2)获得参数λ的估计值后,可以得到泊松分布的概率密度函数,具体如下:
Pr ( M i = k ) = λ k k ! e - λ , k = 0,1,2 · · · - - - ( 46 )
3)生成0-1之间的随机数序列η1,η2,...,ηj,...,那么并且满足
Figure BDA0000158461690000166
的m值就是Mi的一个随机抽样值,其中η0=1。
4)在得到Mi的随机抽样值m之后,再从缺陷池Θ中随机抽取m个缺陷通过人工故障注入技术注入到程序P中,即可得到变异版本P′。本发明实施例中设开发人员已经设计了N个故障,N>>λ,并且对每一个故障进行编号1,2,…,N。对[0,1]区间进行N等分,然后生成m个随机数η1,η2,...,ηm,令Ki=int(Nηi)+1,i=1,2,…,m,其中int(.)为取整函数,当η0=1时,K=N+1,不符合实际要求,此时认为K=N。这样就得到m个故障编号Ki。如果有重复的编号,且重复次数k,对于有重复的编号只保留一个,然后删除其他的重复故障编号。再生成k个随机数,按上述方法得到k个故障编号,直到最后得到m个不同的故障编号为止。根据这m个故障编号把对应的故障注入到程序即可。
5)重复3),4),直到得到F个变异程序。F可以尽可能的大,但是要根据实际情况而定。
步骤三、根据测试情况估计测试有效性值。
测试情况1,无失效验证测试方案下估计
Figure BDA0000158461690000171
具体为:
利用测试集合T对所有经过统计故障注入得到的变异程序P′的测试过程中会有下列3种可能的情况发生:
A,顺序执行T中的测试用例,直到有一个失效产生了。这个失效可以追踪到新注入的缺陷集合Fsi中的某个缺陷。这种情况说明Fsi能够被T检测出来,即此变异程序P′属于S1,S1表示那些能够被T检测出缺陷的变异程序P′的集合,记X(Fsi)=1;
B,顺序执行T中的测试用例,直到有一个失效产生了。这个失效追踪回去发现,它不是由新注入的缺陷集合Fsi中的任何一个缺陷所产生的,那么它一定是一个相关缺陷,且是新注入的缺陷与原版本程序P中的缺陷之间的相关缺陷。在这种情况下,这个“真实”的缺陷将被移除,并且将会根据改进后的程序P重新设计故障集合,重新构造变异版本P′集合,然后再进行实验。
C,顺序执行T中的测试用例,但是没有失效产生。这样,缺陷集合Fsi不能够被T所检测出缺陷来。显然,此变异版本P′属于S2,S2表示那些不能够被T检测出缺陷来的P′的集合,记X(Fsi)=0。
利用T对所有F个变异程序都完成测试,则可得到测试有效性
Figure BDA0000158461690000172
的估计式如下:
Figure BDA0000158461690000173
测试情况2,有失效验证测试方案下估计
Figure BDA0000158461690000174
具体为:
设Fsi表示最后得到的第i个变异程序P′的植入缺陷集合,i=1,2,…,F。φi(i=0,1,2,…,r+1)分别表示变异程序P′落入集合Si中的个数,初始化都为0。使用T对P′进行测试时,测试结果会有如下3种可能的情况:
a,顺序执行T中的测试用例,结果发现了k(k≠0)个失效,并且这k个失效可以追踪到新植入的缺陷集合Fsi中去。说明Fsi能够被T检测出来,且检测失效数为k。当k≤r时,P′落入集合Sk中,记φk=φk+1;当k>r时,P′落入集合Sr+1中,记φr+1=φr+1+1。
b,顺序执行T中的测试用例,但是没有失效产生。说明Fsi不能够被T检测出来,P′落入集合S0中,记φ0=φ0+1。
c,顺序执行T中的测试用例,发现了m个失效,并且对这m个失效追踪时发现,至少有1个失效不是由新植入的缺陷集合Fsi中的任何一个缺陷产生的,那么由假设可知,它一定是原程序中一个真实缺陷或独立作用或与新植入的缺陷相互作用产生的失效,不满足统计故障注入独立性的特点。因此,将此缺陷排除后,对于新程序P重新设计实验方案进行实验。
利用T对所有F个变异程序都完成测试,则可以得到T的测试有效性估计为:
Figure BDA0000158461690000181
如果样本数量F足够大,根据大数定律,式(48)将会收敛到真实的测试有效性值。实际中,要根据相关资源来确定F的取值。上述过程可以求出所有均估计值,不过在本发明方法中只需估计出即可。
如图6所示,本发明提供的引入测试有效性的软件可靠性验证测试方法,整体包括如下步骤:
步骤1、区分被测软件为离散型软件还是连续型软件。根据被测软件的类型选择对应的验证测试方法。
本发明实施例仅以离散型软件为代表,分别进行软件无失效可靠性验证测试以及软件有失效可靠性验证测试的方法说明。
步骤2、调入用户给定的验证指标,根据容忍的最大失效数r判断是无失效方案还是有失效方案。当最大失效数r等于0时,采用无失效方案,当最大失效数r大于0时,采用有失效方案。
步骤3、对于无失效方案,利用统计故障注入方法估计无失效情况下测试有效性
Figure BDA0000158461690000184
对于有失效方案,利用统计故障注入方法估计出测试有效性的值。
具体本发明实施例中,具有如下步骤:
步骤3.1、确定目标软件,构造缺陷池。具体为:依据基于统计故障注入的统计测试用例集合测试有效性的估计方法的步骤一构造一个代表性的软件缺陷池。
步骤3.2、构造操作剖面,生成一个测试用例池。具体为:依据操作剖面构建方法构造操作剖面,生成一个数量较少的测试用例池(依据软件的规模而定,通常用例数可以选择50-1000)。
步骤3.3、依据统计故障注入方法构造变异程序P′的集合。具体为:依据基于统计故障注入的统计测试用例集合测试有效性的估计方法的步骤二确定软件中包含的平均缺陷数目依据式(46)确定泊松分布表达式;确定泊松分布抽样值Mi;从步骤一确定的软件缺陷池中随机抽取Mi个缺陷注入到原程序P中,得到变异程序P′。重复上述过程,生成F个变异程序P′。
步骤3.4、根据测试情况估计测试有效性值。具体为:按照基于统计故障注入的统计测试用例集合测试有效性的估计方法的步骤三提供的方法估计无失效方案下的测试有效性
Figure BDA0000158461690000187
或者估计有失效方案下的测试有效性
Figure BDA0000158461690000188
步骤4、给出引入测试有效性的软件可靠性验证测试方案。如果是连续型软件,则采用引入测试有效性的连续型软件无失效可靠性验证测试方案以及引入测试有效性的连续型软件有失效可靠性验证测试方案。本发明实施例是离散型软件,因此采用引入测试有效性的离散型软件无失效可靠性验证测试方案以及引入测试有效性的离散型软件有失效可靠性验证测试方案。
步骤5、根据被测软件特点和可靠性测试要求搭建可靠性测试环境。
步骤6、构造操作剖面,并根据步骤4确定的验证测试方案,生成相应数量的可靠性测试用例。
步骤7、执行测试用例,并收集失效信息,即验证测试过程中的失效数。
步骤8、结合验证测试方案和实验结果,得到接收或拒收结论。
实施例:下面通过对西门子标准变异程序tcas进行实验来对本发明提供的引入测试有效性的软件可靠性验证测试方法进行举例说明。
tcas软件的基本特征如表1所示:
表1西门子实验程序tcas基本特征
选取部分缺陷和部分用例分别作为本实验用的软件缺陷池以及测试用例池,分别用符号Ep以及Tp进行表示,其中缺陷池包含缺陷34个,分别编号为V1-V34。测试用例池包含测试用例870个,分别编号为t1-t870。然后为程序构造了15个变异程序P′,即F=15。具体过程如下:
首先,根据程序规模采用Akiyama模型可知目标程序的平均潜在缺陷数目则泊松分布概率密度函数为:
Figure BDA0000158461690000194
其中λ=7。
根据泊松分布抽样,利用matlab命令抽得15个泊松随机数,分别为3,6,4,7,5,6,8,6,7,5,8,4,6,7,7。
依据抽得的泊松随机数,分别从缺陷池中用matlab命令随机抽取对应数目的缺陷构成变异程序P′。得到的变异程序P′的集合如下表所示:
表2变异程序表
Figure BDA0000158461690000195
Figure BDA0000158461690000201
利用测试用例集合T对这15个变异程序进行测试,统计被检测出植入缺陷的变异程序Pi的个数。再根据测试情况估计测试有效性,并改变测试用例集合的大小分别进行对比实验,直至得到稳定的测试有效性估计值为止。测试用例集合T的测试用例数目分别取100,150,200,250,300,350,400。在本实例中,考虑了无失效方案下以及有失效(失效数指标为r=1)情况下的测试有效性估计值。因此,分别统计能检测出1次(含)以上缺陷的变异程序数目K1与能够被检测出2次(含)以上缺陷的变异程序数目K2。测试结果以及测试有效性估计值如下表所示:
表3测试结果记录
Figure BDA0000158461690000202
由表3可知,测试有效性的估计值都趋于稳定,如图7、图8所示。
根据表3所示的测试有效性的估计值,分别给出引入测试有效性的离散型软件无失效可靠性验证测试方案以及引入测试有效性的离散型软件有失效(最大失效数为r=1)可靠性验证测试方案。验证测试方案计算结果如表4所示:
表4引入测试有效性的西门子程序tcas验证测试最小量
Figure BDA0000158461690000203
表4中,NT表示考虑测试有效性时的验证测试最小量,N表示不考虑测试有效性时的验证测试最小量,EF表示测试效率的提升程度。
从上面给出的引入测试有效性的软件可靠性验证测试方法的实例中可以看出,引入测试有效性的软件可靠性验证测试方法确实利用更少的测试时间达到了同样的软件可靠性验证测试目标,即实现了测试效率的提高,节省了测试资源。证明了本发明的可行性与有效性。
最后应说明的是:以上实施例仅用以说明本发明而并非限制本发明所描述的技术方案;因此,尽管本说明书参照上述的各个实施例对本发明已进行了详细的说明,但是,本领域的普通技术人员应该理解,仍然可以对本发明进行修改或等同替换;而一切不脱离本发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。

Claims (3)

1.一种引入测试有效性的软件可靠性验证测试方法,其特征在于,通过以下步骤实现:
步骤1、区分被测软件为离散型软件还是连续型软件;
步骤2、调入用户给定的验证指标,离散型软件的验证指标为(p0,C,r),连续型软件的验证指标为(λ0,C,r),其中,p0为离散型软件失效概率的指标值,λ0为连续型软件失效率的指标值,C为置信度,r为所能容忍的最大失效数;根据能容忍的最大失效数r判断是无失效情况还是有失效情况:当最大失效数r等于0时,为无失效情况,当最大失效数r大于0时,为有失效情况;
步骤3、利用统计故障注入方法,估计无失效情况下测试有效性
Figure FDA0000407127120000011
的值,或者有失效情况下测试有效性
Figure FDA0000407127120000012
的值,具体包括如下步骤:
步骤3.1、构造软件缺陷池Θ;
步骤3.2、根据软件缺陷的统计分布规律,从软件缺陷池Θ中随机抽取缺陷,注入到原程序P中,得到一个包含注入缺陷的变异程序P′,通过注入缺陷的方法生成F个变异程序;
步骤3.3、根据测试情况估计测试有效性值:
(1)针对无失效方案情况,利用测试集合T对F个变异程序都进行测试,测试有效性的估计值
Figure FDA0000407127120000014
为:
Figure FDA0000407127120000015
对变异程序P′顺序执行T中的测试用例,直到有一个失效产生了,通过追踪,该失效是由注入P′的缺陷集合Fsi中的某个缺陷导致,此时X(Fsi)=1;对变异程序P′顺序执行T中的测试用例,但是没有失效产生,此时X(Fsi)=0;Fsi表示第i个变异程序所对应的注入的缺陷的集合;
(2)针对有失效方案情况,利用测试集合T对F个变异程序都进行测试,得到测试有效性
Figure FDA0000407127120000016
的估计值
Figure FDA0000407127120000017
为:
Figure FDA0000407127120000018
对变异程序P′顺序执行T中的测试用例,结果发现了k(k≠0)个失效,并且k个失效能追踪到植入P′的缺陷集合Fsi中,当k>r时,变量φr+1的值加1,变量φr+1的初始值为0;
步骤4、对于离散型软件,确定测试所需的最小测试用例量N:
在无失效情况下,最小测试用例量
Figure FDA00004071271200000110
取估计值
Figure FDA00004071271200000111
在有失效情况下,最小测试用例量N为满足下式中测试用例量n的最小值:
Figure FDA00004071271200000112
其中,
Figure FDA00004071271200000113
取估计值
Figure FDA00004071271200000114
β(1+r,1+n-r)(p)表示贝塔分布;
对于连续型软件,确定测试所需的连续执行时间Ta
在无失效情况下,连续执行时间
Figure FDA0000407127120000021
Figure FDA0000407127120000022
取估计值
Figure FDA0000407127120000023
在有失效情况下,连续执行时间Ta为满足下式中执行时间t的最小值:
Figure FDA0000407127120000024
其中,
Figure FDA0000407127120000025
取估计值
Figure FDA0000407127120000026
Gamma(1+r,t)(λ)表示伽玛分布;
步骤5、根据被测软件特点和可靠性测试要求搭建可靠性测试环境;
步骤6、构造操作剖面,并根据步骤4确定的最小测试用例量N或者连续执行时间Ta,生成相应数量的可靠性测试用例;
步骤7、执行测试用例,并收集失效信息;
步骤8、结合验证测试方案和实验结果,得到接收或拒收结论。
2.根据权利要求1所述的一种引入测试有效性的软件可靠性验证测试方法,其特征在于,所述的步骤3.2具体包括如下步骤:
步骤3.2.1:确定程序P中的缺陷数的概率分布;
步骤3.2.1中所述的缺陷数的概率分布从先验信息中获得,或遵从现有的基本假设,基本假设包括:服从泊松分布或者指数分布;
步骤3.2.2:确定需要注入的缺陷数目Mi
步骤3.2.3:根据缺陷数的概率分布,在软件缺陷池Θ中,按照统计分布随机抽样得到Mi个缺陷;
步骤3.2.4:把随机抽样得到的Mi个缺陷,通过人工故障注入技术注入到原程序P中,得到一个变异程序P';
步骤3.2.5:重复步骤3.2.3和步骤3.2.4,直至生成F个变异程序。
3.根据权利要求2所述的一种引入测试有效性的软件可靠性验证测试方法,其特征在于,所述的步骤3.2.2需要注入的缺陷数目Mi根据对缺陷数目均值的预计值
Figure FDA0000407127120000027
和步骤3.2.1中设定的缺陷数的概率分布共同确定,当步骤3.2.1中的概率分布为泊松分布时,设定缺陷数目均值的预计值
Figure FDA0000407127120000028
利用Akiyam模型的公式来确定:
Figure FDA0000407127120000029
其中,Loc表示原程序P的源代码行数;
则步骤3.2.2中需要注入的缺陷数目Mi(i=1,…,F)的确定方法是:根据缺陷数的概率分布得到概率密度函数为:
Figure FDA00004071271200000210
其中泊松分布的参数生成0-1之间的随机数序列η12,...,ηj,...,满足的m值就是Mi的一个随机抽样值,其中η0=1。
CN201210130304.0A 2012-01-09 2012-04-27 引入测试有效性的软件可靠性验证测试方法 Expired - Fee Related CN102629232B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210130304.0A CN102629232B (zh) 2012-01-09 2012-04-27 引入测试有效性的软件可靠性验证测试方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201210004691.3 2012-01-09
CN201210004691 2012-01-09
CN201210130304.0A CN102629232B (zh) 2012-01-09 2012-04-27 引入测试有效性的软件可靠性验证测试方法

Publications (2)

Publication Number Publication Date
CN102629232A CN102629232A (zh) 2012-08-08
CN102629232B true CN102629232B (zh) 2014-03-26

Family

ID=46587492

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210130304.0A Expired - Fee Related CN102629232B (zh) 2012-01-09 2012-04-27 引入测试有效性的软件可靠性验证测试方法

Country Status (1)

Country Link
CN (1) CN102629232B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140258783A1 (en) * 2013-03-07 2014-09-11 International Business Machines Corporation Software testing using statistical error injection

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102866952B (zh) * 2012-10-11 2014-12-10 山东省科学院自动化研究所 一种基于uppaal模型的汽车软件源代码仿真测试方法
CN104008048B (zh) * 2013-11-07 2017-06-20 哈尔滨工程大学 一种考虑检测效用及修正效用的软件可靠性检测方法
CN103927343B (zh) * 2014-03-28 2017-04-05 北京航空航天大学 一种phm系统诊断与预测能力综合验证方法
CN104375934B (zh) * 2014-10-22 2017-05-03 江苏科技大学 一种Android手机软件可靠性测试方法
CN104519377A (zh) * 2014-12-30 2015-04-15 康佳集团股份有限公司 一种电视软件入库发布验证的方法及系统
CN104899138A (zh) * 2015-05-25 2015-09-09 浪潮集团有限公司 一种uvm验证环境中复用c程序测试向量的方法
US10190991B2 (en) * 2016-11-03 2019-01-29 Applied Materials Israel Ltd. Method for adaptive sampling in examining an object and system thereof
CN108205490B (zh) * 2016-12-19 2021-05-14 比亚迪股份有限公司 软件看门狗测试方法和装置
CN107480069A (zh) * 2017-08-23 2017-12-15 厦门大学 一种低需求操作模式下的软件可靠性定量评估方法
CN108804334B (zh) * 2018-06-15 2021-01-12 北京航空航天大学 一种基于自适应抽样的离散型软件可靠性增长测试与评估方法
CN109542510B (zh) * 2018-11-16 2021-11-23 北京广利核系统工程有限公司 一种基于贝叶斯理论的软件v&v有效性度量方法
CN110472193B (zh) * 2019-07-31 2023-10-31 浪潮金融信息技术有限公司 一种证明产品可靠性的测试方法
CN111141501B (zh) * 2019-12-13 2021-06-29 中国航空综合技术研究所 一种机载设备测试性试验的试验用例生成系统及方法
CN112416740A (zh) * 2019-12-26 2021-02-26 上海哔哩哔哩科技有限公司 测试用例有效性的评估方法、电子设备和存储介质
CN111475415B (zh) * 2020-04-07 2021-07-27 北京航空航天大学 一种可靠性策略模型与代码的一致性检测方法和装置
CN112364491B (zh) * 2020-10-28 2021-10-15 中国电子产品可靠性与环境试验研究所((工业和信息化部电子第五研究所)(中国赛宝实验室)) 系统安全性量化试验方法、装置、计算机设备和存储介质
CN112560393B (zh) * 2020-12-17 2023-01-24 中科芯云微电子科技有限公司 Eda软件工具的比对验证方法及装置
CN113779494B (zh) * 2021-09-22 2023-10-20 潍柴动力股份有限公司 Scr故障诊断方法和装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102033806A (zh) * 2010-12-14 2011-04-27 北京航空航天大学 一种实时嵌入式软件可靠性测试数据生成方法
CN102136047A (zh) * 2011-02-25 2011-07-27 天津大学 一种基于形式化及统一软件模型的软件可信工程方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102033806A (zh) * 2010-12-14 2011-04-27 北京航空航天大学 一种实时嵌入式软件可靠性测试数据生成方法
CN102136047A (zh) * 2011-02-25 2011-07-27 天津大学 一种基于形式化及统一软件模型的软件可信工程方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李秋英,李海峰,王健.测试有效性对软件可靠性验证测试量的影响.《北京航空航天大学学报》.2011,第37卷(第3期),325-330. *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140258783A1 (en) * 2013-03-07 2014-09-11 International Business Machines Corporation Software testing using statistical error injection
US10235278B2 (en) * 2013-03-07 2019-03-19 International Business Machines Corporation Software testing using statistical error injection

Also Published As

Publication number Publication date
CN102629232A (zh) 2012-08-08

Similar Documents

Publication Publication Date Title
CN102629232B (zh) 引入测试有效性的软件可靠性验证测试方法
CN104462757A (zh) 基于监测数据的Weibull分布可靠性序贯验证试验方法
CN103279415A (zh) 基于组合测试的嵌入式软件测试方法
CN103383659B (zh) 一种软件加速生命测试方法
CN109696900A (zh) 一种测试汽车控制器局域网络报文发送周期的系统和方法
CN109375151A (zh) 电能表计量误差在线监测技术的监测通道调度方法及装置
CN109961172A (zh) 一种基于统计模型检验的cps稀有事件概率预测方法
CN110210171A (zh) 一种数学模型验模工具
Chen et al. Metamorphic testing: Applications and integration with other methods: Tutorial synopsis
CN102662848B (zh) 一种贝叶斯软件可靠性验证测试方法及其计算机辅助工具
CN116383048A (zh) 软件质量信息处理方法及装置
CN115827353A (zh) 故障诊断方法及装置
Wohlin et al. Reliability certification of software components
Scheidegger et al. Identifying biases in deterioration models using synthetic sewer data
CN111859296B (zh) 一种基于装备使用期间的测试性指标评估方法及系统
CN115422033A (zh) 一种分布交互式仿真时序验证方法和系统
CN110688152B (zh) 一种结合软件开发质量信息的软件可靠性定量评估方法
Lavazza et al. Understanding and modeling ai-intensive system development
Bin Osman et al. Uncertainty propagation assessment in railway-track degradation model using bayes linear theory
Wang et al. Software reliability accelerated testing method based on test coverage
CN112214912A (zh) 一种外部自动测试系统及机载设备测试方法
CN105608006A (zh) 一种基于概率模型的程序错误检测方法及系统
CN109614586A (zh) 基于贝叶斯理论和线性拟合的可靠度置信下限构建方法
CN117033198B (zh) 一种软件测试方法、装置、设备以及存储介质
CN111061599B (zh) 接口测试环境的检查点的生成方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20210108

Address after: 100089 No. 1105, 11 / F, Boyan building, 238 North Fourth Ring Middle Road, Haidian District, Beijing

Patentee after: Beijing Tianhang Changying Technology Co.,Ltd.

Address before: 100191 No. 37, Haidian District, Beijing, Xueyuan Road

Patentee before: BEIHANG University

TR01 Transfer of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20140326

CF01 Termination of patent right due to non-payment of annual fee