技术文章

使用 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 函数。

使用外部 MATLAB 代码建模模式的 MATLAB 屏幕截图。

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

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

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

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

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

该图表显示了系统需求工作流程,其中包括需求创作、架构开发、建模、代码生成和编译器以及每个流程所使用的产品。

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

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

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

需求编写和架构验证

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

与图 2 相同的图表突出显示了需求链接活动:架构验证和需求创作。

图 3. 需求链接活动。

将需求链接到 MATLAB 代码

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

适用于 MATLAB 工作流程的最佳实践

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

静态模型分析

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

与图 2 相同的图表突出显示了静态模型分析活动。

图 4. IEC Certification Kit 中指定的静态模型分析活动。

语言子集

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

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

  • 评估所使用的 MATLAB 函数以确保它们都不需要大量的验证工作。模型顾问可用于识别由于代码复杂性而导致的非推荐功能的使用。
  • 用更简单的实现替换不推荐的 MATLAB 函数。这些更简单的功能将更容易追踪和测试。

适用于 MATLAB 工作流程的最佳实践

在检查模型时,查找由模型顾问检查 himl_0013 标记的 MATLAB 操作或函数。如果可能的话,用其他功能替换它们。

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

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

适用于 MATLAB 工作流程的最佳实践

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

强数据类型

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

适用于 MATLAB 工作流程的最佳实践

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

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

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

与图 2 相同的图表突出显示了模型验证活动:MIL 测试、PIL 背靠背测试和 SIL 背靠背测试。

图 5. IEC Certification Kit 中指定的模型验证活动。

预防意外功能

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

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

测试浏览器的屏幕截图突出显示了覆盖率过滤器文件名。

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

适用于 MATLAB 工作流程的最佳实践

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

静态代码分析

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

与图 2 相同的图表,突出显示使用 Polyspace 进行静态代码分析。

图 7. IEC Certification Kit 中指定的静态代码分析活动。

MISRA C 合规性

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

  • 用重写的函数替换内置的 MATLAB 函数
  • 对 MISRA C 警告做出解释

如果可能的话,我们的建议是替换该功能。为了确保替换的函数不被其他开发人员使用,请对非推荐函数实施模型顾问检查。

适用于 MATLAB 工作流程的最佳实践

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

文档

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

与图 2 相同的图表突出显示了需求创作、架构开发和建模。

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

系统设计说明

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

适用于 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 的一部分。

关于作者

Lars Rosqvist 是 MathWorks 汽车领域的高级团队负责人。他为不同行业的使用基于模型的设计和 MATLAB 的客户提供支持。他获得了 TÜV 南德认证的功能安全专家,并且多年来一直为客户提供 ISO 26262 认证支持。在加入 MathWorks 之前,Lars 曾在汽车行业担任软件开发人员,开发气候控制系统。Lars 获得了瑞典林雪平科技大学应用物理和电气工程硕士学位。

2024 年发布

查看文章,了解相关行业