基于组合测试的错误定位方法

文档序号:6551929阅读:126来源:国知局
基于组合测试的错误定位方法
【专利摘要】本发明提供一种基于组合测试的错误定位方法,该方法从输出端的结果入手,分析输出端的故障模式,结合apriori算法定位错误,提高了错误定位的定全率和定准率。作为软件测试中定位故障的方法,本发明保证了错误定位结果的准确性。比对已有技术具有以下一些特点和创新之处:在基于组合测试的错误定位方法中,对输出的故障模式进行扫描,找出出现最频繁的项集,经过重复扫描,生成可疑的故障模式集,提高软件错误定位的效率。
【专利说明】基于组合测试的错误定位方法

【技术领域】
[0001] 本发明涉及一种基于组合测试的错误定位方法,属于软件测试的错误定位领域。

【背景技术】
[0002] 软件系统可能会受到它的参数间相互作用的影响。这些相互作用需要进行测试, 以保证软件的质量。但对于有η个参数的待测系统,由于参数值的组合很多,我们不可能去 覆盖所有可能的η元组参数值的组合。组合测试则是在测试成本和组合覆盖度之间的一个 折衷方法。例如,2维组合测试要求覆盖所有的2元组合,在η元组合中则不是。
[0003] 在错误检测后,错误定位在软件质量保证中起到了一个重要的作用,它也需要去 协助软件调试。在交互错误定位阶段,基于从组合测试用例的执行中获取的信息,需要定位 导致故障的那些参数值得特定组合。然而,基于组合测试的交互错误定位技术很少被研究。 因此,需要进行研究来协助组合测试更广泛的应用。
[0004] 目前,人们关于组合测试的研究主要集中在组合覆盖测试用例的生成方面。Cohen 与Dalai等提出了一种基于两两组合覆盖的测试数据启发式生成方法,所产生的测试数据 可以根据测试要求实现对系统参数的两两组合覆盖,或者多个参数的组合覆盖。但这种方 法无法保证所产生的测试用例最优。Lei和Tai提出一种基于参数顺序的渐进扩充的两两 组合覆盖测试数据生成方法,在某些方面具有比较好的特性,同时,这种方法也有很大不足 之处。作为启发式方法的一种重要补充,Kobayashi和Tsuchiya等提出了一种代数方法用 于生成两两组合覆盖的测试数据,在某些情况下其效果要比启发式方法好。
[0005] Zeller提出了 Delta Debugging方法,是一种能自动缩小程序的成功运行过程和 失败运行过程之间区别的技术。在实现层面,它采用分治思想,把软件配置(测试输入、源 程序等)变动的集合进行划分,然后分别进行测试,结果可以为通过、失败和无解。然后递 归地把导致失败配置的集合并入结果为通过配置的集合。通过逐渐减小两个集合之间的差 异,最终确认成功配置和失败配置差别的一个最小子集。
[0006] 徐宝文等人首先假定"若某个模式是错误模式,则任意包含该模式的其它模式也 将引发相同的错误"。在此前提条件下,他们通过分析执行失败的测试用例,生成一批与之 类似的附加测试用例,并通过执行附加测试用例,逐步缩小故障模式集合Μ的范围,直到错 误被精确地定位。


【发明内容】

[0007] 本发明的目的是提出一种基于组合测试的错误定位方法,该方法结合了 apriori 算法,该算法能不断扫描故障模式集,找出出现频率最高的一个几个故障模式,最终达到软 件测试中错误定位的定全率和准确率的目标。
[0008] 本发明的技术解决方案是:
[0009] 一种基于组合测试的错误定位方法,
[0010] S1、获取可执行的待测系统以及测试用例集;
[0011] S2、运行测试用例,划分通过和失败的测试用例集,保留失败测试用例集用来定位 故障;
[0012] S3、生成失败附加测试用例集Tfail' ;
[0013] S4、合并所有失败测试用例的集合为Tf ;
[0014] S5、利用apriori算法找到Tf中的频繁项目集;
[0015] S6、故障定位结果的度量使用定全率和定准率两个指标,计算可以故障模式集合 中的定全率和定准率,判断是否达到100% :
[0016] 如果"是",转步骤S7 ;如果否,则跳转步骤S3 ;
[0017] S7、频繁项目集即为错误定位的结果,结束。
[0018] 进一步地,步骤S1具体为:
[0019] S11、获取待测系统SUT ;
[0020] S12、待测系统SUT有η个参数f\,f2, . . .,fn,形成集合F = {f\,f2, . . .,fn},形成该 因素的取值集合\ = {1,2, . . .,aj ;
[0021] S13、获取测试用例集,记为T ;
[0022] S14、对Τ中的测试用例进行编号,按序编为test" test2, . . .,testy . . .,testn,其 中 test = {vd v2, · · ·,vj h e ν1; v2 e V2, · · ·,Vn e Vn)表示测试用例集 T 中的第 i 条测 试用例,n为测试用例的总条数。
[0023] 进一步地,步骤S2具体为:
[0024] S21、从测试用例集中选取测试用例testi ;
[0025] S22、运行当前选取的测试用例testi ;
[0026] S23、判断测试用例的通过情况;
[0027] S231、判定测试用例test是否通过,如果"是",则转S232,否则转S233 ;
[0028] S232、将测试用例test放入集合Tpass ;
[0029] S233、将测试用例test放入集合Tfail ;
[0030] S234、判定待测系统SUT是否执行结束,如果"是",则转S235,否则转S21,直到T 中的测试用例均被待测系统SUT检测;
[0031] S235、获取集合Tfail,Tfail为所有失败测试用例的集合。
[0032] 进一步地,步骤S3具体为:
[0033] S31、从Tfail中选取测试用例testi ;
[0034] S32、获取附加测试用例集Τ' ;
[0035] S33、从Τ'中选取测试用例test/ ;
[0036] S34、运行当前选取的测试用例test/ ;
[0037] S35、判断测试用例的通过情况;
[0038] S351、判定测试用例test/是否通过,如果"是",则转S352,否则转S353 ;
[0039] S352、将测试用例test/放入集合Tpass' ;
[0040] S353、将测试用例test/放入集合Tfail' ;
[0041] S354、判定待测系统SUT是否执行结束,如果"是",则转S355,否则转S33,直到 Tfail'中的测试用例均被待测系统SUT检测;
[0042] S355、获取集合Tfail',Tfail'为所有失败附加测试用例的集合。
[0043] 进一步地,步骤S31具体为:
[0044] S311、改变其中一项V/A (k=l)啲值,生成新的测试用例test/ ;
[0045] S312、将test/放入附加测试用例集Τ'中;
[0046] S313、判断是否有k = η,如果"是",则转S31,k = k+Ι,否则转S311 ;
[0047] S314、判断Tfail中的测试用例test是否都被选取,如果"是",则转S32,否则转 S31。
[0048] 进一步地,步骤S5具体为:
[0049] S51、算法开始;
[0050] S52、设定最小支持度为2 ;
[0051] S53、扫描集合Tf,对每个项Vi进行计数;
[0052] S54、生成1阶候选项目集,k = 1 ;
[0053] S55、由保留的项Vi生成1阶频繁项目集,k = 1 ;
[0054] S56、扫描集合Tf,对(V 4)计数;
[0055] S57、生成2阶候选项目集,k = 2 ;
[0056] S58、由保留的项(v;l,ν?:)生成2阶频繁项目集,k = 2 ;
[0057] S59、扫描 Tf,k = k+1,对(%,ν?:,…,' )计数;
[0058] S510、生成k阶候选项目集;
[0059] S511、由保留的项(V,.,,\,…,\ )生成k阶频繁项目集;
[0060] S512、判断k阶频繁项目集的每个项(ν;1,ν(· :,…,)计数是否大于最小支持度2,如 果"是",则转S513,否则转S59 ;
[0061] S513、算法结束;
[0062] 进一步地,步骤S54具体为:
[0063] S541、从1阶候选项目集中选取项Vi ;
[0064] S542、判断Vi的计数是否大于最小支持度2,如果"是",则转S543,否则转S544 ;
[0065] S543、保留该项 vi;
[0066] S544、删除计数不大于2的项;
[0067] S545、判断是否扫描1阶候选项目集中所有项Vi,如果"是",则转S55,否则转 S541。
[0068] 进一步地,步骤S57具体为:
[0069] S571、从2阶候选项目集中选取项(?2);
[0070] S572、判断(W的计数是否大于最小支持度2,如果"是",则转S573,否则转 S574 ;
[0071] 3573、保留该项(^2);
[0072] S574、删除计数不大于2的项;
[0073] S575、判断是否扫描1阶候选项目集中所有项(? ),如果"是",则转S58,否则转 S571。
[0074] 进一步地,步骤S510具体为:
[0075] S5101、从k阶候选项目集中选取项(',v,:,…,ν4 );
[0076] 35102、判断〇,1,圪,?,1\)计数是否大于最小支持度2,如果"是",则转55103,否则 转 S5104 ;
[0077] S5103、保留该项(',ν,:,…,v;i);
[0078] S5104、删除计数不大于2的项;
[0079] S5105、判断是否扫描1阶候选项目集中所有项(ν;1,ν?2,…,ν4),如果"是",则转 S511,否则转 S5101。
[0080] 本发明的有益效果是:作为软件测试中定位故障的方法,本发明保证了错误定位 结果的准确性。比对已有技术具有以下一些特点和创新之处:在基于组合测试的错误定位 方法中,对输出的故障模式进行扫描,找出出现最频繁的项集,经过重复扫描,生成可疑的 故障模式集,提高软件错误定位的效率。

【专利附图】

【附图说明】
[0081] 图1是实施例方法错误定位的流程图。
[0082] 图2是apriori算法流程图。
[0083] 图3是利用apriori算法找到故障模式中的频繁项集流程图。

【具体实施方式】
[0084] 下面结合附图详细说明本发明的优选实施例。
[0085] 在充分考虑保证生成结果最优的基础上,提出了一种新的关于两两组合覆盖的测 试数据生成算法。实施例方法主要是在现有理论的基础上,分析输出端的故障模式集,结合 apriori算法,找到可疑故障模式集合来定位错误,最终提高错误定位的定全率和准确率。 Apriori算法是一种挖掘关联规则的频繁项集算法,如图2所示。
[0086] 实施例的该种基于组合测试的错误定位方法,从输出端的结果入手,分析输出端 的故障模式,结合apriori算法定位错误,提高了错误定位的定全率和定准率。在极小故障 模式模型中,认为软件错误是由极小故障模式所引发的,这一模式必然被包含在一条运行 失败的测试用例中。因此,组合测试故障的定位目标就在于寻找这样的极小故障模式,或是 将这样的极小故障模式确定在一个比较小的、可供人工筛选的范围内。在进行组合测试的 故障定位时,可以考虑综合使用DeltaDebuging和NearestNeighborHeuristic策略,即生 成并运行一些与失败测试用例近似的附加测试用例,以寻找错误出现的规律,进而定位诱 发错误的极小故障模式。结合apriori算法,不断扫描故障模式集,找出出现频率最高的一 个或几个故障模式,提高了错误定位的定准率和定全率。
[0087] 实施例基于组合测试,结合apriori算法,从开始选取测试用例到最终定位故障 的实现步骤为,如图1所示:
[0088] 步骤1)获取可执行的待测系统以及测试用例集;
[0089] 步骤1. 1)获取待测系统SUT,其中引起故障的参数组合已知;
[0090] 步骤 1. 2)待测系统 SUT 有 η 个参数 f\,f2, . . .,fn,形成集合 F = {f\,f2, . . .,fn}, 其中因素 fi经过等价类划分等前期处理后包含%个可选取值,形成该因素的取值集合\ = {1,2,· · ·,£1土};
[0091] 步骤1. 3)获取测试用例集,记为T,测试用例按照特定的规则利用测试工具自动 生成;
[0092] 步骤1.4)对T中的测试用例进行编号,按序编为 testj, test2, . . . , testj, . . . , testn, 其中 t e s t j = {v 1; v2, . . . , vn} (Vl e %,v2 e V2,...,vn e Vn)表示测试用例集T中的第i条测试用例,n为测试用例的总 条数,对测试用例进行编号为查找失败测试用例提供便利。
[0093] 步骤2)运行测试用例,划分通过和失败的测试用例集,保留失败测试用例集用来 定位故障;
[0094] 步骤2. 1)根据测试用例的编号按序从T中选取测试用例testi ;
[0095] 步骤2. 2)通过待测系统SUT运行当前选取的测试用例test ;
[0096] 步骤2. 3)判断测试用例test的通过情况,根据结果划分为通过和失败两个测试 用例集,Tpass表示通过测试用例集,T fail表示失败测试用例集,保留Tfail来定位故障。
[0097] 步骤3)根据失败测试用例生成失败附加测试用例Tfail',增加失败的测试用例能 使错误定位更加准确;
[0098] 步骤3. 1)从Tfail*选取测试用例testp依次改变其中的一项,生成附加测试用例 集;
[0099] 步骤3. 2)获取附加测试用例集Τ',用待测系统SUT来运行Τ'中测试用例;
[0100] 步骤3. 3)从Τ'中选取测试用例test/ ;
[0101] 步骤3. 4)通过待测系统SUT运行当前选取的测试用例test/ ;
[0102] 步骤3. 5)判断测试用例test/的通过情况,根据结果划分为通过和失败两个测 试用例集,Tpass'表示通过测试用例集,T fail'表示失败测试用例集,保留Tfail'来定位故障, Tfail'就是失败附加测试用例集。
[0103] 步骤4)将所有失败测试用例和附加失败测试用例合并为集合Tf。
[0104] 步骤5)利用apriori算法找到Tf中的频繁项集,如图3所示,Apriori算法是一 种挖掘关联规则的频繁项集算法,通过该算法寻找失败测试用例集中出现最频繁的参数组 合,该参数组合则最有可能引起待测系统的故障;
[0105] 步骤5.1)算法开始;
[0106] 步骤5. 2) -般设定最小支持度为2 ;
[0107] 步骤5. 3)扫描集合Tf,对每条测试用例的每个项Vi进行计数;
[0108] 步骤5. 4)生成1阶候选项目集,比较每个项Vi的计数与最小支持度2的大小,删 除计数不大于2的项,即去除干扰项,方便找到频繁项;
[0109] 步骤5. 5)由保留的项Vi生成1阶频繁项目集,该集合中的每个项出现的次数均 大于2 ;
[0110] 步骤5. 6)扫描集合Tf,对(v;l,V,':)进行计数;
[0111] 步骤5. 7)生成2阶候选项目集,比较每个项〇V\)的计数与最小支持度2的大 小,删除计数不大于2的项;
[0112] 步骤5. 8)由保留的项(',化)生成2阶频繁项目集,该集合中的每个项出现的次数 均大于2 ;
[0113] 步骤5. 9)扫描Tf,k = k+Ι,对0^々,...,\)进行计数;
[0114] 步骤5. 10)生成k阶候选项目集,比较每个项,…,v4)的计数与最小支持度2 的大小,删除计数不大于2的项;
[0115] 步骤5. 11)由保留的项(^,一^4)生成让阶频繁项目集,该集合中的每个项出 现的次数均大于2 ;
[0116] 步骤5. 12)判断k阶频繁项目集的每个项0V4,…,ν?()计数是否大于最小支持度 2,如果"是",则转步骤5. 9,否则转步骤5. 13 ;
[0117] 步骤5. 13)当k阶频繁项目集中的每个项的计数均不大于最小支持度2的时候, 则停止apriori算法,得到的频繁项集就是失败测试用例集中T f的故障模式。算法结束。
[0118] 步骤6)故障定位结果的度量使用定全率(recall)和定准率(precision)等两个 指标。计算可以故障模式集合中的定全率和定准率,是否接近1〇〇 %,如果"是",则转步骤 7,否,跳转步骤3;
[0119] 定义:假设MinFaultScheSetO为待测系统中客观存在且已被测试用例集T所命中 的极小故障模式构成的集合,FaultScheSetO为待测系统中客观存在且已被测试用例集T 所命中的故障模式构成的集合,SuspScheSet为故障定位所得的嫌疑模式集合,贝U

【权利要求】
1. 一种基于组合测试的错误定位方法,其特征在于: 51、 获取可执行的待测系统以及测试用例集; 52、 运行测试用例,划分通过和失败的测试用例集,保留失败测试用例集用来定位故 障; 53、 生成失败附加测试用例集Tfail' ; 54、 合并所有失败测试用例的集合为Tf ; 55、 利用apriori算法找到Tf中的频繁项目集; 56、 故障定位结果的度量使用定全率和定准率两个指标,计算可以故障模式集合中的 定全率和定准率,判断是否达到100% : 如果"是",转步骤S7 ;如果否,则跳转步骤S3 ; 57、 频繁项目集即为错误定位的结果,结束。
2. 如权利要求1所述的基于组合测试的错误定位方法,其特征在于,步骤S1具体为: 511、 获取待测系统SUT ; 512、 待测系统SUT有η个参数f\,f2,. . .,fn,形成集合F = {f\,f2,. . .,fn},形成该因素 的取值集合 Vi = {l,2,...,ai}; 513、 获取测试用例集,记为T ; 514、 对Τ中的测试用例进行编号,按序编为test。test2, . . .,testy . . .,testn,其中 test = {vd v2, · · ·,vn} h e ν1; v2 e V2, · · ·,Vn e Vn)表示测试用例集 T 中的第 i 条测试 用例,n为测试用例的总条数。
3. 如权利要求2所述的基于组合测试的错误定位方法,其特征在于,步骤S2具体为: 521、 从测试用例集中选取测试用例test ; 522、 运行当前选取的测试用例test ; 523、 判断测试用例的通过情况; 5231、 判定测试用例test是否通过,如果"是",转S232,否则转S233 ; 5232、 将测试用例test放入集合Tpass ; 5233、 将测试用例test放入集合Tfail ; 5234、 判定待测系统SUT是否执行结束,如果"是",则转S235,否则转S21,直到T中的 测试用例均被待测系统SUT检测; 5235、 获取集合Tfail,Tfail为所有失败测试用例的集合。
4. 如权利要求3所述的基于组合测试的错误定位方法,其特征在于,步骤S3具体为: 531、 从Tfail中选取测试用例test ; 532、 获取附加测试用例集Τ' ; 533、 从Τ'中选取测试用例test/ ; 534、 运行当前选取的测试用例test/ ; 535、 判断测试用例的通过情况; 5351、 判定测试用例test/是否通过,如果"是",则转S352,否则转S353 ; 5352、 将测试用例test/放入集合Tpass' ; 5353、 将测试用例test/放入集合Tfail' ; 5354、 判定待测系统SUT是否执行结束,如果"是",则转S355,否则转S33,直到Tfail'中 的测试用例均被待测系统SUT检测; S355、获取集合Tfail',Tfail'为所有失败附加测试用例的集合。
5. 如权利要求4所述的基于组合测试的错误定位方法,其特征在于,步骤S31具体为: 5311、 改变其中一项\ (1<=1)的值,生成新的测试用例test/ ; 5312、 将test/放入附加测试用例集Τ'中; 5313、 判断是否有k = η,如果"是",则转S31,k = k+Ι,否则转S311 ; 5314、 判断Tfail中的测试用例test是否都被选取,如果"是",则转S32,否则转S31。
6. 如权利要求1-5任一项所述的基于组合测试的错误定位方法,其特征在于,步骤S5 具体为: 551、 算法开始; 552、 设定最小支持度为2 ; 553、 扫描集合Tf,对每个项Vi进行计数; 554、 生成1阶候选项目集,k = 1 ; 555、 由保留的项Vi生成1阶频繁项目集,k = 1 ; 556、 扫描集合Tf,对〇VV,2)计数; 557、 生成2阶候选项目集,k = 2 ; 558、 由保留的项(?)生成2阶频繁项目集,k = 2 ; 559、 扫描 Tf,k = k+1,对(?,…,& )计数; 5510、 生成k阶候选项目集; 5511、 由保留的项(V,.,, ν?2,…,\ )生成k阶频繁项目集; 5512、 判断k阶频繁项目集的每个项)计数是否大于最小支持度2,如果 "是",则转S513,否则转S59 ; 5513、 算法结束。
7. 如权利要求6所述的基于组合测试的错误定位方法,其特征在于,步骤S54具体为: 5541、 从1阶候选项目集中选取项Vi ; 5542、 判断Vi的计数是否大于最小支持度2,如果"是",则转S543,否则转S544 ; 5543、 保留该项Vi ; 5544、 删除计数不大于2的项; 5545、 判断是否扫描1阶候选项目集中所有项Vi,如果"是",则转S55,否则转S541。
8. 如权利要求6所述的基于组合测试的错误定位方法,其特征在于,步骤S57具体为: 5571、 从2阶候选项目集中选取项(',' ); 5572、 判断(νΑ,ν?:)的计数是否大于最小支持度2,如果"是",则转S573,否则转S574 ; 3573、保留该项(',4); 5574、 删除计数不大于2的项; 5575、 判断是否扫描1阶候选项目集中所有项(νΑ, ν,:),如果"是",则转S58,否则转 S571。
9.如权利要求6所述的基于组合测试的错误定位方法,其特征在于,步骤S510具体 为: 55101、 从k阶候选项目集中选取项(',v,:,…,\ ); 55102、 判断(vA,圪,…,)计数是否大于最小支持度2,如果"是",则转S5103,否则转 S5104 ; 55103、 保留该项; 55104、 删除计数不大于2的项; 55105、 判断是否扫描1阶候选项目集中所有项(',…,),如果"是",则转S511,否 则转S5101。
【文档编号】G06F11/36GK104050086SQ201410310475
【公开日】2014年9月17日 申请日期:2014年7月1日 优先权日:2014年7月1日
【发明者】张卫丰, 陆子南, 王云, 王子元 申请人:南京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1