CN111008138B - 代码覆盖率的处理方法、装置和计算机设备 - Google Patents
代码覆盖率的处理方法、装置和计算机设备 Download PDFInfo
- Publication number
- CN111008138B CN111008138B CN201911242863.9A CN201911242863A CN111008138B CN 111008138 B CN111008138 B CN 111008138B CN 201911242863 A CN201911242863 A CN 201911242863A CN 111008138 B CN111008138 B CN 111008138B
- Authority
- CN
- China
- Prior art keywords
- code
- file
- coverage rate
- rate data
- data
- 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.)
- Active
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/3692—Test management for test results 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
技术领域
本申请涉及软件测试技术领域,特别是涉及一种代码覆盖率的处理方法、装置、计算机设备和存储介质。
背景技术
在软件测试中,通常需要对软件测试过程进行代码覆盖率的统计。代码覆盖率表征了代码在测试中能够被覆盖的程度。一般地,软件测试员通过代码覆盖率的高低决定是否需要重复执行软件测试。
当下的软件测试中,一个应用程序的发布版本由N个可测的小版本组成。也即是,针对每个对外发布的版本,开发人员会向服务器提交多次小版本的软件开发包。但每个提交的小版本,由于其软件测试后编译产物的标识码不同,各小版本间测试过程得到的代码覆盖率数据并不能直接合并。如果各小版本间的覆盖率数据不能合并,直接参考当前小版本的代码覆盖率数据容易造成重复测试。例如,当前小版本和上一小版本均包含某一代码,某一代码在上一版本已测试覆盖而在当前小版本中未测试覆盖,此时参照当前小版本的代码覆盖率数据需要对该代码重新测试,因此造成了该代码的重复测试。
发明内容
基于此,有必要针对上述技术问题,提供一种能够对多个版本的应用程序的代码覆盖率数据进行适量合并减少代码重复测试的代码覆盖率的处理方法、装置、计算机设备和存储介质。
一种代码覆盖率的处理方法,该方法包括:获取测试应用程序的第二版本的第二源代码时编译得到的第二类文件以及测试应用程序的第一版本的第一源代码时编译得到的第一类文件,获取第二类文件中相对于第一类文件存在区别的差异方法;根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,第二子代码覆盖率数据为第二代码覆盖率数据文件中差异方法对应的代码覆盖率数据,第三子代码覆盖率数据为第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的代码覆盖率数据;根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除差异方法映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据;将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。
在其中一个实施例中,代码覆盖率的处理方法还包括:获取应用程序的第二版本的第二源代码相对于应用程序的第一版本的第一源代码的代码差异信息;获取第二类文件中相对于第一类文件存在区别的差异方法,包括:根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异方法。
在其中一个实施例中,根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异方法,包括:根据代码差异信息获取第二类文件中相对于第一类文件存在区别的差异方法名和/或差异行代码标号;若存在差异方法名,根据差异方法名确定差异方法;若存在差异行代码标号,获取差异行代码标号对应的方法名,根据对应的方法名确定差异方法;若存在差异方法名和差异行代码标号,根据差异行代码标号确定出目标方法名,若目标方法名与差异方法名匹配则根据差异方法名确定差异方法,若目标方法名与差异方法名不匹配则根据目标方法名确定第一目标方法以及根据差异方法名确定第二目标方法,差异方法包括第一目标方法和第二目标方法。
在其中一个实施例中,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件,包括:根据第四子代码覆盖率数据确定第二类文件中已被测试覆盖的第一方法和未被测试覆盖的第二方法;若根据第二子代码覆盖率数据确定差异方法已被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取应用程序的第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计应用程序的第二版本对应的方法的代码覆盖率,根据方法的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件;若根据第二子代码覆盖率数据确定差异方法未被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取应用程序的第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计应用程序的第二版本对应的方法的代码覆盖率,根据方法的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件。
在其中一个实施例中,代码覆盖率的处理方法还包括:根据第二类文件获取应用程序的第二版本的代码源文件;根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告。
在其中一个实施例中,根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告,包括:根据第二子代码覆盖率数据和第四子代码覆盖率数据标记出代码源文件中已测试覆盖的代码和未测试覆盖的代码;根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
在其中一个实施例中,根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告,包括:根据代码差异信息标记出代码源文件中的差异代码;根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
一种代码覆盖率的处理装置,该装置包括:第一获取模块,用于获取测试应用程序的第二版本的第二源代码时编译得到的第二类文件以及测试应用程序的第一版本的第一源代码时编译得到的第一类文件,获取第二类文件中相对于第一类文件存在区别的差异方法;第二获取模块,用于根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,第二子代码覆盖率数据为第二代码覆盖率数据文件中差异方法对应的代码覆盖率数据,第三子代码覆盖率数据为第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的代码覆盖率数据;第三获取模块,用于根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除差异方法映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据;生成模块,用于将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一实施例方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述任一实施例方法的步骤。
上述代码覆盖率的处理方法、装置、计算机设备和存储介质,服务器获取应用程序的第二版本的第二类文件中相对于应用程序的第一版本的第一类文件存在区别的差异方法,另外根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并从第二代码覆盖率数据文件中获取差异方法对应的第二子代码覆盖率数据,从而可以确定出应用程序第二版本相对于第一版本改动的方法的代码覆盖率数据情况,即差异方法的代码覆盖率数据情况。同时,服务器根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除差异方法映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据,将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,从而实现了非差异方法之外的代码覆盖率数据的合并。最终,根据合并处理后得到的第四子代码覆盖率数据和差异方法对应的第二子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。因此,服务器能够根据应用程序两个版本编译产物中的类文件分别获取两个版本的代码覆盖率数据进行相应数据合并,同时根据合并后得到的数据与不同版本差异方法对应的代码覆盖率数据生成第二版本的第三代码覆盖率数据文件,与直接测试应用程序的第二版本的源代码得到的第二代码覆盖率数据文件相比,第三代码覆盖率数据文件的准确性更高,根据第三代码覆盖率数据文件进行应用程序的测试,可以减少代码重复测试。
附图说明
图1为一个实施例中一种代码覆盖率的处理方法的应用环境图;
图2为一个实施例中一种代码覆盖率的处理方法的流程示意图;
图3为一个实施例中一种代码覆盖率的处理装置的结构框图;
图4为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的一种代码覆盖率的处理方法,应用于如图1所示的应用环境中。其中,终端16通过网络连接向服务器12上传应用程序的各个版本的开发包,开发包中包含有应用程序的源代码。其中,终端16上传的各个版本的开发包中包含有同一版本的多个小版本的开发包。服务器12接收到终端16上传的应用程序的开发包之后,将开发包存储到数据库14中。终端18通过网络连接向服务器12请求获取应用程序的开发包,以对开发包进行软件测试。同时,终端18执行完软件测试后,将测试应用程序得到的测试产物发送回服务器12。测试产物包括每次测试得到的编译产物,如class文件等。服务器12将终端18提交的测试产物存储到数据库14中。服务器12在执行本申请的一种代码覆盖率的处理方法时,从数据库14中获取测试应用程序的第二版本的第二源代码时编译得到的第二类文件以及测试应用程序的第一版本的第一源代码时编译得到的第一类文件,获取第二类文件中相对于第一类文件存在区别的差异方法。进一步地,根据第二类文件从数据库14中获取测试第二源代码时生成的第二代码覆盖率数据文件,并从第二代码覆盖率数据文件中获取差异方法对应的第二子代码覆盖率数据以及第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的第三子代码覆盖率数据,以及根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除差异方法映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据。最终,将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。其中,终端16和终端18均可以是笔记本电脑、台式电脑等计算机设备。服务器12还可以是由多个服务器构成的服务器集群实现。
本申请提供一种代码覆盖率的处理方法,以该方法应用于图1所示的服务器12为例。如图2所示,该代码覆盖率的处理方法包括以下步骤:
S102,获取测试应用程序的第二版本的第二源代码时编译得到的第二类文件以及测试应用程序的第一版本的第一源代码时编译得到的第一类文件,获取第二类文件中相对于第一类文件存在区别的差异方法。
在本实施例中,测试终端对应用程序的第二版本的第二源代码进行测试时,将测试过程中编译后得到的第二类文件,即class文件,上传到服务器。同样地,测试终端对应用程序的第一版本的第一源代码进行测试时,将测试过程中编译后得到的第一类文件,即class文件,上传到服务器。两个测试终端可以是同一终端或不同终端。其中,应用程序的第二版本可以是作为提交的当前版本。应用程序的第一版本可以是之前提交的任一版本,如相对于当前版本而言的上一版本。服务器获取第二类文件中相对于第一类文件存在区别的差异方法。在具体实现过程中,服务器可以分别读取第二类文件中所有方法和第一类文件中所有方法。其中,每个源代码编译后得到的类文件包括多个方法。例如,多个方法中每个方法可以是main方法。将两者对应的方法进行一一对比,进而确定出第二类文件中相对于第一类文件存在区别的差异方法。例如,假设第二类文件中所有方法包括方法m、方法n和方法s,第一类文件中所有方法包括方法m、方法n、方法s和方法l。此时,第二类文件中相对于第一类文件存在区别的差异方法为方法l。
S104,根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,第二子代码覆盖率数据为第二代码覆盖率数据文件中差异方法对应的代码覆盖率数据,第三子代码覆盖率数据为第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的代码覆盖率数据。
在本实施例中,测试终端对第二源代码进行测试时,将测试过程中生成的第二代码覆盖率数据文件,即ec文件,上传到服务器。此时,在服务器中,第二源代码对应的ec文件与第二源代码对应的第二类文件,即class文件关联。通过class文件可以读取出对应的ec文件。服务器从第二代码覆盖率数据文件中获取差异方法对应的第二子代码覆盖率数据,以及获取第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的数据,将该除第二子代码覆盖率数据之外的数据作为第三子代码覆盖率数据。也即是,服务器将第二源代码对应的第二代码覆盖率数据文件划分为两部分数据,一部分数据是差异方法对应的第二子代码覆盖率数据,另外一部分数据是除了第二子代码覆盖率数据之外的数据。
S106,根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除差异方法映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据。
在本实施例中,测试终端对第一源代码进行测试时,将测试过程中生成的第一代码覆盖率数据文件,即ec文件,上传到服务器。此时,在服务器中,第一源代码对应的ec文件与第一源代码对应的第一类文件,即class文件关联。通过class文件可以读取出对应的ec文件。服务器从第一代码覆盖率数据文件中筛选除差异方法映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据。也即是,服务器将第一源代码对应的第一代码覆盖率数据文件划分为两部分数据。一部分数据是第一源代码对应的差异方法映射到第一代码覆盖率数据文件中的代码覆盖率数据。例如,差异方法是第二版本相对于第一版本增加的方法,那此处映射到第一代码覆盖率数据文件中的代码覆盖率数据为零。若差异方法是第二版本相对于第一版本修改的方法,那此处映射到第一代码覆盖率数据文件中的代码覆盖率数据为第一版本修改前的方法对应的代码覆盖率数据。另外一部分数据是除了映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的数据。
S108,将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。
在本实施例中,服务器将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据。也即是,服务器将第二版本和第一版本之间除了差异方法对应的代码覆盖率数据之外的其他数据进行合并处理。合并的方式可以是,同一代码在第一子代码覆盖率数据和第三子代码覆盖率数据对应的任一数据中显示为测试覆盖时,该代码在合并后的第四子代码覆盖率数据中显示为测试覆盖。同一代码在第一子代码覆盖率数据和第三子代码覆盖率数据对应的数据中两者数据均显示为未测试覆盖时,该代码在合并后的第四子代码覆盖率数据中显示为未测试覆盖。例如,除了差异方法之外,第一版本和第二版本中均包含方法a。方法a在第一子代码覆盖率数据和第三子代码覆盖率数据对应的数据中均显示为未测试覆盖,则方法a在合并后的第四子代码覆盖率数据中显示为未测试覆盖。方法a在第一子代码覆盖率数据和第三子代码覆盖率数据对应的数据中任一数据显示为已测试覆盖,可以是在第一子代码覆盖率数据的数据中显示为已测试覆盖或在第三子代码覆盖率数据的数据中显示为已测试覆盖,则方法a在合并后的第四子代码覆盖率数据中显示为已测试覆盖。因此,合并后得到的第四子代码覆盖率数据可以准确反映除差异方法对应的源代码的测试情况之外的其他源代码的测试情况,避免其他源代码的重复测试。
进一步地,服务器根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。也即是,服务器根据差异方法对应的第二子代码覆盖率数据以及将第二版本和第一版本之间除了差异方法对应的代码覆盖率数据之外的其他数据进行合并处理后的第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。因此,最终生成的第三代码覆盖率数据文件能够更加准确反映应用程序的第二版本中源代码的代码测试过程的覆盖率情况。
上述代码覆盖率的处理方法,服务器获取应用程序的第二版本的第二类文件中相对于应用程序的第一版本的第一类文件存在区别的差异方法,另外根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并从第二代码覆盖率数据文件中获取差异方法对应的第二子代码覆盖率数据,从而可以确定出应用程序第二版本相对于第一版本改动的方法的代码覆盖率数据情况,即差异方法的代码覆盖率数据情况。同时,服务器根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除差异方法映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据,将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,从而实现了非差异方法之外的代码覆盖率数据的合并。最终,根据合并处理后得到的第四子代码覆盖率数据和差异方法对应的第二子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。因此,服务器能够根据应用程序两个版本编译产物中的类文件分别获取两个版本的代码覆盖率数据进行相应数据合并,同时根据合并后得到的数据与不同版本差异方法对应的代码覆盖率数据生成第二版本的第三代码覆盖率数据文件,与直接测试应用程序的第二版本的源代码得到的第二代码覆盖率数据文件相比,第三代码覆盖率数据文件的准确性更高,根据第三代码覆盖率数据文件进行应用程序的测试,可以减少代码重复测试。
在一实施例中,步骤S102之前,还包括步骤:获取应用程序的第二版本的第二源代码相对于应用程序的第一版本的第一源代码的代码差异信息。步骤S102中,获取第二类文件中相对于第一类文件存在区别的差异方法,包括:根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异方法。
用于执行软件测试的测试终端每次向服务器提交测试产物时,均包含用于标识当次提交的测试产物的标识信息。用于开发应用程序的开发终端每次向服务器提交开发包时,均包含用于标识当次提交的开发包的标识信息。服务器根据测试终端以及开发终端提交的标识信息生成标识列表,用于记录各个终端的提交记录。在本实施例中,服务器根据标识列表中的标识信息获取应用程序的第二版本的第二源代码以及应用程序的第一版本的第一源代码。进一步地,服务器将获取第二版本的第二源代码相对于应用程序的第一版本的第一源代码的代码差异信息。其中,代码差异信息中可以包括第二源代码相对于第一源代码存在区别的代码。区别的代码可以是新增代码,在第一源代码的基础上修改的代码。根据区别的代码可以确定出第二类文件中相对于第一类文件存在区别的差异方法。
在一具体实现过程中,可以采用git diff命令获取第二源代码和第一源代码的diff日志(差异日志),从diff日志中确定出代码差异信息。具体地,服务器获取当前版本A相对于上个版本B的所有提交记录的标识号,生成标识列表。例如,测试终端向服务器提交当前版本A的多个小版本,每个小版本对应一个标识号。当前版本A的标识号包括a1、a2、a3、……、an等多个标识号,服务器获取上个版本B的最后一次提交的版本的标识号b以及当前版本A的多个标识号a1、a2、a3、……、an,生成标识列表。标识列表可以表示为commitids[b1、a1、a2、a3……an]。commitids标识列表名称。此时,服务器根据commitids中第二版本的标识号和第一版本的标识号,分别通过两者的标识号获取第二源代码和第一源代码。其中,每个提交的小版本对应的标识号可以用哈希值标识,以唯一标识出对应的版本。进一步地,采用git diff命令获取第二源代码和第一源代码的diff日志(差异日志),进而分析diff日志,生成可供脚本识别的diff(差异)标记文件,采用diff标记文件记录第一源代码和第二源代码之间的代码差异信息。此外,第一源代码和第二源代码可以是任意两个版本对应的源代码。在具体实现方式中,第一源代码和第二源代码为前后两个版本之间的源代码。diff标记文件可以记录前后两个版本之间的代码差异信息。
以下给出一举例,以说明上述代码覆盖率的处理方法在实际应用场景中的应用过程:
应用程序的第二版本为当前版本,应用程序的第一版本为上一版本。当前版本的源代码(第二源代码)中包括方法ma、方法mb和方法mc。上一版本的源代码(第一源代码)中包括方法ma、方法mb。也即是当前版本的源代码比上一版本的源代码新增了方法mc。在上一版本的源代码测试中已测试过方法ma和方法mb,此时方法ma和方法mb对应的代码覆盖率数据表示方法ma和方法mb均已测试覆盖。当前版本的源代码测试过程中方法ma未测试且方法mb已测试,此时方法ma对应的代码覆盖率数据表示方法ma未测试覆盖,方法mb对应的代码覆盖率数据表示方法mb已测试覆盖。但由于方法ma在上一版本中已测试覆盖,此时在合并方法ma和方法mb对应的代码覆盖率数据时得到的第四子代码覆盖率数据中表征方法ma已测试覆盖,从而避免研发人员再次对方法ma进行测试,提高了应用程序的代码覆盖率数据的准确性。也即是,合并处理了除新增了方法mc之外的方法的代码覆盖率数据。对于新增方法mc,由于上一版本中并未执行过对应的测试,此时以当前版本对应的代码覆盖率数据为准。因此,最终针对应用程序的当前版本生成的第三代码覆盖率数据文件与按照传统方式直接由测试应用程序的当前版本的源代码得到的第二代码覆盖率数据文件相比,提高了代码覆盖率数据的准确性。
在一个实施例中,根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异方法,包括:根据代码差异信息获取第二类文件中相对于第一类文件存在区别的差异方法名和/或差异行代码标号;若存在差异方法名,根据差异方法名确定差异方法;若存在差异行代码标号,获取差异行代码标号对应的方法名,根据对应的方法名确定差异方法;若存在差异方法名和差异行代码标号,根据差异行代码标号确定出目标方法名,若目标方法名与差异方法名匹配则根据差异方法名确定差异方法,若目标方法名与差异方法名不匹配则根据目标方法名确定第一目标方法以及根据差异方法名确定第二目标方法,差异方法包括第一目标方法和第二目标方法。
在该实施例中,服务器根据应用程序第二版本的第二源代码和应用程序第一版本的第一源代码得到的代码差异信息中,可以包含表征第二源代码相对于第一源代码中存在区别的差异方法名。例如,第二源代码新增了方法s,服务器获取到代码差异信息中包含方法s的方法名,此时根据方法s的方法名可以确定出第二类文件中相对于第一类文件存在区别的差异方法名,进而确定出第二类文件中的差异方法。代码差异信息中还可以包含表征第二源代码相对于第一源代码中存在区别的差异代码的差异行代码标号。例如,第二源代码修改了行代码k,服务器获取行代码k的差异行代码标号,进而根据差异行代码标号确定出第二类文件中相对于第一类文件存在区别的差异方法名,进而确定出第二类文件中的差异方法。若代码差异信息中存在差异方法名和差异行代码标号,根据差异行代码标号确定出目标方法名。此时,若目标方法名与差异方法名匹配,则根据差异方法名确定差异方法。也即是说,差异行代码标号属于差异方法名对应的方法内部的行代码的标号。差异行代码标号确定的方法为差异方法,此时直接选用差异方法名确定差异方法即可。若目标方法名与差异方法名不匹配,则根据目标方法名确定第一目标方法以及根据差异方法名确定第二目标方法,差异方法包括第一目标方法和第二目标方法。也即是说,差异行代码标号不属于差异方法名对应的方法内部的行代码的标号,此时差异方法包括根据目标方法名确定的方法以及根据差异方法名确定的方法。因此,可以快速通过多种方式快速获取到第二类文件中的差异方法。
在一个实施例中,步骤S108中,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件,包括:根据第四子代码覆盖率数据确定第二类文件中已被测试覆盖的第一方法和未被测试覆盖的第二方法;若根据第二子代码覆盖率数据确定差异方法已被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取应用程序的第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计应用程序的第二版本对应的方法的代码覆盖率,根据方法的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件;若根据第二子代码覆盖率数据确定差异方法未被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取应用程序的第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计应用程序的第二版本对应的方法的代码覆盖率,根据方法的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件。
在该实施例中,第二类文件中的差异方法对应的第二子代码覆盖率数据可以判断出差异方法已被测试覆盖,或第二类文件中的差异方法对应的第二子代码覆盖率数据可以判断出差异方法未被测试覆盖。第四子代码覆盖率数据可以判断出第二类文件中已被测试覆盖的第一方法和未被测试覆盖的第二方法。也即是说,不管根据第二类文件中的差异方法对应的第二子代码覆盖率数据判断出差异方法已被测试覆盖的情况或者是未被测试覆盖的情况,均可根据第二子代码覆盖率数据和根据第四子代码覆盖率数据可以确定出应用程序的第二版本中被测试过的方法和未被测试过的方法,从而根据应用程序的第二版本中已被测试覆盖的方法和未被测试覆盖的方法统计应用程序的第二版本对应的方法的代码覆盖率,进而根据该第二版本对应的方法的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件。因此,第三代码覆盖率数据文件能够真实反映出应用程序的第二版本在执行代码测试过程方法的代码覆盖率情况。
在一个实施例中,步骤S108之后,还包括:根据第二类文件获取应用程序的第二版本的代码源文件;根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告。
在该实施例中,应用程序的代码覆盖率数据文件依赖于类文件(class文件)。同时,应用程序的代码源文件也依赖于类文件。通过类文件可以关联对应的代码源文件。因此,服务器根据第二类文件获取应用程序的第二版本的代码源文件,并根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告。因此,可以通过代码覆盖率报告展示应用程序的第二版本对应的源代码的测试情况之外,还可以通过代码源文件对应展示其对应的研发人员编写的代码,提高代码覆盖率报告的可视性。
在一个实施例中,根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告,包括:根据第二子代码覆盖率数据和第四子代码覆盖率数据标记出代码源文件中已测试覆盖的代码和未测试覆盖的代码;根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
在该实施例中,服务器根据差异方法对应的第二子代码覆盖率数据标注出代码源文件中已测试覆盖的代码和/或未测试覆盖的代码,第四子代码覆盖率数据标记出代码源文件中已测试覆盖的代码和/或未测试覆盖的代码,最终生成的代码覆盖率报告中包含有标记后的代码信息,因此进一步提高代码覆盖率报告的可视性。
在一个实施例中,根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告,包括:根据代码差异信息标记出代码源文件中的差异代码;根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
在该实施例中,服务器根据差异信息标记出应用程序的第二版本的代码原文件中的差异代码,最终生成的代码覆盖率报告中包含有标记后的代码信息,因此进一步提高代码覆盖率报告的可视性。
应该理解的是,虽然流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,附图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
本申请还提供一种代码覆盖率的处理装置,如图3所示,该装置包括:
第一获取模块10,用于获取测试应用程序的第二版本的第二源代码时编译得到的第二类文件以及测试应用程序的第一版本的第一源代码时编译得到的第一类文件,获取第二类文件中相对于第一类文件存在区别的差异方法。
第二获取模块20,用于根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,第二子代码覆盖率数据为第二代码覆盖率数据文件中差异方法对应的代码覆盖率数据,第三子代码覆盖率数据为第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的代码覆盖率数据。
第三获取模块30,用于根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除差异方法映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据。
生成模块40,用于将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。
在其中一个实施例中,该代码覆盖率的处理装置还包括(图3未示):
第四获取模块,用于获取应用程序的第二版本的第二源代码相对于应用程序的第一版本的第一源代码的代码差异信息;
第一获取模块包括第一获取单元,用于根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异方法。
在其中一个实施例中,第一获取单元包括(图3未示):
第一获取子单元,用于根据代码差异信息获取第二类文件中相对于第一类文件存在区别的差异方法名或差异行代码标号;
第一确定子单元,用于若存在差异方法名,根据差异方法名确定差异方法;
第二确定子单元,用于若存在差异行代码标号,获取差异行代码标号对应的方法名,根据对应的方法名确定差异方法;
第三确定子单元,用于若存在差异方法名和差异行代码标号,根据差异行代码标号确定出目标方法名,若目标方法名与差异方法名匹配则根据差异方法名确定差异方法,若目标方法名与差异方法名不匹配则根据目标方法名确定第一目标方法以及根据差异方法名确定第二目标方法,差异方法包括第一目标方法和第二目标方法。
在其中一个实施例中,生成模块包括(图3未示):
第一确定单元,用于根据所述第四子代码覆盖率数据确定所述第二类文件中已被测试覆盖的第一方法和未被测试覆盖的第二方法;
第一生成单元,用于若根据第二子代码覆盖率数据确定差异方法已被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取应用程序的第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计应用程序的第二版本对应的方法的代码覆盖率,根据方法的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件;
第二生成单元,用于若根据第二子代码覆盖率数据确定差异方法未被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取应用程序的第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计所应用程序的第二版本对应的方法的代码覆盖率,根据方法的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件。
在其中一个实施例中,该代码覆盖率的处理装置还包括(图3未示):
第五获取模块,用于根据第二类文件获取应用程序的第二版本的代码源文件;
第一报告生成模块,用于根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告。
在其中一个实施例中,第一报告生成模块(图3未示)包括:
第一标记单元,用于根据第二子代码覆盖率数据和第四子代码覆盖率数据标记出代码源文件中已测试覆盖的代码和未测试覆盖的代码;
第一报告生成单元,用于根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
在其中一个实施例中,第一报告生成模块(图3未示)包括:
第二标记单元,用于根据代码差异信息标记出代码源文件中的差异代码;
第二报告生成单元,用于根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
关于代码覆盖率的处理装置的具体限定可以参见上文中对于代码覆盖率的处理方法的限定,在此不再赘述。上述代码覆盖率的处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以为服务器,其内部结构图可以如图4所示。该计算机设备包括通过***总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***、计算机程序和数据库。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端连接,以与外部终端进行数据交互。该计算机程序被处理器执行时以实现上述任一实施例中一种代码覆盖率的处理方法。
本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
获取测试应用程序的第二版本的第二源代码时编译得到的第二类文件以及测试应用程序的第一版本的第一源代码时编译得到的第一类文件,获取第二类文件中相对于第一类文件存在区别的差异方法;根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,第二子代码覆盖率数据为第二代码覆盖率数据文件中差异方法对应的代码覆盖率数据,第三子代码覆盖率数据为第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的代码覆盖率数据;根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除差异方法映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据;将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。
在其中一个实施例中,处理器执行计算机程序时实现以下步骤:获取应用程序的第二版本的第二源代码相对于应用程序的第一版本的第一源代码的代码差异信息;处理器执行计算机程序实现上述的获取第二类文件中相对于第一类文件存在区别的差异方法步骤时,具体实现以下步骤:根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异方法。
在其中一个实施例中,处理器执行计算机程序实现上述的根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异方法步骤时,具体实现以下步骤:根据代码差异信息获取第二类文件中相对于第一类文件存在区别的差异方法名和/或差异行代码标号;若存在差异方法名,根据差异方法名确定差异方法;若存在差异行代码标号,获取差异行代码标号对应的方法名,根据对应的方法名确定差异方法;若存在差异方法名和差异行代码标号,根据差异行代码标号确定出目标方法名,若目标方法名与差异方法名匹配则根据差异方法名确定差异方法,若目标方法名与差异方法名不匹配则根据目标方法名确定第一目标方法以及根据差异方法名确定第二目标方法,差异方法包括第一目标方法和第二目标方法。
在其中一个实施例中,处理器执行计算机程序实现上述的根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件步骤时,具体实现以下步骤:根据第四子代码覆盖率数据确定第二类文件中已被测试覆盖的第一方法和未被测试覆盖的第二方法;若根据第二子代码覆盖率数据确定差异方法已被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取应用程序的第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计应用程序的第二版本对应的方法的代码覆盖率,根据方法的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件;若根据第二子代码覆盖率数据确定差异方法未被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取应用程序的第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计应用程序的第二版本对应的方法的代码覆盖率,根据方法的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件。
在其中一个实施例中,处理器执行计算机程序时实现以下步骤:根据第二类文件获取应用程序的第二版本的代码源文件;根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告。
在其中一个实施例中,处理器执行计算机程序实现上述的根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告步骤时,具体实现以下步骤:根据第二子代码覆盖率数据和第四子代码覆盖率数据标记出代码源文件中已测试覆盖的代码和未测试覆盖的代码;根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
在其中一个实施例中,处理器执行计算机程序实现上述的根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告步骤时,具体实现以下步骤:根据代码差异信息标记出代码源文件中的差异代码;根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取测试应用程序的第二版本的第二源代码时编译得到的第二类文件以及测试应用程序的第一版本的第一源代码时编译得到的第一类文件,获取第二类文件中相对于第一类文件存在区别的差异方法;根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,第二子代码覆盖率数据为第二代码覆盖率数据文件中差异方法对应的代码覆盖率数据,第三子代码覆盖率数据为第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的代码覆盖率数据;根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除差异方法映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据;将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。
在其中一个实施例中,计算机程序被处理器执行时实现以下步骤:获取应用程序的第二版本的第二源代码相对于应用程序的第一版本的第一源代码的代码差异信息;计算机程序被处理器执行实现上述的获取第二类文件中相对于第一类文件存在区别的差异方法步骤时,具体实现以下步骤:根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异方法。
在其中一个实施例中,计算机程序被处理器执行实现上述的根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异方法步骤时,具体实现以下步骤:根据代码差异信息获取第二类文件中相对于第一类文件存在区别的差异方法名和/或差异行代码标号;若存在差异方法名,根据差异方法名确定差异方法;若存在差异行代码标号,获取差异行代码标号对应的方法名,根据对应的方法名确定差异方法;若存在差异方法名和差异行代码标号,根据差异行代码标号确定出目标方法名,若目标方法名与差异方法名匹配则根据差异方法名确定差异方法,若目标方法名与差异方法名不匹配则根据目标方法名确定第一目标方法以及根据差异方法名确定第二目标方法,差异方法包括第一目标方法和第二目标方法。
在其中一个实施例中,计算机程序被处理器执行实现上述的根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件步骤时,具体实现以下步骤:
根据第四子代码覆盖率数据确定第二类文件中已被测试覆盖的第一方法和未被测试覆盖的第二方法;若根据第二子代码覆盖率数据确定差异方法已被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取应用程序的第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计应用程序的第二版本对应的方法的代码覆盖率,根据方法的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件;若根据第二子代码覆盖率数据确定差异方法未被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取应用程序的第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计应用程序的第二版本对应的方法的代码覆盖率,根据方法的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件。
在其中一个实施例中,计算机程序被处理器执行时实现以下步骤:根据第二类文件获取应用程序的第二版本的代码源文件;根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告。
在其中一个实施例中,计算机程序被处理器执行实现上述的根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告步骤时,具体实现以下步骤:根据第二子代码覆盖率数据和第四子代码覆盖率数据标记出代码源文件中已测试覆盖的代码和未测试覆盖的代码;根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
在其中一个实施例中,计算机程序被处理器执行实现上述的根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告步骤时,具体实现以下步骤:根据代码差异信息标记出代码源文件中的差异代码;根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种代码覆盖率的处理方法,所述方法包括:
获取测试应用程序的第二版本的第二源代码时编译得到的第二类文件以及测试所述应用程序的第一版本的第一源代码时编译得到的第一类文件,获取所述第二类文件中相对于所述第一类文件存在区别的差异方法;
根据所述第二类文件获取测试所述第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,所述第二子代码覆盖率数据为所述第二代码覆盖率数据文件中所述差异方法对应的代码覆盖率数据,所述第三子代码覆盖率数据为所述第二代码覆盖率数据文件中除所述第二子代码覆盖率数据之外的代码覆盖率数据;
根据所述第一类文件获取测试所述第一源代码时生成的第一代码覆盖率数据文件,从所述第一代码覆盖率数据文件中筛选出除所述差异方法映射在所述第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据;
将所述第一子代码覆盖率数据与所述第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据所述第二子代码覆盖率数据和所述第四子代码覆盖率数据生成所述应用程序的第二版本的第三代码覆盖率数据文件。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:获取所述应用程序的第二版本的第二源代码相对于所述应用程序的第一版本的第一源代码的代码差异信息;
所述获取所述第二类文件中相对于所述第一类文件存在区别的差异方法,包括:根据所述代码差异信息确定所述第二类文件中相对于所述第一类文件存在区别的差异方法。
3.根据权利要求2所述的方法,其特征在于,所述根据所述代码差异信息确定所述第二类文件中相对于所述第一类文件存在区别的差异方法,包括:
根据所述代码差异信息获取所述第二类文件中相对于所述第一类文件存在区别的差异方法名和/或差异行代码标号;
若存在所述差异方法名,根据所述差异方法名确定所述差异方法;
若存在所述差异行代码标号,获取所述差异行代码标号对应的方法名,根据所述对应的方法名确定所述差异方法;
若存在所述差异方法名和所述差异行代码标号,根据所述差异行代码标号确定出目标方法名,若所述目标方法名与所述差异方法名匹配则根据所述差异方法名确定所述差异方法,若所述目标方法名与所述差异方法名不匹配则根据目标方法名确定第一目标方法以及根据差异方法名确定第二目标方法,所述差异方法包括所述第一目标方法和所述第二目标方法。
4.根据权利要求1所述的方法,其特征在于,所述根据所述第二子代码覆盖率数据和所述第四子代码覆盖率数据生成所述应用程序的第二版本的第三代码覆盖率数据文件,包括:
根据所述第四子代码覆盖率数据确定所述第二类文件中已被测试覆盖的第一方法和未被测试覆盖的第二方法;
若根据所述第二子代码覆盖率数据确定所述差异方法已被测试覆盖时,根据所述第二子代码覆盖率数据的确定结果以及所述第四子代码覆盖率数据的确定结果获取所述第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计所述应用程序的第二版本对应的方法的代码覆盖率,根据所述方法的代码覆盖率生成所述应用程序的第二版本的第三代码覆盖率数据文件;
若根据所述第二子代码覆盖率数据确定所述差异方法未被测试覆盖时,根据所述第二子代码覆盖率数据的确定结果以及所述第四子代码覆盖率数据的确定结果获取所述第二版本中已被测试覆盖的方法和未被测试覆盖的方法,根据已被测试覆盖的方法和未被测试覆盖的方法统计所述应用程序的第二版本对应的方法的代码覆盖率,根据所述方法的代码覆盖率生成所述应用程序的第二版本的第三代码覆盖率数据文件。
5.根据权利要求2所述的方法,其特征在于,所述方法还包括:
根据所述第二类文件获取所述应用程序的第二版本的代码源文件;
根据所述第三代码覆盖率数据文件以及所述代码源文件生成所述应用程序的第二版本的代码覆盖率报告。
6.根据权利要求5所述的方法,其特征在于,所述根据所述第三代码覆盖率数据文件以及所述代码源文件生成所述应用程序的第二版本的代码覆盖率报告,包括:
根据所述第二子代码覆盖率数据和所述第四子代码覆盖率数据标记出所述代码源文件中已测试覆盖的代码和未测试覆盖的代码;
根据标记后的代码源文件以及所述第三代码覆盖率数据文件生成所述应用程序的第二版本的代码覆盖率报告。
7.根据权利要求5所述的方法,其特征在于,所述根据所述第三代码覆盖率数据文件以及所述代码源文件生成所述应用程序的第二版本的代码覆盖率报告,包括:
根据所述代码差异信息标记出所述代码源文件中的差异代码;
根据标记后的代码源文件以及所述第三代码覆盖率数据文件生成所述应用程序的第二版本的代码覆盖率报告。
8.一种代码覆盖率的处理装置,其特征在于,所述装置包括:
第一获取模块,用于获取测试应用程序的第二版本的第二源代码时编译得到的第二类文件以及测试所述应用程序的第一版本的第一源代码时编译得到的第一类文件,获取所述第二类文件中相对于所述第一类文件存在区别的差异方法;
第二获取模块,用于根据所述第二类文件获取测试所述第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,所述第二子代码覆盖率数据为所述第二代码覆盖率数据文件中所述差异方法对应的代码覆盖率数据,所述第三子代码覆盖率数据为所述第二代码覆盖率数据文件中除所述第二子代码覆盖率数据之外的代码覆盖率数据;
第三获取模块,用于根据所述第一类文件获取测试所述第一源代码时生成的第一代码覆盖率数据文件,从所述第一代码覆盖率数据文件中筛选出除所述差异方法映射在所述第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据;
生成模块,用于将所述第一子代码覆盖率数据与所述第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据所述第二子代码覆盖率数据和所述第四子代码覆盖率数据生成所述应用程序的第二版本的第三代码覆盖率数据文件。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911242863.9A CN111008138B (zh) | 2019-12-06 | 2019-12-06 | 代码覆盖率的处理方法、装置和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911242863.9A CN111008138B (zh) | 2019-12-06 | 2019-12-06 | 代码覆盖率的处理方法、装置和计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111008138A CN111008138A (zh) | 2020-04-14 |
CN111008138B true CN111008138B (zh) | 2023-03-17 |
Family
ID=70115534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911242863.9A Active CN111008138B (zh) | 2019-12-06 | 2019-12-06 | 代码覆盖率的处理方法、装置和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111008138B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105404585A (zh) * | 2015-12-01 | 2016-03-16 | 腾讯科技(深圳)有限公司 | 获取代码覆盖率的方法及装置 |
CN108519945A (zh) * | 2018-03-21 | 2018-09-11 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法、装置及存储设备 |
CN108829580A (zh) * | 2018-05-07 | 2018-11-16 | 百度在线网络技术(北京)有限公司 | 多版本测试数据处理方法、装置、设备及存储介质 |
CN109388566A (zh) * | 2018-09-27 | 2019-02-26 | 北京城市网邻信息技术有限公司 | 一种代码覆盖率分析方法、装置、设备及存储介质 |
US10402310B1 (en) * | 2018-03-30 | 2019-09-03 | Atlassian Pty Ltd | Systems and methods for reducing storage required for code coverage results |
-
2019
- 2019-12-06 CN CN201911242863.9A patent/CN111008138B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105404585A (zh) * | 2015-12-01 | 2016-03-16 | 腾讯科技(深圳)有限公司 | 获取代码覆盖率的方法及装置 |
CN108519945A (zh) * | 2018-03-21 | 2018-09-11 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法、装置及存储设备 |
US10402310B1 (en) * | 2018-03-30 | 2019-09-03 | Atlassian Pty Ltd | Systems and methods for reducing storage required for code coverage results |
CN108829580A (zh) * | 2018-05-07 | 2018-11-16 | 百度在线网络技术(北京)有限公司 | 多版本测试数据处理方法、装置、设备及存储介质 |
CN109388566A (zh) * | 2018-09-27 | 2019-02-26 | 北京城市网邻信息技术有限公司 | 一种代码覆盖率分析方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111008138A (zh) | 2020-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108073519B (zh) | 测试用例生成方法和装置 | |
CN108427613B (zh) | 异常接口定位方法、装置、计算机设备和存储介质 | |
US8397104B2 (en) | Creation of test plans | |
CN111124894B (zh) | 代码覆盖率的处理方法、装置和计算机设备 | |
CN110941555B (zh) | 测试用例推荐方法、装置、计算机设备和存储介质 | |
US10289536B2 (en) | Distinguishing public and private code in testing environments | |
CN108491321B (zh) | 测试用例范围确定方法、装置及存储介质 | |
CN109766261B (zh) | 覆盖测试方法、装置、计算机设备和存储介质 | |
CN111209206B (zh) | 一种软件产品的自动测试方法及*** | |
CN111026647B (zh) | 代码覆盖率的获取方法、装置、计算机设备和存储介质 | |
CN109324961B (zh) | ***自动测试方法、装置、计算机设备及存储介质 | |
CN111290950B (zh) | 程序测试中测试点获取方法、装置、存储介质和设备 | |
CN112363937A (zh) | 差异覆盖率测试方法、装置、计算机设备和存储介质 | |
CN111597069B (zh) | 程序处理方法、装置、电子设备和存储介质 | |
CN112153375A (zh) | 基于视频信息的前端性能测试方法、装置、设备及介质 | |
CN111078549B (zh) | 代码覆盖率的处理方法、装置和计算机设备 | |
CN111008138B (zh) | 代码覆盖率的处理方法、装置和计算机设备 | |
CN116610575A (zh) | 一种软件测试的方法、装置及电子设备 | |
CN112486824B (zh) | 用例代码生成方法、装置、计算机设备和存储介质 | |
CN113656318A (zh) | 软件版本测试方法、装置及计算机设备 | |
CN112631905A (zh) | 执行过程数据管理方法、装置、计算机设备及存储介质 | |
CN111090583A (zh) | 代码覆盖率报告的生成方法、装置和计算机设备 | |
CN112363870B (zh) | 应用程序开发处理方法、装置、计算机设备和存储介质 | |
CN112783759B (zh) | 白盒测试任务执行方法、装置、存储介质和计算机设备 | |
US20240232458A1 (en) | Method and system for analysing simulation data using signatures |
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 |