4

在工作中,我们正在研究导致高圈复杂度的常见问题。例如,具有较大的 if-else 语句会导致高圈复杂度,但可以通过用多态替换条件来解决。你还发现了哪些其他例子?

4

2 回答 2

5

请参阅 NDepend对 Cyclomatic Complexity 的定义

嵌套深度也是一个很好的代码度量。

圈复杂度是一种流行的程序软件度量,等于程序中可以采取的决策数量。具体来说,在 C# 中,方法的 CC 是 1 + {在方法主体中找到的以下表达式的数量}:

如果 | 而| 为| 前锋 | 案例 | 默认 | 继续 | 转到 | && | || | 抓住| 三元运算符 ?: | ??

以下表达式不计入 CC 计算:

否则 | 做 | 开关 | 试试| 使用 | 扔| 最后 | 返回 | 对象创建 | 方法调用 | 现场访问

适应 OO 世界,该度量标准在方法和类/结构上定义(作为其方法 CC 的总和)。请注意,匿名方法的 CC 在计算其外部方法的 CC 时不计算在内。

建议:CC 高于 15 的方法难以理解和维护。CC 高于 30 的方法非常复杂,应该拆分成更小的方法(除非它们是由工具自动生成的)。

于 2010-08-28T08:53:12.587 回答
2

另一个避免使用这么多 if 的例子是有限状态机的实现。因为事件触发转换,所以条件以更清晰的方式隐含,这些转换改变了系统的状态。控制更容易。

给你一个链接,其中提到了它的一些好处:

http://www.skorks.com/2011/09/why-developers-never-use-state-machines/

于 2016-12-26T17:43:56.033 回答