MATLAB 决策计数
度量 ID
slcomp.MATLABDecisions
描述
使用此度量来计算与单元或组件关联的 MATLAB® 代码中的决策数量。
该度量分析以下内容:
Simulink® 中的 MATLAB 函数,包括 MATLAB Function 模块和 Interpreted MATLAB Function 模块
Stateflow® 对象中的 MATLAB 函数
MATLAB 文件中的函数和方法
支持的工件
您可以针对Units和组件收集此度量。要控制仪表板将哪些对象分类为单元或组件,请参阅将模型按层级结构分类为组件或单元。
常用 MATLAB 关键词的决策计数
下表显示了该度量如何计算常见 MATLAB 关键字的决策计数。该度量使用 checkcode 函数的圈复杂度值。有关圈复杂度值的更多信息,请参阅 Measure Code Complexity Using Cyclomatic Complexity。
计算详细信息
度量:
计算 MATLAB 代码中的决策数,方法是取代码分析器计算出的圈复杂度,然后减去 1 以排除默认路径。有关详细信息,请参阅
checkcode和Measure Code Complexity Using Cyclomatic Complexity。统计
if、elseif、while、for、parfor、try和case语句中的决策次数。忽略
else、otherwise和catch语句,因为它们构成了默认路径。无法编译模型。该度量仅考虑静态信息。
仅分析不包含语法错误的 MATLAB 代码。
收集
收集此度量的数据:
在模型可维护性仪表板的设计圈复杂度细分部分中,点击运行小组件的度量图标。决策分布情况显示在 MATLAB 行和分布列中。要查看显示每个模型组件的 MATLAB 决策计数的表格,点击分布中的一个区间。
使用度量标识符
slcomp.MATLABDecisions和getMetrics。
结果
对于此度量,metric.Result 的实例返回 Value,作为与单元或组件的每一层关联的 MATLAB 代码中的 MATLAB 决策数。
示例
假设您有一个单元,其中只包含一个代码如下的 MATLAB Function 代码模块:
function y = fcn(u) if u < 0 % one decision y = -1*u; else % default path % zero decisions y = u; end end
对于 if-else 语句,决策数为 1,因为 if 语句代表一个决策,而 else 语句代表默认行为。如果没有做出任何决定,则执行路径遵循默认路径。
如果 MATLAB Function 模块的输入小于零,则 MATLAB Function 模块的输出为输入乘以 -1。
否则,默认情况下,MATLAB Function 模块的输出等于 MATLAB Function 模块的输入。
在这个示例中,MATLAB 决策的数量为 1。
假设代码中包含 elseif 语句:
function y = fcn(u) if u < 0 % one decision y = -1*u; elseif u == 1 % one decision y = 1; elseif u == 2 % one decision y = 2; else % default path % zero decisions y = u; end end
elseif 语句,MATLAB 决策的数量就增加 1。包含一条 if 语句、两条 elseif 语句和一条 else 语句的 MATLAB 代码包含三个决策。else 语句不影响决策数量,因为 else 语句是默认路径的一部分。默认路径不计入决策次数,因为没有做出任何决策来达到默认状态。