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

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

1 MISRA C

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

1.1 MISRA C:2004编程规范

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

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

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

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

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二

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

  1. mysql++编程规范_建议收藏 - 专业的MySQL开发规范

    为了项目的稳定,代码的高效,管理的便捷,在开发团队内部会制定各种各样的规范 这里分享一份我们定义的MySQL开发规范,欢迎交流拍砖 数据库对象命名规范 数据库对象 命名规范的对象是指数据库SCHEMA ...

  2. 通信线路工程验收规范_一级建造师市政涉及到的相关规范汇总

    第一章:道路 施工规范:<城镇道路工程施工与质量验收规范>CJJ 1-2008 辅助规范:<城市道路工程设计规范>CJJ 37-2012(2016版) <土的工程分类标准 ...

  3. java类的命名规范_一篇搞定Java命名规范

    好的代码本身就是注释,减少不必要的注释 驼峰命名规则 大驼峰命名 类名全部使用大驼峰 ServiceDiscovery.ServiceInstance.LruCacheFactory 小驼峰命名 方法 ...

  4. 代码管理规范_微服务架构下代码管理规范

    当下对于代码的管理,主要采用GitLab或GitHub,然而使用git进行代码管理过程中,一般有四种开发模式,分别为主干开发主干发布,主干开发分支发布,分支开发主干发布,分支开发分支发布.四种开发模式 ...

  5. java类的命名规范_浅谈Java中的命名规范

    现代软件架构的复杂性需要协同开发完成,如何高效地协同呢? 答案是:制定一整套统一的规范. 无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全,试想如果没 ...

  6. python大型项目开发规范_大型项目CMakeLIsts.txt的编写规范

    1.Very simple executable PROJECT( helloworld )   # 非必需 SET( hello_SRCS hello.cpp ) ADD_EXECUTABLE( h ...

  7. python软件测试脚本_基于Python的实时嵌入式软件测试脚本

    摘 要:计算机技术应用的不断普及,使得实时嵌入式软件在航空.航天.工业控制.交通.医疗和军事安全等诸多领域发挥着愈来愈重要的作用.不难看出,这些领域对软件的可靠性有很严格的要求,因为该领域的软件一旦失 ...

  8. pep8 python 编码规范_编码规范的重要性

    很多去 Google 参观的人,在用完洗手间后都有这样的疑惑,马桶前面的门上怎么会贴着 Python 编码规范?要知道,Google 对编码规范的要求极其严格,这也能从侧面说明编码规范的重要性. 对于 ...

  9. 嵌入式软件测试——1.简介

    #百科介绍 一般来说,软件测试有7个基本阶段,即单元或模块测试.集成测试.外部功能测试.回归测试.系统测试.验收测试.安装测试.嵌入式软件测试在4个阶段上进行,即模块测试.集成测试.系统测试.硬件/软 ...

最新文章

  1. mysql密码设置 alert_MySQL用户、权限及密码操作
  2. zabbix服务器没有.pid文件,PID file /run/zabbix/zabbix_server.pid not readable (yet?) after start. 报错解决...
  3. 爬虫爬取在线小说阅读网站详解
  4. BERT源码分析(PART II)
  5. 某度网盘转存限制500个文件?这个软件帮你搞定!
  6. [译] APT分析报告:10.Lazarus以ThreatNeedle家族攻击工业事件还原(BMP图片隐藏RAT)
  7. 边缘计算精华问答 | 边缘计算有哪些应用场景?
  8. org.jeecgframework.core.common.exception.MyExceptionHandler]java.lang.NullPointerException
  9. 《Java从入门到放弃》JavaSE入门篇:面向对象语法二(入门版)
  10. English Through Movie
  11. arc和非arc完美支持
  12. YUI Compressor Maven Plugin
  13. 第十七届全国大学生智能车竞赛华南赛区报名信息
  14. 诺德舞台电钢琴采样-Nord Stage 3 Ultimate Stage Pianos
  15. 电脑控制所有手机的两种方式
  16. 十年程序人生——黎活明给程序员的忠告
  17. SAP培训行业权威评测---51sap培训评测网(www.51sap.net)
  18. spectral学习记录
  19. 计算机画分段函数,《几何画板》:绘制分段函数的图像 -电脑资料
  20. STM32FSMC扩展SRAM

热门文章

  1. linux 用户管理 指令,Linux 用户管理常用命令
  2. mysql cluster常见问题访问_MySQL Cluster的常见问题
  3. oracle怎么执行存储过程_分享一个分析Oracle存储过程性能小技巧
  4. HNU 实验五 拜访朋友
  5. 使用python的笔记
  6. 目标检测——数据清洗的学习笔记
  7. CNN————激活可能性小的神经元不代表这个神经元的用处小
  8. 机器学习中二分类逻辑回归的学习笔记
  9. 【已解决】Windows Ink中没有便签怎么办
  10. python 取列表偶数和奇数位置的值