[发明专利]一种结合静态依赖和动态执行规则的测试用例选择方法有效
申请号: | 201910654983.3 | 申请日: | 2019-07-19 |
公开(公告)号: | CN110554954B | 公开(公告)日: | 2020-12-01 |
发明(设计)人: | 李英玲;王俊杰;王青 | 申请(专利权)人: | 中国科学院软件研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京君尚知识产权代理有限公司 11200 | 代理人: | 陈艳 |
地址: | 100190 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 结合 静态 依赖 动态 执行 规则 测试 选择 方法 | ||
1.一种结合静态依赖和动态执行规则的测试用例选择方法,包括以下步骤:
定位提交代码中的更改方法,得到集成版本的更改方法集;
对源码进行静态分析,得到继承依赖和直接调用依赖关系,利用继承依赖和直接调用依赖关系推导得出构造函数之间的隐式调用依赖关系,根据父类与子类之间的隐式调用关系建立父类与子类之间的隐式调用依赖关系,根据该继承依赖和直接调用依赖关系以及构造函数之间、父类与子类之间的隐式调用依赖关系构建静态依赖关系集;
根据静态依赖关系集,使用反射中的动态调用和继承关系中的动态绑定这两个动态执行规则,提取运行时的调用依赖关系,从而构建动态依赖关系集;
基于静态依赖关系集和动态依赖关系集,设计一基于BFS的增量迭代搜索算法,用来搜索更改方法集的所有受影响的方法,从中识别出受影响的测试用例集。
2.如权利要求1所述的方法,其特征在于,提交代码包括程序代码和测试代码。
3.如权利要求1所述的方法,其特征在于,定位更改方法的步骤包括:
从提交的日志消息中获取更改文件的名称;
获取每个更改文件的更改代码行,并排除空行和注释行;
映射更改的代码行到对应的更改方法。
4.如权利要求3所述的方法,其特征在于,映射更改的代码行到对应的更改方法,包括以下步骤:
使用Doxygen分析源码,得到代码文件对应的xml文件;
解析xml文件,得到如下代码结构信息:方法名称、变量名称、方法的开始行和结束行、变量所在行,以及方法的注释信息;
基于以上的结构信息,映射出更改文件中更改行到对应的方法或变量,并标记这些方法和变量为更改方法。
5.如权利要求1所述的方法,其特征在于,解析由分析源码输出的xml文件中标记信息,得到继承依赖和直接调用依赖关系。
6.如权利要求1所述的方法,其特征在于,使用关键字搜索由分析源码输出的每个xml文件中存在的父类与子类之间的隐式调用,记录出现的位置,并解析得到被调用方法的名称、参数类型和返回值类型;搜索该被调用方法的父类,并根据该被调用方法的名称、参数类型和返回值类型,从父类中搜索被调用的方法;根据代码结构信息将出现的位置映射到相应的方法,并将其标记为调用方法,根据该调用方法和上述被调用方法建立父类与子类之间的隐式调用依赖关系。
7.如权利要求1所述的方法,其特征在于,反射中的动态调用的规则为:
使用关键字搜索由分析源码输出的每个xml文件中存在的反射中动态调用,记录出现的位置,并分析xml得到被调用方法的名称;
根据代码的结构信息,将出现的位置映射到对应的调用方法,并得到调用方法的相关信息,根据得到的被调用方法和调用方法,构建反射中的动态调用关系。
8.如权利要求1所述的方法,其特征在于,继承关系中的动态绑定的规则为:
对于静态依赖关系集中调用关系,检查被调用的方法是否在子类方法中给出定义,如果没有,使用BFS搜索算法迭代地搜索父类方法,直到搜索到父类方法的定义;
根据子类是否重载了父类的方法的情况,更新该调用依赖中被调用的方法;
如果子类没有重载父类的方法,则根据被调用方法的名称和参数找出父类对该方法的定义,并更新被调用的子类方法;如果子类重载了父类的方法,将根据父类中被调用方法的名称、参数和返回类型从其子类中搜索重载的方法,利用该重载的方法更新调用依赖中被调用的方法,得到继承关系中的动态绑定关系。
9.如权利要求1所述的方法,其特征在于,根据静态依赖关系集和动态依赖关系集中的继承依赖和调用依赖,生成方法级别的调用关系图,该关系图由当前版本所有方法的节点集合和节点之间调用关系的边集合组成;对于更改方法集中的每个更改方法,根据调用关系图,通过设计的基于BFS的增量迭代搜索算法搜索出所有受影响的方法,加入到受影响的方法集;从受影响的方法集中识别出所有的测试用例,得到测试用例集。
10.如权利要求9所述的方法,其特征在于,对受影响的方法集中的每个方法进行判断,如果方法名称以“test”开头或者方法的注释信息包含“@Test”,则判定为测试方法。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院软件研究所,未经中国科学院软件研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910654983.3/1.html,转载请声明来源钻瓜专利网。