CN117215955A - 代码的覆盖率获取方法、装置及电子设备 - Google Patents

代码的覆盖率获取方法、装置及电子设备 Download PDF

Info

Publication number
CN117215955A
CN117215955A CN202311266549.0A CN202311266549A CN117215955A CN 117215955 A CN117215955 A CN 117215955A CN 202311266549 A CN202311266549 A CN 202311266549A CN 117215955 A CN117215955 A CN 117215955A
Authority
CN
China
Prior art keywords
code
test version
line
incremental
uncovered
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
Application number
CN202311266549.0A
Other languages
English (en)
Inventor
农华莲
张珺
韩照光
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Baidu International Technology Shenzhen Co ltd
Original Assignee
Baidu International Technology Shenzhen Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Baidu International Technology Shenzhen Co ltd filed Critical Baidu International Technology Shenzhen Co ltd
Priority to CN202311266549.0A priority Critical patent/CN117215955A/zh
Publication of CN117215955A publication Critical patent/CN117215955A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本公开提供了一种代码的覆盖率获取方法,涉及计算机技术领域,尤其涉及代码的覆盖率获取方法、装置及电子设备。具体实现方案为:确定当前测试版本代码和所述当前测试版本代码对应的基准版本代码之间的增量代码;根据所述增量代码与所述当前测试版本代码的增量代码覆盖信息,确定所述增量代码中未被覆盖的第一未覆盖增量代码;根据所述当前测试版本代码对应的历史测试版本代码的历史增量代码覆盖信息,确定所述第一未覆盖增量代码中,未在所述历史测试版本代码中被覆盖的第二未覆盖增量代码;根据所述第二未覆盖增量代码和所述增量代码,得到所述当前测试版本代码的增量覆盖率。通过这种方式,能够避免重复测试,提高测试效率。

Description

代码的覆盖率获取方法、装置及电子设备
技术领域
本公开涉及计算机技术领域,尤其涉及代码的覆盖率获取方法、装置及电子设备。
背景技术
在软件开发过程中,为了保证软件的质量,需要对软件的代码进行测试,其中一项包括确定代码的覆盖率。在软件开发过程中,代码可能从最初的基准版本代码迭代数次,而相关技术中,通常仅能针对当前测试版本的代码和基准版本代码,计算二者的增量覆盖率,而在数次迭代过程中,不同测试版本的代码相较于基准版本代码的增量代码可能已经被测试过(即被覆盖),从而导致大量重复测试,占用***资源并且降低测试效率。
发明内容
本公开提供了一种用于解决上述技术问题中的至少一项的代码的覆盖率获取方法、装置及电子设备。
根据本公开的一方面,提供了一种代码的覆盖率获取方法,所述方法包括:
确定当前测试版本代码和所述当前测试版本代码对应的基准版本代码之间的增量代码;
根据所述增量代码与所述当前测试版本代码的增量代码覆盖信息,确定所述增量代码中未被覆盖的第一未覆盖增量代码;
根据所述当前测试版本代码对应的历史测试版本代码的历史增量代码覆盖信息,确定所述第一未覆盖增量代码中,未在所述历史测试版本代码中被覆盖的第二未覆盖增量代码;
根据所述第二未覆盖增量代码和所述增量代码,得到所述当前测试版本代码的增量覆盖率。
根据本公开的另一方面,提供了一种代码的覆盖率获取装置,所述装置包括:
增量代码确定模块,用于确定当前测试版本代码和所述当前测试版本代码对应的基准版本代码之间的增量代码;
第一未覆盖确定模块,用于根据所述增量代码与所述当前测试版本代码的增量代码覆盖信息,确定所述增量代码中未被覆盖的第一未覆盖增量代码;
第二未覆盖确定模块,用于根据所述当前测试版本代码对应的历史测试版本代码的历史增量代码覆盖信息,确定所述第一未覆盖增量代码中,未在所述历史测试版本代码中被覆盖的第二未覆盖增量代码;
增量覆盖率确定模块,用于根据所述第二未覆盖增量代码和所述增量代码,得到所述当前测试版本代码的增量覆盖率。
根据本公开的另一方面,提供了一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执上述方法。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据上述方法。
根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据上述方法。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是本公开第一实施例提供的一种代码的覆盖率获取方法的流程示意图;
图2是本公开第二实施例提供的一种代码的覆盖率获取方法的流程示意图;
图3是本公开第二实施例提供的一种代码的覆盖率获取方法中增量覆盖率详情表的示例图;
图4是本公开第三实施例提供的一种代码的覆盖率获取装置的结构示意图;
图5是用来实现本公开实施例的方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在不冲突的情况下,本公开各实施例及实施例中的各特征可相互组合。
如本文所使用的,术语“和/或”包括一个或多个相关列举条目的任何和所有组合。
本文所使用的术语仅用于描述特定实施例,且不意欲限制本公开。如本文所使用的,单数形式“一个”和“该”也意欲包括复数形式,除非上下文另外清楚指出。
除非另外限定,否则本文所用的所有术语(包括技术和科学术语)的含义与本领域普通技术人员通常理解的含义相同。还将理解,诸如那些在常用字典中限定的那些术语应当被解释为具有与其在相关技术以及本公开的背景下的含义一致的含义,且将不解释为具有理想化或过度形式上的含义,除非本文明确如此限定。
根据本公开的代码的覆盖率获取方法可以由终端设备或服务器等电子设备执行,终端设备可以为车载设备、用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等,方法可以通过处理器调用存储器中存储的计算机可读程序指令的方式来实现。或者,可通过服务器执行本公开提供的代码的覆盖率获取方法。
在公开第一实施例中,参见图1,图1示出本公开第一实施例提供的一种代码的覆盖率获取方法的流程示意图。该方法包括:
S101、确定当前测试版本代码和当前测试版本代码对应的基准版本代码之间的增量代码。
其中,基准版本代码为软件产品原始版本的源码,或,选定作为软件产品的参考版本的源码。在本公开实施例中,在软件测试阶段,通常会对代码进行多次迭代,继而在基准版本代码的基础上产生多次测试版本代码。当前测试版本代码为当前进行迭代所产生的新的代码。
当前测试版本代码相较于基准版本代码产生了变更,增量代码为当前测试版本代码基于基准版本代码产生变更的部分代码。
其中,增量代码的变更包括:新增代码变更、删减代码变更、修改代码变更等,在此不做限定。
S102、根据增量代码与当前测试版本代码的增量代码覆盖信息,确定增量代码中未被覆盖的第一未覆盖增量代码。
其中,增量代码覆盖信息可以包括以下至少一项:当前测试版本代码的文件名、当前测试版本代码相较于基准版本代码的增量代码的覆盖情况。
进一步地,覆盖情况包括已覆盖和未覆盖,以及已覆盖的代码行的代码行信息,所述代码行信息包括已覆盖的代码行的行号、已覆盖的代码行的内容等。
通过增量代码覆盖信息,可以获知本次测试中,当前测试版本代码的增量代码中被覆盖的代码行和未被覆盖的代码行,其中,本次测试中,增量代码中未被覆盖的代码行即为第一未覆盖增量代码。换言之,第一未覆盖增量代码表示:当前测试轮次增量代码中未被覆盖的部分增量代码。
增量代码覆盖信息,可以采用差异比较工具获取,差异比较工具例如为:git版本控制工具。git提供了管理增量代码的能力,因此,可以通过比较差异(git diff)这个命令获取增量代码。通过Git diff命令比较两个版本的代码的文件格式包括:正常格式、上下文格式、合并格式。Git版本控制工具,使用的是合并格式的变体,git diff命令可以生成两个代码版本之间的差异信息结果,根据差异信息结果可以统计得到增量代码覆盖信息。
S103、根据当前测试版本代码对应的历史测试版本代码的历史增量代码覆盖信息,确定第一未覆盖增量代码中,未在历史测试版本代码中被覆盖的第二未覆盖增量代码。
相应的,历史测试版本代码可以为任一当前测试版本代码之前迭代的代码,例如:当前测试版本代码前一次迭代的代码。历史增量代码覆盖信息可以包括:历史测试版本代码的文件名、历史测试版本代码的增量代码的覆盖情况。在本公开中,历史测试版本代码可以为本方法中,上一轮次的当前测试版本代码的增量代码覆盖信息,具体地:
根据当前测试版本代码的第二未覆盖增量代码和增量代码得到当前测试版本代码的增量代码覆盖信息,保存当前测试版本代码的增量代码覆盖信息,作为下一轮次的测试版本代码对应的历史测试版本代码的历史增量代码覆盖信息。
通过当前轮次的当前测试版本代码和历史测试版本代码的代码行作比较,确定出第一未覆盖增量代码的代码行在历史测试版本代码的对应位置,再根据历史增量代码覆盖信息,确定第一未覆盖增量代码的代码行在历史测试版本代码中是否有被覆盖,若没有,则确定为第二未覆盖增量代码,换言之,第二未覆盖增量代码表示:第一未覆盖增量代码中,在历史测试版本代码中未被覆盖的部分第一未覆盖增量代码。
S104、根据第二未覆盖增量代码和增量代码,得到当前测试版本代码的增量覆盖率。
通过上述方式,确定出的第二未覆盖增量代码表示增量代码中,在当前测试版本代码和历史测试版本代码中均未被覆盖的代码,从而,根据第二未覆盖增量代码的代码行数和增量代码的代码行数得到已覆盖增量代码的代码行数,再根据已覆盖增量代码的代码行数和增量代码的代码行数,得到当前测试版本代码的增量覆盖率。也即,当前测试版本代码的增量覆盖率=(增量代码行数-第二未覆盖增量代码行数)/增量代码行数。
在一些示例中,本公开提供的方法还包括:获取当前版本代码的全量覆盖率。具体地,可以通过覆盖率工具获得当前测试版本代码的全量覆盖率,覆盖率工具例如为:Jacoco工具,Jacoco工具是一个开源的代码覆盖率工具,集成在Jenkins中。通过Jacoco工具统计获取当前测试版本代码的全量代码覆盖率信息。
本公开提供的方法,通过确定出当前测试版本代码与基准版本代码之间产生变更的增量代码后,再引入历史测试版本代码,确定增量代码在历史测试版本代码中是否被测试(即被覆盖),从而能够确定出与基准版本代码相比的增量代码中,未在历史测试中被覆盖过的第二未覆盖增量代码,得到综合基准版本代码和历史测试版本代码得到的当前测试版本代码的增量覆盖率,通过这种方式确定的增量覆盖率更准确,并且能够提供准确度补充测试指导,以避免漏测,同时可以避免重复测试,进而能够提高测试效率,避免占用不必要的测试***资源。
在公开第二实施例中,参见图2,图2示出本公开第二实施例提供的一种代码的覆盖率获取方法的流程示意图。该方法包括:
S201、确定当前测试版本代码和当前测试版本代码对应的基准版本代码之间的增量代码。
其中,基准版本代码为软件产品原始版本的源码,或,选定作为软件产品的参考版本的源码。在本公开实施例中,在软件测试阶段,通常会对代码进行多次迭代,继而在基准版本代码的基础上产生多次测试版本代码。当前测试版本代码为当前进行迭代所产生的新的代码。
当前测试版本代码相较于基准版本代码产生了变更,增量代码为当前测试版本代码基于基准版本代码产生变更的部分代码。
其中,增量代码的变更包括:新增代码变更、删减代码变更、修改代码变更等,在此不做限定。
S202、根据增量代码与当前测试版本代码的增量代码覆盖信息,确定增量代码中未被覆盖的第一未覆盖增量代码。
其中,增量代码覆盖信息可以包括以下至少一项:当前测试版本代码的文件名、当前测试版本代码相较于基准版本代码的增量代码的覆盖情况。
进一步地,覆盖情况包括已覆盖和未覆盖,以及已覆盖的代码行的代码行信息,所述代码行信息包括已覆盖的代码行的行号、已覆盖的代码行的内容等。
通过增量代码覆盖信息,可以获知本次测试中,当前测试版本代码的增量代码中被覆盖的代码行和未被覆盖的代码行,其中,本次测试中,增量代码中未被覆盖的代码行即为第一未覆盖增量代码。换言之,第一未覆盖增量代码表示:当前测试轮次增量代码中未被覆盖的部分增量代码。
增量代码覆盖信息,可以采用差异比较工具获取,差异比较工具例如为:git版本控制工具。git提供了管理增量代码的能力,因此,可以通过比较差异(git diff)这个命令获取增量代码。通过Git diff命令比较两个版本的代码的文件格式包括:正常格式、上下文格式、合并格式。Git版本控制工具,使用的是合并格式的变体,git diff命令可以生成两个代码版本之间的差异信息,根据差异信息可以统计得到增量代码覆盖信息。
S203、确定当前测试版本代码和历史测试版本代码之间的代码行映射关系。
在一些示例中,S203包括:
S2031、通过差异比较工具,比较当前测试版本代码和历史测试版本代码中发生变更的代码行,得到当前测试版本代码和历史测试版本代码的差异信息结果。
其中,差异比较工具例如为:git版本控制工具。git提供了管理增量代码的能力,因此,可以通过比较差异(git diff)这个命令获取增量代码。通过Git diff命令比较两个版本的代码的文件格式包括:正常格式、上下文格式、合并格式。Git版本控制工具,使用的是合并格式的变体,git diff命令可以生成两个代码版本之间的差异信息结果。
其中,git版本控制工具输出的、当前测试版本代码和历史测试版本代码的差异信息结果的具体形式例如可以为:
diff--git a/filel.txt b/file2.txt(其中,a/filel为历史测试版本代码的文件;b/file2为当前测试版本的文件;此行为执行git diff命令,比较file1和file2)
index 1234567..abcdefg 100644
---a/filel.txt (表示file1减少了一些代码行)
+++b/file2.txt (表示file2新增了一些代码行)
@@-1,3+1,3@@(表示file1减少了一行,修改了3个字符;file2新增了一行,修改了三个字符)
-this is line 1(以下示例性地表示file1和file2修改的内容)
+this is line one
S2032、根据差异信息结果,获取当前测试版本代码的每一代码行和历史测试版本代码的每一代码行的代码行映射关系。
git版本控制工具得到的差异信息结果能够表示当前测试版本代码和历史测试版本代码发生变更的大致的差异信息,可以进一步对差异信息结果进行逐行比对,得到当前测试版本代码和历史测试版本代码的代码行之间的映射关系,从而能够精确地定位发生变更的代码行和变更内容。
在一些示例中,差异信息结果至少包括:当前测试版本代码相较历史测试版本代码发生变更的差异代码行的行号;S2032可以包括:
子步骤一:针对任一差异代码行的行号,确定当前测试版本代码中差异代码行的行号对应的差异代码行的内容,根据差异代码行的内容遍历历史测试版本代码,确定历史测试版本代码中与差异代码行对应的历史代码行。
子步骤二:根据差异代码行的行号和与之对应的历史代码行的行号,生成差异代码行和历史代码行的映射关系。
根据差异信息结果中包含的差异代码行的行号,差异代码行即当前测试版本代码中,相较于历史测试版本代码发生变更的代码行,对每一差异代码行,在历史测试版本代码中进行逐行比对和定位。针对任一差异代码行的行号,首先在当前测试版本代码中定位该差异代码行,并确定该差异代码行的内容(即代码内容),在历史测试版本代码中逐行遍历,确定与差异代码行的内容相同的历史代码行,所述历史代码行即历史测试版本代码的代码行,并确定与差异代码行对应的历史代码行的行号,根据差异代码行的行号和历史代码行的行号生成二者的映射关系,并保存映射关系。
针对多行差异代码行,按照上述方式逐一生成每一差异代码行和与每一差异代码行对应的历史代码行的映射关系。
其中,差异代码行的行号可以根据历史代码行的行号和变更类型确定。变更类型包括:新增代码行、删除代码行、修改代码行等。例如,若新增代码行,则根据新增行数,在历史代码行的行号上加上新增行数,得到差异代码行的行号。
在一些示例中,在S2031之后,S2032之前,S203还包括:
步骤一:确定差异代码行和历史代码行的差异内容。
除了确定差异代码行和历史代码行的映射关系之外,还可以获取二者具体的变更内容(即差异内容),以便展示差异内容。
步骤二:根据当前测试版本代码的文件名获取当前测试版本代码的文件路径。
在一些示例中,还可以获取当前测试版本代码的文件路径,以便展示文件路径。
基于步骤一和步骤二,S2032具体包括:
根据差异代码行的行号和与之对应的历史代码行的行号,生成包含当前测试版本代码的文件路径、差异内容的映射关系。
本公开在,生成的映射关系,不仅可以展示差异代码行和历史代码行之间的映射关系,还可以展示文件路径、具体的差异代码行的行号、以及差异内容等,从而能够让测试人员快速获取和定位差异代码行。
具体地,以任一代码行对应的映射关系为例,映射关系的具体形式例如可以为:
文件路径:行号:差异内容。
示例性地,例如为:
xxxx/xxxxx/xxxx.java:2:+aaa。
以上表示在xxxx/xxxxx/xxxx.java文件路径下的当前测试版本的代码的第二行为新增行,新增内容(即差异内容)为“aaa”。
S204、根据代码行映射关系和历史增量代码覆盖信息,确定第一未覆盖增量代码的每一代码行在历史测试版本代码的覆盖情况,并根据每一代码行的覆盖情况,得到第二未覆盖增量代码。
其中,覆盖情况包括:历史覆盖,即历史测试版本中代码行被覆盖;或,历史未覆盖即历史测试版本中代码行未覆盖。
在一些示例中,S204中,根据代码行映射关系和历史增量代码覆盖信息,确定第一未覆盖增量代码的每一代码行在历史测试版本代码的覆盖情况,包括:
子步骤一、针对任一第一未覆盖增量代码的代码行,根据代码行映射关系,确定当前的第一未覆盖增量代码的代码行是否存在与之对应的历史测试版本代码的历史代码行。
具体地,针对任一第一未覆盖增量代码的代码行,根据代码行映射关系,确定历史测试版本代码中是否具体该第一未覆盖增量代码的代码行对应的历史代码行。
子步骤二、若存在,则根据历史增量代码覆盖信息,确定历史代码行覆盖情况。
若历史测试版本代码中存在子步骤一的第一未覆盖增量代码的代码行对应的历史代码行,则根据历史增量代码覆盖信息查看该历史代码行的覆盖情况,即确定该代码行数否在历史测试版本代码中被覆盖。
若历史测试版本代码中存在子步骤一的第一未覆盖增量代码的代码行对应的历史代码行,则表示该代码行未在当前测试版本中被覆盖,也未在历史测试版本中被覆盖,则该代码行归位第二未覆盖增量代码。
在一些示例中,覆盖情况包括:历史覆盖或历史未覆盖;S204中,根据每一代码行的覆盖情况,得到第二未覆盖增量代码,包括:
子步骤三、将第一未覆盖增量代码的代码行中,对应的历史代码行的覆盖情况为历史未覆盖的代码行确定为第二未覆盖增量代码。
子步骤四、将不存在对应的历史代码行的第一未覆盖增量代码的代码行确定为第二未覆盖增量代码。
也即筛选出当前测试版本的增量代码在未被覆盖的第一未覆盖增量代码的代码行中,在历史测试版本代码在也未被覆盖的代码行。符合子步骤三和子步骤四的条件的代码行,即为在当前测试版本和历史测试版本中均未被覆盖的增量代码,从而对这些增量代码进行测试,能够避免重复测试。
上述S203-S204为S103的一种实现方式,S103还具有其他实现方式,在此不做限定。
S205、根据第二未覆盖增量代码的代码行数和增量代码的代码行数得到已覆盖增量代码的代码行数。
具体地,已覆盖增量代码的代码行数=增量代码行数-第二未覆盖增量代码行数。
S206、根据已覆盖增量代码的代码行数和增量代码的代码行数,得到当前测试版本代码的增量覆盖率。
也即,当前测试版本代码的增量覆盖率=(增量代码行数-第二未覆盖增量代码行数)/增量代码行数。
通过这种方式,排除在历史测试版本代码中被覆盖的代码行,得到准确的,针对整个测试过程的当前测试版本代码的增量覆盖率,从而提供更加准确的代码质量评估指标(增量覆盖率),并且得到准确的未覆盖的代码行,避免重复测试。
上述S205-S206为S104的一种实现方式,S104还具有其他实现方式,在此不做限定。
在一些示例中,S206之后,该方法还包括:
步骤一:根据第二未覆盖增量代码和增量代码得到当前测试版本代码的增量代码覆盖信息。
步骤二:将当前测试版本代码的增量覆盖率和增量代码覆盖信息存入预设的增量覆盖率详情表和预设的增量覆盖率历史表。
其中,增量覆盖率历史表存入的当前测试版本代码的增量代码覆盖信息,作为下一轮次的测试版本代码对应的历史测试版本代码的历史增量代码覆盖信息。
其中,增量覆盖率详情表用于展示当前测试版本代码的覆盖率详情;增量覆盖率历史表用于记录最新的历史测试版本代码的覆盖率详情。
在第一次测试时,S203中的历史测试版本代码为空,即不存在历史测试版本代码,在S206中,增量覆盖率历史表也为空,当前测试版本代码的增量代码覆盖信息可以直接存入增量覆盖率历史表;在非第一次测试时,得到当前测试版本代码的增量代码覆盖信息后,可以存入增量覆盖率历史表,作为下一轮测试的历史增量代码覆盖信息,覆盖掉之前存储的历史增量代码覆盖信息,从而能够实时更新历史测试版本的历史增量代码覆盖信息,并且减少数据存储量。
步骤一中,增量代码覆盖信息可以包括以下至少一项:当前测试版本代码的文件名、当前测试版本代码相较于基准版本代码的增量代码的覆盖情况、增量覆盖率。
根据增量代码和第二未覆盖增量代码,可以得到增量代码中的每一代码行的覆盖情况(即是否被覆盖),并且能够得到各个增量代码的行号。并且,根据文件名能够得到当前测试版本代码的文件路径、任务编号(即代码的提交号)等信息,上述信息均可存入增量覆盖率详情表中进行可视化展示,即增量覆盖率详情表可以包括:文件路径、人物标号、增量代码行数、增量代码覆盖行数、增量覆盖率、第二未覆盖增量代码的行号等信息,在一些示例中,还可以包括:各个增量代码的行号、全量覆盖率、增量代码的变更内容、当前测试版本代码所属的项目的项目编号等信息,在此不做限定。
具体地,参见图3,图3示出一张示例性地增量覆盖率详情表的表格示例。
在公开第三实施例中,基于与图1相同的原理,图4示出本公开第三实施例提供的一种代码的覆盖率获取装置40,该装置包括:
增量代码确定模块401,用于确定当前测试版本代码和当前测试版本代码对应的基准版本代码之间的增量代码;
第一未覆盖确定模块402,用于根据增量代码与当前测试版本代码的增量代码覆盖信息,确定增量代码中未被覆盖的第一未覆盖增量代码;
第二未覆盖确定模块403,用于根据当前测试版本代码对应的历史测试版本代码的历史增量代码覆盖信息,确定第一未覆盖增量代码中,未在历史测试版本代码中被覆盖的第二未覆盖增量代码;
增量覆盖率确定模块404,用于根据第二未覆盖增量代码和增量代码,得到当前测试版本代码的增量覆盖率。
在一些示例中,第二未覆盖确定模块具体包括:
映射关系子模块,用于确定当前测试版本代码和历史测试版本代码之间的代码行映射关系;
第二覆盖子模块,用于根据代码行映射关系和历史增量代码覆盖信息,确定第一未覆盖增量代码的每一代码行在历史测试版本代码的覆盖情况,并根据每一代码行的覆盖情况,得到第二未覆盖增量代码。
在一些示例中,映射关系子模块具体用于:
通过差异比较工具,比较当前测试版本代码和历史测试版本代码中发生变更的代码行,得到当前测试版本代码和历史测试版本代码的差异信息结果;
根据差异信息结果,获取当前测试版本代码的每一代码行和历史测试版本代码的每一代码行的代码行映射关系。
在一些示例中,差异信息结果至少包括:当前测试版本代码相较历史测试版本代码发生变更的差异代码行的行号;
映射关系子模块具体用于:
针对任一差异代码行的行号,确定当前测试版本代码中差异代码行的行号对应的差异代码行的内容,根据差异代码行的内容遍历历史测试版本代码,确定历史测试版本代码中与差异代码行对应的历史代码行;
根据差异代码行的行号和与之对应的历史代码行的行号,生成差异代码行和历史代码行的映射关系。
在一些示例中,差异信息结果还包括:当前测试版本代码的文件名;
映射关系子模块还用于:
确定差异代码行和历史代码行的差异内容;
根据当前测试版本代码的文件名获取当前测试版本代码的文件路径;
根据差异代码行的行号和与之对应的历史代码行的行号,生成包含当前测试版本代码的文件路径、差异内容的映射关系。
在一些示例中,第二覆盖子模块具体用于:
针对任一第一未覆盖增量代码的代码行,根据代码行映射关系,确定当前的第一未覆盖增量代码的代码行是否存在与之对应的历史测试版本代码的历史代码行;
若存在,则根据历史增量代码覆盖信息,确定历史代码行覆盖情况。
在一些示例中,覆盖情况包括:历史覆盖或历史未覆盖;
第二覆盖子模块具体用于:
将第一未覆盖增量代码的代码行中,对应的历史代码行的覆盖情况为历史未覆盖的代码行确定为第二未覆盖增量代码;
将不存在对应的历史代码行的第一未覆盖增量代码的代码行确定为第二未覆盖增量代码。
在一些示例中,增量覆盖率确定模块具体用于:
根据第二未覆盖增量代码的代码行数和增量代码的代码行数得到已覆盖增量代码的代码行数;
根据已覆盖增量代码的代码行数和增量代码的代码行数,得到当前测试版本代码的增量覆盖率。
在一些示例中,该装置还可以包括:
覆盖信息模块,用于根据第二未覆盖增量代码和增量代码得到当前测试版本代码的增量代码覆盖信息;
存表模块,用于将当前测试版本代码的增量覆盖率和增量代码覆盖信息存入预设的增量覆盖率详情表和预设的增量覆盖率历史表;
其中,增量覆盖率历史表存入的当前测试版本代码的增量代码覆盖信息,作为下一轮次的测试版本代码对应的历史测试版本代码的历史增量代码覆盖信息。
本公开的技术方案中,所涉及的用户个人信息的获取,存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图5示出了可以用来实施本公开的实施例的示例电子设备500的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图5所示,设备500包括计算单元501,其可以根据存储在只读存储器(ROM)502中的计算机程序或者从存储单元508加载到随机访问存储器(RAM)503中的计算机程序,来执行各种适当的动作和处理。在RAM 503中,还可存储设备500操作所需的各种程序和数据。计算单元501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
设备500中的多个部件连接至I/O接口505,包括:输入单元506,例如键盘、鼠标等;输出单元507,例如各种类型的显示器、扬声器等;存储单元508,例如磁盘、光盘等;以及通信单元509,例如网卡、调制解调器、无线通信收发机等。通信单元509允许设备500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元501可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元501的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元501执行上文所描述的各个方法和处理,例如代码的覆盖率获取方法。例如,在一些实施例中,代码的覆盖率获取方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元508。在一些实施例中,计算机程序的部分或者全部可以经由ROM 502和/或通信单元509而被载入和/或安装到设备500上。当计算机程序加载到RAM 503并由计算单元501执行时,可以执行上文描述的代码的覆盖率获取方法的一个或多个步骤。备选地,在其他实施例中,计算单元501可以通过其他任何适当的方式(例如,借助于固件)而被配置为代码的覆盖率获取方法。
本文中以上描述的***和技术的各种实施方式可以在数字电子电路***、集成电路***、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上***的***(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程***上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储***、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储***、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的***和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的***和技术实施在包括后台部件的计算***(例如,作为数据服务器)、或者包括中间件部件的计算***(例如,应用服务器)、或者包括前端部件的计算***(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的***和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算***中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将***的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机***可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式***的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (20)

1.一种代码的覆盖率获取方法,所述方法包括:
确定当前测试版本代码和所述当前测试版本代码对应的基准版本代码之间的增量代码;
根据所述增量代码与所述当前测试版本代码的增量代码覆盖信息,确定所述增量代码中未被覆盖的第一未覆盖增量代码;
根据所述当前测试版本代码对应的历史测试版本代码的历史增量代码覆盖信息,确定所述第一未覆盖增量代码中,未在所述历史测试版本代码中被覆盖的第二未覆盖增量代码;
根据所述第二未覆盖增量代码和所述增量代码,得到所述当前测试版本代码的增量覆盖率。
2.根据权利要求1所述的方法,其中,所述根据所述当前测试版本代码对应的历史测试版本代码的历史增量代码覆盖信息,确定所述第一未覆盖增量代码中,未在所述历史测试版本代码中被覆盖的第二未覆盖增量代码,包括:
确定所述当前测试版本代码和所述历史测试版本代码之间的代码行映射关系;
根据所述代码行映射关系和所述历史增量代码覆盖信息,确定所述第一未覆盖增量代码的每一代码行在所述历史测试版本代码的覆盖情况,并根据所述每一代码行的所述覆盖情况,得到所述第二未覆盖增量代码。
3.根据权利要求2所述的方法,其中,所述确定所述当前测试版本代码和所述历史测试版本代码之间的代码行映射关系,包括:
通过差异比较工具,比较所述当前测试版本代码和所述历史测试版本代码中发生变更的代码行,得到所述当前测试版本代码和所述历史测试版本代码的差异信息结果;
根据所述差异信息结果,获取所述当前测试版本代码的每一代码行和所述历史测试版本代码的每一代码行的所述代码行映射关系。
4.根据权利要求3所述的方法,其中,所述差异信息结果至少包括:所述当前测试版本代码相较所述历史测试版本代码发生变更的差异代码行的行号;
所述根据所述差异信息结果,获取所述当前测试版本代码的每一代码行和所述历史测试版本代码的每一代码行的所述代码行映射关系,包括:
针对任一差异代码行的行号,确定所述当前测试版本代码中所述差异代码行的行号对应的差异代码行的内容,根据所述差异代码行的内容遍历所述历史测试版本代码,确定所述历史测试版本代码中与所述差异代码行对应的历史代码行;
根据所述差异代码行的行号和与之对应的所述历史代码行的行号,生成所述差异代码行和所述历史代码行的映射关系。
5.根据权利要求4所述的方法,其中,所述差异信息结果还包括:所述当前测试版本代码的文件名;
所述针对任一差异代码行的行号,确定所述当前测试版本代码中所述差异代码行的行号对应的差异代码行的内容,根据所述差异代码行的内容遍历所述历史测试版本代码,确定所述历史测试版本代码中与所述差异代码行对应的历史代码行之后,根据所述差异代码行的行号和与之对应的所述历史代码行的行号,生成所述差异代码行和所述历史代码行的映射关系之前,所述根据所述差异信息结果,获取所述当前测试版本代码的每一代码行和所述历史测试版本代码的每一代码行的所述代码行映射关系,还包括:
确定所述差异代码行和所述历史代码行的差异内容;
根据所述当前测试版本代码的文件名获取所述当前测试版本代码的文件路径;
所述根据所述差异代码行的行号和与之对应的所述历史代码行的行号,生成所述差异代码行和所述历史代码行的映射关系,包括:
所述根据所述差异代码行的行号和与之对应的所述历史代码行的行号,生成包含所述当前测试版本代码的文件路径、所述差异内容的所述映射关系。
6.根据权利要求3-5任一所述的方法,其中,所述根据所述代码行映射关系和所述历史增量代码覆盖信息,确定所述第一未覆盖增量代码的每一代码行在所述历史测试版本代码的覆盖情况,包括:
针对任一所述第一未覆盖增量代码的代码行,根据所述代码行映射关系,确定当前的所述第一未覆盖增量代码的代码行是否存在与之对应的所述历史测试版本代码的历史代码行;
若存在,则根据所述历史增量代码覆盖信息,确定所述历史代码行覆盖情况。
7.根据权利要求5所述的方法,其中,所述覆盖情况包括:历史覆盖或历史未覆盖;
所述并根据所述每一代码行的所述覆盖情况,得到所述第二未覆盖增量代码,包括:
将所述第一未覆盖增量代码的代码行中,对应的所述历史代码行的覆盖情况为历史未覆盖的代码行确定为所述第二未覆盖增量代码;
将不存在对应的所述历史代码行的所述第一未覆盖增量代码的代码行确定为所述第二未覆盖增量代码。
8.根据权利要求1-7任一所述的方法,所述根据所述第二未覆盖增量代码和所述增量代码,得到所述当前测试版本代码的增量覆盖率,包括:
根据所述第二未覆盖增量代码的代码行数和所述增量代码的代码行数得到已覆盖增量代码的代码行数;
根据所述已覆盖增量代码的代码行数和所述增量代码的代码行数,得到所述当前测试版本代码的增量覆盖率。
9.根据权利要求1-8任一所述的方法,所述根据所述第二未覆盖增量代码和所述增量代码,得到所述当前测试版本代码的增量覆盖率之后,所述方法还包括:
根据所述所述第二未覆盖增量代码和所述增量代码得到所述当前测试版本代码的增量代码覆盖信息;
将所述当前测试版本代码的增量覆盖率和所述增量代码覆盖信息存入预设的增量覆盖率详情表和预设的增量覆盖率历史表;
其中,所述增量覆盖率历史表存入的所述当前测试版本代码的所述增量代码覆盖信息,作为下一轮次的测试版本代码对应的所述历史测试版本代码的历史增量代码覆盖信息。
10.一种代码的覆盖率获取装置,所述装置包括:
增量代码确定模块,用于确定当前测试版本代码和所述当前测试版本代码对应的基准版本代码之间的增量代码;
第一未覆盖确定模块,用于根据所述增量代码与所述当前测试版本代码的增量代码覆盖信息,确定所述增量代码中未被覆盖的第一未覆盖增量代码;
第二未覆盖确定模块,用于根据所述当前测试版本代码对应的历史测试版本代码的历史增量代码覆盖信息,确定所述第一未覆盖增量代码中,未在所述历史测试版本代码中被覆盖的第二未覆盖增量代码;
增量覆盖率确定模块,用于根据所述第二未覆盖增量代码和所述增量代码,得到所述当前测试版本代码的增量覆盖率。
11.根据权利要求10所述的装置,其中,所述第二未覆盖确定模块具体包括:
映射关系子模块,用于确定所述当前测试版本代码和所述历史测试版本代码之间的代码行映射关系;
第二覆盖子模块,用于根据所述代码行映射关系和所述历史增量代码覆盖信息,确定所述第一未覆盖增量代码的每一代码行在所述历史测试版本代码的覆盖情况,并根据所述每一代码行的所述覆盖情况,得到所述第二未覆盖增量代码。
12.根据权利要求11所述的装置,其中,所述映射关系子模块具体用于:
通过差异比较工具,比较所述当前测试版本代码和所述历史测试版本代码中发生变更的代码行,得到所述当前测试版本代码和所述历史测试版本代码的差异信息结果;
根据所述差异信息结果,获取所述当前测试版本代码的每一代码行和所述历史测试版本代码的每一代码行的所述代码行映射关系。
13.根据权利要求12所述的装置,其中,所述差异信息结果至少包括:所述当前测试版本代码相较所述历史测试版本代码发生变更的差异代码行的行号;
所述映射关系子模块具体用于:
针对任一差异代码行的行号,确定所述当前测试版本代码中所述差异代码行的行号对应的差异代码行的内容,根据所述差异代码行的内容遍历所述历史测试版本代码,确定所述历史测试版本代码中与所述差异代码行对应的历史代码行;
根据所述差异代码行的行号和与之对应的所述历史代码行的行号,生成所述差异代码行和所述历史代码行的映射关系。
14.根据权利要求13所述的装置,其中,所述差异信息结果还包括:所述当前测试版本代码的文件名;
所述映射关系子模块还用于:
确定所述差异代码行和所述历史代码行的差异内容;
根据所述当前测试版本代码的文件名获取所述当前测试版本代码的文件路径;
所述根据所述差异代码行的行号和与之对应的所述历史代码行的行号,生成包含所述当前测试版本代码的文件路径、所述差异内容的所述映射关系。
15.根据权利要求12-14任一所述的装置,其中,所述第二覆盖子模块具体用于:
针对任一所述第一未覆盖增量代码的代码行,根据所述代码行映射关系,确定当前的所述第一未覆盖增量代码的代码行是否存在与之对应的所述历史测试版本代码的历史代码行;
若存在,则根据所述历史增量代码覆盖信息,确定所述历史代码行覆盖情况。
16.根据权利要求15所述的装置,其中,所述覆盖情况包括:历史覆盖或历史未覆盖;
所述第二覆盖子模块具体用于:
将所述第一未覆盖增量代码的代码行中,对应的所述历史代码行的覆盖情况为历史未覆盖的代码行确定为所述第二未覆盖增量代码;
将不存在对应的所述历史代码行的所述第一未覆盖增量代码的代码行确定为所述第二未覆盖增量代码。
17.根据权利要求10-16任一所述的装置,其中,所述增量覆盖率确定模块具体用于:
根据所述第二未覆盖增量代码的代码行数和所述增量代码的代码行数得到已覆盖增量代码的代码行数;
根据所述已覆盖增量代码的代码行数和所述增量代码的代码行数,得到所述当前测试版本代码的增量覆盖率。
18.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-9中任一项所述的方法。
19.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-9中任一项所述的方法。
20.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-9中任一项所述的方法。
CN202311266549.0A 2023-09-25 2023-09-25 代码的覆盖率获取方法、装置及电子设备 Pending CN117215955A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311266549.0A CN117215955A (zh) 2023-09-25 2023-09-25 代码的覆盖率获取方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311266549.0A CN117215955A (zh) 2023-09-25 2023-09-25 代码的覆盖率获取方法、装置及电子设备

Publications (1)

Publication Number Publication Date
CN117215955A true CN117215955A (zh) 2023-12-12

Family

ID=89040497

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311266549.0A Pending CN117215955A (zh) 2023-09-25 2023-09-25 代码的覆盖率获取方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN117215955A (zh)

Similar Documents

Publication Publication Date Title
CN115169570B (zh) 量子网络协议仿真方法、装置及电子设备
CN113342345A (zh) 深度学习框架的算子融合方法、装置
CN113392346A (zh) 资源文件的路径处理方法、装置、电子设备及存储介质
CN115509522A (zh) 面向低代码场景的接口编排方法、***、电子设备
CN112926008B (zh) 生成表单页面的方法、装置、电子设备和存储介质
CN114816393A (zh) 信息生成方法、装置、设备以及存储介质
CN113127357B (zh) 单元测试方法、装置、设备、存储介质及程序产品
CN116302218B (zh) 函数信息的添加方法、装置、设备以及存储介质
CN115269431A (zh) 一种接口测试方法、装置、电子设备及存储介质
CN115309730A (zh) 数据审核方法、装置、电子设备及存储介质
CN117215955A (zh) 代码的覆盖率获取方法、装置及电子设备
CN115408297A (zh) 测试方法、装置、设备及介质
CN115269418A (zh) 一种覆盖率采集方法、装置、设备及存储介质
CN114579466A (zh) 构建测试用例和代码测试的方法、装置、设备及介质
CN114021642A (zh) 数据处理方法、装置、电子设备和存储介质
CN112068814A (zh) 可执行文件的生成方法、装置、***及介质
CN113835893B (zh) 数据处理的方法、装置、设备、存储介质及程序产品
CN113010182B (zh) 升级文件的生成方法、装置和电子设备
CN113760765B (zh) 代码测试方法、装置、电子设备和存储介质
CN116610582A (zh) 一种测试范围确定方法、装置、电子设备及介质
CN114816758B (zh) 资源分配方法和装置
CN117573561B (zh) 一种自动化测试***、方法、电子设备和存储介质
CN117411939A (zh) 序列化数据解析方法、装置、设备及存储介质
CN115686479A (zh) 一种文件的创建方法和相关装置
CN118364810A (zh) 一种识别方法、装置、设备及存储介质

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