基礎篇--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));
    }
}

檢測結果如下:




學習使用中,後續使用過程中持續更新



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章