您维护的任何功能的最高Cyclomatic复杂度是多少?你将如何重构呢?

Joh*_*esH 14 refactoring cyclomatic-complexity

我正在对我维护的遗留系统进行一些探索,前几天使用NDepend(很棒的工具检查出来).我的发现几乎让我在屏幕上喷了一口咖啡.该系统中按行圈复杂度递减排名的前3个函数是:

  1. SomeAspNetGridControl.CreateChildControls(CC为171 !!!)
  2. SomeFormControl.AddForm(CC为94)
  3. SomeSearchControl.SplitCriteria(CC为85)

我的意思是171,哇!不应该低于20或什么?所以这让我很奇怪.您维护或重构的最复杂功能是什么?你将如何重构这样的方法?

注意:我测量的CC是在代码上,而不是IL.

And*_*ven 18

与几年前我工作的20世纪70年代复古COBOL相比,这是孩子们的东西.我们使用原始的McCabe工具以图形方式显示某些代码的CC.打印出来的是纯黑色,因为显示功能路径的线条非常密集,像意大利面条一样.我没有数字,但必须高于171.

该怎么办

每个代码完成(第一版):

如果得分是:

  • 0-5 - 例程很可能
  • 6-10 - 开始考虑简化例程的方法
  • 10+ - 将例行程序的一部分分解为第二个例程并从第一个例程调用它

在打破原始程序时编写单元测试可能是个好主意.