一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

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

2022-05-18 08:01:55 来源:中国专利 TAG:


1.本发明涉及软件测试领域,具体地,涉及一种方法级增量代码覆盖率获取方法和装置。


背景技术:

2.在分支开发分支发布模式下,我们最关心的是当前即将发布上线的分支的代码覆盖率情况,而当前技术获取的代码覆盖率仅针对于部署模块而言,无法与研发流程的分支信息进行关联。
3.但本技术发明人在实现本技术实施例中发明技术方案的过程中,发现上述技术至少存在如下技术问题:
4.现有技术中存在获取的代码覆盖率仅针对于部署模块而言,无法与研发流程的分支信息进行关联,进而无法实现基于代码覆盖率分支准出的限制的技术问题。


技术实现要素:

5.针对现有技术中的缺陷,本技术实施例的目的是,通过提供一种方法级增量代码覆盖率获取方法和装置,解决了现有技术中存在获取的代码覆盖率仅针对于部署模块而言,无法与研发流程的分支信息进行关联,进而无法实现基于代码覆盖率分支准出的限制的技术问题。通过在分支开发分支发布模式下,通过获取发布分支的增量代码覆盖率,帮助研发测试人员来衡量对本次发布分支的改动点的测试情况。并基于代码覆盖率情况,有针对性的设计和补充测试用例,达到了提高发布分支测试质量,有效避免因漏测引发的生产问题的技术效果。
6.一方面,本技术实施例提供一种方法级增量代码覆盖率获取方法,其中,所述方法应用于增量代码覆盖率获取装置,且所述装置包括接入配置装置、覆盖率收集装置以及报告生成装置,所述方法包括:获得待测试目标系统分支信息;将所述待测试目标系统分支信息接入所述接入配置装置,配置获得所述待测试目标系统分支信息的需接入系统模块、测试环境信息;将所述需接入系统模块、所述测试环境信息加载至所述覆盖率收集装置,获得后台程序代码运行信息;根据所述后台程序代码运行信息,对应用程序进行插桩,生成代码执行记录文件;基于所述报告生成装置,对所述代码执行记录文件进行分支聚合,获得第一聚合后结果文件;基于代码仓库,获得下载源码信息;根据所述下载源码信息和所述第一聚合后结果文件,生成所述待测试目标系统分支信息的第一覆盖率报告,并对所述第一覆盖率报告进行保存。
7.另一方面,本技术还提供了一种方法级增量代码覆盖率获取系统,其中,所述系统包括:第一获得单元:所述第一获得单元用于获得待测试目标系统分支信息;第一接入单元:所述第一接入单元用于将所述待测试目标系统分支信息接入所述接入配置装置,配置获得所述待测试目标系统分支信息的需接入系统模块、测试环境信息;第一加载单元:所述第一加载单元用于将所述需接入系统模块、所述测试环境信息加载至所述覆盖率收集装
置,获得后台程序代码运行信息;第一插桩单元:所述第一插桩单元用于根据所述后台程序代码运行信息,对应用程序进行插桩,生成代码执行记录文件;第一聚合单元:所述第一聚合单元用于基于所述报告生成装置,对所述代码执行记录文件进行分支聚合,获得第一聚合后结果文件;第二获得单元:所述第二获得单元用于基于代码仓库,获得下载源码信息;第一生成单元:所述第一生成单元用于根据所述下载源码信息和所述第一聚合后结果文件,生成所述待测试目标系统分支信息的第一覆盖率报告,并对所述第一覆盖率报告进行保存。
8.第三方面,本技术实施例提供了一种方法级增量代码覆盖率获取系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现第一方面任一项所述方法的步骤。
9.本技术实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
10.通过在分支开发分支发布模式下,通过获取发布分支的增量代码覆盖率,帮助研发测试人员来衡量对本次发布分支的改动点的测试情况。并基于代码覆盖率情况,有针对性的设计和补充测试用例,达到了提高发布分支测试质量,有效避免因漏测引发的生产问题的技术效果。
11.上述说明仅是本技术技术方案的概述,为了能够更清楚了解本技术的技术手段,而可依照说明书的内容予以实施,并且为了让本技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本技术的具体实施方式。
附图说明
12.通过阅读参照以下附图对非限制性实施例所做的详细描述,本发明的其它特征、目的和优点将会变得更明显:
13.图1为本技术实施例一种方法级增量代码覆盖率获取方法的流程示意图;
14.图2为本技术实施例一种方法级增量代码覆盖率获取方法的根据所述后台程序代码运行信息,对应用程序进行插桩的流程示意图;
15.图3为本技术实施例一种方法级增量代码覆盖率获取方法的生成所述待测试目标系统分支信息的第一覆盖率报告的流程示意图;
16.图4为本技术实施例一种方法级增量代码覆盖率获取方法的获得所述应用程序的全量代码覆盖率数据之后的流程示意图;
17.图5为本技术实施例一种方法级增量代码覆盖率获取系统的结构示意图;
18.图6为本技术实施例示例性电子设备的结构示意图。
具体实施方式
19.本技术实施例通过提供一种方法级增量代码覆盖率获取方法和装置,解决了现有技术中存在获取的代码覆盖率仅针对于部署模块而言,无法与研发流程的分支信息进行关联,进而无法实现基于代码覆盖率分支准出的限制的技术问题。通过在分支开发分支发布模式下,通过获取发布分支的增量代码覆盖率,帮助研发测试人员来衡量对本次发布分支的改动点的测试情况。并基于代码覆盖率情况,有针对性的设计和补充测试用例,达到了提高发布分支测试质量,有效避免因漏测引发的生产问题的技术效果。
20.下面,将参考附图详细的描述根据本技术的示例实施例。显然,所描述的实施例仅是本技术的一部分实施例,而不是本技术的全部实施例,应理解,本技术不受这里描述的示例实施例的限制。
21.申请概述
22.在分支开发分支发布模式下,我们最关心的是当前即将发布上线的分支的代码覆盖率情况,而当前技术获取的代码覆盖率仅针对于部署模块而言,无法与研发流程的分支信息进行关联。现有技术中存在获取的代码覆盖率仅针对于部署模块而言,无法与研发流程的分支信息进行关联,进而无法实现基于代码覆盖率分支准出的限制的技术问题。
23.针对上述技术问题,本技术提供的技术方案总体思路如下:
24.本技术实施例提供一种方法级增量代码覆盖率获取方法,其中,所述方法应用于增量代码覆盖率获取装置,且所述装置包括接入配置装置、覆盖率收集装置以及报告生成装置,所述方法包括:获得待测试目标系统分支信息;将所述待测试目标系统分支信息接入所述接入配置装置,配置获得所述待测试目标系统分支信息的需接入系统模块、测试环境信息;将所述需接入系统模块、所述测试环境信息加载至所述覆盖率收集装置,获得后台程序代码运行信息;根据所述后台程序代码运行信息,对应用程序进行插桩,生成代码执行记录文件;基于所述报告生成装置,对所述代码执行记录文件进行分支聚合,获得第一聚合后结果文件;基于代码仓库,获得下载源码信息;根据所述下载源码信息和所述第一聚合后结果文件,生成所述待测试目标系统分支信息的第一覆盖率报告,并对所述第一覆盖率报告进行保存。
25.为了更好地理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。
26.实施例一
27.如图1所示,本技术实施例提供了一种方法级增量代码覆盖率获取方法,其中,所述方法应用于增量代码覆盖率获取装置,且所述装置包括接入配置装置、覆盖率收集装置以及报告生成装置,所述方法包括:
28.步骤s100:获得待测试目标系统分支信息;
29.步骤s200:将所述待测试目标系统分支信息接入所述接入配置装置,配置获得所述待测试目标系统分支信息的需接入系统模块、测试环境信息;
30.具体而言,在分支开发分支发布模式下,我们最关心的是当前即将发布上线的分支的代码覆盖率情况。而当前技术获取的代码覆盖率仅针对于部署模块而言,无法与研发流程的分支信息进行关联,无法实现基于代码覆盖率分支准出的限制。为了解决这种问题,在本技术实施例中,提出了在分支开发分支发布模式下,通过获取发布分支的增量代码覆盖率,帮助研发测试人员来衡量对本次发布分支的改动点的测试情况。并基于代码覆盖率情况,有针对性的设计和补充测试用例,来提高发布分支测试质量,有效避免因漏测引发的生产问题。
31.其中,分支开发分支发布:研发过程中代码分支管理模式的一种,即针对特定的需求,从主干分支拉取feature分支进行开发。开发完成后,从主干分支拉取release分支作为发布分支,同时将几个不同的feature分支合并到该release分支进行测试,测试通过后,将该release分支进行生产发布。发布成功之后,再将该发布分支合回到主干分支;代码覆盖
率:是软件测试的一种度量,描述程序源代码被测试执行的比例和程度,常被用来衡量测试执行的好坏,考核测试任务完成情况。一般常用覆盖率指标有行覆盖、分支覆盖、类覆盖、方法覆盖、圈复杂度覆盖、指令覆盖;增量代码覆盖率:在实际研发过程尤其是敏捷开发模式中,由于分支快速迭代,时间周期短,我们很难每次都去分析关注全量代码覆盖率的数据,而更加关注的是本次上线分支和线上已发布分支(master分支)相比有变化的代码测试覆盖率情况。我们把这部分有变化的代码覆盖率情况称为增量代码覆盖率。
32.进一步的,所述待测试目标系统分支信息为所要测试的目标系统,所述接入配置装置,该装置后台已记录所有系统模块的代码库地址、测试环境及其对应的服务器地址信息。用户接入时,需选择要接入的系统模块和测试环境,确认接入后,该装置执行接入逻辑。
33.步骤s300:将所述需接入系统模块、所述测试环境信息加载至所述覆盖率收集装置,获得后台程序代码运行信息;
34.步骤s400:根据所述后台程序代码运行信息,对应用程序进行插桩,生成代码执行记录文件;
35.步骤s500:基于所述报告生成装置,对所述代码执行记录文件进行分支聚合,获得第一聚合后结果文件;
36.具体而言,系统服务启动时,加载覆盖率收集装置,该装置在加载过程中,利用后台程序所运行在的程序解释器提供的进程间通信能力和对外提供的供外部进程调用的接口,监听并加载后台程序代码,对应用程序进行插桩,用来记录代码是否被执行,使得获得所述后台程序代码运行信息,进而根据所述后台程序代码运行信息,对应用程序进行插桩,所谓插桩,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”,本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。进一步生成所述代码执行记录文件,即对代码的执行情况进行记录,同时,基于所述报告生成装置,对所述代码执行记录文件进行分支聚合,所谓分支聚合,即多个分支并行(同时)执行,并且所有的分支execution都到join活动聚合后才向后执行,所述获得第一聚合后结果文件即为各分支聚合后的结果文件。
37.步骤s600:基于代码仓库,获得下载源码信息;
38.步骤s700:根据所述下载源码信息和所述第一聚合后结果文件,生成所述待测试目标系统分支信息的第一覆盖率报告,并对所述第一覆盖率报告进行保存。
39.具体而言,在对所述代码执行记录文件进行分支聚合后,可基于代码仓库,获得下载源码信息,即先从代码库下载源码,并切换到当前测试部署的分支,进而根据所述下载源码信息和所述第一聚合后结果文件,生成所述待测试目标系统分支信息的第一覆盖率报告,并对所述第一覆盖率报告进行保存。实现了帮助测试人员直观了解测试情况,即直观了解测试过程中覆盖和未覆盖率的代码,可能存在的风险,然后根据分析未覆盖率代码,反推测试设计是否充分,进一步明确测试设计阶段问题,同时代码覆盖率有助于发现多个测试用例都覆盖不到的代码,收集方法覆盖率,为冗余代码提供依据。
40.进一步的,所述将所述待测试目标系统分支信息接入所述接入配置装置,步骤s200包括:
41.步骤s210:基于ssh方式,将所述覆盖率收集装置推送至所述需接入系统模块所要接入的所述测试环境信息的服务器,且对所述需接入系统模块的启动脚本进行修改,获得修改后启动脚本;
42.步骤s220:根据所述修改后启动脚本,对所述需接入系统模块进行重启,并获得第一重启结果;
43.步骤s230:将所述第一重启结果反馈至测试用户。
44.具体而言,在选择要接入的系统模块和测试环境,确认接入后,该装置执行接入逻辑时,进一步的,可将覆盖率收集装置以ssh方式推送到该系统模块所要接入环境的服务器上,同时,修改系统模块启动脚本,使该系统进程启动时加载覆盖率收集装置,执行启动脚本,重启该系统模块,启动完成后,并返回接入信息,通知用户接入成功,其中,所述ssh方式,为建立在应用层基础上的安全协议。ssh是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用ssh协议可以有效防止远程管理过程中的信息泄露问题。
45.进一步的,如图2所示,所述根据所述后台程序代码运行信息,对应用程序进行插桩,步骤s400包括:
46.步骤s410:基于所述后台程序代码运行信息,确定所述应用程序的编译后代码文件;
47.步骤s420:对所述编译后代码文件的任一可执行语句前,注入执行探针,生成第一语句执行结果标记信息;
48.步骤s430:对任一所述编译后代码文件的全局,注入覆盖率信息变量date,生成对应的代码文件,其中,所述代码文件中包括文件id、文件名以及探针集合;
49.步骤s450:基于所述第一语句执行结果标记信息和所述对应的代码文件,生成覆盖率结果文件,且进行保存;
50.步骤s460:对所述服务器的部署记录文件进行读取,获得所述应用程序的部署分支环境信息;
51.步骤s470:将所述覆盖率结果文件、所述部署分支环境信息以及所述编译后代码文件,发送至所述报告生成装置,并进行保存。
52.具体而言,在根据所述后台程序代码运行信息,对应用程序进行插桩时,进一步的,可确定所述应用程序的编译后代码文件,进而在应用程序的每个编译后代码文件的可执行语句前注入一个执行探针,所述第一语句执行结果标记信息用于用来标记这条语句是否被执行,默认为flase,即未执行;当语句被执行后,探针值被修改为true。进而,在每个编译后的代码文件全局注入一个覆盖率信息变量data,该变量保存了当前代码文件的文件id、文件名和当前文件中所有探针的集合probe[]。其中,文件id计算方式为对当前文件所在程序包名和文件名进行hash计算,所得值即为文件id。因同一程序包下不可能存在两个同名文件,故能保证文件id的唯一性,data修改会被及时保存在服务器内存中,在生成覆盖率报告时,会被触发从内存中读取当前应用进程所有的data数据,生成覆盖率结果文件file,保存在磁盘中。通过读取服务器上部署记录文件获取当前应用程序部署的分支和环境信息,并通过http请求将结果文件、部署分支环境信息和编译后的代码文件发送给报告生成装置。
[0053]
进一步的,所述对所述代码执行记录文件进行分支聚合,步骤s500包括:
[0054]
步骤s510:对所述覆盖率结果文件进行依次遍历分析,生成所述代码文件的覆盖率信息;
[0055]
步骤s520:基于所述文件id,获得所述覆盖率结果文件与上次聚合后结果文件的最新探针集合;
[0056]
步骤s530:对所述最新探针集合进行聚合比对,获得最新聚合结果文件。
[0057]
具体而言,在对所述代码执行记录文件进行分支聚合时,进一步的,先接收并保存覆盖率收集装置推送过来的文件,判断推送过来的部署分支release1和环境e,如果分支release1在环境e不存在覆盖率报告,说明分支release1为该环境新部署分支,则直接执行2.报告生成过程;否则则说明分支release1已执行过报告生成,为避免因为分支release1重新部署重启导致的保存在内存中的覆盖率数据丢失,即测试执行工作记录丢失,此时应先将上一次最终版本的覆盖率结果文件和新接收的覆盖率结果文件进行聚合,并将聚合后的结果文件作为新的最终的覆盖率结果文件,进行报告生成。
[0058]
在进行覆盖率结果文件聚合时,实际上是对结果文件中每个代码文件探针集合的聚合。会依次遍历结果文件中代码文件的覆盖率信息,生成所述代码文件的覆盖率信息,并根据文件id,分别取出上一次聚合后结果文件和新结果文件中的当前代码文件的探针集合probe0[]和probe1[],进行聚合比对得到新的聚合结果文件,即所述最新聚合结果文件。比对逻辑为依次遍历探针集合进行逻辑或计算,即若probe0[i]=true,probe1[i]=false,则聚合后probe[i]=true;若probe0[i]=false,probe1[i]=false,则聚合后probe[i]=false。
[0059]
进一步的,如图3所示,所述生成所述待测试目标系统分支信息的第一覆盖率报告,步骤s700包括:
[0060]
步骤s710:对所述编译后代码文件进行遍历分析,获得当前代码信息,其中,所述当前代码信息包括所在程序包、类、方法;
[0061]
步骤s720:对所述当前代码信息和所述文件名进行hash计算,获得当前代码文件id;
[0062]
步骤s730:基于所述当前代码文件id、所述最新聚合结果文件,获得当前代码文件的覆盖率结果信息,所述覆盖率结果信息包括所述最新探针集合;
[0063]
步骤s740:基于第一计算逻辑,对所述当前代码文件的任一行代码的覆盖率进行计算,获得所述当前代码文件的行覆盖率;
[0064]
步骤s750:基于文件所在程序包,对任一代码文件的所述行覆盖率、所述方法以及所述覆盖率结果信息进行分类汇总,获得任一程序包的覆盖率数据;
[0065]
步骤s760:对所述任一程序包的覆盖率数据进行汇总,获得所述应用程序的全量代码覆盖率数据。
[0066]
具体而言,在生成所述待测试目标系统分支信息的第一覆盖率报告时,进一步的,报告的生成需要3个必要条件:覆盖率结果文件、编译后代码文件、代码源码。由于已经接收覆盖率收集装置发送过来的覆盖率结果文件和编译后的代码文件,并且已经进行了覆盖率结果文件的分支聚合处理,此时可在生成覆盖率报告前,先从代码库下载源码,并切换到当前测试部署的分支。
[0067]
进一步的,可先遍历分析所有编译后代码文件,通过反射获取当前代码所在程序
包、类、方法等相关信息,利用程序包名和文件名hash计算出当前代码文件id;根据文件id,从聚合后的覆盖率结果文件中,取出获取当前代码文件的覆盖率结果信息,即探针集合probe[];根据探针集合probe[]信息,probe[i]=true则第i行被覆盖,否则则表示第i行未覆盖。按此逻辑计算出当前代码文件每一行是否覆盖的情况,用覆盖的行数除以总行数,便得到当前代码文件的行覆盖率;如某一行被覆盖,则该行所在的方法则被覆盖,如果某个方法内的每一行都未被覆盖,则该方法为未覆盖。同理,当前代码文件只要有一行代码被覆盖,则该代码文件被覆盖,反之当前代码文件中所有行都未被覆盖,则该代码文件未覆盖。在拿到每一个代码文件的行、方法和文件覆盖率数据之后,按照文件所在程序包进行分类汇总,从而得出每一个程序包的覆盖率数据;再把每一个程序包的覆盖率数据进行汇总,从而得出整个应用程序的覆盖率数据,即所述应用程序的全量代码覆盖率数据。
[0068]
进一步的,如图4所示,所述获得所述应用程序的全量代码覆盖率数据之后,步骤s760包括:
[0069]
步骤s761:基于所述代码仓库的diff工具,对所述待测试目标系统分支信息的当前分支和主干分支进行代码对比,获得变动代码文件;
[0070]
步骤s762:对所述变动代码文件进行遍历分析,获得任一代码文件的包含方法;
[0071]
步骤s763:基于所述包含方法,对所述当前分支和所述主干分支的同一方法进行hash计算,获得第一计算结果;
[0072]
步骤s764:基于所述第一计算结果,获得所述同一方法的改动信息;
[0073]
步骤s765:基于所述同一方法的改动信息,筛选获得方法改动列表;
[0074]
步骤s766:根据所述全量代码覆盖率数据,获得所述方法改动列表中任一改动方法对应的覆盖率数据;
[0075]
步骤s767:对所述任一改动方法对应的覆盖率数据进行数据汇总,生成增量代码覆盖率数据,所述增量代码覆盖率数据包括:增量方法、增量方法所在类、增量方法所在包。
[0076]
具体而言,在获得所述应用程序的全量代码覆盖率数据之后,可生成方法级增量覆盖率,即当前测试分支跟主干分支相比有改动的方法的代码覆盖率。当方法中只要有一行代码改动,则认为该方法有改动。
[0077]
首先需获取有变动的方法。获取方式如下:通过代码仓库提供的diff工具,进行当前分支和主干分支的代码对比,获取有变动的代码文件;依次遍历变动的代码文件,获取每个代码文件中包含的方法,然后逐个对当前分支和主干分支的同一方法进行hash计算,若计算结果一样则说明该方法无改动,否则则说明该方法有改动,加入方法改动列表diff[]。有以下几个特殊情况处理如下:方法在当前分支有,主干分支没有,则说明该方法为新增方法,直接加入方法改动列表diff[];方法在当前分支没有,在主干分支有,则说明该方法被删除,不需要加入改动列表diff[];代码文件在当前分支有,主干分支没有,则说明该文件为新增文件,直接将该文件中所有方法加入方法改动列表diff[];代码文件在当前分支没有,在主干分支有,则说明该代码文件被删除,不需要加入改动列表diff[]。
[0078]
在拿到方法改动列表diff[]之后,依次取出该列表中的方法信息,然后根据已经产生的全量覆盖率信息中,获取每一个改动方法的覆盖率数据。在拿到这些覆盖率数据之后,按照覆盖率数据汇总的方法,从而得出增量方法、增量方法所在类、增量方法所在包的覆盖率数据,即所述增量代码覆盖率数据。通过增量覆盖率报告,可快定位出本次功能改造
对应的代码改动,作为测试范围参考。
[0079]
进一步的,所述对所述第一覆盖率报告进行保存,本技术实施例还包括:
[0080]
步骤s771:获得所述全量代码覆盖率数据的全量报告保存路径;
[0081]
步骤s772:获得所述增量代码覆盖率数据的增量报告保存路径;
[0082]
步骤s773:基于所述全量报告保存路径和所述增量报告保存路径,对新报告进行保存。
[0083]
具体而言,在对所述第一覆盖率报告进行保存时,更具体的,所述全量报告保存路径为:应用名/分支名/环境/report/;所述增量报告保存路径为:应用名/分支名/环境/diffreport/。每当有新的报告产生时,若分支报告已存在,则自动覆盖上一版本报告;否则则创建新的分支路径,进行报告保存。使得历史分支报告持久化保存,便于追溯。
[0084]
与现有技术相比,本发明具有如下的有益效果:
[0085]
1、通过在分支开发分支发布模式下,通过获取发布分支的增量代码覆盖率,帮助研发测试人员来衡量对本次发布分支的改动点的测试情况。并基于代码覆盖率情况,有针对性的设计和补充测试用例,达到了提高发布分支测试质量,有效避免因漏测引发的生产问题的技术效果。
[0086]
2、基于增量对比和hash计算,迅速获取增量代码,帮助测试人员快速定位本次发布的改动点。
[0087]
3、基于增量代码覆盖率,帮助测试人员直观查看当前测试情况,从而针对性设计和补充测试用例,尤其对一些异常场景的测试,可有效提高测试质量。
[0088]
4、基于覆盖率探针收集聚合,实现对同一分支多次部署测试情况的聚合,避免因重新部署导致覆盖率丢失,测试工作遗漏。测试报告按系统、环境、分支保存,可随时追溯历史分支覆盖率报告信息。
[0089]
实施例二
[0090]
基于与前述实施例中一种方法级增量代码覆盖率获取方法同样发明构思,本发明还提供了一种方法级增量代码覆盖率获取系统,如图5所示,所述系统包括:
[0091]
第一获得单元11:所述第一获得单元11用于获得待测试目标系统分支信息;
[0092]
第一接入单元12:所述第一接入单元12用于将所述待测试目标系统分支信息接入所述接入配置装置,配置获得所述待测试目标系统分支信息的需接入系统模块、测试环境信息;
[0093]
第一加载单元13:所述第一加载单元13用于将所述需接入系统模块、所述测试环境信息加载至所述覆盖率收集装置,获得后台程序代码运行信息;
[0094]
第一插桩单元14:所述第一插桩单元14用于根据所述后台程序代码运行信息,对应用程序进行插桩,生成代码执行记录文件;
[0095]
第一聚合单元15:所述第一聚合单元15用于基于所述报告生成装置,对所述代码执行记录文件进行分支聚合,获得第一聚合后结果文件;
[0096]
第二获得单元16:所述第二获得单元16用于基于代码仓库,获得下载源码信息;
[0097]
第一生成单元17:所述第一生成单元17用于根据所述下载源码信息和所述第一聚合后结果文件,生成所述待测试目标系统分支信息的第一覆盖率报告,并对所述第一覆盖率报告进行保存。
[0098]
进一步的,所述系统还包括:
[0099]
第一推送单元:所述第一推送单元用于基于ssh方式,将所述覆盖率收集装置推送至所述需接入系统模块所要接入的所述测试环境信息的服务器,且对所述需接入系统模块的启动脚本进行修改,获得修改后启动脚本;
[0100]
第一重启单元:所述第一重启单元用于根据所述修改后启动脚本,对所述需接入系统模块进行重启,并获得第一重启结果;
[0101]
第一反馈单元:所述第一反馈单元用于将所述第一重启结果反馈至测试用户。
[0102]
进一步的,所述系统还包括:
[0103]
第一确定单元:所述第一确定单元用于基于所述后台程序代码运行信息,确定所述应用程序的编译后代码文件;
[0104]
第一注入单元:所述第一注入单元用于对所述编译后代码文件的任一可执行语句前,注入执行探针,生成第一语句执行结果标记信息;
[0105]
第二注入单元:所述第二注入单元用于对任一所述编译后代码文件的全局,注入覆盖率信息变量date,生成对应的代码文件,其中,所述代码文件中包括文件id、文件名以及探针集合;
[0106]
第二生成单元:所述第二生成单元用于基于所述第一语句执行结果标记信息和所述对应的代码文件,生成覆盖率结果文件,且进行保存;
[0107]
第一读取单元:所述第一读取单元用于对所述服务器的部署记录文件进行读取,获得所述应用程序的部署分支环境信息;
[0108]
第一发送单元:所述第一发送单元用于将所述覆盖率结果文件、所述部署分支环境信息以及所述编译后代码文件,发送至所述报告生成装置,并进行保存。
[0109]
进一步的,所述系统还包括:
[0110]
第一分析单元:所述第一分析单元用于对所述覆盖率结果文件进行依次遍历分析,生成所述代码文件的覆盖率信息;
[0111]
第三获得单元:所述第三获得单元用于基于所述文件id,获得所述覆盖率结果文件与上次聚合后结果文件的最新探针集合;
[0112]
第一比对单元:所述第一比对单元用于对所述最新探针集合进行聚合比对,获得最新聚合结果文件。
[0113]
进一步的,所述系统还包括:
[0114]
第二分析单元:所述第二分析单元用于对所述编译后代码文件进行遍历分析,获得当前代码信息,其中,所述当前代码信息包括所在程序包、类、方法;
[0115]
第一计算单元:所述第一计算单元用于对所述当前代码信息和所述文件名进行hash计算,获得当前代码文件id;
[0116]
第四获得单元:所述第四获得单元用于基于所述当前代码文件id、所述最新聚合结果文件,获得当前代码文件的覆盖率结果信息,所述覆盖率结果信息包括所述最新探针集合;
[0117]
第二计算单元:所述第二计算单元用于基于第一计算逻辑,对所述当前代码文件的任一行代码的覆盖率进行计算,获得所述当前代码文件的行覆盖率;
[0118]
第一分类单元:所述第一分类单元用于基于文件所在程序包,对任一代码文件的
所述行覆盖率、所述方法以及所述覆盖率结果信息进行分类汇总,获得任一程序包的覆盖率数据;
[0119]
第一汇总单元:所述第一汇总单元用于对所述任一程序包的覆盖率数据进行汇总,获得所述应用程序的全量代码覆盖率数据。
[0120]
进一步的,所述系统还包括:
[0121]
第二比对单元:所述第二比对单元用于基于所述代码仓库的diff工具,对所述待测试目标系统分支信息的当前分支和主干分支进行代码对比,获得变动代码文件;
[0122]
第三分析单元:所述第三分析单元用于对所述变动代码文件进行遍历分析,获得任一代码文件的包含方法;
[0123]
第三计算单元:所述第三计算单元用于基于所述包含方法,对所述当前分支和所述主干分支的同一方法进行hash计算,获得第一计算结果;
[0124]
第五获得单元:所述第五获得单元用于基于所述第一计算结果,获得所述同一方法的改动信息;
[0125]
第一筛选单元:所述第一筛选单元用于基于所述同一方法的改动信息,筛选获得方法改动列表;
[0126]
第六获得单元:所述第六获得单元用于根据所述全量代码覆盖率数据,获得所述方法改动列表中任一改动方法对应的覆盖率数据;
[0127]
第二汇总单元:所述第二汇总单元用于对所述任一改动方法对应的覆盖率数据进行数据汇总,生成增量代码覆盖率数据,所述增量代码覆盖率数据包括:增量方法、增量方法所在类、增量方法所在包。
[0128]
进一步的,所述系统还包括:
[0129]
第七获得单元:所述第七获得单元用于获得所述全量代码覆盖率数据的全量报告保存路径;
[0130]
第八获得单元:所述第八获得单元用于获得所述增量代码覆盖率数据的增量报告保存路径;
[0131]
第一保存单元:所述第一保存单元用于基于所述全量报告保存路径和所述增量报告保存路径,对新报告进行保存。
[0132]
前述图1实施例一中的一种方法级增量代码覆盖率获取方法的各种变化方式和具体实例同样适用于本实施例的一种方法级增量代码覆盖率获取系统,通过前述对一种方法级增量代码覆盖率获取方法的详细描述,本领域技术人员可以清楚的知道本实施例中一种方法级增量代码覆盖率获取系统的实施方法,所以为了说明书的简洁,在此不再详述。
[0133]
实施例三
[0134]
下面参考图6来描述本技术实施例的电子设备。
[0135]
图6图示了根据本技术实施例的电子设备的结构示意图。
[0136]
基于与前述实例施中一种方法级增量代码覆盖率获取方法的发明构思,本发明还提供一种方法级增量代码覆盖率获取系统,其上存储有计算机程序,该程序被处理器执行时实现前文所述一种方法级增量代码覆盖率获取系统的任一方法的步骤。
[0137]
其中,在图6中,总线架构(用总线300来代表),总线300可以包括任意数量的互联的总线和桥,总线300将包括由处理器302代表的一个或多个处理器和存储器304代表的存
储器的各种电路链接在一起。总线300还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口305在总线300和接收器301和发送器303之间提供接口。接收器301和发送器303可以是同一个元件,即收发机,提供用于在传输介质上与各种其他系统通信的单元。处理器302负责管理总线300和通常的处理,而存储器304可以被用于存储处理器302在执行操作时所使用的数据。
[0138]
本技术实施例提供一种方法级增量代码覆盖率获取方法,其中,所述方法应用于增量代码覆盖率获取装置,且所述装置包括接入配置装置、覆盖率收集装置以及报告生成装置,所述方法包括:获得待测试目标系统分支信息;将所述待测试目标系统分支信息接入所述接入配置装置,配置获得所述待测试目标系统分支信息的需接入系统模块、测试环境信息;将所述需接入系统模块、所述测试环境信息加载至所述覆盖率收集装置,获得后台程序代码运行信息;根据所述后台程序代码运行信息,对应用程序进行插桩,生成代码执行记录文件;基于所述报告生成装置,对所述代码执行记录文件进行分支聚合,获得第一聚合后结果文件;基于代码仓库,获得下载源码信息;根据所述下载源码信息和所述第一聚合后结果文件,生成所述待测试目标系统分支信息的第一覆盖率报告,并对所述第一覆盖率报告进行保存。
[0139]
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0140]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的系统。
[0141]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令系统的制造品,该指令系统实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0142]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0143]
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0144]
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精
神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献