主要内容

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

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

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

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

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

记录模型的覆盖数据

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

  1. 打开此示例中的示例模型 sldvdemo_autotrans

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

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

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

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

    • 选择启用覆盖率分析

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

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

  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 节点。在模式字段的分析选项下,选择测试生成。在模型覆盖率目标下,选择 MCDC

  3. Design Verifier 节点下,选择测试生成。在针对缺失覆盖率添加测试下,选择使用现有覆盖率数据进行扩展

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

    existingcov.cvt
  5. 点击应用保存这些设置。点击确定

  6. 右键点击 ShiftLogic 模块,在 Design Verifier 窗格下选择生成子系统测试

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

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

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

    • 决策:97% (30/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,因此它仅测试 temporalCount(tick) >= TWAITafter(TWAIT, tick) 部分。分析能够找到满足 after(TWAIT, tick) 条件和 MCDC 覆盖率的测试目标。

另请参阅

主题