首页> 中国专利> 引入测试有效性的软件可靠性验证测试方法

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

摘要

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

著录项

  • 公开/公告号CN102629232A

    专利类型发明专利

  • 公开/公告日2012-08-08

    原文格式PDF

  • 申请/专利权人 北京航空航天大学;

    申请/专利号CN201210130304.0

  • 发明设计人 李秋英;王健;罗磊;刘力新;朱龙;

    申请日2012-04-27

  • 分类号G06F11/36(20060101);

  • 代理机构11121 北京永创新实专利事务所;

  • 代理人周长琪

  • 地址 100191 北京市海淀区学院路37号

  • 入库时间 2023-12-18 06:20:22

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-04-04

    未缴年费专利权终止 IPC(主分类):G06F11/36 专利号:ZL2012101303040 申请日:20120427 授权公告日:20140326

    专利权的终止

  • 2014-03-26

    授权

    授权

  • 2012-10-03

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20120427

    实质审查的生效

  • 2012-08-08

    公开

    公开

说明书

技术领域

本发明属于软件可靠性工程领域,尤其涉及软件可靠性测试领域,具体地说,是指一种 引入测试有效性的软件可靠性验证测试方法。

背景技术

软件可靠性验证测试(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、利用统计故障注入方法,估计无失效情况下测试有效性的值,或者有失效情 况下测试有效性的值。

步骤4、对于离散型软件,区分无失效情况或有失效情况,分别利用引入测试有效性的 离散型软件无失效或有失效可靠性验证测试方案确定方法确定测试所需的最小测试用例量; 对于连续型软件,区分无失效情况或有失效情况,分别利用引入测试有效性的连续型软件无 失效或有失效可靠性验证测试方案确定方法确定测试所需的连续执行时间。

步骤5、根据被测软件特点和可靠性测试要求搭建可靠性测试环境。

步骤6、构造操作剖面,并根据步骤4确定的验证测试方案,生成相应数量的可靠性测 试用例。

步骤7、执行测试用例,并收集失效信息。

步骤8、结合验证测试方案和实验结果,得到接收或拒收结论。

所述的步骤3具体包括如下步骤:

步骤3.1、构造软件缺陷池Θ;

步骤3.2、根据软件缺陷的统计分布规律,从软件缺陷池Θ中随机抽取缺陷,注入到原 程序P中,得到一个包含注入缺陷的变异程序P′,通过注入缺陷的方法生成F个变异程序;

步骤3.3、根据测试情况估计测试有效性值:

(1)针对无失效方案情况,利用测试集合T对F个变异程序都进行测试,测试有效性的估计值为:对变异程序P′顺序执行T中的测试用例,直到有一个失 效产生了,通过追踪,该失效是由注入P′的缺陷集合Fsi中的某个缺陷导致,此时X(Fsi)=1; 对变异程序P′顺序执行T中的测试用例,但是没有失效产生,此时X(Fsi)=0;Fsi表示第i 个变异程序所对应的注入的缺陷的集合。

(2)针对有失效方案情况,利用测试集合T对F个变异程序都进行测试,得到测试有 效性的估计值为:对变异程序P′顺序执行T中的测试用例,结果发现了 k(k≠0)个失效,并且k个失效能追踪到植入P′的缺陷集合Fsi中,当k>r时,记φr+1=φr+1+1, 初始变量φr+1的值为0。

所述的步骤4中,对于离散型软件,确定测试所需的最小测试用例量N:

在无失效情况下,最小测试用例量取估计值

在有失效情况下,最小测试用例量N为满足下式中测试用例量n的最小值:

其中,取估计值β(1+r,1+n-r)(p)表示贝 塔分布;

对于连续型软件,确定测试所需的连续执行时间Tα

在无失效情况下,连续执行时间取估计值

在有失效情况下,连续执行时间Tα为满足下式中执行时间t的最小值:

其中,取估计值Gamma(1+r,t)(λ)表示伽 玛分布。

本发明与现有技术相比,具有明显的优势和有益效果:

(1)本发明提出的引入测试有效性的软件可靠性验证测试方法,是基于传统贝叶斯统计 理论的软件可靠性验证测试方案展开的,并从软件测试性的角度出发,将测试性因素——测 试有效性显式地引入到软件可靠性验证测试方法中,即给出了引入测试有效性的软件可靠性 验证测试改进方法,解决了传统软件可靠性验证测试方法基于统计理论导致测试用例过多或 测试时间过长的局限性,而且从原理、方案、执行过程等方面对引入测试有效性的软件可靠 性验证测试方法进行了覆盖。本发明提供的方法可以降低测试用例的数量和测试持续时间, 加速软件可靠性验证测试过程,节省测试资源。对于软件可靠性测试的研究来说,提供了一 种新的思路和方法,对于软件可靠性测试领域的理论研究及实践均具有重要的指导意义。

(2)本发明分无失效与有失效、连续型和离散型软件四种情况,分别推导了引入测试有 效性的软件可靠性验证测试方案表达式,使研究更加全面与完备。并且本发明能够利用原有 的可靠性测试方面的理论和成果,例如基于程序变异的软件缺陷池生成方法,以及在基于贝 叶斯理论的软件可靠性验证测试方法基础上对传统验证测试方案进行改进,这些使得本发明 提出的方法与现有的研究成果实现了很好的延续,而不是完全抛弃原有的研究成果的重头研 究。

(3)通过实例应用,展示了本发明具有较好的测试效率的提升效果,且方法直观、意义 明确,便于工程人员的理解和实际操作。

附图说明

图1为无失效情况下变异程序空间Ω的划分示意图;

图2为有失效情况下变异程序空间Ω的划分示意图;

图3为传统的软件可靠性验证测试流程示意图;

图4为本发明中的基于统计故障注入的测试有效性的估计流程示意图;

图5为本发明中的统计故障注入示意图;

图6为本发明中的引入测试有效性的软件可靠性验证测试改进流程示意图;

图7为tcas软件的测试有效性的拟合图;

图8为tcas软件的测试有效性的拟合图。

具体实施方式

以下结合附图和实施例对本发明进行详细说明,应当理解,此处所描述的实施例仅用于 说明和解释本发明,并不用于限定本发明。

本发明考虑到软件具有无失效情况与有失效情况的不同特点和要求,还考虑到离散型软 件和连续型软件的不同特点和要求,因此分别针对无失效与有失效两种情况,建立了引入测 试有效性的离散型软件失效概率模型以及引入测试有效性的连续型软件失效率模型,并在此 基础上,进一步给出了引入测试有效性的离散型软件可靠性验证测试方法以及引入测试有效 性的连续型软件可靠性验证测试方法。在保证验证测试可靠性指标以及置信水平的前提下, 有效地降低测试用例数量或者测试持续时间,从而加速软件可靠性验证测试进程,提高软件 可靠性验证测试效率。

本发明提供一种引入测试有效性的软件可靠性验证测试方法,分别针对无失效方案与有 失效方案,并分别针对连续型软件和离散型软件两种类型展开,即具体提供以下4种方法: 1)引入测试有效性的连续型软件无失效可靠性验证测试方法;2)引入测试有效性的离散型 软件无失效可靠性验证测试方法;3)引入测试有效性的连续型软件有失效可靠性验证测试方 法;4)引入测试有效性的离散型软件有失效可靠性验证测试方法。

本发明提供的引入测试有效性的连续型或离散型软件无失效可靠性验证测试方法的原理 为:

假定程序P和统计测试用例集合T。测试有效性用概率形式来表示,即(测试 集合T发现程序P中有缺陷),其中Pr表示概率。设可靠性测试的结果为执行了N个测试用 例,没有发现失效,即失效数r=0,测试总时间为Tα。用符号来表示此结果,即设Ω为所有程序P′组成的程序空间, 且P′是对P进行程序变异生成的任意程序,设PG为对P进行变异生成的完全无错的版本, 显然程序P也包含在空间Ω中。不妨对空间Ω进行划分,分成2个子空间A0与A1,如图1 所示。其中,A0是具有如下属性的变异程序P′的子集合:程序中包含缺陷,且测试集合T不 能发现程序中的错误,即没有发现失效,形式化表示为 A0={P|PΩ,faultP,0failurebyT}.其中:fault∈P′表示程序P′中的缺陷fault,0 failure byT表示测试用例集合T不能发现失效。A1是具有如下属性变异程序P′的子集合:程 序中包含缺陷,测试集合T至少能发现1个失效,或程序是无错的,形式化表示为 A1={P|PΩ,faultP,1failurebyTatleast}PG.根据对概率的定义以及程序空间的 划分,可以知道:

其中,表示在出现现象和的情况下程序P属于集合Ai的条 件概率。即表示程序P中有缺陷,但是不能被T检测出来的概率; 表示程序P中有缺陷,且能被T检测出来的概率。

测试结果的出现,可能是由下列情况所引发的:1)P∈A0且失效率或失效概率分布 未知;2)P∈A1且P=PG。下面令Ai(i=0,1)分别表示事件“P∈A0”,“P∈A1”,并设函 数表示程序P在已知条件和时的失效率(连续型软件)或失效概率(离散型 软件)的条件概率密度函数,θ表示失效率或者失效概率。有如下关系:

其中,式(3)右边第一项表示在出现现象和时,程序P属于A0时的失效率(连续型软 件)或失效概率(离散型软件)的条件概率密度函数:

其中,表示P属于事件A0、现象和失效率(连续型软件)或失效概 率(离散型软件)为θ同时发生时的联合概率密度函数,表示现象和同时发生 的概率,表示事件P∈A0、现象和同时发生时,失效率或失效概率θ的条 件概率密度函数,表示现象和同时发生下,程序P属于事件A0的条件概率, 即程序P中有缺陷,但是不能被T检测出来的概率,等于

式(3)右边第二项表示在出现现象和时,程序P属于A1时的失效率(连续型软件) 或失效概率(离散型软件)的条件概率密度函数:

其中,表示P属于事件A1、现象和失效率(连续型软件)或失效概 率(离散型软件)为θ同时发生时的联合概率密度函数,表示P属于事件A1、 现象和同时发生时,失效率或失效概率θ的条件概率密度函数,表示现象和同时发生下,程序P属于事件A1的概率,即等于

将式(4)和(5)带入式(3)中得到可靠性参数θ的概率密度函数为:

对于现象由于没有失效发生,即失效数r=0,此时失效率或失效概率的概率分布函 数用无先验信息贝叶斯后验分布来表示

对于连续型软件,满足伽玛(Gamma)函数分布,则有:

对于离散型软件,满足贝塔(β)函数分布,则有:

N表示执行的测试用例总数,对于分布函数由于P=PG,即软件为无错 版本。此时软件的失效率或失效概率为0,即θ=0的概率为1。用delta分布来近似表示失 效率或失效概率的分布δ(θ):

δ(θ)=1/ϵθ[0,ϵ],ϵ>0,ϵ00θ[0,ϵ]---(9)

ε表示一个尽可能小的正数。

因此,对于连续型软件,其引入测试有效性的无失效情况下的失效率概率密度函数为:

对于离散型软件,其引入测试有效性的无失效情况下的失效概率概率密度函数为:

若给定可靠性验证指标(θ0,C),其中,θ0为失效率或失效概率的指标值,C为置信度。 则由式(6)可以得到引入测试有效性的软件无失效可靠性验证测试方案可以通过计算如下的 积分表达式得到:

(12)

本发明提供的引入测试有效性的连续型软件无失效验证测试方案的确定方法为:

假设连续型软件的失效率用符号λ表示。由式(10)可知,对于连续型软件,在无失效的 情况下,其引入测试有效性的失效率λ的概率密度函数为:

t表示测试持续时间。对于给定的可靠性验证指标(λ0,C),其中,λ0为失效率的指标值, C为置信度,由式(12)可以得到引入测试有效性的连续型软件无失效验证测试方法所需的 最小验证测试时间Tα为满足下式中t的最小值:

由式(13)有得到时间t为:

则最小验证测试时间Tα为:

当不考虑测试有效性对软件可靠性验证测试的影响时,对于连续型软件来说,在无失效 的情况下,其失效率λ的概率密度函数为:f(λ)=Gamma(1,t)(λ)。对于同样的可靠性验证指 标(λ0,C),所需的最小验证测试时间Tα为满足下式中t的最小值:

Pr(λλ0)=0λ0f(λ)=0λ0Gamma(1,t)(λ)=1-e-tλ0C---(16)

得到最小验证测试时间Tα为:

Ta=-1λ0ln(1-C)---(17)

由式(15)与式(17)可知,不考虑测试有效性的验证测试方法相当于把测试有效性简化为0。对于式(15)来说,设是自变量,Ta为因变量,即Ta是的函数,对求导 可得:

因为0<λ0,所以T′α<0。即Tα是关于的减函数,随着的增大而减小。当 时,Ta取得最大值所以在引入测试有效性的条件下,所需要的验证测试 执行时间小于传统的不考虑测试有效性所给出的验证测试执行时间。

本发明提供的引入测试有效性的离散型软件无失效验证测试方案的确定方法为:

假设离散型软件的失效概率用符号p表示。由式(11)可知,对于离散型软件,在无失 效的情况下,其引入测试有效性的失效概率p的概率密度函数为: n表示测试用例数目。对于给定的可靠性验证 指标(p0,C),p0为失效概率的指标值,C为置信度,由式(12)可以得到引入测试有效性的 离散型软件无失效验证测试方法所需的最小验证测试用例数目N为满足下式中n的最小值:

由式(19)得到测试用例数目n为:

则最小验证测试用例数N为:

式中:[.]表示对.取整。

当不考虑测试有效性对软件可靠性验证测试的影响时,则对于离散型软件,在无失效的 情况下,其失效概率p的概率密度函数为:f(p)=β(1,n+1)(p)。对于同样的可靠性验证指标 (p0,C),所需的最小验证测试用例数目N为满足下式中n的最小值:

Pr(pp0)=0p0f(p)dp=0p0β(1,n+1)(p)dp=1-(1-p)n+1C---(22)

即最小验证测试用例数目N为:

N=[1n(1-C)/ln(1-p0)]    (23)

由式(21)与式(23)可知,不考虑测试有效性的验证测试方案相当于把测试有效性简化为0。对于式(21)来说,令设是自变量,Y为因变量,即 Y是的函数,对求导可得:

因为0<p0<1所以Y′<0。即Y是关于的减函数,随着的增大而减小。 当时,Y取得最大值,即所以在引入测试有效性的条件下,所需要的验证 测试用例数目小于传统的不考虑测试有效性所给出的验证测试用例数目。

本发明提供的引入测试有效性的软件有失效可靠性验证测试方法的原理为:

假定程序P和统计测试用例集合T。测试有效性用概率形式来表示,即(测试集 合T发现程序P中有缺陷)。假定可靠性测试的结果为执行了N个测试用例,至多发现r个失 效(r不等于0),测试总时间为Tα。用符号来表示此结果,即根据测试结果对测试有效性概率进行 如下分解,定义:(测试集合T只发现程序P中1个失效),(测试集合T只发现 程序P中2个失效),…,(测试集合T只发现程序P中r个失效),(测试集合 T至少发现程序P中r+1个失效)。根据的定义,那么有如下关系成立:

设Ω为所有程序P′组成的程序空间,且P′是对P进行程序变异生成的任意程序,设PG为 对P进行变异生成的完全无错的版本,显然程序P也包含在空间Ω中。对空间Ω进行划分, 分成r+2个子空间A0,A1,A2,…,Ar,Ar+1,如图2所示。其中,A0是具有如下属性的变异程 序P′的子集合:程序中包含缺陷,且测试集合T不能发现程序中的错误,即没有发现失效, 形式化表示为A0={P|PΩ,faultP,0failurebyT}.Ai(i=1,2,…,r)是具有如下属性的变 异程序P′的子集合:程序中包含缺陷,测试集合T能够且只能够发现i个失效,形式化表示 为:Ai={P|PΩ,faultP,1failuresbyT}.Ar+1是具有如下属性变异程序P′的子集合: 程序中包含缺陷,测试集合T至少发现了r+1个失效,或程序是无错的,形式化表示为: Ar+1={P|PΩ,faultP,r+1failuresbyTatleast}PG.根据对概率的定义以及程序空 间的划分,可以得到:

其中,表示在出现现象和时,程序P属于集合Ai的条件概率,即程序P中有缺陷,且能被T检测i个失效的概率。表示程序 P中有缺陷,但是不能被T检测出来的概率。

测试结果的出现,可能是由下列情况所引发的: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在出现现象和时的失效率(连续型软件)或失效概率(离散型软件)的条件 概率密度函数。有如下关系:

其中,表示在出现现象和时,程序P属于A0时的失效率(连续型软 件)或失效概率(离散型软件)的条件概率密度函数,表示在出现 现象和时,程序P属于Ai(i=1,…,r)时的失效率(连续型软件)或失效概率(离散型软 件)的条件概率密度函数;表示在出现现象和时,程序P属于Ar+1时的 失效率(连续型软件)或失效概率(离散型软件)的条件概率密度函数。

其中,式(28)右边第一项为:

其中,表示P属于事件A0、现象和失效率(连续型软件)或失效概 率(离散型软件)为θ同时发生时的联合概率密度函数,表示现象和同时发生 的概率,表示P属于事件A0、现象和同时发生时,失效率或失效概率θ的 条件概率密度函数,表示现象和同时发生下,程序P属于事件A0的概率, 即程序P中有缺陷,但是不能被T检测出来的概率,等于

式(28)右边第二项为:

其中,表示P属于事件Ai、出现现象和失效率(连续型 软件)或失效概率(离散型软件)为θ同时发生时的联合概率密度函数,表示P属于事件Ai、现象和同时发生时,失效率或失效概率θ的条件概率密度 函数,表示现象和同时发生下,程序P属于事件Ai的概率,即 等于

式(28)右边第三项为:

其中,表示程序P属于Ar+1、出现现象和失效率(连续型软件) 或失效概率(离散型软件)为θ同时发生时的联合概率密度函数,表示事件 “P∈Ar+1”、现象和同时发生时,失效率或失效概率θ的条件概率密度函数, 表示现象和同时发生下,程序P属于Ar+1的条件概率。

将式(29)、(30)和(31)带入式(28)中得到可靠性参数θ的概率密度函数为:

式(32)中,表示事件P∈Ai发生时,失效率或失效概率的 条件概率密度函数。对于现象由于至多有r个失效发生,此时失效率或失效概率的概率 分布函数用无先验信息贝叶斯后验分布来表示

对于连续型软件,满足伽玛(Gamma)分布,有:

对于离散型软件,满足贝塔(β)分布,有:

对于分布函数表示事件P∈Ar+1发生时,失效率或失效概率的条件概 率密度函数。由于P=PG,即软件为无错版本,此时软件的失效率或失效概率为0,即θ=0 的概率为1。用delta分布来近似表示失效率或失效概率的分布δ(θ):

δ(θ)=1/ϵθ[0,ϵ],ϵ>0,ϵ00θ[0,ϵ]---(35)

因此,对于连续型软件,其引入测试有效性的有失效情况下的失效率的概率密度函数为:

对于离散型软件,其引入测试有效性的有失效情况下的失效概率的概率密度函数为:

若给定可靠性验证指标(θ0,C,r),θ0为失效率或失效概率的指标值,C为置信度,r为验 证测试过程中允许的最大失效数。则由式(32)可以得到引入测试有效性的软件有失效可靠 性验证测试方案可以通过计算如下的积分表达式得到:

本发明提供的引入测试有效性的连续型软件有失效可靠性验证测试方案的确定方法为:

设连续型软件的失效率用符号λ表示。由式(36),对于连续型软件,在有失效的情况下, 其引入测试有效性的失效率λ的概率密度函数为:

t表示测试持续时间。对于给定的可靠性验证指标(λ0,C,r),λ0为失效率的指标值,C为 置信度,r为验证测试过程中允许的最大失效数。则由式(38)可以得到引入测试有效性的 连续型软件有失效可靠性验证测试方案所需的最小验证测试时间Ta为满足下式中t的最小值:

进一步有,

当不考虑测试有效性对软件可靠性验证测试的影响时,对于连续型软件来说,在有失效 的情况下,其失效率λ的概率密度函数为:f(λ)=Gamma(1+r,t)(λ)。对于相同的可靠性验 证指标(λ0,C,r),所需的最小验证测试时间Ta为满足下式中t的最小值:

Pr(λλ0)=0λ0f(λ)=0λ0Gamma(1+r,t)(λ)C---(41)

对比式(40)与(41)不难看出,引入测试有效性的验证测试方案与不引入测试有效性 的方案的差别相当于是置信度发生了变化,前者为又由于即引入测试有效性的验证测试方案相当于是把置信度降低了,所以其 给出的验证测试所需最小测试时间要比传统的不考虑测试有效性所给出的验证测试所需最小 测试时间小。

本发明提供的引入测试有效性的离散型软件有失效可靠性验证测试方法为:

假设离散型软件的失效概率用符号p表示。由式(37),对于离散型软件来说,在有失 效的情况下,其引入测试有效性的失效概率p的概率密度函数为:

n表示测试用例数量。对于给定的可靠性验证指标(p0,C,r),p0为失效概率的指标值,C 为置信度,r为验证测试过程中允许的最大失效数。则由式(38)可以得到引入测试有效性 的离散型软件有失效可靠性验证测试方案所需的最小验证测试用例数N为满足下式中n的最 小值:

因此有,

当不考虑测试有效性对软件可靠性验证测试的影响时,对于离散型软件来说,在有失效 的情况下,其失效概率p的概率密度函数为:f(p)=β(1+r,1+n-r)(p)。对于相同的可靠性 验证指标(p0,C,r),所需的最小验证测试用例数N为满足下式中n的最小值:

Pr(pp0)=0p0f(p)dp=0p0β(1+r,1+n-r)(p)dpC---(44)

对比式(43)与(44)可看出,引入测试有效性的验证测试方案与不引入测试有效性的 方案的差别相当于是置信度发生了变化,前者为又由于即引入测试有效性的验证测试方案相当于把置信度降低了,所以其给 出的验证测试所需最小测试用例数目要比传统的不考虑测试有效性所给出的验证测试所需最 小测试用例数目少。

本发明提供的基于统计故障注入的统计测试用例集合测试有效性的估计原理为:

设Ω为所有程序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的频率,此频率可作为测试有效性的估计值。

当考虑有失效验证测试方案时,设容许的最大失效数为r,只需计算即可,具体参见 引入测试有效性的软件有失效可靠性验证测试方法。将通过统计故障注入技术得到的具有代 表性的变异版本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的频率,此频率可作为测试有效性的估计值。

本发明提供的基于统计故障注入的统计测试用例集合测试有效性的估计方法,如图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的平均值为并且Mi服从泊松分布。泊松分 布的参数而对于一个软件程序来说,其包含的平均缺陷数目可以根据程序的规模、 复杂度等所估计得到,比如,Akiyam模型给出一个缺陷数目预测公式:

M^=0.018*Loc+4.86(Loc为程序P源代码行数)    (45)

2)获得参数λ的估计值后,可以得到泊松分布的概率密度函数,具体如下:

Pr(Mi=k)=λkk!e-λ,k=0,1,2···---(46)

3)生成0-1之间的随机数序列η1,η2,...,ηj,...,那么并且满足的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,无失效验证测试方案下估计具体为:

利用测试集合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个变异程序都完成测试,则可得到测试有效性的估计式如下:

测试情况2,有失效验证测试方案下估计具体为:

设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的测试有效性估计为:

如果样本数量F足够大,根据大数定律,式(48)将会收敛到真实的测试有效性值。实 际中,要根据相关资源来确定F的取值。上述过程可以求出所有均估计值, 不过在本发明方法中只需估计出即可。

如图6所示,本发明提供的引入测试有效性的软件可靠性验证测试方法,整体包括如下 步骤:

步骤1、区分被测软件为离散型软件还是连续型软件。根据被测软件的类型选择对应的 验证测试方法。

本发明实施例仅以离散型软件为代表,分别进行软件无失效可靠性验证测试以及软件有 失效可靠性验证测试的方法说明。

步骤2、调入用户给定的验证指标,根据容忍的最大失效数r判断是无失效方案还是有失 效方案。当最大失效数r等于0时,采用无失效方案,当最大失效数r大于0时,采用有失 效方案。

步骤3、对于无失效方案,利用统计故障注入方法估计无失效情况下测试有效性对 于有失效方案,利用统计故障注入方法估计出测试有效性的值。

具体本发明实施例中,具有如下步骤:

步骤3.1、确定目标软件,构造缺陷池。具体为:依据基于统计故障注入的统计测试用 例集合测试有效性的估计方法的步骤一构造一个代表性的软件缺陷池。

步骤3.2、构造操作剖面,生成一个测试用例池。具体为:依据操作剖面构建方法构造 操作剖面,生成一个数量较少的测试用例池(依据软件的规模而定,通常用例数可以选择 50-1000)。

步骤3.3、依据统计故障注入方法构造变异程序P′的集合。具体为:依据基于统计故障 注入的统计测试用例集合测试有效性的估计方法的步骤二确定软件中包含的平均缺陷数目 依据式(46)确定泊松分布表达式;确定泊松分布抽样值Mi;从步骤一确定的软件缺 陷池中随机抽取Mi个缺陷注入到原程序P中,得到变异程序P′。重复上述过程,生成F个 变异程序P′。

步骤3.4、根据测试情况估计测试有效性值。具体为:按照基于统计故障注入的统计测 试用例集合测试有效性的估计方法的步骤三提供的方法估计无失效方案下的测试有效性或者估计有失效方案下的测试有效性

步骤4、给出引入测试有效性的软件可靠性验证测试方案。如果是连续型软件,则采用 引入测试有效性的连续型软件无失效可靠性验证测试方案以及引入测试有效性的连续型软件 有失效可靠性验证测试方案。本发明实施例是离散型软件,因此采用引入测试有效性的离散 型软件无失效可靠性验证测试方案以及引入测试有效性的离散型软件有失效可靠性验证测试 方案。

步骤5、根据被测软件特点和可靠性测试要求搭建可靠性测试环境。

步骤6、构造操作剖面,并根据步骤4确定的验证测试方案,生成相应数量的可靠性测 试用例。

步骤7、执行测试用例,并收集失效信息,即验证测试过程中的失效数。

步骤8、结合验证测试方案和实验结果,得到接收或拒收结论。

实施例:下面通过对西门子标准变异程序tcas进行实验来对本发明提供的引入测试有效 性的软件可靠性验证测试方法进行举例说明。

tcas软件的基本特征如表1所示:

表1西门子实验程序tcas基本特征

选取部分缺陷和部分用例分别作为本实验用的软件缺陷池以及测试用例池,分别用符号 Ep以及Tp进行表示,其中缺陷池包含缺陷34个,分别编号为V1-V34。测试用例池包含 测试用例870个,分别编号为t1-t870。然后为程序构造了15个变异程序P′,即F=15。 具体过程如下:

首先,根据程序规模采用Akiyama模型可知目标程序的平 均潜在缺陷数目则泊松分布概率密度函数为:其中 λ=7。

根据泊松分布抽样,利用matlab命令抽得15个泊松随机数,分别为3,6,4,7,5, 6,8,6,7,5,8,4,6,7,7。

依据抽得的泊松随机数,分别从缺陷池中用matlab命令随机抽取对应数目的缺陷构成 变异程序P′。得到的变异程序P′的集合如下表所示:

表2变异程序表

利用测试用例集合T对这15个变异程序进行测试,统计被检测出植入缺陷的变异程序Pi 的个数。再根据测试情况估计测试有效性,并改变测试用例集合的大小分别进行对比实验, 直至得到稳定的测试有效性估计值为止。测试用例集合T的测试用例数目分别取100,150, 200,250,300,350,400。在本实例中,考虑了无失效方案下以及有失效(失效数指标 为r=1)情况下的测试有效性估计值。因此,分别统计能检测出1次(含)以上缺陷的变异 程序数目K1与能够被检测出2次(含)以上缺陷的变异程序数目K2。测试结果以及测试有 效性估计值如下表所示:

表3测试结果记录

由表3可知,测试有效性的估计值都趋于稳定,如图7、图8所示。

根据表3所示的测试有效性的估计值,分别给出引入测试有效性的离散型软件无失效可 靠性验证测试方案以及引入测试有效性的离散型软件有失效(最大失效数为r=1)可靠性验 证测试方案。验证测试方案计算结果如表4所示:

表4引入测试有效性的西门子程序tcas验证测试最小量

表4中,NT表示考虑测试有效性时的验证测试最小量,N表示不考虑测试有效性时的验 证测试最小量,EF表示测试效率的提升程度。

从上面给出的引入测试有效性的软件可靠性验证测试方法的实例中可以看出,引入测试 有效性的软件可靠性验证测试方法确实利用更少的测试时间达到了同样的软件可靠性验证测 试目标,即实现了测试效率的提高,节省了测试资源。证明了本发明的可行性与有效性。

最后应说明的是:以上实施例仅用以说明本发明而并非限制本发明所描述的技术方案; 因此,尽管本说明书参照上述的各个实施例对本发明已进行了详细的说明,但是,本领域的 普通技术人员应该理解,仍然可以对本发明进行修改或等同替换;而一切不脱离本发明的精 神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号