分析级联逻辑块的MCDC

这个例子说明的Simulink覆盖™如何记录MCDC度量逻万博1manbetx辑运算符块的级联。

例如型号

在Si万博1manbetxmulink,存在各种方式来实现布尔逻辑,如通过使用的如果在MATLAB函数块中的语句,在状态图中的条件转换,或在级联中连接在一起的多个逻辑运算符块的组合。

这个例子模型slvnvdemo_cv_logic_cascade通过MATLAB函数块中的MATLAB代码以及逻辑运算符块的级联实现相同的布尔表达式。

使用下面的命令来打开模型slvnvdemo_cv_logic_cascade

open_system ('slvnvdemo_cv_logic_cascade');

打开MATLAB函数块,查看相关函数。

open_system (“slvnvdemo_cv_logic_cascade / MATLAB函数”

在MATLAB功能块,如果(a && (b | | c))为真,则该信号数据1将输出;否则,信号数据2是输出。

使用下面的命令和请注意,此子系统实现使用逻辑运算符块和开关完全相同的逻辑打开子系统“逻辑级联”。

open_system (“slvnvdemo_cv_logic_cascade /逻辑级联”);

最后,打开信号生成器,并注意有对布尔输入给出三种组合一种b,C。这些组合FFFTFT,TTT

open_system (“slvnvdemo_cv_logic_cascade /信号生成器”);

关闭信号生成器。

close_system (“slvnvdemo_cv_logic_cascade /信号生成器”,0);

比较MCDC在覆盖率报告中的结果

模拟模型并生成覆盖率报告。

testObj = cvtest('slvnvdemo_cv_logic_cascade');testObj.settings.decision = 1;testObj.settings.condition = 1;testObj.settings.mcdc = 1;covdata = cvsim(testObj);模拟覆盖率cvhtml (“exampleReport.html”,covdata);%生成覆盖率报告

MCDC结果为MATLAB函数块

在生成的报告,导航到MATLAB功能块的细节。

该MCDC业绩如果在MATLAB功能块语句被正如所预料的,给予指定的输入。

MCDC结果逻辑级联

接下来检查逻辑级联的结果。回想一下,这些块的组合实现了与MATLAB函数块中的MATLAB代码相同的逻辑;因此,我们希望MCDC的结果也是一样的。

我们先来看看上游Or_Block

注意,这个块的MCDC摘要有一个文本链接“看到And_Block”,指的是逻辑运算符在级联的根源。点击该链接将要采取的表示此块结果的报告的部分。

逻辑运算符块位于级联的根(在本例中)And_Block)报告MCDC结果整个级联。

用于级联的MCDC分析的细节首先显示出许多块是如何包含在级联链接。点击链接“包括2块”将调出模型,并强调包括级联的两个块(Or_BlockAnd_Block)。

在本例中,报告的这一部分显示由级联表示的布尔表达式C1 && (C2 | | C3),在那里C1C2,C3是对应于级联的三个输入的条件。对于每个条件,该表说明了相关的块及其输入(在括号中显示)以及MCDC结果。这些结果表明,输入组合TTXFxx,TFT已经全部行使,但TFF没有。该给定由信号生成器生成的输入的期望值(匹配TTTFFF,TFT)。

而且,与预期的一样,为这个级联显示的布尔表达式和MCDC结果都与为如果语句在MATLAB函数块中实现等效逻辑。

覆盖信息和模型着色

显示上使用以下命令模型覆盖率结果:

cvmodelview(covdata);

由于在覆盖报告结果显示,MCDC目标不会记录在级联的各个逻辑运算符块;相反,MCDC目标被记录为通过在级联的块的组合所表示的布尔表达式,并且结果列在级联中的最后一个块上。该模型的突出反映了这一点,也是如此。鉴于输入组合FFFTFT,TTT三个输入一种b,COr_Block接收全覆盖,因为所有的块的条件覆盖目标已经满足。但是,因为有这个级联还没有得到满足相关MCDC目标,And_block(在级联的最后块)以红色突出显示。

笼罩And_block为更多的信息。

该提示正确地报告这一块没有收到全覆盖,因为级联一些MCDC目标不满意。

命令行

您还可以使用以下命令从MATLAB命令行检索逻辑块级联的MCDC结果mcdcinfo。同样,MCDC级联的目标将在级联的最后一个块上找到。

[coverage_casc, description_casc] = mcdcinfo(covdata,“级联slvnvdemo_cv_logic_cascade /逻辑/ And_Block”(1)条件(1)条件(2)条件(3)
coverage_casc = 1 3 description_casc =结构体字段:文字:“C1 & & (C2 | | C3)的条件:[1×3 struct] isFiltered: 0 filterRationale:“justifiedCoverage: 0 ans =结构体字段:文字:“C1 (And_Block In1)”实现:1 trueRslt:“TFT”falseRslt:的Fxx isFiltered: 0 filterRationale:“俺们=结构体字段:文字:“C2 (Or_Block In1)”实现:0 trueRslt:“TTx”falseRslt:“(TFF)”isFiltered: 0 filterRationale:“俺们=结构体字段:文字:“C3 (Or_Block In2)”实现:0 trueRslt: 'TFT' falseRslt: '(TFF)' isFiltered: 0 filterRationale: "

级联中的其他块将不会显示MCDC目标。

[coverage_or, description_or] = mcdcinfo(covdata,'slvnvdemo_cv_logic_cascade /逻辑级联/ Or_Block'
coverage_or = [] description_or = []

布尔表达式为MCDC的短路

在模型示例slvnvdemo_cv_logic_cascade,覆盖设置被设置为使得逻辑运算符块被作为短路进行处理。

由于此设置,分析逻辑运算符块的级联时,在相应的布尔表达式运算符被视为短路为MCDC的目的。如由以上所示的结果,这意味着,MCDC识别发生在国内和跨越逻辑运算符块即短路示出。因此,MCDC结果逻辑运算符块的级联相匹配的的如果语句在MATLAB函数块中,由于后者总是被当作短路处理。

一个块内的短路

请注意,在上面的例子中,真正走出MCDC客观的结果为C2TTX,表示当C1C2都是真实的,C3是否由于内部短路而不重要Or_Block

多个块之间短路

此外,考虑假出MCDC客观的结果C1Fxx。这一结果说明MCDC分析如何识别跨块短路。由于第一输入And_Block为假,则第二输入被短路。随后,对于MCDC的目的,该短路Or_Block(和它的两个输入)完全。MCDC的逻辑块级联短路行为的发生基于操作在相应的布尔表达式(无论模拟期间逻辑运算块的执行顺序)的优先级。

Non-short-circuiting布尔表达式

您还可以将逻辑运算符块级联表示的布尔表达式视为MCDC分析期间的非短路,前提是使用了MCDC的屏蔽定义。为此,请设置参数CovLogicBlockShortCircuit“关闭”并确保CovMcdcMode被设置为“掩蔽”。这些,其实,创建新模型时,这些参数的默认设置。

请注意,如果CovLogicBlockShortCircuit“关闭”CovMcdcMode被设置为“UniqueCause”然后,为了MCDC的目的,将对级联中的逻辑运算符块进行单独分析,而不会计算由整个级联表示的布尔表达式的MCDC。

注意,当在这个例子中,级联不作为短路处理,一些MCDC目标不再由给定的输入满足。

set_param('slvnvdemo_cv_logic_cascade'“CovLogicBlockShortCircuit”“关闭”);set_param('slvnvdemo_cv_logic_cascade''CovMcdcMode''掩蔽');covdata_non_sc = cvsim('slvnvdemo_cv_logic_cascade');%为模拟覆盖范围逻辑块短路关cvhtml (“exampleReport_non_sc.html”,covdata_non_sc);%生成覆盖率报告

最后关闭模型。

close_system ('slvnvdemo_cv_logic_cascade',0);