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