8分钟让你熟悉自适应AUTOSAR的AUTOSAR C++14编码准则

8分钟让你熟悉自适应AUTOSAR的AUTOSAR C++14编码准则

AUTOSAR C++14准则是MISRA C++ 2008的更新,提供了ISO/IEC 14882:2014所定义的现代C++的编码准则。

 

自适应AUTOSAR

在过去的十年中,汽车行业发生了翻天覆地的变化。现代汽车引入的新功能已从根本上将其转变为计算中心。这反映在用于构建汽车软件的平台(特别是AUTOSAR)的开发中。在编译时假设静态配置,没有动态内存分配以及C语言占主导地位的“经典”方法不再足够。新功能需要大量高级代码,例如:

  • 自动驾驶
  • V2X通信(车对车和车辆对基础设施通信)
  • 持续的空中更新
  • 高清晰度多媒体
  • 人工智能计算,图像识别

这些新功能还需要对范式进行更改,而这些更改对于经典方法是足够的。为了应对这些挑战并改善汽车发展,包括全球大多数领先汽车制造商在内的AUTOSAR联盟于2017年3月发布了新版本的AUTOSAR标准,称为自适应AUTOSAR。

新标准的发布不会使Classic Platform失效,对于没有连接需求,硬件要求有限和实时功能坚硬的控制单元,它仍然是首选。

自适应AUTOSAR定义了一个平台,用于开发汽车控制单元,该平台可提供诸如高级驾驶辅助系统,媒体流或通过互联网进行软件更新等复杂功能。该平台包含定义服务和API的接口规范。自适应AUTOSAR中引入的一些新颖性包括:

  • 面向对象的方法

  • C++编程语言

  • 面向服务的架构

  • POSIX操作系统

  • 在系统运行期间更改ECU配置

  • 空中部署和更新

 

C还不够

自适应AUTOSAR是对现代汽车要求日益复杂以及对“互联世界”范式强加于汽车系统的新挑战的回应。过去,C语言曾经是汽车开发人员的主要选择,但它成为了障碍,或者至少是放缓的趋势。系统的复杂性迫使人们从C语言切换到C++,这为构造大型分布式系统提供了更好的支持,并为数据封装提供了更好的机制。

自适应AUTOSAR依赖于C++14语言标准。语言标准版本的选择是在“不太旧”和“不太新”之间进行选择。一方面,我们拥有仍在汽车工业中广泛使用的C++98和C++03,但是它们已经过时并且不符合现代发展模式。另一方面,我们拥有仍非常新鲜的C++17标准。留下C++98和C++03的参数是:

  • C++语言的实质发展/改进

  • 更好的编译器的可用性

  • 更好的测试和分析工具的可用性

不使用C++17的主要原因之一是该标准中引入的新功能可能给系统带来安全风险——检测和了解安全漏洞需要一些时间。此外,符合C++17标准的C++编译器仍然是非常新的,需要更多测试和对安全性至关重要的开发中使用的更好支持。因此,选择依赖C++14标准作为合理的中间选择。

 

关于AUTOSAR编码准则?

自适应AUTOSAR平台的发布增加了现代C++在汽车项目中的采用。这使一个特定的问题更加明显:尽管近年来C++语言的发展加快了,但汽车编码标准似乎落后了。在发布C++11和C++14时,用于C++的最流行的汽车编码标准MISRA C++ 2008已经严重过时,并且仅解决该语言的C++03版本。

每年,问题都在增长,并且变得越来越棘手。开发人员广泛接受了最新C++标准的新功能,并在没有适当指导或最佳实践的情况下开始使用它们。对于开发安全关键系统的团队而言,这种情况尤其成问题,ISO26262要求这些安全关键系统必须使用带有适当编码准则子集的静态分析。

为解决此问题,AUTOSAR联盟发布了专用指南文档,作为自适应AUTOSAR平台的一部分,标题为“在关键和安全相关系统中使用C++14语言的指南”。依靠未经修改的MISRA C++ 2008将完全是违法的。下面的时间轴描述了这种情况:

  • 1998年– C++98标准发布

  • 2003年– C++03标准发布

  • 2008年– MISRA C++2008(包含C++03)

  • 2011年– C++11标准发布

  • 2014年– C++14标准发布

  • 2017年– AUTOSAR C++14(3月)

  • 2017年– C++17标准发布(12月)

  • 2020年– C++20标准发布

 

AUTOSAR C++14编码准则

AUTOSAR C++14指南文档旨在作为MISRA C++ 2008的更新,并提供了ISO/IEC 14882:2014所定义的现代C++的编码指南。该编码标准的主要应用是汽车行业,但也可用于需要嵌入式编程的其他行业。

该标准规定了342条规则:

  • MISRA C++ 2008采用了154条规则,未作任何修改(67%)

  • 131条规则基于现有C++标准

  • 57条规则基于研究或其他文献或资源

该标准有据可查,可以追溯到其他现有的C++标准,例如HIC++ 4.0,JSF,SEI CERT C++,C++核心准则,当然也可以追溯到MISRA C++ 2008。

AUTOSAR C++14遵循MISRA C++ 2008中的规则分类方法。根据义务级别对规则进行分类:

  • 必需规则:声称符合标准的强制性规则

  • 咨询规则:推荐但无强制性地位

此外,还对这些规则是否由静态分析工具自动实施进行了分类:

  • 自动化:可由静态分析工具完全支持

  • 部分自动化:可以由静态分析工具支持,但可能需要其他实践,例如代码检查

  • 非自动化:静态分析工具不支持。

最后,根据分配目标对规则进行分类:实施,验证,工具链和基础架构。AUTOSAR C++14标准中的规则标记有有关分类的信息,例如:

8分钟让你熟悉自适应AUTOSAR的AUTOSAR C++14编码准则

 

我们要如何应对?

MISRA联盟在2016年发布了一份文件,标题为“MISRA Compliance:2016实现对MISRA编码准则的遵守”。该文档在业界非常受欢迎,因为它满足了定义实现合规性流程的非常重要的需求,并明确说明了合规性的含义。

AUTOSAR C++14没有(至少没有直接提供)关于达到合规性过程的任何类似指南。但是,鉴于AUTOSAR C++准则是基于MISRA C++ 2008的,因此有必要再次参考MISRA标准,以寻求有关实现合规性流程的指南。

  • 生成一个合规性矩阵,该矩阵说明每个规则的执行方式

  • 产生偏差程序

  • 正式制定质量管理体系内的工作惯例

满足这些要求意味着一些额外的文书工作。应该发生的第一件事是对合规性矩阵的定义,这实际上是对我们将如何执行每条准则的声明。请参见下面的示例:

8分钟让你熟悉自适应AUTOSAR的AUTOSAR C++14编码准则

理想的情况是拥有一个静态分析工具,该工具应涵盖尽可能多的准则。无法通过静态分析强制执行的规则很可能需要手动检查,这很昂贵。

除了合规性矩阵外,还需要建立偏差处理程序。当开发需要偏离特定准则时,偏离程序将需要采取的步骤正式化。按照MISRA的规定,预计

“……程序将基于为每个偏差或偏差类别获得签字。”

——MISRA

这是一个非常重要的难题——它可以防止开发人员随意偏离偏差概念。实际上,我们将需要某种形式的正式票据存储在我们的系统中,以记录源代码中的每个偏差。这与合规性矩阵以及为实施合规性而创建的任何其他配置和过程描述有关。 MISRA C++2008在这里非常清楚,要求“在质量体系内进行形式化”。

最后,如果MISRA C++ 2008点4.3中描述的所有过程均已就绪,我们可以通过证明以下内容来声明其合规性:

  • 已完成合规性矩阵,显示了如何强制执行合规性

  • 产品中的所有C++代码均符合MISRA C++2008文档的规则或有记录的偏差

  • 正在维护未遵循规则的所有实例的列表,并且每个实例都有适当的签名偏差

“MISRA Compliance:2016”文档更新了MISRA C++2008中给出的建立法规遵从流程的指导。一些团队可能更喜欢将它用作AUTOSAR C++14遵从性过程的基础,因为它是更新且更详细的。与MISRA C++ 2008一样,“MISRA Compliance:2016”也需要一个正式的流程来处理偏差,并且您必须记录每条适用指南的说明实施方法。该文档称为准则执行计划(GEP)。

“MISRA Compliance:2016”扩展了合规性流程的要求,并引入了一些新概念,例如准则重新分类计划(GRP),正式记录了对规则类别引入的任何更改,以及准则合规性摘要(GCS),这基本上是合规流程中的最后一个工件,介绍了每个准则所达到的合规水平。

“MISRA Compliance:2016”还使用了MISRA C 2012中引入的规则分类,并且不同于MISRA C++ 2008和AUTOSAR C++14标准中的规则分类。但是,这些差异似乎并不是根本性的,采用“MISRA Compliance:2016”作为AUTOSAR C++14的基础当然是一种选择。

 

在Parasoft C/C++test中支持AUTOSAR C++14

强制遵守诸如AUTOSAR C++14之类的编码标准的唯一实用方法是使用静态分析工具,例如Parasoft C/C++test,这是一种支持多种测试技术的代码质量工具。与任何其他代码质量工具相比,Parasoft C/C++test支持AUTOSAR C++。AUTOSAR C++14规则是Parasoft汽车合规性软件包的一部分,该软件包专门为汽车开发人员扩展了Parasoft C/C++test的功能。除了特定于行业的静态分析规则(例如AUTOSAR C++14,HIC++或MISRA)之外,Parasoft的Automotive Compliance Pack还提供了完善的交互式报告系统,该系统可根据AUTOSAR,HIC++和MISRA的要求进行定制,并支持高效的团队日常工作流程。

Parasoft C/C++test使开发人员可以在不离开IDE的情况下检查其代码的符合性,并将扫描过程集成到服务器上的CI构建中。借助Parasoft的汽车特定报告系统,团队成员可以轻松地持续监控其合规过程。

在清理现有代码库时,团队可以从创建符合性策略的能力中受益,这些策略定义了确保测试实践一致性的内容。在这种情况下,建议的做法是从标准中的规则子集开始,并随着代码清除的进行逐渐增加活动规则的数量。通过此报告层,您可以不断监视代码库的进度,控制偏差过程并就扩展规则集做出有根据的决策。

 

我们可以走到哪一步?

汽车行业正在动态发展。在许多其他变化中,我们正在见证汽车向一种更像是使用智能手机的体验的转变。以应用程序形式购买汽车的特定功能的概念是现实的。长途度假?为什么不购买2周的巡航控制系统?

为了应对这些挑战并可能减少开发时间,汽车行业需要在现代汽车所使用的硬件和软件平台领域进行不断的创新。这些创新需要得到不同级别的适当标准的支持,以确保功能安全性,质量和安全性。AUTOSAR C++14无疑为这一过程做出了贡献。

但是,标准本身只是一张纸(如果我们将它们打印出来的话),没有工具就无法实现这些标准,而这些工具必须使实践和过程实现自动化,并使汽车软件开发团队能够专注于提供更好和更高级的功能。Parasoft C/C++test是对安全性至关重要的C/C++开发的最完整解决方案,比其他任何工具供应商都对汽车编码标准(AUTOSAR C++,CERT C/C++,MISRA)提供更多支持,并且动态、灵活,以及有用的报告系统,可让您的整个团队成功实现合规性。

获取cpptest正版免费试用>>

上一篇:【复盘系统分析师之路】第五章 复盘软件工程


下一篇:Windows server 2008普通用户不能远程登录问题