在工作中,我们正在研究导致高圈复杂度的常见问题。例如,具有较大的 if-else 语句会导致高圈复杂度,但可以通过用多态替换条件来解决。你还发现了哪些其他例子?
2 回答
请参阅 NDepend对 Cyclomatic Complexity 的定义。
嵌套深度也是一个很好的代码度量。
圈复杂度是一种流行的程序软件度量,等于程序中可以采取的决策数量。具体来说,在 C# 中,方法的 CC 是 1 + {在方法主体中找到的以下表达式的数量}:
如果 | 而| 为| 前锋 | 案例 | 默认 | 继续 | 转到 | && | || | 抓住| 三元运算符 ?: | ??
以下表达式不计入 CC 计算:
否则 | 做 | 开关 | 试试| 使用 | 扔| 最后 | 返回 | 对象创建 | 方法调用 | 现场访问
适应 OO 世界,该度量标准在方法和类/结构上定义(作为其方法 CC 的总和)。请注意,匿名方法的 CC 在计算其外部方法的 CC 时不计算在内。
建议:CC 高于 15 的方法难以理解和维护。CC 高于 30 的方法非常复杂,应该拆分成更小的方法(除非它们是由工具自动生成的)。
另一个避免使用这么多 if 的例子是有限状态机的实现。因为事件触发转换,所以条件以更清晰的方式隐含,这些转换改变了系统的状态。控制更容易。
给你一个链接,其中提到了它的一些好处:
http://www.skorks.com/2011/09/why-developers-never-use-state-machines/