1. 研究背景
1.1零插桩目标码覆盖率统计技术
随着武器装备的复杂度的大幅度增加,运行在装备上的嵌入式系统也越来越复杂,功能迭代越来越多,代码中就可能就会存在部分无用代码,或者在执行过程中无法测试覆盖的分支,这可能就会给软件带来很大的漏洞,严重降低软件的可靠性。因此,需要构建一个能够动态分析代码执行覆盖情况的能力,来检测代码中未执行覆盖情况。
通过覆盖率统计分析,得出嵌入式软件执行覆盖情况,查看软件中有那些函数未执行,函数中哪些分支未执行,由此分析软件中函数为什么没有执行,函数中分支为什么没有执行,调整测试方法使尽可能多的函数和函数分支得到测试,大大提升软件的可靠性。
在覆盖率分析时需要分析覆盖率、指令函数覆盖率、指令函数分支覆盖率、源代码行覆盖率、源代码函数覆盖率、源代码函数分支覆盖率。
目前大部分覆盖率统计技术都是通过在源代码中插桩的方式来进行统计覆盖率情况,就是在函数入口,分支语句等地方写入特定标志语句,执行后统计标志信息,来计算覆盖率情况,但是这样做会带来很多的额外成本,如:需要修改源代码,目标码文件增大等问题。这就增加了人工成本,或者由于目标码过大无法下载到目标板等等问题。为解决这些问题,我们需要实现一个不需要插桩就能统计覆盖率的技术。
2. 关键技术
2.1零插桩目标码覆盖率统计技术
(1)零插桩技术
零插桩统计覆盖率需要分析的是嵌入式软件的基本特性和执行特性。在不插桩的前提下,使用反汇编工具生成嵌入式软件目标码的反汇编文件,通过分析反汇编文件获取想要的基础信息,如函数指令信息,地址对应源码行号信息等。在与仿真验证工具配合获取执行PC地址信息,分析嵌入式软件的执行覆盖情况,实现零插桩分析覆盖率的目的。
(2)多架构嵌入式软件目标码分析技术
针对不同架构,如:ARM、SPARC、DSP、PPC等构建相应的嵌入式软件目标码分析技术,能够准确分析嵌入式软件目标码的反汇编文件中的函数名称、函数所有的指令地址信息、函数中分支指令的信息,分支指令的PC地址,分支指令的跳转地址,分支指令的下一条地址等信息、PC指令地址所对应源码的行号信息等。通过这些基础信息,与执行信息配合实现统计覆盖率信息。
(3)数据缓存技术
反汇编和数据分析都是一个比较耗时的阶段,对于大型嵌入式软件可能会有几十万甚至上百万的指令数量级,每次进行分析都会耗费一定的时间,为减少时间上的浪费,提出数据缓存技术,在执行的目标码不变的情况下,尽可能的存储下所有固定分析数据,如目标码的反汇编文件,反汇编文件分析结果,源码文件分析结果等。都可以存储下来,但是在目标码文件修改后,所有缓存文件都需要进行相应更新。
3. 技术途径
3.1零插桩目标码覆盖率统计技术
(1) 零插桩技术
零插桩技术主要需要分析嵌入