基础篇--findbugs for idea


一、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));
    }
}

检测结果如下:




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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值