[发明专利]xUnit框架下面向对象软件中测试目标的自动化选择方法有效
申请号: | 201310146574.5 | 申请日: | 2013-04-24 |
公开(公告)号: | CN103309805A | 公开(公告)日: | 2013-09-18 |
发明(设计)人: | 顾庆;陈道蓄 | 申请(专利权)人: | 南京大学镇江高新技术研究院 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 江苏圣典律师事务所 32237 | 代理人: | 贺翔 |
地址: | 212000 江苏省镇*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | xunit 框架 面向 对象 软件 测试 目标 自动化 选择 方法 | ||
1.一种xUnit框架下面向对象软件中测试目标的自动化选择方法,其特征在于包含以下步骤:
1)基于xUnit框架,以被测软件中的对象类作为测试目标;通过分析对象类之间的依赖关系构建类依赖图;
2)根据类依赖图和测试需求,基于节点的两跳可达集,选择影响范围最大的关键节点集合;
3)将关键节点集合映射为关键类集合,以关键类集合中的对象类作为测试目标,再按照xUnit框架设计和执行相应的测试用例。
2.根据权利要求1所述的xUnit框架下面向对象软件中测试目标的自动化选择方法,其特征在于,步骤1)具体过程为:首先获取被测软件的源代码,解析其中所有的类(Class);然后以每一个类为单位,根据类定义和类方法实现,分析类之间的依赖关系,确定类之间的关联;最后将解析出的类映射为节点,关联映射为有向边,构建类依赖图,该依赖图为简单的有向图。
3.根据权利要求2所述的xUnit框架下面向对象软件中测试目标的自动化选择方法,其特征在于,任意两个类之间的依赖关系定义分6种情况,假设给定两个不同的类c1和c2:
情况1.类c1继承(inherit)或实现(implement)了类c2;
情况2.类c1中的一个或多个域变量(field)的定义类型是类c2;
情况3.类c1中一个或多个方法(method)的返回值类型是类c2;
情况4.类c1中某一个方法的一个或多个参数(parameter)类型是类c2;
情况5.类c1中某一个方法的实现中,存在一个或多个局部变量(variable)的定义类型是类c2;
情况6.类c1中某一个方法的实现中,调用了类c2中的一个或多个方法;
如果存在这6种依赖关系之一,则定义两个类之间的关联<c1,c2>;类之间的关联是有向的,<c1,c2>和<c2,c1>是两个不同的关联。
4.根据权利要求1、2或3所述的xUnit框架下面向对象软件中测试目标的自动化选择方法,其特征在于,步骤2)具体过程为:首先根据测试需求设定关键节点集的规模,然后计算每一个节点的关键度指标κ,为从该节点出发,两跳可达集内的节点数量;接下来开始迭代,每次选择一个关键节点,直到选择出符合前述规模的足够数量的关键节点为止;最后将所选关键节点对应的类输出为关键类集合。
5.根据权利要求4所述的xUnit框架下面向对象软件中测试目标的自动化选择方法,其特征在于,一次迭代选择一个关键节点的处理流程是:考虑已经被选中的节点,计算候选节点关键度指标的折扣值δ;给定候选节点vi,令两跳可达集内已被选中的节点数量是ti1,同vi直接相邻的父节点中已被选中的节点数量是ti2,前述父节点定义为终止节点为vi之有向边的起始节点;令p为影响概率;节点vi的折扣值δi计算如下:
δi=ti1+(κi-ti1)×ti2×p
候选节点的权重w定义为关键度指标和折扣值的差,即节点vi的权重wi的计算如下:
wi=κi-δi
根据节点权重,找出候选节点中权重最大的节点,作为本次迭代所选择的关键节点。
6.根据权利要求5所述的xUnit框架下面向对象软件中测试目标的自动化选择方法,其特征在于,步骤3)过程为:对于关键类集中的每一个关键类,首先根据关键类中的每一个公共方法(public)编写对应的测试方法;然后采用随机测试或符号执行方法达到既定的测试覆盖要求。
7.根据权利要求6所述的xUnit框架下面向对象软件中测试目标的自动化选择方法,其特征在于,达到既定的测试覆盖的具体过程为:当给定关键类c1,要求对以c1为起始节点的所有关联覆盖至少n次,n根据测试需求和测试成本决定;如果关联对应不止1个依赖关系,则要求对所有相应的依赖关系覆盖至少1次;达到测试覆盖要求,所有关键类处理完毕后,在xUnit框架支持下执行测试用例,完成自动化测试。
8.根据权利要求7所述的xUnit框架下面向对象软件中测试目标的自动化选择方法,其特征在于对类之间关联的覆盖,由类之间的依赖关系决定,对应依赖关系的6种情况;给定关联<c1,c2>,关联覆盖定义如下:
情况1.对类c1进行实例化;
情况2.对类c2实例化,赋予类c1中相应的域变量(field);
情况3.执行类c1中的相应方法,返回非空(null)的类c2对象实例;
情况4.对类c2实例化,在调用类c1中相应方法时,赋予类型为c2的参数;
情况5.对类c2实例化,赋予类c1相应方法实现中类型为c2的局部变量;
情况6.调用类c1中的相应方法,执行其中的针对类c2方法的调用语句。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学镇江高新技术研究院,未经南京大学镇江高新技术研究院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310146574.5/1.html,转载请声明来源钻瓜专利网。