一种获取代码覆盖率的方法和装置与流程

文档序号:11949993阅读:276来源:国知局
一种获取代码覆盖率的方法和装置与流程

本发明涉及软件开发技术领域,尤其涉及一种获取代码覆盖率的方法和装置。



背景技术:

目前,代码覆盖率反映测试用例对被测软件覆盖程度的重要指标,是用来度量测试完整性的一个参考值,通过代码覆盖率数据可以评估测试是否充分。在软件开发的过程中,通过客户端获取代码覆盖率数据是基于被监控项目的全部代码生成的。在很多项目工期紧张的情况下,基于全部代码的覆盖率数据对开发人员的指导意义并不是很大。即便客户端可以使用一些过滤条件来减少不关心的类,依然不能反映修改前及修改后这两个版本代码之间差异代码信息的覆盖情况,即开发人员无法准确获知被修改代码的情况,使得开发人员很难获取所需的数据,从而导致为上线增加覆盖率的测试用例不够方便快捷。



技术实现要素:

本发明的主要目的在于提供一种获取代码覆盖率的方法和装置,旨在提高代码覆盖率的获取准确性,以及提高开发人员增加代码覆盖率的测试用例的便捷性。

为实现上述目的,本发明提供了一种获取代码覆盖率的方法,包括:

将原始版本代码的唯一标识及修改版本代码的唯一标识发送至服务器,供所述服务器根据所述原始版本代码的唯一标识及所述修改版本代码的唯一标识,获取原始版本代码及修改版本代码,根据所述原始版本代码与所述修改版本代码获取总代码覆盖率数据及差异代码信息,将所述总代码覆盖率数据及所述差异代码信息反馈至客户端;

接收所述总代码覆盖率数据及所述差异代码信息,根据所述总代码覆盖率数据及所述差异代码信息获取差异代码覆盖率数据。

优选地,所述差异代码覆盖率数据包括覆盖代码中被修改代码的行数占修改版本代码中被修改代码的总行数的比例,以及覆盖代码中被修改代码的包、类、方法及行信息。

优选地,所述总代码覆盖率数据包括覆盖代码的包、类、方法及行信息,所述差异代码信息包括被修改代码的包、类、方法及行信息,所述根据所述总代码覆盖率数据及所述差异代码信息获取差异代码覆盖率数据包括:

将所述覆盖代码的包、类、方法及行信息与被修改代码的包、类、方法及行信息进行对比,获取覆盖代码中被修改代码占修改版本代码中被修改代码的总行数的比例,及覆盖代码中被修改代码的包、类、方法及行信息。

优选地,所述接收所述总代码覆盖率数据及所述差异代码信息,根据所述总代码覆盖率数据及所述差异代码信息获取差异代码覆盖率数据之后包括:

根据所述差异代码覆盖率数据、所述总代码覆盖率数据及所述差异代码信息生成测试报告。

优选地,所述根据所述差异代码信息覆盖率生成测试报告包括:

根据所述差异代码覆盖率数据、所述总代码覆盖率数据及所述差异代码信息生成测试报告,并确定覆盖代码中被修改代码的包、类、方法及行信息;

在所述测测试报告中标注所述覆盖代码中被修改代码的包、类、方法及行信息,并显示覆盖代码中被修改代码的行数占修改版本代码中被修改代码的总行数的比例。

此外,为实现上述目的,本发明还提供了一种获取代码覆盖率的装置,包括:

发送模块,用于将原始版本代码的唯一标识及修改版本代码的唯一标识发送至服务器,供所述服务器根据所述原始版本代码的唯一标识及所述修改版本代码的唯一标识,获取原始版本代码及修改版本代码,根据所述原始版本代码与所述修改版本代码获取总代码覆盖率数据及差异代码信息,将所述总代码覆盖率数据及所述差异代码信息反馈至客户端;

获取模块,用于接收所述总代码覆盖率数据及所述差异代码信息,根据所述总代码覆盖率数据及所述差异代码信息获取差异代码覆盖率数据。

优选地,所述差异代码覆盖率数据包括覆盖代码中被修改代码的行数占修改版本代码中被修改代码的总行数的比例,以及覆盖代码中被修改代码的包、类、方法及行信息。

优选地,所述总代码覆盖率数据包括覆盖代码的包、类、方法及行信息,所述差异代码信息包括被修改代码的包、类、方法及行信息,所述获取模块还用于,将所述覆盖代码的包、类、方法及行信息与被修改代码的包、类、方法及行信息进行对比,获取覆盖代码中被修改代码占修改版本代码中被修改代码的总行数的比例,及覆盖代码中被修改代码的包、类、方法及行信息。

优选地,所述获取代码覆盖率的装置还包括:

报告生成模块,用于根据所述差异代码覆盖率数据、所述总代码覆盖率数据及所述差异代码信息生成测试报告。

优选地,所述报告生成模块还用于,根据所述差异代码覆盖率数据、所述总代码覆盖率数据及所述差异代码信息生成测试报告,并确定覆盖代码中被修改代码的包、类、方法及行信息;在所述测测试报告中标注所述覆盖代码中被修改代码的包、类、方法及行信息,并显示覆盖代码中被修改代码的行数占修改版本代码中被修改代码的总行数的比例。

本发明实施例提供获取代码覆盖率的方法和装置,客户端通过接收服务器发送的根据原始版本代码及修改版本代码获取的总代码覆盖率数据及差异代码信息,并根据总代码覆盖率数据及差异代码信息获取差异代码覆盖率数据。使得客户端可以获取同一个项目中两个不同版本代码的差异代码覆盖率数据,可以让开发人员方便的了解被修改代码的代码覆盖率情况,不仅提高了代码覆盖率的获取准确性,而且提高了开发人员增加代码覆盖率的测试用例的便捷性。

附图说明

图1为本发明获取代码覆盖率的方法第一实施例的流程示意图;

图2为本发明基于jacoco实现代码覆盖率数据获取的结构示意图;

图3为本发明代码覆盖率数据获取结果的示意图;

图4为本发明获取代码覆盖率的方法第三实施例的流程示意图;

图5为本发明获取代码覆盖率的装置第一实施例的功能模块示意图;

图6为本发明获取代码覆盖率的装置第三实施例的功能模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,示出了本发明一种获取代码覆盖率的方法第一实施例。该实施例的获取代码覆盖率的方法包括:

步骤S10、将原始版本代码的唯一标识及修改版本代码的唯一标识发送至服务器,供所述服务器根据所述原始版本代码的唯一标识及所述修改版本代码的唯一标识,获取原始版本代码及修改版本代码,根据所述原始版本代码与所述修改版本代码获取总代码覆盖率数据及差异代码信息,将所述总代码覆盖率数据及所述差异代码信息反馈至客户端;

代码覆盖率是反映测试用例对被测程序覆盖程度的重要指标,也是衡量测试完整性的一个参考值。无论是单元测试、应用程序接口测试(Application Programming Interface,API)还是功能测试,最终都是调用了程序的代码。测试结束后,通过代码覆盖率数据可以获知测试是否充分,测试的弱点在哪些方面,进而可以指导开发人员或测试者设计能够增加覆盖率的测试用例。

本实施例中,将以基于jacoco实现代码覆盖率数据的获取进行详细说明,Jacoco是一个开源的覆盖率工具。Jacoco可以嵌入到Ant、MavenAnt中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,例如,sonar、Jenkins等。它采用标准的JVM Tool Interface,把Jacoco Agent加入到JVM后启动,加载到JVM中的class具体被执行了哪些代码行将会被记录下来,Jacoco搜集这些执行信息直到JVM结束后生成测试报告。

如图2所示,Jacoco的JVM中包括JVMTI API、Jacoco Agent等,其中,JVMTI API获取原始版本代码与修改版本代码之间的代码覆盖率数据发送至Jacoco Agent;Jacoco Agent的Listener模块侦听是否接收到请求,在接收到Dump Request请求时,Jacoco Agent根据代码覆盖率数据生成测试报告。

基于jacoco实获取码覆盖率的过程中,开发修改的源代码会被存储至服务器预置的代码仓库中,即原始版本代码及修改版本代码均被存储至服务器的代码仓库中。首先客户端将原始版本代码的唯一标识及修改版本代码的唯一标识发送至服务器,该唯一标识可以是git提交号。

服务器接收到原始版本代码的唯一标识及修改版本代码的唯一标识后,执行测试用例,根据原始版本代码的唯一标识及修改版本代码的唯一标识从代码仓库中,查找原始版本代码及修改版本代码。服务器根据原始版本代码与修改版本代码来获取总代码覆盖率数据及差异代码信息,将总代码覆盖率数据及差异代码信息反馈至客户端。该总代码覆盖率数据包括覆盖代码的行数占总代码的行数的比例、覆盖代码的包、类、方法及行信息等,差异代码信息包括被修改代码的包、类、方法及行信息等,该行信息包括具体被修改的第几行代码及被修改的总行数。

步骤S20、接收所述总代码覆盖率数据及所述差异代码信息,根据所述总代码覆盖率数据及所述差异代码信息获取差异代码覆盖率数据。

客户端根据接收到的总代码覆盖率数据及差异代码信息,获取差异代码覆盖率数据。该差异代码覆盖率数据包括覆盖代码中被修改代码的行数占修改版本代码中被修改代码的总行数的比例,以及覆盖代码中被修改代码的包、类、方法及行信息。在代码覆盖率数据收集过程中,通过计算对应的包、类、方法的差异部分的覆盖率数据,并在该代码覆盖率数据收集的基础之上,添加了对差异部分代码的覆盖率数据统计。基于原始版本代码及修改版本代码这两个不同版本的源代码可计算和展现差异代码覆盖率(即被修改代码覆盖率),使得用户根据获取一个项目中两个不同版本的差异代码覆盖率,从而可以为上线提供决策依据。

如图3所示,为在测试代码覆盖率平台上显示差异代码覆盖率数据结果的示意图,图3中包括对行覆盖比例图、行覆盖率、差异行覆盖比例图、差异行覆盖率等信息进行显示。其中,SVR10.199.171.53_8081_ODS_Feature_flow为服务器的名称,元素的下拉列表中com.vipshop.oms.selling.order.service.preanalysis、com.vipshop.oms.oss.order等表示包名,每个包中包括类,类的下一级包括方法,方法中包括行代码,即在点击包后可展示出列表中所包含的类,点击类后可展示出列表中所包含的方法,点击方法后可展示出列表中所包含的行代码,从而可以显示差异代码信息并展现出某个包、类、方法下面有多少行差异代码信息被覆盖,以及差异代码信息的总行数等。

以下进行举例说明,在一实施例中,测试人员需要对提交号为A和提交号为B的这两个版本代码进行测试,测试人员通过客户端将提交号为A和提交号为B发送至服务器。服务器根据接收到提交号为A和提交号为B在预置的代码仓库中查询提交号为A的原始版本代码和提交号为B的修改版本代码。将原始版本代码与修改版本代码的每一行进行一一对比,可得到总共被修改11行代码,以及具体被修改了第6行至第16行代码等。假设源代码总共有100行代码,在测试的过程中运行了30行代码,则得到总代码覆盖率为30/100*100%=30%,并可获取到运行了第1行至第10行、第40行至第60行代码。然后服务器根据具体被修改了哪些行代码与运行了第1行至第10行、第40行至第60行代码进行比对,获取所运行的代码中包括了6行被修改代码及其包括的是第6行至第11行被修改行代码等差异代码信息,将得到的总代码覆盖率及差异代码信息反馈至客户端。客户端根据总代码覆盖率及差异代码信息,计算出差异代码覆盖率为6/11*100%=54.5%,以及得到差异代码信息为第6行至第11行代码。使得测试人员可灵活地选取所要测试的版本代码,并详细的展现出版本之间差异代码覆盖率数据,通过得到的差异代码覆盖率数据,从而让测试人员更精确的获知测试的准确度,可以更有的放矢的工作。

本发明实施例客户端通过接收服务器发送的根据原始版本代码及修改版本代码获取的总代码覆盖率数据及差异代码信息,并根据总代码覆盖率数据及差异代码信息获取差异代码覆盖率数据。使得客户端可以获取同一个项目中两个不同版本代码的差异代码覆盖率数据,可以让开发人员方便的了解被修改代码的代码覆盖率情况,不仅提高了代码覆盖率的获取准确性,而且提高了开发人员进行代码测试的便捷性。

进一步地,基于上述获取代码覆盖率的方法第一实施例,提出了本发明获取代码覆盖率的方法第二实施例,该实施例中上述步骤S20包括:将所述覆盖代码的包、类、方法及行信息与被修改代码的包、类、方法及行信息进行对比,获取覆盖代码中被修改代码占修改版本代码中被修改代码的总行数的比例,及覆盖代码中被修改代码的包、类、方法及行信息。

本实施例中,所述差异代码覆盖率数据包括覆盖代码中被修改代码的行数占修改版本代码中被修改代码的总行数的比例,以及覆盖代码中被修改代码的包、类、方法及行信息。所述总代码覆盖率数据包括覆盖代码的包、类、方法及行信息,所述差异代码信息包括被修改代码的包、类、方法及行信息。

客户端在接收到总代码覆盖率数据及差异代码信息后,根据总代码覆盖率数据及差异代码信息获取差异代码覆盖率数据的过程中,将覆盖代码的包、类、方法及行信息与被修改代码的包、类、方法及行信息进行对比,获取覆盖代码中被修改代码占修改版本代码中被修改代码的总行数的比例,及覆盖代码中被修改代码的包、类、方法及行信息。从而通过获取同一个项目中两个不同版本代码的差异代码覆盖率数据,可以让测试人员方便的了解被修改代码的代码覆盖率情况,更精确的获知测试的准确度,提高了测试人员进行代码测试的便捷性。

进一步地,如图4所示,基于上述获取代码覆盖率的方法第一或第二实施例,提出了本发明获取代码覆盖率的方法第三实施例,该实施例中上述步骤S20之后包括:步骤S30、根据所述差异代码覆盖率数据、所述总代码覆盖率数据及所述差异代码信息生成测试报告。

本实施例中,客户端可根据差异代码覆盖率数据、所述总代码覆盖率数据及所述差异代码信息等生成测试报告。具体地,根据所述差异代码覆盖率数据、所述总代码覆盖率数据及所述差异代码信息生成测试报告,并确定覆盖代码中被修改代码的包、类、方法及行信息;在所述测测试报告中标注所述覆盖代码中被修改代码的包、类、方法及行信息,并显示覆盖代码中被修改代码的行数占修改版本代码中被修改代码的总行数的比例。

本实施例在生成测试报告的过程中,可在测试报告中将差异行代码进行凸显,并展现其是否被覆盖,可分别计算出某个包、类、方法下面有多少行差异代码信息被覆盖,以及差异代码信息的总行数。测试人员可以根据测试报告找出程序中没有被执行到的代码位置,以便对代码进行修改,设计出更有效的覆盖率的测试用例以提高代码覆盖率。不仅提高了代码覆盖率的获取准确性,而且可以让测试人员更精确的获知测试的准确度,提高了测试人员进行代码测试的便捷性。

对应地,如图5所示,提出本发明一种获取代码覆盖率的装置第一实施例。该实施例的获取代码覆盖率的装置包括:

发送模块100,用于将原始版本代码的唯一标识及修改版本代码的唯一标识发送至服务器,供所述服务器根据所述原始版本代码的唯一标识及所述修改版本代码的唯一标识,获取原始版本代码及修改版本代码,根据所述原始版本代码与所述修改版本代码获取总代码覆盖率数据及差异代码信息,将所述总代码覆盖率数据及所述差异代码信息反馈至客户端;

代码覆盖率是反映测试用例对被测程序覆盖程度的重要指标,也是衡量测试完整性的一个参考值。无论是单元测试、应用程序接口测试(Application Programming Interface,API)还是功能测试,最终都是调用了程序的代码。测试结束后,通过代码覆盖率数据可以获知测试是否充分,测试的弱点在哪些方面,进而可以指导开发人员或测试者设计能够增加覆盖率的测试用例。

本实施例中,将以基于jacoco实现代码覆盖率数据的获取进行详细说明,Jacoco是一个开源的覆盖率工具。Jacoco可以嵌入到Ant、MavenAnt中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,例如,sonar、Jenkins等。它采用标准的JVM Tool Interface,把Jacoco Agent加入到JVM后启动,加载到JVM中的class具体被执行了哪些代码行将会被记录下来,Jacoco搜集这些执行信息直到JVM结束后生成测试报告。

如图2所示,Jacoco的JVM中包括JVMTI API、Jacoco Agent等,其中,JVMTI API获取原始版本代码与修改版本代码之间的代码覆盖率数据发送至Jacoco Agent;Jacoco Agent的Listener模块侦听是否接收到请求,在接收到Dump Request请求时,Jacoco Agent根据代码覆盖率数据生成测试报告。

基于jacoco实获取码覆盖率的过程中,开发修改的源代码会被存储至服务器预置的代码仓库中,即原始版本代码及修改版本代码均被存储至服务器的代码仓库中。首先客户端调用发送模块100将原始版本代码的唯一标识及修改版本代码的唯一标识发送至服务器,该唯一标识可以是git提交号。

服务器接收到原始版本代码的唯一标识及修改版本代码的唯一标识后,执行测试用例,根据原始版本代码的唯一标识及修改版本代码的唯一标识从代码仓库中,查找原始版本代码及修改版本代码。服务器根据原始版本代码与修改版本代码来获取总代码覆盖率数据及差异代码信息,将总代码覆盖率数据及差异代码信息反馈至客户端。该总代码覆盖率数据包括覆盖代码的行数占总代码的行数的比例、覆盖代码的包、类、方法及行信息等,差异代码信息包括被修改代码的包、类、方法及行信息等,该行信息包括具体被修改的第几行代码及被修改的总行数。

获取模块200,用于接收所述总代码覆盖率数据及所述差异代码信息,根据所述总代码覆盖率数据及所述差异代码信息获取差异代码覆盖率数据。

客户端根据接收到的总代码覆盖率数据及差异代码信息,由获取模块200获取差异代码覆盖率数据。该差异代码覆盖率数据包括覆盖代码中被修改代码的行数占修改版本代码中被修改代码的总行数的比例,以及覆盖代码中被修改代码的包、类、方法及行信息。在代码覆盖率数据收集过程中,通过计算对应的包、类、方法的差异部分的覆盖率数据,并在该代码覆盖率数据收集的基础之上,添加了对差异部分代码的覆盖率数据统计。基于原始版本代码及修改版本代码这两个不同版本的源代码可计算和展现差异代码覆盖率(即被修改代码覆盖率),使得用户根据获取一个项目中两个不同版本的差异代码覆盖率,从而可以为上线提供决策依据。

如图3所示,为在测试代码覆盖率平台上显示差异代码覆盖率数据结果的示意图,图3中包括对行覆盖比例图、行覆盖率、差异行覆盖比例图、差异行覆盖率等信息进行显示。其中,SVR10.199.171.53_8081_ODS_Feature_flow为服务器的名称,元素的下拉列表中com.vipshop.oms.selling.order.service.preanalysis、com.vipshop.oms.oss.order等表示包名,每个包中包括类,类的下一级包括方法,方法中包括行代码,即在点击包后可展示出列表中所包含的类,点击类后可展示出列表中所包含的方法,点击方法后可展示出列表中所包含的行代码,从而可以显示差异代码信息并展现出某个包、类、方法下面有多少行差异代码信息被覆盖,以及差异代码信息的总行数等。

以下进行举例说明,在一实施例中,测试人员需要对提交号为A和提交号为B的这两个版本代码进行测试,测试人员通过客户端将提交号为A和提交号为B发送至服务器。服务器根据接收到提交号为A和提交号为B在预置的代码仓库中查询提交号为A的原始版本代码和提交号为B的修改版本代码。将原始版本代码与修改版本代码的每一行进行一一对比,可得到总共被修改11行代码,以及具体被修改了第6行至第16行代码等。假设源代码总共有100行代码,在测试的过程中运行了30行代码,则得到总代码覆盖率为30/100*100%=30%,并可获取到运行了第1行至第10行、第40行至第60行代码。然后服务器根据具体被修改了哪些行代码与运行了第1行至第10行、第40行至第60行代码进行比对,获取所运行的代码中包括了6行被修改代码及其包括的是第6行至第11行被修改行代码等差异代码信息,将得到的总代码覆盖率及差异代码信息反馈至客户端。客户端根据总代码覆盖率及差异代码信息,计算出差异代码覆盖率为6/11*100%=54.5%,以及得到差异代码信息为第6行至第11行代码。使得测试人员可灵活地选取所要测试的版本代码,并详细的展现出版本之间差异代码覆盖率数据,通过得到的差异代码覆盖率数据,从而让测试人员更精确的获知测试的准确度,可以更有的放矢的工作。

本发明实施例客户端通过接收服务器发送的根据原始版本代码及修改版本代码获取的总代码覆盖率数据及差异代码信息,并根据总代码覆盖率数据及差异代码信息获取差异代码覆盖率数据。使得客户端可以获取同一个项目中两个不同版本代码的差异代码覆盖率数据,可以让开发人员方便的了解被修改代码的代码覆盖率情况,不仅提高了代码覆盖率的获取准确性,而且提高了开发人员进行代码测试的便捷性。

进一步地,基于上述获取代码覆盖率的装置第一实施例,提出了本发明获取代码覆盖率的装置第二实施例,该实施例中上述获取模块200还用于,将所述覆盖代码的包、类、方法及行信息与被修改代码的包、类、方法及行信息进行对比,获取覆盖代码中被修改代码占修改版本代码中被修改代码的总行数的比例,及覆盖代码中被修改代码的包、类、方法及行信息。

本实施例中,所述差异代码覆盖率数据包括覆盖代码中被修改代码的行数占修改版本代码中被修改代码的总行数的比例,以及覆盖代码中被修改代码的包、类、方法及行信息。所述总代码覆盖率数据包括覆盖代码的包、类、方法及行信息,所述差异代码信息包括被修改代码的包、类、方法及行信息。

客户端在接收到总代码覆盖率数据及差异代码信息后,获取模块200根据总代码覆盖率数据及差异代码信息获取差异代码覆盖率数据的过程中,将覆盖代码的包、类、方法及行信息与被修改代码的包、类、方法及行信息进行对比,获取覆盖代码中被修改代码占修改版本代码中被修改代码的总行数的比例,及覆盖代码中被修改代码的包、类、方法及行信息。从而通过获取同一个项目中两个不同版本代码的差异代码覆盖率数据,可以让测试人员方便的了解被修改代码的代码覆盖率情况,更精确的获知测试的准确度,提高了测试人员进行代码测试的便捷性。

进一步地,如图6所示,基于上述获取代码覆盖率的装置第一或第二实施例,提出了本发明获取代码覆盖率的装置第三实施例,该实施例中上述获取代码覆盖率的装置还包括:

报告生成模块300,用于根据所述差异代码覆盖率数据、所述总代码覆盖率数据及所述差异代码信息生成测试报告。

本实施例中,报告生成模块300可根据差异代码覆盖率数据、所述总代码覆盖率数据及所述差异代码信息等生成测试报告。具体地,报告生成模块300根据所述差异代码覆盖率数据、所述总代码覆盖率数据及所述差异代码信息生成测试报告,并确定覆盖代码中被修改代码的包、类、方法及行信息;在所述测测试报告中标注所述覆盖代码中被修改代码的包、类、方法及行信息,并显示覆盖代码中被修改代码的行数占修改版本代码中被修改代码的总行数的比例。

本实施例在生成测试报告的过程中,可在测试报告中将差异行代码进行凸显,并展现其是否被覆盖,可分别计算出某个包、类、方法下面有多少行差异代码信息被覆盖,以及差异代码信息的总行数。测试人员可以根据测试报告找出程序中没有被执行到的代码位置,以便对代码进行修改,设计出更有效的覆盖率的测试用例以提高代码覆盖率。不仅提高了代码覆盖率的获取准确性,而且可以让测试人员更精确的获知测试的准确度,提高了测试人员进行代码测试的便捷性。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1