为Java设置静态代码分析

介绍
在本文中,我们将介绍Java项目的静态代码分析的基本设置。

为什么静态代码分析很重要?它有助于我们确保整体代码质量,修复开发早期阶段的错误,并确保每个开发人员在编写代码时使用相同的编码标准。

我们将使用三种基本工具进行静态代码分析:CheckStyle,Findbugs,PMD。

的CheckStyle
CheckStyle是一个工具,可以帮助程序员编写符合已经商定的编码标准的代码。它会自动检查代码是否符合项目中使用的编码标准。

FindBugs的
马里兰大学的优秀人才为我们建立了这个神奇的工具。它基本上对我们来说当然是在我们的代码中发现错误。FindBugs分析我们的代码并生成一个报告,为我们提供一个可能导致程序行为错误的所有错误的列表。可以检测到的错误的一个很好的例子是无限循环,未使用的变量,安全性,线程问题等等。

PMD
PMD是我们的静态代码分析工具箱中另一个有用的工具。除了报告许多编码问题(例如可能的内存泄漏)之外,如果我们的变量被正确命名并且我们的方法包含超过指定行数,PMD可以检查我们的代码是否被正确评论。PMD具有高度可配置性,最新版本与Lombok注释相得益彰。以前,我们需要定义自定义排除规则,以便PMD与Lombok一起玩得很好。

复制/粘贴检测器(CPD)是PMD的集成部分,用于检测源代码中的重复代码。

设置静态代码分析
我们将使用Gradle作为构建工具。Gradle已经有了一组我们将用于静态代码分析的插件。

静态分析设置文件将驻留在 ./gradle/static-code-analysis文件夹中。我们的每个静态分析工具都有自己的专用文件夹,我们将为每个工具保存其他配置文件。最后,我们将使用staticCodeAnalysis.gradle聚合所有静态代码分析设置。它将包含为我们的项目运行静态代码分析所需的所有配置设置。

buildscript {
存储库 {
mavenCentral()
}
依赖 {
classpath’de.aaschmid :gradle-cpd-plugin:1.1’
}
}
申请 插件: ‘checkstyle’
申请 插件: ‘findbugs’
申请 插件: ‘pmd’
申请 插件: de。aaschmid。gradle。插件。cpd。CpdPlugin

好吧,让我们跳转到设置静态代码分析。

一旦插件包含在构建脚本中,我们就可以开始配置每个插件。首先,我们将配置CheckStyle插件。

设置CheckStyle
对于CheckStyle,我们将设置ignoreFailures标志,toolVersion和configFile,它将指向配置文件的位置。作为配置文件的基础,我们将使用Google Code Style设置。配置基本相同 - 唯一的区别是我们将使用四个空格而不是两个空格缩进。而且,就是这样。CheckStyle不需要做任何事情。我们接下来设置FindBugs:

checkstyle {
toolVersion = ‘8.12’
ignoreFailures = false
configFile = file(“$ { rootGradleDir } /static-code-analysis/checkstyle/checkstyle.xml”)
}

我们明确设置插件不要忽略失败,即ignoreFailures标志设置为false。这基本上意味着如果我们在静态代码分析检查期间遇到任何问题,我们的项目构建将失败。如果你考虑一下,这很有道理。如果我们在代码库中遇到任何问题,我们的CI / CD管道应该会失败。由于它编译失败,单元测试失败,代码分析,只要我们遇到问题,我们就不应该继续使用我们的管道。

设置FindBugs
在大多数情况下,我们应该只指定toolVersion和ignoreFailures。我们可以在这里设置其他选项,例如指定要运行哪些错误检测器,或者包含/排除将在我们的代码库中检查的文件列表。对于我们的示例,我们将在此处保留默认值:将运行所有默认错误检测器,并且我们不会从FindBugs检测中排除任何文件。

findbugs {
toolVersion = ‘3.0.1’
ignoreFailures = false
}

设置PMD
对于PMD,除了toolVersion和ignoreFailures,我们要设置规则集为我们的代码分析。我们可以通过两种方式设置规则集。我们可以使用ruleSets数组直接在PMD插件配置中指定它们,或者我们可以提取规则集以分离XML文件并使用ruleSetFiles配置参数引用文件。我们将选择后一种选项,因为它更具描述性,允许我们为默认规则集类别提供排除。对于codestyle类别,我们排除 DefaultPackage 和 OnlyOneReturn 规则。您可以查看ruleset.xml以进行完整设置。

pmd {
toolVersion = ‘6.7.0’
ignoreFailures = false
ruleSetFiles = files(“$ { rootGradleDir } /static-code-analysis/pmd/ruleset.xml”)
ruleSets = []
rulePriority = 3
}

设置CPD
对于复制/粘贴错误检测,我们需要配置CPD插件。首先,让我们设置minimumTokenCount为100。这意味着如果插件在不同的位置找到大约5到10行相同的代码,则插件将检测到重复的代码错误。如果只匹配四行代码,则不会检测到错误。一个有用的选项 - 特别是如果你使用框架 - 是设置ignoreAnnotations为true。它将允许我们忽略“误报”并忽略类或方法具有相同的5- 6行注释的情况。最后,我们将通过设置xml.enabled为启用并生成XML true。

cpd {
language = ‘java’
toolVersion = ‘6.0.0’
minimumTokenCount = 100 //大约5-10行
}
cpdCheck {
报道 {
文字。enabled = false
xml。enabled = true
}
ignoreAnnotations = true
source = sourceSets。主要的。allJava
}
查看 原始

对于剩余的静态分析报告插件,我们将支持生成HTML报告而不是XML报告。

任务。withType(Checkstyle){
报道 {
xml。启用 错误
HTML。启用 true
}
}
任务。withType(FindBugs){
报道 {
xml。启用 错误
HTML。启用 true
}
}
任务。withType(Pmd){
报道 {
xml。启用 错误
HTML。启用 true
}
}

大!我们完成了静态分析代码配置。现在,我们只需要包含staticCodeAnalysis.gradle在Gradle构建脚本中:

申请 自: “$ { rootGradleDir } /staticCodeAnalysis.gradle”

运行静态代码分析
静态代码分析插件将使用与运行Gradle相同的Java版本运行。

每个插件都会将自己的依赖项添加到Java插件check任务中(例如pmdMain,cpdMain)。每当我们运行时 ./gradlew clean build,check都会触发内部任务,并为我们的项目运行静态分析步骤。如果任何代码分析步骤失败,我们的构建也将失败。将生成静态代码分析报告 ./build/reports。

如果在某些情况下我们需要“松散”指定的静态代码规则,我们总是可以通过使用@SuppressWarnings注释来抑制静态分析错误。为了抑制类中有太多方法的警告,我们可以放在@SuppressWargning(“PMD.TooManyMethods”)给定的类上。

我们建议对测试类保持静态分析“on”。我们应该始终将测试视为项目的一个组成部分。测试代码应符合我们在整个项目中使用的相同样式/规则。

概要
在这篇文章中,我们简要介绍了如何为Java项目设置静态代码分析。希望您能够很好地了解如何在项目中使用它,它如何帮助您提高整体代码质量,并在项目开发的早期阶段发现错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值