Want to see Parasoft in action? Sign up for our Monthly Demos! See Demos & Events >>
Want to see Parasoft in action? Sign up for our Monthly Demos! See Demos & Events >>
AUTOSAR C++ 14 指南是MISRA C++ 2008的一次更新,为 ISO/IEC 14882:2014 定义的现代C++提供了编码指南。
汽车行业在过去十年中发生了翻天覆地的变化。现代汽车引入的新功能从根本上将汽车本身变成了计算中心。在用于构建汽车软件的平台的开发中反应得特别明显,特别是AUTOSAR。
在编译时假定静态配置、没有动态内存分配以及C语言占主导地位的经典方法已不再适用。而以下新功能需要大量高级代码:
这些新特性还需要对范式进行更改,以满足传统方法的需要。为了应对这些挑战并促进汽车发展,包括世界上大多数领先汽车制造商在内的AUTOSAR联盟于2017年3月发布了新版本的AUTOSAR标准,称为自适应AUTOSAR。
新标准的发布并未使经典平台失效,它仍将作为无连接需求、有限的硬件要求和硬实时功能的控制单元的首选。
自适应AUTOSAR定义了一个平台,用于开发汽车控制单元,该单元通过互联网提供先进的驾驶辅助系统,媒体流或软件更新等复杂功能。该平台包含定义服务和 API 的接口规范。自适应AUTOSAR中引入的一些新特性包括:
自适应AUTOSAR解决了现代汽车日益复杂的需求,以及互联世界模式给汽车系统带来的新挑战。C语言在过去是汽车开发人员的首选,如今却成为了一个阻碍因素。
系统的复杂性迫使人们从C语言切换到C++,这为构建大型分布式系统提供了更好的支持,并为数据封装提供了更好的机制。
自适应AUTOSAR依赖于 C++14 语言标准。语言标准版本的选择是在“不太旧”和“不太新”之间进行选择。一方面,我们有C++98和C++03,它们仍然广泛应用于汽车行业,但已经过时,不符合现代的开发模式。另一方面,当C++17标准发布时,它是比较新的,并且有争论要摒弃C++98和C++03,包括:
不采用C++17的主要原因之一是标准中引入的新功能可能会给系统带来安全风险——检测和理解安全漏洞需要一些时间。此外,符合C++17标准的C++编译器仍然是新的,需要更多的测试和更好的支持才能用于安全关键型开发。因此,选择依靠C++14标准作为合理的中间选项。
随着C++语言的不断发展,今天我们有C++20(ISO/IEC 14882:2020)取代了C++17。
为了支持C++17,AUTOSAR和MISRA联手制定了使用C++17的安全编码指南,并计划持续到C++20。对于许多组织来说,这是非常重要的,因为现代C++功能提供了在开发系统中非常重要的新创新。例如,使用AI依赖于C++最新版本中开发的现代架构,现代平台和现代库。
自适应AUTOSAR平台的发布增加了C++在汽车项目中的应用。这使得一个具体问题更加明显: 虽然在过去几年中C++语言发展速度加快了,但汽车编码标准似乎已经落后了。
在C++11和C++14发布时,C++最流行的汽车编码标准MISRA C++2008已经严重过时,只能解决该语言的C++03版本。
随着每一年的发展,这个问题变得越来越棘手。开发人员广泛接受最新C++标准的新功能,并在没有适当指导或最佳实践的情况下开始使用它们。这种情况对于开发安全关键型系统的团队来说尤其成问题,ISO 26262 要求这些系统使用静态分析以及适当的编码指南子集。
为了解决这个问题,AUTOSAR联盟发布了专门的指南,作为自适应AUTOSAR平台的一部分,标题为“在关键和安全相关系统中使用C++14语言的指南”。依靠未经修改的MISRA C++2008简直是一种不合理的选择。下面的时间线描述了这种情况。
1998 – C++98标准发布
2003 – C++03标准发布
2008 – MISRA C++2008
2011 – C++11标准发布
2014 – C++14标准发布
2017 – AUTOSAR C++14 (3月)
2017 – C++17标准发布
2020 – C++20标准发
2022 – MISRA & AUTOSAR C++17 (待定)
2022 – MISRA & AUTOSAR C++20 (待定)
AUTOSAR C++ 14 指南文件旨在作为 MISRA C++ 2008 的一次更新,并为 ISO/IEC 14882:2014 定义的现代C++提供编码指南。该编码标准主要应用于汽车行业,但它同样也可用于需要嵌入式编程的其他行业。
该标准规定了342条规则:
该标准有据可查,并提供了对其他现有C++标准的可追溯性,例如HIC ++ 4.0,JSF,SEI CERT C++,C++核心指南,当然还有MISRA 2008 C++。
AUTOSAR C++14 遵循 MISRA C++ 2008的规则分类方法。这些规则根据义务级别进行分类:
此外,根据这些规则是否由静态分析工具自动执行,分类为:
最后,根据分配目标对规则进行分类:实现、验证、工具链和基础设施。AUTOSAR c++ 14标准中的规则被标记为关于分类的信息,例如:
2016年,MISRA联盟发布了一份题为“MISRA合规:2016”的文档来实现MISRA 编码指南合规。(本文档已更新,并由“MISRA合规:2020”取代)。
合规文件在业界受到了广泛的欢迎,因为它们解决了实现法规遵从性流程的重要需求,并明确了合规的确切含义。
AUTOSAR C++14没有就实现合规的过程提供任何类似的指导,至少没有直接提供。但是鉴于AUTOSAR C++指南基于MISRA 2008 C++的,因此可以参考MISRA标准,寻找有关实现合规性过程的指导是合理的。
满足这些要求意味着一些额外的文书工作。迎面而来的第一件事就是合规性矩阵的定义,它有效地声明了我们将如何执行每一条准则。请参阅下面的示例。
理想的情况是拥有一个涵盖尽可能多的指南的静态分析工具。无法通过静态分析强制执行的规则很可能需要昂贵的人工审核。
除了合规矩阵之外,还需要建立偏差处理程序。当开发需要偏离特定的指导方针时,偏离程序正式规定了需要采取的步骤。正如 MISRA 规定的那样,人们期望
“…该程序将基于获得每个偏差或偏差类别的签字。”
—MISRA
这是整个流程中的一个重要部分。它可以防止开发人员随意偏离偏差概念。实际上,我们需要在系统中存储某种正式的证据,来记录源代码中的每个偏差。这同样适用于合规性矩阵以及为实施合规性而创建的任何其他配置和流程描述。MISRA C++2008在这点上非常明确,并要求“在质量体系中进行形式化。”
最后,如果MISRA 2008 C++第4.3描述的所有要求都已经满足,我们可以通过展示以下内容来声明合规性:
在声明MISRA合规时,“MISRA合规:2020”文件现在被要求与MISRA指南的所有未来版本一起使用。“MISRA 合规:2020”更新了 MISRA C++2008 中给出的建立合规流程的说明。一些团队可能更愿意将其用作 AUTOSAR C++14 合规性流程的基础,因为它更新并且更详细。
与MISRA 2008 C++一样,“MISRA合规:2020”需要一个正式的流程来处理偏差,并且我们必须记录每个适用准则的执行方法。该文档称为准则执行计划 (GEP)。
“MISRA合规:2020”扩展了合规流程的要求,并引入了一些新概念,例如以正式方式记录引入规则类别的任何更改的指南重新分类计划 (GRP) 和指南合规摘要 (GCS ),这基本上是合规过程的最终产物,它显示了每个指南所达到的合规水平。
“MISRA合规:2020”还使用了MISRA C 2012中引入的规则分类,与MISRA C++ 2008和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的汽车合规包还提供一个复杂的交互式报告系统,该系统根据 AUTOSAR、HIC++ 和 MISRA 的要求进行定制,并支持团队高效的日常工作流程。
Parasoft C/C++test使开发人员能够在IDE中检查其代码的合规性,并将扫描过程集成到服务器上的CI构建中。借助Parasoft的汽车行业专用报告系统,团队成员可以轻松持续监控他们的合规流程。
汽车行业正在不断发展。在如此迅速的发展大势下,我们正在见证汽车向类似于使用智能手机的体验而进行转变。以应用程序的形式购买汽车特定功能的概念已成为现实。
为了应对这些挑战并可能地缩短开发时间,汽车行业需要在现代汽车中使用的硬件和软件平台领域不断创新。这些创新需要在各个层面得到适当标准的支持,以确保功能安全、质量和安全。
但是标准本身只能体现于一张白纸之上,如果没有工具将自动化带入实践和过程,并使汽车软件开发团队专注于交付更好,更高级的功能,那就根本无法落地实施它们。Parasoft C/C++test 是安全关键型 C/C++ 开发最完整的解决方案,比任何其他工具供应商更支持汽车编码标准(AUTOSAR C++、CERT C/C++、MISRA),以及Parasoft独特的动态灵活且极具效益的报告系统,可以使整个团队能够成功实现合规性。
“MISRA”、“MISRA C”及MISRA Consortium Limited的注册商标。©The MISRA Consortium Limited, 2021。保留所有权。
Product Manager for Parasoft's embedded testing solutions, Miroslaw's specialties include C/C++, RTOSes, static code analysis, unit testing, managing software quality for safety critical applications, and software compliance to safety standards.