CN112148590A - 一种代码覆盖率的确定方法、装置及设备 - Google Patents
一种代码覆盖率的确定方法、装置及设备 Download PDFInfo
- Publication number
- CN112148590A CN112148590A CN202010879493.6A CN202010879493A CN112148590A CN 112148590 A CN112148590 A CN 112148590A CN 202010879493 A CN202010879493 A CN 202010879493A CN 112148590 A CN112148590 A CN 112148590A
- Authority
- CN
- China
- Prior art keywords
- version
- executable code
- code
- target program
- state information
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/368—Test management for test version control, e.g. updating test cases to a new software version
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
技术领域
本发明涉及计算机技术领域,尤其涉及一种代码覆盖率的确定方法、装置及设备。
背景技术
在计算机程序的测试过程中,代码覆盖率是评价测试活动覆盖产品代码的指标,常常作为软件测试中的一种度量被广泛使用。测试人员通过代码覆盖率结果,可以为覆盖不充分的源代码添加测试用例,从而进一步完善测试保障工作,完善开发的软件功能。
通常,在针对同一个项目的不同版本程序代码进行覆盖率测试的过程中,只能通过获取到的当前版本实际已经执行的代码量与当前版本的代码总量的比值来计算当前版本的代码覆盖率。但是上述确定代码覆盖率的方式,计算出的不同版本的程序代码的代码覆盖率之间毫无关联,测试开发人员根据得到的不同版本的程序代码的代码覆盖率,不能够全面了解不同版本之间存在差异的程序代码,对上述不同版本程序代码中可执行代码执行状态的影响情况,从而无法提供给测试人员有关该程序代码执行情况的更全面的参考数据,软件测试或代码测试效率低下,进而不利于开发人员进一步完善开发的软件功能。
发明内容
本说明书实施例的目的是提供一种代码覆盖率的确定方法、装置及设备,以解决现有技术中针对同一项目的不同版本程序代码进行测试时,无法提供给测试人员有关该程序代码执行情况的更全面的参考数据,软件测试或代码测试效率低下的问题。
为了解决上述技术问题,本说明书实施例是这样实现的:
第一方面,本说明书实施例提供了一种代码覆盖率的确定方法,包括:
获取第一版本的目标程序对应的第一覆盖率数据,所述第一覆盖率数据包括所述第一版本的目标程序中包含的第一可执行代码,以及所述第一可执行代码对应的第一执行状态信息,所述第一执行状态信息用于表征所述第一可执行代码被执行情况;
获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据,其中,所述第二覆盖率数据包括所述历史版本的所述目标程序中包含的第二可执行代码,以及所述第二可执行代码对应的第二执行状态信息;
基于所述第一可执行代码和所述第二可执行代码,从所述目标程序的历史版本中确定所述目标程序的第二版本,其中,所述第二版本是所述第二版本的所述第二可执行代码包含于所述第一可执行代码中,且是所述历史版本中包含于所述第一可执行代码中的所述第二可执行代码的代码量最多的版本,并且所述第一可执行代码中与所述第二版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述第二版本的所述第二可执行代码的执行顺序排布相同;
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第一版本的目标程序的代码覆盖率。
可选地,所述根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第一版本的目标程序的代码覆盖率,包括:
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第二版本的所述第二可执行代码中已被执行的代码行数和所述第一可执行代码中除所述第二版本中已被执行的所述第二可执行代码之外的可执行代码中已被执行的代码行数;
根据所述第二版本的所述第二可执行代码中已被执行的代码行数和所述第一可执行代码中除所述第二版本中已被执行的所述第二可执行代码之外的可执行代码中已被执行的代码行数,以及所述第一可执行代码的总代码行数,确定所述第一版本的目标程序的代码覆盖率。
可选地,所述方法还包括:
如果所述目标程序的历史版本中不存在所述目标程序的第二版本,则根据所述第一执行状态信息,统计所述第一可执行代码中已被执行的代码行数;
根据所述第一可执行代码中已被执行的代码行数,以及所述第一可执行代码的总代码行数,确定所述第一版本的目标程序的代码覆盖率。
可选地,所述基于所述第一可执行代码和所述第二可执行代码,从所述目标程序的历史版本中确定所述目标程序的第二版本,包括:
将所述第一可执行代码和所述第二可执行代码进行代码内容匹配,得到所述目标程序的备选版本,其中,所述备选版本是所述备选版本的所述第二可执行代码包含于所述第一可执行代码中,并且所述第一可执行代码中与所述备选版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述备选版本的所述第二可执行代码的执行顺序排布相同;
从所述备选版本中确定出所述目标程序的第二版本。
可选地,所述第一覆盖率数据还包括:目标程序的标识、版本信息,所述方法还包括:
根据所述目标程序的标识、所述版本信息、所述目标程序的可执行代码、所述可执行代码的执行状态信息建立代码覆盖率数据字典;
将获取到的第一版本的目标程序对应的第一覆盖率数据存储至所述代码覆盖率数据字典。
可选地,所述获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据,包括:
根据所述目标程序的标识、所述目标程序的版本信息,从所述代码覆盖率数据字典中获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据。
可选地,所述方法还包括:
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,生成所述第一版本的目标程序对应的第三覆盖率数据,其中,所述第三覆盖率数据包括所述第一可执行代码,以及根据所述第一执行状态信息和所述第二执行状态信息确定的所述第一可执行代码对应的第三执行状态信息;
将所述第三覆盖率数据存储至所述代码覆盖率数据字典。
第二方面,本说明书实施例提供了一种代码覆盖率的确定装置,包括:
第一获取模块,用于获取第一版本的目标程序对应的第一覆盖率数据,所述第一覆盖率数据包括所述第一版本的目标程序中包含的第一可执行代码,以及所述第一可执行代码对应的第一执行状态信息,所述第一执行状态信息用于表征所述第一可执行代码被执行情况;
第二获取模块,用于获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据,其中,所述第二覆盖率数据包括所述历史版本的所述目标程序中包含的第二可执行代码,以及所述第二可执行代码对应的第二执行状态信息;
第一确定模块,用于基于所述第一可执行代码和所述第二可执行代码,从所述目标程序的历史版本中确定所述目标程序的第二版本,其中,所述第二版本是所述第二版本的所述第二可执行代码包含于所述第一可执行代码中,且是所述历史版本中包含于所述第一可执行代码中的所述第二可执行代码的代码量最多的版本,并且所述第一可执行代码中与所述第二版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述第二版本的所述第二可执行代码的执行顺序排布相同;
第二确定模块,用于根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第一版本的目标程序的代码覆盖率。
第三方面,本说明书实施例提供了一种代码覆盖率的确定设备,包括:处理器,以及被安排成存储计算机可执行指令的存储器;所述计算机可执行指令在被执行时使所述处理器实现上述第一方面所提供的代码覆盖率的确定方法。
第四方面,本说明书实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的代码覆盖率的确定方法的步骤。
由以上本说明书实施例提供的技术方案可见,本说明书实施例通过获取第一版本的目标程序对应的第一覆盖率数据,第一覆盖率数据包括第一版本的目标程序中包含的第一可执行代码,以及第一可执行代码对应的第一执行状态信息,第一执行状态信息用于表征第一可执行代码被执行情况;获取目标程序的第一版本之前的历史版本对应的第二覆盖率数据,其中,第二覆盖率数据包括历史版本的目标程序中包含的第二可执行代码,以及第二可执行代码对应的第二执行状态信息,并基于第一可执行代码和第二可执行代码,从目标程序的历史版本中确定目标程序的第二版本,其中,第二版本是第二版本的第二可执行代码包含于第一可执行代码中,且是历史版本中包含于第一可执行代码中的第二可执行代码的代码量最多的版本,并且第一可执行代码中与第二版本的第二可执行代码相同的部分可执行代码的执行顺序排布与第二版本的第二可执行代码的执行顺序排布相同;然后,根据第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,这样,基于第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,能够提供给测试人员有关测试程序代码执行情况的更全面的参考数据,提高了软件测试或代码测试效率。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书实施例提供的代码覆盖率的确定方法的第一种流程示意图;
图2为本说明书实施例提供的代码覆盖率的确定方法的第二种流程示意图;
图3为本说明书实施例提供的代码覆盖率的确定方法的第三种流程示意图;
图4为本说明书实施例提供的代码覆盖率的确定方法的第四种流程示意图;
图5为本说明书实施例提供的代码覆盖率的确定装置的模块组成示意图;
图6为本说明书实施例提供的代码覆盖率的确定设备的结构示意图。
具体实施方式
本说明书实施例提供了一种代码覆盖率的确定方法、装置及设备。
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
如图1所示,本说明书实施例提供一种代码覆盖率的确定方法,该方法的执行主体可以是服务器,其中,该服务器可以是一个独立的服务器,也可以是由多个服务器组成的服务器集群,该服务器可以用于获取第一版本的目标程序对应的第一覆盖率数据,以及目标程序的第一版本之前的历史版本对应的第二覆盖率数据,而且,该服务器还可以用于确定上述第一版本的目标程序的代码覆盖率。该方法具体可以包括以下步骤:
在步骤S102中,获取第一版本的目标程序对应的第一覆盖率数据,第一覆盖率数据包括第一版本的目标程序中包含的第一可执行代码,以及第一可执行代码对应的第一执行状态信息,第一执行状态信息用于表征第一可执行代码被执行情况。
其中,上述目标程序可以是被测试的目标程序,该目标程序可以包含多个版本的程序代码,多个版本的程序代码可以是开发人员在对目标程序开发的过程中得到的。上述第一版本的目标程序可以为最新版本的目标程序,上述第一版本也可以是目标程序的任意版本,其中,该第一版本的目标程序中包括第一版本的第一覆盖率数据。上述第一覆盖率数据可以包括第一版本的目标程序的可执行代码,以及上述第一可执行代码对应的执行状态信息。上述第一执行状态信息可以包括:已执行状态、未执行状态或者执行了一部分等状态。
在实施中,在计算机程序的测试过程中,代码覆盖率是评价测试活动覆盖产品代码的指标,常常作为软件测试中的一种度量被广泛使用。代码覆盖率可以体现出源代码被测试的程度和比例,可以清楚的知道源代码被覆盖到和没有被覆盖到的分支、行、类等。当覆盖率比值越高时,表示源代码被测试用例执行到的比例就越高。测试人员通过代码覆盖率结果,可以为覆盖不充分的源代码添加测试用例,从而进一步完善测试保障工作,完善开发的软件功能。现有技术中在进行程序代码覆盖率测试的过程中,往往只能针对同一个项目的同一版本程序代码在不同时间段内的代码覆盖率数据进行整合运算,得到当前版本的程序代码覆盖率。通常,在针对同一个项目的不同版本程序代码进行覆盖率测试的过程中,只能通过获取到的当前版本的代码覆盖率数据来确定当前版本的代码覆盖率。但是上述确定代码覆盖率的方式,由于缺少历史版本的代码覆盖率数据作为参照,可能无法准确确定当前版本的代码覆盖率,从而无法提供给测试人员有关该程序代码执行情况的更全面的参考数据,进而不利于开发人员进一步完善开发的软件功能,为此,本说明书实施例提供一种能够解决上述问题的技术方案,具体可以参见下述内容。
具体的,服务器可以针对不同的程序开发语言采用不同的覆盖率工具来生成第一版本的目标程序对应的第一覆盖率数据,例如,针对开发语言为java语言的目标程序,可以使用JaCoCo覆盖率工具来生成第一版本的目标程序对应的第一覆盖率数据;针对开发语言为对于Linux下的C/C++代码,可以在gcc/g++工具编译代码时加上“–coverage”选项来生成可用于覆盖率分析的二进制文件,然后用gcov命令来生成第一覆盖率数据,也可用lcov工具来生成html版本的可读性较好的第一覆盖率数据。然后,服务器可以从上述覆盖率工具中获取上述第一版本的目标程序对应的第一覆盖率数据,其中,上述JaCoCo是常用的一种Java代码覆盖率工具,JaCoCo采用修改字节码的方法,来修改被测代码的jar文件或class文件,将统计代码插入其中,然后测试覆盖率分析可以在执行测试代码的过程中完成。
在步骤S104中,获取目标程序的第一版本之前的历史版本对应的第二覆盖率数据,其中,第二覆盖率数据包括历史版本的目标程序中包含的第二可执行代码,以及第二可执行代码对应的第二执行状态信息。
其中,上述目标程序的第一版本之前的历史版本可以为一个或多个版本,例如,上述历史版本可以包括三个版本,分别为:A版本、B版本和C版本。上述第二覆盖率数据可以是A版本或B版本或C版本的目标程序对应的覆盖率数据,或者,也可以是A版本和B版本,或A版本和C版本,或B版本和C版本整合后的目标程序对应的覆盖率数据,或者,还可以是A版本、B版本和C版本整合后的目标程序对应的覆盖率数据。上述第二覆盖率数据可以包括某历史版本的目标程序中包含的第二可执行代码,以及上述第二可执行代码所对应的执行状态信息。第二执行状态信息用于表征第二可执行代码被执行情况。上述第二执行状态信息可以包括:已执行状态、未执行状态或者执行了一部分等状态信息。
在步骤S106中,基于第一可执行代码和第二可执行代码,从目标程序的历史版本中确定目标程序的第二版本,其中,第二版本是第二版本的第二可执行代码包含于第一可执行代码中,且是历史版本中包含于第一可执行代码中的第二可执行代码的代码量最多的版本,并且第一可执行代码中与第二版本的第二可执行代码相同的部分可执行代码的执行顺序排布与第二版本的第二可执行代码的执行顺序排布相同。
具体的,例如,第一版本为D版本,上述目标程序的第一版本之前的历史版本为三个,分别为:A版本、B版本和C版本。假设D版本的第一可执行码包括6行不同内容的代码,具体可以表示为a、b、c、d、e、f,且第一可执行代码的执行顺序排布为a→b→c→d→e→f;A版本的第二可执行码包括3行不同内容的代码,具体可以表示为a、b、c,且A版本的第二可执行码的执行顺序排布为a→b→c;B版本的第二可执行码包括4行不同内容的代码,具体可以表示为a、b、c、d,且B版本的第二可执行码的执行顺序排布为a→b→c→d;C版本的第二可执行码包括5行不同内容的代码,具体可以表示为a、b、e、c、f,且C版本的第二可执行码的执行顺序排布为a→b→e→c→f(其中相同字母表示代码内容相同),则基于上述第一可执行代码和上述第二可执行代码,从目标程序的历史版本中确定的目标程序的第二版本为B版本。
在步骤S108中,根据第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率。
在实施中,服务器通过上述S102、S104以及S106的处理过程,获取到第一版本的目标程序对应的第一覆盖率数据,以及上述第二版本的第二覆盖率数据后,可以统计执行状态为已执行的第一可执行代码量,以及执行状态为已执行的第二可执行代码量,然后,可以根据上述第一可执行代码量以及第二可执行代码量来确定第一版本的目标程序的代码覆盖率。
具体的,以上述S106中的例子为例,假设D版本中第一执行状态为已执行的第一可执行代码具体可以表示为c、d、e、f,B版本中第二执行状态为已执行的第二可执行代码具体可以表示为a,则可以确定D版本中第一执行状态为已执行的目标第一可执行代码具体可以表示为a、c、d、e、f,由于D版本的第一可执行码包括代码行数为6,目标第一可执行代码包括代码行数为5,由此,可以确定出D版本的目标程序的代码覆盖率为83%。或者,还可以根据第一执行状态为已执行的第一可执行代码的代码量、第二版本的第二执行状态信息为已执行的第二可执行代码的代码量,确定第一版本的目标程序的代码覆盖率。
由以上本说明书实施例提供的技术方案可见,本说明书实施例通过获取第一版本的目标程序对应的第一覆盖率数据,第一覆盖率数据包括第一版本的目标程序中包含的第一可执行代码,以及第一可执行代码对应的第一执行状态信息,第一执行状态信息用于表征第一可执行代码被执行情况;获取目标程序的第一版本之前的历史版本对应的第二覆盖率数据,其中,第二覆盖率数据包括历史版本的目标程序中包含的第二可执行代码,以及第二可执行代码对应的第二执行状态信息,并基于第一可执行代码和第二可执行代码,从目标程序的历史版本中确定目标程序的第二版本,其中,第二版本是第二版本的第二可执行代码包含于第一可执行代码中,且是历史版本中包含于第一可执行代码中的第二可执行代码的代码量最多的版本,并且第一可执行代码中与第二版本的第二可执行代码相同的部分可执行代码的执行顺序排布与第二版本的第二可执行代码的执行顺序排布相同;然后,根据第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,这样,基于第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,能够提供给测试人员有关测试程序代码执行情况的更全面的参考数据,提高了软件测试或代码测试效率。
进一步的,如图2所示,上述S108的具体处理过程可以多种多样,以下再提供一种可选的处理方式,具体可参见下述S1082-S1084的处理过程。
在步骤S1082中,根据第一执行状态信息以及第二版本的第二执行状态信息,确定第二版本的第二可执行代码中已被执行的代码行数和第一可执行代码中除第二版本中已被执行的第二可执行代码之外的可执行代码中已被执行的代码行数。
在步骤S1084中,根据第二版本的第二可执行代码中已被执行的代码行数和第一可执行代码中除第二版本中已被执行的第二可执行代码之外的可执行代码中已被执行的代码行数,以及第一可执行代码的总代码行数,确定第一版本的目标程序的代码覆盖率。
在实施中,服务器通过上述S106的处理基于上述第一可执行代码和上述第二可执行代码,从上述目标程序的历史版本中确定出上述目标程序的第二版本后,可以确定第二版本的第二可执行代码中已被执行的代码行数,以及第一可执行代码中除第二版本中已被执行的第二可执行代码之外的可执行代码中已被执行的代码行数。然后,服务器可以根据第二版本的第二可执行代码中已被执行的代码行数和第一可执行代码中除第二版本中已被执行的第二可执行代码之外的可执行代码中已被执行的代码行数,以及第一可执行代码的总代码行数,确定第一版本的目标程序的代码覆盖率。
具体的,例如,第二版本的第二可执行代码包括行号为1、2、3、4的四行代码,第一版本的第一可执行代码包括1、2、3、4、5、6的六行代码,且第二版本与第一版本相对应的行号1、2、3、4所对应的代码内容完全相同。假如,服务器通过上述S106的处理确定出第二版本的第二可执行代码中已被执行的代码行数为2,且对应的已被执行的第二可执行代码所在的行号为行号1和行号2,确定的第一可执行代码中除第二版本中已被执行的第二可执行代码之外的可执行代码中已被执行的代码行数为3,且对应的已被执行的第一可执行代码所在的行号为行号4、行号5和行号6。那么,可以根据第二版本的第二可执行代码中已被执行的代码行数2行(行号1和行号2),第一可执行代码中除第二版本中已被执行的第二可执行代码之外的可执行代码中已被执行的代码行数3行(行号4、行号5和行号6),以及第一可执行代码的总代码行数6行,确定第一版本的目标程序的代码覆盖率为83%。
进一步的,考虑到开发人员在对目标程序开发的过程中,可能会对当前正在开发的版本中所包含的当前版本之前的第二可执行代码的内容进行修改,例如,在对当前正在开发的版本中所包含的当前版本之前的第二可执行代码的代码执行顺序进行调整,使得服务器在上述S106的处理过程中从目标程序的历史版本中未确定出目标程序的第二版本,在这种情况下,如图3所示,上述方法还可以包括下述S110-S112的处理过程。
在步骤S110中,如果目标程序的历史版本中不存在目标程序的第二版本,则根据第一执行状态信息,统计第一可执行代码中已被执行的代码行数。
在步骤S112中,根据第一可执行代码中已被执行的代码行数,以及第一可执行代码的总代码行数,确定第一版本的目标程序的代码覆盖率。
在实施中,服务器通过上述S106的处理,如果检测出目标程序的历史版本中不存在目标程序的第二版本,则可以根据第一执行状态信息,统计第一可执行代码中已被执行的代码行数,然后,根据第一可执行代码中已被执行的代码行数,以及第一可执行代码的总代码行数,确定第一版本的目标程序的代码覆盖率。
如图4所示,上述S106的处理过程可以多种多样,以下再提供一种可选的处理过程,具体可参见下述S1062-S1064的处理过程。
在步骤S1062中,将第一可执行代码和第二可执行代码进行代码内容匹配,得到目标程序的备选版本,其中,备选版本是备选版本的第二可执行代码包含于第一可执行代码中,并且第一可执行代码中与备选版本的第二可执行代码相同的部分可执行代码的执行顺序排布与备选版本的第二可执行代码的执行顺序排布相同。
具体的,例如,第一版本为D版本,上述目标程序的第一版本之前的历史版本为三个,分别为:A版本、B版本和C版本。假设D版本的第一可执行码包括6行不同内容的代码,具体可以表示为a、b、c、d、e、f,且第一可执行代码的执行顺序排布为a→b→c→d→e→f;A版本的第二可执行码包括3行不同内容的代码,具体可以表示为a、b、c,且A版本的第二可执行码的执行顺序排布为a→b→c;B版本的第二可执行码包括4行不同内容的代码,具体可以表示为a、b、c、d,且B版本的第二可执行码的执行顺序排布为a→b→c→d;C版本的第二可执行码包括5行不同内容的代码,具体可以表示为a、b、e、c、f,且C版本的第二可执行码的执行顺序排布为a→b→e→c→f(其中相同字母表示代码内容相同),则可以确定出目标程序的备选版本为A版本和B版本。
在步骤S1064中,从备选版本中确定出目标程序的第二版本。
在实施中,服务器可以通过上述S1062的处理,可以将从备选版本中包含于第一可执行代码中的第二可执行代码的代码量最多的版本确定为目标程序的第二版本。以上述S1062的例子为例,可以确定出B版本为目标程序的第二版本。
进一步的,为了减少检索目标程序的第一版本之前的历史版本对应的第二覆盖率数据,以及每次对获取到的第一版本的目标程序对应的第一覆盖率数据进行存储所消耗的系统资源,上述方法还可以包括下述步骤A至步骤B的处理过程。
步骤A,根据目标程序的标识、版本信息、目标程序的可执行代码、可执行代码的执行状态信息建立代码覆盖率数据字典。
步骤B,将获取到的第一版本的目标程序对应的第一覆盖率数据存储至代码覆盖率数据字典,其中,上述第一覆盖率数据还包括:目标程序的标识、版本信息。
在实施中,服务器可以将获取到的第一版本的目标程序对应的第一覆盖率数据,根据上述第一覆盖率数据的目标程序的标识以及版本信息,对应存储至上述代码覆盖率数据字典中,这样,通过将每次获取的第一覆盖率数据独立存储于上述代码覆盖率字典中,可以便于开发或测试人员对第一覆盖率数据进行复核,此外,可以在目标程序的版本再次升级后,可以作为历史版本数据结合最新版本覆盖率数据来计算最新版本的目标程序的代码覆盖率。
具体的,本说明书实施例对获取到的第一覆盖率数据进行存储时,对上述目标程序所属的各项目、每个项目中程序文件、每个程序文件所对应的各个方法、以及各方法所对应的每一行代码的内容,方法内行号以及该行可执行代码在当前时刻的可执行状态信息均独立存储于上述代码覆盖率数据字典中。进一步的,上述S104的处理方法可以多种多样,以下再提供一种可选的处理方式,具体可参见下述处理过程。
根据目标程序的标识、目标程序的版本信息,从代码覆盖率数据字典中获取目标程序的第一版本之前的历史版本对应的第二覆盖率数据。
在实施中,服务器通过上述S102的处理获取到第一版本的目标程序对应的第一覆盖率数据后,可以根据第一覆盖率数据中包括的目标程序的标识和目标程序的版本信息,从代码覆盖率数据字典中获取目标程序的第一版本之前的历史版本对应的第二覆盖率数据,其中,上述历史版本对应的第二覆盖率数据中不仅包括获取到的独立的历史版本对应的第二覆盖率数据,还可以包括经过某历史版本与该历史版本的上一个历史版本的覆盖率数据整合后得到的该历史版本的整合后的覆盖率数据。进一步的,考虑到通过覆盖率数据,可以知道目标程序测试的是否充分,同时,可以为开发及测试人员提供程序运行过程中程序代码的执行情况,为开发人员进一步完善开发的软件功能提供参考依据,上述方法还可以包括下述步骤C-步骤D的处理过程。
步骤C,根据第一执行状态信息以及第二版本的第二执行状态信息,生成第一版本的目标程序对应的第三覆盖率数据,其中,第三覆盖率数据包括第一可执行代码,以及根据第一执行状态信息和第二执行状态信息确定的第一可执行代码对应的第三执行状态信息。
步骤D,将第三覆盖率数据存储至代码覆盖率数据字典。
具体的,以上述S1084中的例子为例,例如,第二版本的第二可执行代码包括行号为1、2、3、4的四行代码,第一版本的第一可执行代码包括1、2、3、4、5、6的六行代码,且第二版本与第一版本相对应的行号1、2、3、4所对应的代码内容完全相同。假如,服务器通过上述S106的处理确定出第二版本的第二可执行代码中已被执行的代码行数为2,且对应的已被执行的第二可执行代码所在的行号为行号1和行号2,确定的第一可执行代码中除第二版本中已被执行的第二可执行代码之外的可执行代码中已被执行的代码行数为3,且对应的已被执行的第一可执行代码所在的行号为行号4、行号5和行号6。那么,可以根据第二版本的第二可执行代码中已被执行的代码行数所对应的行号(行号1和行号2),将第一可执行代码中行号为1和行号为2的第一可执行代码的第一执行状态信息设置为已执行状态,这样,根据第一执行状态信息以及第二版本的第二执行状态信息,可以生成第一版本的目标程序对应的第三覆盖率数据,其中,上述第三覆盖率数据中包括第一可执行代码,以及第三执行状态信息(该第三执行状态信息中已执行的号为行号1、行号2、行号4、行号5和行号6)。然后,服务器将上述第三覆盖率数据存储至代码覆盖率数据字典。
进一步的,本说明书实施例提供的一种代码覆盖率的确定方法的具体实现过程可以参见下述处理过程:
服务器在获取到第一版本的目标程序对应的第一覆盖率数据后,可以根据该目标程序的版本号从上述代码覆盖率数据字典中获取目标程序的第一版本之前的历史版本对应的第二覆盖率数据,若未从上述代码覆盖率数据字典中获取到与目标程序的第一版本之前的历史版本对应的第二覆盖率数据,则直接将上述获取到的第一版本的目标程序对应的第一覆盖率数据存储在上述代码覆盖率数据字典中。
若从上述代码覆盖率数据字典中获取到与目标程序的第一版本之前的历史版本对应的第二覆盖率数据,则将上述第一覆盖率数据中的第一可执行代码与第二覆盖率数据中包含的第二可执行代码进行比较分析,从所述目标程序的历史版本中确定所述目标程序的第二版本。
具体的,例如可以对上述第一可执行代码和第二可执行代码采用先进行类和方法的比较,如果,第一可执行代码中的类和方法与第二可执行代码中的类和方法不同,也即第一可执行代码中不包含第二可执行代码中的类和方法,则直接将上述获取到的第一版本的目标程序对应的第一覆盖率数据存储在上述代码覆盖率数据字典中。如果,第一可执行代码中的类和方法与第二可执行代码中的类和方法相同,则继续比较第一可执行代码行在方法中的执行顺序是否与第二可执行代码行在方法中的执行顺序一致,若一致,则将上述历史版本中包含于第一可执行代码中的第二可执行代码的代码量最多的版本确定为目标程序的第二版本,并根据第一执行状态信息以及第二版本的第二执行状态信息,生成第一版本的目标程序对应的第三覆盖率数据,其中,第三覆盖率数据包括第一可执行代码,以及根据第一执行状态信息和第二执行状态信息确定的第一可执行代码对应的第三执行状态信息,然后,将上述第三覆盖率数据存储至代码覆盖率数据字典中。其中,上述第三覆盖率数据为根据第一版本和第二版本整合后得到的上述第一版本的覆盖率数据。
由以上本说明书实施例提供的技术方案可见,本说明书实施例通过获取第一版本的目标程序对应的第一覆盖率数据,第一覆盖率数据包括第一版本的目标程序中包含的第一可执行代码,以及第一可执行代码对应的第一执行状态信息,第一执行状态信息用于表征第一可执行代码被执行情况;获取目标程序的第一版本之前的历史版本对应的第二覆盖率数据,其中,第二覆盖率数据包括历史版本的目标程序中包含的第二可执行代码,以及第二可执行代码对应的第二执行状态信息,并基于第一可执行代码和第二可执行代码,从目标程序的历史版本中确定目标程序的第二版本,其中,第二版本是第二版本的第二可执行代码包含于第一可执行代码中,且是历史版本中包含于第一可执行代码中的第二可执行代码的代码量最多的版本,并且第一可执行代码中与第二版本的第二可执行代码相同的部分可执行代码的执行顺序排布与第二版本的第二可执行代码的执行顺序排布相同;然后,根据第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,这样,基于第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,能够提供给测试人员有关测试程序代码执行情况的更全面的参考数据,提高了软件测试或代码测试效率。
对应上述实施例提供的代码覆盖率的确定方法,基于相同的技术构思,本说明书实施例还提供了一种代码覆盖率的确定装置,图5为本说明书实施例提供的代码覆盖率的确定装置的模块组成示意图,该代码覆盖率的确定装置用于执行图1至图4描述的代码覆盖率的确定方法,如图5所示,该代码覆盖率的确定装置包括:
第一获取模块501,用于获取第一版本的目标程序对应的第一覆盖率数据,所述第一覆盖率数据包括所述第一版本的目标程序中包含的第一可执行代码,以及所述第一可执行代码对应的第一执行状态信息,所述第一执行状态信息用于表征所述第一可执行代码被执行情况;
第二获取模块502,用于获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据,其中,所述第二覆盖率数据包括所述历史版本的所述目标程序中包含的第二可执行代码,以及所述第二可执行代码对应的第二执行状态信息;
第一确定模块503,用于基于所述第一可执行代码和所述第二可执行代码,从所述目标程序的历史版本中确定所述目标程序的第二版本,其中,所述第二版本是所述第二版本的所述第二可执行代码包含于所述第一可执行代码中,且是所述历史版本中包含于所述第一可执行代码中的所述第二可执行代码的代码量最多的版本,并且所述第一可执行代码中与所述第二版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述第二版本的所述第二可执行代码的执行顺序排布相同;
第二确定模块504,用于根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第一版本的目标程序的代码覆盖率。
由以上本说明书实施例提供的技术方案可见,本说明书实施例通过获取第一版本的目标程序对应的第一覆盖率数据,第一覆盖率数据包括第一版本的目标程序中包含的第一可执行代码,以及第一可执行代码对应的第一执行状态信息,第一执行状态信息用于表征第一可执行代码被执行情况;获取目标程序的第一版本之前的历史版本对应的第二覆盖率数据,其中,第二覆盖率数据包括历史版本的目标程序中包含的第二可执行代码,以及第二可执行代码对应的第二执行状态信息,并基于第一可执行代码和第二可执行代码,从目标程序的历史版本中确定目标程序的第二版本,其中,第二版本是第二版本的第二可执行代码包含于第一可执行代码中,且是历史版本中包含于第一可执行代码中的第二可执行代码的代码量最多的版本,并且第一可执行代码中与第二版本的第二可执行代码相同的部分可执行代码的执行顺序排布与第二版本的第二可执行代码的执行顺序排布相同;然后,根据第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,这样,基于第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,能够提供给测试人员有关测试程序代码执行情况的更全面的参考数据,提高了软件测试或代码测试效率。
可选地,所述第二确定模块,包括:
第一确定单元,用于根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第二版本的所述第二可执行代码中已被执行的代码行数和所述第一可执行代码中除所述第二版本中已被执行的所述第二可执行代码之外的可执行代码中已被执行的代码行数;
第二确定单元,用于根据所述第二版本的所述第二可执行代码中已被执行的代码行数和所述第一可执行代码中除所述第二版本中已被执行的所述第二可执行代码之外的可执行代码中已被执行的代码行数,以及所述第一可执行代码的总代码行数,确定所述第一版本的目标程序的代码覆盖率。
可选地,所述装置还包括:
统计模块,用于如果所述目标程序的历史版本中不存在所述目标程序的第二版本,则根据所述第一执行状态信息,统计所述第一可执行代码中已被执行的代码行数;
第三确定模块,用于根据所述第一可执行代码中已被执行的代码行数,以及所述第一可执行代码的总代码行数,确定所述第一版本的目标程序的代码覆盖率。
可选地,所述第一确定模块,包括:
匹配单元,用于将所述第一可执行代码和所述第二可执行代码进行代码内容匹配,得到所述目标程序的备选版本,其中,所述备选版本是所述备选版本的所述第二可执行代码包含于所述第一可执行代码中,并且所述第一可执行代码中与所述备选版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述备选版本的所述第二可执行代码的执行顺序排布相同;
第三确定单元,用于从所述备选版本中确定出所述目标程序的第二版本。
可选地,所述装置还用于:
采用JACOCO工具获取第一版本的目标程序对应的第一覆盖率数据。
可选地,所述第一覆盖率数据还包括:目标程序的标识、版本信息,所述装置还包括:
字典建立模块,用于根据所述目标程序的标识、所述版本信息、所述目标程序的可执行代码、所述可执行代码的执行状态信息建立代码覆盖率数据字典;
第一存储模块,用于将获取到的第一版本的目标程序对应的第一覆盖率数据存储至所述代码覆盖率数据字典。
可选地,所述第二获取模块,用于:
根据所述目标程序的标识、所述目标程序的版本信息,从所述代码覆盖率数据字典中获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据。
可选地,所述装置还包括:
生成模块,用于根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,生成所述第一版本的目标程序对应的第三覆盖率数据,其中,所述第三覆盖率数据包括所述第一可执行代码,以及根据所述第一执行状态信息和所述第二执行状态信息确定的所述第一可执行代码对应的第三执行状态信息;
第二存储模块,用于将所述第三覆盖率数据存储至所述代码覆盖率数据字典。
由以上本说明书实施例提供的技术方案可见,本说明书实施例通过获取第一版本的目标程序对应的第一覆盖率数据,第一覆盖率数据包括第一版本的目标程序中包含的第一可执行代码,以及第一可执行代码对应的第一执行状态信息,第一执行状态信息用于表征第一可执行代码被执行情况;获取目标程序的第一版本之前的历史版本对应的第二覆盖率数据,其中,第二覆盖率数据包括历史版本的目标程序中包含的第二可执行代码,以及第二可执行代码对应的第二执行状态信息,并基于第一可执行代码和第二可执行代码,从目标程序的历史版本中确定目标程序的第二版本,其中,第二版本是第二版本的第二可执行代码包含于第一可执行代码中,且是历史版本中包含于第一可执行代码中的第二可执行代码的代码量最多的版本,并且第一可执行代码中与第二版本的第二可执行代码相同的部分可执行代码的执行顺序排布与第二版本的第二可执行代码的执行顺序排布相同;然后,根据第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,这样,基于第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,能够提供给测试人员有关测试程序代码执行情况的更全面的参考数据,提高了软件测试或代码测试效率。
本说明书实施例提供的代码覆盖率的确定装置能够实现上述代码覆盖率的确定方法对应的实施例中的各个过程,为避免重复,这里不再赘述。
需要说明的是,本说明书实施例提供的代码覆盖率的确定装置与本说明书实施例提供的代码覆盖率的确定方法基于同一说明书构思,因此该实施例的具体实施可以参见前述代码覆盖率的确定方法的实施,重复之处不再赘述。
对应上述实施例提供的代码覆盖率的确定方法,基于相同的技术构思,本说明书实施例还提供了一种代码覆盖率的确定设备,如图6所示。图6为本说明书实施例提供的代码覆盖率的确定设备的硬件结构示意图,该代码覆盖率的确定设备用于执行图1-图4描述的代码覆盖率的确定方法,所述的代码覆盖率的确定设备可以为上述实施例提供的服务器。
代码覆盖率的确定设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上的处理器601和存储器602,存储器602中可以存储有一个或一个以上存储应用程序或数据。其中,存储器602可以是短暂存储或持久存储。存储在存储器602的应用程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对任务的分配设备中的一系列计算机可执行指令。更进一步地,处理器601可以设置为与存储器602通信,在代码覆盖率的确定设备上执行存储器602中的一系列计算机可执行指令。代码覆盖率的确定设备还可以包括一个或一个以上电源603,一个或一个以上有线或无线网络接口604,一个或一个以上输入输出接口605,一个或一个以上键盘606。
具体在本实施例中,代码覆盖率的确定设备包括有存储器,以及一个或一个以上的程序,其中一个或者一个以上程序存储于存储器中,且一个或者一个以上程序可以包括一个或一个以上模块,且每个模块可以包括对任务的分配设备中的一系列计算机可执行指令,且经配置以由一个或者一个以上处理器执行该一个或者一个以上程序包含用于进行以下计算机可执行指令:
获取第一版本的目标程序对应的第一覆盖率数据,所述第一覆盖率数据包括所述第一版本的目标程序中包含的第一可执行代码,以及所述第一可执行代码对应的第一执行状态信息,所述第一执行状态信息用于表征所述第一可执行代码被执行情况;
获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据,其中,所述第二覆盖率数据包括所述历史版本的所述目标程序中包含的第二可执行代码,以及所述第二可执行代码对应的第二执行状态信息;
基于所述第一可执行代码和所述第二可执行代码,从所述目标程序的历史版本中确定所述目标程序的第二版本,其中,所述第二版本是所述第二版本的所述第二可执行代码包含于所述第一可执行代码中,且是所述历史版本中包含于所述第一可执行代码中的所述第二可执行代码的代码量最多的版本,并且所述第一可执行代码中与所述第二版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述第二版本的所述第二可执行代码的执行顺序排布相同;
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第一版本的目标程序的代码覆盖率。
可选地,所述根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第一版本的目标程序的代码覆盖率,包括:
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第二版本的所述第二可执行代码中已被执行的代码行数和所述第一可执行代码中除所述第二版本中已被执行的所述第二可执行代码之外的可执行代码中已被执行的代码行数;
根据所述第二版本的所述第二可执行代码中已被执行的代码行数和所述第一可执行代码中除所述第二版本中已被执行的所述第二可执行代码之外的可执行代码中已被执行的代码行数,以及所述第一可执行代码的总代码行数,确定所述第一版本的目标程序的代码覆盖率。
可选地,所述方法还包括:
如果所述目标程序的历史版本中不存在所述目标程序的第二版本,则根据所述第一执行状态信息,统计所述第一可执行代码中已被执行的代码行数;
根据所述第一可执行代码中已被执行的代码行数,以及所述第一可执行代码的总代码行数,确定所述第一版本的目标程序的代码覆盖率。
可选地,所述基于所述第一可执行代码和所述第二可执行代码,从所述目标程序的历史版本中确定所述目标程序的第二版本,包括:
将所述第一可执行代码和所述第二可执行代码进行代码内容匹配,得到所述目标程序的备选版本,其中,所述备选版本是所述备选版本的所述第二可执行代码包含于所述第一可执行代码中,并且所述第一可执行代码中与所述备选版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述备选版本的所述第二可执行代码的执行顺序排布相同;
从所述备选版本中确定出所述目标程序的第二版本。
可选地,所述第一覆盖率数据还包括:目标程序的标识、版本信息,所述方法还包括:
根据所述目标程序的标识、所述版本信息、所述目标程序的可执行代码、所述可执行代码的执行状态信息建立代码覆盖率数据字典;
将获取到的第一版本的目标程序对应的第一覆盖率数据存储至所述代码覆盖率数据字典。
可选地,所述获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据,包括:
根据所述目标程序的标识、所述目标程序的版本信息,从所述代码覆盖率数据字典中获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据。
可选地,所述方法还包括:
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,生成所述第一版本的目标程序对应的第三覆盖率数据,其中,所述第三覆盖率数据包括所述第一可执行代码,以及根据所述第一执行状态信息和所述第二执行状态信息确定的所述第一可执行代码对应的第三执行状态信息;
将所述第三覆盖率数据存储至所述代码覆盖率数据字典。
由以上本说明书实施例提供的技术方案可见,本说明书实施例通过获取第一版本的目标程序对应的第一覆盖率数据,第一覆盖率数据包括第一版本的目标程序中包含的第一可执行代码,以及第一可执行代码对应的第一执行状态信息,第一执行状态信息用于表征第一可执行代码被执行情况;获取目标程序的第一版本之前的历史版本对应的第二覆盖率数据,其中,第二覆盖率数据包括历史版本的目标程序中包含的第二可执行代码,以及第二可执行代码对应的第二执行状态信息,并基于第一可执行代码和第二可执行代码,从目标程序的历史版本中确定目标程序的第二版本,其中,第二版本是第二版本的第二可执行代码包含于第一可执行代码中,且是历史版本中包含于第一可执行代码中的第二可执行代码的代码量最多的版本,并且第一可执行代码中与第二版本的第二可执行代码相同的部分可执行代码的执行顺序排布与第二版本的第二可执行代码的执行顺序排布相同;然后,根据第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,这样,基于第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,能够提供给测试人员有关测试程序代码执行情况的更全面的参考数据,提高了软件测试或代码测试效率。
进一步地,对应上述实施例提供的代码覆盖率的确定方法,本说明书实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器603执行时实现如上述代码覆盖率的确定方法实施例的各步骤,且能达到相同的技术效果。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
该存储介质存储的计算机可执行指令在被处理器执行时,能实现以下流程:
获取第一版本的目标程序对应的第一覆盖率数据,所述第一覆盖率数据包括所述第一版本的目标程序中包含的第一可执行代码,以及所述第一可执行代码对应的第一执行状态信息,所述第一执行状态信息用于表征所述第一可执行代码被执行情况;
获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据,其中,所述第二覆盖率数据包括所述历史版本的所述目标程序中包含的第二可执行代码,以及所述第二可执行代码对应的第二执行状态信息;
基于所述第一可执行代码和所述第二可执行代码,从所述目标程序的历史版本中确定所述目标程序的第二版本,其中,所述第二版本是所述第二版本的所述第二可执行代码包含于所述第一可执行代码中,且是所述历史版本中包含于所述第一可执行代码中的所述第二可执行代码的代码量最多的版本,并且所述第一可执行代码中与所述第二版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述第二版本的所述第二可执行代码的执行顺序排布相同;
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第一版本的目标程序的代码覆盖率。
可选地,所述根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第一版本的目标程序的代码覆盖率,包括:
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第二版本的所述第二可执行代码中已被执行的代码行数和所述第一可执行代码中除所述第二版本中已被执行的所述第二可执行代码之外的可执行代码中已被执行的代码行数;
根据所述第二版本的所述第二可执行代码中已被执行的代码行数和所述第一可执行代码中除所述第二版本中已被执行的所述第二可执行代码之外的可执行代码中已被执行的代码行数,以及所述第一可执行代码的总代码行数,确定所述第一版本的目标程序的代码覆盖率。
可选地,所述方法还包括:
如果所述目标程序的历史版本中不存在所述目标程序的第二版本,则根据所述第一执行状态信息,统计所述第一可执行代码中已被执行的代码行数;
根据所述第一可执行代码中已被执行的代码行数,以及所述第一可执行代码的总代码行数,确定所述第一版本的目标程序的代码覆盖率。
可选地,所述基于所述第一可执行代码和所述第二可执行代码,从所述目标程序的历史版本中确定所述目标程序的第二版本,包括:
将所述第一可执行代码和所述第二可执行代码进行代码内容匹配,得到所述目标程序的备选版本,其中,所述备选版本是所述备选版本的所述第二可执行代码包含于所述第一可执行代码中,并且所述第一可执行代码中与所述备选版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述备选版本的所述第二可执行代码的执行顺序排布相同;
从所述备选版本中确定出所述目标程序的第二版本。
可选地,所述第一覆盖率数据还包括:目标程序的标识、版本信息,所述方法还包括:
根据所述目标程序的标识、所述版本信息、所述目标程序的可执行代码、所述可执行代码的执行状态信息建立代码覆盖率数据字典;
将获取到的第一版本的目标程序对应的第一覆盖率数据存储至所述代码覆盖率数据字典。
可选地,所述获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据,包括:
根据所述目标程序的标识、所述目标程序的版本信息,从所述代码覆盖率数据字典中获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据。
可选地,所述方法还包括:
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,生成所述第一版本的目标程序对应的第三覆盖率数据,其中,所述第三覆盖率数据包括所述第一可执行代码,以及根据所述第一执行状态信息和所述第二执行状态信息确定的所述第一可执行代码对应的第三执行状态信息;
将所述第三覆盖率数据存储至所述代码覆盖率数据字典。
由以上本说明书实施例提供的技术方案可见,本说明书实施例通过获取第一版本的目标程序对应的第一覆盖率数据,第一覆盖率数据包括第一版本的目标程序中包含的第一可执行代码,以及第一可执行代码对应的第一执行状态信息,第一执行状态信息用于表征第一可执行代码被执行情况;获取目标程序的第一版本之前的历史版本对应的第二覆盖率数据,其中,第二覆盖率数据包括历史版本的目标程序中包含的第二可执行代码,以及第二可执行代码对应的第二执行状态信息,并基于第一可执行代码和第二可执行代码,从目标程序的历史版本中确定目标程序的第二版本,其中,第二版本是第二版本的第二可执行代码包含于第一可执行代码中,且是历史版本中包含于第一可执行代码中的第二可执行代码的代码量最多的版本,并且第一可执行代码中与第二版本的第二可执行代码相同的部分可执行代码的执行顺序排布与第二版本的第二可执行代码的执行顺序排布相同;然后,根据第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,这样,基于第一执行状态信息以及第二版本的第二执行状态信息,确定第一版本的目标程序的代码覆盖率,能够提供给测试人员有关测试程序代码执行情况的更全面的参考数据,提高了软件测试或代码测试效率。
需要说明的是,本说明书中关于存储介质的实施例与本说明书中关于代码覆盖率的确定方法的实施例基于同一发明构思,因此该实施例的具体实施可以参见前述对应的代码覆盖率的确定方法的实施,重复之处不再赘述。上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域内的技术人员应明白,本说明书的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
可以理解的是,本说明书实施例描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(Application Specific Integrated Circuits,ASIC)、数字信号处理器(Digital SignalProcessing,DSP)、数字信号处理设备(DSP Device,DSPD)、可编程逻辑设备(ProgrammableLogic Device,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本说明书所述功能的其它电子单元或其组合中。
对于软件实现,可通过执行本说明书实施例所述功能的模块(例如过程、函数等)来实现本说明书实施例所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
还需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本说明书的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本说明书各个实施例所述的方法。
上面结合附图对本说明书的实施例进行了描述,但是本说明书并不局限于上述的具体实施方式,上述具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本说明书的启示下,在不脱离本说明书宗旨和权利要求所保护的范围情况下,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。
Claims (10)
1.一种代码覆盖率的确定方法,其特征在于,所述方法包括:
获取第一版本的目标程序对应的第一覆盖率数据,所述第一覆盖率数据包括所述第一版本的目标程序中包含的第一可执行代码,以及所述第一可执行代码对应的第一执行状态信息,所述第一执行状态信息用于表征所述第一可执行代码被执行情况;
获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据,其中,所述第二覆盖率数据包括所述历史版本的所述目标程序中包含的第二可执行代码,以及所述第二可执行代码对应的第二执行状态信息;
基于所述第一可执行代码和所述第二可执行代码,从所述目标程序的历史版本中确定所述目标程序的第二版本,其中,所述第二版本是所述第二版本的所述第二可执行代码包含于所述第一可执行代码中,且是所述历史版本中包含于所述第一可执行代码中的所述第二可执行代码的代码量最多的版本,并且所述第一可执行代码中与所述第二版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述第二版本的所述第二可执行代码的执行顺序排布相同;
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第一版本的目标程序的代码覆盖率。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第一版本的目标程序的代码覆盖率,包括:
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第二版本的所述第二可执行代码中已被执行的代码行数和所述第一可执行代码中除所述第二版本中已被执行的所述第二可执行代码之外的可执行代码中已被执行的代码行数;
根据所述第二版本的所述第二可执行代码中已被执行的代码行数和所述第一可执行代码中除所述第二版本中已被执行的所述第二可执行代码之外的可执行代码中已被执行的代码行数,以及所述第一可执行代码的总代码行数,确定所述第一版本的目标程序的代码覆盖率。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
如果所述目标程序的历史版本中不存在所述目标程序的第二版本,则根据所述第一执行状态信息,统计所述第一可执行代码中已被执行的代码行数;
根据所述第一可执行代码中已被执行的代码行数,以及所述第一可执行代码的总代码行数,确定所述第一版本的目标程序的代码覆盖率。
4.根据权利要求1所述的方法,其特征在于,所述基于所述第一可执行代码和所述第二可执行代码,从所述目标程序的历史版本中确定所述目标程序的第二版本,包括:
将所述第一可执行代码和所述第二可执行代码进行代码内容匹配,得到所述目标程序的备选版本,其中,所述备选版本是所述备选版本的所述第二可执行代码包含于所述第一可执行代码中,并且所述第一可执行代码中与所述备选版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述备选版本的所述第二可执行代码的执行顺序排布相同;
从所述备选版本中确定出所述目标程序的第二版本。
5.根据权利要求1所述的方法,其特征在于,所述第一覆盖率数据还包括:目标程序的标识、版本信息,所述方法还包括:
根据所述目标程序的标识、所述版本信息、所述目标程序的可执行代码、所述可执行代码的执行状态信息建立代码覆盖率数据字典;
将获取到的第一版本的目标程序对应的第一覆盖率数据存储至所述代码覆盖率数据字典。
6.根据权利要求5所述的方法,其特征在于,所述获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据,包括:
根据所述目标程序的标识、所述目标程序的版本信息,从所述代码覆盖率数据字典中获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据。
7.根据权利要求5所述的方法,其特征在于,所述方法还包括:
根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,生成所述第一版本的目标程序对应的第三覆盖率数据,其中,所述第三覆盖率数据包括所述第一可执行代码,以及根据所述第一执行状态信息和所述第二执行状态信息确定的所述第一可执行代码对应的第三执行状态信息;
将所述第三覆盖率数据存储至所述代码覆盖率数据字典。
8.一种代码覆盖率的确定装置,其特征在于,所述装置包括:
第一获取模块,用于获取第一版本的目标程序对应的第一覆盖率数据,所述第一覆盖率数据包括所述第一版本的目标程序中包含的第一可执行代码,以及所述第一可执行代码对应的第一执行状态信息,所述第一执行状态信息用于表征所述第一可执行代码被执行情况;
第二获取模块,用于获取所述目标程序的所述第一版本之前的历史版本对应的第二覆盖率数据,其中,所述第二覆盖率数据包括所述历史版本的所述目标程序中包含的第二可执行代码,以及所述第二可执行代码对应的第二执行状态信息;
第一确定模块,用于基于所述第一可执行代码和所述第二可执行代码,从所述目标程序的历史版本中确定所述目标程序的第二版本,其中,所述第二版本是所述第二版本的所述第二可执行代码包含于所述第一可执行代码中,且是所述历史版本中包含于所述第一可执行代码中的所述第二可执行代码的代码量最多的版本,并且所述第一可执行代码中与所述第二版本的所述第二可执行代码相同的部分可执行代码的执行顺序排布与所述第二版本的所述第二可执行代码的执行顺序排布相同;
第二确定模块,用于根据所述第一执行状态信息以及所述第二版本的所述第二执行状态信息,确定所述第一版本的目标程序的代码覆盖率。
9.一种代码覆盖率的确定设备,其特征在于,包括:处理器,以及被安排成存储计算机可执行指令的存储器;所述计算机可执行指令在被执行时使所述处理器实现上述权利要求1至7中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010879493.6A CN112148590B (zh) | 2020-08-27 | 2020-08-27 | 一种代码覆盖率的确定方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010879493.6A CN112148590B (zh) | 2020-08-27 | 2020-08-27 | 一种代码覆盖率的确定方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112148590A true CN112148590A (zh) | 2020-12-29 |
CN112148590B CN112148590B (zh) | 2022-11-04 |
Family
ID=73887575
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010879493.6A Active CN112148590B (zh) | 2020-08-27 | 2020-08-27 | 一种代码覆盖率的确定方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112148590B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113326190A (zh) * | 2021-05-27 | 2021-08-31 | 北京百度网讯科技有限公司 | 代码覆盖率的确定方法、装置和电子设备 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130091490A1 (en) * | 2011-10-06 | 2013-04-11 | Saggi Yehuda Mizrahi | Method to automatically discover whether new code is covered by tests |
US20150254172A1 (en) * | 2014-03-05 | 2015-09-10 | Concurix Corporation | Security Alerting Using N-Gram Analysis of Program Execution Data |
US9442830B1 (en) * | 2014-06-25 | 2016-09-13 | Emc Corporation | Automated test coverage analysis, execution and reporting |
CN106547698A (zh) * | 2016-11-30 | 2017-03-29 | 网易(杭州)网络有限公司 | 覆盖率数据的处理方法、装置和服务器 |
CN108519945A (zh) * | 2018-03-21 | 2018-09-11 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法、装置及存储设备 |
CN111026647A (zh) * | 2019-11-21 | 2020-04-17 | 广州品唯软件有限公司 | 代码覆盖率的获取方法、装置、计算机设备和存储介质 |
CN111124894A (zh) * | 2019-12-06 | 2020-05-08 | 广州品唯软件有限公司 | 代码覆盖率的处理方法、装置和计算机设备 |
US10678678B1 (en) * | 2018-03-12 | 2020-06-09 | Amazon Technologies, Inc. | Ordered test execution based on test coverage |
CN111444087A (zh) * | 2020-03-03 | 2020-07-24 | 北京齐尔布莱特科技有限公司 | 一种覆盖率数据处理方法、装置、计算设备及可读存储介质 |
-
2020
- 2020-08-27 CN CN202010879493.6A patent/CN112148590B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130091490A1 (en) * | 2011-10-06 | 2013-04-11 | Saggi Yehuda Mizrahi | Method to automatically discover whether new code is covered by tests |
US20150254172A1 (en) * | 2014-03-05 | 2015-09-10 | Concurix Corporation | Security Alerting Using N-Gram Analysis of Program Execution Data |
US9442830B1 (en) * | 2014-06-25 | 2016-09-13 | Emc Corporation | Automated test coverage analysis, execution and reporting |
CN106547698A (zh) * | 2016-11-30 | 2017-03-29 | 网易(杭州)网络有限公司 | 覆盖率数据的处理方法、装置和服务器 |
US10678678B1 (en) * | 2018-03-12 | 2020-06-09 | Amazon Technologies, Inc. | Ordered test execution based on test coverage |
CN108519945A (zh) * | 2018-03-21 | 2018-09-11 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法、装置及存储设备 |
CN111026647A (zh) * | 2019-11-21 | 2020-04-17 | 广州品唯软件有限公司 | 代码覆盖率的获取方法、装置、计算机设备和存储介质 |
CN111124894A (zh) * | 2019-12-06 | 2020-05-08 | 广州品唯软件有限公司 | 代码覆盖率的处理方法、装置和计算机设备 |
CN111444087A (zh) * | 2020-03-03 | 2020-07-24 | 北京齐尔布莱特科技有限公司 | 一种覆盖率数据处理方法、装置、计算设备及可读存储介质 |
Non-Patent Citations (3)
Title |
---|
姜文等: "基于持续集成的C/C++软件覆盖率测试", 《计算机技术与发展》 * |
朴希望: "嵌入式软件的云平台覆盖测试", 《软件产业与工程》 * |
林广栋等: "BWDSP软件代码覆盖率统计工具实现方案", 《电脑知识与技术》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113326190A (zh) * | 2021-05-27 | 2021-08-31 | 北京百度网讯科技有限公司 | 代码覆盖率的确定方法、装置和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112148590B (zh) | 2022-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10678673B2 (en) | Software program fault localization | |
US20150026664A1 (en) | Method and system for automated test case selection | |
CN109542789B (zh) | 一种代码覆盖率统计方法及装置 | |
US8719799B2 (en) | Measuring coupling between coverage tasks and use thereof | |
CN114546738B (zh) | 服务器通用测试方法、系统、终端及存储介质 | |
US20130179867A1 (en) | Program Code Analysis System | |
CN108959086B (zh) | 程序包测试部署方法、装置、系统、电子设备及存储介质 | |
CN111026080A (zh) | 控制器的硬件在环测试方法及装置 | |
Kanashiro et al. | Predicting software flaws with low complexity models based on static analysis data | |
CN112148590B (zh) | 一种代码覆盖率的确定方法、装置及设备 | |
CN109388568B (zh) | 代码测试方法和装置 | |
CN111240987A (zh) | 移植程序检测方法、装置、电子设备及计算机可读存储介质 | |
CN113806231B (zh) | 一种代码覆盖率分析方法、装置、设备和介质 | |
CN110716859A (zh) | 自动为修改的代码推送测试用例的方法及相关装置 | |
CN114490413A (zh) | 测试数据的准备方法及装置、存储介质和电子设备 | |
CN113127367B (zh) | Android动态权限申请的缺陷检测方法 | |
CN115757138A (zh) | 脚本异常原因的确定方法、装置、存储介质以及电子设备 | |
CN115080426A (zh) | 程序文件的检测方法及装置、存储介质和电子设备 | |
CN110471829B (zh) | 软件代码测试覆盖率的检查方法及装置 | |
CN111400245B (zh) | 美术资源迁移方法及装置 | |
CN114238130A (zh) | 性能测试方法、装置、设备及存储介质 | |
CN111078574A (zh) | 生成影响分析报告的方法及装置 | |
CN107291613B (zh) | 一种功能节点异常模拟方法及装置 | |
CN110688430A (zh) | 一种获得数据旁路的方法、装置及电子设备 | |
CN116661758B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |