在闭环仿真模型中实现缺失覆盖
如果您有一个子系统或 Stateflow® 图表未实现 100%覆盖率,并且您不想将子系统或图表转换为 Model模块,请按照此示例实现完全覆盖率。
该示例采用闭环控制器模型。闭环控制器将指令传递给受控系统,并在执行控制指令时从环境接收信息。控制器在收到此信息时可以调整和改变其指令。
sldvdemo_autotrans
模型是一个闭环仿真模型。ShiftLogic Stateflow 图表代表该模型的控制器部分。ManeuversGUI Signal Builder 模块中设计的测试用例驱动模块仿真。
记录模型的覆盖数据
要仿真ShiftLogic 控制器的模型、记录条件、决策和 MCDC覆盖率:
打开示例模型:
openExample('sldv/UsingExistingCoverageDataSubsystemAnalysisExample',... 'supportingFile','sldvdemo_autotrans')
在 App 选项卡上,点击App 部分右侧的箭头。
在 模型验证、确认和测试 下,点击覆盖率分析器 。
在 覆盖率 选项卡上,点击设置 。
在配置参数对话框的 覆盖率窗格上,设置以下选项:
选择启用覆盖率分析。
选择子系统并点击选择子系统。
在子系统选择对话框中,选择
ShiftLogic
并点击OK。
在 覆盖率度量 下,选择 修正条件决策覆盖率(MCDC) 。
如果选择了 其他度量,则清除它们。
在配置参数对话框的 覆盖率 > 结果窗格中,设置以下选项:
在cvdata 对象名称字段中,输入
covdata_original_controller
来为覆盖率数据工作区变量指定一个唯一的名称。选择 分析后自动生成报告 。
点击确定。
启动
sldvdemo_autotrans
模型的仿真,记录覆盖率数据。仿真结束后,覆盖率报告打开。报告表明,ShiftLogic Stateflow 图表实现了以下覆盖率:
决策:87%(27/31)
健康)状况:67%(8/12)
MCDC:33%(2/6)的情况扭转了结果
仿真将覆盖率数据保存在MATLAB®工作区变量
covdata_original_controller
中,其中包含覆盖率数据的cvtest
对象。将覆盖率数据保存在 MATLAB 路径上的文件中:
cvsave('existingcov',covdata_original_controller);
查找缺失覆盖率的测试用例
要找到 ShiftLogic 图表中缺失的覆盖率,请对该模块运行子系统分析。使用此技术可以将分析重点放在模型的单个部分上。
为了实现 ShiftLogic 控制器的 100%覆盖率,请运行使用现有覆盖率数据的测试生成分析。
右键单击 ShiftLogic模块并选择 Design Verifier > 选项 。
在配置参数对话框中,在 选择 树下,选择 Design Verifier 节点。在 模式 字段的 分析选项 下,选择 测试生成 。
在 Design Verifier 节点下,选择 测试生成 。在 Existing coverage data 下,选择 Ignore objectives satisfied in existing coverage data 。
在 覆盖率数据文件 字段中,输入包含您在仿真期间记录的覆盖率数据的文件的名称:
existingcov.cvt
单击应用保存这些设置。
在 选择 树下,点击Design Verifier 。
在主Design Verifier窗格上,点击生成测试。
分析将 Stateflow 图表提取到名为
ShiftLogic0
的新模型中。该分析对新模型进行分析,忽略先前满足并记录在existingcov.cvt
文件中的覆盖率目标。当测试生成分析完成后,在 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覆盖率的测试目标。