一种支持约束的组合测试故障定位方法与流程

文档序号:16327852发布日期:2018-12-19 06:01阅读:150来源:国知局
一种支持约束的组合测试故障定位方法与流程

本发明属于软件测试技术领域,具体涉及一种支持约束的组合测试故障定位方法。

背景技术

软件测试发现了故障后,开发人员需要找出引起故障的原因所在,即进行软件故障定位,然后通过故障定位的结果,开发人员就可以深入到代码内部进行故障修复。

在软件组合测试中,通常假设各输入参数的取值是互不影响的,但在实际软件系统中,普遍存在参数约束的现象,这将导致某些参数取值组合或输入顺序没有意义甚至无效,而传统的软件组合测试故障定位方法研究要么基于软件的内部结构信息,要么基于软件重新运行,并没有考虑组合测试中参数约束限制对故障定位的影响。



技术实现要素:

本发明的目的是为解决传统的软件组合测试故障定位方法存在的未考虑组合测试中参数约束限制对故障定位的影响的问题。

本发明为解决上述技术问题采取的技术方案是:

一种支持约束的组合测试故障定位方法,该方法的具体步骤为:

步骤一、执行待测系统的全部测试用例,根据全部测试用例的执行结果获取正确测试用例集和错误测试用例集;

步骤二、根据待测系统的安全值和约束集,来判断待测系统是否存在独立性安全值;

步骤三、若步骤二判断待测系统存在独立性安全值,则直接利用待测系统的独立性安全值进行组合测试故障定位;

步骤四、若步骤二判断待测系统不存在独立性安全值,则执行分析步骤一获得的错误测试用例,来进行组合测试故障定位;

本发明的有益效果是:本发明提供了一种支持约束的组合测试故障定位方法,本发明首先根据全部测试用例的执行结果获取系统的错误测试用例,然后判断待测系统是否存在独立性安全值,最后根据独立性安全值的判断结果来进行组合测试故障定位;与传统的组合测试故障定位方法相比,本发明的故障定位方法考虑了组合测试中参数约束限制对故障定位的影响,因此,本发明方法的适用范围更广、实用性更强,克服了现有技术的局限。

本发明的方法对软件系统的组合测试故障定位起到很好的作用。

附图说明

图1为本发明所述的一种支持约束的组合测试故障定位方法的主流程图;

图2为本发明所述的一种支持约束的组合测试故障定位方法的执行分析一条错误测试用例的流程图;

图3为两种不同类型的错误交互的示意图;

图4为本发明实施例的系统参数个数与最大确定约束数目的关系曲线;

图5为本发明实施例的系统参数的取值个数与最大确定约束数目的关系曲线。

具体实施方式

下面结合附图对本发明的技术方案作进一步的说明,但并不局限于此,凡是对本发明技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的保护范围中。

具体实施方式一:结合图1说明本实施方式。本实施方式所述的一种支持约束的组合测试故障定位方法,该方法的具体步骤为:

步骤一、执行待测系统的全部测试用例,根据全部测试用例的执行结果获取正确测试用例集和错误测试用例集;

步骤二、根据待测系统的安全值和约束集,来判断待测系统是否存在独立性安全值;

步骤三、若步骤二判断待测系统存在独立性安全值,则直接利用待测系统的独立性安全值进行组合测试故障定位;

步骤四、若步骤二判断待测系统不存在独立性安全值,则执行分析步骤一获得的错误测试用例,来进行组合测试故障定位。

具体实施方式二:本实施方式对实施方式一所述的一种支持约束的组合测试故障定位方法进行进一步的限定,所述步骤二的具体过程为

待测系统的安全值的定义为:若待测系统中的错误交互集为π,且对于待测系统中任意一个参数i,i∈[1,k],均存在顶点(i,si),使得(i,si)没有被包含在错误交互集π的任何错误交互中,则称si为参数i的安全点,称待测系统各参数的安全点组成的向量(s1,s2,…,sk)为该待测系统的安全值,其中:k是待测系统中参数的个数;

对于待测系统中的一个参数来说,安全点的个数可以不止一个。

待测系统的约束集的定义为:在一个待测系统中,若某些参数的取值组合使得测试数据无效或者影响软件正常运行,则称这些参数之间存在约束,用记号c来表示,这些参数称为约束因素,参数的相应取值称为约束点,系统中全部约束构成的集合称为约束集,约束集用cs来表示;

根据待测系统的安全值和约束集判断待测系统是否存在独立性安全值的过程为:

独立性安全值的定义为:对于待测系统中的任意参数i,若参数i的安全点组成的集合为约束集为cs,令存在不为空,则将集合称为待测系统的独立性安全值;其中:为中间变量。

为详细说明安全值的概念,以具有三个输入参数的待测系统为例,每个输入参数具有0、1、2三个取值。如图3所示,图中连线部分表示该待测系统错误交互,类型1中错误交互为{{(2,0),(3,0)},{(2,1),(3,0)}},其代表因素2取值为0且因素3取值为0、因素2取值为1且因素3取值为0两个错误交互;类型2中错误交互为{{(2,0),(3,0)},{(2,1),(3,0)},{(1,0),(2,2)}}。图中,类型1中因素1的任何取值都不包含在错误交互中,因素2取值为2时不被任何错误交互覆盖,因素3取值为1或2时不被任何错误交互覆盖,此时,该系统安全值即为s=(s1,s2,s3),各安全点取值分别为s1={1,2,3},s2={2},s3={1,2},类型2中因素2的任何取值均被错误交互覆盖,此时,该参数不存在安全点,系统不存在安全值。

错误交互集为π的定义为:若待测系统存在某一交互i,使得对于任意覆盖该交互的测试用例均引发软件故障,则称i为一个错误交互。若对于错误交互i,其任意真子集都不是错误交互,则称i为系统的极小错误交互。

系统所有极小错误交互组成的集合称为极小错误交互集,用π来表示。如果π中每个错误交互均有t个元素,则记为πt;如果π中每个错误交互至多有t个元素,则记为πt。若不特殊说明,本文提到的错误交互集均指极小错误交互集。如果测试用例t没有覆盖π中的任何错误交互,则称该测试用例避开了π。

具体实施方式三:本实施方式对实施方式二所述的一种支持约束的组合测试故障定位方法进行进一步的限定,本实施方式中的所述步骤三的具体过程为:

若步骤二中判断待测系统存在独立性安全值,则利用故障调试算法或自适应算法来进行组合测试故障定位分析。

本领域的常用组合测试故障定位方法均可应用于本实施方式的组合测试故障定位。

具体实施方式四:结合图1和图2说明本实施方式。本实施方式对实施方式三所述的一种支持约束的组合测试故障定位方法进行进一步的限定,本实施方式中的步骤四的具体过程为:

若步骤二判断待测系统不存在独立性安全值,则选取步骤一获得的错误测试用例集中任一错误测试用例t1作为当前错误用例t,执行分析当前错误用例t;执行分析的具体过程如下:

步骤四一、初始化当前错误用例t对应的非安全点参数集a,判断集合a中的参数个数是否小于等于极小错误交互力度t;

若集合a中的参数个数小于等于极小错误交互力度t,则利用相对应的安全点替换集合a中的非安全点参数,以定位极小错误交互;

若集合a中的参数个数大于极小错误交互力度t,则将集合a中的参数划分到t+1个集合中,分别记为集合a1、a2、…,at+1;选取每一个集合aj,j=1,2,…,t+1,判断集合aj中的参数是否都存在独立性安全点;

步骤四二、独立性安全点的定义为:对于待测系统的一个m维交互i,集合ei={i1,i2,…,im}为交互i对应的参数集,i1,i2,…,im分别为交互i中的参数,待测系统约束集为cs,对于待测系统中任一参数il,假设参数il的安全点集合为若存在顶点使得对于交互i中任意m-1个参数与构成的m维交互均避开待测系统的约束集cs中所有约束,则称为参数il相对于交互i的独立性安全点;

若集合aj中每个参数都存在独立性安全点,则利用独立性安全点替换集合aj中对应参数,生成附加测试用例t′;

若集合aj中包含不存在独立性安全点的参数,则获得不存在独立性安全点参数的局部安全点,

局部安全点的定义为:对于给定的m维交互i,对于待测系统中某一参数i∈[1,k],若存在顶点(i,psi),使得顶点(i,psi)与交互i中任意m-1个参数构成的m维交互均不会引发待测系统故障,则称psi为参数i相对于m维交互i的局部安全点;利用独立性安全点和局部安全点替换集合aj中对应参数,生成附加测试用例t′;

步骤四三、执行步骤四二生成的附加测试用例t′,判断附加测试用例t′是否发生触发错误;

若发生触发错误,则将附加测试用例t′赋给当前错误用例t;

若未发生触发错误,则选择步骤一获得的、除t1外的错误测试用例中任一错误测试用例t2,将错误测试用例t2赋给当前错误用例t;

按照上述过程来执行分析当前错误用例t;直至步骤一获取的所有错误测试用例执行分析完成,定位出极小错误交互,即完成组合测试故障的定位。

非安全点因素集a是指:集合a中因素的取值为对应因素的非安全点。

若待测系统不存在独立性安全值,则需要进一步约束处理。

选取一条引发软件故障的测试用例t,故障分析过程中首先会初始化该用例对应的非安全值因素集;

然后将该集合划分成近似相等的t+1个集合。对于每一个因素集,首先获取其独立性安全点,对于不能获得独立性安全点的因素,利用可能错误交互集求取局部安全点。

其中要注意以下两点:分组过程中应将不具备独立性安全点的因素尽可能的分散到不同的分组中,这样可以减小每次替换时非独立性安全点的数目,同时更容易获得局部安全点;求取局部安全点的过程中,如果需要求得局部安全点的因素数不大于交互力度,则直接利用系统已知正确交互获取,否则,需要考虑已求得的局部安全点的影响。之后,将测试用例t在对应位置上进行安全值替换,生成附加测试用例。如果附加测试用例没有触发故障,则排除该用例中非安全值因素集为故障的可能,继续分析下一条测试用例;反之,则将附加测试用例赋给t,继续分析,直到非安全值因素集个数小于交互力度,得到最小错误交互。

利用独立性安全点或利用独立性安全点和局部安全点替换非安全值因素的过程为:对于一个非安全值因素集合a,a中的因素为{i1,i2,…,it},我们可以利用it的独立性安全点或局部安全点来替换it在集合a中的值,以判断集合a中{i1,i2,…,it-1}是否引发软件故障;以此类推,利用更多参数的独立性安全点或局部安全点来替换对应参数在集合a中的值,。

交互的定义为:设集合其中:因素ij互不相同,则称这个集合i为一个t维交互,称集合ei={i1,i2,…,it}为交互i对应的因素集。一维交互也称为顶点,简记为

实施例

为说明本文算法在具有系统约束的安全值已知系统中故障定位效果,首先选取具有五个参数的待测系统为例,五个参数分别用{a,b,c,d,e}来表示,各个参数取值如下:

a={a0,a1};b={b0,b1,b2};c={c0,c1};d={d0,d1,d2};e={e0,e1,e2,e3};

系统约束为{(b0,d1),(a1,e3),(b2,e2),(c0,d1)};错误交互{(a1,d2),(b2,e3)};

假设系统安全值已知,为{a0,b0,c0,d0,e0},对于该待测系统,会生成十几条测试用例,在这里选取触发系统故障的一条测试用例,比如{a0,b2,c1,d1,e3},来说明在上述系统约束下,如何定位错误交互(b2,e3)。

在参数两两组合的情况下,针对五个参数的待测系统,可以采用1+2+2的分组策略,分别对每组进行安全值替换之后得到三条附加测试用例,分别是:

addtest11={a0,b2,c1,d0,e0}

addtest12={a0,b0,c0,d1,e3}

addtest13={a0,b2,c1,d1,e3}

其中,addtest12引进约束,直接进行附加用例测试会导致用例无效,因此需要进行约束处理。首先判断是由于b和c的安全值替换导致引进约束,并且这两个参数只有取值为0的一个安全点,即不存在独立性安全点,所以需要分别求取其局部安全点。对于参数b,由于addtest12中参数a为安全值,首先获取与a0不构成约束的参数b的取值集合,应该为{b1,b2},然后根据初始阶段测试用例的执行结果会得到一组规模较大的正确交互集,(b1,d1)、(b1,e3)均出现在正确交互集中,因此得到参数b的局部安全点为b1;接下来求取参数c的局部安全点,同样首先获得与a0不构成约束的参数c的取值集合,然后利用正确交互集获得与b1,d1,e3均构成正确交互的参数c的取值为c1,由此得到一条支持约束的附加测试用例addtest120={a0,b1,c1,d1,e3}。根据用例addtest120的执行结果,可以获得无约束情况下用例addtest12相同的定位结论,即通过测试,则说明(d1,e3)为正确交互。

执行addtest13出发故障,说明{b2,c1,d1,e3}中包含错误交互,继续进行分组,得到如下附加测试用例:

addtest21={a0,b0,c1,d1,e3}

addtest22={a0,b2,c0,d1,e3}

addtest23={a0,b2,c1,d0,e0}

其中,addtest21引进约束,将参数b替换为局部安全点b1,执行结果正确,说明{c1,d1,e3}中不含错误交互;addtest22同样引进约束,将参数c替换为局部安全点c1,执行结果错误,说明错误交互出现在{b2,d1,e3}中,由于之前均证明(d1,e3)、(b2,d1)为正确交互,因此可以得到该用例中的最小错误交互即为(b2,e3)。

为说明上述算法的定位性能以及所使用的系统范围,在固定系统错误交互数目的情况下,不断增加系统约束数目进行实验,并对每一数目的约束,均尝试不同的约束组合多次实验并统计分析,获得该系统中能够实现定位的最大确定约束数(当系统约束数目不大于此值时,一定能实现准确定位;而当系统约束数目大于此值时,不一定能实现准确定位,这与具体约束有关),所得结果如表1所示,为固定错误交互时,典型系统中能够定位的最大约束数。

表1

为进一步说明系统支持的最大确定约束数目与系统规模的关系,分别从系统参数个数和各参数取值个数两个方面进行实验分析。首先,在固定系统每个参数取值个数为10的情况下,不断增加参数个数进行多次实验并统计,所得结果如图4所示;其次,在固定参数个数为10的情况下,不断增加每个参数的取值个数进行多次实验并统计,所得结果如图5所示。

固定参数取值个数,支持定位的最大确定约束数随系统参数个数的增加而减小。这是因为,参数个数的增加导致组合测试需要覆盖的交互数目迅速增加,同时测试用例数目也增加,但测试用例的增长速度低于所需交互增长速度。在错误交互一定的条件下,导致可能错误交互集规模庞大,相应的可以加以利用的正确交互集规模相对较小,一定程度上限制了局部安全点的获取,从而使得最大确定约束数减小。

固定系统参数个数,支持约束的最大确定约束数随系统参数取值个数的增加而增加。虽然参数取值个数的增加同样会使所需覆盖的交互数目增加,但参数取值的多样化将更大程度上扩大避免约束的参数取值范围,更容易获取局部约束点,从而使得最大确定约束数增加。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1