Simulink 设计圈复杂度
度量 ID
slcomp.SLCyclomaticComplexity
描述
设计圈复杂度是指通过一个设计可能存在的执行路径的数量。一般来说,设计中的路径越多,设计就越复杂。当设计的圈复杂度较低时,设计通常更容易阅读、维护和测试。设计圈复杂度计算为决策路径数加一。该度量加 1 是为了考虑默认路径所代表的执行路径。设计圈复杂度包含了默认路径,因为该度量识别了执行路径中的每个可能结果,包括默认结果。
使用 Simulink® 设计圈复杂度度量来确定设计中 Simulink 模型组件的设计圈复杂度。
该度量统计通过单元或组件的基于 Simulink 的执行路径的总数。执行路径的数量计算为 Simulink 个决策、Simulink 决策计数 个决策,再加上 1 个默认路径。默认路径每个单元或组件只计算一次。
要查看与不同模块类型关联的 Simulink 决策的数量,请参阅 常见模块类型的决策计数。
支持的工件
您可以针对Units和组件收集此度量。要控制仪表板将哪些对象分类为单元或组件,请参阅将模型按层级结构分类为组件或单元。
计算详细信息
该度量不排除与逻辑运算短路相关的决策,因为 Simulink 会运行一个模块,而不管先前的输入是否单独决定了模块的输出。
例如,在 Simulink 中,具有重复输入的 AND 模块会运行,而不管前一个输入是否单独决定了模块的输出。
收集
要收集此度量的数据,请将 getMetrics 与度量标识符 slcomp.SLCyclomaticComplexity 结合使用。
结果
对于此度量,metric.Result 的实例返回 Value 作为单元或组件的 Simulink 设计圈复杂度。
示例
假设您有一个单元,其中只包含一个输入为 u 的 Abs 模块。
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 < 0和 Abs 模块的输出是输入乘以 -1。u ≥ 0和 Abs 模块的输出等于 Abs 模块的输入。