当飞鸟遇上游鱼,当溪流遇上江海,当北京遇上西雅图,当你遇上Mr/Ms.Right…,“当”是一切美好的开端,但今天,咱先不聊自然也不聊爱情,聊一聊当C++遇上AUTOSAR编码规范,会有一段怎样的故事?

AUTOSAR与静态代码测试

汽车界的同仁们都知晓,AUTOSAR(AUTomotive Open System ARchitecture)组织拥有超过180个会员,涵盖了汽车整车厂、零部件供应商、工具供应商、半导体芯片供应商等,这样的强强联合,开发了一套针对汽车ECU的开放式软件体系架构,实现了应用层和底层的解耦,标准化软件基本元素、接口及总线系统,使汽车行业能够在控制成本的同时,更好地应对系统复杂度不断增长的情况。

AUTOSAR组织开发的第一个开放式架构称为“Classic Platform”,该架构的开发以C代码为主体,在做代码静态测试时,应用MISRA C 2012足以。但随着智能化的普及,为了满足车联网及无人驾驶技术的发展需求,AUTOSAR组织推出新架构“Adaptive Platform”,Adaptive Platform的相关API接口由C++语言进行开发。那么问题来了,我们是否可以直接遵循MISRA C++编码规范?

MISRA C++编码规范

许多安全关键性系统开发者结合已经建立的编码规范,典型如MISRA C++2008,来使用C++03语言标准,这无可厚非,MISRA C++2008的制定基础即为C++03。但C语言在持续更新,编译器也随之而变,这就意味着帮助开发人员编写安全可靠的代码的编码标准同样需要持续更新以保证新语言特性的最佳实践应用。

为此在2017年,AUTOSAR组织基于C++14标准发布了新的编码准则——AUTOSAR Coding Guidelines,这一准则是MISRA C++2008的延伸,它为应用现代C++语言编写安全和任务关键型嵌入式系统提供了有效指导。

其实AUTOSAR编码标准与MISRA C++2008存在高度的共性,在处理新语言特性的使用上存在少量差异,所以如果我们采用了合适的自动代码静态分析方案,完成MISRA C++2008到AUTOSAR Coding Guidelines的迁移并不是一件难事。

AUTOSAR Coding Guidelines和现有编码规范的区别和联系

这应该是广大开发人员比较关心的一部分,用两个成语来概括AUTOSAR Coding Guidelines:兼容并蓄、独树一帜。因为它涉及了一系列已有的编程标准,又根据Adaptive Platform制定了独有的规则。2018年3月,AUTOSAR Coding Guidelines发布了402条规则,其中138条直接取自MISRA C++2008。

此外AUTOSAR还引用了如下编码标准:

  • Joint Strike Fighter Air Vehicle C++ coding standards (JSF AV C++)
  • High Integrity C++ coding standard Version 4.0 (HICPP)
  • CERT C++ coding standard (CERT)
  • C++ Core guidelines (C++ CORE)
  • Google C++ Style Guide

在AUTOSAR编码标准中,有“对已有编码标准的可追溯性”的章节,它详述了MISRA,HICPP,JSF,C++ Core guidelines,和CERT编码规则与AUTOSAR编码标准的关联度,并分成如下几类:“完全相同”、“微小差别”、“显著差别”、“不采用”,详见下表:

AUTOSAR Coding Guidelines吸收了约91%的MISRA C++2008规则,就如AUTOSAR编码规范Section 1所述:'This document is defined as an update of MISRA C++:2008 … MISRA C++:2008 is required prerequisite for the readers of this document.’。AUTOSAR Coding Guidelines是站在各位“巨人”的肩膀上推动AUTOSAR架构下汽车软件的发展和进步。

开发团队应该采用AUTOSAR编码规范吗?

很多人可能存在这样的疑问:能不能用MISRAC++2008测试C++14的代码?是否有必要采用AUTOSAR Coding Guidelines?

严格来讲,使用C++14编译器编译的代码是不能遵从MISRA规范的。如果用MISRAC++2008测试C++14的代码,就肯定会出现违反项,我们需要对每一项违反进行说明,并用其他方法再一次检查违反项代码。换句话说,是有可能证明C++14代码符合MISRA规范的,但过程很艰苦。AUTOSAR Coding Guidelines帮助开发人员摆脱了这种复杂情况。

所以,开发团队采用AUTOSAR编码规范是毋庸置疑的。不仅如此,如果您的项目需要按照C++14编码并且需要说明该项目符合ISO26262功能安全标准,那么AUTOSAR编码规范就是无可替代的,因为在AUTOSAR编码规范之前没有其他的编码标准是为了支持符合C++14编写的安全关键型软件而设计的。
下表是各编码规范支持的C++语言版本:

如何实现从已有编码规范到AUTOSAR的转变?

答案很简单,按照AUTOSAR规范提示,修改源码。前提是您选择了靠谱的代码静态测试工具,才能得到精准的规范诊断信息,比如Helix QAC。在Helix QAC中,可以直接加载AUTOSAR编码规范,自动执行代码静态检测。

如果您已经遵循了MISRA编码规范,那意味着您已经完成了大部分工作,但不可避免的,在应用代码静态测试分析器做AUTOSAR规范检查时,分析器会在符合MISRA规范的代码里找到违反项,因为AUTOSAR编码标准引入了针对C++11/14特性的规范。这时候该举个例子了,比如:

Rule A8-5-2: Braced-initialization {}, without equals sign, shall be used for variable initialization

在C++03的初始化中,是这样写的:
int 32 x1 =0;

而AUTOSAR规范中不再兼容这种表达,取而代之的,是
std : : int 32_t x1{0};

再比如:
std : : int8_t c1=400; //ok?
std : : int8_t c2 {400}; //error:
narrowing conversion

这种初始化方式防止了缩小转换,提高了代码安全性,是C++新特性最佳实践应用的代表,然而这种规则检测MISRA C++是不支持的。

另外一个例子是:
Rule A3-9-1: Fixed width integer types from , indicating the size and signedness, shall be used in place of the basic numerical types

这条规则取代了MISRA C++ Rule 3-9-2,MISRA C++依赖于用户或执行时定义的类型,而AUTOSAR则使用ISO C++标准中定义的类型。

其实说到这里,大家对AUTOSAR Coding Guidelines肯定有了更新的认识和判断。AUTOSAR编码规范之所以被应用,是因为在AUTOSAR架构下找不到合适的编程标准去指导现代C++(C++11/14)语言在安全关键性软件上的应用,典型如Adaptive Platform软件架构。现代C++提供了很多很有帮助的语言特性,当联合AUTOSAR编码规范一起使用时,可以帮助您提高代码的可读性,为嵌入式系统软件安全保驾护航。

这样看来,当C++遇上AUTOSAR编码规范,不失为汽车行业的一件大事。

如何开启浪漫的邂逅?

如需按照AUTOSAR编码规范进行测试,可联系北汇信息进行试用申请。北汇信息作为Perforce(PRQA)公司的合作伙伴,将为客户提供优质的静态代码测试工具和服务。

Perforce(PRQA)公司是AUTOSAR组织在代码静态分析领域的唯一会员,负责功能安全软件架构的相关标准制定工作,参与编写了C++14编码指南,制定了AUTOSAR测试方案,并应用其开发的静态测试工具Helix QAC在AUTOSAR Adaptive Platform演示代码上执行代码静态测试。

Helix QAC作为代码静态分析领域的先驱,不仅仅提供针对AUTOSAR C++的诊断,还支持MISRA C/C++、HICPP、JSF AV C++、CERT、CWE编码规范包,其精准的诊断消息和强大的软件生命周期管理平台为全球3000多个整车厂和零部件供应商所信赖。

------------------------------------------------------------------------------------------------------------------------------------------


喜欢此篇文章的话欢迎一键三联支持小编吧~!

当C++遇上AUTOSAR编码规范,你的安全我来护航相关推荐

  1. html实体编码遇上js代码

    单双引号 在js代码中 在js中单.双引号引起来的是字符串,如果我们要在字符串中使用单.双引号,需要反斜杠进行转义 let str='user\'s name'; // or let str=&quo ...

  2. 汉字转html实体符号js_html实体编码遇上js代码

    单双引号 在js代码中 在js中单.双引号引起来的是字符串,如果我们要在字符串中使用单.双引号,需要反斜杠进行转义 let str='user\'s name'; // or let str=&quo ...

  3. go 变量大写_28. 一文了解Go语言中编码规范

    大家好,我是明哥. 由于某些不可抗力,之前该专栏的所有内容都被删除了.因此之后的一段时间内,我会重新发布这些文章,先给已经看过的关注者提个醒. 本文原文:http://golang.iswbm.com ...

  4. 分享GitHub上一位老外的嵌入式C编码规范(收藏细读)

    简 介: 本文分析在头条上分享GitHub上一位老外的嵌入式C编码规范(收藏细读):嵌入式大杂烩. 关键词: 嵌入式,C语句,编程规范 分享GitHub上一位老外的嵌入式C编码规范(收藏细读) §01 ...

  5. 驳《编码规范是技术上的遮羞布》自由发挥==摆脱编码规范?X

    引子: 看了一坨文字<编码规范是技术上的遮羞布>,很是上火,见人见智,本是无可厚非,却深感误人子弟者众.原文观点做一个简单的提炼: 1.扔掉编码规范吧,让程序员自由发挥,你会得到更多的好处 ...

  6. 史上最精辟的html/css编码规范(转)

    黄金定律 永远遵循同一套编码规范,不管有多少人共同参与同一项目,一定要确保每一行代码都像是同一个人编写的. HTML 语法 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展 ...

  7. 浅谈 JavaScript 编程语言的编码规范--转载

    原文:http://www.ibm.com/developerworks/cn/web/1008_wangdd_jscodingrule/ 对于熟悉 C/C++ 或 Java 语言的工程师来说,Jav ...

  8. soap协议_当SOAP遇上REST!一文解读Web服务Web API方法

    当SOAP遇上REST!一文解读eb服务和Web API方法 SOAP和REST,也许您已经很熟悉它们,希望扩展您的知识或获取新的观点.或者,也许您听说过它们,并正在寻求更好的理解.毕竟,SOAP和R ...

  9. python编码规范简单总结

    编码规范方面 一.命名规范 变量名通常由字母,数字,下划线组成; 数字不能作为变量名开头; 不能以python中的关键字命名; 变量名要有意义; 不要用汉字和拼音去命名; 变量名要区分大小写; 推荐使 ...

  10. Misra-C编码规范全解读 - 前言

    前言 ->返回总目录<- 博主雪云飞星是一名汽车行业的嵌入式高级软件工程师,AutoSAR行业知名专家.著有<AutoSAR入门到精通系列讲解>专栏,被业界誉为最容易理解的Au ...

最新文章

  1. python创建变量revenue_Python数据分析:小红书销售额预测
  2. 奇妙的滚动css+html
  3. 【应用笔记】【AN001】VC#开发环境下基于以太网的4-20mA电流采集(基于modbus tcp 协议)...
  4. WINCE之“系统事件”——System/Events
  5. mvc调用mysql存储过程_mysql – 存储过程不在MVC5中返回值
  6. linux查看端口号是否被占用
  7. 数据分析师免费课程网址
  8. win7系统升级ie11,在KB2729094更新失败时的解决方法
  9. 网络安全保障体系有哪些?网络安全保障需要如何实施?
  10. 四川全国计算机一级考试查询系统,2013四川计算机一级成绩查询入口
  11. 2021年井冈山中学高考成绩查询入口,【高考成绩】2019年高考成绩揭晓,井冈山中学取得好成绩!...
  12. Cocos2d-x 3 x游戏开发之旅
  13. 计算机管理服务器,用勤哲Excel服务器实现计算机管理系统
  14. python入门与实战--ENS未注册域名批量查询
  15. 关闭笔记本电脑自带键盘
  16. 1K2G保驾护航,无穷小真理放光芒
  17. [转贴]当杀毒软件无能为力时,手动杀毒也许是我的最后救命稻草!
  18. Java大用处——动态数组的实现
  19. 树莓派控制继电器开关工作
  20. php h5微信支付和app微信支付区别,关于微信公众号支付 微信H5支付和微信APP支付的问题 (PHP)TP+VUE...

热门文章

  1. JavaScript模式:字面量和构造函数
  2. 由动物启发的15个管理学定律
  3. 3Ds Max 精简材质编辑器 显示不完全
  4. 【NOI2011】 阿狸的打字机(AC自动机+树状数组)
  5. 巅峰战舰服务器维护,《巅峰战舰》8月5日更新公告
  6. MySQL如何复制表结构,及如何复制表内容,以及临时表
  7. [TJOI2019]唱、跳、rap和篮球
  8. 两个技巧教你怎么裁剪视频尺寸,手残党也能掌握
  9. Delphi动态创建MainMenu和PopupMenu菜单的方法
  10. 【渝粤题库】陕西师范大学209020 史记研究 作业(专升本)