的万博1manbetx®覆盖™软件模拟Simulink模型,并报告模型覆万博1manbetx盖数据的决定和条件的代码MATLAB函数块。模型覆盖仅支持MATLAB覆盖万博1manbetx®为代码生成配置的函数。
例如,考虑以下情况如果
陈述:
If (x > 0 || y > 0) reset = 1;
的如果
声明包含两个条件的决定(x> 0
和y > 0
).的万博1manbetx仿真软件覆盖软件验证在模型模拟期间拍摄的所有决策和条件。
模型覆盖的类型万博1manbetx仿真软件覆盖配置用于代码生成的MATLAB函数的软件记录是:
在模拟期间,以下MATLAB函数块语句是测试决策覆盖范围的陈述:
函数头-如果函数或局部函数被执行,决策覆盖率为100%。
如果
- 如果决策覆盖率为100%如果
表达式的求值结果为真正的
至少一次,而且假
至少一次。
开关
-决策覆盖率100%开关
案件是采取的,包括秋季的案例。
为
- 如果等效的循环条件评估,则决策覆盖率为100%真正的
至少一次,而且假
至少一次。
而
- 如果等效的循环条件评估,则决策覆盖率为100%真正的
至少一次,评估假
至少一次。
在模拟过程中,在MATLAB函数块函数,对条件和MCDC覆盖率测试以下逻辑条件:
如果
声明的条件
赋值语句中的逻辑表达式
以下MATLAB功能在代码生成中处于活动状态万博1manbetx仿真软件设计校验™:
sldv.condition
(万博1manbetx仿真软件设计验证器)
sldv.test
(万博1manbetx仿真软件设计验证器)
sldv.assume.
(万博1manbetx仿真软件设计验证器)
sldv.prove.
(万博1manbetx仿真软件设计验证器)
当您指定时目标和约束覆盖度量报道窗格中的万博1manbetx仿真软件覆盖软件记录涵盖了这些功能。
每个函数都计算一个表达式expr
, 例如,sldv.test(
, 在哪里expr
)expr
是一个有效的布尔Matlab表达式。万博1manbetx仿真软件设计验证器覆盖率度量表达式的时间步长expr
计算结果为真正的
.
如果expr
是真正的
至少有一次步骤,万博1manbetx仿真软件设计验证器该功能的覆盖率是100%。否则,万博1manbetx仿真软件覆盖软件报告该功能的覆盖范围为0%。
的覆盖率数据示例万博1manbetx仿真软件设计验证器在覆盖报告中的功能,参见万博1manbetxSimulink设计验证程序覆盖范围.
如果MATLAB功能块包含关系操作,则关系边界覆盖度量标准适用于此块。
如果MATLAB函数块多次调用包含关系操作的函数,关系边界覆盖将报告调用该函数的所有实例的累积结果。如果函数中的关系操作在不同的调用中使用不同类型的操作数,则关系边界覆盖对更严格的操作数类型使用容忍规则。例如,如果一个关系操作使用INT32.
一个调用中的操作数,和双倍的
在另一个呼叫中的操作数,关系边界覆盖范围使用公差规则双倍的
操作数。
有关容忍规则和类型严格顺序的信息,请参阅关系边界覆盖范围.
当你模拟你的模型时,万博1manbetx仿真软件覆盖软件可以收集用于代码生成的MATLAB函数的覆盖数据。您可以从模型覆盖范围报道应用程序。
您可以为MATLAB函数收集模型覆盖范围,如下所示:
函数在一个MATLAB函数块
函数在一个外部MATLAB文件
要收集外部MATLAB文件的覆盖范围,报道窗格中,选择MATLAB文件覆盖范围.
万博1manbetx仿真软件设计验证器功能:
sldv.condition
(万博1manbetx仿真软件设计验证器)
sldv.test
(万博1manbetx仿真软件设计验证器)
sldv.assume.
(万博1manbetx仿真软件设计验证器)
sldv.prove.
(万博1manbetx仿真软件设计验证器)
要收集这些功能的覆盖率,在报道窗格中,选择目标和约束覆盖度量。
下一节将为每种情况提供模型覆盖示例。
万博1manbetx仿真软件覆盖软件测量模型覆盖范围MATLAB函数块。
以下模型包含两个MATLAB功能MATLAB函数布洛克:
在“配置参数”对话框中,单击求解器窗格中,在解算器的选择,仿真参数设置如下:
类型- - - - - -固定步
求解器- - - - - -离散(没有连续的状态)
固定步长(基本样本时间)- - - - - -1
的MATLAB函数Block包含两个函数:
顶级功能,run_intersect_test
,将两个矩形(一个固定,另一个移动)的坐标作为参数发送给rect_intersect
.
本地功能,rect_intersect
,测试两个矩形之间的交集。移动矩形的原点增加1
在里面x
和y
每次步骤的方向。
移动测试矩形的原点的坐标由持久数据表示X1
和y1.
,它们都被初始化为-1
.对于第一个样本,X1
和y1.
两个增加到0
.从那时起,模拟期间矩形参数的进展如下图所示。
固定矩形以粗体显示,左下方原点为(2、4)
宽度和高度都是2。在时间t = 0
,第一个测试矩形的原点为(0,0)
宽度和高度都是2。对于每个后续的样本,测试矩形的原点增量为(1,1)
.矩形的采样时间t = 2
,3.
,4
与测试矩形相交。
当地的函数rect_intersect
检查它的两个矩形参数是否相交。每个参数由矩形(原点)的左下角坐标、宽度和高度组成。x
左侧和右侧的值和y
计算每个矩形的顶部和底部的值,并在嵌套中进行比较if - else
决定。如果矩形相交,则函数返回1的逻辑值,如果它们没有。
模拟过程中的Scope输出,根据采样时间绘制返回值,确定采样时间的相交矩形2
,3.
,4
.
仿真后,模型覆盖率报告显示在浏览器窗口中。摘要在报告中,模型覆盖率的详细信息部分在模型的每个部分上报告。
模型覆盖报告MATLAB函数块表明,块本身与其功能不同的决定。
下面几节以相反的功能块-模型顺序检查示例模型的模型覆盖率报告。颠倒顺序可以帮助您理解每个部分顶部的摘要信息。
覆盖范围马铃薯run_intersect_test函数。模型覆盖范围MATLAB函数块功能run_intersect_test
出现在函数的链接名称下。单击此链接打开编辑器中的函数。
以下链路函数名称是父级覆盖报告的链接MATLAB函数块,该块包含的代码run_intersect_test
.
该功能报告的上半部分总结了其模型覆盖结果。的覆盖率度量run_intersect_test
包括决策,条件和MCDC覆盖范围。您可以通过检查代码来最好地了解这些指标run_intersect_test
.
清单中带有coverage元素的行用突出显示的行号进行标记:
第1行接收关于顶级函数是否run_intersect_test
是执行。
第6行得到了决策覆盖如果
陈述。
第14行接收关于是否本地函数的决策覆盖率rect_intersect
是执行。
第27行和30条接收决策,条件和MCDC覆盖如果
陈述和条件。
这些行中的每一条都是列表后面的报告的主题。
条件右1 <左2
在第30行中以红色突出显示。这意味着在仿真期间没有针对其所有可能结果进行测试。究竟没有测试的结果是在第30行决定的报告中。
下面的部分显示了每个部分的覆盖率run_intersect_test
行决定。每一行的覆盖率都以该行本身为标题,如果单击该行,将打开编辑器到指定行。
第1行的覆盖率。第1行的覆盖率指标是功能覆盖率数据的一部分run_intersect_test
.
为代码生成配置的每个MATLAB函数的第一行接收覆盖率分析,指示在响应调用时运行该函数的决策。覆盖run_intersect_test
指示在模拟期间至少执行一次。
第6行的覆盖范围。的决策分析表表示第6行的决定,如果isempty (x1)
,总共执行了八次。第一次执行,该决定评估为真正的
,使run_intersect_test
初始化其持久数据的值。剩下的七次决定执行,它评估到假
.因为两种可能的结果都发生了,所以决策覆盖率是100%。
第14行的覆盖率。的决策分析表表示本地功能rect_intersect
在测试期间执行,从而获得100%的覆盖率。
第27行的覆盖率。的决策分析表表明第27行决定有两种可能的结果:真正的
和假
.八次执行中有五次,评估结果是假
.剩下的三次,它的值是真正的
.因为两种可能的结果都发生了,所以决策覆盖率是100%。
的条件分析表在第27行的决定上阐明了一些额外的光。因为这个决定包括一个由逻辑或(||
)操作时,只有一个条件必须求值真正的
来决定真正的
.如果第一个条件求值为真正的
,无需评估第二个条件。第一个条件,top1
真正的
两次。这意味着第二个条件仅评估六次。只有一个案例是真正的
,这就是总数真正的
据报道,第三个决定的事件发生决策分析表格
MCDC覆盖范围寻找发生的决策逆转,因为一个条件结果发生变化T
到F
或者F
到T
.的MCDC分析表列出导致决策逆转的条件的所有可能的结果组合。这个角色x
用于指示与决策反转无关的条件结果。在模拟过程中没有实现的决策反转条件结果用一组括号标记。没有括号,因此所有的决策逆转结果都发生了,MCDC覆盖在第27行中的决策是完整的。
第30行的覆盖范围。第30行决定,If (right1 < left2 || right2 < left1) / /
,嵌套在如果
语句的第27行决定,仅当第27行决定是假
.因为第27行决定评估假
5次,第30行被计算了5次,其中3次是假
.因为都是这两者真正的
和假
实现了结果,第30行的决策覆盖率是100%。
因为第30行和第27行一样,有两个由逻辑OR操作符相关的条件(||
),条件2只在条件1为时才被测试假
.因为条件1测试假
五次,条件2测试五次。其中,条件2测试真正的
两次和假
三次,占这两次出现的真正的
这一决定的结果。
因为第30行的第一个条件决定不测试真正的
,这两种结果在该条件下都不会发生,第一个条件的条件覆盖以玫瑰色突出显示。MCDC覆盖也以同样的方式强调基于真正的
结果的结果。
Run_Intersect_test的覆盖范围。在细节选项卡,总结整个覆盖范围的指标run_intersect_test
如所示,报告和重复函数。
覆盖率指标总结的结果可以用以下结论表示:
报告了8个决策结果run_intersect_test
在线报告:
一个用于第1行(执行)
两个用于第6行(真正的
和假
)
一个用于第14行(执行)
两个用于第27行(真正的
和假
)
第30行2 (真正的
和假
).
每一行的决策覆盖率显示100%的决策覆盖率。这意味着决策覆盖范围为run_intersect_test
是八种可能结果中的八种,或100%。
据报道有四种情况run_intersect_test
在线报告中。线27和30各自具有两个条件,每个条件有两个条件结果(真正的
和假
),总共有8个条件的结果run_intersect_test
.所有情况都呈阳性真正的
和假
除了第30行的结果之外的结果(右1 <左2
).这意味着条件覆盖run_intersect_test
是7 / 8,即88%。
决策第27行和30行MCDC覆盖表分别列出了每种条件的两种决策逆转情况,总共有四种可能的逆转。只有对条件的评估发生变化的判定反转右1 <左2
从第30行开始真正的
到假
在模拟过程中没有发生。这意味着在模拟期间测试了四分之三或75%的可能逆转病例,覆盖率为75%。
使用相同的模型MATLAB函数块的模型覆盖,假设MATLAB函数run_intersect_test
和rect_intersect
存储在一个名为run_intersect_test.m
.
要在外部文件中收集MATLAB函数的覆盖率,请在报道窗格中,选择MATLAB文件覆盖范围.
模拟之后,模型覆盖率报告摘要包含顶层模型和外部功能的部分。
的模型覆盖报告run_intersect_test.m
报告与函数存储在的相同的覆盖数据MATLAB函数块。
有关MATLAB函数在外部文件中的模型覆盖报告的详细示例,请参阅外部Matlab文件报告报告.
如果MATLAB代码包含以下任何一个万博1manbetx仿真软件设计验证器配置用于代码生成的函数,您可以测量覆盖范围:
sldv.condition
(万博1manbetx仿真软件设计验证器)
sldv.test
(万博1manbetx仿真软件设计验证器)
sldv.assume.
(万博1manbetx仿真软件设计验证器)
sldv.prove.
(万博1manbetx仿真软件设计验证器)
对于本例,考虑以下模型,其中包含MATLAB函数块。
的MATLAB函数块包含以下代码:
function y = fcn(u) %支持MATLAB代码生成万博1manbetx。sldv.condition(u > -30) sldv.test(u == 30) y = 1;
收集覆盖范围万博1manbetx仿真软件设计验证器MATLAB函数,上报道窗格中的其他指标中,选择目标和约束.
仿真后,模型覆盖报告列出了覆盖范围sldv.condition
和sldv.test
功能。为sldv.condition
,该表达式U> -30
评估真正的
51次。为sldv.test
,该表达式u = = 30
评估真正的
51次。
有关模型覆盖数据的示例万博1manbetx仿真软件设计验证器块,看目标和制约因素覆盖范围.