这个示例展示了如何使用覆盖率实用工具命令从cvdata对象中提取单个子系统、块或statflow®对象的信息。
该示例说明了包含各个支持的覆盖度量指标的小型模型的覆盖数据的命令行访问。万博1manbetx
使用以下命令打开模型'slvnvdemo_cv_small_controller'及其子系统的增益。
open_system ('slvnvdemo_cv_small_controller');open_system ('slvnvdemo_cv_small_controller / gain');
使用以下方法模拟模型SIM
.使用一个万博1manbetxsimulink.simulationInpul.
对象来捕获覆盖率设置并将其用作输入SIM
.模拟完成后,覆盖数据将存储在cvdata
对象。
思敏=仿真软件。万博1manbetxSimulationInput ('slvnvdemo_cv_small_controller');思敏= simIn.setModelParameter (“CovEnable”那'在');思敏= simIn.setModelParameter (“CovMetricStructuralLevel”那'MCDC');思敏= simIn.setModelParameter (“CovSaveSingleToWorkspaceVar”那'在');思敏= simIn.setModelParameter (“CovSaveName”那“covData”);思敏= simIn.setModelParameter (“CovScope”那'EntireSystem');思敏= simIn.setModelParameter ('covmetriclockuptable'那'在');思敏= simIn.setModelParameter (“CovMetricSignalRange”那'在');simOut = sim(思);
处理从a返回的覆盖范围数据CVSIM
使用报告生成命令命令cvhtml
.结果报告是整个模型的模型覆盖的方便表示。
cvhtml (“tempfile.html”,covdata);
覆盖数据也可以在仿真输出对象中提供。
sim
simout = 万博1manbetxsimulink.simulationOutput:covdata:[1x1 cvdata] tout:[59x1 double] yout:[59x1 double] simulation meta数据:[1x1 simulink.simulation metadata] errormessage:[0x0 char]
使用决策情况
命令提取单个Simulink块或statflow对象的决策覆盖信息。万博1manbetx
下面的命令为整个模型提取覆盖数组。第一个元素是模型所满足的覆盖率客观结果的数量;第二个元素是模型的覆盖目标结果的总数。
x = decisioninfo (covData,'slvnvdemo_cv_small_controller')百分比= 100*cov(1)/cov(2)
Cov = 4 6% = 66.6667
使用该块的完整路径检索“饱和度”块的覆盖信息。为该块内的覆盖目标结果的文本描述提供第二个返回参数。
[blkcov,描述] =决策(covdata,'slvnvdemo_cv_small_controller /饱和度')Decomation1 = 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)。结果(2).text count_1b = description.decision(1).outcome(2).executioncount
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 = 6 .
定量覆盖信息可用于包含或具有覆盖目标结果的层次结构中的每个结果。仅针对具有覆盖目标结果的对象生成文本描述。例如,调用决策情况
对于虚拟子系统增益,并且描述返回值为空。
[blkcov,描述] =决策(covdata,'slvnvdemo_cv_small_controller / gain')
blkCov = 1 2 description = struct with fields: isFiltered: 0 jusfiedcoverage: 0 isJustified: 0 filterRationale: "
在某些情况下,物体具有内部覆盖目标,而且还包含具有额外覆盖目标的后代。覆盖信息通常包括所有后代,除非忽略后代的第三个参数设置为1。
subsysOnlycov = decisioninfo (covData,'slvnvdemo_cv_small_controller / gain', 1)
subsysonlycov = []
这决策情况
命令还可以使用块句柄、Stateflow id和Stateflow API对象。
blkhandle = get_param('slvnvdemo_cv_small_controller /饱和度'那“处理”) blkCov = decisioninfo(covData,blkHandle)
BLKHANDLE = 31.0009 BLKCOV = 3 4
如果一个对象没有决策覆盖,该命令将返回空输出。
MissingBlkcov = DecomationInfo(Covdata,'slvnvdemo_cv_small_controller / sine1')
MissingBlkcov = []
条件覆盖范围表示对布尔表达式的逻辑输入已被评估为TRUE和FALSE。在Si万博1manbetxmulink中,条件是逻辑操作的输入。
这conditioninfo
提取条件覆盖范围信息的命令非常相似决策情况
命令。它通常返回关于对象及其所有子对象的信息,但可以接受第三个参数,指示是否应该忽略子对象。它还可以返回包含每个条件描述的第二个输出。
cov = conditioninfo(covdata,'slvnvdemo_cv_small_controller / gain / logic')[COV,DESC] =条件(Covdata,'slvnvdemo_cv_small_controller / gain / logic');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)对于布尔表达式中的条件,满足了一个表达式的一个条件,代表了一个独立的两,这示出了条件的值独立地影响整个表达的结果。也就是说,对于这些评估,切换条件的值会导致表达结果切换。
在本例中,分析MCDC的逻辑与块,可以使用mcdcinfo
命令。此命令使用相同的语法conditioninfo
和决策情况
命令。
[cov, desc] = mcdcinfo(covData,'slvnvdemo_cv_small_controller / gain / logic') 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 / gain / gain表')
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数据对象的最小和最大值。万博1manbetx这SIGRANGEINFO.
命令返回两个返回参数,分别表示最小值和最大值。
这SIGRANGEINFO.
Command只对执行计算的叶块有效;否则命令将返回空参数。
[sigMin, sigMax] = sigrangeinfo(covData,'slvnvdemo_cv_small_controller / gain / gain表')%的叶子[sigMin, sigMax] = sigrangeinfo(covData,'slvnvdemo_cv_small_controller / gain')% Nonleaf
sigmin = 3.3656 sigmax = 7.6120 sigmin = [] sigmax = []