公开/公告号CN112948249A
专利类型发明专利
公开/公告日2021-06-11
原文格式PDF
申请/专利权人 浙江百应科技有限公司;
申请/专利号CN202110232658.5
发明设计人 邵磊;
申请日2021-03-03
分类号G06F11/36(20060101);
代理机构33370 杭州浙言专利代理事务所(普通合伙);
代理人易朝晖
地址 311121 浙江省杭州市余杭区仓前街道梦想小镇天使村11幢101
入库时间 2023-06-19 11:22:42
技术领域
本申请涉及代码覆盖率统计领域,尤其涉及一种基于JaCoCo基础上实现增量代码覆盖率统计的方法和装置。
背景技术
目前,市场上java主要代码覆盖率工具包括EMMA和JaCoCo。JaCoCo优势:
(1) JaCoCo支持分支覆盖、引入了Agent模式。
(2) EMMA官网已经不维护了,JaCoCo是其团队开发的,可以理解为一个升级版。
(3) JaCoCo社区比较活跃,官网也在不断的维护更新。
Jacoco可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等。
Jacoco包含了多种尺度的覆盖率计数器,包含指令级覆盖(Instructions,C0coverage),分支(Branches,C1coverage)、圈复杂度(CyclomaticComplexity)、行覆盖(Lines)、方法覆盖(non-abstract methods)、类覆盖(classes)等,但是并没有提供增量覆盖的解决方案。
随着业务发展,存量代码较多,对当下敏捷开发,现有的全量代码覆盖率统计使用传统的Jacoco执行耗时较长,效率低下。
发明内容
本申请要解决的技术问题,在于提供一种基于JaCoCo基础上实现增量代码覆盖率统计的方法和装置,以解决现有现有的全量代码覆盖率统计使用传统的Jacoco执行耗时较长,效率低下的技术问题。
为实现上述目的,本申请采用下述技术方案:
第一方面,本申请提供一种基于JaCoCo基础上实现增量代码覆盖率统计的方法,所述方法包括:
获取测试完成后的exec文件,其中,所述exec文件至少包括探针的覆盖执行信息;
在JVM中注入javaagent 参数;
使用JGit获取基线提交与测试提交之间的差异代码;
对所述差异代码进行解析,将所述差异代码使用更小的颗粒度进行切割获得第一差异信息;
根据所述第一差异信息,基于JaCoCo生成覆盖率模型解析所述exec文件获得增量代码的覆盖率报告。
第二方面,本申请提供一种基于JaCoCo基础上实现增量代码覆盖率统计系统,所述系统包括:
第一获取单元,用于获取测试完成后的exec文件,其中,所述exec文件至少包括探针的覆盖执行信息;
第一注入单元,用于在JVM中注入javaagent 参数;
第二获取单元,用于使用JGit获取基线提交与测试提交之间的差异代码;
第一解析单元,用于对所述差异代码进行解析,将所述差异代码使用更小的颗粒度进行切割获得第一差异信息;
第二解析单元,用于根据所述第一差异信息,基于JaCoCo生成的覆盖率模型解析所述exec文件获得增量代码的覆盖率报告。
第三方面,本申请提供一种电子设备,所述电子设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、待码集或指令集,所述至少一条指令、所述至少一段程序、所述待码集或指令集由所述处理器执行以实现如上述第一方面所述的基于JaCoCo基础上实现增量代码覆盖率统计的方法。
第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、待码集或指令集,所述至少一条指令、所述至少一段程序、所述待码集或指令集由处理器执行以实现如上述第一方面所述的基于JaCoCo基础上实现增量代码覆盖率统计的方法。
本申请的有益效果是:本申请提供一种基于JaCoCo基础上实现增量代码覆盖率统计的方法和装置,解决了敏捷模式下增量代码覆盖率统计的问题,从而做到快速高效反馈代码覆盖率报告,大大缩短了全量代码覆盖统计的时间,真正做到敏捷测试。
附图说明
图1为本申请一个实施例提供的一种基于JaCoCo基础上实现增量代码覆盖率统计的方法的流程示意图;
图2为本申请一个实施例提供的一种基于JaCoCo基础上实现增量代码覆盖率统计系统的结构示意图;
图3为本申请一个实施例提供的一种电子设备的结构示意图。
具体实施方式
下面通过具体实施例,并结合附图,对本申请的技术方案作进一步的具体描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请提供一种基于JaCoCo基础上实现增量代码覆盖率统计的方法和装置,以解决现有现有的全量代码覆盖率统计使用传统的Jacoco执行耗时较长,效率低下的技术问题。
以下结合附图,详细说明本申请中各实施例提供的技术方案。
请参阅附图1,其示出了本申请一个实施例提供的一种基于JaCoCo基础上实现增量代码覆盖率统计的方法的流程示意图,所述方法包括:
S101,获取测试完成后的exec文件;
其中,所述exec文件至少包括探针的覆盖执行信息。
针对步骤S101,在一个实施例中,通过tcp方式获取所述exec文件。
S102,在JVM中注入javaagent 参数;
针对步骤S102,在JVM中注入javaagent 参数后,使得java应用自动注入JVM。
S103,使用JGit获取基线提交与测试提交之间的差异代码;
S104,对所述差异代码进行解析,将所述差异代码使用更小的颗粒度进行切割获得第一差异信息;
S105,根据所述第一差异信息,基于JaCoCo生成覆盖率模型解析所述exec文件获得增量代码的覆盖率报告。
针对步骤S105,改造ClassProbesAdapter 类的 visitMethod 方法获得生成覆盖率模型,基于上述获得生成覆盖率模型的方法,使覆盖率模型只对提取出的每个类的新增或者变更方法做解析,非指定类和方法不做处理。
在一个实施例中,当获得所述覆盖率报告之后,通过批量查询数据库信息获取所述覆盖率报告。
请参阅附图2,其示出了本申请一个实施例提供的一种基于JaCoCo基础上实现增量代码覆盖率统计系统的结构示意图,所述系统包括:
第一获取单元201,用于获取测试完成后的exec文件,其中,所述exec文件至少包括探针的覆盖执行信息;
第一注入单元202,用于在JVM中注入javaagent 参数;
第二获取单元203,用于使用JGit获取基线提交与测试提交之间的差异代码;
第一解析单元204,用于对所述差异代码进行解析,将所述差异代码使用更小的颗粒度进行切割获得第一差异信息;
第二解析单元205,用于根据所述第一差异信息,基于JaCoCo生成的覆盖率模型解析所述exec文件获得增量代码的覆盖率报告。
请参阅附图3,其示出了本申请一个实施例提供的一种电子设备的结构示意图,可以包括:至少一个网络接口302、存储器303和至少一个处理器301。电子设备中的各个组件通过总线系统304耦合在一起。可以理解,总线系统304用于实现这些组件之间的连接通信。总线系统304除包括数据总线之外,还包括电源总线、控制总线和状态信号总线,但是为了清楚说明起见,在附图3中将各种总线都标为总线系统404。
在一些实施方式中,存储器303存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:操作系统3031和应用程序3032。
其中,操作系统3031,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种寄出业务以及处理基于硬件的任务。应用程序3032,包含各种应用程序,例如媒体播放器(Media Player)、浏览器(Browser)等,用于实现各种应用业务。实现本申请实施例方法的程序可以包含在应用程序中。
在上述实施例中,电子设备还包括:存储在存储器303上的至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集可由处理器301执行实现本申请实施例中所述任一基于JaCoCo基础上实现增量代码覆盖率统计的方法的步骤。
在一个实施例中,本申请还提供了一种计算机可读存储介质,计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器执行时实现本申请实施例中所述任一基于JaCoCo基础上实现增量代码覆盖率统计的方法的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的至少一条指令、至少一段程序、代码集或指令集可存储于一非易失性计算机可读取存储介质中,所述的至少一条指令、至少一段程序、代码集或指令集在执行时,可实现本申请实施例中所述任一地图绘制方法的步骤。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,这些均属于本申请的保护范围之内。
机译: 一种用于在确保信息的机密性和完整性的基础上基于分布式分类帐发布和满足数字银行担保要求的方法及其实现系统
机译: 一种用于在确保信息的机密性和完整性的基础上基于分布式分类帐发布和满足数字银行担保要求的方法及其实现系统
机译: 一种以不使用碳氢化合物为能源的基础上从水中生产氢气和氧气的方法以及一种附加的热泵及其实现装置