Main Content

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

使用模型切片器调试增强的修正条件/决策覆盖率

此示例显示如何使用模型切片器查找与特定模型对象相关的Simulink® Design Verifier™ 生成的目标。一旦确定了目标,模型切片器就会在目标可观察到的步骤中突出显示切片。

此示例使用以下产品来演示调试增强修正条件/决策覆盖率(MCDC):

  • Simulink Design Verifier

  • Model Slicer

增强型MCDC分析模型中每个目标的可检测性,并为每个目标生成非掩蔽测试用例。它协调下游模块的效果以避免掩盖效应。它还计算每个可检测目标的检测地点,在这些地点可以观察到目标的效果。该数据可在分析生成的sldvdemo_cruise_control_sldvdata.mat文件中找到。这些检测点可以添加到背靠背测试的等效性准则中。

此示例使用以下切片器配置:

  • 起点设置为要观察的模型对象。

  • 排除点设置为与Simulink Design Verifier生成的目标相关的检测点。

  • 信号传播设置为下游(前向切片)。

步骤 1:准备模型

1.打开模型。

model = 'sldvdemo_cruise_control';
open_system(model);

2.加载由Simulink Design Verifier(sldvData)生成的数据文件,以使用增强型 MCDC 进行测试生成。

load('sldvdemo_cruise_control_sldvdata.mat');

3.选择必须突出显示目标的模型对象并找到其 SID。

modelObjIdentifier = 'sldvdemo_cruise_control/Controller/Switch3';
modelobjSID = Simulink.ID.getSID(modelObjIdentifier);

步骤 2:设置模型切片器

1.为模型启用快速重启。

set_param(model,'FastRestart','on');

启用 FastRestart 将仿真模型并在各个时间戳收集仿真数据。这将允许我们使用后退前进选项。

2.创建并激活模型切片器对象。

slicerObject = slslicer(model);
activate(slicerObject);

3.将信号传播设置为下游

slicerObject.Configuration.SignalPropagation = 'downstream';

步骤 3:查找与模型对象相关的目标

1.使用 SldvDataExplorer 类的对象访问 sldvData。

sldvObj = SldvDataExplorer(sldvData);

注意SldvDataExplorer类是一个辅助类。您可以根据您的需求进行编辑。

2.查找与模型对象相关的所有目标以及目标的详细信息。

[objectives, tableOfObjectives] = sldvObj.getObjectivesForModelObj(modelobjSID);
disp(tableOfObjectives);
    ObjectiveNum       Type                                Description                             Detectability      Status       TestCaseId
    ____________    __________    _____________________________________________________________    _____________    ___________    __________

         1          "Decision"    "logical trigger input false (output is from 3rd input port)"    "Detectable"     "Satisfied"        1     
         2          "Decision"    "logical trigger input true (output is from 1st input port)"     "Detectable"     "Satisfied"        1     

目标的以下详细信息保存在tableOfObjectives表中:

  • ObjectiveNum-目标编号。

  • 类型 — MCDC/决策/条件。

  • 描述 - 由 Simulink Design Verifier 生成的目标描述。

  • 可探测性 -目标的可探测状态。

  • 状态——目标的状态。

  • TestCaseId - 表示解决目标的测试用例或反例的索引的整数。

步骤 4:突出目标

对于此示例,我们将突出显示表中的第一个目标。

1.根据目标对应的测试用例获取设置了输入值的仿真输入对象。

[simIn, atStep, ~] = sldvObj.getSimInObjForObjective(objectives(1));

2.允许在模型中回滚,以便可以在模型中向后退,并将仿真回滚步数设置为 1。

simIn = simIn.setModelParameter('EnableRollBack','on');
simIn = simIn.setModelParameter('NumberOfSteps', 1);

3.将Simulink输入对象应用到模型。

slicerObject.applySimInToModel(simIn);

4.查找选定目标的所有检测站点。

objectDetectionSites = sldvObj.getObjectDetectionSites(objectives(1));

5.添加所有检测站点作为排除点。

for n = 1:length(objectDetectionSites)
    detectionSite = objectDetectionSites(n).modelObj;
    slicerObject.addExclusionPoint(detectionSite);   
end

6.添加模型对象作为起点。

slicerObject.addStartingPoint(modelobjSID);

7.步进到测试用例中可观察到目标的点。

for q = 1:atStep 
    slicerObject.stepForward();
end

现在您可以观察到切片已突出显示。

清理

执行以下操作来清理模型:

1.清除切片器对象。

2.清除Simulink输入对象。

clear slicerObject simIn

3.重置模型的FastRestart参数。

set_param(model,'FastRestart','off');

另请参阅