检查单元测试质量的方法和系统的制作方法

文档序号:6442137阅读:279来源:国知局
专利名称:检查单元测试质量的方法和系统的制作方法
技术领域
本申请涉及计算机领域,特别涉及一种检查单元测试质量的方法和系统。
背景技术
单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,可能需要把一个很大的值放入一个有序列表(list)中去,然后确认该值出现在list的尾部。单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。单元测试不仅仅是作为无错编码的一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。目前,单元测试的代码覆盖率虽然提高了,但由于单元测试的质量不能得到很好的保证,影响了单元测试的有效性。因此,急需一种有效的方案来检查单元测试的质量,以提升单元测试的有效性。

发明内容
为了提升单元测试的有效性,本申请提供了一种检查单元测试质量的方法和系统,技术方案如下:一种单元测试质量的检查方法,包括:利用面向切面编程方式,根据预设的用于描述测试元的元语获取所述测试元对应的测试元数据;获取单元测试用例检查规则;根据所述测试元数据和所述单元测试用例检查规则检查单元测试质量;输出单元测试的质量检查结果。一种单元测试质量的检查系统,包括:测试元数据获取模块,用于利用面向切面编程方式,根据预设的用于描述测试元的元语获取所述测试元对应的测试元数据;检查规则获取模块,用于获取单元测试用例检查规则;规则检查模块,用于根据所述测试元数据和所述单元测试用例检查规则检查单元测试质量;输出模块,用于输出单元测试的质量检查结果。本申请的技术方案通过预设描述测试元的元语和单元测试用例检查规则,然后根据元语获取测试元对应的测试元数据,并利用测试元数据和单元测试用例检查规则,能够全面检查单元测试的质量,提高单元测试的有效性。通过以下参照附图对本申请实施例的说明,本申请的上述以及其它目的、特征和优点将更加明显。


下面将参照所附附图来描述本申请的实施例,其中:图1是本申请实施例提供的检查单元测试质量的方法的流程图;图2是本申请实施例提供的检查单元测试质量的系统的结构图;图3是本申请实施例提供的检查单元测试质量的方法的详细流程图。
具体实施例方式下面结合附图详细描述本申请的具体实施例。应当注意,这里描述的实施例只用于举例说明,并不用于限制本申请。影响单元测试的质量的因素包括但不限于以下几种:第一、单元测试代码风格不规范,缺乏统一性。具体的表现形式包括但不限于以下几种:单元测试缺少断言;单元测试用例未包含预期结果;单元测试仅覆盖正常情况,对异常情况未考虑;测试方法的命名不统一;一些dao层的删除数据方法没有进行单元测试;单元测试数据繁多,有些方法参数/断言很多,所以会省略一些字段,可能会放过一些漏洞(bug)。第二、单元测试用例设计不规范,系统测试功能覆盖面不全。具体的表现形式包括但不限于以下几种:不同的业务场景,靠人工修改参数来进行单元测试,而不是区分不同的测试用例来实现;dao层测试用例只有应用程序编程接口(Application ProgrammingInterface, API)调用;集成测试用例只包含了业务场景的简单串联,没有走到所有的关键路径;单元测试没有按等价类划分测试用例,一般一个方法只会对应一个测试用例,例如空值(null)、边界值、极限值并没有被覆盖,会漏掉一些异常漏洞(bug)。第三、单元测试依赖外部环境变量,外部环境的不稳定会导致单元测试的不稳定性。具体的表现形式包括但不限于以下几种:服务(Service)单元测试时需要屏蔽所有外部环境因素;私有方法应该独立测试;避免单元测试之间的依赖关系;有的类中变量是以注入的方式赋值,该赋值在方法中需要使用到,需要对这些变量也做一下覆盖测试,看赋值是否正确。为了解决现有技术中存在的问题,本申请通过预设用于描述测试元的元语和单元测试用例检查规则,然后根据元语获取测试元对应的测试元数据,并利用测试元数据和单元测试用例检查规则能够全面检查单元测试的质量,提高单元测试的有效性。下面结合具体的实施例对本申请进行详细的描述。实施例一本申请实施例提供了一种检查单元测试质量的方法,如图1所示,包括:步骤101,利用面向切面编程方式,根据预设的用于描述测试元的元语获取该测试元对应的测试元数据;进一步地,该步骤包括:根据目标切面维度从单元测试集和/或目标应用程序获取目标切面信息;将该目标切面信息细分为最小单位的测试信息,该最小单位的测试信息为该测试元,在内存中存储该测试元及其对应的测试元数据;获取预设的元语,利用该预设的元语、该测试元和该测试元数据的关联关系从内存中获取该测试元对应的测试元数据。优选地,为了提高系统运算速度,降低运算成本和减少错误发生,可以在获取元语后,根据预设的元语过滤条件,从获取的元语中过滤冗余的元语。在本实施例中,目标切面信息可以包括以下信息中的一种或其组合:单元测试类的方法、目标应用程序任意类的方法和单元测试断言方法。步骤102,获取单元测试用例检查规则。优选地,为了提高系统运算速度,降低运算成本和减少错误发生,可以在获取单元测试用例检查规则后,根据预设的检查规则过滤条件,从该获取的单元测试用例检查规则中过滤冗余的单元测试用例检查规则。步骤103,根据该测试元数据和该单元测试用例检查规则检查单元测试质量。进一步地,该步骤包括:将该测试元数据替代该单元测试用例检查规则中的元语,以检查该测试元数据是否符合该单元测试用例检查规则,从而得到单元测试的质量检查结果。步骤104,输出单元测试的质量检查结果。优选地,为了便于用户以后的对比或查阅,可以在输出单元测试的质量检查结果之后或之前,存储质量检查结果。进一步地,为了便于直观形象地分析质量检查结果,可以对输出的质量检查结果或存储的质量检查结果进行报表分析。本申请实施例通过预设描述测试元的元语,然后根据元语获取测试元对应的测试元数据,并利用测试元数据和单元测试用例检查规则,能够全面检查单元测试的质量,提高单元测试的有效性。实施例二如图2所示为检查单元测试质量的方法的应用架构图,该架构图使用的是编程语言为jdkl.6及以上,开发框架为maven3,扩展包依赖ASPECTJ1.5以上,但该使用的编程语言,开发框架和扩展包等只是为了举例需要,本申请的保护范围并不限于此。在图2中,该架构包括:ASPECTJ框架、目标应用程序、单元测试集和检查单元测试质量的系统。ASPECTJ框架作为目标应用程序的运行代理,同时起着作为检查单元测试质量的系统的支撑工具的作用。需要说明的是,由于采用的编程语言不同,起支撑工具作用的框架可以根据编程语言的不同而进行相应的选择,并不限于ASPECTJ框架。检查单元测试质量的系统是本实施例的核心,其使用面向切面编程(AspectOriented Programming,A0P)方式织入到目标应用程序和单元测试集来运行。该系统可以Jar方式集成到目标应用程序中,当单元测试运行时,该系统自动对单元测试用例进行检查。具体地,该系统包括:测试元数据获取模块、设置模块和检查模块。其中,测试元数据获取模块包括切面信息获取单元和测试元数据存储单元。设置模块包括:元语设置单元、检查规则设置单元、元语过滤单元和检查规则解析单元。检查模块包括:测试元数据提取单元、检查规则获取单元、检查规则过滤单元、规则检查单元、质量结果存储单元、输出单元和报表分析单元。图3所示为本申请实施例的单元测试质量的检查方法的详细流程图,参考图2和图3,并结合具体的示例对本申请进行详细的描述,具体如下:在步骤301中,切面信息获取单元获取目标切面信息。具体地,在单元测试运行中,切面信息获取单元从不同的目标切面维度织入,获取到目标切面维度对应的目标切面信息,并将目标切面信息细分成最小单位的测试信息,本实施例将该最小单位的测试信息定义为测试元,该测试元可以是包.类.方法名、参数表、数据或断言等,但本实施例并未将测试元限制在上述示例。在本实施例中,切面信息获取单元拦截到单元测试运行的测试方法,进而拦截到测试方法所调用的目标应用程序方法以及拦截到单元测试断言方法。具体地,该目标切面信息包括:单元测试类的方法、目标应用程序任意类的任意方法和单元测试断言方法。本实施例提供的目标切面信息的示例如下:
*切面:切入目标应用程序任意类的任意方法 */
@Pointcut("execution(* com.alibaba.b2b.asura.aop.App.app(..))") public void targetClassMethod() {
}
*切面:切入单元测试类的方法 */
@Pointcut("execution(* com.alibaba.b2b.asura.*.test*(..))") public void testClassMethodQ {
}
*切面:切入断言的方法 */
@Pointcut("execution(void com.alibaba.b2b.asura.Want*(..))") public void testCaseAssertsQ {
}需要说明的是,上述三类目标切面信息只是本实施例的一个示例,本实施例的保护范围也可以是上述三类目标切面信息之一或者其中任意两种目标切面信息的组合。在以后的应用中,用户还可以根据需要添加其他目标切面信息,在此不再赘述。在步骤302中,测试元数据存储单元从目标切面信息中获取测试元,并将测试元及其对应的测试元数据写入到内存池中。其中,获取的测试元包括提取类名、方法名、参数表、数据、断言等。本实施例提供的测试元存储结构的示例如下:j -TestMeta-targetClass、targetMethod、testCaseClass、...
List-1-TestMeta-targetClass>targetMethod、testCaseClass、...
1-TestMeta-targetClass>targetMethod、testCaseClass、...
其中,“targetClass,,、“targetMethod,,和“testCaseClass,,即为兀语,分别描述目标程序类,目标方法和测试用例类等测试元,而测试元数据存储在元语对应的内存中。在步骤303中,元语设置单元根据用户的指令按照预先的元语设置规则设置用来描述测试元语,并将设置的元语存储在内存中。例如,用元语“assertions”描述的测试元为“断言”。其中,设置的元语存储在内存中。测试元是以元语为关键字存储在内存池中的,因此可以根据元语来查找测试元对应的测试元数据。通过将测试元对应的测试元数据代入到单元测试用例检查规则中,替代其中的元语,可以达到执行单元测试用例检查规则的目的。需要说明的是,元语可以是可扩展标记语言(Extensible Markup Language,XML)配置文件,也可以是数据库表,本实施例对此不作限制。元语描述测试元是在单元测试用例检查规则中进行定义的,如下所示为一个单元测试用例检查规则:
权利要求
1.一种单元测试质量的检查方法,其特征在于,包括: 利用面向切面编程方式,根据预设的用于描述测试元的元语获取所述测试元对应的测试元数据; 获取单元测试用例检查规则; 根据所述测试元数据和所述单元测试用例检查规则检查单元测试质量; 输出单元测试的质量检查结果。
2.如权利要求1所述的方法,其特征在于,利用面向切面编程方式,根据预设的用于描述测试元的元语获取所述测试元对应的测试元数据,包括: 根据目标切面维度从单元测试集和/或目标应用程序获取目标切面信息; 将所述目标切面信息细分为最小单位的测试信息,所述最小单位的测试信息为所述测试元,在内存中存储所述测试元及其对应的测试元数据; 获取预设的元语,利用所述预设的元语、所述测试元和所述测试元数据的关联关系从内存中获取所述测试元对应的测试元数据。
3.如权利要求2所述的方法,其特征在于,所述目标切面信息包括以下信息任意一种或其组合: 单元测试类的方法、目标应用程序任意类的方法和单元测试断言方法。
4.如权利要求2所 述的方法,其特征在于,所述获取预设的元语之后,包括: 根据预设的元语过滤条件,从所述获取的元语中过滤冗余的元语。
5.如权利要求1所述的方法,其特征在于,所述根据所述测试元数据和所述单元测试用例检查规则检查单元测试质量,包括: 将所述测试元数据替代所述单元测试用例检查规则中的元语,以检查所述测试元数据是否符合所述单元测试用例检查规则,从而得到单元测试的质量检查结果。
6.如权利要求1至5任意一项所述的方法,其特征在于,获取所述单元测试用例检查规则之前,还包括: 根据用户指令设置所述单元测试用例检查规则; 将所述单元测试用例检查规则解析成对象。
7.如权利要求1至5任意一项所述的方法,其特征在于,获取所述单元测试用例检查规则之后,包括: 根据预设的检查规则过滤条件,从所述获取的单元测试用例检查规则中过滤冗余的单元测试用例检查规则。
8.如权利要求1至5任意一项所述的方法,其特征在于,所述输出单元测试的质量检查结果的步骤之后,包括: 存储所述单元测试的质量检查结果。
9.如权利要求1至5任意一项所述的方法,其特征在于,所述输出单元测试的质量检查结果之后,还包括:对所述单元测试的质量检查结果进行报表分析,生成报表分析结果。
10.一种单元测试质量的检查系统,其特征在于,包括: 测试元数据获取模块,用于利用面向切面编程方式,根据预设的用于描述测试元的元语获取所述测试元对应的测试元数据; 检查规则获取模块,用于获取单元测试用例检查规则;规则检查模块,用于根据所述测试元数据和所述单元测试用例检查规则检查单元测试质量; 输出模块,用于输出单元测试的质量检查结果。
11.如权利要求10所述的系统,其特征在于,所述测试元数据获取模块,包括: 切面信息获取单元,用于根据目标切面维度从所述单元测试集和/或目标应用程序获取目标切面信息; 测试元数据存储单元,用于将所述目标切面信息细分为最小单位的测试信息,所述最小单位的测试信息为所述测试元,并存储所述测试元及其对应的测试元数据; 测试元数据提取单元,用于获取预设的元语,利用所述预设的元语、所述测试元和所述测试元数据的关联关系提取所述测试元对应的测试元数据。
12.如权利要求11所述的系统,其特征在于,所述目标切面信息包括以下信息任意一种或其组合: 单元测试类的方法、目标应用程序任意类的方法和单元测试断言方法。
13.如权利要求11所述的系统,其特征在于,还包括:元语过滤模块,用于根据预设元语过滤条件,从所述获取的预设的元语中过滤冗余的元语。
14.如权利要求10所述的系统,其特征在于,所述规则检查模块,具体用于将所述测试元数据替代所述单元测试用例检查规则中的元语,检查所述测试元数据是否符合所述单元测试用例检查规则,从而得到单元测试的质量检查结果。
15.如权利要求11至14任意一项所述的系统,其特征在于,还包括: 检查规则设置模块,用于根据用户指令设置所述单元测试用例检查规则; 检查规则解析模块,用于将所述单元测试用例检查规则解析成对象。
16.如权利要求11至14任意一项所述的系统,其特征在于,还包括:检查规则过滤模块,用于根据预设的检查规则过滤条件,从所述获取的单元测试用例检查规则中过滤冗余的单元测试用例检查规则。
17.如权利要求11至14任意一项所述的系统,其特征在于,还包括:存储模块,用于存储所述单元测试的质量检查结果。
18.如权利要求11至14任意一项所述的系统,其特征在于,报表分析模块,用于对所述单元测试的质量检查结果进行报表分析,生成报表分析报告。
全文摘要
本申请公开了一种检查单元测试质量的方法和系统,属于计算机领域。该方法包括利用面向切面编程方式,根据预设的用于描述测试元的元语获取所述测试元对应的测试元数据;获取单元测试用例检查规则;根据所述测试元数据和所述单元测试用例检查规则检查单元测试质量;输出单元测试的质量检查结果。该系统包括测试元获取模块、测试元数据获取模块、检查规则获取模块、规则检查模块和输出模块。本申请的技术方案可以提高单元测试的有效性。
文档编号G06F11/36GK103164335SQ20111042780
公开日2013年6月19日 申请日期2011年12月19日 优先权日2011年12月19日
发明者郭帅, 毛锡凯 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1