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

2024-07-09 14:16:19·  来源:功能安全  
 

在汽车 ECU 中,使用 Simulink ®和 Stateflow ®进行ISO ® 26262软件开发已非常普遍。特别是在自动驾驶应用中,使用 MATLAB ®函数以及 Simulink 模块和 Stateflow 图表实施软件设计正成为一种日益流行的趋势。本文提供了使用以 MATLAB 为中心的工作流程来验证是否符合 ISO 26262 软件标准的最佳实践[1] 。这些最佳实践是对IEC 认证套件中所示的使用基于模型的设计的 ISO 26262 参考工作流程的补充。


推荐的建模模式


在本文中,我们使用 Simulink 模型结合 MATLAB 函数块的软件开发模式(图 1)。顶层 Simulink 模型包含代码生成的所有配置设置。MATLAB 函数块调用外部 MATLAB 函数。



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


这种建模模式充分利用了 Simulink 模型可用的所有验证和确认工具,同时允许使用 MATLAB 语言[2]实现功能。它还充分利用了 MATLAB 的广泛功能。例如,ADAS 开发通常使用 MATLAB 来实现,因为复杂的数学功能可以用简洁、优雅的方式表达。


在安全关键型产品开发环境中还有其他使用 MATLAB [3]的方法,本文未提及。


MATLAB ISO 26262 参考工作流程:概述


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


图 2. IEC 认证套件中指定的验证和确认活动。


基于 MATLAB 的工作流程包括针对以下验证和确认活动的附加建议:


·需求编写和架构验证

·静态模型分析

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

·静态代码分析

·文档


需求编写和架构验证


ISO 26262 要求提供证据证明所有要求均已实施并经过测试。在 ISO 26262 参考工作流程中,图 3 中突出显示的架构验证和需求编写活动提供了此证据。


图 3.需求链接活动。


将需求链接到 MATLAB 代码


使用 Requirements Toolbox™,您可以将需求链接到 MATLAB 函数中的代码行,就像将需求链接到 Simulink 模块一样。不同之处在于,现有的缺失需求检查不会检查外部 MATLAB 代码。建议您实施 Model Advisor 检查,以查找未链接到需求的 MATLAB 容器。容器通常是外部 MATLAB 文件或 MATLAB 函数,具体取决于文件的大小。


MATLAB 工作流程的最佳实践 

实施模型顾问检查以搜索与需求无关的 MATLAB 容器。


静态模型分析


必须检查实施模型中每个组件的可读性、可理解性和可测试性(图 4)。Simulink Check™ 用于评估模型是否符合 ISO 26262 和 MathWorks高完整性指南。

图 4. IEC 认证套件中指定的静态模型分析活动。


语言子集


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


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


·评估使用的 MATLAB 函数,确保它们均不需要大量验证工作。由于代码复杂,可以使用 Model Advisor 识别不推荐函数的使用情况。

·用更简单的实现替换不推荐的 MATLAB 函数。这些更简单的函数将更易于跟踪和测试。


MATLAB 工作流程的最佳实践 

检查模型时,查找 Model Advisor 检查himl_0013标记的 MATLAB 操作或函数。如果可能,请用其他函数替换它们。


如果功能无法替代,则需要单独测试。

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


MATLAB 工作流程的最佳实践 

如果发现 MATLAB 操作或函数会生成大量 C 代码且无法替换,请使用单元测试在外部测试这些函数。编写与函数使用位置相关的理由,并链接到测试结果的存储位置。


强数据类型


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


MATLAB 工作流程的最佳实践 

添加模型顾问检查以确保 MATLAB 代码中的所有变量都是强类型的。


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


背靠背(等效性)测试使您能够证明生成的代码的行为与模型相同,如 ISO 26262 表 7 软件单元验证方法所建议的那样。对于目标代码,使用处理器在环 (PIL) 测试;对于生成的 C 代码,使用软件在环 (SIL)(图 5)。测试用例应与模型在环 (MIL) 测试中使用的测试用例相同。对于单元验证,使用 SIL。对于集成测试,建议也在目标硬件上执行以验证整个开发工具链。

图 5. IEC 认证套件中指定的模型验证活动。


预防意外功能


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


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


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


MATLAB 工作流程的最佳实践 

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


静态代码分析


根据 ISO 26262 标准,静态分析包括搜索源代码文本或模型以查找与已知故障匹配的模式或是否符合建模或编码指南等活动。静态代码分析是在生成的代码上执行的(图 7)。


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


MISRA C 合规性


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


·用重写的函数替换内置的 MATLAB 函数

·对 MISRA C 警告做出解释


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


MATLAB 工作流程的最佳实践 

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


文档


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


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


系统设计说明


Simulink Report Generator™ 包含预定义的系统设计报告模板。此模板通常足以记录在 Simulink 中开发的组件,但不足以记录外部 MATLAB 函数,因为它们未包含在默认系统设计描述中。因此,我们建议自定义模板以包含外部 MATLAB 代码。


MATLAB 工作流程的最佳实践 

定制系统设计描述模板以包含外部 MATLAB 代码。


SOTIF 注意事项


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


IEC 认证套件包括对 SOTIF 的支持。就 SOTIF 而言,Simulink 和 MATLAB 工作流程之间没有太大区别。更新后的 IEC 认证套件包含有关使用 Automated Driving Toolbox™ 进行系统测试的信息。


概括


在符合 ISO 标准的软件开发中,完全基于 Simulink 的开发和以 MATLAB 为中心的工作流程之间的差异并不大。主要区别在于需要避免使用非推荐函数。Simulink Check 中的 ISO 26262 检查中有专门的检查来识别此类 MATLAB 函数,确保 MATLAB 实现生成适合高完整性应用程序的代码。使用以 MATLAB 为中心的 ISO 26262 工作流程的其他挑战可以通过简单的解决方法来解决,例如使用理由过滤器或将需求连接到模型中的多个级别。


[1]本文中的建议基于 MATLAB R2024a。。

[2]开发人员有时会选择 MATLAB 而不是 Simulink,因为他们认为 Simulink 不支持差异和合并。如果您使用 Simulink,则可以使用内置工具来处理差异和合并。如果您的团队使用 Git 等分布式版本控制系统,则可以在发生冲突时进行三方合并。

[3]在 MATLAB R2023a 中,发布了 MATLAB Test™。MATLAB Test 提供用于开发、执行、测量和管理 MATLAB 代码动态测试的工具。这使开发人员可以在开发高完整性软件时留在 MATLAB 环境中。MATLAB Test 使您能够满足受监管应用程序中的规范,并且是 IEC 认证套件的一部分。



分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号