【技术实现步骤摘要】
代码覆盖率的处理方法、装置、设备及存储介质
[0001]本专利技术涉及计算机
,尤其涉及一种代码覆盖率的处理方法、装置、设备及存储介质。
技术介绍
[0002]目前,为了快速粗略估计代码的质量,需要衡量代码方法的覆盖率,以分析未覆盖的方法是否存在代码夹带。Jacoco是一个针对Java语言开源的覆盖率工具,现有技术中一般使用Jacoco工具来得到代码覆盖率。利用jacoco工具分析覆盖率,一方面需要获取代码仓库权限,并获取源码,而仓库权限一般不会轻易获得,另一方面需要反复重启程序,重启会导致覆盖率数据丢失,因此,利用jacoco工具分析覆盖率时的处理效率低,不能实时快速地得到得到覆盖率。
技术实现思路
[0003]本专利技术的目的在于提供一种代码覆盖率的处理方法、装置、设备及存储介质,旨在快速实时地获取覆盖率,提高处理效率。
[0004]本专利技术提供一种代码覆盖率的处理方法,包括:
[0005]开启JavaAgent代理程序,当接收网络请求时,基于所述JavaAgent代理程序为所述网络请求开启对应的处理线程,在所述处理线程内设置一变量,所述变量的属性为时间;
[0006]在运行所述网络请求对应的应用程序时,获取预定目录下所述应用程序的类文件,基于所述JavaAgent代理程序对所述类文件中的各个函数进行插桩;
[0007]当所述应用程序在运行过程中调用到已插桩的函数时,基于所述JavaAgent代理程序录制所述已插桩的函数,并获取所述变量所记录的时间; >[0008]在所述应用程序运行结束时,基于所记录的时间获取所录制的函数,对所录制的函数进行去重处理,得到被调用函数的数量;
[0009]获取所述类文件中的调用关系,基于所述调用关系获取所述应用程序函数的总数;
[0010]基于被调用函数的数量及所述总数计算覆盖率。
[0011]本专利技术还提供一种代码覆盖率的处理装置,包括:
[0012]开启模块,用于开启JavaAgent代理程序,当接收网络请求时,基于所述JavaAgent代理程序为所述网络请求开启对应的处理线程,在所述处理线程内设置一变量,所述变量的属性为时间;
[0013]插桩模块,用于在运行所述网络请求对应的应用程序时,获取预定目录下所述应用程序的类文件,基于所述JavaAgent代理程序对所述类文件中的各个函数进行插桩;
[0014]录制模块,用于当所述应用程序在运行过程中调用到已插桩的函数时,基于所述JavaAgent代理程序录制所述已插桩的函数,并获取所述变量所记录的时间;
[0015]去重模块,用于在所述应用程序运行结束时,基于所记录的时间获取所录制的函
数,对所录制的函数进行去重处理,得到被调用函数的数量;
[0016]获取模块,用于获取所述类文件中的调用关系,基于所述调用关系获取所述应用程序函数的总数;
[0017]处理模块,用于基于被调用函数的数量及所述总数计算覆盖率。
[0018]本专利技术还提供一种计算机设备,所述计算机设备包括存储器及与所述存储器连接的处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述的代码覆盖率的处理方法的步骤。
[0019]本专利技术还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的代码覆盖率的处理方法的步骤。
[0020]本专利技术的有益效果是:本专利技术首先通过JavaAgent代理程序对应用程序的类文件中的各个函数进行插桩,以采集各个函数的相关信息,然后,在应用程序在运行过程中,通过JavaAgent代理程序录制运行过程中的被调用函数的相关信息,获得被调用函数的数量及被调用的时间,最后,通过应用程序的类文件来获得函数的总数,根据被调用函数的数量及总数计算函数的覆盖率,本专利技术能够快速实时地获取函数覆盖率、处理效率高。
附图说明
[0021]图1为本专利技术代码覆盖率的处理方法一实施例的应用环境示意图;
[0022]图2为本专利技术代码覆盖率的处理方法第一实施例的流程示意图;
[0023]图3为图2中的获取所述类文件中的调用关系,基于所述调用关系获取所述应用程序函数的总数步骤的细化流程示意图;
[0024]图4为本专利技术调用关系的树形示意图;
[0025]图5为本专利技术代码覆盖率的处理装置一实施例的结构示意图;
[0026]图6为本专利技术计算机设备一实施例的硬件架构的示意图。
具体实施方式
[0027]为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0028]需要说明的是,在本专利技术中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本专利技术要求的保护范围之内。
[0029]参阅图1所示,是本专利技术代码覆盖率的处理方法一实施例的应用环境示意图。该实施例包括终端1、服务端2,其中,终端1接收请求(例如HTTP请求),将请求发送至服务器2进行处理,服务器2基于请求运行应用程序,计算覆盖率。
[0030]本专利技术提供的代码覆盖率的处理方法,可应用在如图1的应用环境中。
[0031]参阅图2所示,为本专利技术代码覆盖率的处理方法第一实施例的流程示意图。以代码覆盖率的处理方法应用在图1的环境中为例进行说明,包括:
[0032]步骤S1,开启JavaAgent代理程序,当接收网络请求时,基于所述JavaAgent代理程序为所述网络请求开启对应的处理线程,在所述处理线程内设置一变量,所述变量的属性为时间;
[0033]其中,JavaAgent是一个独立于应用程序的代理程序,用来协助监测、运行甚至替换的程序。JavaAgent代理程序可以是在主程序运行之前运行的程序,也可以是主程序运行之后运行的程序。本实施例中的JavaAgent为在主程序运行后运行的程序。在开启JavaAgent代理程后,JavaAgent代理程序基于websocket开启一个监听端口,用于接收命令。
[0034]其中,网络请求例如为http请求、资源请求、文件请求、状态请求等等,在通过监听端口接收到终端发送的网络请求时,JavaAgent代理程序会为该网络请求开启处理线程,并在该处理线程中设置一个属性为时间的变量,该处理线程用于全程跟踪该网络请求对应的应用程序的运本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种代码覆盖率的处理方法,其特征在于,包括:开启JavaAgent代理程序,当接收网络请求时,基于所述JavaAgent代理程序为所述网络请求开启对应的处理线程,在所述处理线程内设置一变量,所述变量的属性为时间;在运行所述网络请求对应的应用程序时,获取预定目录下所述应用程序的类文件,基于所述JavaAgent代理程序对所述类文件中的各个函数进行插桩;当所述应用程序在运行过程中调用到已插桩的函数时,基于所述JavaAgent代理程序录制所述已插桩的函数,并获取所述变量所记录的时间;在所述应用程序运行结束时,基于所记录的时间获取所录制的函数,对所录制的函数进行去重处理,得到被调用函数的数量;获取所述类文件中的调用关系,基于所述调用关系获取所述应用程序函数的总数;基于被调用函数的数量及所述总数计算覆盖率。2.根据权利要求1所述的代码覆盖率的处理方法,其特征在于,所述获取所述类文件中的调用关系,基于所述调用关系获取所述应用程序函数的总数的步骤,具体包括:接收上报的所述应用程序的类文件,以访问者模式遍历所述类文件,得到所述类文件中的调用关系;分析所述调用关系得到所述调用链路,基于所述调用链路获取所述应用程序函数的总数。3.根据权利要求1或2所述的代码覆盖率的处理方法,其特征在于,所述获取所述类文件中的调用关系之后,还包括:判断所述调用关系中的每个函数是否为所述被调用函数;若是,则对所述调用关系中的被调用函数进行突出显示处理;将进行突出显示处理后的所述调用关系发送至终端,以进行展示。4.根据权利要求1所述的代码覆盖率的处理方法,其特征在于,所述基于所述JavaAgent代理程序对所述类文件中的各个函数进行插桩的步骤,具体包括:基于所述JavaAgent代理程序获取所述处理线程内的变量,并调用java字节码操作与分析框架模块获取所述类文件中的各个函数名称及函数参数。5.根据权利要求1所述的代码覆盖率的处理方法,其特征在于,所述对所录制的函数进行去重处理,具体包括:获取所录制的函数的函数名称及函数参数个数;对于函数名称及参...
【专利技术属性】
技术研发人员:余卫平,
申请(专利权)人:平安银行股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。