MetrixReloaded 的圈复杂度

cyclomatic complexity with MetrixReloaded

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

我让它工作并得到了输出,但不确定输出的实际含义。我看到的输出是:

任何人都可以告诉我这是什么意思以及它是否是 "good"/"bad" 的定义吗?

感谢您的帮助:)

屏幕截图中的指标以不同的粒度级别显示代码的 cycolomatic complexity (CC)。第一个屏幕截图(第一个选项卡标题为 Method metrics)是最精细的,显示了项目中每个方法的圈复杂度。第二个屏幕截图在 class 级别做同样的事情,依此类推,直到最右边的选项卡显示整个项目的指标。

最右边的四个选项卡上的平均值和总计都是从 方法指标 选项卡上的值向上流动的,因此请关注它。

作为起点,最感兴趣的数字是第一个屏幕截图中 v(G) 列下的数字,将每个方法的 CC 显示为整数值。 PMD documentation 提供了以下准则来确定这些数字是否为 "good"/"bad":

Complexity is determined by the number of decision points in a method plus one for the method entry. The decision points are 'if', 'while', 'for', and 'case labels'. Generally, 1-4 is low complexity, 5-7 indicates moderate complexity, 8-10 is high complexity, and 11+ is very high complexity.

具有高 CC 值的方法大致对应于我们乍一看会发现复杂的方法,反之亦然。例如,bean getters/setters 的 v(G) 应该为 1,因为它们的作用不大。

您的第一个屏幕截图中的数字都在 6 以下,因此无需担心。然而,如果一个方法对 v(G) 有很高的价值,那么你会想看看 the two values to its left, ev(G) and iv(G)。例如,如果您有一个 iv(G) 值为 1 且 ev(G) 值为 15 的方法,则该方法将不会对其他方法进行任何调用,但会有一些复杂的内部逻辑(可能是嵌套循环),可能值得重构。

显然远不止于此,但请注意 Method metrics 选项卡上的 v(G) 列可能是最重要的事情。