qt自带静态代码检测工具_两款静态代码检测工具的对比
測試背景
使用工具:
- 源傘科技Pinpoint
- Sonarqube
測試項目:
- 開源國產CMS軟件iBase4J(6000行代碼)
測試結果匯總
數據統計:
- SonarQube結果:
代碼錯誤 安全隱患 風格質量 總量
有效/總量 2/6 4/4 0/93 6/103
- 源傘科技Pinpoint結果:
代碼錯誤 安全隱患 風格質量 總量
有效/總量 2/2 19/19 6/7 27/28
有效報告:我們定義有效報告為真實影響程序執行并值得進一步檢查修復的問題報告。
測試細節:
從數量看,Pinpoint結果確實明顯少于SonarQube。但是有效報告明顯少于Pinpoint.
2. 安全隱患:
從質量看,首先Pinpoint可以找到很多SonarQube無法發現的Vulnerability,也就是安全隱患(19比4),其中SonarQube找到的4個有效報告Pinpoint也能找到,Pinpoint找到15個SonarQube沒有找到的問題。
SonarQube的3個報告屬于同一類別,是在exception.printStackTrace()調用的時候,最好打log,不要直接打到屏幕上(這個被SonarQube歸類為安全問題), Pinpoint會提示這里會有stack trace信息泄露問題。如下圖所示:
Pinpoint:
SonarQube:
除了這些,Pinpoint還找到了如下所示的安全隱患
這些問題SonarQube都沒有報告。
3. 代碼錯誤:
對于代碼錯誤,SonarQube找到了6個,而Pinpoint只找到2個問題,這兩個問題SonarQube也找到了,是有效報告。SonarQube歸類為bug的另外4個Pinpoint沒有報告的問題可以歸為兩類:
第一個是參數修改,這個是JAVA中很常見的應用方式,不太會引起程序錯誤,也會帶來大量誤報,所以Pinpoint沒有列為bug,如下圖:
第二個是常量的,隱式類型轉換,也是正確的用法,如下圖:
4. 質量風格
對于風格質量類問題,SonarQube共報了93個問題,而Pinpoint只報了7個,兩個工具的報告完全沒有交集。SonarQube共報了93個問題,所有這些問題并不會產生實際代碼錯誤的問題,比如 if(a) {if(b){}} 要寫成 if(a&&b){} 這樣的問題,舉例如下:
這些中的很多問題實際上可以修改一下,但是無論改與不改并不會實際影響程序的執行。Pinpoint報告的7個問題SonarQube都沒有報,這里包括幾類問題:
可能缺失的異常處理(這里mkdir可能失敗),如下圖:
可能引起反序列化安全隱患的問題:
無意義的包裝+拆裝組合,切實影響程序的執行效率
無意義的null-check:
除了最后一個影響不大(Severity=Low)其他每一個都是要仔細檢查的,SonarQube雖然報了93個,但是這7個重要的都沒有報。
主要結論:
為國產工具源傘科技Pinpoint打Call !!
總結
以上是生活随笔為你收集整理的qt自带静态代码检测工具_两款静态代码检测工具的对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [云炬ThinkPython阅读笔记]3
- 下一篇: [云炬ThinkPython阅读笔记]3