技术文章和通讯

使用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需求™, 可以将需求链接到MATLAB函数中的代码行,方法与将需求链接到Simulink块的方法相同。不同之处在于,现有的缺失需求检查并没有检查外部MATLAB代码。建议您实施ModelAdvisor检查,以查找未链接到需求的MATLAB容器。容器通常是外部MATLAB文件或MATLAB函数,具体取决于文件的大小。

最佳实践对MATLAB工作流

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

静态模型分析

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

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

语言子集

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

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

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

最佳实践对MATLAB工作流

在查看模型时,寻找生成大量C代码的MATLAB操作或函数。如果可能,用其他功能替换它们。添加一个Model Advisor检查,该检查在使用非推荐功能时发出警告。

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

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

最佳实践对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覆盖率的背靠背测试来完成™. 根据ISO 26262,覆盖率用于评估验证的完整性,并提供证据证明单元测试的目标已实现。万博1manbetx

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

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

最佳实践对MATLAB工作流

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

静态代码分析

正如ISO 26262标准所述,静态分析包括一些活动,如搜索源代码文本或模型,以查找与已知错误匹配的模式或符合建模或编码准则的模式。对生成的代码执行静态代码分析(图7)。

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

MISRA - C合规

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

  • 用重写功能替换内置的MATLAB函数
  • 为MISRA C警告写一个理由

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

最佳实践对MATLAB工作流

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

文档

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

图8。设计文档中应包括的活动。

系统设计描述

万博1manbetxSimulink报告生成器™ 包括预定义的系统设计报告模板。该模板通常适用于记录Simulink中开发的组件,但不适用于记录外部MATLAB函数,因为默认系统设计描述中不包含这些函数。因此,我们建议自定义模板以包含外部MATLAB代码。

最佳实践对MATLAB工作流

自定义系统设计描述模板,以包括外部MATLAB代码。

索蒂夫的考虑

在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代表,了解其使用MATLAB和Simulink用于ISO 26262的功能。万博1manbetx

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

关于作者

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

2020年出版的