信息确定方法、装置、电子设备及存储介质与流程

未命名 09-15 阅读:82 评论:0


1.本公开涉及测试技术领域,具体涉及一种信息确定方法、装置、电子设备及存储介质。


背景技术:

2.软件项目开发的一个重要环节是测试环节。在测试环节需要对该软件项目中代码的测试覆盖率进行衡量,测试覆盖率可以通过该软件项目的测试中已执行代码在所有代码中的占比表示。测试覆盖率是度量测试完整性和测试有效性的手段,可用于软件项目测试的可靠性、稳定性以及性能的评测。目前,已有测试工具或者编程环境中要么没有能够自动计算测试覆盖率的功能,要么自带的测试覆盖率计算功能不够通用,无法基于测试需求调整或者配置测试覆盖率的类型,使得测试效果的评测较为受限。
3.因此,需要提出一种能够支持各种类型的较为通用的测试覆盖率计算方案,以更好的评测项目测试效果。


技术实现要素:

4.本公开实施例提供一种信息确定方法、装置、电子设备及存储介质。
5.第一方面,本公开实施例中提供了一种信息确定方法,其中,包括:
6.获取软件项目的测试记录信息;
7.基于所述测试记录信息,确定所述软件项目的原始代码文件中的已执行代码信息和未执行代码信息;
8.对所述原始代码文件进行解析,获得所述原始代码文件中的可忽略代码信息;
9.基于所述已执行代码信息、所述未执行代码信息和所述可忽略代码信息,确定所述软件项目的测试覆盖信息。
10.第二方面,本发明实施例中提供了一种信息确定装置,其中,包括:
11.第一获取模块,被配置为获取软件项目的测试记录信息;
12.第一确定模块,被配置为基于所述测试记录信息,确定所述软件项目的原始代码文件中的已执行代码信息和未执行代码信息;
13.解析模块,被配置为对所述原始代码文件进行解析,获得所述原始代码文件中的可忽略代码信息;
14.第二确定模块,被配置为基于所述已执行代码信息、所述未执行代码信息和所述可忽略代码信息,确定所述软件项目的测试覆盖信息。
15.所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
16.在一个可能的设计中,上述装置的结构中包括存储器和处理器,所述存储器用于存储一条或多条支持上述装置执行上述对应方法的计算机指令,所述处理器被配置为用于执行所述存储器中存储的计算机指令。上述装置还可以包括通信接口,用于上述装置与其
他设备或通信网络通信。
17.第三方面,本公开实施例提供了一种电子设备,包括存储器、处理器以及存储在存储器上的计算机程序,其中,所述处理器执行所述计算机程序以实现上述任一方面所述的方法。
18.第四方面,本公开实施例提供了一种计算机可读存储介质,用于存储上述任一装置所用的计算机指令,该计算机指令被处理器执行时用于实现上述任一方面所述的方法。
19.第五方面,本公开实施例提供了一种计算机程序产品,其包含计算机指令,该计算机指令被处理器执行时用于实现上述任一方面所述的方法。
20.本公开实施例提供的技术方案可以包括以下有益效果:
21.本实施例中,为了计算软件项目的测试覆盖率,可以通过获取测试记录信息,并基于测试记录信息确定软件项目中的已执行代码信息和未执行代码信息,通过对软件项目中原始代码文件进行语法解析,确定其中的可忽略代码信息,并基于已执行代码信息、未执行代码信息和可忽略代码信息确定软件项目的测试覆盖信息。上述技术方案通过测试过程中得到的测试记录信息确定已执行代码信息和未执行代码信息,并通过对原始代码文件进行语法解析得到可忽略代码信息,进而再基于已执行代码、未执行代码信息和可忽略代码信息生成软件项目的测试覆盖信息,为不同类型的测试覆盖率计算提供了数据基础,能够适用于各种类型的测试覆盖率计算,能够提升项目测试的评测效果。
22.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
23.结合附图,通过以下非限制性实施方式的详细描述,本公开的其它特征、目的和优点将变得更加明显。在附图中:
24.图1示出根据本公开一实施方式的信息确定方法的流程图。
25.图2示出根据本公开一实施方式的原始代码文件展示效果示意图。
26.图3示出根据本公开一实施方式的覆盖率信息的信息结构示意图。
27.图4示出根据本公开一实施方式的信息确定装置的结构框图。
28.图5示出根据本公开一实施方式的电子设备的结构框图。
29.图6是适于用来实现根据本公开一实施方式的信息确定方法的计算机系统的结构示意图。
具体实施方式
30.下文中,将参考附图详细描述本公开的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。
31.在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
32.另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征
可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
33.本公开所涉及的用户信息(包括但不限于用户设备信息如位置信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
34.下面通过具体实施例详细介绍本公开实施例的细节。
35.图1示出根据本公开一实施方式的信息确定方法的流程图。如图1所示,该信息确定方法包括以下步骤:
36.在步骤s101中,获取软件项目的测试记录信息;
37.在步骤s102中,基于所述测试记录信息,确定所述软件项目的原始代码文件中的已执行代码信息和未执行代码信息;
38.在步骤s103中,对所述原始代码文件进行解析,获得所述原始代码文件中的可忽略代码信息;
39.在步骤s104中,基于所述已执行代码信息、所述未执行代码信息和所述可忽略代码信息,确定所述软件项目的测试覆盖信息。
40.本实施例中,信息确定方法可以在终端或者服务器上执行。测试记录信息可以是测试工具或者编程语言环境在对软件项目进行测试过程中,所记录的当前软件项目中的代码执行信息,该测试记录信息中可以记录该当前软件项目涉及的原始代码文件中已执行代码信息和未执行代码信息。例如,测试记录信息可以记录原始代码文件中测试已覆盖文件的文件标识、该文件标识对应的已执行代码行和/或列信息、未执行代码行和/或列信息、已执行次数、已执行代码数量、未执行代码数量等信息。一个被测试的软件项目可以包括一个或多个原始代码文件,由于针对该软件项目进行测试的测试用例或者测试脚本不同,该软件项目包括的原始代码文件中的有些代码会被调用执行,而有些代码不会被调用执行,因此测试过程中至少有一行代码被执行过的原始代码文件可以称之为测试已覆盖文件,而测试过程中所有代码均未被调用执行过的原始代码文件可以称之为测试未覆盖文件。
41.下面举例说明:
42.以google开发的golong语言为例,在测试完成后,可以获得的测试记录信息中可以记录如下信息:
43.golang-coverage-engine/diff-cover/diffcover.go:41.38,42.35 1 1
44.其中,golang-coverage-engine/diff-cover/diffcover.go表示软件项目中原始代码文件中测试已覆盖文件的文件路径以及文件标识,“41.38,42.35”表示代码信息为第41行第38列至第42行至第35列,需要说明的是代码文件中的列可以是理解为一个字符表示一列。第一个“1”表示执行次数,第二个“1”表示第41行第38列至第42行至第35列为已执行代码。
45.在测试人员编写了测试用例或者测试脚本后,可以对软件项目进行测试。在测试过程中,被调用且执行了其中部分或者全部的原始代码文件的文件路径和/或文件标识、被调用执行了的该原始代码文件中的已执行代码信息和未执行代码信息均可以记录在测试记录信息中。为便于描述,本公开实施例中将被调用执行了的原始代码文件称之为测试已覆盖文件,而未被调用执行的原始代码文件的文件信息不会在测试记录信息中出现,因此
可以将未出现在测试记录信息中的原始代码文件称之为测试未覆盖文件。已执行代码信息可以用于标识测试时原始代码文件中至少被执行过一次的代码信息,如代码行的行号信息;而未执行代码信息可以用于标识测试时原始代码文件中从未被执行过的代码信息。测试未覆盖文件中的所有代码都可以被确定为未执行代码信息,而测试未覆盖文件中的已执行代码信息为空。
46.确定了软件项目中原始代码文件中的已执行代码信息和未执行代码信息后,还可以对软件项目中的所有原始代码文件进行语法解析,例如可以通过抽象语法树ast(abstract syntax code)对原始代码文件中的代码结构进行解析,并从中识别出可忽略代码信息,比如可忽略的代码行等信息。
[0047][0048][0049]
其中,可以识别出“//”后面的代码为注释信息,属于可忽略代码信息,例如可以解析出可忽略代码信息为第3-7行和第17行,第17行是最后一行,也被识别出是行数结束符,属于可忽略代码信息。
[0050]
在确定了软件项目中各个原始代码文件中的已执行代码信息、未执行代码信息和可忽略代码信息后,可以确定该软件项目的测试覆盖信息。该测试覆盖信息可以表示各个原始代码文件中被调用执行过的文件信息、未被调用执行过的文件信息、被调用执行过的原始代码文件中已执行过至少一次的代码信息、一次都未执行的代码信息、在计算测试覆盖率时所有原始代码文件中可忽略计算的代码信息等。基于这样的测试覆盖信息可以基于测试需求计算任意类型的测试覆盖率,例如可以计算行覆盖率、分支覆盖率、增量覆盖率、
类覆盖率、函数覆盖率等。例如,测试记录信息中的已执行代码信息和未执行代码信息为代码行和/或列信息时,可以直接基于该已执行代码信息和未执行代码信息,将可忽略代码信息剔除后,计算出行覆盖率;还可以将该已执行代码信息、未执行代码信息和可忽略代码信息转换成以分支为维度的代码信息、以函数为维度的代码信息、以类为维度的代码信息和/或以函数为维度的代码信息后,得到软件项目的测试覆盖信息,进而基于测试覆盖信息计算分支覆盖率、增量覆盖率、类覆盖率、函数覆盖率等。
[0051]
本实施例中,为了计算软件项目的测试覆盖率,可以通过获取测试记录信息,并基于测试记录信息确定软件项目中的已执行代码信息和未执行代码信息,通过对软件项目中原始代码文件进行语法解析,确定其中的可忽略代码信息,并基于已执行代码信息、未执行代码信息和可忽略代码信息确定软件项目的测试覆盖信息。上述技术方案通过测试过程中得到的测试记录信息确定已执行代码信息和未执行代码信息,并通过对原始代码文件进行语法解析得到可忽略代码信息,进而再基于已执行代码、未执行代码信息和可忽略代码信息生成软件项目的测试覆盖信息,为不同类型的测试覆盖率计算提供了数据基础,能够适用于各种类型的测试覆盖率计算,能够提升项目测试的评测效果。
[0052]
在本实施例的一个可选实现方式中,所述方法进一步还包括以下步骤:
[0053]
基于所述测试覆盖信息,展示所述软件项目中的原始代码文件,并在所述原始代码文件中区分展示已执行代码、未执行代码和可忽略代码。
[0054]
该可选的实现方式中,确定了软件项目对应的测试覆盖信息后,为了能够直观地了解软件项目中原始代码文件的代码测试覆盖情况,可以基于该测试覆盖信息展示原始代码文件,并在该原始代码文件中将已执行代码、未执行代码和可忽略代码进行区分展示。
[0055]
如上文中所述,测试覆盖信息基于已执行代码信息、未执行代码信息和可忽略代码信息得到,因此测试覆盖信息中至少可以包括原始代码文件中的已执行代码、未执行代码和可忽略代码的标识信息,例如已执行代码的代码行信息、未执行代码的代码行信息、可忽略代码的代码行信息等。基于这些标识信息可以确定代码文件中的已执行代码、未执行代码和可忽略代码,进而在展示原始代码文件时,将已执行代码、未执行代码和可忽略代码区分展示出来,相关人员可以直观地了解原始代码文件的测试情况。
[0056]
在一些实施例中,可以在原始代码文件中用不同的背景颜色标识出已执行代码、未执行代码和可忽略代码。
[0057]
图2示出根据本公开一实施方式的原始代码文件展示效果示意图。如图2所示,所展示的原始代码文件中,已执行代码的背景颜色为白色,而被忽略代码的背景颜色为深灰色,未执行代码的背景颜色为浅灰色。
[0058]
在本实施例的一个可选实现方式中,所述测试覆盖信息包括所述原始代码文件的文件覆盖信息;步骤s103,即基于所述测试记录信息,确定所述软件项目的原始代码文件中的已执行代码信息和未执行代码信息的步骤,进一步包括以下步骤:
[0059]
基于所述测试记录信息确定所述软件项目中原始代码文件中的测试已覆盖文件和测试未覆盖文件,以及确定所述测试已覆盖文件中的已执行代码信息和未执行代码信息;
[0060]
步骤s104,即基于所述已执行代码信息、所述未执行代码信息和所述可忽略代码信息,确定所述软件项目的测试覆盖信息的步骤,进一步包括以下步骤:
[0061]
解析所述测试已覆盖文件和测试未覆盖文件中的所有代码信息;
[0062]
基于所述所有代码信息和可忽略代码信息确定所述测试已覆盖文件和测试未覆盖文件中非可忽略代码信息;
[0063]
基于所述测试已覆盖文件中的可忽略代码信息、非可忽略代码信息、已执行代码信息和未执行代码信息确定所述测试已覆盖文件的文件覆盖信息;
[0064]
基于所述测试未覆盖文件中的可忽略代码信息和非可忽略代码信息确定所述测试未覆盖文件的文件覆盖信息。
[0065]
该可选的实现方式中,如上文中所述,从测试记录信息可以解析出针对软件项目进行测试后,各个原始代码文件中的已执行代码信息和未执行代码信息。通过对原始代码文件进行语法解析,可以确定原始代码文件中的可忽略代码信息。
[0066]
基于可忽略代码信息、已执行代码信息和未执行代码信息可以确定原始代码文件中需要进行计算的已执行代码、未执行代码和可忽略代码。对于同一个原始代码文件,其中的已执行代码、未执行代码和可忽略代码构成该原始代码文件中的所有代码。需要说明的是,测试记录信息中记录的是测试过程中,软件项目中的已执行代码信息和未执行代码信息,已执行代码信息和未执行代码信息的记录方式基于所使用编程语言和编程工具的不同可能有所不同。例如,google开发的golong语言中已执行代码信息和未执行代码信息中记录的是已执行代码行和/或列、未执行代码行/或列的信息。在一些实施例中,测试记录信息中可能仅记录测试已覆盖文件的信息,而测试未覆盖文件的信息可能未记录。测试已覆盖文件可以理解为在测试过程中该文件的至少一个代码块被执行过,代码块可以理解为代码行、代码分支、函数、类等。而测试未覆盖文件可以理解为测试过程中该文件的所有代码都未被执行过。
[0067]
在一些实施例中,可以基于测试记录信息将原始代码文件区分为测试已覆盖文件和测试未覆盖文件,还可以基于测试记录信息确定测试已覆盖文件中的已执行代码信息和未执行代码信息。由于测试未覆盖文件中的所有代码都未被执行过,所以该测试未覆盖文件中的所有代码都是未执行代码。
[0068]
还需要说明的是,从测试记录信息中提取出的已执行代码和未执行代码中可能包括可忽略代码。这是因为已有的编程语言和编程工具在生成测试记录信息时可能不考虑可忽略代码,例如注释行、永不可达的代码分支和函数结束符等。因此,还需要从原始代码文件(包括测试已覆盖文件和测试未覆盖文件)中解析出所有代码信息以及可忽略代码信息后,基于可忽略代码信息和所有代码信息确定非可忽略代码信息。
[0069]
在一些实施例中,所有代码信息可以理解为原始代码文件中包括的代码行、代码分支、函数或类等对应的信息,具体可以根据实际测试需要预先定义。假如要计算的是代码行的测试覆盖率,则此处的所有代码信息可以是代码行信息,也即将原始代码文件中包括的所有代码行的信息解析出来。在一些实施例中,可以利用ast解析树对原始代码文件进行解析,从而得到所有代码信息。
[0070]
原始代码文件中所有代码信息和可忽略代码信息确定后,可以通过从所有代码信息对应的代码块中去除可忽略代码信息对应的可忽略代码的方式来确定非可忽略代码信息。可以理解的是,基于可忽略代码和非可忽略代码的并集可以是原始代码文件中的所有代码。
[0071]
针对原始代码文件中的测试已覆盖文件,可以基于该测试已覆盖文件的可忽略代码信息、非可忽略代码信息、已执行代码信息和未执行代码信息确定测试已覆盖文件的文件覆盖信息。该文件覆盖信息可以包括但不限于测试已覆盖文件的文件标识、已执行代码块、未执行代码块、忽略代码块等信息。
[0072]
针对原始代码文件中的测试未覆盖文件,可以基于该测试未覆盖文件的可忽略代码信息和非可忽略代码信息确定该测试未覆盖文件的文件覆盖信息。该文件覆盖信息可以包括但不限于测试未覆盖文件的文件标识、未执行代码块、忽略代码块等信息。
[0073]
在本实施例的一个可选实现方式中,所述测试覆盖信息还包括所述软件项目的项目覆盖信息;所述方法进一步还包括以下步骤:
[0074]
基于所述测试已覆盖文件和所述测试未覆盖文件的所述文件覆盖信息确定所述项目覆盖信息。
[0075]
该可选的实现方式中,文件覆盖信息可以包括但不限于文件标识、已执行代码块、未执行代码块、忽略代码块等信息,而项目覆盖信息可以包括但不限于该软件项目中测试已覆盖文件的文件标识、测试未覆盖文件的文件标识、测试已覆盖文件中已执行代码块的信息、未执行代码块的信息、忽略代码块的信息以及测试未覆盖文件中未执行代码块的信息和忽略代码块的信息等。在一些实施例中,项目覆盖信息中还可以标识出是测试已覆盖文件还测试未覆盖文件的文件类型。
[0076]
本公开实施例中,可以统计出软件项目中单个原始代码文件的文件覆盖信息和整个项目的项目覆盖信息,之后可以基于所统计的文件覆盖信息和项目覆盖信息生成各种类型的测试覆盖率和/或通过文件覆盖信息、项目覆盖信息直接评测测试效果等。通过这种方式,可以从多种形式展示该软件项目的测试覆盖信息。
[0077]
在本实施例的一个可选实现方式中,所述测试已覆盖文件的文件覆盖信息包括已执行代码块的信息、未执行代码块的信息和忽略代码块的信息;基于所述测试已覆盖文件中的可忽略代码信息、非可忽略代码信息、已执行代码信息和未执行代码信息确定所述测试已覆盖文件的文件覆盖信息的步骤,进一步包括以下步骤:
[0078]
基于所述测试已覆盖文件中的非可忽略代码信息和所述已执行代码信息确定所述已执行代码块的信息;
[0079]
基于所述测试已覆盖文件中的非可忽略代码信息和所述已执行代码块的信息确定所述未执行代码块的信息;
[0080]
基于所述测试已覆盖文件中的可忽略代码信息确定所述忽略代码块的信息。
[0081]
该可选的实现方式中,如上文中所述,对于测试已覆盖文件,基于测试记录信息识别出的已执行代码信息中可能包括可忽略代码的信息;另外可执行代码信息由于是基于测试记录信息识别出的,从其记录的方式可能无法直接获取原始代码文件中的已执行代码块的信息,例如测试记录信息中记录了原始代码文件中已执行代码行、未执行代码行等信息,而测试需求需要以代码块为维度进行测评,所以文件覆盖信息中可以以代码块为维度体现已执行代码块、未执行代码块和忽略代码块等信息。
[0082]
为此,可以基于测试已覆盖文件中的非可忽略代码信息和已执行代码信息确定已执行代码块的信息;基于测试已覆盖文件中的非可忽略代码信息和未执行代码信息确定未执行代码块的信息;而基于测试已覆盖文件的可忽略代码信息确定忽略代码块的信息。
[0083]
在一些实施例中,可以基于非可忽略代码信息和已执行代码信息的交集得到最终要统计的已执行代码的信息,之后再基于已执行代码的信息对原始代码文件中的已执行代码进行解析处理,得到已执行代码块的信息,比如已执行代码的信息中以行为维度记录已执行代码,而已执行代码块是以函数为维度的代码,则可以对已执行代码行进行语法解析,从而得到已执行代码块的信息。
[0084]
同样地,对于测试已覆盖文件,还可以基于非可忽略代码信息和未执行代码信息确定该测试已覆盖文件中的未执行代码块的信息
[0085]
对于测试已覆盖文件,还可以根据可忽略代码信息,对原始代码文件中的可忽略代码进行解析,获得忽略代码块的信息。
[0086]
在本实施例的一个可选实现方式中,所述测试未覆盖文件的文件覆盖信息包括未执行代码块的信息和忽略代码块的信息;基于所述测试未覆盖文件中的可忽略代码信息和非可忽略代码信息确定所述测试未覆盖文件的文件覆盖信息的步骤,进一步包括以下步骤:
[0087]
基于所述测试未覆盖文件中的非可忽略代码信息和未执行代码信息确定所述未执行代码块的信息;
[0088]
基于所述测试未覆盖文件中的可忽略代码信息确定所述忽略代码块的信息。
[0089]
该可选的实现方式中,如上文中所述,测试未覆盖文件中的代码可以分为可忽略代码和非可忽略代码,并且非可忽略代码均为未执行代码。
[0090]
同样地,对于测试未覆盖文件,基于测试记录信息识别出的未执行代码信息中可能包括可忽略代码的信息;另外未执行代码信息由于是基于测试记录信息识别出的,从其记录的方式可能无法直接获取原始代码文件中的未执行代码块的信息,例如测试记录信息中记录了测试未覆盖文件中未执行代码行等信息,而测试需求需要以代码块为维度进行测评,所以文件覆盖信息中可以以代码块为维度体现未执行代码块和忽略代码块等信息。
[0091]
为此,可以基于测试未覆盖文件中的非可忽略代码信息和未执行代码信息确定未执行代码块的信息;而基于测试已覆盖文件的可忽略代码信息确定忽略代码块的信息。
[0092]
在一些实施例中,可以基于非可忽略代码信息和未执行代码信息的交集得到最终要计算的未执行代码的信息,之后再基于未执行代码的信息对测试未覆盖文件中的未执行代码进行解析处理,得到未执行代码块的信息,比如未执行代码的信息中以行为维度记录未执行代码,而未执行代码块是以函数为维度的代码,则可以对未执行代码行进行语法解析,从而得到未执行代码块的信息。
[0093]
同理,可以基于测试未覆盖文件中可忽略代码信息确定忽略代码块的信息。
[0094]
在一些实施例中,项目覆盖信息可以包括但不限于测试已覆盖文件的文件标识、测试未覆盖文件的文件标识,以及所述测试已覆盖文件的文件覆盖信息和所述测试未覆盖文件的所述文件覆盖信息。
[0095]
在本实施例的一个可选实现方式中,所述方法进一步还包括以下步骤:
[0096]
获取忽略配置信息;
[0097]
基于所述忽略配置信息和所述测试覆盖信息,确定所述测试已覆盖文件的测试覆盖率和所述软件项目的测试覆盖率。
[0098]
该可选的实现方式中,忽略配置信息可以是测试人员基于测试需求预先配置的识
别信息,用于配置当前测试需求下可忽略计算的代码信息,比如代码块和文件标识等信息,代码块可以是代码行、代码分支结构、代码函数、代码类等。需要说明的是,可忽略代码信息可以理解为在计算测试覆盖率时,可以不将其统计在内的代码部分。在一些实施例中,忽略配置信息可以用正则表达式来配置。
[0099]
在计算软件项目的测试覆盖率时,可以基于忽略配置信息遍历测试覆盖信息,在遍历到与忽略配置信息相匹配的信息,比如测试已覆盖文件和/或测试未覆盖文件的文件标识,已执行代码块的信息、未执行代码块的信息和/或忽略代码块的信息时,可以将相匹配的信息去除后,再基于保留的测试覆盖信息计算测试已覆盖文件的测试覆盖率和软件项目的测试覆盖率。例如,某个测试已覆盖文件中的某个已执行代码块与忽略配置信息中的某条配置匹配,则可以将该已执行代码块从该测试已覆盖文件中的文件覆盖信息中去除。再例如,某个测试已覆盖文件或者测试未覆盖文件的文件标识与忽略配置信息中的某条配置匹配,则可以将该测试已覆盖文件或测试未覆盖文件的文件覆盖信息去除。
[0100]
测试已覆盖文件的测试覆盖率可以基于测试已覆盖文件中的已执行代码块和未执行代码块的信息确定,而软件项目的测试覆盖率可以基于所有测试已覆盖文件和测试未覆盖文件中的已执行代码块和未执行代码块的信息确定,由于测试未覆盖文件中仅包括未执行代码块,所以测试未覆盖文件的测试覆盖率可以是0,因此不需要进行计算。
[0101]
本公开实施例通过忽略配置信息的设置,使得测试人员可以基于测试需求当前所需要的测试覆盖率,更加符合测试人员的需求,能够提升软件项目的评测效果。
[0102]
在本实施例的一个可选实现方式中,基于所述忽略配置信息和所述测试覆盖信息,确定所述测试已覆盖文件的测试覆盖率和所述软件项目的测试覆盖率的步骤,进一步包括以下步骤:
[0103]
基于所述忽略配置信息和所述测试覆盖信息,筛选待计算的测试已覆盖文件和测试未覆盖文件;
[0104]
基于所述忽略配置信息和所述测试覆盖信息从筛选出的所述测试已覆盖文件和测试未覆盖文件中,筛选待计算的已执行代码块和未执行代码块;
[0105]
基于待计算的所述测试已覆盖文件中的待计算的已执行代码块和未执行代码块,确定所述已执行代码块的数量与所述已执行代码块和未执行代码块之总和的第一比值,基于所述第一比值确定待计算的所述测试已覆盖文件的测试覆盖率;
[0106]
基于待计算的所有所述测试已覆盖文件和所述测试未覆盖文件中的待计算的已执行代码块和未执行代码块,确定所有待计算的所述已执行代码块的数量,与所有待计算的所述已执行代码块和所有待计算的未执行代码块之总和的第二比值,基于所述第二比值确定所述软件项目的测试覆盖率。
[0107]
该可选的实现方式中,可以基于忽略配置信息中的每条配置遍历测试覆盖信息,从而筛选出需要进行计算的测试已覆盖文件和测试未覆盖文件的文件标识,也就是将测试覆盖信息中与忽略配置信息相匹配的测试已覆盖文件和测试未覆盖文件的文件覆盖信息提出,进而再针对筛选出的需要进行计算的测试已覆盖文件和测试未覆盖文件,再筛选出其中需要计算的已执行代码块和未执行代码块,也就是将筛选出的测试已覆盖文件和测试未覆盖文件中与忽略配置信息相匹配的已执行代码块和未执行代码块提出,保留下来的测试已覆盖文件、测试未覆盖文件、已执行代码块和未执行代码块参与覆盖率计算。
[0108]
基于待计算的测试已覆盖文件的文件覆盖信息中的已执行代码块的信息,确定已执行代码块的数量,基于未执行代码块的信息确定未执行代码块的数量,而基于已执行代码块的数量与已执行代码块的数量和未执行代码块的数量之总和的比值,可以确定该测试已覆盖文件的测试覆盖率。该测试已覆盖文件的测试覆盖率可以包括但不限于行测试覆盖率、分支测试覆盖率、函数测试覆盖率、类测试覆盖率和增量测试覆盖率等。
[0109]
还可以基于软件项目的项目覆盖信息中的已执行代码块的信息确定所有原始代码文件中的已执行代码块的数量,基于未执行代码块的信息确定所有原始代码文件中的未执行代码块的数量,而基于已执行代码块的数量与已执行代码块的数量和未执行代码块的数量之总和的比值,可以确定该软件项目的测试覆盖率。该软件项目的测试覆盖率可以包括但不限于行测试覆盖率、分支测试覆盖率、函数测试覆盖率、类测试覆盖率和增量测试覆盖率等。
[0110]
下面以google开发的golong语言为例,举例说明本公开的一种可实现示例:
[0111]
本示例可适用的场景包括:所有golong测试测试覆盖率的计算场景,包括单元测试场景和自动化测试等,下面的示例以行覆盖率的计算为例说明。
[0112]
首先,定义覆盖率的基础计算对象类型,该基础计算对象类型包括覆盖率对象和覆盖率对象的数组,每一种覆盖率的计算依赖于一个覆盖率对象coverinfo和一个覆盖率对象的数组,覆盖率对象包括忽略属性和覆盖率信息集合,该忽略属性可以被赋值为忽略配置,覆盖率信息集合包括:1.覆盖率文件名2.覆盖的行(也即已执行代码信息)3.未覆盖的行(未执行代码信息)4.忽略的行(也即可忽略代码信息)
[0113]
其中,覆盖率信息集合对应覆盖率对象的数组,每个数组都是一个int类型的集合,不允许出现重复元素。覆盖率对象和覆盖率对象的数组的整体结构见图3所示。
[0114]
其次,软件项目在测试完成后,可以由golong语言环境自动生成覆盖率文件,该覆盖率文件中记录测试记录信息,对该覆盖率进行解析后,可以转换为需要进行覆盖率计算的覆盖率对象。
[0115]
例如,当前需要计算行覆盖率,覆盖率文件示例如下:
[0116]
golang-coverage-engine/diff-cover/diffcover.go:41.38,42.35 1 1
[0117]
golang-coverage-engine/diff-cover/diffcover.go:41.38,42.35 1 1
[0118]
这个数据表示的是:golang-coverage-engine/diff-cover/diffcover.go这个文件的41行的38列到42行的35列被执行了一次且被覆盖。
[0119]
a.通过ast语法树对当前文件(也即原始代码文件)进行解析,可以得到需要计算的所有代码行;
[0120]
b.通过ast语法树对覆盖率文件进行解析,可以得到测试过程中当前文件被覆盖的代码行;
[0121]
c.通过ast语法树对当前文件(也即原始代码文件)进行解析,并基于忽略配置信息可以得到需要被忽略的行。
[0122]
通过以上a、b、c三步,可以得到覆盖率对象coverinfo的结构。
[0123]
下面通过实例说明上述步骤:
[0124]
加入原代码文件coverinfo.go内容如下:
[0125][0126]
覆盖率文件内容如下:
[0127]
golang-coverage-engine/convert/coverinfo.go:2.42,11.22 3 1
[0128]
golang-coverage-engine/convert/coverinfo.go:12.4,14.6 1 0
[0129]
golang-coverage-engine/convert/coverinfo.go:16.4,16.6 1 1
[0130]
通过a步骤可以获取当前文件coverinfo.go的总代码行,结果为:cov:2~17。
[0131]
通过b步骤可以从覆盖率文件获取当前文件coverinfo.go覆盖的行是2~11、16,没有覆盖的行是12~14,因此,步骤b的结果为:cov 2~11、16,uncov 12~14。
[0132]
通过c步骤可以获取原代码文件coverinfo.go中所有需要忽略的代码行,结果为:ignore 3~7、17;其中需要忽略的代码行是用ast语法树解析得到,如3~7行都是注释,在忽略配置中配置为需要忽略,17行是函数结束符,在忽略配置中也配置为需要忽略。
[0133]
下面可以基于上述信息确定文件覆盖信息和项目覆盖信息:
[0134]
先将原代码文件中的总代码行放入cov结构,然后将需要忽略的代码行放入ignore结构,将cov结构和ignore结构的交集放入ignorecov结构,最后将cov结构中剩下的代码行和覆盖的代码行取交集,将cov结构情况后,该交集结果放入cov结构,补集结果放入uncov结构。通过上述方式,相当于将覆盖的行中需要忽略的行去掉,还将没覆盖的代码行中需要忽略的代码行去掉,最终得到的cov结构中是覆盖的代码行,uncov结构中是没覆盖的代码行。
[0135]
通过上述方式最终得到的覆盖率对象的覆盖率信息如图3所示。
[0136]
之后,可以按照上述方式遍历所有的原始代码文件,对于未覆盖的原始代码文件,由于未覆盖的原始代码文件中所有代码行均未被执行过,也就是说未覆盖的原始代码文件
中仅包括没有覆盖的代码行,没有覆盖的代码行,所以针对未覆盖的原始代码文件,可以从中解析所有的总代码行后,再解析需要忽略的代码行,总代码行中去除需要忽略的代码行即为没有覆盖的代码行,未覆盖的原始代码文件中覆盖的代码行可以是空。
[0137]
golong语言的覆盖到的原始代码文件才会出现在覆盖率文件中,因此可以获取软件项目的目录,并遍历该目录下的所有原始代码文件:
[0138]
d.通过golong的内置函数filewalk可以进行递归获取目录下的所有原始代码文件的文件信息。
[0139]
e.将覆盖率文件中出现的原始代码文件的文件信息如文件名称和所有原始代码文件式的文件信息如文件名称取交集,补集放入剩余文件集。
[0140]
f.最后通过重复上述步骤对所有原始代码文件进行处理,得到每个文件对应的覆盖率对象的覆盖率信息。
[0141]
下面通过具体实例说明如下:
[0142]
d步骤得到所有原始代码文件的文件信息如下:
[0143]
a.go b.go c.go
[0144]
假如覆盖率文件中只出现a.go文件,则得到如下结果:
[0145]
覆盖文件a.go;
[0146]
未覆盖文件b.go c.go;
[0147]
最终对上述三个原始代码文件进行如上步骤的处理,可以得到覆盖率对象的覆盖率信息如下:
[0148]
a.go:coverinfo(a.go文件的覆盖率信息)
[0149]
b.go:coverinfo(b.go文件的覆盖率信息)
[0150]
c.go:coverinfo(c.go文件的覆盖率信息)
[0151]
下面进行举例说明:
[0152]
假如a.go文件的原始代码如下:
[0153]
func demoa(){
[0154]
fmt.println("hello,world")
[0155]
}
[0156]
假如b.go文件的原始代码如下:
[0157]
func demob(){
[0158]
}
[0159]
假如c.go文件的原始代码如下:
[0160]
func democ(){
[0161]
}
[0162]
假如覆盖率文件内容如下:
[0163]
golang-coverage-engine/a.go:1.42,2.22 3 1
[0164]
得到最终的覆盖率对象为:
[0165]
行覆盖率对象linecover(本实例以计算行覆盖率为例,所以此处称之为行覆盖率对象):
[0166]
包含a.go,b.go,c.go三个文件覆盖率情况如下:
[0167]
文件名:a.go
[0168]
覆盖的行:1、2
[0169]
未覆盖的行:
[0170]
忽略计算的行:3
[0171]
文件名:b.go
[0172]
覆盖的行:
[0173]
未覆盖的行:7
[0174]
忽略计算的行:8
[0175]
文件名:c.go
[0176]
覆盖的行:
[0177]
未覆盖的行:11
[0178]
忽略计算的行:12
[0179]
这样,最终得到了一个完整的覆盖率对象,可以用于后续的测试覆盖率计算。
[0180]
此外,测试用户可以预先配置忽略配置信息,在忽略配置信息中配置最终的测试覆盖信息和测试覆盖率计算时,期望被忽略的信息,比如期望被忽略的所有代码信息和文件信息等。
[0181]
忽略配置信息可以通过正则表达式来描述。在匹配过程中,初始化过程中将忽略配置设定在一个ignore对象中,在执行最终的覆盖率计算过程中遍历每一个覆盖率对象中的覆盖率信息时,如果满足忽略配置,那么可以从覆盖率信息中去除掉该匹配的信息。
[0182]
具体实现方式为:遍历覆盖率信息,满足正则表达式的文件或代码可以过滤掉。
[0183]
结合实例说明:如果忽略配置的正则表达式为a.go,那么最终的覆盖率信息为:
[0184]
linecover:
[0185]
包含b.go,c.go两个文件覆盖率情况如下:
[0186]
文件名:b.go
[0187]
覆盖的行:
[0188]
未覆盖的行:7
[0189]
忽略计算的行:8
[0190]
文件名:c.go
[0191]
覆盖的行:
[0192]
未覆盖的行:11
[0193]
忽略计算的行:12
[0194]
测试覆盖率的计算:
[0195]
测试覆盖率是一个比率,指的是代码覆盖的所有行数和需要覆盖的行的一个比值。那么通过覆盖率对象的覆盖率信息,可以知道代码覆盖的行就是所有覆盖率信息中的cov值的集合,需要覆盖的行是所有覆盖率信息的cov值和uncov值的集合。
[0196]
总的覆盖率计算方式为:
[0197]
分子是所有cov的集合,分母是所有cov和uncov的集合。
[0198]
测试覆盖率报告的生成:
[0199]
测试覆盖率报告中可以展示总的覆盖率详情,包括每个原始代码文件的覆盖率详
情和每个原始代码文件的覆盖率图例,覆盖率图例如图2所示。
[0200]
其中,总的覆盖率如上文中所述的方式得到,每个原始代码文件的覆盖率可以通过每一个原始代码文件对应的覆盖率信息中的cov和cov+uncov的比值得到,每个原始代码文件的覆盖率图例,可以通过将cov、uncov和ignorecov进行整合并排序。
[0201]
例如可以通过golong的sort包进行直接排序,需要定义的less方式是根据行号大小进行比对排序。
[0202]
下面通过实例说明:
[0203]
a~c步骤的计算结果:
[0204]
行覆盖率对象linecover
[0205]
包含convert/coverinfo.go文件覆盖率情况如下:
[0206]
文件名:convert/coverinfo.go
[0207]
覆盖的行:2,8,9,10,11,16
[0208]
未覆盖的行:12,13,14
[0209]
忽略计算的行:3,4,5,6,7,17
[0210]
最终的结果可以是一个key、value结构的数组:
[0211]
{2:cov},{3:ignorecov},{4:ignorecov}...{12:uncov}...{17:ignorecov};
[0212]
以上数组表示第2行为覆盖的行,也即已执行代码块,3、4、17为忽略计算的行,也即忽略代码块,12为未覆盖的行,也即未执行代码块。
[0213]
最后通过该上述结果,可以渲染得到如图2所示的原始代码文件的覆盖率图例。
[0214]
下述为本公开装置实施例,可以用于执行本公开方法实施例。
[0215]
图4示出根据本公开一实施方式的信息确定装置的结构框图。该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。如图4所示,该信息确定装置包括:
[0216]
第一获取模块401,被配置为获取软件项目的测试记录信息;
[0217]
第一确定模块402,被配置为基于所述测试记录信息,确定所述软件项目的原始代码文件中的已执行代码信息和未执行代码信息;
[0218]
解析模块403,被配置为对所述原始代码文件进行解析,获得所述原始代码文件中的可忽略代码信息;
[0219]
第二确定模块404,被配置为基于所述已执行代码信息、所述未执行代码信息和所述可忽略代码信息,确定所述软件项目的测试覆盖信息。
[0220]
本实施例中,信息确定方法可以在终端或者服务器上执行。测试记录信息可以是测试工具或者编程语言环境在对软件项目进行测试过程中,所记录的当前软件项目中的代码执行信息,该测试记录信息中可以记录该当前软件项目涉及的原始代码文件中已执行代码信息和未执行代码信息。例如,测试记录信息可以记录原始代码文件中测试已覆盖文件的文件标识、该文件标识对应的已执行代码行和/或列信息、未执行代码行和/或列信息、已执行次数、已执行代码数量、未执行代码数量等信息。一个软件项目可以包括一个或多个原始代码按文件,由于测试用例或者脚本的不同,软件项目包括的原始代码文件中的有些代码会被调用执行,而有些代码不会被调用执行,因此测试过程中至少有一行代码被执行过的原始代码文件可以称之为测试已覆盖文件,而测试过程中所有代码均未被调用执行过的
原始代码文件可以称之为测试未覆盖文件。
[0221]
下面举例说明:
[0222]
以google开发的golong语言为例,在测试完成后,可以获得的测试记录信息中可以记录如下信息:
[0223]
golang-coverage-engine/diff-cover/diffcover.go:41.38,42.35 1 1
[0224]
其中,golang-coverage-engine/diff-cover/diffcover.go表示软件项目中原始代码文件中测试已覆盖文件的文件路径以及文件标识,“41.38,42.35”表示代码信息为第41行第38列至第42行至第35列,需要说明的是代码文件中的列可以是理解为一个字符表示一列。第一个“1”表示执行次数,第二个“1”表示第41行第38列至第42行至第35列为已执行代码。
[0225]
在测试人员编写了测试用例或者测试脚本后,可以对软件项目进行测试。在测试过程中,被调用且执行了其中部分或者全部的原始代码文件的文件路径和/或文件标识、被调用执行了的该原始代码文件中的已执行代码信息和未执行代码信息均可以记录在测试记录信息中。为便于描述,本公开实施例中将被调用执行了的原始代码文件称之为测试已覆盖文件,而未被调用执行的原始代码文件的文件信息不会在测试记录信息中出现,因此可以将未出现在测试记录信息中的原始代码文件称之为测试未覆盖文件。已执行代码信息可以用于标识测试时原始代码文件中至少被执行过一次的代码信息,如代码行的行号信息;而未执行代码信息可以用于标识测试时原始代码文件中从未被执行过的代码信息。测试未覆盖文件中的所有代码都可以被确定为未执行代码信息,而测试未覆盖文件中的已执行代码信息为空。
[0226]
确定了软件项目中原始代码文件中的已执行代码信息和未执行代码信息后,还可以对软件项目中的所有原始代码文件进行语法解析,例如可以通过抽象语法树ast(abstract syntax code)对原始代码文件中的代码结构进行解析,并从中识别出可忽略代码信息,比如可忽略的代码行等信息。
[0227]
下面仍然以golong语言编写的代码为例进行举例说明:
[0228]
[0229][0230]
其中,可以识别出“//”后面的代码为注释信息,属于可忽略代码信息,例如可以解析出可忽略代码信息为第3-7行和第17行,第17行是最后一行,也被识别出是行数结束符,属于可忽略代码信息。
[0231]
在确定了软件项目中各个原始代码文件中的已执行代码信息、未执行代码信息和可忽略代码信息后,可以确定该软件项目的测试覆盖信息。该测试覆盖信息可以表示各个原始代码文件中被调用执行过的文件信息、未被调用执行过的文件信息、被调用执行过的原始代码文件中已执行过至少一次的代码信息、一次都未执行的代码信息、在计算测试覆盖率时所有原始代码文件中可忽略计算的代码信息等。基于这样的测试覆盖信息可以基于测试需求计算任意类型的测试覆盖率,例如可以计算行覆盖率、分支覆盖率、增量覆盖率、类覆盖率、函数覆盖率等。例如,测试记录信息中的已执行代码信息和未执行代码信息为代码行和/或列信息时,可以直接基于该已执行代码信息和未执行代码信息,将可忽略代码信息剔除后,计算出行覆盖率;还可以将该已执行代码信息、未执行代码信息和可忽略代码信息转换成以分支为维度的代码信息、以函数为维度的代码信息、以类为维度的代码信息和/或以函数为维度的代码信息后,得到软件项目的测试覆盖信息,进而基于测试覆盖信息计算分支覆盖率、增量覆盖率、类覆盖率、函数覆盖率等。
[0232]
本实施例中,为了计算软件项目的测试覆盖率,可以通过获取测试记录信息,并基于测试记录信息确定软件项目中的已执行代码信息和未执行代码信息,通过对软件项目中原始代码文件进行语法解析,确定其中的可忽略代码信息,并基于已执行代码信息、未执行代码信息和可忽略代码信息确定软件项目的测试覆盖信息。上述技术方案通过测试过程中得到的测试记录信息确定已执行代码信息和未执行代码信息,并通过对原始代码文件进行语法解析得到可忽略代码信息,进而再基于已执行代码、未执行代码信息和可忽略代码信息生成软件项目的测试覆盖信息,为不同类型的测试覆盖率计算提供了数据基础,能够适用于各种类型的测试覆盖率计算,能够提升项目测试的评测效果。
[0233]
在本实施例的一个可选实现方式中,所述装置还包括:
[0234]
展示模块,被配置为基于所述测试覆盖信息,展示所述软件项目中的原始代码文件,并在所述原始代码文件中区分展示已执行代码、未执行代码和可忽略代码。
[0235]
在本实施例的一个可选实现方式中,所述测试覆盖信息包括所述原始代码文件的文件覆盖信息;所述第一确定模块,被实施为:
[0236]
基于所述测试记录信息确定所述软件项目中原始代码文件中的测试已覆盖文件和测试未覆盖文件,以及确定所述测试已覆盖文件中的已执行代码信息和未执行代码信息;
[0237]
所述第二确定模块,被实施为:
[0238]
解析所述测试已覆盖文件和测试未覆盖文件中的所有代码信息;
[0239]
基于所述所有代码信息和可忽略代码信息确定所述测试已覆盖文件和测试未覆盖文件中非可忽略代码信息;
[0240]
基于所述测试已覆盖文件中的可忽略代码信息、非可忽略代码信息、已执行代码信息和未执行代码信息确定所述测试已覆盖文件的文件覆盖信息;
[0241]
基于所述测试未覆盖文件中的可忽略代码信息和非可忽略代码信息确定所述测试未覆盖文件的文件覆盖信息。
[0242]
在本实施例的一个可选实现方式中,所述测试覆盖信息还包括所述软件项目的项目覆盖信息;所述装置还包括:
[0243]
第三确定模块,被配置为基于所述测试已覆盖文件和所述测试未覆盖文件的所述文件覆盖信息确定所述项目覆盖信息。
[0244]
在本实施例的一个可选实现方式中,所述测试已覆盖文件的文件覆盖信息包括已执行代码块的信息、未执行代码块的信息和忽略代码块的信息;基于所述测试已覆盖文件中的可忽略代码信息、非可忽略代码信息、已执行代码信息和未执行代码信息确定所述测试已覆盖文件的文件覆盖信息,被实施为:
[0245]
基于所述测试已覆盖文件中的非可忽略代码信息和所述已执行代码信息确定所述已执行代码块的信息;
[0246]
基于所述测试已覆盖文件中的非可忽略代码信息和所述已执行代码块的信息确定所述未执行代码块的信息;
[0247]
基于所述测试已覆盖文件中的可忽略代码信息确定所述忽略代码块的信息。
[0248]
在本实施例的一个可选实现方式中,所述测试未覆盖文件的文件覆盖信息包括未执行代码块的信息和忽略代码块的信息;基于所述测试未覆盖文件中的可忽略代码信息和非可忽略代码信息确定所述测试未覆盖文件的文件覆盖信息,被实施为:
[0249]
基于所述测试未覆盖文件中的非可忽略代码信息和未执行代码信息确定所述未执行代码块的信息;
[0250]
基于所述测试未覆盖文件中的可忽略代码信息确定所述忽略代码块的信息。
[0251]
在本实施例的一个可选实现方式中,所述装置还包括:
[0252]
第二获取模块,被配置为获取忽略配置信息;
[0253]
第四确定模块,被配置为基于所述忽略配置信息和所述测试覆盖信息,确定所述测试已覆盖文件的测试覆盖率和所述软件项目的测试覆盖率。
[0254]
在本实施例的一个可选实现方式中,所述第四确定模块,被实施为:
[0255]
基于所述忽略配置信息和所述测试覆盖信息,筛选待计算的测试已覆盖文件和测试未覆盖文件;
[0256]
基于所述忽略配置信息和所述测试覆盖信息从筛选出的所述测试已覆盖文件和测试未覆盖文件中,筛选待计算的已执行代码块和未执行代码块;
[0257]
基于待计算的所述测试已覆盖文件中的待计算的已执行代码块和未执行代码块,确定所述已执行代码块的数量与所述已执行代码块和未执行代码块之总和的第一比值,基于所述第一比值确定待计算的所述测试已覆盖文件的测试覆盖率;
[0258]
基于待计算的所有所述测试已覆盖文件和所述测试未覆盖文件中的待计算的已执行代码块和未执行代码块,确定所有待计算的所述已执行代码块的数量,与所有待计算的所述已执行代码块和所有待计算的未执行代码块之总和的第二比值,基于所述第二比值确定所述软件项目的测试覆盖率。
[0259]
本实施例中的信息确定装置与上文中的信息确定方法对应一致,具体细节可以参见上文中对信息确定方法的描述,在此不再赘述。
[0260]
本公开还公开了一种电子设备,图5示出根据本公开一实施方式的电子设备的结构框图,如图5所示,所述电子设备500包括存储器501和处理器502;其中,
[0261]
所述存储器501用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器502执行以实现上述方法步骤。
[0262]
图6是适于用来实现根据本公开一实施方式的信息确定方法的计算机系统的结构示意图。
[0263]
如图6所示,计算机系统600包括处理单元601,其可实现为cpu、gpu、fpga、npu等处理单元。处理单元601可以根据存储在只读存储器(rom)602中的程序或者从存储部分608加载到随机访问存储器(ram)603中的程序而执行本公开上述任一方法的实施方式中的各种处理。在ram603中,还存储有计算机系统600操作所需的各种程序和数据。处理单元601、rom602以及ram603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。
[0264]
以下部件连接至i/o接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至i/o接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
[0265]
特别地,根据本公开的实施方式,上文参考本公开实施方式中的任一方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行本公开实施方式中任一方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
[0266]
附图中的流程图和框图,图示了按照本公开各种实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0267]
描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块
的名称在某种情况下并不构成对该单元或模块本身的限定。
[0268]
作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。
[0269]
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

技术特征:
1.一种信息确定方法,其中,包括:获取软件项目的测试记录信息;基于所述测试记录信息,确定所述软件项目的原始代码文件中的已执行代码信息和未执行代码信息;对所述原始代码文件进行解析,获得所述原始代码文件中的可忽略代码信息;基于所述已执行代码信息、所述未执行代码信息和所述可忽略代码信息,确定所述软件项目的测试覆盖信息。2.根据权利要求1所述的方法,其中,所述测试覆盖信息包括所述原始代码文件的文件覆盖信息;基于所述测试记录信息,确定所述软件项目的原始代码文件中的已执行代码信息和未执行代码信息,包括:基于所述测试记录信息确定所述软件项目中原始代码文件中的测试已覆盖文件和测试未覆盖文件,以及确定所述测试已覆盖文件中的已执行代码信息和未执行代码信息;基于所述已执行代码信息、所述未执行代码信息和所述可忽略代码信息,确定所述软件项目的测试覆盖信息,包括:解析所述测试已覆盖文件和测试未覆盖文件中的所有代码信息;基于所述所有代码信息和可忽略代码信息确定所述测试已覆盖文件和测试未覆盖文件中非可忽略代码信息;基于所述测试已覆盖文件中的可忽略代码信息、非可忽略代码信息、已执行代码信息和未执行代码信息确定所述测试已覆盖文件的文件覆盖信息;基于所述测试未覆盖文件中的可忽略代码信息和非可忽略代码信息确定所述测试未覆盖文件的文件覆盖信息。3.根据权利要求2所述的方法,其中,所述测试覆盖信息还包括所述软件项目的项目覆盖信息;所述方法还包括:基于所述测试已覆盖文件和所述测试未覆盖文件的所述文件覆盖信息确定所述项目覆盖信息。4.根据权利要求2或3所述的方法,其中,所述测试已覆盖文件的文件覆盖信息包括已执行代码块的信息、未执行代码块的信息和忽略代码块的信息;基于所述测试已覆盖文件中的可忽略代码信息、非可忽略代码信息、已执行代码信息和未执行代码信息确定所述测试已覆盖文件的文件覆盖信息,包括:基于所述测试已覆盖文件中的非可忽略代码信息和所述已执行代码信息确定所述已执行代码块的信息;基于所述测试已覆盖文件中的非可忽略代码信息和所述已执行代码块的信息确定所述未执行代码块的信息;基于所述测试已覆盖文件中的可忽略代码信息确定所述忽略代码块的信息。5.根据权利要求2或3所述的方法,其中,所述测试未覆盖文件的文件覆盖信息包括未执行代码块的信息和忽略代码块的信息;基于所述测试未覆盖文件中的可忽略代码信息和非可忽略代码信息确定所述测试未覆盖文件的文件覆盖信息,包括:基于所述测试未覆盖文件中的非可忽略代码信息和未执行代码信息确定所述未执行代码块的信息;
基于所述测试未覆盖文件中的可忽略代码信息确定所述忽略代码块的信息。6.根据权利要求1-3任一项所述的方法,其中,所述方法还包括:获取忽略配置信息;基于所述忽略配置信息和所述测试覆盖信息,确定所述测试已覆盖文件的测试覆盖率和所述软件项目的测试覆盖率。7.根据权利要求6所述的方法,其中,基于所述忽略配置信息和所述测试覆盖信息,确定所述测试已覆盖文件的测试覆盖率和所述软件项目的测试覆盖率,包括:基于所述忽略配置信息和所述测试覆盖信息,筛选待计算的测试已覆盖文件和测试未覆盖文件;基于所述忽略配置信息和所述测试覆盖信息从筛选出的所述测试已覆盖文件和测试未覆盖文件中,筛选待计算的已执行代码块和未执行代码块;基于待计算的所述测试已覆盖文件中的待计算的已执行代码块和未执行代码块,确定所述已执行代码块的数量与所述已执行代码块和未执行代码块之总和的第一比值,基于所述第一比值确定待计算的所述测试已覆盖文件的测试覆盖率;基于待计算的所有所述测试已覆盖文件和所述测试未覆盖文件中的待计算的已执行代码块和未执行代码块,确定所有待计算的所述已执行代码块的数量,与所有待计算的所述已执行代码块和所有待计算的未执行代码块之总和的第二比值,基于所述第二比值确定所述软件项目的测试覆盖率。8.根据权利要求1-3、7任一项所述的方法,其中,所述方法还包括:基于所述测试覆盖信息,展示所述软件项目中的原始代码文件,并在所述原始代码文件中区分展示已执行代码块、未执行代码块和忽略代码块。9.一种信息确定装置,其中,包括:第一获取模块,被配置为获取软件项目的测试记录信息;第一确定模块,被配置为基于所述测试记录信息,确定所述软件项目的原始代码文件中的已执行代码信息和未执行代码信息;解析模块,被配置为对所述原始代码文件进行解析,获得所述原始代码文件中的可忽略代码信息;第二确定模块,被配置为基于所述已执行代码信息、所述未执行代码信息和所述可忽略代码信息,确定所述软件项目的测试覆盖信息。10.一种电子设备,其中,包括存储器、处理器以及存储在存储器上的计算机程序,其中,所述处理器执行所述计算机程序以实现权利要求1-8任一项所述的方法。11.一种计算机可读存储介质,其上存储有计算机指令,其中,该计算机指令被处理器执行时实现权利要求1-8任一项所述的方法。

技术总结
本公开实施例公开了一种信息确定方法、装置、电子设备及存储介质,所述方法包括:获取软件项目的测试记录信息;基于所述测试记录信息,确定所述软件项目的原始代码文件中的已执行代码信息和未执行代码信息;对所述原始代码文件进行解析,获得所述原始代码文件中的可忽略代码信息;基于所述已执行代码信息、所述未执行代码信息和所述可忽略代码信息,确定所述软件项目的测试覆盖信息。该技术方案能够为不同类型的测试覆盖率计算提供数据基础,能够适用于各种类型的测试覆盖率计算,能够提升项目测试的评测效果。测试的评测效果。测试的评测效果。


技术研发人员:陈敏锐
受保护的技术使用者:北京高德云信科技有限公司
技术研发日:2023.05.26
技术公布日:2023/9/14
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐