c++编码规范_汽车嵌入式软件测试——嵌入式软件标准及规范简介

以前接手过一个软件项目,翻开模型和代码之后的几天,把模型开发人员问候了一个遍。此处略过若干字......不禁要问,建模规范、编码规范不是很好吗?为什么不用?制定相关规范的出发点就在于保证每个人能在短时间内理解他人的设计思路。但在实际使用时候,必然会增加工作量,到底这些规范都说了啥?怎样规范模型和代码质量的?请往下看

e8cfcec7cfb473764e3cdcb9badda301.png

在汽车嵌入式软件开发中,采用MISRA C规范作为代码级别规范,模型级别的规范则采用Mathworks提出的建模规范MAAB(MathWorks Automotive Advisory Board)。

1 MISRA C

在第一章中,我们介绍了在嵌入式系统中大多数软件采用C/C++语言编写,但是C/C++语言是弱类型语言,编写的程序最大的问题是可靠性很难保证。目前避免C/C++语言中不安全因素的普遍做法是遵照已制定的编码标准(规范)或从中选定的安全子集来编写程序,其中MISRA C是欧洲汽车工业针对嵌入式C语言的应用所编写的安全子集,经多年发展,MISRA C已经从汽车行业编码规范发展成为跨行业的编码规范,成为世界范围内广泛使用的C语言编码规范。

6e3ada1746580a3317d94d0dde2de67e.png

1.1 MISRA C:2004编程规范

在MISRA C:2004中共有必要规则(Required Rules)121条,推荐规则(Advisory Rules)20条。任何符合MISRA C:2003编程规范的代码都应该严格遵循121条必要规则的要求,并应该在条件允许的情况下尽可能符合20条推荐规则。

MISRA C:2004将其141条规则分为21个类别,每一条规则对应一条编程准则。

d088e2f0a8645b13c00ce131bc2d1805.png

#建议规则:是非严格遵守的规则,是对程序员的强烈建议。

#必要规则:是必须遵守的规则,是对程序员的强制要求

1.2 MISRA C:2012 编程规范

对于那些遵循MISRA C:2004开发的代码,MISRA C:2012对其造成的影响是极为有限的。

MISRA C:2012的文档看起来比MISRA C:2004要大得多,但实际上,编码规则总数并没有增加多少:MISRA C:2004包含了141条规则,而MISRA C:2012包含了143条规则和16条指令。MISRA C:2012的文档之所以大了许多,在于其每条编码规则的体积都“变大”了:

  • 更精确的规则描述

每条定义都包含如下内容: - 解释: 阐述本编码规则的具体要求;

- 原理:解释本编码规则的必要性;

- 例外:列举不适用本编码规则的特殊情况;

- 举例:从代码遵从本编码规则和代码不遵从本编码规则两个角度进行举例。

  • 增加了规则和指令的区别

指令:仅仅依靠源代码分析,无法对“指令”进行合规性判定,往往需要开发人员提供更多的信息,如设计文档和要求说明。静态代码检测工具可以判定代码符合“指令”,但对于代码不符合“指令”的情况,静态代码检测工具给出的判定结果可能千差万别。

规则:仅仅依靠源代码分析,就可以对“规则”进行合规性判定,不需要开发人员提供更多的信息。所有的静态代码检测工具都应具对“规则”进行合规性判定的能力。

  • 增加了系统规则和单一翻译单元规则之间的区别

编码规则执行的难易程度有着很大的差别。最简单的规则(如“不得使用八进制常量”)可以通过简单的语句语法分析进行判定。然而,很多编码规则的判定,需要一条控制语句、一个完整的功能、一个完整的翻译单元、甚至一个项目的整个代码库的支撑才能进行判定。

在MISRA C:2012中,每条编码规则都被划分为“系统规则”或“单一翻译单元规则”,用来反映编码规则的执行范围。这两者之间的区别如下:

- 单一翻译单元无法进行系统规则的合规性判定。

- 进行系统规则的合规性判定,往往意味着更高的要求及更多的时间。

  • 增加了可判断性内容

编码规则的另一个重要属性是可判定性。对于一些简单的编码规则,只需进行简单的语法分析即可实现判定;而对于某些复杂的规则,则需要深入地分析代码的结构和语义。

对于一些编码规则,其本质是“不可判定的”——不论静态代码检测工具进行多么深入的分析,都无法判定代码的合规性;相反,当某个编码规则被违反,任何工具都可判定且不会误报,那么该规则被认为是“可判定的”。换句话说,任何工具对于“可判定的”编码规则,只会给出两个可能的答案:

- Yes – 此处违反该规则;

- No –此处没有违反该规则;

MISRAC:2012中,所有的规则都被划分为“可判定的”和“不可判定的”两类。共计143条编码规则,其中28条为“不可判定的”。当一个编码规则为“不可判定的”,那么对于这条规则,永远不能保证其合规性,工具可能会给出第三个答案:

- 无法保证合规性检查结果的准确性。

2 MAAB

关于MAAB建模规范在先前的专题中已有详细的介绍,此处不再赘述,可参考之前的专题。申老shi学习笔记--MAAB控制算法建模规范介绍申老shi学习笔记--MAAB建模规范之命名规则一申老shi学习笔记--MAAB建模规范之命名规则二申老shi学习笔记--MAAB建模规范之Simulink一申老shi学习笔记--MAAB建模规范之Simulink二申老shi学习笔记--MAAB建模规范之Simulink三申老shi学习笔记--MAAB建模规范之Simulink四申老shi学习笔记--MAAB建模规范之Signals一申老shi学习笔记--MAAB建模规范之Block Usage一申老shi学习笔记--MAAB建模规范之Block Usage二申老shi学习笔记--MAAB建模规范之Block Parameters一申老shi学习笔记--MAAB建模规范之Simulink Patterns一申老shi学习笔记--MAAB建模规范之Simulink Patterns二

f174fe19402341c3927b8f3a64b18ec6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值