Pau*_*son 53 refactoring metrics cyclomatic-complexity code-metrics
我一直在玩测量大代码库的圈复杂度.
循环复杂性是通过程序源代码的线性独立路径的数量,并且有许多免费工具可供您选择的语言.
结果很有趣,但并不令人惊讶.也就是说,我知道最毛茸茸的部分实际上是最复杂的(评级> 50).但我发现有用的是,在决定从哪里开始重构时,我可以指出为每个方法分配一个具体的"坏"数字.
你使用圈复杂度吗?您找到的最复杂的代码是什么?
ken*_*418 37
我们无情地重构,并使用Cyclomatic复杂性作为在我们的"命中列表"上获取代码的指标之一.1-6我们没有标注复杂性(尽管可能因其他原因而受到质疑),7-9是值得怀疑的,除非另有证明,否则任何超过10的方法都被认为是坏的.
我们所看到的最糟糕的是来自我们不得不接管的一些遗留代码中的一个怪异的if-else-if链.
ott*_*akt 18
实际上,除了方法级阈值之外,还可以使用圈复杂度.对于初学者来说,一个高复杂度的大方法可以分解为几个复杂程度较低的小方法.但它真的改善了代码库吗?当然,所有这些方法名称的可读性都会提高一些.但总条件逻辑没有改变.通过用多态替换条件,通常可以减少总条件逻辑.
我们需要一个仅通过方法分解不会变为绿色的指标.我称之为CC100.
CC100 = 100*(代码库的总圈复杂度)/(总代码行数)
Ken*_*Ken 12
它对我很有用,就像big-O有用一样:我知道它是什么,并且可以使用它来获得一个方法是好还是坏的直觉,但我不需要为每个方法计算它功能我写的.
我认为更简单的指标,如LOC,在大多数情况下至少同样好.如果一个功能不适合一个屏幕,它几乎无关紧要.如果一个函数需要20个参数并产生40个局部变量,那么它的圈复杂度是否为1并不重要.
我们最近开始使用它.我们使用NDepend进行一些静态代码分析,并测量圈复杂度.我同意,这是识别重构方法的一种不错的方法.
可悲的是,我们已经看到我们的开发人员在海外创建的一些方法的#200以上.
在有一个可以很好地使用C++模板和元编程技术的工具之前,它对我的情况没什么帮助.无论如何只记得那个
"并非所有可以衡量的东西都可以衡量,而不是所有可以衡量的东西都可以计算"爱因斯坦
所以请记住通过人工过滤传递这种类型的任何信息.