使用MATLAB的ISO 26262自动驾驶应用流程:指南和最佳实践

Lars Rosqvist, MathWorks

Simulink的使用万博1manbetx®和Stateflow®ISO 26262的软件开发已经为汽车电控单元建立了良好的基础。使用MATLAB实现软件设计的趋势正在增长,特别是在自动驾驶应用程序中®函数以及Simulink块和状态流程图。万博1manbetx本文提供了使用MATLAB为中心的工作流来验证符合ISO 26262软件标准[1]的最佳实践。这些最佳实践使用基于模型的设计补充了ISO 26262参考工作流程IEC认证套件

推荐的建模模式

在本文中,我们使用了一种软件开发模式,其中Simulink模型集成了MATLAB函数块(图1)。顶层Simulink模型携带了代码万博1manbetx生成的所有配置设置。MATLAB函数块调用外部MATLAB函数。

图1。使用外部MATLAB代码建模模式。

此建模模式利用了Simulink模型可用的所有验证和验证工具,同时使用MATLAB语言[2]实现功能。万博1manbetx它还利用了MATLAB中广泛可用的功能。例如,ADAS开发通常使用MATLAB实现,因为复杂的数学功能可以以简洁、优雅的方式表示。

MATLAB ISO 26262参考工作流程概述

如前所述,本文所述的工作流程是基于IEC认证套件中的ISO 26262参考工作流程(图2)。

图2。IEC认证包中规定的验证和验证活动。

基于MATLAB的工作流程包括以下验证和验证活动的额外建议:

  • 需求编写和体系结构验证
  • 静态模型分析
  • MIL测试和SIL或PIL背靠背测试
  • 静态代码分析
  • 文档

需求编写和体系结构验证

ISO 26262要求所有要求都已实施和测试的证据。在ISO 26262参考工作流中,图3中突出显示的体系结构验证和需求创作活动提供了这一证据。

图3。需求链接活动。

将需求链接到MATLAB代码

使用Simu万博1manbetxlink Requirements™,您可以以与将需求链接到Simulink块相同的方式将需求链接到MATLAB函数中的代码行。不同之处在于现有的缺失需求检查不检查外部MATLAB代码。建议您实现一个Model Advisor检查,查找未链接到需求的MATLAB容器。容器通常是外部MATLAB文件或MATLAB函数,具体取决于文件的大小。

最佳实践MATLAB工作流程

实现Model Advisor检查以搜索未链接到需求的MATLAB容器。

静态模型分析

必须检查实现模型中的每个组件的可读性、可理解性和可测试性(图4)。Simulink Check™用于评估模型对ISO 26262和MathWorks的符合性万博1manbetx高度集成的指导方针。

图4。IEC认证包中规定的静态模型分析活动。

语言子集

在MATLAB中编程可以使用几个不同工具箱中的函数。由于MATLAB是一种强大的语言,具有高度的抽象性,因此只需几行代码就可以开发复杂的功能。在某些情况下,单行MATLAB代码可能导致多行C代码,使得生成的代码难以全覆盖验证。您需要知道您正在实现的功能是可测试的。ISO 26262规定了基于所使用的函数类型使用语言子集(ISO 26262中的表1)。

我们建议您采取以下步骤来满足语言子集的要求:

  • 评估所使用的MATLAB函数,以确保它们都不需要很高的验证工作。可以添加Model Advisor检查,检查非推荐函数的使用情况。
  • 将不推荐的MATLAB函数替换为更简单的实现。这些简单的函数将更容易跟踪和测试。

最佳实践MATLAB工作流程

回顾模型时,寻找生成大量C代码的MATLAB操作或函数。如果可能的话,将它们替换为其他功能。添加Model Advisor Check,在使用非推荐函数时发出警告。

如果不能替换,则需要分别进行测试。

  • 通过具有高覆盖率的单独单元测试来验证功能。当覆盖率达到时,通过引用外部单元测试来证明这些函数的使用是正确的。

最佳实践MATLAB工作流程

如果识别出生成大量C代码的MATLAB操作或函数,并且无法替换,则使用单元测试外部测试这些函数。编写连接到函数使用位置的证明,并链接到存储测试结果的位置。

强数据类型

ISO 26262要求所有变量都是强类型的。Model Advisor检查Simuli万博1manbetxnk模型中的强类型块,包括到MATLAB函数块的接口,但它不检查外部MATLAB函数。为了克服这个障碍,编写一个检查来验证所有的MATLAB函数都是强类型的。检查数据类型和数据维尤为重要。

最佳实践MATLAB工作流程

添加Model Advisor检查,以确保MATLAB代码中的所有变量都是强类型的。

MIL测试和SIL或PIL背靠背测试

连续的(等价)测试使您能够证明生成的代码行为与模型相同,正如ISO 26262表7,软件单元验证方法所推荐的那样。对于目标代码,使用循环中处理器(PIL)测试,而对于生成的C代码,使用循环中软件(SIL)(图5)。测试用例应该与在循环中模型(MIL)测试中使用的测试用例相同。对于单元验证,使用SIL。对于集成测试,您必须使用PIL来验证整个开发工具链。

图5。IEC认证手册中规定的模型验证活动。

防止意外功能

为了证明在代码生成期间没有添加非预期的功能,在模型测试和代码测试期间测量测试覆盖率。测试覆盖通常使用Simulink coverage™的背靠背测试来完成。万博1manbetx根据ISO 26262,覆盖率用于评估验证的完整性,并提供单元测试目标已实现的证据。

根据ISO 26262,缺少覆盖率的代码需要审查和证明。当使用Simulink块进行开发时,证明可以万博1manbetx连接到模型,这意味着在验证运行之间保持证明。此选项不适用于外部MATLAB函数。为了证明MATLAB函数的缺失覆盖率,在代码中添加覆盖率过滤器,然后将其连接到Simulink test™中的测试工具或测试文件。万博1manbetx我们的建议是将覆盖筛选器文件连接到测试文件(图6)。

图6。连接到测试文件的覆盖过滤器。

最佳实践MATLAB工作流程

通过连接到测试文件的验证过滤器跟踪外部MATLAB代码中缺失覆盖率的验证。

静态代码分析

正如ISO 26262标准中所述,静态分析包括搜索源代码文本或模型以查找与已知错误匹配的模式或遵从建模或编码指南等活动。在生成的代码上执行静态代码分析(图7)。

图7。IEC认证套件中规定的静态代码分析活动。

MISRA C合规

评估MISRA®从MATLAB生成的代码符合misra C,使用静态代码分析工具(如Polyspace Bug Finder™)检测不符合misra C的代码,并手动调查结果。如果不兼容的代码来自内置的MATLAB函数,您有两个选择:

  • 用重写的函数替换内置的MATLAB函数
  • 写出MISRA C警告的理由

我们的建议是替换功能,如果可能的话。为了确保被替换的函数没有被其他开发人员使用,实现Model Advisor检查非推荐的函数。

最佳实践MATLAB工作流程

在检查静态代码分析报告时,检查MISRA警告是否来自内置的MATLAB函数。如果可以替换这些函数,则添加Model Advisor检查,在使用非推荐函数时发出警告。如果不是,在静态代码分析报告中证明这个问题。

文档

在提供ISO 26262符合性证据的最终安全案例中,您需要记录验证过程中的每个步骤,从要求到验证。文档应该包括功能的设计描述。图8突出显示了设计描述中必须包含的一些活动。

图8。要包含在设计文档中的活动。

系统设计说明

万博1manbetxSimulink Report Generator™包括一个预定义的系统设计报表模板。此模板通常适用于记录在Simulink中开发的组件,但不适用于记录外部MATLAB函数,因为它们不包括在默认的系统设计描述中。万博1manbetx因此,我们建议定制模板以包含外部MATLAB代码。

最佳实践MATLAB工作流程

自定义“系统设计描述”模板以包含外部MATLAB代码。

SOTIF注意事项

在ADAS等复杂系统中,一个功能可能会按照预期的方式运行,但仍然会导致危险行为。在ISO/PAS 21448预期功能安全(SOTIF)标准的指导下,您可以通过将额外的验证和验证活动集成到基于模型的设计中来解决此问题。我们建议添加随机操作条件测试,以扩展测试并包括未知用例。这些随机测试应该与系统需求相比较,验证实现模型和集成目标代码的行为。

IEC认证套件包括对SOTIF的支持。万博1manbetx说到SOTIF, Simulink和MATLAB的工作流之间没有很大的区别。万博1manbetx更新后的IEC认证套件包括有关使用自动驾驶工具箱进行系统测试的信息。

总结

在符合iso标准的软件开发中,完全基于Simulink的开发和更以MATLAB为中心的工作流程之间的差异并不大。万博1manbetx主要的区别是需要通过实现自定义Model Advisor检查来避免使用非推荐的函数。这些额外的检查,以及Simulink Check中现有的ISO 26262检查,确保MATLAB实现生成适合高完整性应用程序的代码。万博1manbetx使用以MATLAB为中心的ISO 26262工作流的其他挑战可以通过简单的解决方案来解决,例如使用验证过滤器或将需求连接到模型中的多个级别。

本文中的建议基于MATLAB R2020a。如果您使用的是不同的发行版,请联系MathWorks代表,了解它在ISO 26262中使用MATLAB和Simulink的功能。万博1manbetx

开发人员有时会选择MATLAB而不是Simulink,因为他们认为Simulink不支持万博1manbetxdiff和merge。万博1manbetx如果你在Simulink中工作,你可以使用内万博1manbetx置的工具来处理差异和合并。如果您的团队使用像Git这样的分布式版本控制系统,如果发生冲突,您可以进行三向合并。

作者简介

Lars Rosqvist是MathWorks的高级技术顾问。他支持万博1manbetx不同行业的客户使用基于模型的设计和MATLAB。他是TÜV SÜD认证的功能安全专家,多年来一直为客户提供ISO 26262认证。万博1manbetx在加入MathWorks之前,Lars在汽车行业担任软件开发人员,开发气候控制系统。Lars在瑞典Linköping科技大学获得应用物理和电气工程硕士学位。

2020年出版的