主要内容

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

cv.cvdatagroup 类

命名空间: cv

cvdata 对象的集合

描述

cv.cvdatagroup 类的对象包含一个或多个 cvdata 对象。每个 cvdata 对象包含模型层次结构中模型的覆盖率结果。cv.cvdatagroup 不能包含多个具有相同模型名称、仿真模式和版本的 cvdata 对象。

当您在启用覆盖率的情况下仿真包含模型引用的模型时,或者当您的模型使用外部代码文件并且您选择了外部文件进行覆盖率分析时,Simulink® Coverage™ 会创建一个 cv.cvdatagroup 对象。使用 getgetAll 类方法来检索模型参考层次结构中特定模型的覆盖率数据。使用 allNames 方法检索 cvdata 对象名称,以便与 get 类方法一起使用。

cv.cvdatagroup 类是 handle 类。

创建对象

描述

cvdg = cv.cvdatagroup(cvdo1,cvdo2,...) 创建一个包含指定 cvdata 对象的 cvdatagroup 对象。

注意

如果使用多个具有相同模型名称、仿真模式和版本的 cvdata 对象创建一个 cv.cvdatagroup 对象,则生成的 cv.cvdatagroup 对象将仅包含最后一个匹配的 cvdata 对象,而且 Simulink Coverage 会发出警告。

示例

输入参量

全部展开

覆盖率数据,指定为一个或多个 cvdata 对象。

数据类型: cvdata

属性

全部展开

对象名称,指定为字符数组。

示例: cvdg.name = 'myDataGroup';

属性:

GetAccess
public
SetAccess
public

数据类型: char

方法

全部展开

示例

全部折叠

此示例显示如何从 cv.cvdatagroup 对象中检索指定的覆盖率数据对象、所有覆盖率数据对象或所有覆盖率数据对象名称。

加载示例模型。

modelName = 'slvnvdemo_eml_model_coverage_demo';
load_system(modelName);

使用 Simulink.SimulationInput 类来设置启用覆盖率的仿真场景。

simIn = Simulink.SimulationInput(modelName);
simIn = setModelParameter(simIn,'CovEnable','on');
simIn = setModelParameter(simIn,'CovMetricStructuralLevel','MCDC');
simIn = setModelParameter(simIn,'CovSaveSingleToWorkspaceVar','on');
simIn = setModelParameter(simIn,'CovSaveName','covData');
simIn = setModelParameter(simIn,'CovSaveOutputData','off');

通过将 SimulationInput 对象传递给 sim 函数来仿真模型,然后从 SimulationOutput 对象中检索覆盖率数据。

simOut = sim(simIn);
covData = simOut.covData
covData = ... cv.cvdatagroup

  slcoverageExternalFile (simulation mode: Normal)
  slvnvdemo_eml_model_coverage_demo (simulation mode: Normal)


示例模型包含一个调用外部 MATLAB 函数的 MATLAB® Function 模块。因为 Simulink Coverage 在单独的 cvdata 对象中返回 MATLAB 函数的覆盖率数据,所以 sim 返回一个 cv.cvdatagroup 对象,该对象包含模型和 MATLAB 函数的覆盖率结果。

要确定 cvdata 内每个 cv.cvdatagroup 对象关联的名称,请使用类方法 allNames

covDataNames = allNames(covData)
covDataNames =

  2×1 cell array

    {'slcoverageExternalFile'           }
    {'slvnvdemo_eml_model_coverage_demo'}

cv.cvdatagroup 包含模型以及 MATLAB 函数的覆盖率结果。

要检索模型的覆盖率数据,请使用 get 类方法。

modelCovData = get(covData,modelName)
modelCovData = ... cvdata
            version: (R2025a)
                 id: 882
               type: TEST_DATA
               test: cvtest object
             rootID: 884
           checksum: [1x1 struct]
          modelinfo: [1x1 struct]
          startTime: 01-Feb-2025 15:48:16
           stopTime: 01-Feb-2025 15:48:16
  intervalStartTime: 
   intervalStopTime: 
simulationStartTime: 0
 simulationStopTime: 1
             filter: 
            simMode: Normal

要检索模型和外部文件的覆盖率数据,请使用 getAll 类方法。

covDataArray = getAll(covData)
covDataArray =

  2×1 cell array

    {1×1 cvdata}
    {1×1 cvdata}

此示例显示如何使用两个 cvdatagroup 对象创建一个 cvdata 对象。

记录 slvnvdemo_cv_small_controller 的覆盖率。

model_1 = 'slvnvdemo_cv_small_controller';
load_system(model_1)
cvdo1 = cvsim(model_1);

记录 slvnvdemo_powerwindow_controller 的覆盖率。

model_2 = 'slvnvdemo_powerwindow_controller';
load_system(model_2)
cvdo2 = cvsim(model_2);

创建一个包含两个 cv.cvdatagroup 对象的 cvdata 对象。

cvdg = cv.cvdatagroup(cvdo1,cvdo2);

此示例演示了如何使用 + 运算符合并 cv.cvdatagroup 对象。

加载模型。

modelName = "slcovDataGroup";
load_system(modelName);

通过创建一个 Simulink.SimulationInput 对象,为覆盖率分析准备模型。然后,通过将 CovSaveSingleToWorkspaceVar 参数设置为 on,使覆盖率数据在 MATLAB® 工作区中可访问。

simIn = Simulink.SimulationInput(modelName);
simIn = setModelParameter(...
    simIn,"CovSaveSingleToWorkspaceVar","on");

该模型的需求是需要在 MATLAB 工作区中设置四个变量。对于首次运行:

a = 1;
b = 0;
c = 1;
d = 0;

仿真模型并将覆盖率数据赋给一个名为 covData1 的变量。由于 slcovDataGroup 模型调用了外部的 MATLAB 函数,Simulink® Coverage™ 会将覆盖结果返回为 cv.cvdatagroup 对象。其中一个 cvdata 目标包含模型覆盖率结果,另一个包含外部 MATLAB 文件的覆盖率结果。

simOut1 = sim(simIn);
covData1 = simOut1.covdata;
class(covData1)
ans =

    'cv.cvdatagroup'

使用 decisioninfo 检查外部 MATLAB 函数 slcoverageExternalFile 的决策覆盖率。

[decCov1,decInfo] = decisioninfo(covData1,"slcoverageExternalFile")
decCov1 =

     2     3


decInfo = 

  struct with fields:

           isFiltered: 0
    justifiedCoverage: 0
          isJustified: 0
      filterRationale: ''
             decision: [1×2 struct]

在外部 MATLAB 文件中,if 语句的 false 情况未执行,且缺少决策覆盖率。您可以通过使用 decisioninfo 的选项描述输出功能来验证这一点。例如,第二个决策代表了 if 语句。

decInfo.decision(2)
ans = 

  struct with fields:

               text: 'if (z)'
    filterRationale: ''
         isFiltered: 0
        isJustified: 0
            outcome: [1×2 struct]

该决策的第一个结果代表了错误案例,其执行次数为零。

decInfo.decision(2).outcome(1)
ans = 

  struct with fields:

               text: 'false'
     executionCount: 0
         executedIn: []
         isFiltered: 0
        isJustified: 0
    filterRationale: ''

为了满足此决策,将变量 c 设置为零,并再次运行覆盖率分析。

c = 0;
simOut2 = sim(simIn);
covData2 = simOut2.covdata;

使用 + 运算符对两次运行的覆盖率进行聚合。然后再次检查决策覆盖率。

covDataTot = covData1 + covData2;
decCovTot = decisioninfo(covDataTot,"slcoverageExternalFile")
decCovTot =

     3     3

在聚合的 cv.cvdatagroup 对象中,外部 MATLAB 文件 slcoverageExternalFile 现已达到 100% 决策覆盖率。

版本历史记录

在 R2007b 中推出

另请参阅

| |