SpotBugs注解SuppressWarnings在Java&Groovy中的应用

2020-12-01 11:27:48 浏览数 (1)

在最近做Java服务端代码静态测试过程中,目前采取的方案如下:

  • 测试拉取代码到本地。使用IDE:Intellij,插件:SpotBugs(无增强插件)进行静态测试,更新BUG信息,维护文档和代码中的注解。
  • 开发修复禅道BUG
  • QA拉取修复代码分支,与本地分支(含有抑制注解)进行合并,然后进行BUG回归。
  • 循环以上过程,直至该分支代码零BUG

纪念一下

我在自己的项目(Java&Groovy)中实验通过,分享一下在两种语言的实践经验。

总体来讲,Java还是很方便的,Intellij自带的修复提示基本满足需求,Groovy代码验证误报的较多,使用Intellij修复提醒功能时,几乎是瘫痪状态。

  • 关于错误类型及其详解,网上很多人都写了,我建议大家去看官网文档:「https://spotbugs.readthedocs.io/en/stable/bugDescriptions.html」,如果遇到有趣的BUG,我也会及时更新分享。

添加依赖

使用SpotBugs注解SuppressWarnings需要添加依赖。

Gradle

代码语言:javascript复制
// https://mvnrepository.com/artifact/com.google.code.findbugs/annotations
compile group: 'com.google.code.findbugs', name: 'annotations', version: '3.0.1'

Maven

<!-- https://mvnrepository.com/artifact/com.google.code.findbugs/annotations --> <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>annotations</artifactId> <version>3.0.1</version> </dependency>

Java

首先看一个BUG,会在源码的位置看到一个小虫子(颜色代表不同级别),代码下面会出现波浪线提醒。

点击小虫子图标或者使用Intellij快捷提示都可以见到下面的修复选项。

一共四个选项,两个条件:clearsuppress。前者是清楚这个错误,但只是清除单次测试结果,不影响再次扫描。后者是添加注解uppressFBWarnings("DM_DEFAULT_ENCODING"),引号内容是错误类型,具体解释在SpotBugs面板的右侧,内容跟官网文档一致。

使用@SuppressFBWarnings("DM_DEFAULT_ENCODING")注解有三个地方:1、针对某个变量(成员变量或者类变量);2、方法;3、类(据我测试这个应该范围是生成的classes文件,内部类啥的应该都会起作用)。

注解后面String字符串是错误类型,下面是Java中注解的单个类型和多个类型的语法:

  • 单个:@SuppressFBWarnings("DM_DEFAULT_ENCODING")或者@SuppressFBWarnings(value = "ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD")
  • 多个@SuppressFBWarnings({"MS_SHOULD_BE_FINAL","NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE", "NS_DANGEROUS_NON_SHORT_CIRCUIT"})

Groovy

功能操作都是一样的,但是Groovy语言环境中,不能自动添加@SuppressFBWarnings("DM_DEFAULT_ENCODING"),需要手动添加,着实非常不爽,而且误报率较高。

在注解的语法上有些许的区别(多个错误类型),如下:

  • 单个:@SuppressFBWarnings("DM_DEFAULT_ENCODING")或者@SuppressFBWarnings(value = "ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD")
  • 多个:@SuppressFBWarnings(["HE_EQUALS_USE_HASHCODE", "EQ_UNUSUAL", "MS_SHOULD_BE_FINAL"])

这是因为JavaGroovy对于定义数组语法的差异导致的,Java使用{}Groovy使用[]


公众号「FunTester」,原创分享爱好者,腾讯云、开源中国和掘金社区首页推荐,知乎八级强者,欢迎关注。

0 人点赞