主要内容

从覆盖数据中提取详细信息

这个示例展示了如何使用覆盖率实用程序命令从cvdata对象中提取单个子系统、块或Stateflow®对象的信息。

示例模型

这个示例说明了一个小模型的覆盖率数据的命令行访问,该模型包含各种受支持的覆盖率度量的各个方面。金宝app

使用以下命令打开模型'slvnvdemo_cv_small_controller'及其子系统'Gain '。

open_system (“slvnvdemo_cv_small_controller”);open_system (“slvnvdemo_cv_small_controller /增益”);

生成覆盖数据和HTML报告

使用以下命令模拟模型sim卡.使用一个金宝app仿真软件。SimulationInput对象来捕获覆盖率设置,并将其用作sim卡.模拟完成后,覆盖数据将存储在cvdata对象。

simIn = 金宝appSimulink。SimulationInput (“slvnvdemo_cv_small_controller”);simIn = simIn. setmodelparameter (“CovEnable”“上”);simIn = simIn. setmodelparameter (“CovMetricStructuralLevel”“MCDC”);simIn = simIn. setmodelparameter (“CovSaveSingleToWorkspaceVar”“上”);simIn = simIn. setmodelparameter (“CovSaveName”“covData”);simIn = simIn. setmodelparameter (“CovScope”“EntireSystem”);simIn = simIn. setmodelparameter (“CovMetricLookupTable”“上”);simIn = simIn. setmodelparameter (“CovMetricSignalRange”“上”);simOut = sim(simIn);

处理返回的覆盖数据cvsim命令,使用报告生成命令cvhtml.生成的报告方便地表示了整个模型的模型覆盖率。

cvhtml (“tempfile.html”, covData);

覆盖数据在模拟输出对象中也可用。

simOut
simOut = 金宝appSimulink。SimulationOutput: covData: [1x1 cvdata] tout: [59x1 double] yout: [59x1 double] SimulationMetadata: [1x1 金宝appSimulink。SimulationMetadata] ErrorMessage: [0x0 char]

提取决策覆盖范围信息

使用decisioninfo命令提取单个Simulink块或statflow对象的决策覆盖信息。金宝app

下面的命令为整个模型提取一个覆盖数组。第一个要素是模型所满足的覆盖目标结果的数量;第二个要素是模型的覆盖目标结果的总数。

cov =决策信息(covData,“slvnvdemo_cv_small_controller”) % = 100*冠状病毒(1)/冠状病毒(2)
冠状病毒= 4 6% = 66.6667

使用“Saturation”块的完整路径检索该块的覆盖信息。为该块内覆盖目标结果的文本描述提供第二个返回参数。

[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(2).executionCount .executionCount
blkCov = 3 4 description = struct with fields: isFiltered: 0 justiedcoverage: 0 isJustified: 0 filterRationale: " decision: [1x2 struct] decision1 = 'U >= LL' out_1a = 'false' count_1a = 0 out_1b = 'true' count_1b = 7

定量覆盖信息可用于层次结构中包含或具有覆盖客观结果的每个结果。文本描述仅为覆盖客观结果本身的对象生成。例如,调用decisioninfo为虚拟子系统增益,描述返回值为空。

[blkCov, description] = decisioninfo(covData,“slvnvdemo_cv_small_controller /增益”
blkCov = 1 2 description = struct with fields: isFiltered: 0 justiedcoverage: 0 isJustified: 0 filterRationale: "

在某些情况下,对象具有内部覆盖目标,但也包含具有额外覆盖目标的后代。覆盖信息通常包括所有后代,除非用于忽略后代的第三个参数被设置为1。

subsysOnlycov = decisioninfo(covData,“slvnvdemo_cv_small_controller /增益”, 1)
subsysOnlycov = []

decisioninfo命令也适用于块句柄、状态流id和状态流API对象。

blkHandle = get_param(“slvnvdemo_cv_small_controller /饱和度”“处理”) blkCov = decisioninfo(covData,blkHandle)
4. blkHandle = 34.0009 blkCov = 3

如果一个对象没有决策覆盖,该命令将返回空输出。

missingBlkCov = decisioninfo(covData,“slvnvdemo_cv_small_controller / Sine1”
missingBlkCov = []

提取条件覆盖信息

条件覆盖指示布尔表达式的逻辑输入是否被计算为true和false。在Si金宝appmulink中,条件是逻辑操作的输入。

conditioninfo命令用于提取条件覆盖信息,与decisioninfo命令。它通常返回关于对象及其所有后代的信息,但可以使用第三个参数来指示是否应该忽略后代。它还可以返回包含每个条件描述的第二个输出。

cov = conditioninfo(covData,“slvnvdemo_cv_small_controller /增加/逻辑”) [cov, desc] = conditioninfo(covData,“slvnvdemo_cv_small_controller /增加/逻辑”);desc.condition desc.condition (1) (2)
cov = 2 4 ans = struct with fields: isFiltered: 0 isJustified: 0 filterRationale: " text: 'port1' trueCnts: 59 falseCnts: 0 trueOutcomeFilter: [1x1 struct] falseOutcomeFilter: [] 1x1 struct] trueExecutedIn: [] falseExecutedIn: [] ans = struct with fields: isFiltered: 0 isJustified: 0 filterRationale: " text: 'port2' trueCnts: 0 falseCnts: 59 trueOutcomeFilter: [1x1 struct] falseOutcomeFilter: []

提取修改的条件/决策覆盖信息

对于布尔表达式中的条件,如果表达式有两个计算,则满足修改条件/决策覆盖(MCDC)独立的两,这说明条件的值独立地影响整个表达式的结果。也就是说,对于这些计算,切换条件的值也会导致表达式结果也切换。

在本例中,将分析MCDC的逻辑与块,并且可以使用mcdcinfo命令。此命令的语法与conditioninfo而且decisioninfo命令。

[cov, desc] = mcdcinfo(covData,“slvnvdemo_cv_small_controller /增加/逻辑”(1)描述条件(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 =结构体字段:文字:端口2的实现:0 trueRslt:“(TT)”falseRslt:“助教”isFiltered: 0 isJustified: 0 filterRationale:“trueExecutedIn: [] falseExecutedIn: []

提取查找表覆盖信息

查找表覆盖率记录每个插值间隔发生查找的频率。用于覆盖目的的有效间隔还包括小于最小断点的值和大于最大断点的值。为了与其他命令保持一致,此信息以一对计数的形式返回,其中包含执行的间隔数和间隔的总数。

第二个输出参数导致tableinfo返回所有插值间隔的执行计数。如果表的输出值为M × n,则执行计数将以M+1 × n +1矩阵的形式返回。

第三个输出参数导致tableinfo返回输入完全等于断点的计数。它以向量单元格数组的形式返回,表中的每个维度对应一个单元格数组。

[cov,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命令分别返回最小值和最大值的两个返回参数。

sigrangeinfoCommand只适用于执行计算的叶块;否则该命令返回空参数。

[sigMin, sigMax] = sigrangeinfo(covData,“slvnvdemo_cv_small_controller /增益/增益表”%的叶子[sigMin, sigMax] = sigrangeinfo(covData,“slvnvdemo_cv_small_controller /增益”% Nonleaf
sigMin = 3.3656 sigMax = 7.6120 sigMin = [] sigMax = []