赞
踩
众所周知,在制造业(尤其是汽车制造业)非常注重代码安全。MISRA-C 就是一个汽车制造业嵌入式 C 编码标准,最早由汽车工业软件可靠性联合会(Motor Industry Software Reliability Association,简称 MISRA)于 1998 年发布。2004 年发布了第二版的 MISRA C,即《MISRA-C-:2004 Guidelines for the use of the C language in critical systems》,是目前工业界常用的 C 语言编码规范。MISRA-C-:2004 规则分为 21 类,覆盖从「开发环境」到「运行期错误」,包含 141 项规则,其中 121 项是强制要求,其余的 20 项是推荐使用的规则。
本文以产品安全为目标,提炼部分 MISRA-C 语言的编码规范,提高企业级产品的代码可靠性、可读性和可移植性。
关键词 | 解释 |
---|---|
C 语言 | 一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。 |
MISRA-C | 汽车制造业嵌入式C编码标准。 |
软件工程师编码时,应该根据标准《MISRA-C-:2004》的规则进行编码,在设计过程中构筑软件质量。
1.1 代码质量保证优先原则
1.2 使用第三方提供的软件开发工具包或控件时,要注意以下几点:
在同一项目组或产品组内,要有一套统一的为集成测试与系统联调准备的调测开关及相应打印函数,并且要有详细的说明。
在同一项目组或产品组内,调测打印出的信息串的格式要有统一的形式。信息串中至少要有所在模块名(或源文件名)及行号。
编程的同时要为单元测试选择恰当的测试点,并仔细构造测试代码、测试用例,同时给出明确的注释说明。测试代码部分应作为(模块中的)一个子模块,以方便测试代码在模块中的安装与拆卸(通过调测开关)。
在进行集成测试/系统联调之前,要构造好测试环境、测试项目及测试用例,同时仔细分析并优化测试用例,以提高测试效率。
在软件系统中设置与取消有关测试手段,不能对软件实现的功能等产生影响。
说明:即有测试代码的软件和关掉测试代码的软件,在功能行为上应一致。
用调测开关来切换软件的 DEBUG 版和正式版,而不要同时存在正式版本和 DEBUG 版本的不同源文件,以减少维护的难度。
软件的 DEBUG 版本和发行版本应该统一维护,不允许分家,并且要时刻注意保证两个版本在实现功能上的一致性。
在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调测开关及相应测试代码如打印函数等。
所有代码都必须遵照 ISO 9899:1990“Programming languages - C”,由 ISO/IEC 9899/COR1:1995,ISO/IEC 9899/AMD1:1995,和 ISO/IEC9899/COR2:1996 修订。
#include
预处理指令应该跟随 <filename>
或 "filename"
序列。#undef
。#
或 ##
的操作数。#ifdef
和 #ifndef
指令及 defined()
操作符。#
或 ##
预处理器操作符。#
或 ##
预处理器操作符。defined
预处理操作符只能使用两种标准形式之一。#else
、#elif
和 #endif
预处理指令应该同与它们相关的 #if
或 #ifdef
指令放在相同的文件中。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。