我们将哪些代码分析工具用于Java项目?
我们在Java项目上使用哪些代码分析工具?
我对各种各样的东西都感兴趣
- 静态代码分析工具(FindBugs,PMD和其他任何工具)
- 代码覆盖率工具(Cobertura,Emma等)
- 任何其他基于仪器的工具
- 还有什么,如果我想念什么
如果适用,还请说明我们使用的构建工具以及这些工具与IDE和构建工具的集成程度。
如果仅以特定方式(例如,IDE插件或者构建工具插件)提供工具,则该信息也值得注意。
解决方案
回答
我们使用与Ant集成的FindBugs和JDepend。我们使用JUnit,但未使用任何覆盖率工具。
我没有将其集成到Rational Application Developer(用于开发J2EE应用程序的IDE)中,因为我喜欢在Windows控制台中运行javac时它的外观整洁。 :P
回答
Checkstyle是我在以前的公司中使用过的另一个样式...它主要用于样式检查,但是它也可以执行一些静态分析。另外,Clover用于代码覆盖,尽管要知道它不是免费的工具。
回答
我们使用FindBugs和Checkstyle以及Clover进行代码覆盖。
我认为进行某种静态分析以支持开发非常重要。不幸的是,这些工具仍然很重要。
回答
我正在寻找许多答案来学习新工具并将这些知识整合到一个问题/线程中,因此我怀疑该问题是否会有1个真正的答案。
我对自己的问题的回答是,我们使用:
- 查找错误/编码常见错误的Findbugs-从Maven运行,还可以轻松集成到Eclipse中
- Cobertura提供的覆盖率报告-从Maven运行
Hudson还具有一个任务扫描程序插件,该插件将显示TODO和FIXME的计数,并显示它们在源文件中的位置。
在我们的案例中,所有组件都与Maven 1.x集成在一起,并与Hudson捆绑在一起,Hudson会在签入以及每晚和每周的其他工作中运行我们的构建。 Hudson趋势图显示了我们的JUnit测试,覆盖率,Findbug和开放任务。还有一个Hudson插件可以报告和绘制我们的编译警告。我们还使用Hudson plots插件进行了一些性能测试,这些测试带有自己的性能和内存使用情况随时间变化的图表。
回答
以下所有我们都在Maven 2.x构建和Eclipse / RAD 7中使用并轻松集成到其中:
- 测试-JUnit / TestNG
- 代码分析-FindBugs,PMD
- 代码覆盖率-三叶草
此外,在我们的Maven构建中,我们具有:
- 依赖
- 标记检查器(TODO,FIXME等)
此外,如果我们使用的是Maven 2.x,则CodeHaus在其Mojo项目中有一组方便的Maven插件。
注意:Clover与Bamboo CI服务器具有现成的集成(因为它们都是Atlassian产品)。也有适用于FindBugs,PMD和CheckStyle的Bamboo插件,但如上所述,免费的Hudson CI服务器也具有这些插件。
回答
对于静态分析工具,我经常使用CPD,PMD,FindBugs和Checkstyle。
/absolute-path/filename:line-number:column-number: warning(tool-name): message
/project/src/com/example/Foo.java:425:9: warning(Checkstyle):Missing a Javadoc comment.
// SuppressWarnings(PMD.PreserveStackTrace) justification: (false positive) exceptions are chained
@SuppressWarnings("PMD.CompareObjectsWithEquals") // justification: identity comparision intended
// BEGIN SuppressWarnings(Checkstyle.HiddenField) justification: "Effective Java," 2nd ed., Bloch, Item 2 // END SuppressWarnings(Checkstyle.HiddenField)
@edu.umd.cs.findbugs.annotations.SuppressWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")
回答
我在Cobertura的工作很顺利。它是一个代码覆盖工具,可以作为常规构建的一部分通过ant脚本执行,并且可以集成到Hudson中。
回答
我使用IntelliJ IDEA中内置的静态分析。完美整合。
我使用Intellij IDEA(基于EMMA)内置的代码覆盖率。再次,完美整合。
与将不同供应商的工具拼凑在一起相比,该集成解决方案可靠,强大且易于使用。
回答
我们的团队使用PMD和Cobertura,实际上我们的项目是Maven项目,包含用于代码分析的插件非常简单。真正的问题是针对特定项目,我们需要使用哪个分析,我认为我们不能为每个项目使用相同的插件。
回答
我使用了Cobertura,Checkstyle,(Ecl)Emma和Findbugs的组合。
EclEmma是一个很棒的Eclipse插件,它通过为编辑器中的Java源着色(截图)来显示代码覆盖率(截图),该覆盖率是通过运行JUnit测试生成的。当我们试图找出特定类覆盖哪些行时,或者想要仅查看单个测试覆盖哪些行时,这非常有用。与生成报告然后浏览报告以查看哪些类的覆盖率低相比,这更加用户友好和有用。
Checkstyle和Findbugs Eclipse插件也很有用,它们会在我们键入时在编辑器中生成警告。
Maven2具有报告插件,可与上述工具配合使用,以在构建时生成报告。我们使用它来获取总体项目报告,当我们需要合计数字时,这些报告会更有用。这些是由我们的CI版本生成的,这些CI版本使用Continuum运行。
回答
在我们的项目中,我们在Checkstyle,pmd ....之前使用了Sonar,再加上CI(Bamboo,Hudson),我们也获得了关于源质量和发展方向的良好历史。我之所以喜欢Sonar,是因为我们是CI堆栈中的一个中央工具,可以为我们完成此任务,并且我们可以轻松自定义每个项目的规则。