CN111026647A - 代码覆盖率的获取方法、装置、计算机设备和存储介质 - Google Patents

代码覆盖率的获取方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN111026647A
CN111026647A CN201911147747.9A CN201911147747A CN111026647A CN 111026647 A CN111026647 A CN 111026647A CN 201911147747 A CN201911147747 A CN 201911147747A CN 111026647 A CN111026647 A CN 111026647A
Authority
CN
China
Prior art keywords
code
target
tree
coverage rate
version
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201911147747.9A
Other languages
English (en)
Other versions
CN111026647B (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 CN201911147747.9A priority Critical patent/CN111026647B/zh
Publication of CN111026647A publication Critical patent/CN111026647A/zh
Application granted granted Critical
Publication of CN111026647B publication Critical patent/CN111026647B/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/3684Test management for test design, e.g. generating new test cases
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/70Reducing energy consumption in communication networks in wireless communication networks

Abstract

本申请涉及一种代码覆盖率的获取方法、装置、计算机设备和存储介质。该方法包括:获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况;获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识;从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件;根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。采用本方法能够提高差异覆盖率数据的统计效率。

Description

代码覆盖率的获取方法、装置、计算机设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种代码覆盖率的获取方法、装置、计算机设备和存储介质。
背景技术
目前,代码覆盖率反映测试用例对被测软件覆盖程度的重要指标,是用来度量测试完整性的一个参考值,通过代码覆盖率数据可以评估测试是否充分。在软件开发的过程中,通过客户端获取代码覆盖率数据是基于被监控项目的全部代码生成的,基于全部代码的覆盖率数据对开发人员的意义不是很大。通常,开发人员都是通过修改前和修改后这两个版本代码之间差异代码信息的覆盖情况,然而,目前获取修改前和修改后两个版本代码之间的覆盖情况都是通过收集两个版本的全量覆盖率数据,来分析得到两个版本的差异覆盖率数据,如果要分析N个版本的差异覆盖率数据,则需要N个版本,容易造成差异覆盖率数据的统计效率低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高差异覆盖率数据的统计效率的代码覆盖率的获取方法、装置、计算机设备和存储介质。
一种代码覆盖率的获取方法,该方法包括:
获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况;
获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识;
从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件;
根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。
在其中一个实施例中,版本差异覆盖率数据包括目标版本对应的第三代码文件中被修改代码的目标行数、目标行数占目标版本对应的版本代码中被修改代码的总行数的比例和被修改代码的包、类、方法及行信息。
在其中一个实施例中,根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据,包括:设置目标代码子树对应的默认初始值;根据默认初始值和代码全量覆盖率数据中的代码行号执行情况进行正交,得到正交结果;根据正交结果得到版本差异覆盖率数据。
在其中一个实施例中,代码覆盖率的获取方法还包括:获取gcov;根据预设改造条件改造gcov,得到目标gcov,目标gcov用于获取代码全量覆盖率数据树和目标代码树。
在其中一个实施例中,根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据之后,还包括:根据版本差异覆盖率数据生成测试报告和测试用例。
在其中一个实施例中,根据版本差异覆盖率数据生成测试报告,包括:根据版本差异覆盖率数据生成测试报告,并确定目标版本对应的第三代码文件被修改代码的目标行数、包、类、以及行信息;在测试报告中标注并显示第三代码文件中被修改代码的目标行数、包、类、以及行信息。
一种代码覆盖率的获取装置,该装置包括:
第一获取模块,用于获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况;
第二获取模块,用于获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识;
目标代码子树确定模块,用于从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件;
差异覆盖率数据确定模块,用于根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况;
获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识;
从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件;
根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况;
获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识;
从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件;
根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。
上述代码覆盖率的获取方法、装置、计算机设备和存储介质,获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况;获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识;从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件;根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。因此,只需要统计全量覆盖率版本的代码全量覆盖率数据树,不需要额外收集其他版本的数据,节省了时间和任务量,而且,如果需要分析某一版本的差异覆盖率数据,只需根据目标版本对应的代码文件和代码全量覆盖率数据树则可确定差异覆盖率数据,提高了差异覆盖率数据的统计效率。
附图说明
图1为一个实施例中代码覆盖率的获取方法的应用环境图;
图2为一个实施例中代码覆盖率的获取方法的流程示意图;
图3为一个实施例中版本差异覆盖率数据确定步骤的流程示意图;
图4为另一个实施例中代码覆盖率的获取方法的流程示意图;
图5为一个实施例中测试报告生成步骤的流程示意图;
图6为一个实施例中代码覆盖率的获取装置的结构框图;
图7为一个实施例中差异覆盖率数据确定模块的结构框图;
图8为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的代码覆盖率的获取方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
具体地,终端102可以向服务器104发送请求返回代码全量覆盖率数据树和目标代码树,其中,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识。进一步地,终端102接收到代码全量覆盖率数据树和目标代码树后,从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件,最后再根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。
在一个实施例中,如图2所示,提供了一种代码覆盖率的获取方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤:
步骤202,获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况。
其中,代码全量覆盖率数据树是代码全量覆盖率数据组成的树状结构,代码全量覆盖率数据是项目代码对应的全量覆盖率,所谓覆盖率是反映测试用例对被测程序覆盖程度的重要指标,也是衡量测试完整性的一个参考值。无论是单元测试、应用程序结构(Application ProgrammingInterface,API)还是功能测试,最终都是调用了程序的代码。测试结束后,通过代码覆盖率数据可以获知测试是否充分,测试的弱点在哪些方面,进而可以指导开发人员或测试者设计能够增加覆盖率的测试用例。
其中,各个项目在进行开发时,开发所使用的源代码都会存储至服务器或者终端本地的代码仓库中,各个源代码包括多个代码文件,即第一代码文件,也就是说,这里的第一代码文件组成代码全量覆盖率数据树,第一代码文件是存储的源代码文件,是各个项目在开发时所使用到的代码文件。
其中,各个第一代码文件都存在对应的第一代码文件标识,这里的第一代码文件标识是用来唯一标识项目在开发时所使用的代码文件的,可根据第一代码文件标识快速定位到对应的第一代码文件。
其中,第一代码行号标识是用来标识第一代码文件中的各个代码所在的行,可根据第一代码行号标识确定代码所在的行信息。而第一代码行号标识存在对应的代码行号执行情况,所谓代码行号执行情况是包括对应的代码是否被执行,代码行号执行情况包括代码被执行和代码未执行。
步骤204,获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识。
其中,这里的目标代码树是根据预设条件从代码仓库中筛选出符合预设条件的代码文件组成的树状结构。其中,预设条件可自定义,自定义可以根据实际业务场景或者产品需求进行确定得到的。例如,预设条件可以是将某一项目不同版本的代码文件组成目标代码树。
其中,目标代码树可以包括不同版本对应的第二代码文件,也就是说,获取某一项目不同版本对应的代码文件作为第二代码文件,同样地,第二代码文件存在对应的第二代码文件标识,第二代码文件标识是用来唯一标识第二代码文件,可以根据第二代码文件标识快速定位到对应的第二代码文件。
其中,由于代码文件是由成千上万行代码组成的,因此第二代码文件中的各行代码都存在对应的第二代码行号标识,可根据第二代码行号标识快速定位到对应行代码。
具体地,根据目标项目标识从代码仓库中获取对应的代码文件,包括各个版本对应的代码文件,由该目标项目标识对应的各个版本对应的代码文件组成目标代码树,即目标代码树包括不同版本对应的第二代码文件。其中,为了区分不同版本的第二代码文件,因此第二代码文件都存在对应的第二代码文件标识,为了区分第二代码文件中各行代码,第二代码文件中各行代码都存在对应的第二代码行号标识。
步骤206,从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件。
其中,这里的目标代码子树是从目标代码树中筛选出来的,可以是从目标代码树中筛选出代码发生改动的代码文件组成的目标代码子树。也就是说,从目标代码树中获取发生代码改动的代码文件,将发生代码改动的代码文件组成目标代码子树。具体可以是通过代码快照快速定位出目标代码树中发生了代码改动的代码文件,将发生了代码改动的代码文件作为第三代码文件,将第三代码文件对应的代码版本作为目标版本。
其中,因为目标代码树中包括不同版本对应的第二代码文件,所以目标代码子树还可以是从目标代码树中筛选出目标版本对应的第三代码文件,由目标版本对应的第三代码文件组成得到的。
在一个实施例中,第三代码文件为目标代码树中发生代码改动的代码文件,具体地,通过代码快照快速定位出目标代码树中发生代码改动的代码文件,将发生代码改动的代码文件对应的版本作为目标版本,由发生代码改动的代码文件作为第三代码文件,组成目标代码子树。
在另一个实施例中,第三代码文件为目标版本对应的第二代码文件,具体地,根据目标版本标识从目标代码树中获取对应的代码文件,将获取到的代码文件作为第三代码文件,由目标版本对应的第三代码文件组成目标代码子树。
步骤208,根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。
具体地,在得到目标代码子树后,可根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。其中,这里的版本差异覆盖率数据是目标版本对应的代码文件与代码全量覆盖率数据树中的原始代码文件之间的差异覆盖率数据,而覆盖率是反映测试用例对被测程序覆盖程度的重要指标,也是衡量测试完整性的一个参考值。具体可以是,将目标代码子树和代码全量覆盖率数据树进行正交计算,得到正交结果,根据正交结果从而得到版本差异覆盖率数据。或者还可以是,将目标代码子树和代码全量覆盖率数据树进行对比,通过对比结果从而得到版本差异覆盖率数据。
上述代码覆盖率的获取方法中,获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况;获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识;从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件;根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。因此,只需要统计全量覆盖率版本的代码全量覆盖率数据树,不需要额外收集其他版本的数据,节省了时间和任务量,而且,如果需要分析某一版本的差异覆盖率数据,只需根据目标版本对应的代码文件和代码全量覆盖率数据树则可确定差异覆盖率数据,提高了差异覆盖率数据的统计效率。
在一个实施例中,版本差异覆盖率数据包括目标版本对应的第三代码文件中被修改代码的目标行数、目标行数占目标版本对应的版本代码中被修改代码的总行数的比例和被修改代码的包、类、方法及行信息。
其中,版本差异覆盖率数据是反映目标版本对应的代码文件与代码全量覆盖率数据树中的代码文件之间的差异覆盖率,版本差异覆盖率数据是包括目标版本对应的第三代码文件中被修改代码所在的具体行数,即被修改代码的目标行数,还包括目标行数占目标版本对应的版本代码中被修改代码的总行数的比例,这里的版本代码是指目标版本对应的所有行代码。以及,版本差异覆盖率数据中还包括被修改代码对应的包、类、方法及行信息。在代码覆盖率数据收集过程中,通过计算对应的包、类、方法的差异部分的覆盖率数据,并在该代码覆盖率数据收集的基础之上,添加了对差异部分代码的覆盖率数据统计。基于代码全量覆盖率数据树及目标代码子树这两个不同版本的源代码可计算和展现差异代码覆盖率(即被修改代码覆盖率),使得用户根据获取一个项目中两个不同版本的差异代码覆盖率,从而可以为上线提供决策依据。
在一个实施例中,如图3所示,根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据,包括:
步骤302,设置目标代码子树对应的默认初始值。
步骤304,根据默认初始值和代码全量覆盖率数据中的代码行号执行情况进行正交,得到正交结果。
步骤306,根据正交结果得到版本差异覆盖率数据。
具体地,版本差异覆盖率数据可以根据目标代码子树和代码全量覆盖率数据树来确定得到,具体可以是,先设置目标代码子树对应的默认初始值,再根据默认初始值和代码全量覆盖率数据中的代码行号执行情况进行正交,从而得到正交结果。进一步地,再根据正交结果从而得到版本差异覆盖率数据。可以通过版本差异覆盖率数据获取同一项目中不同版本的差异代码的覆盖率,可以为项目上线提供决策依据。
在一个实施例中,代码全量覆盖率数据中某一代码文件对应的3行代码对应的代码行号执行情况为1,0,1,其中,1代表代码被执行,0代表代码未被执行,具体地,获取到目标代码子树后,先设置目标代码子树对应的默认初始值,如设置目标代码子树对应的默认初始值为1,则将默认初始值和代码全量覆盖率数据中的代码行号执行情况进行正交,例如,1*1为1,则目标代码子树中第1个默认初始值对应的代码的执行情况为代码被执行,1*0为0,则目标代码子树中第2个默认初始值对应的代码的执行情况为代码未被执行,1*1为1,则目标代码子树中第3个默认初始值对应的代码的执行情况为代码被执行。
在一个实施例中,如图4所示,代码覆盖率的获取方法还包括:
步骤402,获取gcov。
步骤404,根据预设改造条件改造gcov,得到目标gcov,目标gcov用于获取代码全量覆盖率数据树和目标代码树。
其中,针对C/C++类型工程项目的代码覆盖率统计工具,现在主流通常使用测试代码覆盖率工具gcov或lcov来收集覆盖率数据和统计输出。但是由于gcov本身支持行全量的行覆盖和函数覆盖代码覆盖率统计,且目前的测试代码覆盖率工具本身不支持增量覆盖率或差异覆盖率统计和输出。因此,若需要支持增量覆盖率,则需要二次开发现有的测试代码覆盖率工具gcov或lcov,目前主流测试代码覆盖率工具的二次开发方式,只要是通过分析不同版本覆盖率数据文件,然后再通过两个版本差异文件来做一系类变换,最终输出差异覆盖率数据。
具体可以是,获取目前的测试代码覆盖率工具gcov,根据预设改造条件改造目前的测试代码覆盖率工具gcov,其中,预设改造条件可自定义,自定义可以是根据实际业务场景、业务经验或者产品需求进行设置。最后,得到改造好的目标测试代码覆盖率工具gcov,其中,可以通过目标测试代码覆盖率工具gcov获取代码全量覆盖率数据树和目标代码树。
在一个实施例中,根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据之后,还包括:根据版本差异覆盖率数据生成测试报告和测试用例。
其中,终端可根据版本差异覆盖率数据生成测试报告和测试用例。具体地,在得到版本差异覆盖率数据之后,可以根据版本差异覆盖率数据生成测试报告和测试用例。而测试报告和测试用例可以让测试人员更加准确的获知测试的准确度,提高了测试人员对代码测试的便捷性。
进一步地,在生成测试报告的过程中,可在测试报告中将差异行代码进行凸显,并展现其是否被覆盖,可分别计算出某个包、类、方法下面有多少行差异代码信息被覆盖,以及差异代码信息的总行数。测试人员可以根据测试报告找出程序中没有被执行到的代码位置,以便对代码进行修改,设计出更有效的覆盖率的测试用例以提高代码覆盖率。不仅提高了代码覆盖率的获取准确性,而且可以让测试人员更加精确的获知测试的准确度,提高了测试人员进行代码测试的便捷性。
在一个实施例中,如图5所示,根据版本差异覆盖率数据生成测试报告,包括:
步骤502,根据版本差异覆盖率数据生成测试报告,并确定目标版本对应的第三代码文件被修改代码的目标行数、包、类、以及行信息。
步骤504,在测试报告中标注并显示第三代码文件中被修改代码的目标行数、包、类、以及行信息。
其中,终端可根据版本差异覆盖率数据生成测试报告和测试用例。具体地,根据版本差异覆盖率数据生成测试报告,并确定目标版本对应的第三代码文件被修改代码的目标行数、包、类、以及行信息,在测试报告中标注第三代码文件中被修改代码的目标行数、包、类、以及行信息,并显示。
其中,在生成测试报告的过程中,可在测试报告中将差异行代码进行凸显,并展现其是否被覆盖,可分别计算出某个包、类、方法下面有多少行差异代码信息被覆盖,以及差异代码信息的总行数。测试人员可以根据测试报告找出程序中没有被执行到的代码位置,以便对代码进行修改,设计出更有效的覆盖率的测试用例以提高代码覆盖率。不仅提高了代码覆盖率的获取准确性,而且可以让测试人员更加精确的获知测试的准确度,提高了测试人员进行代码测试的便捷性。
在一个具体的实施例中,提供了一种代码覆盖率的获取方法,具体包括以下步骤:
1、获取测试代码覆盖率工具gcov。
2、根据预设改造条件改造测试代码覆盖率工具gcov,得到目标测试代码覆盖率工具gcov,目标测试代码覆盖率工具gcov获取代码全量覆盖率数据树和目标代码树。
3、获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况。
4、获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识。
5、从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件。
6、根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据,其中,版本差异覆盖率数据包括目标版本对应的第三代码文件中被修改代码的目标行数、目标行数占目标版本对应的版本代码中被修改代码的总行数的比例和被修改代码的包、类、方法及行信息。
6-1、将目标代码子树和代码全量覆盖率数据树进行正交,得到正交结果。
6-2、根据正交结果得到版本差异覆盖率数据。
7、根据版本差异覆盖率数据生成测试报告和测试用例。
7-1、根据版本差异覆盖率数据生成测试报告,并确定目标版本对应的第三代码文件被修改代码的目标行数、包、类、以及行信息。
7-2、在测试报告中标注第三代码文件中被修改代码的目标行数、包、类、以及行信息,并显示。
应该理解的是,虽然上述流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图6所示,提供了一种代码覆盖率的获取装置600,包括:第一获取模块602、第二获取模块604、目标代码子树确定模块606和差异覆盖率数据确定模块608,其中:
第一获取模块602,用于获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况。
第二获取模块604,用于获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识。
目标代码子树确定模块606,用于从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件,第三代码文件包括第三代码文件标识和第三代码行号标识。
差异覆盖率数据确定模块608,用于根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。
在一个实施例中,如图7所示,差异覆盖率数据确定模块608包括:
正交计算单元608a,用于设置目标代码子树对应的默认初始值,根据默认初始值和代码全量覆盖率数据中的代码行号执行情况进行正交,得到正交结果。
差异覆盖率数据生成单元608b,用于根据正交结果得到版本差异覆盖率数据。
在一个实施例中,版本差异覆盖率数据包括目标版本对应的第三代码文件中被修改代码的目标行数、目标行数占目标版本对应的版本代码中被修改代码的总行数的比例和被修改代码的包、类、方法及行信息。
在一个实施例中,代码覆盖率的获取装置600还用于获取gcov,根据预设改造条件改造gcov,得到目标gcov,目标gcov用于获取代码全量覆盖率数据树和目标代码树。
在一个实施例中,代码覆盖率的获取装置600还用于根据版本差异覆盖率数据生成测试报告和测试用例。
在一个实施例中,代码覆盖率的获取装置600还用于根据版本差异覆盖率数据生成测试报告,并确定目标版本对应的第三代码文件被修改代码的目标行数、包、类、以及行信息,在测试报告中标注并显示第三代码文件中被修改代码的目标行数、包、类、以及行信息。
关于代码覆盖率的获取装置的具体限定可以参见上文中对于代码覆盖率的获取方法的限定,在此不再赘述。上述代码覆盖率的获取装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
图8示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的终端102。如图8所示,该计算机设备包括该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现代码覆盖率的获取方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行代码覆盖率的获取方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况;获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识;从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件;根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。
在一个实施例中,版本差异覆盖率数据包括目标版本对应的第三代码文件中被修改代码的目标行数、目标行数占目标版本对应的版本代码中被修改代码的总行数的比例和被修改代码的包、类、方法及行信息。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:设置目标代码子树对应的默认初始值;根据默认初始值和代码全量覆盖率数据中的代码行号执行情况进行正交,得到正交结果;根据正交结果得到版本差异覆盖率数据。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取gcov;根据预设改造条件改造gcov,得到目标gcov,目标gcov用于获取代码全量覆盖率数据树和目标代码树。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据版本差异覆盖率数据生成测试报告和测试用例。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据版本差异覆盖率数据生成测试报告,并确定目标版本对应的第三代码文件被修改代码的目标行数、包、类、以及行信息;在测试报告中标注并显示第三代码文件中被修改代码的目标行数、包、类、以及行信息。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取代码全量覆盖率数据树,代码全量覆盖率数据树包括至少一个第一代码文件,第一代码文件包括第一代码文件标识、第一代码行号标识和第一代码行号标识对应的代码行号执行情况;获取目标代码树,目标代码树包括不同版本对应的第二代码文件,第二代码文件包括第二代码文件标识和第二代码行号标识;从目标代码树中确定目标代码子树,目标代码子树包括目标版本对应的第三代码文件;根据目标代码子树和代码全量覆盖率数据树确定版本差异覆盖率数据。
在一个实施例中,版本差异覆盖率数据包括目标版本对应的第三代码文件中被修改代码的目标行数、目标行数占目标版本对应的版本代码中被修改代码的总行数的比例和被修改代码的包、类、方法及行信息。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:设置目标代码子树对应的默认初始值;根据默认初始值和代码全量覆盖率数据中的代码行号执行情况进行正交,得到正交结果;根据正交结果得到版本差异覆盖率数据。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取gcov;根据预设改造条件改造gcov,得到目标gcov,目标gcov用于获取代码全量覆盖率数据树和目标代码树。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据版本差异覆盖率数据生成测试报告和测试用例。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据版本差异覆盖率数据生成测试报告,并确定目标版本对应的第三代码文件被修改代码的目标行数、包、类、以及行信息;在测试报告中标注并显示第三代码文件中被修改代码的目标行数、包、类、以及行信息。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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.根据权利要求1所述的方法,其特征在于,所述根据所述目标代码子树和所述代码全量覆盖率数据树确定版本差异覆盖率数据,包括:
设置所述目标代码子树对应的默认初始值;
根据所述默认初始值和所述代码全量覆盖率数据中的所述代码行号执行情况进行正交,得到正交结果;
根据所述正交结果得到版本差异覆盖率数据。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取gcov;
根据预设改造条件改造所述gcov,得到目标gcov,所述目标gcov用于获取所述代码全量覆盖率数据树和所述目标代码树。
5.根据权利要求1所述的方法,其特征在于,所述根据所述目标代码子树和所述代码全量覆盖率数据树确定版本差异覆盖率数据之后,还包括:
根据所述版本差异覆盖率数据生成测试报告和测试用例。
6.根据权利要求4所述的方法,其特征在于,所述根据所述版本差异覆盖率数据生成测试报告,包括:
根据所述版本差异覆盖率数据生成测试报告,并确定目标版本对应的第三代码文件被修改代码的目标行数、包、类、以及行信息;
在所述测试报告中标注并显示所述第三代码文件中被修改代码的目标行数、包、类、以及行信息。
7.一种代码覆盖率的获取装置,其特征在于,所述装置包括:
第一获取模块,用于获取代码全量覆盖率数据树,所述代码全量覆盖率数据树包括至少一个第一代码文件,所述第一代码文件包括第一代码文件标识、第一代码行号标识和所述第一代码行号标识对应的代码行号执行情况;
第二获取模块,用于获取目标代码树,所述目标代码树包括不同版本对应的第二代码文件,所述第二代码文件包括第二代码文件标识和第二代码行号标识;
目标代码子树确定模块,用于从所述目标代码树中确定目标代码子树,所述目标代码子树包括目标版本对应的第三代码文件,所述第三代码文件包括第三代码文件标识和第三代码行号标识;
差异覆盖率数据确定模块,用于根据所述目标代码子树和所述代码全量覆盖率数据树确定版本差异覆盖率数据。
8.根据权利要求7所述的装置,其特征在于,所述差异覆盖率数据确定模块包括:
正交计算单元,用于设置所述目标代码子树对应的默认初始值,根据所述默认初始值和所述代码覆盖率数据中的所述代码行号执行情况进行正交,得到正交结果;
差异覆盖率数据生成单元,用于根据所述正交结果得到版本差异覆盖率数据。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
CN201911147747.9A 2019-11-21 2019-11-21 代码覆盖率的获取方法、装置、计算机设备和存储介质 Active CN111026647B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911147747.9A CN111026647B (zh) 2019-11-21 2019-11-21 代码覆盖率的获取方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911147747.9A CN111026647B (zh) 2019-11-21 2019-11-21 代码覆盖率的获取方法、装置、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN111026647A true CN111026647A (zh) 2020-04-17
CN111026647B CN111026647B (zh) 2023-06-27

Family

ID=70201780

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911147747.9A Active CN111026647B (zh) 2019-11-21 2019-11-21 代码覆盖率的获取方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN111026647B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111813697A (zh) * 2020-08-26 2020-10-23 四川新网银行股份有限公司 一种基于测试对象调用标记的测试覆盖率统计方法
CN111897727A (zh) * 2020-07-30 2020-11-06 平安科技(深圳)有限公司 软件测试方法、装置、计算机设备及存储介质
CN112148590A (zh) * 2020-08-27 2020-12-29 浙江大搜车融资租赁有限公司 一种代码覆盖率的确定方法、装置及设备
CN113946515A (zh) * 2021-10-19 2022-01-18 平安普惠企业管理有限公司 代码覆盖率测试方法、装置、计算机设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108197036A (zh) * 2018-02-06 2018-06-22 百度在线网络技术(北京)有限公司 用于确定增量代码的覆盖率信息的方法和装置
CN108519945A (zh) * 2018-03-21 2018-09-11 腾讯科技(深圳)有限公司 覆盖率测试方法、装置及存储设备
CN109388566A (zh) * 2018-09-27 2019-02-26 北京城市网邻信息技术有限公司 一种代码覆盖率分析方法、装置、设备及存储介质
CN110413532A (zh) * 2019-08-08 2019-11-05 上海新炬网络技术有限公司 适用于敏捷测试的多过程版本变更代码覆盖率获取方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108197036A (zh) * 2018-02-06 2018-06-22 百度在线网络技术(北京)有限公司 用于确定增量代码的覆盖率信息的方法和装置
CN108519945A (zh) * 2018-03-21 2018-09-11 腾讯科技(深圳)有限公司 覆盖率测试方法、装置及存储设备
CN109388566A (zh) * 2018-09-27 2019-02-26 北京城市网邻信息技术有限公司 一种代码覆盖率分析方法、装置、设备及存储介质
CN110413532A (zh) * 2019-08-08 2019-11-05 上海新炬网络技术有限公司 适用于敏捷测试的多过程版本变更代码覆盖率获取方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111897727A (zh) * 2020-07-30 2020-11-06 平安科技(深圳)有限公司 软件测试方法、装置、计算机设备及存储介质
CN111813697A (zh) * 2020-08-26 2020-10-23 四川新网银行股份有限公司 一种基于测试对象调用标记的测试覆盖率统计方法
CN112148590A (zh) * 2020-08-27 2020-12-29 浙江大搜车融资租赁有限公司 一种代码覆盖率的确定方法、装置及设备
CN112148590B (zh) * 2020-08-27 2022-11-04 浙江大搜车融资租赁有限公司 一种代码覆盖率的确定方法、装置及设备
CN113946515A (zh) * 2021-10-19 2022-01-18 平安普惠企业管理有限公司 代码覆盖率测试方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
CN111026647B (zh) 2023-06-27

Similar Documents

Publication Publication Date Title
CN111026647B (zh) 代码覆盖率的获取方法、装置、计算机设备和存储介质
CN110399293B (zh) 系统测试方法、装置、计算机设备和存储介质
CN109901834B (zh) 文档页面生成方法、装置、计算机设备和存储介质
CN108959059B (zh) 一种测试方法以及测试平台
CN107729227B (zh) 应用程序测试范围确定方法、系统、服务器和存储介质
CN108459964B (zh) 测试用例选择方法、装置、设备以及计算机可读存储介质
CN110941555B (zh) 测试用例推荐方法、装置、计算机设备和存储介质
CN110162453B (zh) 测试方法、装置、计算机可读存储介质和计算机设备
CN110362479B (zh) 系统升级测试方法和系统
CN111090788A (zh) json文件的比对方法、装置、存储介质及计算机设备
CN108399125B (zh) 自动化测试方法、装置、计算机设备和存储介质
CN113342685A (zh) 精准测试方法、装置、计算机设备和存储介质
CN112380130A (zh) 基于调用依赖关系的应用测试方法和装置
CN110750443A (zh) 网页测试的方法、装置、计算机设备及存储介质
CN114610635A (zh) 接口测试用例生成方法、装置、计算机设备及存储介质
CN111124894B (zh) 代码覆盖率的处理方法、装置和计算机设备
CN112612706A (zh) 自动化测试方法、计算机设备及存储介质
CN112433753A (zh) 基于参数信息的接口文档生成方法、装置、设备和介质
CN105912467A (zh) 一种性能测试方法及装置
CN111078549B (zh) 代码覆盖率的处理方法、装置和计算机设备
CN113704114A (zh) 功能接口的自动化测试方法、装置、设备及介质
CN111625835B (zh) 程序漏洞路径追踪方法、装置、计算机设备及存储介质
CN112416785A (zh) 切词工具版本差异测试方法、装置、设备和存储介质
CN113419961A (zh) 业务测试用例库的建立方法、装置、设备及存储介质
CN112463630A (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