MISRA C: 2004 软件静态测试(代码审查)规范
MISRA C: 2004网络上的资料较多,这里只整理了代码审查过程中的一种实践。MISRA C:2012的内容请参考其它系列经验。
工具/原料
MISRA C: 2004
背离的规则
1、2.2(强制) 源代码应该使用 /*…*/ 类型的注释背离原因:在代码中大量使用了//类型的注释,S15项目选择背离,将作为后续开发的注释规范
2、5.5(建议拘七呷憎) 具有静态存储期的对象或函数标识符不能重用背离原因:大量重用了i、j、temp这样的变量名,将作为后续软件开发建议性的命名规范(详细见变量命名规则)
3、5.7 (建议) 不能重用标识符名字背离原因:同5.5
4、6.3(建议) 应该使用指示了大小和符号的typedef以代替基本类型背离原因:目前使用CodeWorriorIDE标准类型,以达到在不同版本开发环境的类型替代的统一
5、8.9(强制) 具有外部链接的标识符应该具有准确的外部定义背离原因:实际已遵循本条规则,然而understand软件不识别条件编译的类型预定义
6、1.罕铞泱殳 14.7 (强制) 一个函数在其结尾应该有单一的退出点背离原因:本条规则主要针对有多个退出点的的函数,采取了背离方式。后续尝试降低函数的复杂度,可以作为一个可检查和实现的方法。
7、18.4 (强制) 不要使用联合背离原因:MISRA-C-: 2004规则描述,在使用CAN格式对变量进行封装处理不算背离规则
编程规范修改举例
1、2.1(强制) 汇编语言应该被封装并隔离
2、5.4(强制) 标签tag名称必须是唯一的标识符
3、6.4(强制) 位域只能被定义为unsigned int或singed int类型
4、14.1 (强制) 不能有不可到达unreachable的代码
5、14.10 (强制) 所有的if ... else if结构应该由else子句结束