MetrixReloaded的圈复杂度

时间:2018-02-01 15:53:57

标签: android intellij-idea metrics cyclomatic-complexity

我试图使用Android Studio中的MetricsReloaded插件分析代码库的圈复杂度(应该与IntelliJ相同)。

我有它工作并得到输出但不确定输出实际意味着什么。我看到的输出是: enter image description here

enter image description here

任何人都可以告诉我这意味着什么,以及是什么定义是"好" /"坏"?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

屏幕截图中的指标以不同的粒度级别显示代码的cycolomatic complexity(CC)。第一个屏幕截图(标题为方法指标的第一个标签)是最精细的,显示项目中每个方法的圈复杂度。第二个屏幕截图是在类级别执行相同的操作,依此类推,直到最右边的选项卡,显示整个项目的度量标准。

最右边四个标签上的平均值和总数都会从方法指标标签上的值向上流动,因此请关注它。

作为起点,最感兴趣的数字是第一个屏幕截图中 v(G)列下的数字,将每个方法的CC显示为整数值。 PMD documentation提供了以下指南,用于确定这些数字是“好”还是“坏”:

  

复杂性取决于方法中决策点的数量   加一个方法条目。决策点是'if','while',   'for'和'case labels'。通常,1-4是低复杂度,5-7   表示中等复杂度,8-10表示高复杂度,11 +表示复杂性   非常复杂。

具有高CC值的方法松散地对应于我们在初看时会发现复杂的方法,反之亦然。例如,bean getter / setter的 v(G)为1,因为它们没有做太多。

第一次屏幕截图上的数字都低于6,所以没什么好担心的。但是,如果某个方法的 v(G)值很高,那么您需要查看the two values to its left, ev(G) and iv(G)。例如,如果您的方法的 iv(G)值为1且 ev(G)值为15,则该方法不会进行任何调用其他方法,但会有一些复杂的内部逻辑(可能是嵌套循环),可能值得重构。

显然远远不止于此,但关注方法指标标签上的 v(G)列可能是最重要的一件事