本页面使用了机器翻译。
请花 1 分钟时间完成一个翻译质量的调查。
使用 MATLAB 开发自动驾驶应用的 ISO 26262 工作流:规范和最佳实践
作者 Lars Rosqvist, MathWorks
Simulink® 和 Stateflow® 在汽车 ECU 的 ISO® 26262 软件开发中的使用已经十分成熟。使用 MATLAB® 函数,以及 Simulink 模块 和 Stateflow 图,实现软件设计,尤其是自动驾驶应用,的趋势日益明显。本文提供了使用以 MATLAB 为中心的工作流程来验证是否符合 ISO 26262 软件标准的最佳实践[1]。这些最佳实践补充了 IEC Certification Kit 中所示的采用了基于模型的设计的 ISO 26262 参考工作流程。
推荐的建模模式
在本文中,我们使用一种纳入了 MATLAB 函数模块的 Simulink 模型的软件开发模式(图 1)。顶层 Simulink 模型承载着代码生成的所有配置设置。MATLAB 函数模块调用外部 MATLAB 函数。
这种建模模式充分利用了 Simulink 模型可用的所有验证和确认工具,同时支持使用MATLAB 语言实现功能[2]。它还利用了 MATLAB 的广泛功能。例如,ADAS 开发通常使用 MATLAB 来实现,因为复杂的数学功能可以用简洁、优雅的方式表达。
还有其他在安全关键型产品开发环境中使用 MATLAB [3] 的方法,本文未提及。
MATLAB ISO 26262 参考工作流程:概述
如前所述,本文描述的工作流程基于 IEC Certification Kit 中的 ISO 26262 参考工作流程(图 2)。
基于 MATLAB 的工作流程包括针对以下验证和确认活动的附加建议:
- 需求编写和架构验证
- 静态模型分析
- MIL 测试和 SIL 或 PIL 背靠背测试
- 静态代码分析
- 文档
需求编写和架构验证
ISO 26262 要求提供证据证明所有要求均已实施和测试。在 ISO 26262 参考工作流程中,图 3 中突出显示的架构验证和需求创作活动提供了这一证据。
将需求链接到 MATLAB 代码
使用 Requirements Toolbox™,您可以将需求链接到 MATLAB 函数中的代码行,就像将需求链接到 Simulink 模块一样。不同之处在于,现有的缺失需求检查不会检查外部 MATLAB 代码。建议您实施模型顾问检查,查找与需求无关的 MATLAB 容器。容器通常是外部 MATLAB 文件或 MATLAB 函数,具体取决于文件的大小。
静态模型分析
必须检查实施模型中每个组件的可读性、可理解性和可测试性(图 4)。Simulink Check™ 用于评估模型是否符合 ISO 26262 和 MathWorks 高完整性规范。
语言子集
MATLAB 中的编程可能涉及使用来自多个不同工具箱的函数。由于 MATLAB 是一种功能强大且抽象程度高的语言,因此您只需几行代码即可开发复杂的功能。在某些情况下,一行 MATLAB 代码可能会导致多行 C 代码,从而难以对生成的代码进行全覆盖验证。您需要知道您正在实现的功能是可测试的。ISO 26262 规定根据您所使用的功能类型使用语言子集(ISO 26262 中的表 1)。
我们建议您采取以下步骤来满足语言子集要求:
- 评估所使用的 MATLAB 函数以确保它们都不需要大量的验证工作。模型顾问可用于识别由于代码复杂性而导致的非推荐功能的使用。
- 用更简单的实现替换不推荐的 MATLAB 函数。这些更简单的功能将更容易追踪和测试。
如果功能无法替代,则需要单独测试。
- 通过高覆盖率的单独单元测试来验证功能。当覆盖率达到时,通过引用外部单元测试来证明这些功能的使用是合理的。
强数据类型
ISO 26262 要求所有变量都是强类型。模型顾问检查 Simulink 模型中的强类型模块,包括 MATLAB 函数模块的接口,但不检查外部 MATLAB 函数。为了克服这个障碍,编写一个检查来验证所有 MATLAB 函数都是强类型的。检查数据类型和数据维度尤为重要。
MIL 测试和 SIL 或 PIL 背靠背测试
背靠背 (等效性)测试使您能够证明生成的代码的行为与模型相同,正如 ISO 26262 表 7《软件单元验证方法》所建议的那样。对于目标代码,使用处理器在环 (PIL) 测试,对于生成的 C 代码,使用软件在环 (SIL)(图 5)。测试用例应与模型在环 (MIL) 测试中使用的测试用例相同。对于单元验证,使用 SIL。对于集成测试,建议也在目标硬件上执行以验证整个开发工具链。
预防意外功能
为了证明在代码生成期间没有添加非预期的功能,请在模型和代码测试期间测量测试覆盖率。测试覆盖率通常使用 Simulink Coverage™ 进行背靠背测试来完成。根据 ISO 26262,覆盖率用于评估验证的完整性并提供证据证明单元测试的目标已经实现。
根据 ISO 26262,缺少覆盖的代码需要进行审查和论证。当使用 Simulink 模块进行开发时,可以将论证连接到模型,这意味着在验证运行之间保留论证。此选项不适用于外部 MATLAB 函数。为了证明 MATLAB 函数缺少覆盖率,请向代码添加覆盖率过滤器,然后将其连接到测试工具或 Simulink Test™ 中的测试文件。我们的建议是将覆盖率过滤器文件连接到测试文件(图 6)。
静态代码分析
根据 ISO 26262 标准所述,静态分析包括在源代码文本或模型中搜索与已知故障匹配的模式或是否符合建模或编码指南等活动。对生成的代码进行静态代码分析(图 7)。
MISRA C 合规性
评估 MISRA®对于从 MATLAB 生成的代码的 C 兼容性,使用静态代码分析工具(如 Polyspace Bug Finder™)来检测不符合 MISRA C 兼容性的代码并手动调查结果。如果不合规的代码来自内置 MATLAB 函数,您有两种选择:
- 用重写的函数替换内置的 MATLAB 函数
- 对 MISRA C 警告做出解释
如果可能的话,我们的建议是替换该功能。为了确保替换的函数不被其他开发人员使用,请对非推荐函数实施模型顾问检查。
文档
在提供符合 ISO 26262 要求的最终安全案例中,您需要记录验证过程中的每个步骤,从需求到验证。该文档应包括功能的设计描述。图 8 突出显示了设计描述中必须包含的一些活动。
系统设计说明
Simulink Report Generator™ 包含预定义的系统设计报告模板。该模板通常适用于记录在 Simulink 中开发的组件,但不适用于记录外部 MATLAB 函数,因为它们不包含在默认的系统设计描述中。因此,我们建议定制模板以包含外部 MATLAB 代码。
SOTIF 注意事项
在 ADAS 等复杂系统中,某个功能可能会按预期运行,但仍会导致危险行为。在 ISO 21448 预期功能安全性 (SOTIF) 标准的指导下,您可以通过将额外的验证和确认活动集成到基于模型的设计中来解决此问题。我们建议添加随机操作条件测试来扩展测试并包括未知的用例。这些随机测试应该根据系统要求来验证实施模型和集成目标代码的行为。
IEC Certification Kit 包括对 SOTIF 的支持。当谈到 SOTIF 时, Simulink 和 MATLAB 工作流程之间没有太大区别。更新后的 IEC Certification Kit 包括有关使用 Automated Driving Toolbox™ 进行系统测试的信息。
小结
在符合 ISO 标准的软件开发中,完全基于 Simulink 的开发和以 MATLAB 为中心的工作流程之间的差异并不大。主要的区别是需要避免使用非推荐的功能。Simulink Check 中的 ISO 26262 检查中有专门的检查来识别此类 MATLAB 函数,确保MATLAB 实现生成适合高完整性应用程序的代码。针对 ISO 26262 使用以 MATLAB 为中心的工作流程所面临的其他挑战可以通过简单的解决方法来解决,例如使用证明过滤器或将需求连接到模型中的多个级别。
[1] 本文中的建议基于 MATLAB R2024a。如果您使用的是其他版本,请联系您的 MathWorks 代表以了解使用 MATLAB 和 Simulink 实现 ISO 26262 的功能。
[2] 开发人员有时会选择 MATLAB 而不是 Simulink,因为他们认为 Simulink 不支持差异和合并。如果您在 Simulink 中工作,则可以使用内置工具来处理差异和合并。如果您的团队使用像 Git 这样的分布式版本控制系统,那么当发生冲突时,您可以进行三方合并。
[3] 在 MATLAB R2023a 中,发布了MATLAB Test™。MATLAB Test 提供用于开发、执行、测量和管理 MATLAB 代码动态测试的工具。这使得开发人员在开发高完整性软件时可以留在 MATLAB 环境中。MATLAB Test 使您能够满足受监管应用程序的规范,并且是 IEC Certification Kit 的一部分。
2024 年发布