APP下载

民用飞机A级别机载软件项目源代码到目标代码追溯性分析研究

2016-09-29

科技视界 2016年20期
关键词:源代码

童岳威 刘建方

【摘 要】机载软件在某些特定情况下应该分析源代码和目标代码之间的对应关系,RTCA/DO-178B第6.4.4.2节指出:机载软件结构覆盖率分析可以在源代码层级进行,如果软件为A级别并且编译过程中生成了无法追溯到源代码的目标代码,则应该在目标代码层级完成额外的验证工作以保证这些目标代码的正确性。因此,对于A级别软件,如果编译器生成了无法追溯到源代码的目标代码,那么除了完成源代码层级结构覆盖率分析,还应该完成源代码和目标代码之间的追溯性分析,并对不能追溯到源代码的目标代码进行额外的验证。本文研究了源代码到目标代码的追溯性分析方法。

【关键词】机载软件;源代码;目标代码;追溯性分析;结构覆盖率

0 引言

随着电子计算机技术快速地发展,机载软件在民用飞机上的使用越来越广泛,并且扮演着日益关键的角色。许多高安全关键性的机载系统都由机载软件实现主要的控制、监控和维护功能,并且通过系统初步安全性分析过程为这些机载软件分配相应的IDAL等级。对于IDAL级别为A、B和C级的机载软件,RTCA/DO-178B要求除了满足基于需求的测试覆盖率分析外,还需要完成结构覆盖率分析,结构覆盖率分析用于确定基于需求的测试未覆盖到的代码结构,结构覆盖率分析目的的详细信息可参考RTCA/DO-248B FAQ#43。

RTCA/DO-178B并没有限制在源代码层级或者目标代码层级来完成机载软件结构覆盖率分析工作,但在第6.4.4.2节指出:机载软件结构覆盖率分析可以在源代码层级进行,如果软件为A级别并且编译过程中生成了无法追溯到源代码的目标代码,则应该在目标代码层级完成额外的验证工作以保证这些目标代码的正确性。

机载软件在编译过程中会生成额外的目标代码,比如初始化目标代码、内置错误探测目标代码、异常处理目标代码等等。因此,对于A级别软件,如果在源代码层级完成结构覆盖率分析,还应该分析源代码和目标代码之间的追溯性,并对不能追溯到源代码的目标代码进行额外的验证。

本文通过分析机载软件编译过程以及目标代码生成的影响因素研究了源代码到目标代码的追溯性分析方法。

1 机载软件编译过程

机载软件通常采用“高级语言”编写,如Ada、C、C++等编程语言,编译器将“高级语言”源代码翻译成“低级语言”汇编代码的过程称为“编译过程”。典型的编译过程如图1所示,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等过程。

1)词法分析:对输入的源程序字符串进行扫描和分解,从而识别出一个个符号,并转化成机器比较容易使用的内码形式;

2)语法分析:在词法分析的基础上将符号序列分解成各类语法短语,如程序、语句、表达式等;

3)语义分析:语义分析检查源程序有无语义错误,为代码生成阶段收集类型信息;

4)中间代码生成:在语法分析和语义分析后,将源程序翻译成中间代码。一般而言,中间代码是独立于具体硬件的记号系统,在某种程度上解决计算机的指令形式,或者比较容易转化为计算机的机器指令;

5)代码优化:代码优化过程是对前阶段产生的中间代码进行变换或改造,目的是使生成的目标代码更为高效,即节省时间和空间,代码优化遵循等价变换规则;

6)目标代码生成:目标代码生成过程是把中间代码编译成特定机器上的绝对指令代码或可重定位的指令代码或汇编代码,这个阶段的工作涉及到硬件系统功能部件的实现、机器指令的选择、各种数据类型变量的存储空间分配以及寄存器和后援寄存器的调度。

在大多数情况下机载软件是运行在嵌入式平台上的。由于性能和资源的限制,嵌入式软件大多数在PC等上位机环境中开发,然后加载到嵌入式目标计算中运行。这种情况下,就要用到交叉编译。简单而言,交叉编译就是在一种环境中编译生成能够在另一种环境中运行的目标代码。

因为编译生成的目标代码与硬件环境是紧密相关的,因此将相同的源代码编译为在不同处理器上运行的目标代码时,需要分别对这些目标代码进行追溯性分析。

2 目标代码生成的影响因素

在将源代码编译成目标代码的过程中,应该考虑影响最终生成目标代码的因素,这些因素会影响到源代码和目标代码之间追溯性,包括以下几点:

1)目标处理器:同一系列的新处理器通常使用向上兼容的指令集,但是不同系列或者不同厂商的处理器可能采用不同的指令集。由于目标代码与运行的处理器紧密相关,所以将相同源代码经过编译在不同处理器上运行,可能生成不同的目标代码;

2)编译器选项:对于编译器进行不同的选项设置,可能影响编译的执行过程,进而影响最终生成的目标代码;

3)代码优化层次:代码优化能够提高目标代码的执行效率,但是深层次的优化会对源代码进行重构,从而使源代码和目标代码的追溯关系难以确定;

4)编程语言特征:有些编程语言的特性导致部分目标代码很难发现,例如寄存器使用优化,循环展开优化,C++中多态特性使用等等。

可以看出,影响最终目标代码生成的影响因素有许多,常见的不能追溯到源代码的目标代码包括:初始化代码,内置错误探测,异常处理,数组边界检查等等。

3 源代码和目标代码追溯性分析方法

根据RTCA/DO-178B的要求,如果A级别软件在源代码层级完成结构覆盖率分析,而且编译器生成了无法直接追溯到源代码的目标代码,那么应该对这些目标代码进行额外的验证。因此,为了识别出不能追溯到源代码的目标代码,应该对源代码和目标代码之间进行追溯性分析。通常而言,源代码和目标代码的追溯分析可以采用以下几种方法:

1)全面目标代码分析:对于规模相对较小的机载软件,可以将源代码编译为汇编目标代码,然后通过人工分析的方法来识别出哪些目标代码不是运行源代码所必须的,并对追溯不到源代码的目标代码进行额外的验证以确保其正确性。

2)对源代码结构最小子集进行分析:该方法的主要思路是按照软件编码标准的约束编写样例代码,然后进行编译,并通过人工分析的方法来分析样例代码的目标代码和源代码的追溯关系。在实际软件研制过程中,应该严格遵循软件编码标准,并通过源代码结构最小子集到目标代码追溯性分析来满足机载软件源代码到目标代码的追溯性要求。相对于全面代码分析而言,源代码结构最小子集分析方法的追溯性分析工作量大大减少,而且分析报告可以在多个机载软件项目上重复使用。源代码结构最小子集分析方法如图2所示。

图2 源代码结构最小子集分析法

具体过程如下:

(1)编制机载软件编码标准,对软件编码所使用的编程语言、规则、复杂度等进行约束和限制;

(2)按照机载软件编码标准中的约束和限制提取软件源代码结构最小子集,源代码结构是编程语言最基本的组成部分,如加减法等函数结构、循环/比较等逻辑结构等等;

(3)将机载软件项目源代码和源代码结构最小子集进行比较,判定源代码结构最小子集是否覆盖了机载软件项目所有源代码结构;

(4)按照源代码结构最小子集编写样例代码;

(5)在与实际机载软件项目相同的编译环境下使用相同的编译器、设置相同的编译器选项编译样例代码,并生成目标代码;

(6)对样例源代码和样例目标代码做追溯性分析;

(7)生成追溯性分析报告,识别出不能追溯到样例源代码的样例目标代码。

3)基于目标代码的结构覆盖分析:在目标代码层级进行结构覆盖分析的情况下,RTCA/DO-178B不再要求进行源代码到目标代码的追溯性分析。但是,采用该方法时,需要在目标代码层级满足RTCA/DO-178B对A级别软件结构覆盖率要求,包括语句覆盖、决策覆盖、MC/DC覆盖和数据耦合/控制耦合覆盖。

源代码和目标代码追溯性分析可以用于识别出哪些目标代码不能追溯到源代码,但不能用来表明这些额外的目标代码的正确性。对于这些额外的目标代码,应该通过验证来确认它们正确地运行并且不会对机载软件引入异常行为。RTCA/DO-178B中定义了验证方法可以是评审、分析和测试,因此第6.4.4.2节中对不能追溯到源代码的目标代码的验证并不等同于额外的目标代码应满足A级别机载软件结构覆盖率分析的要求。

4 总结

本文分析了机载软件编译过程及生成目标代码的影响因素,并研究了民用飞机A级别机载软件项目源代码到目标代码追溯性分析方法。随着机载软件在民用飞机高安全性系统上的使用越来越广泛,A级别机载软件广泛分布于现代民用飞机飞控、刹车、起落架、显示等系统中,为了满足RTCA/DO-178B第6.4.4.2节对于A级别机载软件结构覆盖率的要求,需要对机载软件源代码到目标代码追溯性进行研究。

【参考文献】

[1]RTCA. DO-178B Software considerations in airborne systems and equipment certification[J]. Washington DC, 1992.

[2]RTCA. DO-248B Final report for clarification of DO-178B software considerations in airborne systems and equipment certification[J]. Washington DC, 2001.

猜你喜欢

源代码
基于TXL的源代码插桩技术研究
软件安全测试技术和工具的研究
基于创客空间的高校图书馆服务体系构建的策略
《月球》与《源代码》浅析
软件反向工程的法律规制
常见源代码安全漏洞分析与研究
源代码安全漏洞检测方法探讨
解读当代写意油画的源代码
保护好自己的“源代码”
解密别克安全“源代码”