基础篇--findbugs for idea

原创 2016年08月31日 15:17:38


一、FindBugs简介(盗取百度知道)

FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式(请参阅 参考资料)。图 1 显示了分析一个匿名项目的结果(为防止可怕的犯罪,这里不给出它的名字):
在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。)。如果你拥有这些.class档对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。
选定了以上各项后,便可以开始检测了。检测的过程可能会花好几分钟,具体视工程的规模而定。检测完毕可生成一份详细的报告,藉由这份报告,可以发现许多代码中间潜在的bug。比较典型的,如引用了空指针(null pointer dereference), 特定的资源(db connection)未关闭,等等。如果用人工检查的方式,这些bug可能很难才会被发现,或许永远也无法发现,直到运行时发作…当除掉了这些典型的(classic) bug后,可以确信的是,我们的系统稳定度将会上一个新的台阶。

二、安装findbugs

1)选择idea配置面板,我以mac为例,windows是打开settings


2)选择插件仓库




3)输入插件名称,install即可,因为我已安装所以显示restart



4)如果安装或下载失败,也可以自己进行下载插件后安装,选择你要的版本

官网地址:https://plugins.jetbrains.com/plugin/3847?pr=idea

但是需要注意你的idea版本,官网有特别说明







三、使用小测

我也刚开始使用,功能还在探索之中,以下是我以前写的一个测试用例,安装完成了先来搞一下看看

package com.yeepay.g3.app.watch.Array;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;

/**
 * 类名称: ArrayList <br>
 * 类描述: <br>
 *
 * @author: hua.jin
 * @since: 16/8/18 下午3:15
 * @version: 1.0.0
 */
public class ArrayListMemo {

    public static void main(String[] args) throws IOException {
        Runtime run = Runtime.getRuntime();
        run.gc();
        System.out.println("time: " + (new Date()));
        // 获取开始时内存使用量
        long startMem = run.totalMemory() - run.freeMemory();
        System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + startMem);


        ArrayList list = new ArrayList();
        int size = 10000000;
        int i = 0;
        try {
            list.ensureCapacity(size);// 是否扩容
            for (; i < size; i++) {
                list.add(i);
            }
        } catch (Throwable e) {
            e.printStackTrace();
            System.out.println("i= " + i);
        }

        System.out.println("time: " + (new Date()));
        long endMem = run.totalMemory() - run.freeMemory();
        System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + endMem);
        System.out.println("memory difference:" + (endMem - startMem));
    }
}

1)选中你要检测类进行右键操作



2)确认检测



3)弹出检测结果



4)信息内容

a) compiler issues,编译器问题。感觉就是一些警告信息,待确认的信息

 因为我在创建list的时候没有设置参数类型,但是添加信息确是数字

ArrayList list = new ArrayList();



b) javadoc 问题暂时没出有用信息


c) probable bugs 重点来了

由于我只是测试arraylist的扩容问题,所以并未对list的结果有任何应用,所以提示bug如下

contents of collection 'list' are updated,but never queried at line 26




 四、bug修复如下

package com.yeepay.g3.app.watch.Array;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;

/**
 * 类名称: ArrayList <br>
 * 类描述: <br>
 *
 * @author: hua.jin
 * @since: 16/8/18 下午3:15
 * @version: 1.0.0
 */
public class ArrayListMemo {

    public static void main(String[] args) throws IOException {
        Runtime run = Runtime.getRuntime();
        run.gc();
        System.out.println("time: " + (new Date()));
        // 获取开始时内存使用量
        long startMem = run.totalMemory() - run.freeMemory();
        System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + startMem);


<span style="color:#FF0000;">        ArrayList<Integer> list = new ArrayList<Integer>();</span>// 添加类型
        int size = 10000000;
        int i = 0;
        try {
            list.ensureCapacity(size);// 是否扩容
            for (; i < size; i++) {
                list.add(i);
            }
        } catch (Throwable e) {
            e.printStackTrace();
            System.out.println("i= " + i);
        }
<span style="color:#FF0000;">        System.out.println("size: " + list.size());</span>// 修改信息之后引用输出
        System.out.println("time: " + (new Date()));
        long endMem = run.totalMemory() - run.freeMemory();
        System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + endMem);
        System.out.println("memory difference:" + (endMem - startMem));
    }
}

检测结果如下:




学习使用中,后续使用过程中持续更新



项目实战(连载):基于Angular2+Mongodb+Node技术实现的多用户博客系统教程(3)

本系统采用的是当下最流行的Mongodb 3.x、Express 4.x、Nodejs 6.x 与Angularjs 2.x 结合的MEAN架构开发。 可谓是一个“麻雀虽小,五脏俱全”的小项目,该项目...
  • fwyTech2010
  • fwyTech2010
  • 2017年02月02日 22:24
  • 397

【discuzX2】/source/function/function_core.php通用核心函数库文件分析

  • yanhui_wei
  • yanhui_wei
  • 2013年08月09日 10:55
  • 17643

IDEA安装FindBugs插件

下载 https://plugins.jetbrains.com/plugin/?id=3847 , 下载最新版本的findbugs压缩包 将下载的插件添加到IDEA 打开IDEA的...
  • ch717828
  • ch717828
  • 2015年09月24日 15:35
  • 6819

IntelliJ IDEA 安装FindBugs以及应用

众所周知,项目越来越大,开发人员越来越多,我们的代码审查工作会变得越来越复杂,对代码质量控制难度也与日俱增,尽管经验丰富的程序员能审查能检查出大部分问题,但也得耗费巨大的人力成本,并且大多数大家工作都...
  • oMiconlee
  • oMiconlee
  • 2016年11月30日 12:30
  • 1772

国外基础几何算法答与问

非常强大,很多好东西!!! From: orourke@cs.smith.edu (Joseph O'Rourke) Newsgroups: comp.graphics.algorithms ...
  • zhw_giser
  • zhw_giser
  • 2013年08月14日 11:26
  • 2682

findbugs错误总结

本篇是从别人那找到的,为了让我回头查看findbugs错误怎么解决而保存的 记得把findbugs尽量清零哦。 1.       NP_NULL_ON_SOME_PATH_EXCEPTION   ...
  • UESTCAA
  • UESTCAA
  • 2016年03月01日 10:19
  • 6210

IntelliJ IDEA 装配FindBugs以及应用

IntelliJ IDEA 安装FindBugs以及应用        众所周知,项目越来越大,开发人员越来越多,我们的代码审查工作会变得越来越复杂,对代码质量控制难度也与日俱增,尽管经验丰...
  • football98
  • football98
  • 2016年12月29日 09:17
  • 2952

使用FindBugs-IDEA插件找到代码中潜在的问题

我们通常都会在APP上线之后,发现各种错误,尤其是空指针异常,这些错误对于用户体验来说是非常不好的,但其实大部分的问题,我们都能够提前发现.在编写代码的过程中,可能不会时时刻刻记得检查空的引用,还有删...
  • Fancy_xty
  • Fancy_xty
  • 2016年06月20日 09:32
  • 22166

图像处理与计算机视觉资源汇总——论文+代码+教材+视频等等

历时一个多月,终于用业余时间把这些资料整理出来了,总算了却了一块心病,也不至于再看着一堆资料发愁了。以后可能会有些小修小补,但不会有太大的变化了。万里长征走完了第一步,剩下的就是理解和消化了。借新浪i...
  • Real_Myth
  • Real_Myth
  • 2016年05月04日 18:13
  • 2303

Python常见问题(2):编程问题 Programming FAQ

Contents Programming FAQ General Questions Is there a source code level debugger with bre...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年05月13日 12:31
  • 1070
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基础篇--findbugs for idea
举报原因:
原因补充:

(最多只允许输入30个字)