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