Main Content

本页采用了机器翻译。点击此处可查看英文原文。

模型覆盖的类型

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 覆盖率。

为了使您的模型实现 100% MCDC 覆盖率(按照 DO-178C/DO-331 标准定义),在配置参数的覆盖率窗格中,选择 修正条件/决策覆盖率 (MCDC) 作为结构覆盖率等级

当您为某个模型收集覆盖率时,您可能无法实现 100% 的 MCDC 覆盖率。例如,如果您指定短路逻辑模块,则可能无法实现该模块的 100% MCDC 覆盖率。

如果您独立运行测试用例并累积所有覆盖率结果,您可以确定您的模型是否遵守修改后的条件和决策覆盖率标准。有关 DO-178C/DO-331 标准的更多信息,请参阅Using Model Advisor Checks for DO-178C/DO-331 Industry Standards (Simulink Check)

有关模型覆盖率报告中 MCDC 覆盖率数据的示例,请参阅MCDC 分析。有关累积覆盖率结果的示例,请参阅累计覆盖率

圈复杂度

使用此度量可计算模型的圈复杂度。圈复杂度是模型结构复杂度的度量。由于此分析未考虑的代码特征(例如合并逻辑和错误检查),模型的复杂性测量可能与生成的代码不同。

为了计算对象(例如模块、图或状态)的圈复杂度,模型覆盖率使用以下公式:

c=1N(on1)

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 模块的覆盖率;它不会记录验证子系统中任何其他模块的覆盖率。

如果您未指定收集 Simulink Design Verifier 覆盖率,则软件不会检查模型中任何 Simulink Design Verifier 模块和函数的数据类型,也不会收集覆盖率。

有关模型覆盖率报告中 Simulink Design Verifier 模块或函数的覆盖率数据示例,请参阅Simulink Design Verifier 覆盖率

整数溢出覆盖率

整数溢出饱和覆盖率检查模块,例如 Abs 模块,并选择对整数溢出进行饱和处理参数。只有选择了此参数的模块才会接收整数溢出饱和覆盖率。

整数溢出饱和覆盖率记录模块因整数溢出而饱和的次数。

当模块在整数溢出时至少饱和一次并且至少不饱和一次时,测试用例实现全覆盖。

有关模型覆盖率报告中整数溢出饱和覆盖率的示例,请参阅整数溢出分析

关系边界覆盖率

关系边界覆盖率检查具有显式或隐式关系操作的模块、Stateflow 图和 MATLAB Function 模块。

对于这些模型对象,度量记录仿真是否使用以下方式测试关系操作:

  • 操作数值相等。

    关系边界覆盖率的这一部分仅当两个操作数都是整数或定点数时才适用。

  • 操作数值之间存在一定的容差。

    关系边界覆盖率的这一部分适用于所有操作数。对于整数和定点操作数,容差是固定的。对于浮点操作数,您可以使用预定义的容差,也可以指定自己的容差。

容差值取决于两个操作数的数据类型。如果两个操作数具有相同的类型,则容差遵循以下规则:

操作数的数据类型容差
浮点数,例如 singledouble

max(absTol, relTol* max(|lhs|,|rhs|))

  • absTol 是您指定的绝对容差值。默认值为 1e-05

  • relTol 是您指定的相对容差值。默认值为 0.01

  • lhs 是左操作数,rhs 是右操作数。

  • max(x,y) 返回 xy,以较大者为准。

定点对应于最低有效位的值。有关更多信息,请参阅精度 (Fixed-Point Designer)。要查找精度值,请使用 lsb (Fixed-Point Designer) 函数。
整数1
布尔类型不适用
枚举不适用

如果两个操作数的类型不同,则容差遵循更严格类型的规则。如果其中一个操作数是布尔值,则容差遵循另一个操作数的规则。严格程度按以下顺序降低:

  1. 浮点

  2. 定点

  3. 整数

如果两个操作数都是定点数但精度不同,则使用较小的精度值作为容差。

对于具有浮点数据类型的关系边界,覆盖率报告使用标准区间符号,其中方括号 [] 表示包含,圆括号 () 表示排除。例如,显示 [-tol..0) 的表代表语句 value >= -tol && value < 0

当您在配置参数对话框的 覆盖率窗格 中的覆盖率度量部分中选择此度量时,您可以指定浮点输入的关系边界覆盖率的绝对和相对容差的值。

更多信息: