executioninfo
从 cvdata 对象检索执行覆盖率信息
语法
说明
从 covInfo = executioninfo(cvdo,modelObject)cvdata 对象 cvdo 返回由 modelObject 指定的模型组件的执行覆盖率结果。如果 cvdo 包含代码覆盖率数据,则 executioninfo 返回语句覆盖率、函数覆盖率和函数调用覆盖率度量的总和。
返回仿真模式 covInfo = executioninfo(cvdo,modelObject,simMode)simMode 的执行覆盖率结果。
返回 covInfo = executioninfo(cvdo,modelObject,ignoreDescendants)modelObject 的执行覆盖率结果(无论是否包含其后代),具体取决于 ignoreDescendants 的值。
[ 返回与 covInfo,description] = executioninfo(cvdo,modelObject)modelObject 相关的每个执行点的描述结构体数组。如果 cvdo 包含代码覆盖率度量语句覆盖率、函数覆盖率或函数调用覆盖率的覆盖率数据,则 description 包含每个相关度量的结构体数组。
示例
此示例显示如何从 cvdata 对象中提取模块的执行覆盖率结果。
加载 slvnvdemo_cv_small_controller 模型。
modelName = "slvnvdemo_cv_small_controller";
load_system(modelName)
使用 Simulink.SimulationInput 对象配置模型的覆盖率设置。
simIn = Simulink.SimulationInput(modelName); simIn = setModelParameter(simIn,"CovEnable","on"); simIn = setModelParameter(simIn,"CovMetricStructuralLevel",... "BlockExecution"); simIn = setModelParameter(simIn,"CovSaveSingleToWorkspaceVar","on"); simIn = setModelParameter(simIn,"CovSaveName","covData");
将 simIn 作为输入传递给 sim 来对模型进行仿真。
simOut = sim(simIn); covData = simOut.covData;
使用 get_param 检索 Saturation 模块的句柄。
blockHandle = get_param(modelName+"/Saturation","Handle");
使用 executioninfo 提取执行覆盖率信息。
executionCov = executioninfo(covData,blockHandle)
executionCov =
1 1
计算满足的执行结果的百分比。
percentCoverage = 100*executionCov(1) / executionCov(2)
percentCoverage = 100
此示例展示如何提取在软件在环 (SIL) 模式下仿真的模型的语句、函数和函数调用覆盖率。
加载模型。
modelName = "SILTopModel";
load_system(modelName);
使用 Simulink.SimulationInput 对象配置模型的覆盖率设置。
simIn = Simulink.SimulationInput(modelName); simIn = setModelParameter(simIn,"CovEnable","on"); simIn = setModelParameter(simIn,"CovMetricStructuralLevel","MCDC"); simIn = setModelParameter(simIn,"CovSaveSingleToWorkspaceVar","on"); simIn = setModelParameter(simIn,"CovSaveName","covData"); simIn = setModelParameter(simIn,"SimulationMode","software-in-the-loop (sil)");
将 simIn 作为输入传递给 sim 来对模型进行仿真。
simOut = sim(simIn); covDataSIL = simOut.covData;
### Searching for referenced models in model 'SILTopModel'. ### Total of 1 models to build. ### Starting build procedure for: SILTopModel ### Successful completion of build procedure for: SILTopModel Build Summary Top model targets: Model Build Reason Status Build Duration ============================================================================================================== SILTopModel Information cache folder or artifacts were missing. Code generated and compiled. 0h 0m 24.491s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 25.861s ### Preparing to start SIL simulation ... Building with 'gcc'. MEX completed successfully. ### Updating code generation report with SIL files ... ### Starting SIL simulation for component: SILTopModel ### Application stopped ### Stopping SIL simulation for component: SILTopModel ### Completed code coverage analysis
将 covDataSIL 和文件名 SILTopModel.c 作为输入传递给 executioninfo。
[covMetricsSIL,covMetricsSILdesc] = executioninfo(covDataSIL,"SILTopModel.c")
covMetricsSIL =
21 24
covMetricsSILdesc =
struct with fields:
isFiltered: 0
justifiedCoverage: 0
isJustified: 0
filterRationale: ''
function: [1×6 struct]
functionCall: [1×4 struct]
executableStatement: [1×18 struct]
decision: [1×24 struct]
当您在 SIL 模式下分析模型的覆盖率时,executioninfo 会返回以下代码覆盖率度量的数据:
语句覆盖率
函数覆盖率
函数调用覆盖率
covMetricsSIL,第一个输出参量,包含两个值:满足的代码覆盖率目标总数和代码覆盖率目标总数。通过除法来确定满足的语句、函数和函数调用覆盖率的百分比。
percentCodeCov = 100 * covMetricsSIL(1) / covMetricsSIL(2)
percentCodeCov = 87.5000
要检索有关各个度量的详细信息,请使用第二个输出参量 covMetricsSILdesc。分析的代码缺少三个语句的覆盖率。要确定哪些语句缺少覆盖率,您可以搜索语句覆盖率描述对象中哪些字段的执行计数为零。
execCounts = [covMetricsSILdesc.executableStatement.executionCount]; missingCovIdxs = execCounts == 0; missingCov = covMetricsSILdesc.executableStatement(missingCovIdxs);
missingCov 数组包含结构体数组中三个缺失语句目标的位置。查看第一个缺失语句的结构体。
disp(missingCov(1))
isFiltered: 0
justifiedCoverage: 0
isJustified: 0
filterRationale: ''
text: 'Statement executed'
executionCount: 0
fileName: 'SILTopModel.c'
functionName: 'CounterTypeB'
sourceLocation: [1×1 struct]
kind: 'if'
modelElements: {1×2 cell}
您可以看到它是一个 if 语句,位于函数 counterTypeB 中,而该函数位于文件 SILTopModel.c 中。查看其 sourceLocation 字段,查看代表缺失语句目标的确切行号。
disp(missingCov(1).sourceLocation)
startLine: 113
startCol: 5
endLine: 115
endCol: 5
在 SILTopModel.c 中,第 114 行到第 116 行缺少语句覆盖率。
输入参数
覆盖率数据,指定为 cvdata 对象。
数据类型: cvdata
模型对象,指定为字符数组、字符串数组、Simulink 句柄、Stateflow ID 或元胞数组。
要指定模型对象(例如模块或 Stateflow 图),请使用以下格式之一:
| 对象设定 | 描述 |
|---|---|
| 模型或模块的完整路径 |
| 模型或模块 |
| Simulink API 对象的句柄 |
| Stateflow ID |
| 来自单独实例化的 Stateflow 图的 Stateflow API 对象的句柄 |
| 包含 Stateflow 图或原子子图的路径以及该图或子图中包含的对象的 ID 的元胞数组 |
| 包含 Stateflow 图或子图的路径以及该图或子图中包含的 Stateflow 对象 API 句柄的元胞数组 |
| 带有 Stateflow 图或原子子图句柄的元胞数组以及该图或子图中包含的对象的 ID |
要指定 S-Function 模块或其内容,请使用以下格式之一:
| 对象设定 | 描述 |
|---|---|
| 包含 S-Function 模块路径和源文件名称的元胞数组 |
| 具有 S-Function 模块句柄和源文件名称的元胞数组 |
| 包含 S-Function 模块的路径、源文件的名称和函数名称的元胞数组 |
| 带有 S-Function 模块句柄、源文件的名称和函数名称的元胞数组 |
要指定代码覆盖率结果,例如在软件在环 (SIL) 或处理器在环 (PIL) 分析期间收集的覆盖率数据,请使用以下格式之一:
| 对象设定 | 描述 |
|---|---|
| 包含源文件名称和函数名称的元胞数组 |
| 具有模型名称或模型句柄和源文件名称的元胞数组 |
| 具有模型名称或模型句柄、源文件的名称和函数名称的元胞数组 |
数据类型: char | string | cell | Stateflow.State | Stateflow.Transition
覆盖率分析期间的仿真模式,指定为以下选项之一:
| 对象设定 | 描述 |
|---|---|
| 普通仿真模式下的模型。 |
| 软件在环 (SIL) 或处理器在环 (PIL) 仿真模式下的模型。 |
| SIL 或 PIL 仿真模式下的模型参考。 |
| 在 SIL 或 PIL 仿真模式下的模型引用,代码接口设置为顶层模型。 |
数据类型: char | string
是否忽略覆盖率结果中的后代,指定为数字或逻辑 1 (true) 或 0 (false),其中:
0 (false)包括后代对象的覆盖率结果。1 (true)忽略后代对象的覆盖率结果。
数据类型: single | double | logical
输出参量
覆盖率信息,如果 cvdo 包含执行覆盖率数据,则返回为 [covered_outcomes,total_outcomes] 形式的双元素标量数组,如果不包含,则返回为空数组。数组中的元素为:
covered_outcomes | object 满足的执行结果数 |
total_outcomes | object 的执行结果数量 |
数据类型: double
执行覆盖率描述,以包含以下字段的结构体返回:
模块排除标志,如果模块被排除则返回为 1,如果没有被排除则返回为 0。
数据类型: double
模块覆盖率过滤器原理,以字符数组形式返回。
数据类型: char
已申述覆盖率目标结果的数量,以双精度标量形式返回。
数据类型: double
模块申述标志,如果模块对齐则返回 1,否则返回 0。
数据类型: double
单个决策的信息,以包含以下字段的结构体数组返回:
模块执行文本,以字符数组 'Block executed' 形式返回。即使该模块的执行覆盖率为 0%,text 字段也不会改变。
数据类型: char
模型对象执行的时间步数,以双精度标量形式返回。
数据类型: double
数据类型: struct
函数覆盖率信息,以 Nf 结构体数组形式返回,其中 Nf 是分析的函数数量。当 function 包含函数覆盖率度量的代码覆盖率数据时,会出现 cvdo。每个结构体包含以下字段:
函数排除标志,如果函数被排除则返回 1,如果没有被排除则返回 0。
数据类型: double
已申述覆盖率结果的数量,以双精度标量形式返回。
数据类型: double
函数申述标志,如果函数调整成功则返回 1,否则返回 0。
数据类型: double
函数覆盖率过滤器原理,以字符数组形式返回。如果函数未被过滤或者未设置过滤原理,filterRationale 将返回一个空数组。
数据类型: char
函数覆盖率文本,以 'Function entry' 形式返回。
数据类型: char
函数的执行计数,以 64 位整数返回。
数据类型: int64
包含该函数的文件的名称,以字符数组形式返回。
数据类型: char
所分析函数的名称,以字符数组形式返回。
数据类型: char
所分析函数在源代码中的位置,以包含以下字段的结构体数组形式返回:
| 字段名称 | 描述 | 数据类型 |
|---|---|---|
| 函数开始的源代码行 |
|
| 源代码中函数开始的列 |
|
| 函数结束的源代码行 |
|
| 函数结束的源代码列 |
|
数据类型: struct
与函数对应的模型元素,以字符数组形式返回。当您在 SIL 或 PIL 模式下分析模型时,会出现 modelElements 字段。
数据类型: char
数据类型: struct
函数调用覆盖率信息,以 Nc 结构体数组形式返回,其中 Nc 是分析的函数调用数。当 functionCall 包含函数调用覆盖率度量的代码覆盖率数据时,会出现 cvdo。每个结构体包含以下字段:
函数调用排除标志,如果函数调用被排除则返回 1,否则返回 0。
数据类型: double
已申述覆盖率结果的数量,以双精度标量形式返回。
数据类型: double
函数调用结果申述标志,如果函数调用结果已申述则返回 1,否则返回 0。
数据类型: double
函数调用覆盖率过滤器原理,以字符数组形式返回。如果函数调用未被过滤或者未设置过滤原理,filterRationale 将返回一个空数组。
数据类型: char
函数调用覆盖率文本,以 'Function called' 形式返回。
数据类型: char
函数调用的执行计数,以 64 位整数返回。
数据类型: int64
包含函数调用的文件的名称,以字符数组形式返回。
数据类型: char
所分析的函数调用的名称,以字符数组形式返回。
数据类型: char
源代码中分析的函数调用的位置,以包含以下字段的结构体数组返回:
| 字段名称 | 描述 | 数据类型 |
|---|---|---|
| 函数调用开始的源代码行 |
|
| 源代码中函数调用开始的列 |
|
| 函数调用结束的源代码行 |
|
| 函数调用结束的源代码列 |
|
数据类型: struct
函数调用表达式,以字符数组形式返回。
数据类型: char
与函数调用相对应的模型元素,以字符数组的形式返回。当您在 SIL 或 PIL 模式下分析模型时,会出现 modelElements 字段。
数据类型: char
数据类型: struct
语句覆盖率信息,以 Ns 结构体数组形式返回,其中 Ns 是可执行语句的数量。当 executableStatement 包含语句覆盖率度量的代码覆盖率数据时,会出现 cvdo。每个结构体数组包含以下字段:
语句排除标志,如果语句被排除则返回 1,如果没有排除则返回 0。
数据类型: double
已申述语句结果的数量,返回一个双精度标量。
数据类型: double
语句结果申述标志,如果语句结果调整后则返回 1,否则返回 0。
数据类型: double
语句覆盖率过滤器原理,以字符数组形式返回。如果语句未经过滤或者未设置过滤原理,filterRationale 将返回一个空数组。
数据类型: char
语句覆盖率文本,以 'Statement executed' 形式返回。
数据类型: char
语句执行计数,以 64 位整数返回。
数据类型: int64
包含语句的文件的名称,以字符数组形式返回。
数据类型: char
包含语句的函数名称,以字符数组形式返回。
数据类型: char
源代码中分析的语句的位置,以包含以下字段的结构体数组形式返回:
| 字段名称 | 描述 | 数据类型 |
|---|---|---|
| 语句开始的源代码行 |
|
| 源代码中语句开始的列 |
|
| 语句结束的源代码行 |
|
| 源代码中语句结束的列 |
|
数据类型: struct
分析的语句的类型,以字符数组形式返回。
示例: 'stmt', 'if'
数据类型: char
与语句相对应的模型元素,以字符数组的形式返回。当您在 SIL 或 PIL 模式下分析模型时,会出现 modelElements 字段。
数据类型: char
数据类型: struct
备选方法
使用覆盖率设置来收集并显示执行覆盖率结果:
打开模型。
在模型编辑器的建模选项卡中,选择模型设置。
在配置参数对话框的覆盖率窗格中,选择启用覆盖率分析。
在覆盖率度量下,将结构覆盖率等级设置为模块执行。
点击确定关闭配置参数对话框并保存更改。
通过点击运行按钮来仿真模型并查看结果。
版本历史记录
在 R2006b 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)