首页 / 专利库 / 软件 / 控制流图 / 一种基于静态分析的Java测试覆盖分析方法

一种基于静态分析的Java测试覆盖分析方法

阅读:436发布:2020-05-14

专利汇可以提供一种基于静态分析的Java测试覆盖分析方法专利检索,专利查询,专利分析的服务。并且本 发明 的技术方案为一种基于静态分析的Java测试 覆盖 分析方法,并基于该方法实现了一套测试覆盖工具。本发明的特点在于:使用JCov对于代码进行插桩分析和运行时情况收集;使用图 算法 对 控制流图 进行分析;准确还原测试覆盖点的具体 位置 和覆盖情况。本发明可以支持目前Java所有的语法结构的分析,并且可以准确还原没有被测试的代码在程序中的具体位置。对于所有满足配置条件的Java项目,可以做到一个命令执行全部的测试和分析过程。本发明的有益效果是:可以减少程序花费在补全测试覆盖上的精 力 ,提供更准确的测试覆盖数据,使得程序员可以用更少的时间尽早得找到错误,节省了程序员寻找错误的时间成本。,下面是一种基于静态分析的Java测试覆盖分析方法专利的具体信息内容。

1.一种基于静态分析的Java测试覆盖分析方法,其特征是:1、使用JCov对于代码进行插桩分析和运行时情况收集;2、使用图算法控制流图进行分析;3、准确还原测试覆盖点的具体位置和覆盖情况。将这3点结合,本发明可以支持目前Java所有的语法结构的分析,并且可以准确还原没有被测试的代码在程序中的具体位置。对于所有满足配置条件的Java项目,可以做到一个命令执行全部的测试和分析过程。该工具的Java测试覆盖分析的步骤如下:
1)配置本地JDK环境,要求JDK版本是1.8及以上。
2)配置本地Maven项目环境,要求Maven的版本是3.0及以上
3)在待分析的项目内运行JCov插件的instr和runtime目标,这一步将对项目代码进行插桩
4)之后运行测试用例,JCov的测试运行报告会自动生成
5)最后,运行result目标,工具会自动寻找源代码以及JCov运行结果,分析程序的控制流,生成语句覆盖、分支覆盖、条件覆盖、主路径覆盖和路径覆盖信息。
2.根据权利要求1所描述的一种基于JCov和Maven插件的测试覆盖插桩方法。其特征是,在Java语言的Maven项目中,使用本工具中的插件调用JCov进行插桩、分析和报告生成。
3.根据权利要求1所描述的一种通过静态语法分析并与JCov结果整合来构建控制流图的方法,其特征是,直接或间接通过本工具中包含的插件来分析测试覆盖运行结果。
4.根据权利要求1所描述的一种通过广度优先搜索以及数学计算来统计控制流图中路径覆盖数目方法,其特征是,直接或间接通过本工具中包含的插件来分析获取程序中路径覆盖的统计结果。

说明书全文

一种基于静态分析的Java测试覆盖分析方法

技术领域

[0001] 本发明属于软件测试技术领域,尤其是软件测试中的针对Java语言的单元测试。其目的在于为软件测试人员提供测试代码质量的快速反馈,是一种帮助软件测试人员在有限时间内提升软件测试质量的方法。
技术背景
[0002] 软件的单元测试是软件开发中控制软件质量的重要方式,衡量测试质量可以使用行覆盖、分支覆盖以及条件覆盖等多个测试覆盖指标进行度量。其中,Java语言的单元测试往往依靠Junit框架进行测试。在实际应用中,获得相应覆盖统计数据往往是通过对于源代码或者字节码进行插桩来进行统计。针对字节码插桩具有插桩效率高,不改变源代码等优点,但是受限于编译器以及编译优化算法,字节码插桩无法准确地对应出插桩处与源代码的关系。同时,采用不同的编译器以及不同编译指令,往往产生的字节码也会有略微的不同,因此从插桩后的字节码还原对应到源代码很难实现。针对源代码的插桩可以准确对应插桩处的位置并且不受编译输出的影响,但是往往效率较低。因此,当前缺乏一个可以快速插桩并将字节码的判定条件与源代码对应的工具。
[0003] 随着软件规模的不断扩大,对于单元测试质量的需求也不断提升,原有的行覆盖与分支覆盖已经不能满足企业对于高质量的测试覆盖的需求,因此,测试覆盖工具需要支持条件覆盖、主路径覆盖、路径覆盖等多种覆盖类型。

发明内容

[0004] 本发明要解决的问题是:当前Java单元测试覆盖分析工具还原条件不准确、支持测试覆盖类型太少的问题。
[0005] 本发明的技术方案为一种基于静态分析的Java测试覆盖分析方法,并基于该方法实现了一套测试覆盖工具。测试覆盖工具可以分为两部分,一部分是基于JCov的插桩、测试工具,通过提供一个JCov的Maven插件封装来实现对Maven项目进行JCov插桩、运行、分析以及产生测试报告的一系列工作。另一部分则是包含语法分析、控制流图构建以及测试覆盖的工具以及Maven插件的封装。其中,第一部分负责测试代码的插桩分析,主要是借助JCov 工具来实现。但是,由于JCov项目不支持Maven,目前最为流行的Java项目管理工具,本工具提供了Maven插件的封装。第二部分是方法的核心,方法通过判断条件静态分析并结合第一部分的结果,构建出程序的控制流图,之后,针对控制流图,提供了统一的分析并实现了语句覆盖、分支覆盖、条件覆盖、主路径覆盖和路径覆盖等多种测试覆盖类型。
[0006] 本发明的特点在于:1、使用JCov对于代码进行插桩分析和运行时情况收集;2、使用图算法对控制流图进行分析;3、准确还原测试覆盖点的具体位置和覆盖情况。将这3点结合,本发明可以支持目前Java所有的语法结构的分析,并且可以准确还原没有被测试的代码在程序中的具体位置。对于所有满足配置条件的Java项目,可以做到一个命令执行全部的测试和分析过程。
[0007] 本发明的有益效果是:可以减少程序花费在补全测试覆盖上的精,提供更准确的测试覆盖数据,使得程序员可以用更少的时间尽早得找到错误,节省了程序员寻找错误的时间成本。附图说明
[0008] 图1为本发明的整体架构逻辑图。
[0009] 图2为本发明的工作流程示意图。
[0010] 图3为Maven项目配置文件示意图。
[0011] 图4为本发明运行结果示意图。

具体实施方式

[0012] 本发明中涉及的几项关键的技术分别是:Java技术,Maven框架,JAXB技术、JavaParser 框架以及JCov工具。接下来进行一些说明:
[0013] 1、Java
[0014] 在本发明中,工具全部由Java语言实现。针对JDK版本的更新,工具的支持版本为1.8 及以上的所有版本的开发环境。Java是当前最为流行的开发语言之一,其具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点,同时还支持运行时绑定、生命周期管理等高级功能。
[0015] 2、Maven框架
[0016] Maven是由Apache基金会开发并维护的,当前主流的Java项目依赖管理工具。通过丰富的中心仓库与强大的插件系统,Maven为Java项目管理提供了极大的方便。除了丰富的中心仓库,庞大的插件系统也是Maven成功的原因。在Maven体系中,有各种各样的插件可以帮助用户更好的管理项目生命周期,每一个插件包含多个Mojo,即Maven plain Old Java Object,代表插件的一个目标。。
[0017] 3、JAXB。
[0018] 全称为Java Architecture for XML Binding,是允许开发者将XML与Java类相互映射、绑定的框架。类似于JSON序列化,JAXB向开发者隐藏了复杂的转化、反射、绑定的细节,提供统一、干净的API使得开发者可以专注于业务逻辑的开发。
[0019] 4、JavaParser
[0020] Javaparser是由社区维护地支持Java语法树提取、访问修改的一套工具。其中,解析生成的语法树采用了访问者模式的设计模式。访问者模式是针对复杂结构的对象,在不改变对象原有元素类的情况下对其定义新的操作。访问者模式被广泛应用于类似语法树、程序控制流图等复杂对象的对外接口中。一方面,其设计结构确保了用户无法直接修改修改已有的数据结构;同时,其规定了用户遍历、获取复杂对象的顺序,使得用户可以方便、有序地扩展已有地复杂对象。
[0021] 5、JCov
[0022] JCov是源自Oracle的针对Java单元测试进行测试覆盖的工具,随着OpenJDK的开源,现由OpenJDK进行维护。并且是OpenJDK开发中使用的测试覆盖工具。不仅同时支持静态插桩与动态插桩,还可以自动生成测试报告。目前稳定版本为2.0,支持Java10的3.0版本已经准备发布。JCov支持从Java1.5到Java10的动态、静态插桩。JCov的优点在于多样化的插桩方式以及极高的效率。但是由于年代久远,JCov是基于ANT构建并且没有提供 Maven的工具,同时,JCov静态插桩的步骤较为繁琐,需要三到四步命令行调用才可以完成。因此,需要提供一个Maven插件的封装来简化JCov的调用过程。
[0023] 使用示例
[0024] 根据该方法进行Java测试覆盖分析的步骤如下:
[0025] 1)配置本地JDK环境,要求JDK版本是1.8及以上。
[0026] 2)配置本地Maven项目环境,要求Maven的版本是3.0及以上
[0027] 3)在待分析的项目内运行JCov插件的instr和runtime目标,这一步将对项目代码进行插桩
[0028] 4)之后运行测试用例,JCov的测试运行报告会自动生成
[0029] 5)最后,运行result目标,工具会自动寻找源代码以及JCov运行结果,分析程序的控制流,生成语句覆盖、分支覆盖、条件覆盖、主路径覆盖和路径覆盖信息[0030] 工具在运行时解决的问题主要有:
[0031] 1)通过提供Maven插件的方式,将原本不支持Maven的JCov工具融入Maven平台[0032] 2)通过语法树的访问,分析程序的控制判断条件,其中支持当前全部的Java语法分析以及包括但不限于内部类、匿名类、Lambda表达式、异常处理、断言、复杂逻辑判断等情况。
[0033] 3)将程序判断条件与JCov分析结果结合,生成程序控制流图
[0034] 4)由控制流图分析测试代码的多种测试覆盖类型,包含语句覆盖、分支覆盖、条件覆盖、主路径覆盖和路径覆盖
[0035] 其中,路径覆盖的难度较大,工具有如下约束,除了简单通路,路径的点集不能是其它路径的子集。在此基础上,工具提出下列的算法来计算控制流图中的路径数以及覆盖到的路径数。
[0036] 1)BFS找出图中所有的环,数目为n,找出图中不含环的从起点到任意终点的通路,数目为k
[0037] 2)对2中每一条通路i(i=1...k),找出通路上环的个数ni,这些环的深度为h[0038] 3)对于每一个深度为h的环lh,i,仅递归查找下一深度的环,深度为h+1[0039] 4)筛除前面已经重复的环,重复步骤4直到找到所有子嵌套环
[0040] 5)对于同深度的环采用乘法原理,不同深度的嵌套环采用加法原理[0041] 6)有每一个环lh,i,其可能的路径数Ph,i=∏i(1+Ph+1,i)
[0042] 7)覆盖路径的计算方法与上面类似。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈