主要内容

本页采用了机器翻译。点击此处可查看英文原文。

MATLAB 决策计数

自 R2022b 起

度量 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 以排除默认路径。有关详细信息,请参阅checkcodeMeasure Code Complexity Using Cyclomatic Complexity

  • 统计 ifelseifwhileforparfortrycase 语句中的决策次数。

  • 忽略 elseotherwisecatch 语句,因为它们构成了默认路径。

  • 无法编译模型。该度量仅考虑静态信息。

  • 仅分析不包含语法错误的 MATLAB 代码。

收集

收集此度量的数据:

  • 在模型可维护性仪表板的设计圈复杂度细分部分中,点击运行小组件的度量图标。决策分布情况显示在 MATLAB 行和分布列中。要查看显示每个模型组件的 MATLAB 决策计数的表格,点击分布中的一个区间。

  • 使用度量标识符 slcomp.MATLABDecisionsgetMetrics

结果

对于此度量,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 语句是默认路径的一部分。默认路径不计入决策次数,因为没有做出任何决策来达到默认状态。

另请参阅

对象

函数

主题