CN112540913B - 一种代码覆盖率确定的方法、系统、设备及可读存储介质 - Google Patents
一种代码覆盖率确定的方法、系统、设备及可读存储介质 Download PDFInfo
- Publication number
- CN112540913B CN112540913B CN202011357486.6A CN202011357486A CN112540913B CN 112540913 B CN112540913 B CN 112540913B CN 202011357486 A CN202011357486 A CN 202011357486A CN 112540913 B CN112540913 B CN 112540913B
- Authority
- CN
- China
- Prior art keywords
- file
- code
- cpu instruction
- cpu
- program
- 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
- 238000000034 method Methods 0.000 title claims abstract description 64
- 230000008569 process Effects 0.000 claims abstract description 20
- 230000006870 function Effects 0.000 claims description 58
- 238000004590 computer program Methods 0.000 claims description 6
- 239000003550 marker Substances 0.000 claims description 6
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 239000000306 component Substances 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 239000008358 core component Substances 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
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
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Devices For Executing Special Programs (AREA)
Abstract
本申请公开了一种代码覆盖率确定的方法,包括:根据收集的CPU指令波形生成对应的CPU指令执行流程文件;依据CPU指令执行流程文件生成中间标记文件,中间标记文件存有CPU指令与程序代码的对应关系;依据中间标记文件中的对应关系确定程序执行过程中的命中代码行,并依据命中代码行确定代码覆盖率。本申请不需要使用插桩的方式即可完成对代码覆盖率的分析及确定,消除了对程序执行流程的影响,保证程序按照实际情况运行,使得程序时间性能的统计更加准确;而且减少了对编译器、语法树的依赖,降低了代码覆盖率的分析难度。本申请同时还提供了一种代码覆盖率确定的系统、设备及可读存储介质,具有上述有益效果。
Description
技术领域
本申请涉及代码覆盖率领域,特别涉及一种代码覆盖率确定的方法、系统、设备及可读存储介质。
背景技术
处理器(central processing units,CPU)是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行指令的核心部件。代码覆盖率是软件测试中的一种度量指标,描述了程序静态和动态之间的比例关系。目前常用的覆盖率准则有:函数覆盖率——程序中各个函数的调用情况;指令覆盖率——程序每条指令执行情况;分支覆盖率——将程序分成若干基本块,每个基本块的第一条语句为入口语句,最后一条语句为退出语句,除此无其他入口出口语句,这些基本块的执行情况。
为了获得程序覆盖率,目前常用的技术手段是在程序编译过程中,在程序的关键节点处插入桩代码,在程序执行过程中,桩代码继续程序调用情况,在程序执行退出前收集桩代码执行的情况,完成代码覆盖率的收集以及后续处理。然而,插桩的方法不可避免的要修改程序源码,影响程序执行流程以及执行效率。
因此,如何在不影响程序执行流程的情况下确定代码覆盖率是本领域技术人员目前需要解决的技术问题。
发明内容
本申请的目的是提供一种代码覆盖率确定的方法、系统、设备及可读存储介质,用于在不影响程序执行流程的情况下确定代码覆盖率。
为解决上述技术问题,本申请提供一种代码覆盖率确定的方法,该方法包括:
根据收集的CPU指令波形生成对应的CPU指令执行流程文件;
依据所述CPU指令执行流程文件生成中间标记文件,所述中间标记文件存有CPU指令与程序代码的对应关系;
依据所述中间标记文件中的对应关系确定程序执行过程中的命中代码行,并依据所述命中代码行确定代码覆盖率。
可选的,所述根据收集的CPU指令波形生成对应的CPU指令执行流程文件,包括:
利用CPU的Trace功能保存所述CPU指令波形,并在程序执行完成后通过所述Trace功能将所述CPU指令波形转存到内存储器中;
根据CPU架构文件对所述CPU指令波形进行分析,得到每个CPU核心对应的CPU指令执行流程文件。
可选的,依据所述CPU指令执行流程文件生成中间标记文件,包括:
遍历所述CPU指令执行流程文件得到CPU指令指针,并以所述CPU指令指针为参数调用编译工具对可执行文件进行反汇编操作,得到CPU指令与所述程序代码的对应关系;
依据所述CPU指令与所述程序代码的对应关系生成所述中间标记文件。
可选的,还包括:
调用所述编译工具对所述可执行文件进行反汇编操作,得到程序符号表;
依据所述程序符号表解析程序源代码文件,得到有效代码行、函数名及分支标记;
将所述有效代码行、所述函数名及所述分支标记添加到所述中间标记文件中。
可选的,还包括:
对所述中间标记文件进行逐行分析;
依据所述函数名计算函数覆盖率,并依据所述分支标记计算分支覆盖率。
可选的,还包括:
对所述中间标记文件进行逐行分析;
统计每个所述命中代码、每个所述函数名及每个所述分支标记的出现次数;
确定出现次数超过第一阈值的命中代码为核心代码,确定出现次数超过第二阈值的函数名为核心函数,并确定出现次数超过第三阈值的分支标记所在分支为核心分支。
可选的,在依据所述命中代码行确定代码覆盖率之后,还包括:
生成包括所述代码覆盖率的程序运行报告。
本申请还提供一种代码覆盖率确定的系统,该系统包括:
第一生成模块,用于根据收集的CPU指令波形生成对应的CPU指令执行流程文件;
第二生成模块,用于依据所述CPU指令执行流程文件生成中间标记文件,所述中间标记文件存有CPU指令与程序代码的对应关系;
第一确定模块,用于依据所述中间标记文件中的对应关系确定程序执行过程中的命中代码行,并依据所述命中代码行确定代码覆盖率。
本申请还提供一种代码覆盖率确定设备,该代码覆盖率确定设备包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述任一项所述代码覆盖率确定的方法的步骤。
本申请还提供一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述代码覆盖率确定的方法的步骤。
本申请所提供代码覆盖率确定的方法,包括:根据收集的CPU指令波形生成对应的CPU指令执行流程文件;依据CPU指令执行流程文件生成中间标记文件,中间标记文件存有CPU指令与程序代码的对应关系;依据中间标记文件中的对应关系确定程序执行过程中的命中代码行,并依据命中代码行确定代码覆盖率。
本申请所提供的技术方案,通过收集CPU指令波形生成对应的CPU指令执行流程文件,然后依据CPU指令执行流程文件生成中间标记文件,最后依据中间标记文件中的对应关系确定程序执行过程中的命中代码行,并依据命中代码行确定代码覆盖率;本申请不需要使用插桩的方式即可完成对代码覆盖率的分析及确定,消除了对程序执行流程的影响,保证程序按照实际情况运行,使得程序时间性能的统计更加准确;而且减少了对编译器、语法树的依赖,降低了代码覆盖率的分析难度。本申请同时还提供了一种代码覆盖率确定的系统、设备及可读存储介质,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例所提供的一种代码覆盖率确定的方法的流程图;
图2为本申请实施例所提供的一种程序运行报告的示意图;
图3为本申请实施例所提供的一种代码覆盖率确定的系统的结构图;
图4为本申请实施例所提供的一种代码覆盖率确定设备的结构图。
具体实施方式
本申请的核心是提供一种代码覆盖率确定的方法、系统、设备及可读存储介质,用于在不影响程序执行流程的情况下确定代码覆盖率。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参考图1,图1为本申请实施例所提供的一种代码覆盖率确定的方法的流程图。
其具体包括如下步骤:
S101:根据收集的CPU指令波形生成对应的CPU指令执行流程文件;
为了获得程序覆盖率,目前常用的技术手段是在程序编译过程中,在程序的关键节点处插入桩代码,在程序执行过程中,桩代码继续程序调用情况,在程序执行退出前收集桩代码执行的情况,完成代码覆盖率的收集以及后续处理。插桩的方法不可避免的要修改程序源码,影响程序执行流程以及执行效率;同时,目前现有的覆盖率分析技术基本都是基于语法树,语法树的产生、理解需要编译原理的支持,大大增加了覆盖率分析的难度。故本申请提供了一种代码覆盖率确定的方法,用于解决上述问题。
这里提到的CPU指令波形为CPU指令数据的数值序列,其记载着程序计数器的数值,程序计数器的数值用于指示CPU当前执行位置;
在一个具体实施例中,CPU指令波形可以通过在硬件架构的基础上增加监测模块来收集,例如,在仿真环境中通过专门用于抓取波形的监测模块来收集;在实际芯片中,可以通过CPU的Trace功能来保存CPU指令波形;
其中,Trace功能即CPU在执行程序的同时能够给出反映该次执行状态的信息,为了便于测试和维护,一个CPU必须具备足够的Trace能力,为开发人员和测试人员提供一个可靠而便捷的途径来掌握程序的执行状况。
CPU的基本工作就是执行计算机的一系列程序,而这些程序其实就是存储的指令序列,本申请中提到的CPU指令执行流程文件中存储的就是指令序列的执行流程。
可选的,这里提到的根据收集的CPU指令波形生成对应的CPU指令执行流程文件,其具体可以通过执行如下步骤实现:
利用CPU的Trace功能保存CPU指令波形,并在程序执行完成后通过Trace功能将CPU指令波形转存到内存储器中;
根据CPU架构文件对CPU指令波形进行分析,得到每个CPU核心对应的CPU指令执行流程文件。
由于CPU在工作时每个核心的所执行的指令没有联系,因此本申请实施例根据CPU架构文件对CPU指令波形进行分析,得到每个CPU核心对应的CPU指令执行流程文件,以提高CPU指令执行流程文件的准确率,进而提高代码覆盖率的准确度。
S102:依据CPU指令执行流程文件生成中间标记文件;
这里提到的中间标记文件存有CPU指令与程序代码的对应关系,即通过中间标记文件可以确定每个CPU指令在执行时所命中的程序代码,进而便可以确定该程序的代码覆盖率。
可选的,这里提到的依据CPU指令执行流程文件生成中间标记文件,其具体可以通过执行如下步骤实现:
遍历CPU指令执行流程文件得到CPU指令指针,并以CPU指令指针为参数调用编译工具对可执行文件进行反汇编操作,得到CPU指令与程序代码的对应关系;
依据CPU指令与程序代码的对应关系生成中间标记文件。
可选的,这里提到的程序代码具体可以包括程序源码和反汇编代码。
优选的,在上述实施例的基础上,在一个具体实施例中,还可以通过执行如下步骤得到程序代码中的代码行、函数名及分支标记:
调用编译工具对可执行文件进行反汇编操作,得到程序符号表;
依据程序符号表解析程序源代码文件,得到有效代码行、函数名及分支标记;
将有效代码行、函数名及分支标记添加到中间标记文件中。
例如,在一个具体实施例中,可以调用编译工具链反汇编可执行文件获取程序符号表,并根据符号表解析程序源代码文件,去除注释、宏定义等得到有效的代码行、函数名以及分支标记。
优选的,在上述实施例的基础上,在一个具体实施例中,还可以通过执行如下步骤计算程序的函数覆盖率和分支覆盖率:
对中间标记文件进行逐行分析;
依据函数名计算函数覆盖率,并依据分支标记计算分支覆盖率。
例如,在一个具体实施例中,可以以PC指针为关键字,读取CPU指令执行流程文件,并调用编译工具链反汇编可执行文件,得到CPU指令执行流程与程序源代码的对应关系,生成中间标记文件;可以Push汇编指令为函数入口、Pop汇编指令为函数出口计算函数覆盖率,并根据B[xx]汇编指令计算分支覆盖率。
可选的,还可以通过执行如下步骤实现对核心代码、核心函数及核心分支的识别:
对中间标记文件进行逐行分析;
统计每个命中代码、每个函数名及每个分支标记的出现次数;
确定出现次数超过第一阈值的命中代码为核心代码,确定出现次数超过第二阈值的函数名为核心函数,并确定出现次数超过第三阈值的分支标记所在分支为核心分支。
本申请实施例可根据中间标记文件对函数时间性能、函数空间性能以及代码执行频次进行统计,为函数优化提供依据。
S103:依据中间标记文件中的对应关系确定程序执行过程中的命中代码行,并依据命中代码行确定代码覆盖率。
可选的,在依据命中代码行确定代码覆盖率之后,还包括:
生成包括代码覆盖率的程序运行报告。
可选的,该程序运行报告可以为包括代码覆盖率、函数覆盖率、分支覆盖率的通用文件,该程序运行报告可以为XML格式或JSON格式。
可选的,这里请参考图2,图2为本申请实施例所提供的一种程序运行报告的示意图,在一个具体实施例中,该程序运行报告首页以时间因素分条目展示每次程序运行的报告,点击可以查看CPU执行流程以及覆盖率报告;覆盖率页面首页概述了代码覆盖率、函数覆盖率的基本情况,分支覆盖率包含在函数覆盖率内,点击可以查看单个文件的覆盖率详细信息。
基于上述技术方案,本申请所提供的一种代码覆盖率确定的方法,通过收集CPU指令波形生成对应的CPU指令执行流程文件,然后依据CPU指令执行流程文件生成中间标记文件,最后依据中间标记文件中的对应关系确定程序执行过程中的命中代码行,并依据命中代码行确定代码覆盖率;本申请不需要使用插桩的方式即可完成对代码覆盖率的分析及确定,消除了对程序执行流程的影响,保证程序按照实际情况运行,使得程序时间性能的统计更加准确;而且减少了对编译器、语法树的依赖,降低了代码覆盖率的分析难度。
请参考图3,图3为本申请实施例所提供的一种代码覆盖率确定的系统的结构图。
该系统可以包括:
第一生成模块100,用于根据收集的CPU指令波形生成对应的CPU指令执行流程文件;
第二生成模块200,用于依据CPU指令执行流程文件生成中间标记文件,中间标记文件存有CPU指令与程序代码的对应关系;
第一确定模块300,用于依据中间标记文件中的对应关系确定程序执行过程中的命中代码行,并依据命中代码行确定代码覆盖率。
在上述实施例的基础上,在一个具体实施例中,该第一生成模块100可以包括:
保存子模块,用于利用CPU的Trace功能保存CPU指令波形,并在程序执行完成后通过Trace功能将CPU指令波形转存到内存储器中;
分析子模块,用于根据CPU架构文件对CPU指令波形进行分析,得到每个CPU核心对应的CPU指令执行流程文件。
在上述实施例的基础上,在一个具体实施例中,该第二生成模块200可以包括:
反汇编子模块,用于遍历CPU指令执行流程文件得到CPU指令指针,并以CPU指令指针为参数调用编译工具对可执行文件进行反汇编操作,得到CPU指令与程序代码的对应关系;
生成子模块,用于依据CPU指令与程序代码的对应关系生成中间标记文件。
在上述实施例的基础上,在一个具体实施例中,该系统还可以包括:
反汇编模块,用于调用编译工具对可执行文件进行反汇编操作,得到程序符号表;
解析模块,用于依据程序符号表解析程序源代码文件,得到有效代码行、函数名及分支标记;
添加模块,用于将有效代码行、函数名及分支标记添加到中间标记文件中。
在上述实施例的基础上,在一个具体实施例中,该系统还可以包括:
第一分析模块,用于对中间标记文件进行逐行分析;
计算模块,用于依据函数名计算函数覆盖率,并依据分支标记计算分支覆盖率。
在上述实施例的基础上,在一个具体实施例中,该系统还可以包括:
第二分析模块,用于对中间标记文件进行逐行分析;
统计模块,用于统计每个命中代码、每个函数名及每个分支标记的出现次数;
第二确定模块,用于确定出现次数超过第一阈值的命中代码为核心代码,确定出现次数超过第二阈值的函数名为核心函数,并确定出现次数超过第三阈值的分支标记所在分支为核心分支。
在上述实施例的基础上,在一个具体实施例中,该系统还可以包括:
生成模块,用于生成包括代码覆盖率的程序运行报告。
由于系统部分的实施例与方法部分的实施例相互对应,因此系统部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
请参考图4,图4为本申请实施例所提供的一种代码覆盖率确定设备的结构图。
该代码覆盖率确定设备400可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上CPU422(例如,一个或一个以上处理器)和存储器432,一个或一个以上存储应用程序442或数据444的存储介质430(例如一个或一个以上海量存储设备)。其中,存储器432和存储介质430可以是短暂存储或持久存储。存储在存储介质430的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对装置中的一系列指令操作。更进一步地,处理器422可以设置为与存储介质430通信,在代码覆盖率确定设备400上执行存储介质430中的一系列指令操作。
代码覆盖率确定设备400还可以包括一个或一个以上电源424,一个或一个以上有线或无线网络接口450,一个或一个以上输入输出接口458,和/或,一个或一个以上操作系统441,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述图1至图2所描述的代码覆盖率确定的方法中的步骤由代码覆盖率确定设备基于该图4所示的结构实现。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置、设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,功能调用装置,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、随机存取存储器(Random AccessMemory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上对本申请所提供的一种代码覆盖率确定的方法、系统、设备及可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (9)
1.一种代码覆盖率确定的方法,其特征在于,包括:
根据收集的CPU指令波形生成对应的CPU指令执行流程文件;
依据所述CPU指令执行流程文件生成中间标记文件,所述中间标记文件存有CPU指令与程序代码的对应关系;
依据所述中间标记文件中的对应关系确定程序执行过程中的命中代码行,并依据所述命中代码行确定代码覆盖率;
其中,所述根据收集的CPU指令波形生成对应的CPU指令执行流程文件,包括:
利用CPU的Trace功能保存所述CPU指令波形,并在程序执行完成后通过所述Trace功能将所述CPU指令波形转存到内存储器中;
根据CPU架构文件对所述CPU指令波形进行分析,得到每个CPU核心对应的CPU指令执行流程文件;
其中,所述CPU用于执行计算机的一系列指令序列;所述CPU指令执行流程文件为存储所述指令序列的执行流程的文件。
2.根据权利要求1所述的方法,其特征在于,依据所述CPU指令执行流程文件生成中间标记文件,包括:
遍历所述CPU指令执行流程文件得到CPU指令指针,并以所述CPU指令指针为参数调用编译工具对可执行文件进行反汇编操作,得到CPU指令与所述程序代码的对应关系;
依据所述CPU指令与所述程序代码的对应关系生成所述中间标记文件。
3.根据权利要求2所述的方法,其特征在于,还包括:
调用所述编译工具对所述可执行文件进行反汇编操作,得到程序符号表;
依据所述程序符号表解析程序源代码文件,得到有效代码行、函数名及分支标记;
将所述有效代码行、所述函数名及所述分支标记添加到所述中间标记文件中。
4.根据权利要求3所述的方法,其特征在于,还包括:
对所述中间标记文件进行逐行分析;
依据所述函数名计算函数覆盖率,并依据所述分支标记计算分支覆盖率。
5.根据权利要求3所述的方法,其特征在于,还包括:
对所述中间标记文件进行逐行分析;
统计每个所述命中代码、每个所述函数名及每个所述分支标记的出现次数;
确定出现次数超过第一阈值的命中代码为核心代码,确定出现次数超过第二阈值的函数名为核心函数,并确定出现次数超过第三阈值的分支标记所在分支为核心分支。
6.根据权利要求1所述的方法,其特征在于,在依据所述命中代码行确定代码覆盖率之后,还包括:
生成包括所述代码覆盖率的程序运行报告。
7.一种代码覆盖率确定的系统,其特征在于,包括:
第一生成模块,用于根据收集的CPU指令波形生成对应的CPU指令执行流程文件;
第二生成模块,用于依据所述CPU指令执行流程文件生成中间标记文件,所述中间标记文件存有CPU指令与程序代码的对应关系;
第一确定模块,用于依据所述中间标记文件中的对应关系确定程序执行过程中的命中代码行,并依据所述命中代码行确定代码覆盖率;
其中,所述第一生成模块,包括:
保存子模块,用于利用CPU的Trace功能保存所述CPU指令波形,并在程序执行完成后通过所述Trace功能将所述CPU指令波形转存到内存储器中;
分析子模块,用于根据CPU架构文件对所述CPU指令波形进行分析,得到每个CPU核心对应的CPU指令执行流程文件;
其中,所述CPU用于执行计算机的一系列指令序列;所述CPU指令执行流程文件为存储所述指令序列的执行流程的文件。
8.一种代码覆盖率确定设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至6任一项所述代码覆盖率确定的方法的步骤。
9.一种可读存储介质,其特征在于,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述代码覆盖率确定的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011357486.6A CN112540913B (zh) | 2020-11-27 | 2020-11-27 | 一种代码覆盖率确定的方法、系统、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011357486.6A CN112540913B (zh) | 2020-11-27 | 2020-11-27 | 一种代码覆盖率确定的方法、系统、设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112540913A CN112540913A (zh) | 2021-03-23 |
CN112540913B true CN112540913B (zh) | 2024-02-09 |
Family
ID=75017012
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011357486.6A Active CN112540913B (zh) | 2020-11-27 | 2020-11-27 | 一种代码覆盖率确定的方法、系统、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112540913B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103365771A (zh) * | 2012-04-10 | 2013-10-23 | 阿里巴巴集团控股有限公司 | 一种代码覆盖率的获得方法和设备 |
CN106844221A (zh) * | 2017-03-10 | 2017-06-13 | 深圳航天科技创新研究院 | 一种实现虚拟验证系统覆盖率分析的方法 |
CN110888817A (zh) * | 2019-12-18 | 2020-03-17 | 广州唯品会研究院有限公司 | 代码覆盖率报告的生成方法、装置和可读存储介质 |
CN111061639A (zh) * | 2019-12-18 | 2020-04-24 | 中信百信银行股份有限公司 | 一种高效多系统测试代码覆盖率的管理方法 |
CN111831549A (zh) * | 2020-06-04 | 2020-10-27 | 深圳木成林科技有限公司 | 增量代码覆盖率确定方法、装置、设备及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9076804B2 (en) * | 2013-08-23 | 2015-07-07 | Taiwan Semiconductor Manufacturing Co., Ltd. | Systems and methods to enhance passivation integrity |
US11151018B2 (en) * | 2018-04-13 | 2021-10-19 | Baidu Usa Llc | Method and apparatus for testing a code file |
-
2020
- 2020-11-27 CN CN202011357486.6A patent/CN112540913B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103365771A (zh) * | 2012-04-10 | 2013-10-23 | 阿里巴巴集团控股有限公司 | 一种代码覆盖率的获得方法和设备 |
CN106844221A (zh) * | 2017-03-10 | 2017-06-13 | 深圳航天科技创新研究院 | 一种实现虚拟验证系统覆盖率分析的方法 |
CN110888817A (zh) * | 2019-12-18 | 2020-03-17 | 广州唯品会研究院有限公司 | 代码覆盖率报告的生成方法、装置和可读存储介质 |
CN111061639A (zh) * | 2019-12-18 | 2020-04-24 | 中信百信银行股份有限公司 | 一种高效多系统测试代码覆盖率的管理方法 |
CN111831549A (zh) * | 2020-06-04 | 2020-10-27 | 深圳木成林科技有限公司 | 增量代码覆盖率确定方法、装置、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
固件代码动态污点分析技术;任玉柱;《中国优秀硕士学位论文全文数据库信息科技辑》(第2期);I136-502 * |
Also Published As
Publication number | Publication date |
---|---|
CN112540913A (zh) | 2021-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6546548B1 (en) | Method and system for compensating for output overhead in trace data using initial calibration information | |
US11003428B2 (en) | Sample driven profile guided optimization with precise correlation | |
CN105183592B (zh) | 用于支持性能分析的方法和装置 | |
CN104850411B (zh) | 存储系统基准评测程序生成方法及装置 | |
JP6342129B2 (ja) | 混合モードプログラムのソースコードエラー位置検出装置及び方法 | |
Liu et al. | Pinpointing data locality bottlenecks with low overhead | |
WO2021087648A1 (en) | Systems and methods for evaluating code contributions by software developers | |
CN109298855A (zh) | 一种网络靶场管理系统及其实现方法、装置、存储介质 | |
CN100456248C (zh) | 获得程序代码和函数执行覆盖率及执行效率的装置及方法 | |
US20100036981A1 (en) | Finding Hot Call Paths | |
Zheng et al. | Accurate profiling in the presence of dynamic compilation | |
CN112540913B (zh) | 一种代码覆盖率确定的方法、系统、设备及可读存储介质 | |
Rieger et al. | Survey of approaches for assessing software energy consumption | |
CN112988544A (zh) | 操作系统性能瓶颈的分析方法、系统、设备和存储介质 | |
CN116303064A (zh) | 一种获取单元代码覆盖率的方法及装置 | |
Lehr | Counting performance: hardware performance counter and compiler instrumentation | |
CN114327614A (zh) | 参考模型数据流记录和分析的方法及应用 | |
Green et al. | An introduction to slice-based cohesion and coupling metrics | |
Voevodin et al. | Universal assessment system for analyzing the quality of supercomputer resources usage | |
Nowak et al. | Low-overhead dynamic instruction mix generation using hybrid basic block profiling | |
Hung et al. | New tracing and performance analysis techniques for embedded applications | |
Fujita et al. | Measurement Analysis and Fault Proneness Indication in Product Line Applications (PLA) | |
Janecek et al. | Uncovering Steady State Executions in Java Microbenchmarking with Call Graph Analysis | |
CN112882912B (zh) | 一种应用于并行科学计算程序的函数运行时间测量方法 | |
Zhai et al. | Leveraging code snippets to detect variations in the performance of HPC systems |
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 |