一种保证目标码和源代码一致性的编译链接方法

文档序号:8395750阅读:1782来源:国知局
一种保证目标码和源代码一致性的编译链接方法
【技术领域】
[0001] 本发明属于计算机编译系统领域,具体涉及一种保证目标码和源代码一致性的编 译链接方法。
【背景技术】
[0002] 传统的软件开发过程只着重于源代码的开发和覆盖率测试,但适航软件遵循的 D 〇178B的A级标准不但要求进行源代码的覆盖率测试或分析,也要求进行目标码的覆盖率 测试或分析,这是因为目标码的内容不但与源代码有关,也与编译系统及其配置参数有关, 编译系统可以引入源代码并没有编写的内容到目标码,比如堆栈检查、数组越界检查等,这 些额外内容是否覆盖从源代码的覆盖测试中是看不出来的,而且往往是没有构建合适的测 试用例来测试这部分目标码是否有效,为了航空软件的安全可靠性考虑,A级适航认证要求 能区分出这部分额外的目标码,并且通过测试或者分析的方法来证明其有效性。
[0003] 另外,能形成分支的C语言结构从源代码角度和目标码角度的分支数也会有不 同,从而造成源代码角度的分支全覆盖,在目标码角度却没有全覆盖。
[0004] 为了达到目标码的全覆盖,可以考虑单独再做目标码的覆盖率测试,但这样的方 法没有充分利用源代码覆盖率测试的结果,会造成巨大的额外工作量,而且由于目标码的 非易读性,单独的分析未覆盖部分、研究增加测试用例来增加覆盖率等工作的难度也比较 商。

【发明内容】

[0005] 本发明的目的:针对传统的软件测试方法不能保证目标码和源代码最终是一致的 这个问题,提供一种保证目标码和源代码一致性的编译链接方法。
[0006] 本发明的技术方案:
[0007] -种保证目标码和源代码一致性的编译链接方法,其特殊之处在于:包括以下步 骤:
[0008] 1】定制编译参数:
[0009] 1. 1】在源代码编译前打开GNU编译器的参数说明文件;
[0010] 1. 2】分析可能会产生额外代码的编译参数,集中关闭该类编译参数;
[0011] 1. 3】关闭编译系统对代码的优化操作选项;
[0012] 2】验证编译参数:
[0013] 通过分析常用C语言基本结构及其编译所形成的目标码,验证步骤1】所定制的编 译参数是否引入额外代码;如果引入,则关闭或修改相应的编译参数,如果没有引入,则无 需关闭或修改,确定最终的编译参数;
[0014] 3】定制链接参数;
[0015] 4】验证链接参数:
[0016] 关闭代码优化功能,验证所定制的链接参数没有引入额外的库文件;如果引入,则 关闭或修改相应的链接参数,如果没有引入,则无需关闭或修改,确定最终的链接参数;
[0017] 5】生成目标码:
[0018]根据步骤2】确定的最终的编译参数以及4】确定的最终的链接参数,对源代码进 行编译链接,生成目标码;
[0019] 6】对源代码进行模式匹配:
[0020] 对于匹配成功的源代码,不再进行一致性分析;对于匹配不成功的源代码,通过目 标码覆盖率测试,分析证明目标码和源代码的一致性。
[0021] 上述步骤2还包括以下步骤:将确定的最终的编译参数写进Makefile文件。
[0022] 将生成汇编文件的命令、生成.1st列表文件的命令写进Makefile文件。
[0023] 上述述步骤4还包括以下步骤:将链接参数写入Makefile文件。
[0024] 本发明具有的优点效果:
[0025] 该发明通过对编译系统参数进行定制,可以使编译系统对源码进行编译时不产生 任何的额外代码,做到目标码的可知性和确定性,通过软件覆盖率测试或者分析可以将所 有的目标码都得到验证,充分利用源代码覆盖率测试的结果,达到目标码的全覆盖,以保障 保证航空软件的安全性和可靠性,最大限度的保证航空软件的安全性和可靠性。
【附图说明】
[0026] 图1是Tornado环境下的GNU编译过程。
【具体实施方式】
[0027] 目标码覆盖率测试主要是因为目标码存在额外功能代码和分支,如果能尽量减少 或预知额外代码和分支出现的位置,则能大大减少目标码覆盖率测试或分析的工作。
[0028] 通过编译系统的参数定制及操作过程,尽量减少编译系统额外引入的额外代码。 分析常用C语言结构所形成的目标码,分析其功能或分支与源代码的一致性,对额外代码 和额外分支进行区分,集中统一的给出不一致情况下的处理方法。采用模式匹配的方法对 源代码进行扫描,对大部分已证语言结构部分则无需再做目标码覆盖率测试。
[0029] 该方法用于适航机载AFDX交换机软件开发和软件测试过程中,能够保证AFDX交 换机软件目标码和源代码的一致性。
[0030] 本发明提出了一种通过对编译系统参数定制及编译过程控制和分析常用C语言 结构所形成的目标码,将大部分源代码的额外目标码数量减少到零,额外分支做出统一的 分析和测试处理,从而大大减少需要做独立目标码覆盖测试的代码范围,减少工作量并提 高软件的可靠性和安全性。
[0031] 分析常用C语言结构所形成的目标码,分析其功能或分支与源代码的一致性,对 额外代码和额外分支进行区分,集中统一的给出不一致情况下的处理方法。该部分可以采 用模式匹配的方法来进行分析和处理。
[0032] 编译过程控制,在编译系统进行编译的过程中为了达到执行目标码与汇编目标码 的完全一致,在链接的过程中对链接过程进行严格控制,不能链接额外的库,并且把代码优 化功能全部关闭。
[0033] 定制编译参数:
[0034] 在源代码编译前打开GNU编译器的参数说明文件,根据GNU编译器的参数说明文 件,集中关闭可能会产生额外代码的参数,为了方便对目标码进行分析,将编译系统对代码 的优化操作选项也关闭,列表如表1所示,通过编译系统参数定制及编译系统对源代码优 化功能的关闭可以保证编译系统在对源代码编译过程中不引入额外代码,同时编译产生的 目标码可读性更强。
[0035] 表1编译优化选项设置
[0036]
【主权项】
1. 一种保证目标码和源代码一致性的编译链接方法,其特征在于:包括w下步骤: 1】定制编译参数: 1. 1】在源代码编译前打开GNU编译器的参数说明文件; 1. 2】分析可能会产生额外代码的编译参数,集中关闭该类编译参数; 1. 3】关闭编译系统对代码的优化操作选项; 2】验证编译参数: 通过分析常用C语言基本结构及其编译所形成的目标码,验证步骤1】所定制的编译参 数是否引入额外代码;如果引入,则关闭或修改相应的编译参数,如果没有引入,则无需关 闭或修改,确定最终的编译参数; 3】定制链接参数; 4】验证链接参数: 关闭代码优化功能,验证所定制的链接参数没有引入额外的库文件;如果引入,则关闭 或修改相应的链接参数,如果没有引入,则无需关闭或修改,确定最终的链接参数; 5】生成目标码: 根据步骤2】确定的最终的编译参数W及4】确定的最终的链接参数,对源代码进行编 译链接,生成目标码; 6】对源代码进行模式匹配: 对于匹配成功的源代码,不再进行一致性分析;对于匹配不成功的源代码,通过目标码 覆盖率测试,分析证明目标码和源代码的一致性。
2. 根据权利要求1所述的一种保证目标码和源代码一致性的编译链接方法,其特征在 于:所述步骤2还包括W下步骤:将确定的最终的编译参数写进Makefile文件。
3. 根据权利要求2所述的一种保证目标码和源代码一致性的编译链接方法,其特征在 于:将生成汇编文件的命令、生成.1st列表文件的命令写进Makefile文件。
4. 根据权利要求3所述的一种保证目标码和源代码一致性的编译链接方法,其特征在 于:所述步骤4还包括W下步骤:将链接参数写入Makefile文件。
【专利摘要】本发明涉及一种保证目标码和源代码一致性的编译链接方法,充分利用源代码覆盖率测试的结果,达到目标码的全覆盖,以保障保证航空软件的安全性和可靠性。本发明定制编译参数,分析C语言基本结构及其编译所形成的目标码,证明定制的编译参数没有引入额外代码;定制链接参数,关闭代码优化功能,对源代码进行编译链接,生成目标码;目标码分析,对源代码进行模式匹配,未匹配上的部分进行目标码覆盖率测试,分析证明目标码和源代码的一致性。本发明充分利用源代码覆盖率测试的结果,达到目标码的全覆盖,以保障保证航空软件的安全性和可靠性。
【IPC分类】G06F9-45
【公开号】CN104714829
【申请号】CN201310690027
【发明人】牛文生, 牟明, 田莉蓉, 黄韬, 王红春, 邱征
【申请人】中国航空工业集团公司第六三一研究所
【公开日】2015年6月17日
【申请日】2013年12月15日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1