Main Content

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

在闭环仿真模型中实现缺失覆盖

如果您有一个子系统或 Stateflow® 图表未实现 100%覆盖率,并且您不想将子系统或图表转换为 Model模块,请按照此示例实现完全覆盖率。

该示例采用闭环控制器模型。闭环控制器将指令传递给受控系统,并在执行控制指令时从环境接收信息。控制器在收到此信息时可以调整和改变其指令。

sldvdemo_autotrans模型是一个闭环仿真模型。ShiftLogic Stateflow 图表代表该模型的控制器部分。ManeuversGUI Signal Builder 模块中设计的测试用例驱动模块仿真。

记录模型的覆盖数据

要仿真ShiftLogic 控制器的模型、记录条件、决策和 MCDC覆盖率:

  1. 打开示例模型:

    openExample('sldv/UsingExistingCoverageDataSubsystemAnalysisExample',...
    'supportingFile','sldvdemo_autotrans')
  2. App 选项卡上,点击App 部分右侧的箭头。

    模型验证、确认和测试 下,点击覆盖率分析器

  3. 覆盖率 选项卡上,点击设置

  4. 在配置参数对话框的 覆盖率窗格上,设置以下选项:

    • 选择启用覆盖率分析

    • 选择子系统并点击选择子系统

    • 在子系统选择对话框中,选择ShiftLogic并点击OK

  5. 覆盖率度量 下,选择 修正条件决策覆盖率(MCDC)

  6. 如果选择了 其他度量,则清除它们。

  7. 在配置参数对话框的 覆盖率 > 结果窗格中,设置以下选项:

    • cvdata 对象名称字段中,输入covdata_original_controller来为覆盖率数据工作区变量指定一个唯一的名称。

    • 选择 分析后自动生成报告

  8. 点击确定

  9. 启动sldvdemo_autotrans模型的仿真,记录覆盖率数据。

    仿真结束后,覆盖率报告打开。报告表明,ShiftLogic Stateflow 图表实现了以下覆盖率:

    • 决策:87%(27/31)

    • 健康)状况:67%(8/12)

    • MCDC:33%(2/6)的情况扭转了结果

    仿真将覆盖率数据保存在MATLAB®工作区变量covdata_original_controller中,其中包含覆盖率数据的cvtest对象。

  10. 将覆盖率数据保存在 MATLAB 路径上的文件中:

    cvsave('existingcov',covdata_original_controller);

查找缺失覆盖率的测试用例

要找到 ShiftLogic 图表中缺失的覆盖率,请对该模块运行子系统分析。使用此技术可以将分析重点放在模型的单个部分上。

为了实现 ShiftLogic 控制器的 100%覆盖率,请运行使用现有覆盖率数据的测试生成分析。

  1. 右键单击 ShiftLogic模块并选择 Design Verifier > 选项

  2. 在配置参数对话框中,在 选择 树下,选择 Design Verifier 节点。在 模式 字段的 分析选项 下,选择 测试生成

  3. Design Verifier 节点下,选择 测试生成 。在 Existing coverage data 下,选择 Ignore objectives satisfied in existing coverage data

  4. 覆盖率数据文件 字段中,输入包含您在仿真期间记录的覆盖率数据的文件的名称:

    existingcov.cvt
  5. 单击应用保存这些设置。

  6. 选择 树下,点击Design Verifier

  7. 在主Design Verifier窗格上,点击生成测试

    分析将 Stateflow 图表提取到名为 ShiftLogic0 的新模型中。该分析对新模型进行分析,忽略先前满足并记录在existingcov.cvt文件中的覆盖率目标。

  8. 当测试生成分析完成后,在 Simulink® Design Verifier™ 日志窗口中,选择 仿真测试并生成模型覆盖率报告

    报告表明,使用 Simulink Design Verifier 生成的测试用例, ShiftLogic 图在仿真中实现了以下覆盖率:

    • 决策:84%(26/31)

    • 健康)状况:83%(10/12)

    • MCDC:67%(4/6)的情况扭转了结果

    Simulink Design Verifier 报告列出了提取模型的六个测试用例,这些测试用例满足了 existingcov.cvt 文件中未涵盖的目标。

    Simulink Design Verifier 报告表明 Stateflow 图表 ShiftLogic 中的两个覆盖率目标被证明无法满足。隐式事件 tick 永远不会是 false,因为 ShiftLogic 图表在每个时间步都会更新。对于时间事件 after(TWAIT, tick) 的任一实例,分析无法满足条件或 MCDC覆盖率。

    after(TWAIT, tick) 在语义上等同于

    Event == tick && temporalCount(tick) >= TWAIT

    如果将 after(TWAIT, tick) 移到条件中,例如

    [after(TWAIT, tick) && speed < down_th]

    Simulink Design Verifier 确定 tick 始终是 true,因此它仅测试 after(TWAIT, tick)temporalCount(tick) >= TWAIT 部分。分析能够找到满足 after(TWAIT, tick) 条件和 MCDC覆盖率的测试目标。

相关主题