findbugs使用_Intellij IDEA findbugs 插件 下载、安装、使用详解(2017年实测mac和windows都可用)…

  • Post author:
  • Post category:其他


首先我下载的版本是 FindBugs-IDEA-1.0.1 ,然后我会在文中提供(FindBugs-IDEA-1.0.1.zip)下载资源,我在安装过程中的问题如下:

1.在编辑器里面始终下载不下来,每次都是一半的时候就失败啦。最后就去网上下载zip文件本地安装。

下面就是下载安装使用详情

先是在这个编辑器里面怎么安装这个插件的示范。

5c4e378048d02a9b3c15ab9a3ab51238.png

0da1ab2703aa66f22aceb30833e92f8c.png

你也可以自己去下载最新的,下载链接页面的网址:

https://plugins.jetbrains.com/plugin/3847-findbugs-idea

2840664b05c507a7384c071fe600c580.png

df234b96e7f6f4afe3ce60ce66b3b3b0.png

这个是安装完之后,重启之后的截图,看到他就在下面,可以使用了。

6bfd40cf5a890adee6a1f7639f4077f5.png


下面是实际在项目里面使用的情况

6151411435b8106d098478bddb4aac84.png


简单说明如下:

自己鼠标移动到右边的所有图表,看看每个图标都是什么意思。我就大概说一下。

第一竖列:红色图标是分析当前的这个文件。

下面是分析是某一个类,鼠标所在的那个类

再往下是某个包,某个模块,整个项目,所有修改过的文件,等等吧,看意思都知道大概是啥意思。

第二数列:则是控制分析结果的展示情况,自己点点试试就好

下面就整个实际找到的代码的问题。我单独分析我的某个service文件,看代码里面的问题。


如下图所示:

7719445c018c6f3bb40d4e54040e9a80.png

4efe2030be7a554862c78dfc665accd0.png

看他的意思就是说我代码里面把这个声明为静态属性,SimpleDateFormat是线程不安全的。在多线程使用的时候,可能就会有意想不到的问题。所以,他就找到个问题。然后,咱就改。

8f7f0adb08d0cb769b2a8687a2615b2a.png

这么改完之后,再分析以下 这个service文件。看看什么情况,但是在这之前,可能你有疑惑,怎么把代码里面这些黄色的提示给关掉。

ec52618ee0c0828653d8d10b3a3ead29.png

点这个差号就 可以啦,代码就恢复成原来的样子啦。

下面看再次分析的结果。

64a5a22dda6e06180279320b43d65438.png

然后就看到,代码就没有任何提示了,这样的代码只是说,减少bug的发生概率。但是不是绝对的。起码减少部分测试团队的时间。

也不是说让你上来,直接就是对整个项目分析以下。这也不是你能干的,但是,可以这么要求自己,自己写完一个功能模块啥的,也就几个文件,每次提交代码之前,你对自己的代码进行一次分析,把能改的改了,这样,长此以往,进步那是大大的。当然,代码质量也是极好的。

但是,好习惯是最难养成的,一旦养成了,那就获益匪浅。下面是我摘自其他地方的对上面分析出来不同类别的问题的简单描述。

1->Bad pratice编程的坏习惯

主要是命名问题,比如类名最好以大写开头,字符串不要使用等号不等号进行比较,可能会有异常最好用try-catch包裹的代码,方法有返回值但被忽略等等,这些如果不想改可以直接忽略.

2->Malicious code vulnerability 恶意代码漏洞

听起来很吓人呀,主要是一些属性直接使用public让别的类来获取,建议改为private并为其提供get/set方法. 还有一些public的静态字段,可能会被别的包获取之类的. 这些也需要根据项目具体情况来,个人意见,在有的不重要类,有时直接公开使用属性,可能更为便捷.如果你认为这些不需要修改,完全可以忽略.

3->Dodgy code 糟糕的代码

·比如一个double/float被强制转换成int/long可能会导致精度损失,一些接近零的浮点数会被直接截断,事实上我们应该保留.

这里顺便提一点,这两天看了《app研发录》,在规范代码,尽量规避错误这方面我也有了一些收获.

在类型转换的时候,我们应该为类型转换提供一个安全的转换方法,因为我们永远不会知道,我们的app在用户手里会发生什么,所以我们要尽可能的去减少这种发生错误的可能.

·比如使用switch的时候没有提供default。

·多余的空检查,就是不可能为空的值,增加了不为空判断,这是没有必要的。属于代码冗余

·不安全的类型转换等等。

4->performance 性能

主要是一些无用的代码,比如声明了没有用到的属性等等

5->correctness 代码的正确性 这一项应该算是最重要的了

主要是没有对变量进行不为空判定,在特殊情况可能发生空指针异常.

475276cc052b2e9651baf23c4c909d23.png
扫码关注扫码关注
ff05029fc9f294ea88b16703658f3be8.png