📌 声明:本文内容基于 MathWorks 官方文档(Simulink Coverage™ Documentation, R2024b)及 TÜV SÜD 官方认证材料整理,适用于 ISO 26262:2018 标准下的功能安全认证项目。

1. 快速导航

2. 总体简介

在 ISO 26262 功能安全认证过程中,结构覆盖率 (Structural Coverage) 是衡量软件单元测试充分性的核心指标。根据不同的 ASIL 等级,标准要求或建议达到不同的覆盖率目标。

MathWorks 提供了 Simulink Coverage™MATLAB Test™ 等工具,用于在基于模型的设计 (MBD) 流程中收集模型和代码的覆盖率数据。然而,ISO 26262 的标准术语与 MATLAB/Simulink 工具中显示的指标名称存在一些差异。

⚠️ 核心理解要点

当测试对象不同时,同一个 ISO 26262 术语在工具界面中可能显示为不同的名称:

测试对象 Simulink 模型 (MIL) C/C++/MATLAB 代码 (SIL/PIL)
ISO 26262 术语 对应模型专用度量 对应代码通用度量

理解这一区别,是正确解读覆盖率报告、通过认证评审的关键。以下各章节将逐一说明。

3. 覆盖率指标的包含关系

MathWorks 官方明确指出,结构覆盖率等级参数的每个度量选择都包含它前面的度量——即选择较高的覆盖率级别后,工具会自动同时测量所有较低级别的指标。

严格程度排序(从基础到最严格)

模块执行/语句覆盖 (Block Execution / Statement)
    ↓ 包含
决策/分支覆盖 (Decision / Branch)
    ↓ 包含
条件/决策覆盖 (Condition/Decision, CDC)
    ↓ 包含
修正条件/决策覆盖 (MC/DC)

具体来说:

  • 选择 Decision:同时分析 Decision CoverageBlock Execution Coverage
  • 选择 Condition/Decision:同时分析 Condition CoverageDecision CoverageBlock Execution Coverage
  • 选择 MCDC:同时分析 MCDCCondition CoverageDecision CoverageBlock Execution Coverage

4. 官方术语定义

4.1 语句/模块执行覆盖 (Statement / Block Execution Coverage)

ISO 26262 定义:Statement Coverage —— 确保代码中的每一条可执行语句都被执行至少一次。

MathWorks 工具定义

Block Execution Coverage — “模块执行覆盖率用于说明在仿真期间是否执行了每个模块。与模块执行覆盖率最相似的代码覆盖率度量是语句覆盖率。”

工具默认测量所有可执行模块,但某些类型的模块(如注释、虚拟模块等)不会获得覆盖率数据。

4.2 决策/分支覆盖 (Decision / Branch Coverage)

ISO 26262 定义:Branch/Decision Coverage —— 确保每个决策点(如 if-else、switch 语句)的布尔输出至少取一次 True 和至少取一次 False。

MathWorks 工具定义

Decision Coverage — “决策覆盖率用于分析代码或模型中的决策点。在代码覆盖率中,决策是由一个或多个条件以及零个或多个布尔运算符组成的布尔表达式。”

官方举例说明:决策 A && B 在至少一个时间步为 True、且至少一个时间步为 False,即达到 100% 决策覆盖率,无论决策内各个条件的结果如何。同样,Simulink 中的 Switch 模块如果 True 情形和 False 情形都被执行过,即达到 100% 决策覆盖率。

4.3 条件覆盖 (Condition Coverage)

ISO 26262 定义:Condition Coverage —— 确保每个原子布尔条件(不包含布尔运算符的基本表达式,如 A > 5)都独立地至少取一次 True 和至少取一次 False。

MathWorks 工具定义

Condition Coverage — “条件是不包含布尔运算符的布尔表达式。在模型覆盖率中,条件覆盖率用于分析输出其输入的逻辑组合的模块(如 Logical Operator 模块)。”

对于 Logical Operator 模块(And 运算符),如果每个输入信号至少一个时间步为 True、至少一个时间步为 False,则该模块具有 100% 的条件覆盖率。

4.4 修正条件/决策覆盖 (MC/DC)

ISO 26262 定义:MC/DC —— 在决策和条件覆盖的基础上,要求每个原子条件能独立地影响其所在决策的最终结果。这是最严格的覆盖率指标,通常要求 ASIL C/D 级别的项目达到。

MathWorks 工具定义

Modified Condition/Decision Coverage (MCDC) — “MCDC 属于条件决策覆盖率,要求每个条件必须独立影响决策结果。”

官方举例说明:对于决策 A && B,要实现 100% MCDC 覆盖率,必须显示 TT、TF 和 FT 三种情形(不需要 FF 情形),以表明每个条件都独立影响了决策结果。

📌 关键说明:ISO 26262:2018 Part 6 Table 9 对 ASIL D 级别的单元测试强烈推荐使用 MC/DC。

5. ISO 26262 与 MATLAB/Simulink 术语映射总表

下表根据 MathWorks 官方文档和 TÜV SÜD 认证材料整理,列出不同测试场景下的术语对应关系。

ISO 26262 标准术语 测试对象:Simulink 模型 (MIL) 测试对象:代码 (SIL/PIL / 手写 C/MATLAB)
Statement Coverage
(语句覆盖)
Block Execution Coverage
模块执行覆盖率
官方注释:“与模块执行覆盖率最相似的代码覆盖率度量是语句覆盖率”
Statement Coverage
语句覆盖率
(代码覆盖率分析时自动包含)
Branch Coverage
(分支覆盖)
Decision Coverage
(决策覆盖)
Decision Coverage
决策覆盖率
分析 Switch、if-else 等决策点
Decision Coverage
决策覆盖率
分析代码中的分支决策点
Condition Coverage
(条件覆盖)
Condition Coverage
条件覆盖率
分析 Logical Operator 模块及 Stateflow 转移中的原子条件
Condition Coverage
条件覆盖率
Condition/Decision Coverage (CDC)
(条件/决策覆盖)
Condition/Decision Coverage
条件决策覆盖率
同时分析条件和决策
Condition/Decision Coverage
条件决策覆盖率
MC/DC
(修正条件/决策覆盖)
Modified Condition/Decision Coverage (MCDC)
修正条件决策覆盖率
Modified Condition/Decision Coverage (MCDC)
修正条件决策覆盖率

📌 核心澄清:上表中 ISO 26262 标准术语与 MATLAB/Simulink 工具术语完全等价,不应理解为有不同的含义。真正的区别在于测试对象不同时,工具中显示的指标名称不同。

6. 🔬 关键细节深度辨析

6.1 ❓ 常见误区:模型的 Block Execution 不等于代码的 Statement Coverage?

✅ 正确理解:二者在目标和测量原则上完全等价,只是名称不同。

MathWorks 官方文档明确说明:“模块执行覆盖率用于说明在仿真期间是否执行了每个模块。与模块执行覆盖率最相似的代码覆盖率度量是语句覆盖率。”

因此:

  • 若测试对象是 Simulink 模型,覆盖率报告中看到的是 Block Execution Coverage
  • 若测试对象是 生成的 C/C++ 代码或 MATLAB 代码,覆盖率报告中看到的是 Statement Coverage

两者本质相同,都是验证每个“可执行单元”(模型模块 / 代码语句)是否被执行过。

6.2 ❓ 常见误区:Branch Coverage 和 Decision Coverage 是什么关系?

✅ 正确理解:在 ISO 26262 的语境下,二者基本等价,常可互换使用。在 MATLAB/Simulink 工具中统一使用 Decision Coverage 这一术语。

核心区别在于形式

  • Decision Coverage:决策是由一个或多个条件以及零个或多个布尔运算符组成的布尔表达式
  • Branch Coverage:每个控制流分支(True/False 路径)的执行情况

关键辨析:当决策包含复合逻辑(如 A && B)时:

  • Decision Coverage:只关心整个决策最终结果为 True/False,不关心内部条件的组合
  • Condition Coverage:关心每个原子条件取到 True/False
  • MC/DC:关心每个条件能否独立地影响最终决策

在 ISO 26262 Part 6 Table 9 中,标准同时推荐 Branch Coverage(分支覆盖)和 MC/DC(修正条件/决策覆盖)作为单元测试的方法。

7. 高级覆盖率度量

7.1 Condition Decision Coverage (CDC)

CDC 是 ISO 26262 中未单独列出、但 MATLAB/Simulink 工具中提供的一种组合指标,它同时要求:

  • Decision Coverage = 100%
  • Condition Coverage = 100%

在 Simulink Coverage 配置中选择 Condition/Decision 级别即可启用该度量。

7.2 模型特有度量:Relationship Boundary Coverage

这是 Simulink 模型测试中特有的覆盖率度量,用于测试模型中关系运算符(<, >, <=, >=)在浮点数边界附近的取值行为。例如,对于一个 < 运算符,需要测试略小于边界值、等于边界值、略大于边界值等情况,以确保边界处理正确。

7.3 代码特有度量:整数溢出饱和覆盖率与函数调用覆盖

整数溢出饱和覆盖率 (Saturation on Integer Overflow)
检查模型中配置为“溢出时饱和”的整数运算,在运行时是否确实发生了溢出并被正确饱和处理。这是 Simulink 建模中用于安全的常用机制。

📌 注意:进行认证项目时,建议使用 IEC Certification Kit 中提供的完整工具鉴定包,其中包含详细的官方映射文档和 TÜV SÜD 认证报告,以确认这些高级度量在您的具体项目中是否符合认证要求。

8. 不同 ASIL 等级的覆盖率要求

ISO 26262 Part 6 的 Table 9 根据不同的 ASIL 等级,对软件单元测试的结构覆盖率提出了相应建议。

ASIL 等级 推荐的结构覆盖率指标 补充说明
ASIL A Statement Coverage (建议+)
语句覆盖
最低安全完整性等级,满足语句覆盖通常即可
ASIL B Branch Coverage (强烈建议++)
分支覆盖
需要验证每个分支/决策路径
ASIL C Branch Coverage (强烈建议++)
分支覆盖
Condition Coverage (可选补充)
条件覆盖
在分支覆盖基础上,条件覆盖可作为补充
ASIL D MC/DC (强烈建议++)
修正条件/决策覆盖
最高安全等级,要求最严格的覆盖指标

📌 重要提示:标准中使用“建议 (Recommended)”和“强烈建议 (Highly Recommended)”的措辞,表示不同程度的推荐强度。“强烈建议”的指标在实际认证项目中几乎被视为强制要求。

需要注意的是,ISO 26262 标准自身并不规定 Statement Coverage 必须恰好对应某种特定的工具指标,而是要求开发方定义和论证所使用的覆盖率度量与方法。MathWorks 官方通过 IEC Certification Kit 提供了详细的映射文档,证明其工具满足标准要求。

9. 官方认证资源:IEC Certification Kit

在开始认证项目前,请务必了解以下核心资源:

IEC Certification Kit 是 MathWorks 提供的官方工具包,用于支持功能安全认证。其核心内容包括:

资源组件 说明
TÜV SÜD 证书与评估报告 由 TÜV 南德出具的官方认证文件,证明工具适用于安全相关软件开发,支持 ASIL A-D 全等级
参考工作流和映射文档 详细说明 MathWorks 工具的功能如何对应并满足 ISO 26262 标准的具体条款,是进行工具鉴定的核心依据
模板与验证套件 可直接使用或定制的工作产品和测试用例模板

注意事项

  • 进行正式的 ISO 26262 认证时,必须查阅 IEC Certification Kit 中的最新映射文档,而非仅依赖本文或网络文章
  • 该工具包支持 ISO 26262:2018,ASIL A 到 ASIL D
  • 目前(截至 2026 年 5 月),ISO 26262:2018 仍为官方当前版本,第三版预计在 2027 年正式发布

10. 常见问题解答 (FAQ)

Q1:在进行 ISO 26262 认证时,我应该如何设置 Simulink Coverage 的覆盖率等级?

根据项目的目标 ASIL 等级,在“配置参数”的覆盖率窗格中选择对应的结构覆盖率等级。ASIL D 项目应选择 MCDC,ASIL B/C 可选择 DecisionCondition/Decision,ASIL A 可选择 Block Execution

Q2:ISO 26262 标准本身会不会强制要求某个覆盖率指标?

不会。ISO 26262 标准提供的是指导性的“表 (Tables)”,分别使用“建议 (Recommended)”和“强烈建议 (Highly Recommended)”两种措辞。“强烈建议”在实际认证项目中通常会被视为强制性要求。

Q3:模型覆盖率分析 (MIL) 和代码覆盖率分析 (SIL/PIL) 有什么区别?

MIL 分析的是 Simulink 模型本身,报告中显示的是 Block Execution Coverage 等模型指标;SIL/PIL 分析的是从模型生成的 C/C++ 代码,报告中显示的是 Statement Coverage 等代码指标。两者覆盖的测试层面不同,在完整的 V 流程中应同时进行

Q4:我怎样获取更多关于映射和认证的信息?

通过 IEC Certification Kit 是获取官方映射文档最权威的方式。也可以联系 MathWorks 技术支持。

Q5:条件覆盖 (Condition Coverage) 和决策/分支覆盖 (Decision/Branch Coverage) 哪个更严格?

条件覆盖不一定比决策覆盖更严格,它们是两个不同的维度——决策覆盖关注整体结果,条件覆盖关注内部原子条件。两者的组合才有实际意义。MC/DC 是在两者基础上的进一步深化,是最严格的指标。

Q6:MCDC 覆盖率常常难以达到 100%,我该怎么办?

使用 Simulink Design Verifier 可以自动生成满足 MC/DC 要求的测试用例,可以显著提高测试效率。

11. 参考资料与官方链接

本文内容的权威性来源于以下官方渠道:

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐