兩款靜態(tài)代碼檢測工具的對比

測試背景

使用工具:

  • 源傘科技Pinpoint
  • Sonarqube

測試項目:

  • 開源國產(chǎn)CMS軟件iBase4J(6000行代碼)

測試結(jié)果匯總

數(shù)據(jù)統(tǒng)計:

  • SonarQube結(jié)果:
代碼錯誤 安全隱患 風格質(zhì)量 總量
有效/總量 2/6 4/4 0/93 6/103
  • 源傘科技Pinpoint結(jié)果:
代碼錯誤 安全隱患 風格質(zhì)量 總量
有效/總量 2/2 19/19 6/7 27/28

我們將所有bug歸為以下3類:

分類 Sonarqube對應分類 Pinpoint對應分類
代碼錯誤 bug類 代碼崩潰、數(shù)值處理不當類
安全隱患 Vulnerability類 代碼安全類
風格質(zhì)量 Code Smell類 代碼風格、性能問題類

有效報告:我們定義有效報告為真實影響程序執(zhí)行并值得進一步檢查修復的問題報告。

測試細節(jié):

  1. 數(shù)量:

從數(shù)量看,Pinpoint結(jié)果確實明顯少于SonarQube。但是有效報告明顯少于Pinpoint.

  1. 安全隱患:

從質(zhì)量看,首先Pinpoint可以找到很多SonarQube無法發(fā)現(xiàn)的Vulnerability,也就是安全隱患(19比4),其中SonarQube找到的4個有效報告Pinpoint也能找到,Pinpoint找到15個SonarQube沒有找到的問題。

SonarQube的3個報告屬于同一類別,是在exception.printStackTrace()調(diào)用的時候,最好打log,不要直接打到屏幕上(這個被SonarQube歸類為安全問題), Pinpoint會提示這里會有stack trace信息泄露問題。如下圖所示:
Pinpoint:


在這里插入圖片描述

SonarQube:


在這里插入圖片描述

除了這些,Pinpoint還找到了如下所示的安全隱患
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

這些問題SonarQube都沒有報告。

  1. 代碼錯誤:

對于代碼錯誤,SonarQube找到了6個,而Pinpoint只找到2個問題,這兩個問題SonarQube也找到了,是有效報告。SonarQube歸類為bug的另外4個Pinpoint沒有報告的問題可以歸為兩類:


第一個是參數(shù)修改,這個是JAVA中很常見的應用方式,不太會引起程序錯誤,也會帶來大量誤報,所以Pinpoint沒有列為bug,如下圖:

在這里插入圖片描述

第二個是常量的,隱式類型轉(zhuǎn)換,也是正確的用法,如下圖:

在這里插入圖片描述

  1. 風格質(zhì)量:

對于風格質(zhì)量類問題,SonarQube共報了93個問題,而Pinpoint只報了7個,兩個工具的報告完全沒有交集。
SonarQube共報了93個問題,所有這些問題并不會產(chǎn)生實際代碼錯誤的問題,比如 if(a) {if(b){}} 要寫成 if(a&&b){} 這樣的問題,舉例如下:


在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

這些中的很多問題實際上可以修改一下,但是無論改與不改并不會實際影響程序的執(zhí)行。
Pinpoint報告的7個問題SonarQube都沒有報,這里包括幾類問題:


可能缺失的異常處理(這里mkdir可能失敗),如下圖:

在這里插入圖片描述

可能引起反序列化安全隱患的問題:

在這里插入圖片描述

無意義的包裝+拆裝組合,切實影響程序的執(zhí)行效率

在這里插入圖片描述

無意義的null-check:

在這里插入圖片描述

除了最后一個影響不大(Severity=Low)其他每一個都是要仔細檢查的,SonarQube雖然報了93個,但是這7個重要的都沒有報。

主要結(jié)論:

  1. 從報告總量上SonarQube比Pinpoint多報了很多(103/28),但是有效報告Pinpoint要明顯多于SonarQube(27/6)。
  2. 6個有效報告SonarQube和Pinpoint同時報出。Pinpoint有21個有效報告SonarQube無法檢出。
  3. SonarQube絕大多數(shù)是可有可無的修復,并不影響程序執(zhí)行,Pinpoint雖然只有28個報告,但是每個報告都是值得一看的(除了標記為low的那個無意義的null-check,那個雖然可以改一下,但是對程序執(zhí)行幾乎沒有影響)。
  4. Pinpoint和SonarQube關注點有區(qū)別,有3個有效報告SonarQube報printStackTrace應該打到log里而不是屏幕上,這個Pinpoint沒有歸類為bug, 同樣的位置Pinpoint報告的是stack trace信息泄露隱患。

為國產(chǎn)工具源傘科技Pinpoint打Call !!
為國產(chǎn)靜態(tài)檢測工具源傘科技Pinpoint打Call!

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容