AUTOSAR C++14编码规范的前世今生

创提信息
2021/10/19

分享到

AUTOSAR C++14编码规范的前世今生-1.1.png


AUTOSAR C++14编码规范的前世今生-1.2.png
 

现如今,随着汽车电子、新能源和自动驾驶等新技术的迅猛发展,软件在车辆系统中的比重越来越大,软件的可靠性对汽车电子系统和车辆的可靠性起到了至关重要的作用,嵌入式软件的研发成本也占到了汽车研发支出中的很大比重。本文将简要概述AUTOSAR最新发布的C++14编码规范的背景、现状和解决方案。
 
什么是MISRA编码规范?
 
1998年,位于英国的由福特、捷豹汽车和莲花汽车等汽车企业组成的汽车产业软件可靠性协会(Motor Industry Software Reliability Association,简称为'MISRA')发布了第一版C语言软件编码规范MISRA C:1998,包含了127条C语言编码规范,其中93条为严格要求,34为建议遵循,正式开启了汽车电子软件开发标准的统一化之路。自此之后,MISRA集合了越来越多的汽车厂商和工具厂商,已先后于2004, 2008, 2012发布了MISRA C:2004, MISRA C++: 2008, MISRA C: 2012,经过二十余载的发展,MISRA编码规范不仅成为了汽车电子行业的最通行和最权威的开发标准,也广泛被诸如航空航天、国防军工、轨道交通、医疗器械和通信等高可靠性嵌入式软件研发项目所采纳,且以此衍生出这些特定行业的规范。


什么是AUTOSAR?

 
以宝马、博世、大陆、戴姆勒、福特、标志雪铁龙、丰田和大众为何核心成员的众多汽车厂商于2003年组建了AUTOSAR开发联盟,发布了汽车开放系统架构(Automotive Open Software Architecture, 简称'AUTOSAR')经典平台(Classic Platform),以此作为汽车电子控制单元ECU的标准开放式软件架构。AUTOSAR标准提供了一整套的标准用来描述基本软件单元,定义应用接口和基于标准化的交换格式建立通行开发的方法。基于AUTOSAR软件架构开发的软件基本单元,可以用于不同的车厂的车辆和不同供应商的电子零部件中,从而降低研发支出并掌握汽车电子软件架构日益增长的复杂度。AUTOSAR发展至今,已经形成了集合超过180家车厂和供应商的开发联盟,在汽车软件开发领域有着举足轻重的地位。

 
为了满足高度自动驾驶和汽车互联应用的快速发展,AUTOSAR于2017年3月发布了第一个版本的自适应平台(Adaptive Platform)。驱动自适应平台的技术包括:带有外部存储的高能32/64位处理器、并行处理和高带宽通信等。自适应平台的API是使用C++语言实现的,也决定了C++将成为自适应平台软件的主要开发语言。


AUTOSAR C++14编码规范的前世今生-2.jpg 
图:AUTOSAR汽车开放系统架构

 
AUTOSAR C++14编码规范的诞生

 
为了保证自适应平台上开发的软件的可靠性、安全和统一性,AUTOSAR邀请英国PRQA公司– 于2017年中被Perforce Software公司收购-- 作为唯一的工具合作厂商,一起研究和制定C++语言的开发规范,旨在为汽车开发厂商安全地使用C++语言进行软件开发提供指导和约束。AUTOSAR C++14编码规范就是在这样的背景下,于2017年初随着AUTOSAR自适应平台一起发布的:
      • 基于C++14
      • 共包含342条编码规范
      • 其中154条直接来自于MISRA C++标准
      • 131条来自于PRQA公司的HICPP规范和其它广泛使用的C++规则
      • 57条是基于研究和其它资源

 
AUTOSAR为什么不直接使用MISRA C++: 2008?
 
既然汽车行业已经有广泛使用的MISRA C++: 2008规范,为什么AUTOSAR还要另行发布新的规范?这也许是很多正在使用MISRA C++规范的开发者首先想到的问题。因为,

      • MISRA C++: 2008是基于C++03语言发布的,已有将近15年之久
      • C++语言本身也在进化演变,比如:
          o 编译器的改进
          o 工具的进化
          o ISO 26262功能安全标准的发布和落地
          o 知识库的扩展


AUTOSAR C++14规范不是现有的MISRA C++标准的替代,而是MISRA C++标准的扩展,它增加了新的C++编码规范、更新了现有规范,并删除了那些已经过时的规范。比如AUTOSAR标准中允许使用一些在之前的标准中禁止使用的语言功能,如动态内存、异常、模版、继承和虚函数等。


如何满足AUTOSAR C++14编码规范?
 
如何高效地在软件研发过程中遵循一套严格的编码规范,主要取决于两个方面的实现方法:
 
1. 如何检测出违规的代码?人工代码同行评审是一种行之有效的方法,采用开发人员之间一对一交换评审或者一对多由专门的人员评审都在代码提交前找出主要的代码违规,主要缺点是效率比较低,缺乏可靠性。鉴于此,目前有条件的企业多数会利用自动化工具进行自动扫描分析。
 
2. 检测出的违规代码如何及时被修复?难点在于如何安排测试任务,下发测试结果和跟踪管理进度。对于少数人的小项目团队,这一点可能不是问题。但对于多人的项目团队,要求每个人学会安装、配置和使用软件工具显然不是最高效的。另外,修复进度没有统一的平台跟踪管理,也无法保证修复任务被及时有效地完成。对于10人以上的开发团队,目前被普遍证明的有效方式是“集中扫描 + 报告平台”的部署方式。
 
Perforce Software公司作为AUTOSAR C++14编码规范的唯一工具合作商,最先提供针对AUTOSAR  C++14的完整的、权威的规则包,利用Helix QAC 代码静态分析工具,可以全自动地扫描代码,检查违规代码,并详细报告违规代码信息。扫描的结果除了可以在Helix QAC桌面软件的界面中查看,还可以自动上传的基于Web的报告管理平台,开发者只需通过Web浏览器登录即可查看详细的相关结果信息,并完成修复工作。从而无缝集成到开发流程的代码质量管理平台,覆盖软件开发的全生命周期(SDLC)。
 
除了AUTOSAR C++14编码规范以外,Helix QAC还支持对MISRA C/C++, HICPP, CERT C/C++, CWE,  JSF等规范的自动检查和编码规范自定义,Helix QAC现已成为汽车OEM和汽车电子供应商研发过程中使用最普遍的代码静态测试解决方案。


总结
 
AUTOSAR C++14编码规范作为最新的汽车电子行业规范,自发布之初就备受汽车制造和供应商的关注,除了开发自动驾驶、ADAS、新能源和V2X等应用的企业以外,开发高复杂软件系统的汽车厂商都值得推荐对其进行了解。可以预见,随着汽车软件系统的日益复杂化,AUTOSAR C++14编码规范将会迅速应用到越来越多的汽车系统的研发过程中。