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

qenim 发布于 2018-03-01 java 最后更新 2018-03-01 01:06 1564 浏览

你在Java项目中使用哪些代码分析工具? 我对各种感兴趣

  • 静态代码分析工具(FindBugs,PMD和其他)
  • 代码覆盖工具(Cobertura,Emma和其他人)
  • 其他任何基于工具的工具
  • 其他任何东西,如果我错过了某些东西
  • 如果适用,还请说明您使用的构建工具以及这些工具与IDE和构建工具的集成程度。 如果一个工具只有一种特定的方式(作为一个IDE插件,或者说,一个构建工具插件),这些信息也值得注意。
已邀请:

vet

赞同来自:

我们使用FindBugs和JDepend与Ant集成。我们使用JUnit,但我们没有使用任何覆盖工具。 我没有将它集成到Rational Application Developer(我用来开发J2EE应用程序的IDE)中,因为我喜欢在Windows控制台中运行javac时看起来多么整洁。 :P

ddolor

赞同来自:

Checkstyle是我在以前的公司中使用过的另一个...它主要用于样式检查,但它也可以进行一些静态分析。此外,代码覆盖Clover,但请注意它不是一个免费工具。

ysit

赞同来自:

我们使用FindBugs和Checkstyle以及Clover进行代码覆盖。 我认为有一些静态分析很重要,可以支持你的开发。不幸的是,这些工具很重要,但它仍然没有广泛传播。

qenim

赞同来自:

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

  • Findbugs用于查找常见错误/编码 - 从maven运行,并且可以轻松集成到Eclipse中
  • Cobertura为我们的报道报告 - 从maven运行
  • 哈德森还有一个任务扫描器插件,它将显示你的TODO和FIXME的数量,并显示它们在源文件中的位置。 所有这些都与Maven 1.x集成在我们的案例中,并绑定到Hudson中,它在检入时运行我们的构建以及每晚和每周额外的事情。哈德森趋势图显示了我们的JUnit测试,覆盖范围,findbugs以及开放任务。还有一个Hudson插件,用于报告和绘制我们的编译警告。我们还使用哈德森插图插件,随着时间的推移,用他们自己的性能和内存使用图表进行了几次性能测试。

uut

赞同来自:

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

  • 测试 - JUnit/TestNG
  • 代码分析 - FindBugs,PMD
  • 代码覆盖率 - Clover
  • 另外,在我们的Maven构建中,我们有:
    • JDepend
    • 标记检查器(TODO,FIXME等)
    • 此外,如果您使用的是Maven 2.x,CodeHaus在其Mojo project中有一组方便的Maven插件。 注意:Clover与Bamboo CI服务器开箱即用集成(因为它们都是Atlassian产品)。也有用于FindBugs,PMD和CheckStyle的Bamboo插件,但正如所指出的那样,免费的Hudson CI服务器也有这些插件。

dquis

赞同来自:

对于静态分析工具,我经常使用CPD,PMDFindBugsCheckstyle。 CPD是PMD“复制/粘贴检测器”工具。在我注意到PMD web page上的"Finding Duplicated Code" link之前,我正在使用PMD一会儿。 我想指出的是,这些工具有时可以扩展到“开箱即用”的规则之外。而不仅仅是因为它们是开源的,所以你可以重写它们。其中一些工具带有可扩展的应用程序或“挂钩”。例如,PMD带有"designer" tool,它允许您创建新的规则。另外,Checkstyle具有DescendantToken检查,该检查具有允许大量定制的属性。 我将这些工具与an Ant-based build集成。您可以按照链接查看我的评论配置。 除了简单的集成到构建之外,我发现将这些工具配置为通过其他几种方式进行“集成”是有帮助的。即报告生成和警告抑制一致性。我想将这些方面添加到这个讨论中(也许应该也有“静态分析”标签):人们如何配置这些工具来创建“统一”解决方案? (我已经单独提出了这个问题here) 首先,对于警告报告,我转换输出以便每个警告具有简单的格式:

/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 filterchains完成。 我所做的第二个“整合”是用于警告抑制。默认情况下,每个工具都支持您可以放置​​在代码中的注释或注释(或两者兼有),以使您想要忽略的警告无效。但是,这些各种警告抑制请求并没有一致的外观,这似乎有些愚蠢。当你压制一个警告时,你压制了一个警告,为什么不总是写“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
同样,Checkstyle抑制注释对之间的警告生成(不提供注释支持)。默认情况下,关闭和打开Checkstyle的注释分别包含字符串CHECKSTYLE:OFFCHECKSTYLE:ON。将此配置(使用Checkstyle的“SuppressionCommentFilter”)更改为使用字符串“BEGIN SuppressWarnings(CheckStyle.”和“END SuppressWarnings(CheckStyle.”使控件看起来更像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”,可以轻松地运行简单搜索,以便在整个代码库中查找所有工具的所有实例。

faut

赞同来自:

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

tut

赞同来自:

我使用内置于IntelliJ IDEA中的静态分析。完美的整合。 我使用内置于Intellij IDEA中的代码覆盖率(基于EMMA)。再次,完美的整合。 与将各个供应商的工具拼凑在一起相比,此集成解决方案可靠,功能强大且易于使用。

malias

赞同来自:

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

vvelit

赞同来自:

我使用了Cobertura,Checkstyle,(Ecl)Emma和Findbugs的组合。 EclEmma是一个真棒 Eclipse插件,它通过在编辑器中对java源着色来显示代码覆盖率(screenshot) - 覆盖率是通过运行JUnit测试生成的。当你试图找出哪一行在特定的类中被覆盖,或者你想看到哪一行被单个测试覆盖时,这非常有用。与生成报告然后查看报告以查看哪些类的覆盖率较低相比,这更方便用户使用。 Checkstyle和Findbugs Eclipse插件也很有用,它们会在您输入时在编辑器中生成警告。 Maven2拥有报告插件,可以与上述工具一起在构建时生成报告。我们使用它来获得整体项目报告,当您需要总计数字时,这些报告更有用。这些是由我们的CI构建生成的,它使用Continuum运行。

eut

赞同来自:

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

jquia

赞同来自:

Structure 101擅长代码分析和查找循环包相关性。