[发明专利]基于程序控制依赖引导的回归测试案例生成方法有效
申请号: | 201310362303.3 | 申请日: | 2013-08-19 |
公开(公告)号: | CN103455421A | 公开(公告)日: | 2013-12-18 |
发明(设计)人: | 郑庆华;刘烃;王海军;俞乐晨;黄小龙 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 蔡和平 |
地址: | 710049 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 程序控制 依赖 引导 回归 测试 案例 生成 方法 | ||
1.基于程序控制依赖引导的回归测试案例生成方法,其特征在于,包括如下步骤:
S101)、利用程序静态分析方法,分析测试程序的控制流和信息流,建立测试程序的控制依赖图;
S102)、针对输入的测试程序的目标代码,根据步骤S101)中建立的控制依赖图中计算各个分支的到达概率;
S103)、采用基于分支到达概率引导的约束生成算法,迭代搜索和取反测试案例执行路径上到达概率最大的分支条件,生成新的约束,利用符号执行方法进行求解,若可以生成一个执行目标代码的测试案例,转入步骤S104);若无法生成测试案例可以执行目标代码,则表示测试目标代码在程序中不会被执行,转入步骤S107);
S104)、针对测试程序的目标代码,根据程序信息流,检测各个分支语句是否阻断目标代码执行结果对程序输出的影响,若改变则标记为阻断分支;然后,计算各个分支的阻断概率;
S105)、采用基于分支阻断概率引导的约束生成算法,迭代搜索和取反测试案例执行路径上阻断概率最小的分支条件,生成新的约束,利用符号执行方法进行求解,若可以生成一个测试案例保证目标代码执行结果影响输出,转入步骤S106);若无法生成测试案例,转入步骤S103);
S106)输出有效测试案例,流程结束;所述有效测试案例是指该测试案例可以保证测试目标代码被执行,且执行结果影响程序输出结果;
S107)针对输出测试程序和测试目标代码,无法生成有效测试案例。
2.根据权利要求1所述方法,其特征在于,步骤S103)中所述分支到达概率为:对于某一个分支,从该分支到目标代码,所需要经过的最少依赖分支数目的倒数。
3.根据权利要求1所述方法,其特征在于,步骤S103)中所述基于分支到达概率引导的约束生成算法具体包括:
S1031)、执行测试案例,第一次执行初始测试案例;从第二次开始执行上一周期步骤S10310)生成的测试案例;
S1032)、检查目标代码是否被执行;如果测试案例能执行到期望执行的目标代码,则转至步骤S10312);如果测试案例不能执行到目标代码,则转至步骤S1033);
S1033)、检查执行路径上是否有可取反的分支,如果有,则转至步骤S1034);如果没有,则转至步骤S1035);
S1034)、取反所有可取反的分支来生成一系列待扩展路径片段,并将待扩展路径片段最后一个分支的分支到达概率值作为该路径片段能覆盖目标代码的概率,存入第一未探测集合中;
S1035)、未探测集合是否为空,若为空,转至步骤S10311),若不为空,转至步骤S10316);
S1036)、从第一未探测集合中选择一条概率最大的待扩展路径片段,基于此路径片段进行符号执行;
S1037)、符号执行该路径片段,并记录路径约束Cnew;
S1038)、利用约束求解器求解Cnew,若可解,则转至步骤S10310);若不可解,则转至步骤S1039);
S1039)、废弃该路径片段,同时跳转至步骤S1033);
S10310)、生成新的测试案例Tnew,然后跳转至步骤S1031);
S10311)、无有效测试案例输出;
S10312)、输出该能执行到期望执行的目标代码的有效测试案例。
4.根据权利要求1所述方法,其特征在于,步骤S104)中所述阻断分支为目标代码执行后,导致目标代码执行结果无法传递到输出语句的分支。
5.根据权利要求1所述方法,其特征在于,步骤S104)中所述分支阻断概率为:对于在目标代码之后执行的某一个分支,执行该分支后将会执行阻断分支的概率;取值范围为0%-100%。
6.根据权利要求1或5所述方法,其特征在于,分支阻断概率的计算公式为:
BP=1–Nb/Np
其中分支阻断概率的计算方法包括:首先将待测程序的所有分支分为Ep,Eb两个集合,Ep为所有分支的集合,Eb为阻断分支的集合;对于某一个分支,从两个集合中选择子集Ep’,Eb’,分别表示在该分支之后执行的所有分支和所有阻断分支,然后基于Ep’,Eb’构建可能的执行路径;Np为基于Ep’构建的路径数,Nb为基于Eb’构建的路径数;得到Nb,Np后代入公式即可得到某一分支的分支阻断概率值BP。
7.根据权利要求1所述方法,其特征在于,步骤S105)中所述基于分支阻断概率引导的约束生成算法包括:
S1051)、执行测试案例;第一次执行步骤S103)的步骤S10312)生成的有效测试案例,从第二次开始执行上一周期步骤S10510)生成的测试案例;
S1052)、检查目标代码执行结果是否传递到输出语句:如果目标代码执行结果传递到了输出语句,则转至步骤S10512);否则,则转至步骤S1053);
S1053)、检查执行路径上是否有可取反的分支,如果有,则转至步骤S1054);如果没有,则转至步骤S1055);
S1054)、取反所有可取反的分支来生成一系列待扩展路径片段,并将待扩展路径片段最后一个分支的分支阻断概率值作为该路径片段将执行阻断分支的概率值,存入第二未探测集合中;
S1055)、第二未探测集合是否为空,若为空,转至步骤S10511;若不为空,转至步骤S1056);
S1056)、从第二未探测集合中选择一条阻断概率最小的待扩展路径片段,基于此路径片段进行符号执行;
S1057)、符号执行该路径片段,并记录路径约束Cnew;
S1058)、利用约束求解器求解Cnew,若可解,则转至步骤S10510);若不可解,则转至步骤S1059);
S1059)、废弃该路径片段,跳转至步骤S1053);
S10510)、生成新的测试案例Tnew,然后跳转至步骤S1051);
S10511)、无有效测试案例输出;
S10512)输出该能执行到期望执行的目标代码,且执行结果影响程序输出结果的有效测试案例。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310362303.3/1.html,转载请声明来源钻瓜专利网。