CN109857631A - 基于人工智能的代码覆盖率统计方法、装置、设备及存储介质 - Google Patents
基于人工智能的代码覆盖率统计方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109857631A CN109857631A CN201811298148.2A CN201811298148A CN109857631A CN 109857631 A CN109857631 A CN 109857631A CN 201811298148 A CN201811298148 A CN 201811298148A CN 109857631 A CN109857631 A CN 109857631A
- Authority
- CN
- China
- Prior art keywords
- code
- dimension
- incremental
- incremental code
- code coverage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000013473 artificial intelligence Methods 0.000 title claims abstract description 43
- 238000007619 statistical method Methods 0.000 title claims abstract description 32
- 239000000523 sample Substances 0.000 claims abstract description 37
- 238000012360 testing method Methods 0.000 claims abstract description 23
- 238000000034 method Methods 0.000 claims description 89
- 230000008569 process Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 6
- 238000001914 filtration Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 239000000243 solution Substances 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请属于人工智能技术领域,涉及基于人工智能的代码覆盖率统计方法、装置、设备及存储介质。该基于人工智能的代码覆盖率统计方法包括:获取代码测试时产生的exec文件,所述exec文件中包含探针的覆盖执行信息;滤除所述exec文件中的非测试文件和非java文件;根据探针的覆盖执行信息获取基线提交代码与测试提交代码之间的增量代码;对所述增量代码进行解析;计算增量代码覆盖率。其能够用于对增量代码覆盖率进行统计,能够大大减少代码扫描的时间,提高代码覆盖率的统计效率。
Description
技术领域
本申请属于人工智能技术领域,涉及基于人工智能的代码覆盖率统计方法、装置、设备及存储介质。
背景技术
目前,代码覆盖率统计主要为全量代码覆盖率统计,即每次扫描出来的覆盖率数据都是扫描了整套代码得出的代码覆盖率数据。当不同版本进行迭代时,开发其实只在整套代码的基础上新增或修改了部分代码,而该版本的代码覆盖率统计其实只需要统计这些新增或修改的代码即可,如果再进行全量代码覆盖率统计的话,扫描工作就有大量的重复,导致代码覆盖率统计效率较低。
发明内容
本申请实施例公开了基于人工智能的代码覆盖率统计方法、装置、设备及存储介质,旨在计算增量代码覆盖率。
本申请的一些实施例公开了一种基于人工智能的代码覆盖率统计方法。所述基于人工智能的代码覆盖率统计方法包括:获取代码测试时产生的exec文件,所述exec文件中包含探针的覆盖执行信息;滤除所述exec文件中的非测试文件和非java文件;根据探针的覆盖执行信息获得基线提交代码与测试提交代码之间的增量代码;对所述增量代码进行解析;计算增量代码覆盖率。
在本申请的一些实施例中,所述对所述增量代码进行解析的步骤包括:将所述增量代码解析至类维度、方法维度、分支维度、行维度以及指令维度中的至少一个;所述类维度指的计数单元为被测试程序的一个类文件;所述方法维度指的计数单元为被测试程序的一个方法;所述分支维度的计数单元为判断语句的一个分支;所述行维度指的计数单元为被测试程序的一行代码;所述指令维度的计数单元为一个java二进制代码指令。
在本申请的一些实施例中,所述计算增量代码覆盖率的步骤包括:计算类维度的增量代码覆盖率、方法维度的增量代码覆盖率、分支维度的增量代码覆盖率、行维度的增量代码覆盖率以及指令维度的增量代码覆盖率中的至少一个。
在本申请的一些实施例中,所述计算类维度的增量代码覆盖率、方法维度的增量代码覆盖率、分支维度的增量代码覆盖率、行维度的增量代码覆盖率以及指令维度的增量代码覆盖率中的至少一个包括:
通过以下方式计算所述类维度的增量代码覆盖率:
Nc指的是所述增量代码中所有被执行过至少一次的类的数量,Ac指的是所述增量代码中类的总数;
或,通过以下方式计算所述方法维度的增量代码覆盖率:
Nw指的是所述增量代码中所有被执行过至少一次的方法的数量,Aw指的是所述增量代码中方法的总数;
或,通过以下方式计算所述分支维度的增量代码覆盖率:
Ns指的是所述增量代码中所有被执行过至少一次的分支的数量,As指的是所述增量代码中分支的总数;
或,通过以下方式计算所述分支维度的增量代码覆盖率:
Nh指的是所述增量代码中所有被执行过至少一次的行的数量,Ah指的是所述增量代码中行的总数;
或,通过以下方式计算所述指令维度的增量代码覆盖率:
Nz指的是所述增量代码中所有被执行过至少一次的指令的数量,Az指的是所述增量代码中指令的总数。
在本申请的一些实施例中,所述基于人工智能的代码覆盖率统计方法还包括:对JaCoCo工具进行改造,使用改造后的JaCoCo工具计算增量代码覆盖率。
在本申请的一些实施例中,所述对JaCoCo工具进行改造包括:调用createAnalyzingVisitor方法生成ASM类访问器;通过所述ASM类访问器改造visitMethod方法中的探针,让所述visitMethod方法中的探针插入每个类新增或变更的方法中,使得所述visitMethod方法对每个类新增或变更的方法做解析。
在本申请的一些实施例中,所述基于人工智能的代码覆盖率统计方法还包括:对包含所述增量代码的源码进行插桩操作以生成插过桩的class文件;在所述class文件中添加指定的JAVA源文件;所述JAVA源文件中包含日志收集文件,所述日志收集文件用于收集代码覆盖率的日志信息,所述日志信息中包含探针的覆盖执行信息;测试过程中调用所述日志收集文件收集代码覆盖率的日志信息;对收集到的代码覆盖率的日志信息进行数据组合生成所述exec文件。
本申请的一实施例公开了一种基于人工智能的代码覆盖率统计装置。所述基于人工智能的代码覆盖率统计装置包括:exec文件获取模块,用于获取代码测试时产生的exec文件,所述exec文件中包含探针的覆盖执行信息;滤除模块,用于滤除所述exec文件中的非测试文件和非java文件;增量代码获取模块,用于根据探针的覆盖执行信息获取基线提交代码与测试提交代码之间的增量代码;解析模块,用于对所述增量代码进行解析;计算模块,用于计算增量代码覆盖率。
在本申请的一些实施例中,所述解析模块包括类维度解析子模块、方法维度解析子模块、分支维度解析子模块、行维度解析子模块以及指令维度解析子模块中的至少一个;所述类维度解析子模块用于将所述增量代码解析至类维度;所述方法维度解析子模块用于将所述增量代码解析至方法维度;所述分支维度解析子模块用于将所述增量代码解析至分支维度;行维度解析子模块用于将所述增量代码解析至行维度;指令维度解析子模块用于将所述增量代码解析至指令维度;所述类维度指的计数单元为被测试程序的一个类文件;所述方法维度指的计数单元为被测试程序的一个方法;所述分支维度的计数单元为判断语句的一个分支;所述行维度指的计数单元为被测试程序的一行代码;所述指令维度的计数单元为一个java二进制代码指令。
在本申请的一些实施例中,所述计算模块包括类维度计算子模块、方法维度计算子模块、分支维度计算子模块、行维度计算子模块以及指令维度计算子模块中的至少一个;所述类维度计算子模块用于计算类维度的增量代码覆盖率;所述方法维度计算子模块用于计算方法维度的增量代码覆盖率;所述分支维度计算子模块用于计算分支维度的增量代码覆盖率;所述行维度计算子模块用于计算行维度的增量代码覆盖率;所述指令维度计算子模块用于计算指令维度的增量代码覆盖率。
在本申请的一些实施例中,所述类维度计算子模块计算的 Nc指的是所述增量代码中所有被执行过至少一次的类的数量,Ac指的是所述增量代码中类的总数;
所述方法维度计算子模块计算的Nw指的是所述增量代码中所有被执行过至少一次的方法的数量,Aw指的是所述增量代码中方法的总数;
所述分支维度计算子模块计算的分支维度的Ns指的是所述增量代码中所有被执行过至少一次的分支的数量,As指的是所述增量代码中分支的总数;
所述行维度计算子模块计算的行维度的Nh指的是所述增量代码中所有被执行过至少一次的行的数量,Ah指的是所述增量代码中行的总数;
所述指令维度计算子模块计算的指令维度的Nz指的是所述增量代码中所有被执行过至少一次的指令的数量,Az指的是所述增量代码中指令的总数。
本申请的一些实施例公开了一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一种基于人工智能的代码覆盖率统计方法的步骤。
本申请的一些实施例公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种基于人工智能的代码覆盖率统计方法的步骤。
与现有技术相比,本申请公开的技术方案主要有以下有益效果:
在本申请的实施例中,所述基于人工智能的代码覆盖率统计方法通过获取代码测试时产生的exec文件,然后滤除所述exec文件中的非测试文件和非java文件。根据探针的覆盖执行信息获取基线提交代码与测试提交代码之间的增量代码,对所述增量代码进行解析,计算增量代码覆盖率。所述基于人工智能的代码覆盖率统计方法只统计增量代码覆盖率,因而能够大大减少代码扫描的时间,提高代码覆盖率的统计效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本申请的一实施例中所述基于人工智能的代码覆盖率统计方法的示意图;
图2为本申请的一实施例中所述基于人工智能的代码覆盖率统计装置的示意图;
图3为本申请的一实施例中所述解析模块40的示意图;
图4为本申请的一实施例中所述计算模块50的示意图;
图5为本申请的一实施例中计算机设备100基本结构框图。
具体实施方式
为了便于理解本申请,下面将参照相关附图对本申请进行更全面的描述。附图中给出了本申请的较佳实施例。但是,本申请可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本申请的公开内容的理解更加透彻全面。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请。
本申请的一实施例公开一种基于人工智能的代码覆盖率统计方法。
参考图1,为本申请的一实施例中所述基于人工智能的代码覆盖率统计方法的示意图。
如图1中所示意的,所述基于人工智能的代码覆盖率统计方法包括:
S1:获取代码测试时产生的exec文件,所述exec文件中包含探针的覆盖执行信息。
S2:滤除所述exec文件中的非测试文件和非java文件。
S3:根据探针的覆盖执行信息获取基线提交代码与测试提交代码之间的增量代码。
基线(base line)是软件工程活动从一个环节转入另外一个环节时对阶段产品或组件的标识。因为软件规模的膨胀和分工的细化,软件开发过程变得越来越复杂,每个阶段可能由不同类型的角色和人员来完成,因此有必要清晰标识上一阶段完成的成果和下阶段开始工作的基础。这种标识活动就是建立基线。
S4:对所述增量代码进行解析。被解析的代码为测试提交代码减去基线提交代码。
所述对所述增量代码进行解析的步骤包括:将所述增量代码解析至类维度、方法维度、分支维度、行维度以及指令维度中的至少一个;所述类维度指的计数单元为被测试程序的一个类文件;所述方法维度指的计数单元为被测试程序的一个方法;所述分支维度的计数单元为判断语句的一个分支,例如if语句或switch语句的一个分支;所述行维度指的计数单元为被测试程序的一行代码;所述指令维度的计数单元为一个java二进制代码指令。由于能够将增量代码解析到方法维度、行维度、类维度、分支维度以及指令维度中的至少一个,因此能够实现在多个维度来统计增量代码的覆盖率,实用性强,有利于为软件测试人员的提供准确的被测软件的增量代码覆盖率,提高了软件测试的效果。
S5:计算增量代码覆盖率。
在本申请的实施例中,根据探针的覆盖执行信息获取基线提交代码与测试提交代码之间的增量代码,对所述增量代码进行解析,计算增量代码覆盖率。
在本申请的实施例中,所述基于人工智能的代码覆盖率统计方法通过获取代码测试时产生的exec文件,然后滤除所述exec文件中的非测试文件和非java文件。根据探针的覆盖执行信息获取基线提交代码与测试提交代码之间的增量代码,对所述增量代码进行解析,计算增量代码覆盖率。所述基于人工智能的代码覆盖率统计方法只统计增量代码覆盖率,因而能够大大减少代码扫描的时间,提高代码覆盖率的统计效率。
在本申请的一些实施例中,所述基于人工智能的代码覆盖率统计方法还包括:对JaCoCo工具(代码覆盖率统计工具)进行改造,使用改造后的JaCoCo工具计算增量代码覆盖率。
在本申请的一些实施例中,所述对JaCoCo工具进行改造包括:调用createAnalyzingVisitor方法生成ASM类访问器;通过所述ASM类访问器改造visitMethod方法中的探针,让所述visitMethod方法中的探针插入每个类新增或变更的方法中,使得所述visitMethod方法对每个类新增或变更的方法做解析。
下面将进一步说明JaCoCo工具的改造过程:
JaCoCo工具的注入逻辑用的是ASM库(字节码操纵框架)。在本申请的实施例中,生成全量覆盖率统计的流程不变,对解析exec文件生成覆盖率报告的流程做改造,以便让JaCoCo工具生成我们所需要的增量代码覆盖率。JaCoCo工具对exec文件的解析主要是在Analyzer(分析器,软件工具)的analyzeClass(final byte[]source)方法里面。在本申请的实施例中,调用createAnalyzingVisitor方法生成一个ASM类访问器,该ASM类访问器能够对class文件的方法进行动态修改,例如在某个方法中删除/添加/修改指令。方法维度级别的探针计算逻辑是在ClassProbesAdapter类的visitMethod方法里面。我们只需要通过生成的所述ASM类访问器改造visitMethod方法即可,使它对提取出的每个类新增或变更的方法做解析,非指定的类的方法不做处理。其中,visitMethod方法和createAnalyzingVisitor方法属于ASM库。
在本申请的实施例中,JaCoCo工具是字节码注入方式,具体通过探针(可以简单理解成用指令实现的函数)来注入。探针是字节码指令集,被插入到java代码中,一个程序执行后探针可以被记录。探针不会改变原有代码的行为,但能够用于记录原有代码已被执行的事实。因此,只需要对visitMethod方法中的探针进行改造,就能改造visitMethod方法。
在本申请的一些实施例中,所述基于人工智能的代码覆盖率统计方法还包括:对包含所述增量代码的源码进行插桩操作以生成插过桩的class文件;在所述class文件中添加指定的JAVA源文件;所述JAVA源文件中包含日志收集文件,所述日志收集文件用于收集代码覆盖率的日志信息,所述日志信息中包含探针的覆盖执行信息;测试过程中调用所述日志收集文件收集代码覆盖率的日志信息;对收集到的代码覆盖率的日志信息进行数据组合生成所述exec文件。
在本申请的一些实施例中,所述计算增量代码覆盖率的步骤包括:计算类维度的增量代码覆盖率、方法维度的增量代码覆盖率、分支维度的增量代码覆盖率、行维度的增量代码覆盖率以及指令维度的增量代码覆盖率中的至少一个。
在需要计算类维度的增量代码覆盖率时,获取所述增量代码中被执行过至少一次的类的数量和所述增量代码中包含的所有类的数量,然后结合被执行过至少一次的类的数量和所有类的数量计算所述类维度的增量代码覆盖率。被执行过至少一次的类的数量根据所述增量代码中探针的覆盖执行信息获得。
通过以下方式计算所述类维度的增量代码覆盖率:
Nc指的是所述增量代码中所有被执行过至少一次的类的数量,Ac指的是所述增量代码中类的总数。
在需要计算方法维度的增量代码覆盖率时,获取所述增量代码中被执行过至少一次的方法的数量和所述增量代码中包含的所有方法的数量,然后结合被执行过至少一次的方法的数量和所有方法的数量计算所述方法维度的增量代码覆盖率。被执行过至少一次的方法的数量根据所述增量代码中探针的覆盖执行信息获得。
通过以下方式计算所述方法维度的增量代码覆盖率:
Nw指的是所述增量代码中所有被执行过至少一次的方法的数量,Aw指的是所述增量代码中方法的总数。
在需要计算分支维度的增量代码覆盖率时,获取所述增量代码中被执行过至少一次的分支的数量和所述增量代码中包含的所有分支的数量,然后结合被执行过至少一次的分支的数量和所有分支的数量计算所述分支维度的增量代码覆盖率。被执行过至少一次的分支的数量根据所述增量代码中探针的覆盖执行信息获得。
通过以下方式计算所述分支维度的增量代码覆盖率:
Ns指的是所述增量代码中所有被执行过至少一次的分支的数量,As指的是所述增量代码中分支的总数。
在需要计算行维度的增量代码覆盖率时,获取所述增量代码中被执行过至少一次的行的数量和所述增量代码中包含的所有行的数量,然后结合被执行过至少一次的行的数量和所有行的数量计算所述行维度的增量代码覆盖率。被执行过至少一次的行的数量根据所述增量代码中探针的覆盖执行信息获得。
通过以下方式计算所述行维度的增量代码覆盖率:
Nh指的是所述增量代码中所有被执行过至少一次的行的数量,Ah指的是所述增量代码中行的总数。
在需要计算指令维度的增量代码覆盖率时,获取所述增量代码中被执行过至少一次的指令的数量和所述增量代码中包含的所有指令的数量,然后结合被执行过至少一次的指令的数量和所有指令的数量计算所述行维度的增量代码覆盖率。被执行过至少一次的指令的数量根据所述增量代码中探针的覆盖执行信息获得。
通过以下方式计算所述指令维度的增量代码覆盖率:
Nz指的是所述增量代码中所有被执行过至少一次的指令的数量,Az指的是所述增量代码中指令的总数。
本申请的一实施例公开一种基于人工智能的代码覆盖率统计装置。
参考图2,为本申请的一实施例中所述基于人工智能的代码覆盖率统计装置的示意图。
如图2中所示意的,所述基于人工智能的代码覆盖率统计装置包括:
exec文件获取模块10,用于获取代码测试时产生的exec文件,所述exec文件中包含探针的覆盖执行信息。
滤除模块20,用于滤除所述exec文件中的非测试文件和非java文件。
增量代码获取模块30,用于根据探针的覆盖执行信息获取基线提交代码与测试提交代码之间的增量代码。
解析模块40,用于对所述增量代码进行解析。
计算模块50,用于计算增量代码覆盖率。
本申请中的基于人工智能的代码覆盖率统计装置只统计增量代码覆盖率,因而能够大大减少代码扫描的时间,提高代码覆盖率的统计效率。本申请中的技术方案提出了现有技术中没有的技术构思,实用性强,有利于为软件测试人员的提供准确的被测软件的增量代码覆盖率,提高了软件测试的效果。
参考图3,为本申请的一实施例中所述解析模块40的示意图。在本申请的一些实施例中,所述解析模块40包括类维度解析子模块41、方法维度解析子模块42、分支维度解析子模块43、行维度解析子模块44以及指令维度解析子模块45中的至少一个。
所述类维度指的计数单元为被测试程序的一个类文件;所述类维度解析子模块41用于将所述增量代码解析至类维度。所述方法维度指的计数单元为被测试程序的一个方法;所述方法维度解析子模块42用于将所述增量代码解析至方法维度。所述分支维度的计数单元为判断语句的一个分支;所述分支维度解析子模块43用于将所述增量代码解析至分支维度。所述行维度指的计数单元为被测试程序的一行代码;行维度解析子模块44用于将所述增量代码解析至行维度。所述指令维度的计数单元为一个java二进制代码指令;指令维度解析子模块45用于将所述增量代码解析至指令维度。
参考图4,为本申请的一实施例中所述计算模块50的示意图。在本申请的一些实施例中,所述计算模块50包括类维度计算子模块51、方法维度计算子模块52、分支维度计算子模块53、行维度计算子模块54以及指令维度计算子模块55中的至少一个。所述类维度计算子模块51用于计算类维度的增量代码覆盖率。所述方法维度计算子模块52用于计算方法维度的增量代码覆盖率。所述分支维度计算子模块53用于计算分支维度的增量代码覆盖率。所述行维度计算子模块54用于计算行维度的增量代码覆盖率。所述指令维度计算子模块55用于计算指令维度的增量代码覆盖率。
在本申请的一些实施例中,所述类维度计算子模块51计算的类维度的 Nc指的是所述增量代码中所有被执行过至少一次的类的数量,Ac指的是所述增量代码中类的总数。
所述方法维度计算子模块52计算的方法维度的 Nw指的是所述增量代码中所有被执行过至少一次的方法的数量,Aw指的是所述增量代码中方法的总数。
所述分支维度计算子模块53计算的分支维度的 Ns指的是所述增量代码中所有被执行过至少一次的分支的数量,As指的是所述增量代码中分支的总数。
所述行维度计算子模块54计算的行维度的Nh指的是所述增量代码中所有被执行过至少一次的行的数量,Ah指的是所述增量代码中行的总数。
所述指令维度计算子模块55计算的指令维度的 Nz指的是所述增量代码中所有被执行过至少一次的指令的数量,Az指的是所述增量代码中指令的总数。
本申请的一实施例公开了一种计算机设备。具体请参阅图5,为本申请的一实施例中计算机设备100基本结构框图。
如图5中所示意的,所述计算机设备100包括通过系统总线相互通信连接存储器101、处理器102、网络接口103。需要指出的是,图5中仅示出了具有组件101-103的计算机设备100,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
所述存储器101至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器101可以是所述计算机设备100的内部存储单元,例如该计算机设备100的硬盘或内存。在另一些实施例中,所述存储器101也可以是所述计算机设备100的外部存储设备,例如该计算机设备100上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器101还可以既包括所述计算机设备100的内部存储单元也包括其外部存储设备。本实施例中,所述存储器101通常用于存储安装于所述计算机设备100的操作系统和各类应用软件,例如上述基于人工智能的代码覆盖率统计方法的程序代码等。此外,所述存储器101还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器102在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器102通常用于控制所述计算机设备100的总体操作。本实施例中,所述处理器102用于运行所述存储器101中存储的程序代码或者处理数据,例如运行上述基于人工智能的代码覆盖率统计方法的程序代码。
所述网络接口103可包括无线网络接口或有线网络接口,该网络接口103通常用于在所述计算机设备100与其他电子设备之间建立通信连接。
本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有单据信息录入程序,所述单据信息录入程序可被至少一个处理器执行,以使所述至少一个处理器执行上述任意一种基于人工智能的代码覆盖率统计方法的步骤。
最后应说明的是,显然以上所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例,附图中给出了本申请的较佳实施例,但并不限制本申请的专利范围。本申请可以以许多不同的形式来实现,相反地,提供这些实施例的目的是使对本申请的公开内容的理解更加透彻全面。尽管参照前述实施例对本申请进行了详细的说明,对于本领域的技术人员来而言,其依然可以对前述各具体实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等效替换。凡是利用本申请说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理在本申请专利保护范围之内。
Claims (10)
1.一种基于人工智能的代码覆盖率统计方法,其特征在于,包括:
获取代码测试时产生的exec文件,所述exec文件中包含探针的覆盖执行信息;
滤除所述exec文件中的非测试文件和非java文件;
根据探针的覆盖执行信息获得基线提交代码与测试提交代码之间的增量代码;
对所述增量代码进行解析;
计算增量代码覆盖率。
2.根据权利要求1所述基于人工智能的代码覆盖率统计方法,其特征在于,所述对所述增量代码进行解析的步骤包括:将所述增量代码解析至类维度、方法维度、分支维度、行维度以及指令维度中的至少一个;
所述类维度指的计数单元为被测试程序的一个类文件;
所述方法维度指的计数单元为被测试程序的一个方法;
所述分支维度的计数单元为判断语句的一个分支;
所述行维度指的计数单元为被测试程序的一行代码;
所述指令维度的计数单元为一个java二进制代码指令。
3.根据权利要求2所述基于人工智能的代码覆盖率统计方法,其特征在于,所述计算增量代码覆盖率的步骤包括:计算类维度的增量代码覆盖率、方法维度的增量代码覆盖率、分支维度的增量代码覆盖率、行维度的增量代码覆盖率以及指令维度的增量代码覆盖率中的至少一个。
4.根据权利要求3所述基于人工智能的代码覆盖率统计方法,其特征在于,所述计算类维度的增量代码覆盖率、方法维度的增量代码覆盖率、分支维度的增量代码覆盖率、行维度的增量代码覆盖率以及指令维度的增量代码覆盖率中的至少一个包括:
通过以下方式计算所述类维度的增量代码覆盖率:
Nc指的是所述增量代码中所有被执行过至少一次的类的数量,Ac指的是所述增量代码中类的总数;
或,通过以下方式计算所述方法维度的增量代码覆盖率:
Nw指的是所述增量代码中所有被执行过至少一次的方法的数量,Aw指的是所述增量代码中方法的总数;
或,通过以下方式计算所述分支维度的增量代码覆盖率:
Ns指的是所述增量代码中所有被执行过至少一次的分支的数量,As指的是所述增量代码中分支的总数;
或,通过以下方式计算所述行维度的增量代码覆盖率:
Nh指的是所述增量代码中所有被执行过至少一次的行的数量,Ah指的是所述增量代码中行的总数;
或,通过以下方式计算所述指令维度的增量代码覆盖率:
Nz指的是所述增量代码中所有被执行过至少一次的指令的数量,Az指的是所述增量代码中指令的总数。
5.根据权利要求1所述基于人工智能的代码覆盖率统计方法,其特征在于,还包括:对JaCoCo工具进行改造,使用改造后的JaCoCo工具计算增量代码覆盖率。
6.根据权利要求5所述的基于人工智能的代码覆盖率统计方,其特征在于,所述对JaCoCo工具进行改造包括:
调用createAnalyzingVisitor方法生成ASM类访问器;
通过所述ASM类访问器改造visitMethod方法中的探针,让所述visitMethod方法中的探针插入每个类新增或变更的方法中,使得所述visitMethod方法对每个类新增或变更的方法做解析。
7.根据权利要求1所述的基于人工智能的代码覆盖率统计方,其特征在于,还包括:
对包含所述增量代码的源码进行插桩操作以生成插过桩的class文件;
在所述class文件中添加指定的JAVA源文件;所述JAVA源文件中包含日志收集文件,所述日志收集文件用于收集代码覆盖率的日志信息,所述日志信息中包含探针的覆盖执行信息;
测试过程中调用所述日志收集文件收集代码覆盖率的日志信息;
对收集到的代码覆盖率的日志信息进行数据组合生成所述exec文件。
8.一种基于人工智能的代码覆盖率统计装置,其特征在于,包括:
exec文件获取模块,用于获取代码测试时产生的exec文件,所述exec文件中包含探针的覆盖执行信息;
滤除模块,用于滤除所述exec文件中的非测试文件和非java文件;
增量代码获取模块,用于根据探针的覆盖执行信息获取基线提交代码与测试提交代码之间的增量代码;
解析模块,用于对所述增量代码进行解析;
计算模块,用于计算增量代码覆盖率。
9.一种计算机设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至7中任一项所述基于人工智能的代码覆盖率统计方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7中任一项基于人工智能的代码覆盖率统计方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811298148.2A CN109857631A (zh) | 2018-11-02 | 2018-11-02 | 基于人工智能的代码覆盖率统计方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811298148.2A CN109857631A (zh) | 2018-11-02 | 2018-11-02 | 基于人工智能的代码覆盖率统计方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109857631A true CN109857631A (zh) | 2019-06-07 |
Family
ID=66889857
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811298148.2A Pending CN109857631A (zh) | 2018-11-02 | 2018-11-02 | 基于人工智能的代码覆盖率统计方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109857631A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532174A (zh) * | 2019-07-24 | 2019-12-03 | 平安科技(深圳)有限公司 | 计算增量代码覆盖率的方法、装置、计算机设备及存储介质 |
CN110990265A (zh) * | 2019-11-12 | 2020-04-10 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN112363936A (zh) * | 2020-11-12 | 2021-02-12 | 广州品唯软件有限公司 | 差异覆盖率测试方法、装置、计算机设备和存储介质 |
CN112631926A (zh) * | 2020-12-29 | 2021-04-09 | 平安银行股份有限公司 | 代码测试覆盖率显示方法、装置、计算机设备及存储介质 |
CN112948249A (zh) * | 2021-03-03 | 2021-06-11 | 浙江百应科技有限公司 | 一种基于JaCoCo基础上实现增量代码覆盖率统计的方法和装置 |
CN113568839A (zh) * | 2021-08-03 | 2021-10-29 | 京东科技控股股份有限公司 | 软件测试和统计测试覆盖率的方法、装置、设备及介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722436A (zh) * | 2012-05-29 | 2012-10-10 | 百度在线网络技术(北京)有限公司 | 一种增量覆盖信息的统计方法和装置 |
US20160299835A1 (en) * | 2015-04-08 | 2016-10-13 | Opshub, Inc. | Method and system for providing delta code coverage information |
CN106557413A (zh) * | 2015-09-25 | 2017-04-05 | 伊姆西公司 | 基于代码覆盖率获取测试用例的方法和设备 |
CN106681912A (zh) * | 2016-12-08 | 2017-05-17 | 武汉斗鱼网络科技有限公司 | 用于Android系统的代码覆盖率的自动化测试方法及装置 |
CN108170610A (zh) * | 2018-01-17 | 2018-06-15 | 北京网信云服信息科技有限公司 | 确定测试覆盖率的方法和装置 |
CN108519945A (zh) * | 2018-03-21 | 2018-09-11 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法、装置及存储设备 |
-
2018
- 2018-11-02 CN CN201811298148.2A patent/CN109857631A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722436A (zh) * | 2012-05-29 | 2012-10-10 | 百度在线网络技术(北京)有限公司 | 一种增量覆盖信息的统计方法和装置 |
US20160299835A1 (en) * | 2015-04-08 | 2016-10-13 | Opshub, Inc. | Method and system for providing delta code coverage information |
CN106557413A (zh) * | 2015-09-25 | 2017-04-05 | 伊姆西公司 | 基于代码覆盖率获取测试用例的方法和设备 |
CN106681912A (zh) * | 2016-12-08 | 2017-05-17 | 武汉斗鱼网络科技有限公司 | 用于Android系统的代码覆盖率的自动化测试方法及装置 |
CN108170610A (zh) * | 2018-01-17 | 2018-06-15 | 北京网信云服信息科技有限公司 | 确定测试覆盖率的方法和装置 |
CN108519945A (zh) * | 2018-03-21 | 2018-09-11 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法、装置及存储设备 |
Non-Patent Citations (1)
Title |
---|
WINTA: "增量代码覆盖率工具", pages 1 - 7, Retrieved from the Internet <URL:https://tech.youzan.com/yzicov/> * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532174A (zh) * | 2019-07-24 | 2019-12-03 | 平安科技(深圳)有限公司 | 计算增量代码覆盖率的方法、装置、计算机设备及存储介质 |
CN110532174B (zh) * | 2019-07-24 | 2024-05-31 | 平安科技(深圳)有限公司 | 计算增量代码覆盖率的方法、装置、计算机设备及存储介质 |
CN110990265A (zh) * | 2019-11-12 | 2020-04-10 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN110990265B (zh) * | 2019-11-12 | 2023-10-03 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN112363936A (zh) * | 2020-11-12 | 2021-02-12 | 广州品唯软件有限公司 | 差异覆盖率测试方法、装置、计算机设备和存储介质 |
CN112363936B (zh) * | 2020-11-12 | 2024-08-13 | 广州品唯软件有限公司 | 差异覆盖率测试方法、装置、计算机设备和存储介质 |
CN112631926A (zh) * | 2020-12-29 | 2021-04-09 | 平安银行股份有限公司 | 代码测试覆盖率显示方法、装置、计算机设备及存储介质 |
CN112631926B (zh) * | 2020-12-29 | 2024-06-25 | 平安银行股份有限公司 | 代码测试覆盖率显示方法、装置、计算机设备及存储介质 |
CN112948249A (zh) * | 2021-03-03 | 2021-06-11 | 浙江百应科技有限公司 | 一种基于JaCoCo基础上实现增量代码覆盖率统计的方法和装置 |
CN113568839A (zh) * | 2021-08-03 | 2021-10-29 | 京东科技控股股份有限公司 | 软件测试和统计测试覆盖率的方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109857631A (zh) | 基于人工智能的代码覆盖率统计方法、装置、设备及存储介质 | |
CN110928718B (zh) | 一种基于关联分析的异常处理方法、系统、终端及介质 | |
CN108268253B (zh) | 接口代码生成方法及终端设备 | |
CN107239392B (zh) | 一种测试方法、装置、终端及存储介质 | |
CN110287097A (zh) | 批量测试方法、装置及计算机可读存储介质 | |
CN111367786B (zh) | 一种符号执行方法、电子设备以及存储介质 | |
US8780098B1 (en) | Viewer for multi-dimensional data from a test environment | |
US9311345B2 (en) | Template based database analyzer | |
CN106033469A (zh) | 用于大数据的结构化查询的高效性能预测的方法和系统 | |
CN114546868A (zh) | 代码覆盖率测试方法、装置和电子设备 | |
CN106201857B (zh) | 测试用例的选取方法及装置 | |
CN112559525B (zh) | 数据检查系统、方法、装置和服务器 | |
CN111966587A (zh) | 数据采集方法、装置和设备 | |
CN117493188A (zh) | 接口测试方法及装置、电子设备及存储介质 | |
CN112685316A (zh) | 代码执行路径的获取方法、装置、计算机设备及存储介质 | |
Schmidt et al. | TREM: a tool for mining timed regular specifications from system traces | |
Shariat Yazdi et al. | Synthesizing realistic test models | |
CN113360362B (zh) | 一种动态sql效率检查方法及插件 | |
CN108334313A (zh) | 用于大型soc研发的持续集成方法、装置及代码管理系统 | |
CN108933689A (zh) | 一种数据采集系统和方法 | |
Cao et al. | Improved metrics for encapsulation based on information hiding | |
CN112416995A (zh) | 一种数据统计方法、装置、计算机设备及存储介质 | |
CN109271296A (zh) | 一种冻屏测试方法 | |
CN111324542B (zh) | 一种Web应用回归测试用例选择系统、方法以及设备 | |
Yu et al. | Structure analysis of function call network based on percolation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |