当前位置: 首页 > 面试题库 >

您将哪些代码分析工具用于Java项目?

容修贤
2023-03-14
问题内容

您在Java项目上使用哪些代码分析工具?

我对各种感兴趣

  • 静态代码分析工具(FindBugs,PMD和其他任何工具)
  • 代码覆盖率工具(Cobertura,Emma等)
  • 任何其他基于仪器的工具
  • 还有什么,如果我想念什么

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

如果仅以特定方式(例如,IDE插件或构建工具插件)提供工具,则该信息也值得注意。


问题答案:

对于静态分析工具,我经常使用CPD,PMD,FindBugs和Checkstyle。

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

我想指出的是,这些工具有时可以扩展到其“开箱即用”的规则集之外。不仅仅是因为它们是开源的,所以您可以重写它们。这些工具中的一些工具带有允许扩展它们的应用程序或“挂钩”。例如,PMD附带了“设计器”工具,使您可以创建新规则。另外,Checkstyle具有DescendantToken检查,该检查具有允许进行大量自定义的属性。

我将这些工具与基于Ant的build集成在一起。您可以点击链接查看我的评论配置。

除了简单地集成到构建中之外,我还发现以其他几种方式将工具配置为“集成”有帮助。即,报告生成和警告抑制的一致性。我想在讨论中添加这些方面(可能还应该带有“
static-
analysis”标签):人们如何配置这些工具以创建“统一”解决方案?(我在这里单独询问了这个问题)

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

/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需要它的类文件中。我完全限定FindBugs警告抑制,以避免与Java
@SuppressWarnings注释冲突:

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

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



 类似资料:
  • 问题内容: 想知道社区对各种可用的和免费的Java Profiler和性能分析工具有何看法。 问题答案: JProfiler对我们来说效果很好。 http://www.ej- technologies.com/products/jprofiler/overview.html

  • 问题内容: 我有一堆要重命名的类。其中一些名称较小,并且该名称在其他类名称中重复使用,我不希望该名称更改。其中大多数都存在于Python代码中,但是我们也有一些引用类名的XML代码。 简单的搜索和替换只能使我到目前为止。就我而言,我想将AdminAction重命名为AdminActionPlug,将AdminActionLogger重命名为AdminActionLoggerPlug,因此第一个的搜

  • 问题内容: 我想在Linux服务器上以剖析模式运行Java程序。 是否有任何可以在命令提示符下对Linux服务器上的Java程序进行概要分析的概要分析工具? 问题答案: 所有这些Java性能分析工具都可以在Linux中使用: 你的包 JProfiler HPROF(Java 5+) 杰拉特

  • 本文向大家介绍Java CPU性能分析工具代码实例,包括了Java CPU性能分析工具代码实例的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java CPU性能分析工具代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 背景 有处理过生产问题的同学基本都能遇到系统忽然缓慢,CPU突然飙升,甚至整个应用请求不可用。当出现这种情况下

  • 我有一个全新的TFS2018测试安装,并尝试运行一个maven构建与sonarqube分析。 有什么不对劲的暗示吗?现在有人知道如何直接向SonarQube提交问题了吗。我可以在以下位置查看问题:https://jira.sonarsource.com/browse/VSTS/?selectedTab=com.atlassian.jira.jira-项目插件:摘要面板 但我没有找到报告的方法。

  • 我想知道是否有一个工具,它将我的代码库和一个jar文件作为输入,它将在代码库中搜索这个jar文件正在使用的任何地方,并给我输出。不应使用Eclispe IDE。(变得微不足道)。我已经搜索了一些静态代码分析工具,如PMD、Checkstyle、findbugs。但他们都没有我需要的选择。你能给我推荐一个能完成上述任务的工具吗?