簡稱sonar,這裏僅針對sonar6.0。
一、sonar特性
1)、sonar是一個開源、免費的代碼質量管理平臺,官方另有收費版本,提供更多的功能及支持。
2)、支持各種語言,含主流的c、c++、object c、swift、java、php、c#、js、html、css、lua等,但c、c++、swift、lua等需要收費或授權,不支持 python。
3)、支持插件開發,官方及第三方插件較爲豐富,社區較爲發達,版本更新較快,側面反映了sonar程序遺留問題較多。
4)、能做簡單的代碼複審,能對問題進行分配及郵件提醒。
5)、sonar內部主要使用restapi作爲數據交互方式,具體可以通過http://sonarip:sonarport/web_api查看,便於二次開發。
二、sonar目標
三、sonar工作原理
四、sonar架構設計
五、sonar幫助站點
#官方文檔
http://docs.sonarqube.org/display/SONAR/Documentation
#github主頁
https://github.com/SonarQubeCommunity
#google+地址
https://groups.google.com/forum/#!forum/sonarqube
#stackoverflow地址
http://stackoverflow.com/questions/tagged/sonarqube
六、項目實踐
公司主要採用java、c#開發,少數python、c\c++\objectc項目,所以sonar能滿足大部分需求。
我們對sonar的需求是:希望sonar能給我提供一個粗略的項目代碼質量報表,含違反規則數量、單測數量、單測覆蓋度及代碼重複度等。
1)、java採用規則
findbug【全部規則】+google-checkstyle+部分pmd規則。
我們認爲findbugs大部分規則都是有用的,確實能起到減少bug或提高代碼質量的目的,所以findbugs規則幾乎全部採用,少數特殊規則,根據實際情況做刪減。
google-checkstyle大部分規則都是符合實際的,但是如縮進等還是修改爲公司主流ide:idea的默認風格。
pmd中有些規則稍顯過時,所以我們選取部分規則。
2)、c#採用規則
fxcop
規則採用逐步累加方式,我們要求各項目組在每次累加之前,必須逐步較少觸發的規則,並逐步提高單測數量和單元測試覆蓋率。
七、存在的問題
1)、免費版sonarlint for idea存在服務器違反規則與idea中同步下來的違反規則數量不一致;sonar for vs,只支持vs2015,且無法同步違反規則到vs本地編輯環境中。
2)、c#,不支持方法級別的圈複雜度統計。
3)、c#覆蓋度統計,我們使用opencover,使用vs自帶的CodeCoverage,在項目結構特別複雜及fake時,會發生一些莫名的錯誤。
八、成果
項目信息:
總體信息: