这个示例展示了如何使用覆盖率实用工具命令从cvdata对象中提取单个子系统、块或statflow®对象的信息。
这个示例演示了一个小型模型的覆盖率数据的命令行访问,该模型包含各种受支持的覆盖率指标的方面。金宝app
使用以下命令打开模型'slvnvdemo_cv_small_controller'及其子系统'Gain。
open_system (“slvnvdemo_cv_small_controller”);open_system (“slvnvdemo_cv_small_controller /增益”);
使用以下方法模拟模型sim卡
.使用一个金宝app仿真软件。SimulationInput
对象来捕获覆盖率设置并将其用作输入sim卡
.模拟完成后,覆盖数据将存储在cvdata
对象。
思敏=仿真软件。金宝appSimulationInput (“slvnvdemo_cv_small_controller”);思敏= simIn.setModelParameter (“CovEnable”,“上”);思敏= simIn.setModelParameter (“CovMetricStructuralLevel”,“MCDC”);思敏= simIn.setModelParameter (“CovSaveSingleToWorkspaceVar”,“上”);思敏= simIn.setModelParameter (“CovSaveName”,“covData”);思敏= simIn.setModelParameter (“CovScope”,“EntireSystem”);思敏= simIn.setModelParameter (“CovMetricLookupTable”,“上”);思敏= simIn.setModelParameter (“CovMetricSignalRange”,“上”);simOut = sim(思);
处理从cvsim
命令与报告生成命令一起使用cvhtml
.生成的报告可以方便地表示整个模型的模型覆盖率。
cvhtml (“tempfile.html”, covData);
覆盖数据在模拟输出对象中也可用。
simOut
simOut =仿金宝app真软件。SimulationOutput: covData: [1x1 cvdata] tout: [59x1 double] yout: [59x1 double] SimulationMetadata: [1x1 金宝appSimulink。SimulationMetadata]错误信息:[0x0 char]
使用decisioninfo
命令提取单个Simulink块或statflow对象的决策覆盖信息。金宝app
下面的命令为整个模型提取覆盖数组。第一个元素是模型所满足的覆盖率客观结果的数量;第二个元素是模型的覆盖目标结果的总数。
x = decisioninfo (covData,“slvnvdemo_cv_small_controller”)百分比= 100*cov(1)/cov(2)
Cov = 4 6% = 66.6667
使用到“饱和度”块的完整路径检索该块的覆盖信息。提供第二个返回参数,用于该块内覆盖目标结果的文本描述。
[blkCov, description] = decisioninfo(covData,“slvnvdemo_cv_small_controller /饱和度”) decision1 = description.decision(1)。text out_1a = description.decision (1) .outcome(1)。text count_1a = description.decision (1) .outcome (1) .executionCount out_1b = description.decision (1) .outcome(2)。text count_1b = description.decision (1) .outcome .executionCount (2)
blkCov = 3 4 description = struct with fields: isFiltered: 0 justifiedCoverage: 0 isJustified: 0 filterRationale: " decision: [1x2 struct] decision1 = 'U >= LL' out_1a = 'false' count_1a = 0 out_1b = 'true' count_1b = 7 .
对于包含或具有覆盖目标结果的层次结构中的每个结果,都可以获得定量覆盖信息。文本描述只会为那些覆盖了客观结果本身的对象生成。例如,调用decisioninfo
为虚拟子系统Gain,描述返回值为空。
[blkCov, description] = decisioninfo(covData,“slvnvdemo_cv_small_controller /增益”)
blkCov = 1 2 description = struct with fields: isFiltered: 0 jusfiedcoverage: 0 isJustified: 0 filterRationale: "
在某些情况下,对象具有内部覆盖目标,但也包含具有附加覆盖目标的后代。覆盖率信息通常包括所有的后代,除非用于忽略后代的第三个参数被设置为1。
subsysOnlycov = decisioninfo (covData,“slvnvdemo_cv_small_controller /增益”, 1)
subsysOnlycov = []
的decisioninfo
命令还可以使用块句柄、Stateflow id和Stateflow API对象。
blkHandle = get_param (“slvnvdemo_cv_small_controller /饱和度”,“处理”) blkCov = decisioninfo(covData,blkHandle)
blkHandle = 31.0020 blkCov = 3
如果一个对象没有决策覆盖,该命令将返回空输出。
missingBlkCov = decisioninfo (covData,“slvnvdemo_cv_small_controller / Sine1”)
missingBlkCov = []
条件覆盖率指示布尔表达式的逻辑输入是否同时被计算为真和假。在Si金宝appmulink中,条件是逻辑操作的输入。
的conditioninfo
用于提取条件覆盖信息的命令与decisioninfo
命令。它通常返回关于对象及其所有子对象的信息,但可以接受第三个参数,指示是否应该忽略子对象。它还可以返回包含每个条件描述的第二个输出。
x = conditioninfo (covData,“slvnvdemo_cv_small_controller /增加/逻辑”) [cov, desc] = conditioninfo(covData,“slvnvdemo_cv_small_controller /增加/逻辑”);desc.condition desc.condition (1) (2)
x = 2 4 ans =结构体字段:isFiltered: 0 isJustified: 0 filterRationale:“文本:“端口1”trueCnts: 59 falseCnts: 0 trueOutcomeFilter: [1 x1 struct] falseOutcomeFilter: [1 x1 struct] trueExecutedIn: [] falseExecutedIn: [] ans =结构体字段:isFiltered: 0 isJustified: 0 filterRationale:“文本:“端口2”trueCnts: 0 falseCnts:59 true outcomfilter: [1x1 struct] false outcomfilter: [1x1 struct] true
对于布尔表达式中的条件,如果表达式有两个求值,表示一个独立的两,说明条件的值独立地影响整个表达式的结果。也就是说,对于这些计算,切换条件的值将导致表达式结果也进行切换。
在本例中,分析MCDC的逻辑与块,可以使用mcdcinfo
命令。该命令使用的语法与conditioninfo
和decisioninfo
命令。
[cov, desc] = mcdcinfo(covData,“slvnvdemo_cv_small_controller /增加/逻辑”) desc.condition (1) desc.condition (2)
x = 0 2 desc =结构体字段:文字:“输出”条件:[1 x2 struct] isFiltered: 0 filterRationale:“justifiedCoverage: 0 ans =结构体字段:文本:端口1的实现:0 trueRslt:“(TT)”falseRslt:“(英尺)”isFiltered: 0 isJustified: 0 filterRationale:“trueExecutedIn: [] falseExecutedIn: [] ans =结构体字段:文字:'port2'实现:0 trueRslt: '(TT)' falseRslt: 'TF' isFiltered: 0 isJustified: 0 filterRationale: " trueExecutedIn: [] falseExecutedIn: []
查询表覆盖率记录了每个插值间隔的查找频率。用于覆盖目的的有效间隔还包括小于最小断点的值和大于最大断点的值。为了与其他命令保持一致,此信息将作为一对计数返回,其中包含执行的间隔数量和总间隔数量。
第二个输出参数导致tableinfo
返回所有插值间隔的执行计数。如果表有M × n的输出值,则以M+1 × n +1矩阵的形式返回执行计数。
第三个输出参数导致tableinfo
返回输入与断点完全相等的计数。它以向量单元格数组的形式返回,每个维度对应一个表。
[x, execCnts brkEq] = tableinfo (covData,“slvnvdemo_cv_small_controller /增益/增益表”)
x = 23 121 execCnts = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 12 14 10 2 0 0 0 0 0 4 12 0 0 0 12 0 0 0 0 0 22 12 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 21日29日0 0 0 0 7 28日0 0 0 6 0 0 0 0 0 4 28日22 18 23 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 brkEq = 1 x2单元阵列{10 x1双}{10 x1双}
信号范围度量记录了Simulink块输出和statflow数据对象的最小和最大值。金宝app的sigrangeinfo
命令返回两个返回参数,分别表示最小值和最大值。
的sigrangeinfo
Command只对执行计算的叶块有效;否则命令将返回空参数。
[sigMin, sigMax] = sigrangeinfo(covData,“slvnvdemo_cv_small_controller /增益/增益表”)%的叶子[sigMin, sigMax] = sigrangeinfo(covData,“slvnvdemo_cv_small_controller /增益”)% Nonleaf
sigMin = [] sigMax = []