模型覆盖率类型
Simulink® Coverage™ 可以执行多种类型的覆盖率分析。
执行覆盖率 (EC)
执行覆盖率是最基本的覆盖率形式。对于每一项,执行覆盖率确定该项在仿真期间是否被执行。
决策覆盖率 (DC)
决策覆盖率分析代表模型中决策点的元素,例如 Switch 模块或 Stateflow® 状态。对于每一项,决策覆盖率确定在经过该项的总仿真路径中,仿真实际遍历的路径所占的百分比。
有关模型覆盖率报告中决策覆盖率数据的示例,请参阅分析的决策。
条件覆盖率 (CC)
条件覆盖率分析输出其输入的逻辑组合的模块(例如,Logical Operator 模块)以及 Stateflow 转移。当测试用例使模型中逻辑模块的每个实例的每个输入以及转移上的每个条件在仿真期间至少一次为 true,至少一次为 false 时,该测试用例便实现了全覆盖。条件覆盖率分析针对模型中的每个模块报告测试用例是否完全覆盖了该模块。
在收集模型的覆盖率时,可能无法实现 100% 的条件覆盖率。例如,如果您通过在“配置参数”的覆盖率窗格中选择将 Simulink 逻辑模块视为短路来指定将逻辑模块视为短路,那么相关模块可能无法实现 100% 的条件覆盖率。有关详细信息,请参阅MCDC 分析。
有关模型覆盖率报告中条件覆盖率数据的示例,请参阅条件分析。
修正条件/决策覆盖率 (MCDC)
由 Simulink Coverage 软件执行的修正条件/决策覆盖率分析扩展了决策覆盖率和条件覆盖率分析的能力。它分析输出其输入的逻辑组合的模块以及 Stateflow 转移,以确定测试用例在多大程度上测试了逻辑模块输入和转移条件的独立性。
当一个输入的变化(独立于任何其他输入)导致模块输出发生变化时,测试用例便实现了对该模块的全覆盖。
当每个条件至少有一次因该条件的变化触发转移时,测试用例便实现了对 Stateflow 转移的全覆盖。
如果您的模型包含定义具有不同类型的逻辑运算符且条件超过 12 个的表达式的模块,软件将无法记录 MCDC 覆盖率。
由于 Simulink Coverage MCDC 覆盖率可能无法实现全决策或条件覆盖率,因此可以在未达到 100% 决策覆盖率的情况下实现 100% MCDC 覆盖率。
一些 Simulink 对象支持 MCDC 覆盖率分析,一些对象仅支持条件覆盖率分析,而一些对象仅支持决策覆盖率分析。接受覆盖率的模型对象中的表列出了哪些对象支持哪些类型的模型覆盖率分析。例如,Combinatorial Logic 模块可以进行决策覆盖率和条件覆盖率分析,但不支持 MCDC 覆盖率分析。
要按照 DO-178C/DO-331 标准为您的模型实现 100% MCDC 覆盖率,请在“配置参数”的覆盖率窗格中选择修正条件/决策覆盖率 (MCDC)作为结构覆盖率等级。
在收集模型的覆盖率时,可能无法实现 100% 的 MCDC 覆盖率。例如,如果您指定将逻辑模块视为短路,那么相关模块可能无法实现 100% 的 MCDC 覆盖率。
如果您独立运行各测试用例并累积所有覆盖率结果,则可以确定您的模型是否符合修正条件和决策覆盖率标准。有关 DO-178C/DO-331 标准的详细信息,请参阅Using Model Advisor Checks for DO-178C/DO-331 Industry Standards (Simulink Check)。
圈复杂度
使用此度量可计算模型的圈复杂度。圈复杂度是模型结构复杂度的度量。由于此分析未考虑的代码特征(例如合并逻辑和错误检查),因此模型的复杂度度量可能与生成代码的复杂度度量不同。
为计算对象(例如模块、图或状态)的圈复杂度,模型覆盖率使用以下公式:
N 是对象表示的决策点数,on 是第 n 个决策点的结果数。该计算将向量化运算或 Multiport switch 模块视为单个决策点。该工具将原子子系统和 Stateflow 图的复杂度数加 1。
结果会提供以下各项的局部和聚合圈复杂度:
模型
子系统
图
MATLAB® 函数
局部复杂度是对象在其层次结构级别上的圈复杂度。聚合圈复杂度是对象及其后代的圈复杂度。
圈复杂度:
无法在库模型上运行。
可以分析封装子系统中的内容。
不分析非活动变体。
(如果指定)会分析库链接模块或引用模型的内容。
不在加速模式下分析引用模型。
有关模型覆盖率报告中圈复杂度数据的示例,请参阅模型覆盖率报告中的圈复杂度。有关代码的圈复杂度的详细信息,请参阅圈复杂度。
查找表覆盖率
查找表覆盖率(LUT) 检查模块,例如 1-D Lookup Table 模块,它基于输入和输出表中的输入来输出信息,在表条目间内插或基于条目外插。查找表覆盖率记录查找表使用每个插值区间的频率。当测试用例至少执行一次每个内插区间和外插区间时,该测试用例便实现了全覆盖。对于模型中的每个查找表模块,覆盖率报告会显示查找表的彩色图,指示每个插值。如果 n-D Lookup Table 模块的断点总数超过 1,500,000 个,则软件无法记录该模块的覆盖率。
有关模型覆盖率报告中查找表覆盖率数据的示例,请参阅N 维查找表。
注意
只能在仿真开始时配置查找表覆盖率。如果您在运行时调节影响查找表覆盖率的参数,则受影响模块的覆盖率设置不会更新。
信号范围覆盖率
信号范围覆盖率记录在仿真期间测量的模型中每个模块处的最小信号值和最大信号值。只有具有输出信号的模块才支持信号范围覆盖率分析。
Simulink Coverage 不会为控制信号记录信号范围覆盖率,控制信号是一个模块用于启动另一个模块执行的信号。请参阅控制信号。
如果模型中的信号总数超过 65535,或者模型中包含宽度超过 65535 的信号,则 Simulink Coverage 无法记录信号范围覆盖率。
Simulink Coverage 通过使用数组表示法在覆盖率报告中区分标量信号和向量信号。如果模型中包含无界可变大小信号,Simulink Coverage 会报告信号范围的聚合测量值,即使只有一个维度是无界的。无界数组是指最大数组大小设置为 inf 的可变大小数组。有关无界可变大小数组的详细信息,请参阅自定义可变大小。
有关模型覆盖率报告中信号范围覆盖率数据的示例,请参阅信号范围分析。
注意
为可重用子系统或具有单范围覆盖率的 Stateflow 构造创建累积覆盖率时,累积覆盖率具有最大可能的信号值范围。有关详细信息,请参阅获取可重用子系统的累积覆盖率。
信号大小覆盖率
信号大小覆盖率记录模型中所有可变大小信号的最小大小、最大大小和分配大小。报告中仅包含具有可变大小输出信号的模块。如果可变大小信号是无界的,则在覆盖率报告中分配大小显示为 -,由 sigsizeinfo 以 inf 形式返回。如果最大数组大小为 inf,则可变大小信号是无界的。
如果模型中的信号总数超过 65535,或者模型中包含宽度超过 65535 的信号,则软件无法记录信号大小覆盖率。
有关模型覆盖率报告中信号大小覆盖率数据的示例,请参阅可变维度信号的信号尺寸覆盖率。
有关可变大小信号的详细信息,请参阅可变大小信号基础知识。
目标和约束覆盖率
Simulink Coverage 软件收集以下 Simulink Design Verifier™ 模块和用于代码生成的 MATLAB 函数的模型覆盖率数据:
| Simulink Design Verifier 模块 | 用于代码生成的 MATLAB 函数 |
|---|---|
| Test Condition (Simulink Design Verifier) | sldv.condition (Simulink Design Verifier) |
| Test Objective (Simulink Design Verifier) | sldv.test (Simulink Design Verifier) |
| Proof Assumption (Simulink Design Verifier) | sldv.assume (Simulink Design Verifier) |
| Proof Objective (Simulink Design Verifier) | sldv.prove (Simulink Design Verifier) |
如果您没有 Simulink Design Verifier 许可证,虽然您可以收集包含这些模块或函数的模型的模型覆盖率,但无法使用 Simulink Design Verifier 软件分析该模型。
通过在您的模型中添加一个或多个 Simulink Design Verifier 模块或函数,您可以:
检查 Simulink Design Verifier 分析的结果,运行生成的测试用例,并使用这些模块来观察结果。
使用 Test Objective 模块定义模型需求,并利用软件在仿真期间收集的模型覆盖率数据来验证结果。
分析模型,创建测试框架,并使用 Test Objective 模块对该框架进行仿真以收集模型覆盖率数据。
分析模型,并使用 Proof Assumption 模块验证 Simulink Design Verifier 识别出的任何反例。
如果您指定收集 Simulink Design Verifier 覆盖率,则:
软件会收集 Simulink Design Verifier 模块和函数的覆盖率。
软件会检查连接到每个 Simulink Design Verifier 模块的信号的数据类型。如果信号数据类型是定点,模块参数也必须是定点。如果信号数据类型不是定点,软件会尝试转换模块参数的数据类型。如果软件无法转换模块参数的数据类型,则会报告错误,您必须显式地为模块参数分配与信号匹配的数据类型。
如果您的模型包含 Verification Subsystem 模块,软件只会记录 Verification Subsystem (Simulink Design Verifier) 模块中的 Simulink Design Verifier 模块的覆盖率;它不会记录 Verification Subsystem 模块中任何其他模块的覆盖率。
如果您未指定收集 Simulink Design Verifier 覆盖率,软件将不会检查您的模型中任何 Simulink Design Verifier 模块和函数的数据类型,也不会收集覆盖率。
有关模型覆盖率报告中 Simulink Design Verifier 模块或函数的覆盖率数据的示例,请参阅Simulink Design Verifier 覆盖率。
整数溢出饱和处理覆盖率
整数溢出饱和处理覆盖率检查选择了对整数溢出进行饱和处理参数的模块,例如 Abs 模块。只有选择了该参数的模块才支持整数溢出饱和处理覆盖率分析。
整数溢出饱和处理覆盖率记录对整数溢出进行饱和处理的次数。
当模块至少有一次在整数溢出时进行了饱和处理,并且至少有一次在整数溢出时未进行饱和处理时,测试用例便实现了全覆盖。
有关模型覆盖率报告中整数溢出饱和处理覆盖率数据的示例,请参阅整数溢出分析。
关系边界覆盖率
关系边界覆盖率检查具有显式或隐式关系运算的模块、Stateflow 图和 MATLAB 函数模块。
Relational Operator 和 If 等模块具有显式关系运算。
Abs 和 Saturation 等模块具有隐式关系运算。
对于这些模型对象,该度量记录仿真是否测试到关系运算的以下情况:
操作数值相等。
仅当两个操作数都是整数或定点数时,关系边界覆盖率的这一部分才适用。
操作数值相差一定的容差。
关系边界覆盖率的这一部分适用于所有操作数。对于整数和定点数操作数,容差是固定的。对于浮点操作数,您可以使用预定义的容差,也可以指定自己的容差。
容差值取决于两个操作数的数据类型。如果两个操作数具有相同的类型,则容差遵循以下规则:
| 操作数的数据类型 | 容差 |
|---|---|
浮点,例如 single 或 double |
|
| 定点 | 对应于最低有效位的值。有关详细信息,请参阅精度 (Fixed-Point Designer)。要找到精度值,请使用 lsb (Fixed-Point Designer) 函数。 |
| 整数 | 1 |
| 布尔 | 不适用 |
| 枚举 | 不适用 |
如果两个操作数具有不同的类型,则容差遵循更严格类型的规则。如果其中一个操作数是布尔类型,则容差遵循另一个操作数的规则。严格程度按以下顺序递减:
浮点
定点
整数
如果两个操作数都是定点类型但精度不同,则使用较小的精度值作为容差。
对于具有浮点数据类型的关系边界,覆盖率报告使用标准区间表示法,其中方括号 [] 表示包含,圆括号 () 表示不包含。例如,一个显示 [-tol..0) 的表代表语句 value >= -tol && value < 0。
在“配置参数”对话框的覆盖率窗格中的覆盖率度量部分选择此度量时,您可以为浮点数输入的关系边界覆盖率指定绝对容差值和相对容差值。
详细信息:
有关此覆盖率度量在报告中的显示方式,请参阅关系边界。
有关哪些模型对象接收此覆盖率,请参阅接受覆盖率的模型对象中的表。
有关如何从 MATLAB 命令行获取覆盖率结果,请参阅收集模型中支持模块的关系边界覆盖率。