使用MATLAB的自动驾驶应用ISO26262工作流程:指南和最佳实践汽车测试技术

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

推荐的建模模式

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

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

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

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

MATLABISO26262参考工作流程:概述

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

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

·需求编写和架构验证

·静态模型分析

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

·静态代码分析

·文档

需求编写和架构验证

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

图3.需求链接活动。

将需求链接到MATLAB代码

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

MATLAB工作流程的最佳实践

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

静态模型分析

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

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

语言子集

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

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

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

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

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

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

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

强数据类型

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

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

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

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

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

预防意外功能

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

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

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

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

静态代码分析

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

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

MISRAC合规性

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

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

·对MISRAC警告做出解释

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

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

文档

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

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

系统设计说明

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

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

SOTIF注意事项

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

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

概括

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

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

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

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

THE END
1.SAST及静态代码分析的工作原理BlackDuck静态应用安全测试 (SAST) 也称静态分析,是一种测试方法,通过分析源代码发现容易让组织的应用受到攻击的安全漏洞。SAST 在编译代码之前扫描应用。它也称为白盒测试。 SAST 解决哪些问题? SAST 在软件开发生命周期 (SDLC) 的早期阶段进行,因为测试时不需要应用运行,并且可以在不执行代码的情况下进行测试。它能帮助开发https://www.synopsys.com/zh-cn/glossary/what-is-sast.html
2.探讨代码质量管理体系建设:从静态分析到持续审查的全流程方案一、静态分析在代码质量管理中的重要性 静态分析是指在代码运行之前对代码进行的一种分析,通过检查代码本身的结构和语法,以发现潜在的问题和错误。静态分析可以帮助我们在代码实际运行https://www.jianshu.com/p/8f19accd1798
3.开源项目SDF常见问题解决方案运行示例代码以确认安装成功。 python examples/example.py 2. OpenVDB 安装问题 问题描述: 项目依赖于 OpenVDB 库,但 OpenVDB 的安装过程可能比较复杂,尤其是对于不熟悉 C++ 编译的用户。 解决步骤: 克隆OpenVDB 仓库: 从GitHub 克隆 OpenVDB 的源代码。 https://blog.csdn.net/gitblog_00673/article/details/144390928
4.虚拟现实开发语言与全面执行计划数据,静态版探索之旅摘要:,,本文探讨了虚拟现实开发语言与全面执行计划数据的关系,并介绍了静态版探索之旅。文章指出,虚拟现实开发语言是实现虚拟现实应用的关键,而全面执行计划数据则为开发过程提供了重要支持。通过静态版探索之旅,可以更好地理解虚拟现实技术的潜力和应用场景。文章强调了虚拟现实技术在当代社会的重要性,并展望了其未来的http://good.hnspacenet.com/post/53295.html
5.modifytextfieldlog·PullRequest!50344·OpenHarmony/此Pull Request 需要通过一些审核项 类型 指派人员 状态 审查 已完成 (1/1) 已完成 (3/3) 测试 已完成 (1/1) +12 -2 frameworks/core/components_ng/pattern/text_field/text_field_event_hub.h 100644 -> 100644 365 371 { 366 372 if (onWillDeleteEvent_https://gitee.com/openharmony/arkui_ace_engine/pulls/50344/files
6.如何利用AIGC完成项目的数据流分析AIGC是一种利用人工智能技术生成内容的技术,包括图像、文本、代码等。通过深度学习模型,AIGC能够自动进行内容生成与优化,提高工作效率和创造力。在数据流分析中,AIGC可以用于自动检测数据流中的异常、预测数据趋势和生成优化方案。 4. 利用AIGC进行数据流分析的方法 https://blog.51cto.com/u_16123429/12789031
7.PolySpace能够发现RunTimeError的静态分析工具PolySpace是一款静态分析测试工具,它能对被测代码进行静态扫描,查找出可能存在Run-Time Error的代码段。我觉得这个功能可以说是创新性的。传统的静态分析工具,比如Logiscope,只能帮助使用人员分析程序的流程结构,统计程序的复杂性,或者是审查代码的编码规范性;而传统的Run-Time Error工具,比如著名的BoundChecker,以及Purifyhttp://www.cnitblog.com/qiuyangzh/archive/2006/01/18/6241.html
8.PolyspacePolyspace 产品系列 Polyspace 产品通过在整个开发生命周期中测试和监控软件质量来保证关键代码的安全。 Polyspace Access 识别编码缺陷,查看静态分析结果,并监控软件质量指标。 Polyspace Code Prover Server 持续并详尽地验证 CI 管道中的关键 C 和 C++ 代码语句。 https://cn.mathworks.com/products/polyspace.html
9.静态代码分析静态代码分析也称静态分析,作为一种软件验证活动,它不要求执行代码,而是通过分析源代码实现质量、可靠性和安全性目的。使用静态分析,您可以识别可能危害您应用安全的缺陷和安全漏洞。静态分析不产生测试用例编写和代码检测配置的开销,因此可以较为经济地衡量和跟踪软件质量指标。 https://ww2.mathworks.cn/discovery/static-code-analysis.html
10.Polyspace静态程序代码分析高效遵循多重规范单是这项改变就为我们整体工作流程带来重大改善,因为它建立了一个闸门机制,确保开发人员只有在他们的程序代码完整通过合适的软件质量目标,并且解决或证明在静态分析找到的任何问题时,才能够成功完成收取要求。 在软件整合及测试期间,Polyspace产品被使用来执行以整合程序代码的软件质量目标为基础的静态分析。在此阶段, https://www.eepw.com.cn/article/202309/450902.htm
11.汽车软件单元测试集成测试系统测试的区别详解静态测试 静态代码测试是一种分析源代码的过程,用于查找潜在的编码错误、代码缺陷和安全漏洞。静态代码测试并不直接运行程序,而是检查代码的结构、语法、命名规范、代码复杂度等方面的问题。静态代码检测可以在软件开发早去提供安全问题反馈,帮助开发人员在编译和运行代码之前发现潜在的问题。 https://www.eet-china.com/mp/a343242.html
12.最新MATLABR2018a/Simulink软件破解版补丁工具爱在灵灵久博客·覆盖率组合功能,可以用来组合多次测试运行(文件的)的覆盖率结果 oPolyspace Code Prover ·用于AUTOSAR软件组件静态分析的AUTOSAR支持 二、软件下载: 登陆官网https://cn.mathworks.com拉至页面底部,用邮箱申请试用软件。 、三、安装教程: 图文教程:https://pan.baidu.com/s/1h0NbgcLV-iVEoLTrprIrSg密码: ctyhttp://blog.az009.com/13951.html
13.代码审计工具汇总linux应用程序windows学会利用自动化代码审计工具、是每一个代码审计人员必备的能力。Fortify SCA Java、JSP、ASP.NET、C#、VB.NET、C、C++、COBOL、ColdFusion https://www.fortify.com Windows、Mac OS X 、 Linux 是一个静态的、白盒的软件源代码安全测试工具Checkmarx CxSuite JAVA、ASP.NET(C#、VB.NET)、JavaScript、Jscript、Chttps://www.163.com/dy/article/G8U4M7BF05319Y7J.html