2014年2月7日 星期五

[研究] FindBugs 2.0.3 (Java靜態程式原始碼檢測工具)

[研究] FindBugs 2.0.3 (Java靜態程式原始碼檢測工具)

2014-02-07

FindBugs是一套專為Java程式碼除錯的工具,採LGPL授權,利用Bug Pattern進行程式碼的比對,自動檢查出程式碼可能發生的錯誤。它分析的對象是Java bytecode (編譯出來的.class)檔案,即時沒有原始碼也還是能使用。在軟體發布之前可用它做一次預防檢查,就有機會減少Bug在實際使用時才發生的機會。FindBugs可以用Command-line方式執行,也有提供GUI的介面,可搭配Apache Ant或Eclipse等開發工具,讓程式碼錯誤偵測的工作變成自動化流程的一部分。

官方網站網址
http://findbugs.sourceforge.net/

安裝步驟

取得FindBugs套件壓縮檔,解壓縮之後在有安裝JRE (Java Runtime Environment)和圖形介面的機器上執行findbugs (Windows則用findbugs.bat)就能開始使用。也可以加上參數-textui來使用文字介面。JRE可以到網址:
http://www.java.com/zh_TW/download/manual.jsp

先參考這篇安裝 JRE 或 JDK

[研究] Oracle Java 7 Update 51 快速安裝程式(CentOS 6.5 x64)
http://shaurong.blogspot.com/2014/01/oracle-java-7-update-51-centos-65-x64.html
http://forum.icst.org.tw/phpbb/viewtopic.php?f=44&t=80711

安裝 (CentOS 6.5 x86_64)

wget  http://jaist.dl.sourceforge.net/sourceforge/findbugs/findbugs-2.0.3.tar.gz
tar  -zxvf  findbugs-2.0.3.tar.gz
./findbugs-2.0.3/bin/findbugs

測試方法

我們拿JDK Source來測試
先去下面網址
http://java.sun.com/javase/downloads/?intcmp=1281
下載 jdk-7u51-linux-x64.rpm
安裝JDK,掃描JDK Source Code

[root@localhost ~]# rpm -Uvh jdk-7u51-linux-x64.rpm
[root@localhost ~]# cd /usr/java/jdk1.7.0_51/
[root@localhost ~]# unzip  src.zip  -d  src/

[root@localhost ~]#  ./findbugs-2.0.3/bin/findbugs  -textui  -html:plain.xsl  -output  jdk7u51.html  -sourcepath  /usr/java/jdk1.7.0_51/src/  -progress  /usr/java/jdk1.7.0_51/jre/lib/rt.jar

Scanning archives (1 / 1)
2 analysis passes to perform
Pass 1: Analyzing classes (19060 / 19060) - 100% complete
Pass 2: Analyzing classes (19060 / 19060) - 100% complete
Done with analysis
The following classes needed for analysis were missing:
  javax.crypto.SecretKey
  sun.nio.cs.ext.EUC_TW$Decoder
  sun.nio.cs.ext.EUC_TW$Encoder
  sun.nio.cs.ext.DoubleByteEncoder
  sun.nio.cs.ext.JIS_X_0201$Encoder
  javax.crypto.spec.OAEPParameterSpec
  javax.crypto.spec.PSource
  javax.crypto.spec.PSource$PSpecified
  javax.crypto.BadPaddingException
  javax.crypto.Cipher
  javax.crypto.spec.IvParameterSpec
  javax.crypto.spec.SecretKeySpec
  javax.crypto.SecretKeyFactory
  javax.crypto.Mac
  javax.crypto.spec.PBEKeySpec
  javax.crypto.spec.DESKeySpec
  com.oracle.jrockit.jfr.FlightRecorder
  sun.security.ssl.SSLSocketImpl
  javax.crypto.spec.DESedeKeySpec
  javax.crypto.IllegalBlockSizeException
  javax.crypto.KeyGenerator
  sun.nio.cs.ext.JIS_X_0208_Encoder
  sun.nio.cs.ext.JIS_X_0208_Decoder
  sun.nio.cs.ext.JIS_X_0201$Decoder
  sun.nio.cs.ext.JIS_X_0212_Encoder
  sun.nio.cs.ext.JIS_X_0212_Decoder
  javax.crypto.spec.PBEParameterSpec
  javax.crypto.spec.DHParameterSpec
  javax.crypto.CipherOutputStream
  javax.crypto.CipherInputStream
  javax.crypto.interfaces.DHPublicKey
  javax.crypto.spec.DHPublicKeySpec
  javax.crypto.interfaces.DHKey
  sun.security.ssl.Krb5Helper
  sun.nio.cs.ext.JIS_X_0201
  javax.crypto.NoSuchPaddingException
  sun.nio.cs.ext.EUC_TW
Warnings generated: 7661
Missing classes: 34

[root@localhost ~]#

掃描結果會標示出總共掃描的程式碼行數、可能存在問題的程式檔案位置和問題所在行數等資訊,建議的解決方法,並分成高和中的安全優先等級分類顯示出來。

報告在 jdk7u51.html檔案中。

(完)

[研究] FindBugs 1.5.3 (Java靜態程式原始碼檢測工具)
http://forum.icst.org.tw/phpbb/viewtopic.php?t=16300

[研究] Oracle Java 7 Update 51 快速安裝程式(CentOS 6.5 x64)
http://shaurong.blogspot.com/2014/01/oracle-java-7-update-51-centos-65-x64.html
http://forum.icst.org.tw/phpbb/viewtopic.php?f=44&t=80711

沒有留言:

張貼留言