CN111444087A - 一种覆盖率数据处理方法、装置、计算设备及可读存储介质 - Google Patents

一种覆盖率数据处理方法、装置、计算设备及可读存储介质 Download PDF

Info

Publication number
CN111444087A
CN111444087A CN202010140207.4A CN202010140207A CN111444087A CN 111444087 A CN111444087 A CN 111444087A CN 202010140207 A CN202010140207 A CN 202010140207A CN 111444087 A CN111444087 A CN 111444087A
Authority
CN
China
Prior art keywords
version
code
line
row
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.)
Granted
Application number
CN202010140207.4A
Other languages
English (en)
Other versions
CN111444087B (zh
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.)
Beijing Cheerbright Technologies Co Ltd
Original Assignee
Beijing Cheerbright Technologies 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 Beijing Cheerbright Technologies Co Ltd filed Critical Beijing Cheerbright Technologies Co Ltd
Priority to CN202010140207.4A priority Critical patent/CN111444087B/zh
Publication of CN111444087A publication Critical patent/CN111444087A/zh
Application granted granted Critical
Publication of CN111444087B publication Critical patent/CN111444087B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种覆盖率数据处理方法,包括:获取目标项目下当前版本的代码覆盖率数据;获取目标项目下相邻的先前版本的多版本代码覆盖率数据;比较当前版本与先前版本之间的代码差异;至少基于代码差异,确定当前版本与先前版本之间的代码行对应关系;以及基于代码行对应关系、先前版本的多版本代码覆盖率数据和当前版本的代码覆盖率数据,生成当前版本的多版本代码覆盖率数据。本发明还公开了对应的覆盖率数据处理装置、计算设备和可读存储介质。

Description

一种覆盖率数据处理方法、装置、计算设备及可读存储介质
技术领域
本发明涉及计算机技术领域,尤其涉及一种覆盖率数据处理方法、装置、计算设备及可读存储介质。
背景技术
开发人员进行软件开发的过程中,需要对已经开发完成的代码进行测试,其中包括代码的覆盖率测试。代码覆盖(Code coverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得到的比例称为代码覆盖率。代码覆盖率反映测试用例对被测软件覆盖程度的重要指标,是用来度量测试完整性的一个参考值,通过代码覆盖率数据可以评估测试是否充分。
目前,通常获取到的是目标项目下相邻版本之间的增量覆盖率数据、或者某个版本的全量覆盖率数据。然而目标项目的开发过程中往往会快速迭代多个版本,单个版本的全量覆盖率数据或者相邻版本的增量覆盖率数据存在不够全面准确的问题。
因此,迫切需要一种更先进的覆盖率数据处理方案。
发明内容
为此,本发明实施例提供一种覆盖率数据处理方法、装置、计算设备及可读存储介质,以力图解决或者至少缓解上面存在的至少一个问题。
根据本发明实施例的一个方面,提供了一种覆盖率数据处理方法,包括:获取目标项目下当前版本的代码覆盖率数据;获取目标项目下相邻的先前版本的多版本代码覆盖率数据;比较当前版本与先前版本之间的代码差异;至少基于代码差异,确定当前版本与先前版本之间的代码行对应关系;以及基于代码行对应关系、先前版本的多版本代码覆盖率数据和当前版本的代码覆盖率数据,生成当前版本的多版本代码覆盖率数据。
可选地,在根据本发明实施例的方法中,确定当前版本与先前版本之间的代码行对应关系的步骤包括:基于代码差异,更新目标项目对应的版本行号矩阵,版本行号矩阵可以指示目标项目下至少一个版本之间的代码行对应关系;基于更新后的版本行号矩阵,确定当前版本与先前版本之间的代码行对应关系。
可选地,在根据本发明实施例的方法中,行号对应矩阵的元素包括目标项目下各版本包括的代码行的行号,版本行号矩阵的各列向量对应于目标项目的各版本,相邻版本中具有对应关系的代码行的行号位于行号对应矩阵的同一行。
可选地,在根据本发明实施例的方法中,更新目标项目对应的版本行号矩阵的步骤包括:在版本行号矩阵中新增对应于当前版本的列向量;对新增的列向量的元素进行逐行遍历,并对遍历到的各行,判断该行是否对应于代码差异记录的变动代码行;如果该行不对应于变动代码行,则令该行元素的值等于先前版本对应列向量中的同行元素的值。
可选地,在根据本发明实施例的方法中,更新目标项目对应的版本行号矩阵的步骤包括:如果该行对应于变动代码行且变动标记为增加标记,则在该行与该行的上一行之间新增一行;令当前版本的列向量在新增行的元素的值为变动代码行在当前版本中的行号,令其他列向量在新增行的元素的值为特定标记,令该列向量在该新增行之下的各行元素的值等于先前版本对应列向量中的同行元素的值再加1。
可选地,在根据本发明实施例的方法中,更新目标项目对应的版本行号矩阵的步骤包括:如果该行对应于变动代码行且变动标记为删除标记,则令该行元素的值为特定标记,令当前版本的列向量在该行之下的各行元素的值等于先前版本对应列向量中的同行元素的值再减1。
可选地,在根据本发明实施例的方法中,确定当前版本与先前版本之间的代码行对应关系的步骤包括:对于当前版本的各代码行,确定代码行对应的矩阵元素;在先前版本对应的列向量中获取与代码行对应的矩阵元素位于同一行且值不为特定标记的矩阵元素;确定先前版本中行号为所获取的矩阵元素的代码行与当前版本的代码行具有对应关系。
可选地,在根据本发明实施例的方法中,相应代码覆盖率数据包括相应版本中各代码行的覆盖结果,生成当前版本的所述多版本代码覆盖率数据的步骤包括:对于当前版本的各代码行,从当前版本的代码覆盖率数据中获取代码行的覆盖结果;基于代码行对应关系,确定当前版本的代码行在先前版本中的对应代码行;从先前版本的多版本代码覆盖率数据中获取对应代码行的多版本覆盖结果;基于代码行的覆盖结果和对应代码行的多版本覆盖结果,生成代码行的多版本覆盖结果。
可选地,在根据本发明实施例的方法中,代码行的覆盖结果为代码行是否被覆盖,生成代码行的多版本覆盖结果的步骤包括:如果代码行的覆盖结果和对应代码行的多版本覆盖结果中任一个为被覆盖,则确定代码行的覆盖结果为被覆盖。
可选地,在根据本发明实施例的方法中,代码行包括多个分支逻辑,代码行的覆盖结果包括代码行中各分支逻辑的覆盖结果,生成代码行的多版本覆盖结果的步骤包括:对于代码行的各分支逻辑,获取代码行的覆盖结果中分支逻辑的覆盖结果、以及对应代码行的多版本覆盖结果中分支逻辑的多版本覆盖结果;如果二者中任一个为被覆盖,则确定分支逻辑的覆盖结果为被覆盖。
可选地,在根据本发明实施例的方法中,获取当前版本的代码覆盖率数据的的步骤包括:将当前版本的多条代码覆盖率信息合并。
可选地,在根据本发明实施例的方法中,比较目标项目的当前版本与先前版本之间的代码差异的步骤包括:采用diff工具来比较。
可选地,在根据本发明实施例的方法中,还包括:比较当前版本与指定先前版本之间的代码差异;基于代码差异和当前版本的多版本代码覆盖率数据,生成当前版本相对于指定先前版本的多版本增量代码覆盖率数据。
根据本发明实施例的另一个方面,提供了一种覆盖率数据处理装置,包括:数据获取模块,适于获取目标项目下当前版本的代码覆盖率数据;还适于获取目标项目下相邻的先前版本的多版本代码覆盖率数据;差异比较模块,适于比较当前版本与先前版本之间的代码差异;关系确定模块,适于至少基于代码差异,确定当前版本与先前版本之间的代码行对应关系;以及数据生成模块,适于基于代码行对应关系、先前版本的多版本代码覆盖率数据和当前版本的代码覆盖率数据,生成当前版本的多版本代码覆盖率数据。。
根据本发明实施例的另一个方面,提供了一种计算设备,包括:一个或多个处理器;存储器;以及一个或多个程序,其中一个或多个程序存储在存储器中并被配置为由一个或多个处理器执行,该一个或多个程序包括用于执行根据本发明实施例的覆盖率数据处理方法中的任一方法的指令。
根据本发明实施例的还有一个方面,提供了一种存储程序的可读存储介质,该程序包括指令,该指令当由计算设备执行时,使得计算设备执行根据本发明实施例的覆盖率数据处理方法的中任一方法。
根据本发明实施例的覆盖率数据处理方法,利用目标项目下当前版本与相邻先前版本之间的代码差异和目标项目的版本行号矩阵,实现了当前版本的代码覆盖率数据与相邻先前版本的多版本代码覆盖率数据的聚合,避免了跨版本代码覆盖率数据合并的数据错乱问题,提高了代码覆盖率数据的全面性和准确性。其中,将不同版本之间的代码行对应关系采用版本行号矩阵来描述,为后续跨版本覆盖率数据聚会和增量覆盖率数据提取带了极大便利。进一步地,还基于版本行号矩阵,对相同目标项目下不同版本的同一代码行的覆盖结果和/或分支逻辑的覆盖结果进行了聚合,实现对整体项目增量覆盖的精准聚合把控,避免了错误覆盖和重复覆盖。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个实施例的一种覆盖率数据处理系统100的示意图;
图2示出了根据本发明一个实施例的计算设备200的示意图;
图3示出了根据本发明一个实施例的覆盖率数据处理方法300的流程图;
图4示出了根据本发明一个实施例的多个版本的变动示意图。以及
图5示出了根据本发明一个实施例的覆盖率数据处理装置500的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的覆盖率数据处理系统100的示意图。如图1所示,覆盖率数据处理系统100包括被测服务器110、覆盖率监控服务器120和覆盖率数据处理装置500。在其他实施方式中,覆盖率数据处理系统100可以包括不同的和/或附加的模块。
被测服务器110部署有需要进行测试的项目(后文简称为目标项目)下某个版本(后文简称为被测版本)的代码、以及覆盖率监控服务器120的监控探针121。被测服务器110启动之后,测试人员执行相应测试用例,监控探针121可以获取该被测版本的原始代码覆盖率数据,并发送给覆盖率监控服务器120。此处,代码覆盖率数据为全量代码覆盖率数据,如无特别说明,后文提到的代码覆盖率数据均为全量代码覆盖率数据。其中,原始代码覆盖率数据通常为exec格式。
覆盖率监控服务器120存储有被测版本的代码(例如代码的源文件和编译后的编译文件)。覆盖率监控服务器120可以根据代码的源文件和编译后的编译文件、被测版本的原始代码覆盖率数据生成该被测版本的代码覆盖率数据。覆盖率监控服务器120通常可以实现为诸如Jacoco、Emma和Cobertura之类的覆盖率监控工具。代码覆盖率数据通常可以为诸如xml、html和json格式之类的可视化格式。
根据本发明的一个实施方式,覆盖率数据处理系统100还可以包括代码版本管理装置130。代码版本管理装置130可以对目标项目的各版本的代码进行管理,并通常可以实现为诸如Git、SVN之类的代码版本控制工具。
代码版本管理装置130还可以比较不同版本之间的代码差异,例如比较比较当前版本和先前版本之间的代码差异。可以采用diff工具来进行比较。
覆盖率数据处理装置500则可以与覆盖率监控服务器120通过网络进行通信,例如,覆盖率数据处理装置500可以从覆盖率监控服务器120获取目标项目下被测版本的代码覆盖率数据,并存储。覆盖率数据处理装置800还可以与和代码版本管理装置130通过网络进行通信,例如从代码版本管理装置130获取两个不同版本之间的代码差异。
覆盖率数据处理装置800通常存储有目标项目的至少一个版本的代码覆盖率数据,并可以基于当前版本与相邻的先前版本之间的代码差异,将目标项目下当前版本的代码覆盖率数据与目标项目下该相邻的先前版本的代码覆盖率数据进行聚合,从而得到更为准确、更为全面的当前版本的多版本代码覆盖率数据。
根据本发明的实施方式,上述覆盖率数据处理系统100中的各部件均可以通过如下所述的计算设备200来实现。
图2示出了根据本发明一个实施例的计算设备200的示意图。如图2所示,在基本的配置202中,计算设备200典型地包括系统存储器206和一个或者多个处理器204。存储器总线208可以用于在处理器204和系统存储器206之间的通信。
取决于期望的配置,处理器204可以是任何类型的处理器,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器204可以包括诸如一级高速缓存210和二级高速缓存212之类的一个或者多个级别的高速缓存、处理器核心214和寄存器216。示例的处理器核心214可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器218可以与处理器204一起使用,或者在一些实现中,存储器控制器218可以是处理器204的一个内部部分。
取决于期望的配置,系统存储器206可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器206可以包括操作系统220、一个或者多个应用222以及程序数据224。在一些实施方式中,应用222可以布置为在操作系统上由一个或多个处理器204利用程序数据224执行指令。
计算设备200还可以包括有助于从各种接口设备(例如,输出设备242、外设接口244和通信设备246)到基本配置202经由总线/接口控制器230的通信的接口总线240。示例的输出设备242包括图形处理单元248和音频处理单元250。它们可以被配置为有助于经由一个或者多个A/V端口252与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口244可以包括串行接口控制器254和并行接口控制器256,它们可以被配置为有助于经由一个或者多个I/O端口258和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备246可以包括网络控制器260,其可以被布置为便于经由一个或者多个通信端口264与一个或者多个其他计算设备262通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以是这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备200可以实现为服务器,例如数据库服务器、应用程序服务器和WEB服务器等,也可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。当然,计算设备200也可以实现为小尺寸便携(或者移动)电子设备的至少一部分。
在根据本发明的实施例中,计算设备200可以实现为覆盖率数据处理装置500,并被配置为执行根据本发明实施例的覆盖率数据处理方法300。其中,计算设备200的应用222中包含执行根据本发明实施例的覆盖率数据处理方法300的多条指令,而程序数据224还可以存储覆盖率数据处理系统100的配置数据等内容。
图3示出了根据本发明一个实施例的覆盖率数据处理方法300的流程图。覆盖率数据处理方法300可以在覆盖率数据处理装置500中执行,并如图3所示,始于步骤S310。
在步骤S310中,可以获取目标项目下当前版本的代码覆盖率数据,例如从覆盖率监控服务器120处获取。其中,当前版本可以是目标版本的任一版本,例如目标项目的最新版本、开发人员所关注的版本、或者需要进行补充测试的版本。
在一些实施例中,可以经由代码版本管理装置130监测目标项目的代码发布情况。当监测到目标项目的新版本发布时,可以从覆盖率监控服务器120处获取该新版本的代码覆盖率数据,或者也可以由覆盖率监控服务器120主动下发。
应当指出,在分布式测试的情况下,可以获取到目标项目当前版本的多条代码覆盖率数据,因此,还可以将当前版本的这多条代码覆盖率数据进行合并。此时,由于这多条代码覆盖率数据均为同一版本,可以调用覆盖率监控服务器120的合并(merge)命令进行合并,而不会造成跨版本合并的数据错乱问题。
在步骤S320中,可以获取目标项目下相邻的先前版本的代码覆盖率数据。其中,相邻的先前版本为发布时间在当前版本之前的第一个版本,即当前版本的前一个版本。该相邻的先前版本的代码覆盖率数据同样可以从覆盖率监控服务器120处获取。
在步骤S330中,可以比较当前版本与先前版本之间的代码差异。可以经由代码版本管理装置130来进行比较。或者,也可以获取当前版本的代码和先前版本的代码之后,由覆盖率数据处理装置800来比较当前版本与先前版本之间的代码差异。通常可以采用diff工具进行比较。
在一些实施例中,代码差异可以记录有进行比较的两个版本之间的变动代码行以及变动代码行的变动标记。变动标记可以包括增加标记和/或删除标记。增加标记指示该代码行为新增的,即变动前的版本不包括该代码行,变动后的版本包括该代码行。删除标记指示该代码行被删除,即变动前的版本包括该代码行,变动后的版本不包括该代码行。
以下是采用diff工具比较得到的代码差异的一个示例:
“diff--git V1/test V2/test
---V1/test
+++V2/test
@@-1,7+1,7@@
a
a
a
-a
+b
a
a
a”。
在该示例中,第一行表示该示例是Git格式的diff结果,并且进行比较的是V1版本的test(即变动前)和V2版本的test(即变动后)。“---”表示变动前的版本,“+++”表示变动后的版本。变动的位置用两个@符号作为起首和结束。“-1,7”表示下面内容是V1版本从第1行开始的连续7行,“+1,7”表示变动后,下面内容成为V2版本从第1行开始的连续7行。
在变动的具体内容中,前三行和后三行的代码行前面没有变动标记(或者变动标记为空),表示这些代码行没有变动,不是变动代码行。第四行和第五行的代码行前面存在变动标记,表示这些代码行为变动代码行。第四行的变动标记为删除标记“-”,表示其是V1版本删除的代码行。第五行的变动标记为增加标记“+”,表示其V2版本新增的代码行。
应当指出,上述示例的格式仅为示意,代码差异还可以具有其他格式,本发明实施例对此不做限制。得到当前版本与先前版本之间的代码差异之后,可以在步骤S340中,至少基于该代码差异,确定当前版本与先前版本之间的代码行对应关系。
在一些实施例中,可以基于该代码差异,获取目标项目对应的版本行号矩阵,并更新该版本行号矩阵。版本行号矩阵可以指示目标项目下至少一个版本之间的代码行对应关系。
版本行号矩阵以目标项目的多个版本的行号为矩阵元素的值。具体地,版本行号矩阵的各个列向量对应于目标项目的各个版本。各版本的代码行的行号有序排列形成各个列向量,多个列向量按照对应版本的发布时间有序排列形成版本行号矩阵。并且,相邻版本中具有对应关系的代码行的行号位于该行号对应矩阵的同一行。
版本行号矩阵还可以以特定标记为矩阵元素的值。对于各版本所包含的代码行的行号来说,如果与该行号在版本行号矩阵中位于同一行的相邻元素为特定标记(例如可以),则表示该特定标记所在列向量对应的版本中不存在该代码行。也就是说,该代码行在该特定标记对应的版本中没有对应代码行。
下面具体描述更新目标项目对应的版本行号矩阵的过程。
可以在版本行号矩阵中新增对应于当前版本的列向量,并对该列向量的元素进行逐行遍历。对遍历到的各行,判断该行是否对应于代码差异所记录的变动代码行。例如,可以判断该行的行数是否等于变动代码行的行号,如果等于,则该行对应于变动代码行,如果不等于,则不对应。
其中,可以根据变动标记确定变动代码行所在的版本。例如,如果变动标记为增加标记,则该变动代码行位于变动后的版本,也就是当前版本中。如果变动标记为删除标记,则该变动代码行位于变动前的版本,即先前版本中。接着,可以确定变动代码行在当前版本或者先前版本中的行号。
如果不对应于变动代码行,则令该行元素的值等于先前版本对应列向量中的同行元素的值。如果对应于变动代码行且变动标记为增加标记,则在该行与该行的上一行之间新增一行,并令该列向量在新增行的元素的值为变动代码行在当前版本中的行号,令其他列向量在新增行的元素的值为特定标记。并且,令该列向量在该新增行之下的各行元素的值等于先前版本对应列向量中的同行元素的值再加1。
如果对应于变动代码行且变动标记为删除标记,则令该行元素的值为特定标记,令该列向量在该行之下的各行元素的值等于先前版本对应列向量中的同行元素的值再减1。
如果获取不到版本行号矩阵,即当前版本不存在先前版本,那么可以基于当前版本创建版本行号矩阵。此时所创建的版本行号矩阵仅包括对应于当前版本的列向量。
更新之后,可以根据更新后的版本行号矩阵,确定当前版本与先前版本之间的代码行对应关系。根据上文的描述,对于当前版本的各代码行,可以确定该代码行对应的矩阵元素,在先前版本对应的列向量中获取与该矩阵元素位于同一行且值不为特定标记的矩阵元素,那么先前版本中行号为所获取的矩阵元素的值的代码行与当前版本的该代码行具有对应关系。
图4示出了根据本发明一个实施例的多个版本的变动示意图。假设某目标项目先后发布了该目标项目的版本a、版本b和版本c。其中,版本a包括4个代码行,版本b包括5个代码行,版本c包括4个代码行。版本a在其第2行和第3行之间增加了一行,得到版本b。版本b删除了其第2行得到版本c。
响应于发布版本a,由于不存在版本a的先前版本,那么可以生成目标项目的如下所示的行号对应矩阵A,矩阵A仅包括版本a对应的列向量。
Figure BDA0002398825380000111
响应于发布版本b,获取版本b和版本a之间的代码差异,代码差异指示版本b中行号为3的代码行为新增(如图4中的“+”所示)的变动代码行,因此,可以更新行号对应矩阵A,得到如下所示的行号对应矩阵B。
Figure BDA0002398825380000112
从该矩阵B可以看到,版本b中行号为1的代码行对应于版本a中行号为1的代码行,版本b中行号为2的代码行对应于版本a中行号为2的代码行,版本b中行号为4的代码行对应于版本a中行号为3的代码行,版本b中行号为5的代码行对应于版本a中行号为4的代码行。在矩阵B中,版本b中行号为3的代码行对应的版本a的矩阵元素为特定标记0,也就是说,版本a中不存在对应于版本b中行号为3的代码行的代码行。
响应于发布版本c,获取版本c和版本b之间的代码差异,代码差异指示版本b中行号为2的代码行为删除(如图4中的“-”所示)的变动代码行,因此,可以更新行号对应矩阵B,得到如下所示的行号对应矩阵C。
Figure BDA0002398825380000121
从该矩阵C可以看到,版本c中行号为1的代码行对应于版本b中行号为1的代码行,版本c中行号为2的代码行对应于版本b中行号为3的代码行,版本c中行号为3的代码行对应于版本b中行号为4的代码行,版本c中行号为4的代码行对应于版本b中行号为5的代码行。在矩阵C中,版本b中行号为2的代码行对应的版本c的矩阵元素为特定标记0,也就是说,版本c中不存在对应于版本b中行号为2的代码行的代码行。
显然地,将相邻版本之间的代码行对应关系转换为行号对应矩阵,可以简单清楚地表示代码行对应关系,给开发人员带来便利。
而后,可以在步骤S350中,基于代码行对应关系、先前版本的多版本代码覆盖率数据和当前版本的代码覆盖率信息,生成当前版本的多版本代码覆盖率数据。
可以理解地,一个版本的代码覆盖率数据包括该版本中各代码行的覆盖结果,覆盖结果指示该代码行是否被覆盖。具体地,对于当前版本的各代码行,可以从当前版本的代码覆盖率数据中获取该代码行的覆盖结果。基于代码行对应关系,确定该代码行在先前版本中的对应代码行。接着,从先前版本的多版本代码覆盖率数据中获取该对应代码行的多版本覆盖结果,基于该代码行的覆盖结果和该代码行在先前版本中对应代码行的多版本覆盖结果,生成该代码行的多版本覆盖结果。
其中,如果该代码行的覆盖结果和该代码行在先前版本中对应代码行的多版本覆盖结果中的任一个结果为被覆盖,则可以确定该代码行的多版本覆盖结果为被覆盖。如果该代码行的覆盖结果和该代码行在先前版本中对应代码行的多版本覆盖结果中的所有结果均为未被覆盖,则可以确定该代码行的多版本覆盖结果为未被覆盖。
根据本发明的一个实施方式,代码行可以包括多个分支逻辑,该代码行的覆盖结果则可以包括该代码行中各分支逻辑的覆盖结果,分支逻辑的覆盖结果指示该分支逻辑是否被覆盖。
以下是一个包括多个分支逻辑的代码行的示例:
Figure BDA0002398825380000131
该代码行包括两个分支逻辑:一个“return 0”的分支和一个“return 1”的分支。
对于代码行的各分支逻辑,可以从当前版本的代码覆盖率数据中,获取该代码行的覆盖结果中该分支逻辑的覆盖结果,以及从先前版本的多版本代码覆盖率数据中,获取该代码行在先前版本中对应代码行的覆盖结果中该分支逻辑的多版本覆盖结果。如果这两个覆盖结果中的任一个结果为被覆盖,则确定该分支逻辑的覆盖结果为被覆盖。如果这两个覆盖结果中的所有结果均为未被覆盖,则可以确定该分支逻辑的覆盖结果为未被覆盖。
这样,就得到了当前版本的多版本代码覆盖率数据,避免了合并跨版本的代码覆盖率数据所导致的数据错乱问题。同时,基于版本行号矩阵,对相同的目标项目下不同版本的同一代码行的覆盖结果和/或分支逻辑的覆盖结果进行了聚合,实现对整体项目增量覆盖的精准聚合把控,避免了错误覆盖和重复覆盖。
进一步地,如果需要获取当前版本与指定先前版本之间的增量代码覆盖率数据,则可以比较当前版本与指定先前版本之间的代码差异。同样可以经由代码版本管理装置130来进行比较。或者,也可以获取当前版本的代码和指定先前版本的代码之后,由覆盖率数据处理装置800来比较当前版本与指定先前版本之间的代码差异。
接着,可以基于该代码差异和当前版本的多版本代码覆盖率数据,生成当前版本相对于指定先前版本的多过程增量代码覆盖率数据。这样,在实现查看增量覆盖率数据的情况下,提高了增量代码覆盖率的获取准确性。
图5示出了根据本发明一个实施例的代码覆盖率数据装置500的结构框图。如图5所示,代码覆盖率数据装置500可以包括数据获取模块510、差异比较模块520、关系确定模块530和数据生成模块540。
数据获取模块510适于获取目标项目下当前版本的代码覆盖率数据,还适于获取目标项目下相邻的先前版本的多版本代码覆盖率数据。差异比较模块520适于比较所述当前版本与所述先前版本之间的代码差异。关系确定模块530与差异比较模块520相耦接,适于至少基于所述代码差异,确定所述当前版本与所述先前版本之间的代码行对应关系。数据生成模块540与数据获取模块510和关系确定模块530相耦接,适于基于代码行对应关系、先前版本的多版本代码覆盖率数据和当前版本的代码覆盖率数据,生成当前版本的多版本代码覆盖率数据。
以上在结合图1~图5说明覆盖率数据处理系统100以及覆盖率数据处理方法300的具体描述中已经对覆盖率数据处理装置600各模块中的相应处理进行了详细解释,这里不再对重复内容进行赘述。
应当理解,这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如软盘、CD-ROM、硬盘驱动器或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被该机器执行时,该机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的该程序代码中的指令,执行本发明的各种方法。
以示例而非限制的方式,计算机可读介质包括计算机存储介质和通信介质。计算机可读介质包括计算机存储介质和通信介质。计算机存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在计算机可读介质的范围之内。
应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本发明实施例还可以包括:A8、如A1所述的方法,其中,相应代码覆盖率数据包括相应版本中各代码行的覆盖结果,生成所述当前版本的所述多版本代码覆盖率数据的步骤包括:对于所述当前版本的各代码行,从所述当前版本的代码覆盖率数据中获取所述代码行的覆盖结果;基于所述代码行对应关系,确定所述当前版本的所述代码行在所述先前版本中的对应代码行;从所述先前版本的多版本代码覆盖率数据中获取所述对应代码行的多版本覆盖结果;基于所述代码行的覆盖结果和所述对应代码行的多版本覆盖结果,生成所述代码行的多版本覆盖结果。A9、如A8所述的方法,其中,所述代码行的覆盖结果为所述代码行是否被覆盖,生成所述代码行的多版本覆盖结果的步骤包括:如果所述代码行的覆盖结果和所述对应代码行的多版本覆盖结果中任一个为被覆盖,则确定所述代码行的覆盖结果为被覆盖。A10、如A8所述的方法,其中,所述代码行包括多个分支逻辑,所述代码行的覆盖结果包括所述代码行中各分支逻辑的覆盖结果,生成所述代码行的多版本覆盖结果的步骤包括:对于所述代码行的各分支逻辑,获取所述代码行的覆盖结果中所述分支逻辑的覆盖结果、以及所述对应代码行的多版本覆盖结果中所述分支逻辑的多版本覆盖结果;如果二者中任一个为被覆盖,则确定所述分支逻辑的覆盖结果为被覆盖。A11、如A1所述的方法,其中,获取所述当前版本的代码覆盖率数据的的步骤包括:将所述当前版本的多条代码覆盖率信息合并。A12、如A1所述的方法,其中,比较所述目标项目的所述当前版本与所述先前版本之间的代码差异的步骤包括:采用diff工具来比较。A13、如A1所述的方法,其中,还包括:比较所述当前版本与指定先前版本之间的代码差异;基于所述代码差异和所述当前版本的多版本代码覆盖率数据,生成所述当前版本相对于所述指定先前版本的多版本增量代码覆盖率数据。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

Claims (10)

1.一种覆盖率数据处理方法,包括:
获取目标项目下当前版本的代码覆盖率数据;
获取所述目标项目下相邻的先前版本的多版本代码覆盖率数据;
比较所述当前版本与所述先前版本之间的代码差异;
至少基于所述代码差异,确定所述当前版本与所述先前版本之间的代码行对应关系;以及
基于所述代码行对应关系、所述先前版本的多版本代码覆盖率数据和所述当前版本的代码覆盖率数据,生成所述当前版本的多版本代码覆盖率数据。
2.如权利要求1所述的方法,其中,确定所述当前版本与所述先前版本之间的所述代码行对应关系的步骤包括:
基于所述代码差异,更新所述目标项目对应的版本行号矩阵,所述版本行号矩阵可以指示所述目标项目下至少一个版本之间的代码行对应关系;
基于更新后的版本行号矩阵,确定所述当前版本与所述先前版本之间的所述代码行对应关系。
3.如权利要求2所述的方法,其中,所述行号对应矩阵的元素包括所述目标项目下各版本包括的代码行的行号,所述版本行号矩阵的各列向量对应于所述目标项目的各版本,相邻版本中具有对应关系的代码行的行号位于所述行号对应矩阵的同一行。
4.如权利要求2所述的方法,其中,更新所述目标项目对应的版本行号矩阵的步骤包括:
在所述版本行号矩阵中新增对应于所述当前版本的列向量;
对新增的列向量的元素进行逐行遍历,并对遍历到的各行,
判断该行是否对应于所述代码差异记录的所述变动代码行;
如果该行不对应于变动代码行,则令该行元素的值等于所述先前版本对应列向量中的同行元素的值。
5.如权利要求4所述的方法,其中,更新所述目标项目对应的版本行号矩阵的步骤包括:
如果该行对应于变动代码行且所述变动标记为增加标记,则在该行与该行的上一行之间新增一行;
令所述当前版本的列向量在新增行的元素的值为所述变动代码行在所述当前版本中的行号,令其他列向量在新增行的元素的值为特定标记,令该列向量在该新增行之下的各行元素的值等于先前版本对应列向量中的同行元素的值再加1。
6.如权利要求4所述的方法,其中,更新所述目标项目对应的版本行号矩阵的步骤包括:
如果该行对应于变动代码行且所述变动标记为删除标记,则令该行元素的值为特定标记,令所述当前版本的列向量在该行之下的各行元素的值等于所述先前版本对应列向量中的同行元素的值再减1。
7.如权利要求3所述的方法,其中,确定所述当前版本与所述先前版本之间的所述代码行对应关系的步骤包括:
对于所述当前版本的各代码行,确定所述代码行对应的矩阵元素;
在所述先前版本对应的列向量中获取与所述代码行对应的矩阵元素位于同一行且值不为特定标记的矩阵元素;
确定所述先前版本中行号为所获取的矩阵元素的代码行与所述当前版本的所述代码行具有对应关系。
8.一种覆盖率数据处理装置,包括:
数据获取模块,适于获取目标项目下当前版本的代码覆盖率数据;获取所述目标项目下相邻的先前版本的多版本代码覆盖率数据;
差异比较模块,适于比较所述当前版本与所述先前版本之间的代码差异;
关系确定模块,适于至少基于所述代码差异,确定所述当前版本与所述先前版本之间的代码行对应关系;以及
数据生成模块,适于基于所述代码行对应关系、所述先前版本的多版本代码覆盖率数据和所述当前版本的代码覆盖率数据,生成所述当前版本的多版本代码覆盖率数据。
9.一种计算设备,包括:
一个或多个处理器;
存储器;以及
一个或多个程序,其中所述一个或多个程序存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序包括用于执行如权利要求1-7所述的覆盖率数据处理方法中的任一方法的指令。
10.一种存储程序的可读存储介质,所述程序包括指令,所述指令当由计算设备执行时,使得所述计算设备执行如权利要求1-7所述的覆盖率数据处理方法中的任一方法。
CN202010140207.4A 2020-03-03 2020-03-03 一种覆盖率数据处理方法、装置、计算设备及可读存储介质 Active CN111444087B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010140207.4A CN111444087B (zh) 2020-03-03 2020-03-03 一种覆盖率数据处理方法、装置、计算设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010140207.4A CN111444087B (zh) 2020-03-03 2020-03-03 一种覆盖率数据处理方法、装置、计算设备及可读存储介质

Publications (2)

Publication Number Publication Date
CN111444087A true CN111444087A (zh) 2020-07-24
CN111444087B CN111444087B (zh) 2023-12-01

Family

ID=71648710

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010140207.4A Active CN111444087B (zh) 2020-03-03 2020-03-03 一种覆盖率数据处理方法、装置、计算设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN111444087B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112148590A (zh) * 2020-08-27 2020-12-29 浙江大搜车融资租赁有限公司 一种代码覆盖率的确定方法、装置及设备
CN112463620A (zh) * 2020-12-03 2021-03-09 广州品唯软件有限公司 安卓软件集成测试中的覆盖率测试方法、装置
CN112597041A (zh) * 2020-12-28 2021-04-02 上海品顺信息科技有限公司 代码覆盖率的跨分支合并方法、系统、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105988926A (zh) * 2015-02-13 2016-10-05 腾讯科技(深圳)有限公司 多版本测试数据的处理方法和装置
US20160299835A1 (en) * 2015-04-08 2016-10-13 Opshub, Inc. Method and system for providing delta code coverage information
CN106547680A (zh) * 2015-09-17 2017-03-29 腾讯科技(深圳)有限公司 覆盖率测试中的数据处理方法和装置
CN108519945A (zh) * 2018-03-21 2018-09-11 腾讯科技(深圳)有限公司 覆盖率测试方法、装置及存储设备
CN108829580A (zh) * 2018-05-07 2018-11-16 百度在线网络技术(北京)有限公司 多版本测试数据处理方法、装置、设备及存储介质
CN110209568A (zh) * 2018-04-24 2019-09-06 腾讯科技(深圳)有限公司 覆盖率测试方法、装置及存储设备
CN110727602A (zh) * 2019-10-23 2020-01-24 网易(杭州)网络有限公司 覆盖率数据的处理方法、装置及存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105988926A (zh) * 2015-02-13 2016-10-05 腾讯科技(深圳)有限公司 多版本测试数据的处理方法和装置
US20160299835A1 (en) * 2015-04-08 2016-10-13 Opshub, Inc. Method and system for providing delta code coverage information
CN106547680A (zh) * 2015-09-17 2017-03-29 腾讯科技(深圳)有限公司 覆盖率测试中的数据处理方法和装置
CN108519945A (zh) * 2018-03-21 2018-09-11 腾讯科技(深圳)有限公司 覆盖率测试方法、装置及存储设备
CN110209568A (zh) * 2018-04-24 2019-09-06 腾讯科技(深圳)有限公司 覆盖率测试方法、装置及存储设备
CN108829580A (zh) * 2018-05-07 2018-11-16 百度在线网络技术(北京)有限公司 多版本测试数据处理方法、装置、设备及存储介质
CN110727602A (zh) * 2019-10-23 2020-01-24 网易(杭州)网络有限公司 覆盖率数据的处理方法、装置及存储介质

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112148590A (zh) * 2020-08-27 2020-12-29 浙江大搜车融资租赁有限公司 一种代码覆盖率的确定方法、装置及设备
CN112148590B (zh) * 2020-08-27 2022-11-04 浙江大搜车融资租赁有限公司 一种代码覆盖率的确定方法、装置及设备
CN112463620A (zh) * 2020-12-03 2021-03-09 广州品唯软件有限公司 安卓软件集成测试中的覆盖率测试方法、装置
CN112597041A (zh) * 2020-12-28 2021-04-02 上海品顺信息科技有限公司 代码覆盖率的跨分支合并方法、系统、设备及存储介质
CN112597041B (zh) * 2020-12-28 2023-01-20 上海品顺信息科技有限公司 代码覆盖率的跨分支合并方法、系统、设备及存储介质

Also Published As

Publication number Publication date
CN111444087B (zh) 2023-12-01

Similar Documents

Publication Publication Date Title
CN111444087B (zh) 一种覆盖率数据处理方法、装置、计算设备及可读存储介质
US10019256B2 (en) Systems and methods for incremental software development
JP5933762B2 (ja) コード網羅率決定方法およびシステム
US9152731B2 (en) Detecting a broken point in a web application automatic test case
US8386851B2 (en) Functional coverage using combinatorial test design
US8397104B2 (en) Creation of test plans
JP2012150535A (ja) プログラム検証方法及び検証プログラム
CN114201408A (zh) 回归测试方法、装置、计算机设备及存储介质
US8589734B2 (en) Verifying correctness of processor transactions
Sato et al. Effects of organizational changes on product metrics and defects
CN111290961A (zh) 接口测试的管理方法、装置及终端设备
US10678864B2 (en) Analysis model preparing system, programming apparatus, and analysis model preparing method
CN114721922B (zh) 一种服务器集群的性能评估方法、计算设备及存储介质
KR102165747B1 (ko) 보안성을 고려한 경량 크래시 리포트 기반 디버깅 방법
Soubra et al. Towards Universal COSMIC Size Measurement Automation.
US20080052587A1 (en) Unit Test Extender
US9824175B1 (en) Method and system of evaluation of validity of a refinement rule for a hardware emulation
CN115129575A (zh) 一种代码覆盖结果生成方法及装置
US20200167152A1 (en) Identification of a partial code to be refactored within a source code
US8639490B2 (en) Concretization of abstracted traces
JP2007323299A (ja) レビュー実施順序決定装置、レビュー実施順序決定プログラム、レビュー実施順序決定プログラムが格納された記録媒体およびレビュー実施順序決定方法
CN116088934B (zh) 一种软件开发工作量确定方法及服务器
CN114328273B (zh) 一种应用程序控件的调试方法、调试装置及计算设备
CN116244179B (zh) 一种可自我改善的系统固件度量方法
US20230350788A1 (en) Method and system for providing delta code coverage information for work items

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
GR01 Patent grant
GR01 Patent grant