你为Java项目使用哪些代码分析工具?

你在Java项目中使用哪些代码分析工具?

我对各种感兴趣

  • 静态代码分析工具(FindBugs,PMD和其他)
  • 代码覆盖工具(Cobertura,Emma和其他人)
  • 其他任何基于工具的工具
  • 其他任何东西,如果我错过了某些东西

如果适用,还请说明您使用的构建工具以及这些工具与IDE和构建工具的集成程度。

如果一个工具只有一种特定的方式(作为一个IDE插件,或者说,一个构建工具插件),这些信息也值得注意。

0
还可以看看UCDetector: ucdetector.org
额外 作者 Christophe Roussy,
去结算 Pitest 进行变异测试。
额外 作者 mucaho,

12 答案

Checkstyle is another one I've used at a previous company... it's mainly for style checking, but it can do some static analysis too. Also, Clover for code coverage, though be aware it is not a free tool.

0
额外

我们使用FindBugs和JDepend与Ant集成。我们使用JUnit,但我们没有使用任何覆盖工具。

我没有将它集成到Rational Application Developer(我用来开发J2EE应用程序的IDE)中,因为我喜欢在Windows控制台中运行javac时看起来多么整齐。 :P

0
额外

我正在寻找许多答案来了解新工具,并将这些知识整合到一个问题/线程中,所以我怀疑这个问题会有一个真正的答案。

我对自己的问题的回答是,我们使用:

  • Findbugs用于查找常见错误/编码 - 从maven运行,并且可以轻松集成到Eclipse中
  • Cobertura为我们的报道报告 - 从maven运行

哈德森还有一个任务扫描器插件,它将显示您的TODO和FIXME的数量,并显示它们在源文件中的位置。

所有这些都与Maven 1.x集成在我们的案例中,并绑定到Hudson中,它在检入时运行我们的构建以及每晚和每周额外的事情。哈德森趋势图显示了我们的JUnit测试,覆盖范围,findbugs以及开放任务。还有一个Hudson插件,用于报告和绘制我们的编译警告。我们还使用哈德森插图插件,随着时间的推移,用他们自己的性能和内存使用图进行了几次性能测试。

0
额外

我使用内置于IntelliJ IDEA中的静态分析。完美的整合。

我使用内置于Intellij IDEA中的代码覆盖率(基于EMMA)。再次,完美的整合。

与将各个供应商的工具拼凑在一起相比,此集成解决方案可靠,功能强大且易于使用。

0
额外

我们使用FindBugs和Checkstyle以及Clover进行代码覆盖。

我认为有一些静态分析很重要,可以支持你的开发。不幸的是,这些工具很重要,但它仍然没有广泛传播。

0
额外

我们的团队使用PMD和Cobertura,实际上我们的项目都是maven项目,并且包含用于代码分析的插件非常简单。真正的问题是针对需要使用哪种分析的特定项目,我的观点是,您无法为每个项目使用相同的插件。

0
额外

对于静态分析工具,我经常使用CPD, PMDFindBugsCheckstyle

CPD是PMD“复制/粘贴检测器”工具。在我注意到“查找重复代码”链接之前,我一直在使用PMD。 PMD网页

我想指出的是,这些工具有时可以扩展到“开箱即用”的规则之外。而不仅仅是因为它们是开源的,所以你可以重写它们。其中一些工具带有可扩展的应用程序或“挂钩”。例如,PMD附带了“设计师”工具,可让您创建新规则。此外,Checkstyle具有可用于大量定制的属性的 DescendantToken 检查。

我将这些工具与一个基于Ant的构建。您可以按照链接查看我的评论配置。

除了简单的集成到构建之外,我发现将这些工具配置为通过几种其他方式进行“集成”是有帮助的。即报告生成和警告抑制一致性。我想将这些方面添加到这个讨论中(也许应该有“静态分析”标签):人们如何配置这些工具来创建“统一”解决方案? (我已经单独提出了这个问题这里

首先,对于警告报告,我转换输出以便每个警告具有简单的格式:

/absolute-path/filename:line-number:column-number: warning(tool-name): message

这通常被称为“Emacs格式”,但即使您不使用Emacs,它也是用于均匀化报告的合理格式。例如:

/project/src/com/example/Foo.java:425:9: warning(Checkstyle):Missing a Javadoc comment.

我的警告格式转换是由我的Ant脚本通过Ant 过滤链完成的。

我所做的第二个“整合”是用于警告抑制。默认情况下,每个工具都支持您可以放置​​在代码中的注释或注释(或两者),以便使您想忽略的警告无效。但是,这些各种警告抑制请求并没有一致的外观,这似乎有些愚蠢。当你压制警告时,你会压制一个警告,为什么不总是写“ SuppressWarning ?”

例如,PMD的默认配置可以抑制注释中带有字符串“ NOPMD ”的代码行的警告生成。此外,PMD支持Java的 @SuppressWarnings 注释。我将PMD配置为使用包含“ SuppressWarning(PMD。”而不是 NOPMD )的注释,以便PMD压制看起来相似。风格抑制:

// SuppressWarnings(PMD.PreserveStackTrace) justification: (false positive) exceptions are chained

只有“ SuppressWarnings(PMD。”)部分对评论意义重大,但它与PMD对 @SuppressWarning 注释的支持一致,该注释通过名称识别单个规则违规:

@SuppressWarnings("PMD.CompareObjectsWithEquals") // justification: identity comparision intended

Similarly, Checkstyle suppresses warning generation between pairs of comments (no annotation support is provided). By default, comments to turn Checkstyle off and on contain the strings CHECKSTYLE:OFF and CHECKSTYLE:ON, respectively. Changing this configuration (with Checkstyle's "SuppressionCommentFilter") to use the strings "BEGIN SuppressWarnings(CheckStyle." and "END SuppressWarnings(CheckStyle." makes the controls look more like PMD:

// BEGIN SuppressWarnings(Checkstyle.HiddenField) justification: "Effective Java," 2nd ed., Bloch, Item 2
// END SuppressWarnings(Checkstyle.HiddenField)

使用Checkstyle评论时,特定的检查违规( HiddenField很重要,因为每个检查都有自己的“ BEGIN / END ”注释对。

FindBugs还支持使用 @SuppressWarnings 注释进行警告生成抑制,因此不需要进一步配置即可实现与其他工具的一致性。不幸的是,Findbugs必须支持自定义的 @SuppressWarnings 注释,因为内置的Java @SuppressWarnings 注释有一个 SOURCE 保留策略,足以将注释保留在FindBugs需要的类文件中。为了避免与Java的 @SuppressWarnings 注释冲突,我完全限定FindBugs警告抑制:

@edu.umd.cs.findbugs.annotations.SuppressWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")

这些技术使各种工具看起来合理一致。请注意,让每个警告抑制包含字符串“ SuppressWarnings ”可以使运行简单搜索轻松地在整个代码库中查找所有工具的所有实例。

0
额外
哇,非常详细的答案。感谢分享。我将在您的编码实践中模拟您的实践。
额外 作者 Vatsala,

我使用了Cobertura,Checkstyle,(Ecl)Emma和Findbugs的组合。

EclEmma is an awesome Eclipse plugin that shows the code coverage by coloring the java source in the editor (screenshot) - the coverage is generated by running a JUnit test. This is really useful when you are trying to figure out which lines are covered in a particular class, or if you want to see just which lines are covered by a single test. This is much more user friendly and useful than generating a report and then looking through the report to see which classes have low coverage.

Checkstyle和Findbugs Eclipse插件也很有用,它们会在您键入时在编辑器中生成警告。

Maven2拥有报告插件,可以与上述工具一起在构建时生成报告。我们使用它来获得整体项目报告,当您需要总计数字时,这些报告更有用。这些是由我们的CI构建生成的,它使用 Continuum 运行。

0
额外
哇@EclEmma!我知道Emma,但直接集成到Eclipse中?那规则。
额外 作者 Joshua McKinnon,
Continuum糟糕,Hudson规则。
额外 作者 Ken Liu,

以下所有我们在Maven 2.x构建和Eclipse / RAD 7中使用和集成easiy:

  • 测试 - JUnit / TestNG
  • 代码分析 - FindBugs,PMD
  • 代码覆盖率 - Clover

另外,在我们的Maven构建中,我们有:

  • JDepend
  • 标记检查器(TODO,FIXME等)

此外,如果你使用的是Maven 2.x,CodeHaus在他们的 Mojo项目中有一些方便的Maven插件

注意:Clover与Bamboo CI服务器开箱即用集成(因为它们都是Atlassian产品)。也有用于FindBugs,PMD和CheckStyle的Bamboo插件,但正如所指出的那样,免费的Hudson CI服务器也有这些插件。

0
额外

我与Cobertura有幸运。它是一个代码覆盖工具,可以通过您的ant脚本执行,作为您的常规构建的一部分,并且可以集成到Hudson中。

0
额外

在我们的项目中,我们使用Sonar在checkstyle,pmd ....和CI(Bamboo,Hudson)前一起使用Sonar,我们也获得了源质量的良好历史以及我们的指导方向。我喜欢Sonar,因为你在CI Stack中有一个中心工具可以为你做,而且你可以轻松地为每个项目定制规则。

0
额外

Structure 101 is good at code analysis and finding the cyclic package dependencies.

0
额外