用于强制执行圈复杂度和 LCOM 约束的注释

lui*_*nal 3 java metrics annotations cyclomatic-complexity

在工作中,我们使用多种工具来捕获多个指标(主要是圈复杂度和 LCOM)。我们使用这些来获取警告标志并指导先发制人的重构工作。它对提高代码质量非常有益。

但是,该过程与构建过程无关。它是分开进行的。此外,我正在寻找可以使源代码固有的东西(而不是在其上运行的外部进程。)

有没有人知道一组可以从编译器运行的注释和可配置的注释处理器,如果代码不符合阈值圈/LCOM 指标,这将使构建失败?

我想我可以从 maven/ant 运行 ckjm、checkstyle 和 pmd,但是一些工作在源代码上,其他工作在字节码上。在编译开始之前有一个可以处理源代码的整合工具会很好。

另一件事是,如果有一组注释可以推动这一点,那就太好了(允许在极端情况下不可避免地需要定制。)

@LCOM3(Threshold=1.5)
public class SomeDumbPojo {... buch of gets/sets...}

// by default would be measured against a strict LCOM3
public class ActualBizClass
{
   @CYCLOMATIC_COMPLEXITY(Threshold=15)
   public void someFatIrreducibleMethod(){...}
}
Run Code Online (Sandbox Code Playgroud)

然后,当我们运行该工具时,默认情况下会应用严格的(和可配置的)指标阈值,除了那些用(希望有记录且合法的)更宽松的阈值进行注释的工件。对于一些不能/不应该减少的方法,放宽的圈复杂度是有意义的。对于没有行为的普通 POJO,LCOM 需要放松……等等等等。

尽我所能寻找和谷歌搜索,我找不到任何东西(希望是开源的)。但我不妨在这里问一下,以防万一有人知道这类事情。

谢谢。

mat*_*t b 5

在编译开始之前有一个可以处理源代码的整合工具会很好。

我不太确定这意味着什么,因为必须将代码编译成某种东西才能进行静态分析。所有这些工具都需要能够将您的代码编译成字节码或某种语法树。

我建议保持简单:如果圈复杂度或其他指标的任何警告超过给定阈值,则配置 PMD 以失败构建。与其用允许的复杂度对方法进行注释(您将如何推导出可接受的值?是什么防止有人意外地将复杂度从 12 增加到 15 以增加注释),而是对其进行注释以完全抑制警告

@SuppressWarnings("PMD.CyclomaticComplexity")
public void someFatIrreducibleMethod() { ... }
Run Code Online (Sandbox Code Playgroud)

然后,您可以定期在代码库中搜索您可能想要删除和重构的带有抑制警告的方法。

或者,如果您想提供某种可追溯性,PMD 支持以某种语法在代码中留下注释,以标记谁审核了警告以及何时审核。