代码执行覆盖率统计的方法、装置及计算设备制造方法及图纸

技术编号:33916212 阅读:11 留言:0更新日期:2022-06-25 20:17
一种代码执行覆盖率统计的方法包括:根据目标码函数指令信息、目标码函数分支指令信息和目标码指令对应源码信息来计算目标码覆盖率。将源代码抽象为语法树,解析该语法树得到源码函数信息。解析源码函数信息,从中得到源码函数行号信息和源码函数分支行号信息。根据目标码指令对应源码信息、源码函数行号信息和源码函数分支行号信息来计算源码覆盖率。本发明专利技术实现了一种无需插桩代码就能统计覆盖率的方法和装置,能有效避免软件生产工艺中插桩码冗余导致软件漏洞、生成的目标码文件的存储体积增大、以及插桩导致源代码修改频繁的问题,从而提高软件产品的稳定性和可靠性。从而提高软件产品的稳定性和可靠性。从而提高软件产品的稳定性和可靠性。

【技术实现步骤摘要】
代码执行覆盖率统计的方法、装置及计算设备


[0001]本专利技术涉及嵌入式领域,尤其涉及嵌入式系统的代码覆盖率统计问题。

技术介绍

[0002]随着武器装备的复杂度的大幅度增加,运行在装备上的嵌入式系统也越来越复杂,功能迭代越来越多,代码中就可能就会存在部分无用代码,或者在执行过程中无法测试覆盖的分支,从而给软件带来很大的漏洞,严重降低软件的可靠性。因此,需要构建一个能够动态分析代码执行覆盖情况的装置或方法,来检测筛别执行和未执行代码,进行执行代码的覆盖率统计。
[0003]通过覆盖率统计分析,得出嵌入式软件执行覆盖情况,查看软件中有哪函数未执行,函数中哪些分支未执行,然后分析软件中函数或分支没有执行的原因,调整测试方法使尽可能多的函数和函数分支得到测试,从而大大提升软件的可靠性。
[0004]目前大部分覆盖率统计技术都是通过在源代码中插桩的方式来进行统计覆盖率情况,就是在函数入口,分支语句等地方写入特定标志语句,执行后统计标志信息,来计算覆盖率情况,但是这样做会带来很多的问题,如:需要修改源代码,目标码文件增大等问题。一方面增加了人工成本,另一方面由于目标码过大导致无法下载到目标板等一系列问题。
[0005]因此,亟需设计一种无需插桩代码就能统计覆盖率的方法和装置来解决上述问题:该方法和装置能避免软件生产工艺中,插桩码冗余导致软件漏洞,生成的目标码文件的存储体积增大,以及插桩导致源代码修改频繁等问题,从而提高软件产品的稳定性和可靠性。

技术实现思路

[0006]本专利技术之目的在于提供一种代码执行覆盖率统计的方法,实现了一种无需插桩代码就能统计覆盖率的方法和装置,能有效避免软件生产工艺中插桩码冗余导致软件漏洞、生成的目标码文件的存储体积增大、以及插桩导致源代码修改频繁的问题,从而提高软件产品的稳定性和可靠性。
[0007]为实现上述目的,本专利技术提供了一种代码执行覆盖率统计的方法,方法包括:解析目标码的函数信息,从中得到目标码函数指令信息、目标码函数分支指令信息、目标码指令对应源码信息。目标码指令对应源码信息包括函数总语句数和函数内具有对应关系的行号数。根据目标码函数指令信息、目标码函数分支指令信息和目标码指令对应源码信息来计算目标码覆盖率。将源代码抽象为语法树,解析该语法树得到源码函数信息。解析源码函数信息,从中得到源码函数行号信息和源码函数分支行号信息。根据目标码指令对应源码信息、源码函数行号信息和源码函数分支行号信息来计算源码覆盖率。
[0008]作为优选方式,解析目标码的函数信息具体包括:处理反汇编文件信息,提取反汇编文件的指令行号与指令地址的对应信息。根据反汇编文件的指令行号得到与该指令行号对应的源代码中的指令行号。根据源代码中的指令行号动态执行的指令地址得到源代码的
指令执行行号的指令地址。
[0009]作为优选方式,处理反汇编文件信息,提取反汇编文件的行号与指令地址对应信息包括:解析反汇编文件获取所有的函数指令地址信息和跳转指令信息。
[0010]作为优选方式,获取跳转信息包括:获取跳转指令的地址,来确定这个跳转指令是否被执行。获取跳转的地址,来确定是否进入True分支。获取跳转指令的下一条地址,来确定是否执行False分支。
[0011]作为优选方式,解析源码函数信息,从中得到源码函数行号信息和源码函数分支行号信息包括:获取到抽象语法树后提取语法数中代码块的行号。根据代码块的类型来判断代码是否执行,且记录指令执行行号以及该指令执行行号对应的指令地址。代码块的类型包括for代码块、if代码块、else代码块、while代码块、switch代码块、case代码块、default代码块。若代码块的类型为for代码块或while代码块时,如果执行了该分支起始行则判断执行了该分支的False分支,记录False分支相关的指令信息。如果执行了分支块内的代码则判断为执行了该分支的True分支,记录True分支相关的指令信息。
[0012]作为优选方式,通过以下公式计算所需目标码覆盖率。目标码覆盖率包括目标码总语句覆盖率、目标码总分支覆盖率、目标码函数语句覆盖率和/或目标码单个函数分支覆盖率,其中,
[0013][0014][0015][0016][0017]作为优选方式,通过以下公式计算所需源代码覆盖率。源代码覆盖率包括源代码总语句覆盖率、源代码总分支覆盖率、源代码函数语句覆盖率和/或源代码单个函数分支覆盖率,其中,
[0018][0019][0020][0021][0022]作为优选方式,本专利技术提供了一种代码执行覆盖率统计的装置包括:目标码覆盖率统计模块,用于解析目标码的函数信息,从中得到目标码函数指令信息、目标码函数分支指令信息、目标码指令对应源码信息。以及用于根据目标码函数指令信息、目标码函数分支指令信息和目标码指令对应源码信息来计算目标码覆盖率。目标码指令对应源码信息包括函数总语句数和函数内具有对应关系的行号数。源代码覆盖率统计模块,用于将源代码抽象为语法树,解析该语法树得到源码函数信息。解析源码函数信息,从中得到源码函数行号信息和源码函数分支行号信息。根据目标码指令对应源码信息、源码函数行号信息和源码函数分支行号信息来计算源码覆盖率。
[0023]作为优选方式,本专利技术提供了一种计算设备,包括:一个或多个处理器,存储器,一个或多个程序。一个或多个程序存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序包括用于执行根据本专利技术的代码执行覆盖率统计方法的指令。
[0024]作为优选方式,本专利技术提供了一种存储一个或多个程序的计算机可读存储介质,一个或多个程序包括指令,该指令当由计算设备执行时,使得计算设备执行根据本专利技术的代码执行覆盖率统计方法中的方法。
[0025]本专利技术实现了一种无需插桩代码就能统计覆盖率的方法和装置,能有效避免软件生产工艺中插桩码冗余导致软件漏洞、生成的目标码文件的存储体积增大导致无法下载到目标板、以及插桩导致源代码修改频繁的问题,从而提高软件产品的稳定性和可靠性,减少生产软件产品的人工成本。
附图说明
[0026]图1为本专利技术的代码执行覆盖率统计的第一流程示意图。
[0027]图2为本专利技术的代码执行覆盖率统计的执行指令地址存储示意图。
[0028]图3为本专利技术的反汇编文件存储格式示意图。
[0029]图4为本专利技术的传感控制器编程工装的仰视图。
[0030]图5为本专利技术的代码执行覆盖率统计的第二流程示意图。
[0031]图6为本专利技术的代码执行覆盖率统计的第三流程示意图。
[0032]图7为本专利技术的反汇编文件指令格式解析示意图。
[0033]图8为GNU编译工具链输入输出示意图。
[0034]图9仿真平台能够统计运行过的汇编指令示意图。
[0035]图10反汇编文件指令信息存储格式示意图。
具体实施方式
[0036]在下文中,将参照附图描述本专利技术的代码执行覆盖率统计的方法、装置、计算设备及存本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码执行覆盖率统计的方法,其特征在于,所述方法包括:解析目标码的函数信息,从中得到目标码函数指令信息、目标码函数分支指令信息、目标码指令对应源码信息;其中,所述目标码指令对应源码信息包括函数总语句数和函数内具有对应关系的行号数;根据所述目标码函数指令信息、目标码函数分支指令信息和目标码指令对应源码信息来计算目标码覆盖率;将源代码抽象为语法树,解析该语法树得到源码函数信息;解析所述源码函数信息,从中得到源码函数行号信息和源码函数分支行号信息;根据所述目标码指令对应源码信息、源码函数行号信息和源码函数分支行号信息来计算源码覆盖率。2.根据权利要求1所述的代码执行覆盖率统计的方法,其特征在于,解析目标码的函数信息具体包括:处理反汇编文件信息,提取反汇编文件的指令行号与指令地址的对应信息;根据反汇编文件的指令行号得到与该指令行号对应的源代码中的指令行号;以及根据源代码中的指令行号动态执行的指令地址得到源代码的指令执行行号的指令地址。3.根据权利要求2所述的代码执行覆盖率统计的方法,其特征在于,处理反汇编文件信息,提取反汇编文件的行号与指令地址对应信息包括:解析反汇编文件获取所有的函数指令地址信息和跳转指令信息。4.根据权利要求3所述的代码执行覆盖率统计的方法,其特征在于,获取跳转信息包括:获取跳转指令的地址,来确定这个跳转指令是否被执行;获取跳转的地址,来确定是否进入True分支;获取跳转指令的下一条地址,来确定是否执行False分支。5.根据权利要求2所述的代码执行覆盖率统计的方法,其特征在于,解析所述源码函数信息,从中得到源码函数行号信息和源码函数分支行号信息包括:获取到抽象语法树后提取语法数中代码块的行号;根据代码块的类型来判断代码是否执行,且记录指令执行行号以及该指令执行行号对应的指令地址;其中,代码块的类型包括for代码块、if代码块、else代码块、while代码块、switch代码块、case代码块、default代码块;若代码块的类型为for代码块或while代码块时,如果执行了该分支起始行则判断执行了该...

【专利技术属性】
技术研发人员:屠叶苗康烁
申请(专利权)人:浙江迪捷软件科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1