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

纪念一下

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

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

添加依赖

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

Gradle

// 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中注解的单个类型和多个类型的语法:

Groovy

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

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

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


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

FunTester 热文精选


↙↙↙阅读原文可查看相关链接,并与作者交流