CN111124894B - 代码覆盖率的处理方法、装置和计算机设备 - Google Patents

代码覆盖率的处理方法、装置和计算机设备 Download PDF

Info

Publication number
CN111124894B
CN111124894B CN201911242850.1A CN201911242850A CN111124894B CN 111124894 B CN111124894 B CN 111124894B CN 201911242850 A CN201911242850 A CN 201911242850A CN 111124894 B CN111124894 B CN 111124894B
Authority
CN
China
Prior art keywords
code
difference
coverage rate
rate data
subcode
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
Application number
CN201911242850.1A
Other languages
English (en)
Other versions
CN111124894A (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.)
Guangzhou Pinwei Software Co Ltd
Original Assignee
Guangzhou Pinwei Software 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 Guangzhou Pinwei Software Co Ltd filed Critical Guangzhou Pinwei Software Co Ltd
Priority to CN201911242850.1A priority Critical patent/CN111124894B/zh
Publication of CN111124894A publication Critical patent/CN111124894A/zh
Application granted granted Critical
Publication of CN111124894B publication Critical patent/CN111124894B/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
    • 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/368Test management for test version control, e.g. updating test cases to a new software version
    • 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/3692Test 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)
  • Stored Programmes (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中获取应用程序的第二版本的第二源代码相对于应用程序的第一版本的第一源代码的代码差异信息,获取测试第二源代码时编译得到的第二类文件以及获取测试第一源代码时编译得到的第一类文件。服务器12根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,第二子代码覆盖率数据为第二代码覆盖率数据文件中代码差异信息对应的代码覆盖率数据,第三子代码覆盖率数据为第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的代码覆盖率数据;根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除代码差异信息映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据;将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。其中,终端16和终端18均可以是笔记本电脑、台式电脑等计算机设备。服务器12还可以是由多个服务器构成的服务器集群实现。
本申请提供一种代码覆盖率的处理方法,以该方法应用于图1所示的服务器12为例。如图2所示,该代码覆盖率的处理方法包括以下步骤:
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标记文件可以记录前后两个版本之间的代码差异信息。
S104,获取测试第二源代码时编译得到的第二类文件以及获取测试第一源代码时编译得到的第一类文件。
在本实施例中,测试终端对应用程序的第二版本的第二源代码进行测试时,将测试过程中编译后得到的第二类文件,即class文件,上传到服务器。同样地,测试终端对应用程序的第一版本的第一源代码进行测试时,将测试过程中编译后得到的第一类文件,即class文件,上传到服务器。两个测试终端可以是同一终端或不同终端。其中,应用程序的第二版本可以是作为提交的当前版本。应用程序的第一版本可以是之前提交的任一版本,如相对于当前版本而言的上一版本。
S106,根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,第二子代码覆盖率数据为第二代码覆盖率数据文件中代码差异信息对应的代码覆盖率数据,第三子代码覆盖率数据为第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的代码覆盖率数据。
在本实施例中,测试终端对第二源代码进行测试时,将测试过程中生成的第二代码覆盖率数据文件,即ec文件,上传到服务器。此时,在服务器中,第二源代码对应的ec文件与第二源代码对应的第二类文件,即class文件关联。通过class文件可以读取出对应的ec文件。服务器从第二代码覆盖率数据文件中获取代码差异信息对应的第二子代码覆盖率数据,以及获取第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的数据,将该除第二子代码覆盖率数据之外的数据作为第三子代码覆盖率数据。也即是,服务器将第二源代码对应的第二代码覆盖率数据文件划分为两部分数据,一部分数据是代码差异信息对应的第二子代码覆盖率数据,另外一部分数据是除了第二子代码覆盖率数据之外的数据。
S108,根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除代码差异信息映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据。
在本实施例中,测试终端对第一源代码进行测试时,将测试过程中生成的第一代码覆盖率数据文件,即ec文件,上传到服务器。此时,在服务器中,第一源代码对应的ec文件与第一源代码对应的第一类文件,即class文件关联。通过class文件可以读取出对应的ec文件。服务器从第一代码覆盖率数据文件中筛选除代码差异信息映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据。也即是,服务器将第一源代码对应的第一代码覆盖率数据文件划分为两部分数据。一部分数据是第一源代码对应的代码差异信息映射到第一代码覆盖率数据文件中的代码覆盖率数据。例如,代码差异信息是包含第二版本相对于第一版本增加的代码的信息,那此处映射到第一代码覆盖率数据文件中的代码覆盖率数据为零。若代码差异信息是包含第二版本相对于第一版本修改的代码的信息,那此处映射到第一代码覆盖率数据文件中的代码覆盖率数据为第一版本修改前的代码对应的代码覆盖率数据。另外一部分数据是除了映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的数据。
S110,将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。
在本实施例中,服务器将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据。也即是,服务器将第二版本和第一版本之间除了代码差异信息对应的代码覆盖率数据之外的其他数据进行合并处理。合并的方式可以是,同一代码在第一子代码覆盖率数据和第三子代码覆盖率数据对应的任一数据中显示为测试覆盖时,该代码在合并后的第四子代码覆盖率数据中显示为测试覆盖。同一代码在第一子代码覆盖率数据和第三子代码覆盖率数据对应的数据中两者数据均显示为未测试覆盖时,该代码在合并后的第四子代码覆盖率数据中显示为未测试覆盖。例如,除了代码差异信息对应的差异代码之外,第一版本和第二版本中均包含代码a。代码a在第一子代码覆盖率数据和第三子代码覆盖率数据对应的数据中均显示为未测试覆盖,则代码a在合并后的第四子代码覆盖率数据中显示为未测试覆盖。代码a在第一子代码覆盖率数据和第三子代码覆盖率数据对应的数据中任一数据显示为已测试覆盖,可以是在第一子代码覆盖率数据的数据中显示为已测试覆盖或在第三子代码覆盖率数据的数据中显示为已测试覆盖,则代码a在合并后的第四子代码覆盖率数据中显示为已测试覆盖。因此,合并后得到的第四子代码覆盖率数据可以准确反映除代码差异信息对应的源代码的测试情况之外的其他源代码的测试情况,避免其他源代码的重复测试。
进一步地,服务器根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。也即是,服务器根据代码差异信息对应的第二子代码覆盖率数据以及将第二版本和第一版本之间除了代码差异信息对应的代码覆盖率数据之外的其他数据进行合并处理后的第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。因此,最终生成的第三代码覆盖率数据文件能够更加准确反映应用程序的第二版本中源代码的代码测试过程的覆盖率情况。
上述代码覆盖率的处理方法,服务器获取应用程序的第二版本的第二源代码相对于应用程序的第一版本的第一源代码的代码差异信息,获取测试第二源代码时编译得到的第二类文件以及获取测试第一源代码时编译得到的第一类文件,进而根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并从第二代码覆盖率数据文件中获取代码差异信息对应的第二子代码覆盖率数据,从而可以确定出应用程序第二版本相对于第一版本改动的差异代码的代码覆盖率数据情况。同时,服务器根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除代码差异信息映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据,将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,从而实现了非差异代码之外的代码覆盖率数据的合并。最终,根据合并处理后得到的第四子代码覆盖率数据和差异代码对应的第二子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。因此,服务器能够根据应用程序两个版本编译产物中的类文件分别获取两个版本的代码覆盖率数据进行相应数据合并,同时根据合并后得到的数据与不同版本差异代码对应的代码覆盖率数据生成第二版本的第三代码覆盖率数据文件,与直接测试应用程序的第二版本的源代码得到的第二代码覆盖率数据文件相比,第三代码覆盖率数据文件的准确性更高,根据第三代码覆盖率数据文件进行应用程序的测试,可以减少代码重复测试。
在一个实施例中,步骤S102之后,还包括:根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异行代码。此时,第二子代码覆盖率数据为第二代码覆盖率数据文件中差异行代码对应的代码覆盖率数据。步骤S106中,从第一代码覆盖率数据文件中筛选出除代码差异信息映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据,包括:从第一代码覆盖率数据文件中筛选出除差异行代码映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据。
在该实施例中,代码差异信息中包括差异行代码信息。服务器根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异行代码。在具体实现过程中,服务器根据代码差异信息读取第二类文件中相对于第一类文件中存在的区别代码,根据两者间存在的区别代码获取第二类文件中相对于第一类文件存在区别的差异行代码。例如,假设第二类文件中所有代码包括代码m、代码n和代码s,第一类文件中所有代码包括代码m、代码n、代码s和代码l。此时,第二类文件中相对于第一类文件存在的区别代码为代码l。代码l所在的代码行即为差异行代码。
在一个实施例中,根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异行代码,包括:根据代码差异信息获取第二类文件中相对于第一类文件存在区别的差异方法名、差异代码分支名和/或差异代码的标号;若存在差异方法名,获取差异方法名的差异方法,获取差异方法中存在的差异行代码;若存在差异代码分支名,获取差异代码分支名的差异代码分支,获取差异代码分支中存在的差异行代码;若存在差异代码的标号,获取差异代码的标号对应的差异代码,根据差异代码获取差异行代码。
在该实施例中,服务器根据代码差异信息能够获取到第二类文件中相对于第一类文件存在区别的差异方法名、差异代码分支名以及差异代码的标号。差异方法名对应的差异方法中可以包含差异行代码,差异代码分支名的差异代码分支中也可以包含差异行代码。根据差异代码的标号确定的差异代码之后也可以得到差异行代码。因此,服务器根据差异方法名、差异代码分支名以及差异代码的标号三者中任一均可获得差异行代码,从而提高了获取差异行代码的效率。
在一实施例中,根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异行代码,还包括:若同时存在差异方法名和差异代码分支名,获取差异方法名的差异方法以及获取差异代码分支名的差异代码分支,根据差异方法获取第二类文件中相对于第一类文件存在区别的第一目标行代码,根据差异代码分支获取第二类文件中相对于第一类文件存在区别的第二目标行代码,当第一目标行代码和第二目标行代码匹配时将第一目标行代码或第二目标行代码作为差异行代码,当第一目标行代码和第二目标行代码不匹配时将第一目标行代码和第二目标行代码均作为差异行代码;若同时存在差异方法名和差异代码的标号,获取差异方法名的差异方法以及获取差异代码的标号对应的差异代码,根据差异方法获取第二类文件中相对于第一类文件存在区别的第三目标行代码,根据差异代码获取第二类文件中相对于第一类文件存在区别的第四目标行代码,当第三目标行代码和第四目标行代码匹配时将第三目标行代码或第四目标行代码作为差异行代码,当第三目标行代码和第四目标行代码不匹配时将第三目标行代码和第四目标行代码均作为差异行代码;若同时存在差异代码分支名和差异代码的标号,获取差异代码的标号的差异代码以及获取差异代码分支名的差异代码分支,根据差异代码获取第二类文件中相对于第一类文件存在区别的第五目标行代码,根据差异代码分支获取第二类文件中相对于第一类文件存在区别的第六目标行代码,当第五目标行代码和第六目标行代码匹配时将第五目标行代码或第六目标行代码作为差异行代码,当第五目标行代码和第六目标行代码不匹配时将第五目标行代码和第六目标行代码均作为差异行代码。
在一个实施例中,步骤S110中,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件,包括:根据第四子代码覆盖率数据确定第二类文件中已被测试覆盖的第一行代码和未被测试覆盖的第二行代码;若根据第二子代码覆盖率数据确定差异行代码已被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取第二版本中已被测试覆盖的行代码和未被测试覆盖的行代码,根据已被测试覆盖的行代码和未被测试覆盖的行代码统计应用程序的第二版本对应的行代码的代码覆盖率,根据行代码的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件;若根据第二子代码覆盖率数据确定差异行代码被测试覆盖时,根据第二子代码覆盖率数据的确定结果以及第四子代码覆盖率数据的确定结果获取第二版本中已被测试覆盖的行代码和未被测试覆盖的行代码,根据已被测试覆盖的行代码和未被测试覆盖的行代码统计应用程序的第二版本对应的行代码的代码覆盖率,根据行代码的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件。
在该实施例中,第二类文件中的差异行代码对应的第二子代码覆盖率数据可以判断出差异行代码已被测试覆盖,或第二类文件中的差异行代码对应的第二子代码覆盖率数据可以判断出差异行代码未被测试覆盖。第四子代码覆盖率数据可以判断出第二类文件中已被测试覆盖的第一行代码和未被测试覆盖的第二行代码。也即是说,不管根据第二类文件中的差异行代码对应的第二子代码覆盖率数据判断出差异行代码已被测试覆盖的情况或者是未被测试覆盖的情况,均可根据第二子代码覆盖率数据和根据第四子代码覆盖率数据可以确定出应用程序的第二版本中被测试过的行代码和未被测试过的行代码,从而根据应用程序的第二版本中已被测试覆盖的行代码和未被测试覆盖的行代码统计应用程序的第二版本对应的行代码的代码覆盖率,进而根据该第二版本对应的行代码的代码覆盖率生成应用程序的第二版本的第三代码覆盖率数据文件。因此,第三代码覆盖率数据文件能够真实反映出应用程序的第二版本在执行代码测试过程方法的代码覆盖率情况。
在一个实施例中,步骤S110之后,还包括:根据第二类文件获取应用程序的第二版本的代码源文件;根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告。
在该实施例中,应用程序的代码覆盖率数据文件依赖于类文件(class文件)。同时,应用程序的代码源文件也依赖于类文件。通过类文件可以关联对应的代码源文件。因此,服务器根据第二类文件获取应用程序的第二版本的代码源文件,并根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告。因此,可以通过代码覆盖率报告展示应用程序的第二版本对应的源代码的测试情况之外,还可以通过代码源文件对应展示其对应的研发人员编写的代码,提高代码覆盖率报告的可视性。
在一个实施例中,根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告,包括:根据第二子代码覆盖率数据和第四子代码覆盖率数据标记出代码源文件中已测试覆盖的代码和未测试覆盖的代码;根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
在该实施例中,服务器根据差异行代码对应的第二子代码覆盖率数据标注出代码源文件中已测试覆盖的代码和/或未测试覆盖的代码,第四子代码覆盖率数据标记出代码源文件中已测试覆盖的代码和/或未测试覆盖的代码,最终生成的代码覆盖率报告中包含有标记后的代码信息,因此进一步提高代码覆盖率报告的可视性。
在一个实施例中,根据第三代码覆盖率数据文件以及代码源文件生成应用程序的第二版本的代码覆盖率报告,包括:根据代码差异信息标记出代码源文件中的差异代码;根据标记后的代码源文件以及第三代码覆盖率数据文件生成应用程序的第二版本的代码覆盖率报告。
在该实施例中,服务器根据差异信息标记出应用程序的第二版本的代码原文件中的差异代码,最终生成的代码覆盖率报告中包含有标记后的代码信息,因此进一步提高代码覆盖率报告的可视性。
应该理解的是,虽然流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,附图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
本申请还提供一种代码覆盖率的处理装置,如图3所示,该装置包括:
第一获取模块10,用于获取应用程序的第二版本的第二源代码相对于应用程序的第一版本的第一源代码的代码差异信息;
第二获取模块20,用于获取测试第二源代码时编译得到的第二类文件以及获取测试第一源代码时编译得到的第一类文件;
第三获取模块30,用于根据第二类文件获取测试第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,第二子代码覆盖率数据为第二代码覆盖率数据文件中代码差异信息对应的代码覆盖率数据,第三子代码覆盖率数据为第二代码覆盖率数据文件中除第二子代码覆盖率数据之外的代码覆盖率数据;
第四获取模块40,用于根据第一类文件获取测试第一源代码时生成的第一代码覆盖率数据文件,从第一代码覆盖率数据文件中筛选出除代码差异信息映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据;
生成模块50,用于将第一子代码覆盖率数据与第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据第二子代码覆盖率数据和第四子代码覆盖率数据生成应用程序的第二版本的第三代码覆盖率数据文件。
在其中一个实施例中,该代码覆盖率的处理装置还包括(图3未示):
确定模块,用于根据代码差异信息确定第二类文件中相对于第一类文件存在区别的差异行代码;第二子代码覆盖率数据为第二代码覆盖率数据文件中差异行代码对应的代码覆盖率数据;
第四获取模块40包括第一获取单元,第一获取单元用于从第一代码覆盖率数据文件中筛选出除差异行代码映射在第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据。
在其中一个实施例中,确定模块包括(图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 (9)

1.一种代码覆盖率的处理方法,所述方法包括:
获取应用程序的第二版本的第二源代码相对于所述应用程序的第一版本的第一源代码的代码差异信息;
获取测试所述第二源代码时编译得到的第二类文件以及获取测试所述第一源代码时编译得到的第一类文件;
根据所述代码差异信息确定所述第二类文件中相对于所述第一类文件存在区别的差异行代码;
根据所述第二类文件获取测试所述第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,所述第二子代码覆盖率数据为所述第二代码覆盖率数据文件中所述差异行代码对应的代码覆盖率数据,所述第三子代码覆盖率数据为所述第二代码覆盖率数据文件中除所述第二子代码覆盖率数据之外的代码覆盖率数据;
根据所述第一类文件获取测试所述第一源代码时生成的第一代码覆盖率数据文件,从所述第一代码覆盖率数据文件中筛选出除所述差异行代码映射在所述第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据;
将所述第一子代码覆盖率数据与所述第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据所述第二子代码覆盖率数据和所述第四子代码覆盖率数据生成所述应用程序的第二版本的第三代码覆盖率数据文件。
2.根据权利要求1所述的方法,其特征在于,所述根据所述代码差异信息确定所述第二类文件中相对于所述第一类文件存在区别的差异行代码,包括:
根据所述代码差异信息获取所述第二类文件中相对于所述第一类文件存在区别的差异方法名、差异代码分支名和/或差异代码的标号;
若存在所述差异方法名,获取所述差异方法名的差异方法,获取所述差异方法中存在的所述差异行代码;
若存在所述差异代码分支名,获取所述差异代码分支名的差异代码分支,获取所述差异代码分支中存在的所述差异行代码;
若存在所述差异代码的标号,获取所述差异代码的标号对应的差异代码,根据所述差异代码获取所述差异行代码。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若同时存在所述差异方法名和所述差异代码分支名,获取所述差异方法名的差异方法以及获取所述差异代码分支名的差异代码分支,根据所述差异方法获取所述第二类文件中相对于所述第一类文件存在区别的第一目标行代码,根据所述差异代码分支获取所述第二类文件中相对于所述第一类文件存在区别的第二目标行代码,当所述第一目标行代码和所述第二目标行代码匹配时将所述第一目标行代码或所述第二目标行代码作为所述差异行代码,当所述第一目标行代码和所述第二目标行代码不匹配时将所述第一目标行代码和所述第二目标行代码均作为所述差异行代码;
若同时存在所述差异方法名和所述差异代码的标号,获取所述差异方法名的差异方法以及获取所述差异代码的标号对应的差异代码,根据所述差异方法获取所述第二类文件中相对于所述第一类文件存在区别的第三目标行代码,根据所述差异代码获取所述第二类文件中相对于所述第一类文件存在区别的第四目标行代码,当所述第三目标行代码和所述第四目标行代码匹配时将所述第三目标行代码或所述第四目标行代码作为所述差异行代码,当所述第三目标行代码和所述第四目标行代码不匹配时将所述第三目标行代码和所述第四目标行代码均作为所述差异行代码;
若同时存在所述差异代码分支名和所述差异代码的标号,获取所述差异代码的标号的差异代码以及获取所述差异代码分支名的差异代码分支,根据所述差异代码获取所述第二类文件中相对于所述第一类文件存在区别的第五目标行代码,根据所述差异代码分支获取所述第二类文件中相对于所述第一类文件存在区别的第六目标行代码,当所述第五目标行代码和所述第六目标行代码匹配时将所述第五目标行代码或所述第六目标行代码作为所述差异行代码,当所述第五目标行代码和所述第六目标行代码不匹配时将所述第五目标行代码和所述第六目标行代码均作为所述差异行代码。
4.根据权利要求1所述的方法,其特征在于,所述根据所述第二子代码覆盖率数据和所述第四子代码覆盖率数据生成所述应用程序的第二版本的第三代码覆盖率数据文件,包括:
根据所述第四子代码覆盖率数据确定所述第二类文件中已被测试覆盖的第一行代码和未被测试覆盖的第二行代码;
若根据所述第二子代码覆盖率数据确定所述差异行代码已被测试覆盖时,根据所述第二子代码覆盖率数据的确定结果以及所述第四子代码覆盖率数据的确定结果获取所述第二版本中已被测试覆盖的行代码和未被测试覆盖的行代码,根据已被测试覆盖的行代码和未被测试覆盖的行代码统计所述应用程序的第二版本对应的行代码的代码覆盖率,根据所述行代码的代码覆盖率生成所述应用程序的第二版本的第三代码覆盖率数据文件;
若根据所述第二子代码覆盖率数据确定所述差异行代码被测试覆盖时,根据所述第二子代码覆盖率数据的确定结果以及所述第四子代码覆盖率数据的确定结果获取所述第二版本中已被测试覆盖的行代码和未被测试覆盖的行代码,根据已被测试覆盖的行代码和未被测试覆盖的行代码统计所述应用程序的第二版本对应的行代码的代码覆盖率,根据所述行代码的代码覆盖率生成所述应用程序的第二版本的第三代码覆盖率数据文件。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据所述第二类文件获取所述应用程序的第二版本的代码源文件;
根据所述第三代码覆盖率数据文件以及所述代码源文件生成所述应用程序的第二版本的代码覆盖率报告。
6.根据权利要求5所述的方法,其特征在于,所述根据所述第三代码覆盖率数据文件以及所述代码源文件生成所述应用程序的第二版本的代码覆盖率报告,包括:
根据所述第二子代码覆盖率数据和所述第四子代码覆盖率数据标记出所述代码源文件中已测试覆盖的代码和未测试覆盖的代码,根据标记后的代码源文件以及所述第三代码覆盖率数据文件生成所述应用程序的第二版本的代码覆盖率报告;
和/或,
根据所述代码差异信息标记出所述代码源文件中的差异代码,根据标记后的代码源文件以及所述第三代码覆盖率数据文件生成所述应用程序的第二版本的代码覆盖率报告。
7.一种代码覆盖率的处理装置,其特征在于,所述装置包括:
第一获取模块,用于获取应用程序的第二版本的第二源代码相对于所述应用程序的第一版本的第一源代码的代码差异信息;
第二获取模块,用于获取测试所述第二源代码时编译得到的第二类文件以及获取测试所述第一源代码时编译得到的第一类文件,根据所述代码差异信息确定所述第二类文件中相对于所述第一类文件存在区别的差异行代码;
第三获取模块,用于根据所述第二类文件获取测试所述第二源代码时生成的第二代码覆盖率数据文件,并获取第二子代码覆盖率数据和第三子代码覆盖率数据,所述第二子代码覆盖率数据为所述第二代码覆盖率数据文件中所述差异行代码对应的代码覆盖率数据,所述第三子代码覆盖率数据为所述第二代码覆盖率数据文件中除所述第二子代码覆盖率数据之外的代码覆盖率数据;
第四获取模块,用于根据所述第一类文件获取测试所述第一源代码时生成的第一代码覆盖率数据文件,从所述第一代码覆盖率数据文件中筛选出除所述差异行代码映射在所述第一代码覆盖率数据文件中的代码覆盖率数据之外的第一子代码覆盖率数据;
生成模块,用于将所述第一子代码覆盖率数据与所述第三子代码覆盖率数据进行合并处理,得到合并后的第四子代码覆盖率数据,根据所述第二子代码覆盖率数据和所述第四子代码覆盖率数据生成所述应用程序的第二版本的第三代码覆盖率数据文件。
8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
CN201911242850.1A 2019-12-06 2019-12-06 代码覆盖率的处理方法、装置和计算机设备 Active CN111124894B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911242850.1A CN111124894B (zh) 2019-12-06 2019-12-06 代码覆盖率的处理方法、装置和计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911242850.1A CN111124894B (zh) 2019-12-06 2019-12-06 代码覆盖率的处理方法、装置和计算机设备

Publications (2)

Publication Number Publication Date
CN111124894A CN111124894A (zh) 2020-05-08
CN111124894B true CN111124894B (zh) 2023-04-28

Family

ID=70497789

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911242850.1A Active CN111124894B (zh) 2019-12-06 2019-12-06 代码覆盖率的处理方法、装置和计算机设备

Country Status (1)

Country Link
CN (1) CN111124894B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112148590B (zh) * 2020-08-27 2022-11-04 浙江大搜车融资租赁有限公司 一种代码覆盖率的确定方法、装置及设备
CN112463620A (zh) * 2020-12-03 2021-03-09 广州品唯软件有限公司 安卓软件集成测试中的覆盖率测试方法、装置
CN117349150A (zh) * 2023-09-22 2024-01-05 乾升利信息技术(上海)有限公司 一种覆盖率数据处理方法、装置、电子设备及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108829580A (zh) * 2018-05-07 2018-11-16 百度在线网络技术(北京)有限公司 多版本测试数据处理方法、装置、设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10289532B2 (en) * 2015-04-08 2019-05-14 Opshub, Inc. Method and system for providing delta code coverage information
CN105404585B (zh) * 2015-12-01 2018-09-04 腾讯科技(深圳)有限公司 获取代码覆盖率的方法及装置
CN108519945A (zh) * 2018-03-21 2018-09-11 腾讯科技(深圳)有限公司 覆盖率测试方法、装置及存储设备
CN110209568B (zh) * 2018-04-24 2022-07-01 腾讯科技(深圳)有限公司 覆盖率测试方法、装置及存储设备
CN109388566B (zh) * 2018-09-27 2022-07-29 北京城市网邻信息技术有限公司 一种代码覆盖率分析方法、装置、设备及存储介质

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108829580A (zh) * 2018-05-07 2018-11-16 百度在线网络技术(北京)有限公司 多版本测试数据处理方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN111124894A (zh) 2020-05-08

Similar Documents

Publication Publication Date Title
CN110399293B (zh) ***测试方法、装置、计算机设备和存储介质
CN111124894B (zh) 代码覆盖率的处理方法、装置和计算机设备
CN107665171B (zh) 自动回归测试方法及装置
US9317400B2 (en) Code coverage rate determination method and system
CN106874187B (zh) 代码覆盖率收集方法和装置
CN110221983B (zh) 测试方法、装置、计算机可读存储介质和计算机设备
CN109408375B (zh) 接口文档的生成方法和装置
CN108959059B (zh) 一种测试方法以及测试平台
CN108491321B (zh) 测试用例范围确定方法、装置及存储介质
CN108549606A (zh) 接口测试方法及装置
CN111026647B (zh) 代码覆盖率的获取方法、装置、计算机设备和存储介质
CN108459850B (zh) 生成测试脚本的方法、装置及***
CN109766261B (zh) 覆盖测试方法、装置、计算机设备和存储介质
CN112363937B (zh) 差异覆盖率测试方法、装置、计算机设备和存储介质
CN111597069B (zh) 程序处理方法、装置、电子设备和存储介质
CN111078549B (zh) 代码覆盖率的处理方法、装置和计算机设备
CN111008138B (zh) 代码覆盖率的处理方法、装置和计算机设备
CN112486824B (zh) 用例代码生成方法、装置、计算机设备和存储介质
CN115563008A (zh) 代码覆盖率检测***、方法、装置和存储介质
US20180225165A1 (en) Configurable system wide tests
CN115934503A (zh) 程序测试方法、装置、设备及存储介质
CN111090583B (zh) 代码覆盖率报告的生成方法、装置和计算机设备
CN113868137A (zh) 埋点数据的处理方法、装置、***和服务器
CN113656318A (zh) 软件版本测试方法、装置及计算机设备
CN112631905A (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