主要内容

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

Simulink 设计圈复杂度

自 R2022b 起

度量 ID

slcomp.SLCyclomaticComplexity

描述

设计圈复杂度是指通过一个设计可能存在的执行路径的数量。一般来说,设计中的路径越多,设计就越复杂。当设计的圈复杂度较低时,设计通常更容易阅读、维护和测试。设计圈复杂度计算为决策路径数加一。该度量加 1 是为了考虑默认路径所代表的执行路径。设计圈复杂度包含了默认路径,因为该度量识别了执行路径中的每个可能结果,包括默认结果。

使用 Simulink® 设计圈复杂度度量来确定设计中 Simulink 模型组件的设计圈复杂度。

该度量统计通过单元或组件的基于 Simulink 的执行路径的总数。执行路径的数量计算为 Simulink 个决策、Simulink 决策计数 个决策,再加上 1 个默认路径。默认路径每个单元或组件只计算一次。

要查看与不同模块类型关联的 Simulink 决策的数量,请参阅 常见模块类型的决策计数

支持的工件

您可以针对Units组件收集此度量。要控制仪表板将哪些对象分类为单元或组件,请参阅将模型按层级结构分类为组件或单元

计算详细信息

该度量不排除与逻辑运算短路相关的决策,因为 Simulink 会运行一个模块,而不管先前的输入是否单独决定了模块的输出。

例如,在 Simulink 中,具有重复输入的 AND 模块会运行,而不管前一个输入是否单独决定了模块的输出。

收集

要收集此度量的数据,请将 getMetrics 与度量标识符 slcomp.SLCyclomaticComplexity 结合使用。

结果

对于此度量,metric.Result 的实例返回 Value 作为单元或组件的 Simulink 设计圈复杂度。

示例

假设您有一个单元,其中只包含一个输入为 uAbs 模块。

Abs 代码模块可以视为 if-else 语句:

  • 如果 Abs 模块的输入小于零,则 Abs 模块的输出为输入乘以 -1。

  • 否则,默认情况下,Abs 模块的输出等于 Abs 模块的输入。

if (input < 0)
  % one decision
  output = -1*input;
else
  % default path
  % zero decisions
  output = input;
end

对于 if-else 语句,决策数为 1,因为 if 语句代表一个决策,而 else 语句代表默认行为。如果没有做出任何决定,则执行路径遵循默认路径。

在这个示例中,Simulink 决策的数量为 1,因此该单元的 Simulink 设计圈复杂度为 2。

Simulink 设计圈复杂度的值代表了单元中两种可能的执行路径,即:

  • u < 0Abs 模块的输出是输入乘以 -1。

  • u ≥ 0Abs 模块的输出等于 Abs 模块的输入。

另请参阅

对象

函数

主题