測試框架:使用SONAR分析代碼質量


介紹

Sonar是一個用於代碼質量管理的開源平台,用於管理Java源代碼的質量。通過插件機制,Sonar 可以集成不同的測試工具,代碼分析工具,以及持續集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通過不同的插件對這些結果進行再加工處理,通過量化的方式度量代碼質量的變化,從而可以方便地對不同規模和種類的工程進行代碼質量管理。同時 Sonar 還對大量的持續集成工具提供了接口支持,可以很方便地在持續集成中使用 Sonar。此外,Sonar 的插件還可以對 Java 以外的其他編程語言提供支持,對國際化以及報告文檔化也有良好的支持。 


SONAR安裝&運行

運行: 解壓后,根據平台運行bin下不同目錄下的啟動腳本。對於linux x86_64,運行bin/linux-x86-64/sonar.sh。
可用命令:
./sonar.sh { console | start | stop | restart | status | dump }

安裝插件:
將插件放置在${SONARHOME}/extensions/plugins下,重啟sonar后生效。注意版本號要匹配。本例中,SonarQ ube版本為4.4,所以選擇插件版本為1.8的。

  
SONAR + Maven分析代碼質量
1)設置sonar使用的數據庫信息。
本例設置 sonar 使用mysql數據庫存儲分析數據。保存設置后,執行restart使其生效。

${SONARHOME}/conf/sonar.properties:
   
   
   
           
  1. # Permissions to create tables, indices and triggers must be granted to JDBC user.
  2. # The schema must be created first.
  3. sonar.jdbc.username=root
  4. sonar.jdbc.password=root
  5. # Comment the following line to deactivate the default embedded database.
  6. #sonar.jdbc.url=jdbc:h2:tcp://localhost:9092/sonar
  7. #----- MySQL 5.x
  8. # Comment the embedded database and uncomment the following line to use MySQL
  9. sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

2)需要在Maven的settings.xml設置sonar信息。
其中 <sonar.host.url> http://localhost:9000 </sonar.host.url>指明了sonar服務器的地址。所以在執行maven命令的時候,< sonar.host.url>指明的服務器必須已運行起來。

${MAVEN_HOME}/conf/ settings.xml:
   
   
   
           
  1. <profiles>
  2.     <profile>
  3. <id>sonar</id>
  4. <properties>
  5. <sonar.jdbc.url>jdbc:mysql://192.168.198.128:3306/sonar</sonar.jdbc.url>
  6. <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
  7. <sonar.jdbc.username>root</sonar.jdbc.username>
  8. <sonar.jdbc.password>root</sonar.jdbc.password>
  9. <sonar.host.url>http://localhost:9000</sonar.host.url> <!-- Sonar服務器訪問地址 -->
  10. </properties>
  11.     </profile>
  12. </profiles>
  13. <activeProfiles>     <activeProfile>sonar</activeProfile>
  14. </activeProfiles>
3)執行mvn sonar:sonar命令進行代碼分析。
我們可以在Eclipse中,對一個標准maven工程執行sonar。說明:由於maven對sonar有很好的支持,會自動執行相應的腳本,所以 無需在pom中添加sonar說明
在執行maven進行sonar分析之前,必須確保sonar服務器已經處於運行狀態。本例中sonar服務器運行在localhost:9000上。

首先,執行sonar:sonar命令,最后得到輸出如下輸出。 如果輸出”BUILD SUCCESS“ 說明已經構建成功。

然后,我們可以在瀏覽器查看分析結果。

查看分析結果
對於使用sonar自帶服務器來說,在瀏覽器訪問:http://sonar_ip:9000,打開sonar結果頁面。可使用admin/admin賬號登錄進入。
1)home頁
下面是home頁,右邊PROJECTS頁面列出了所有的工程。點擊紅色框內的鏈接,可以查看詳細情況。


2)工程總面板視圖
Dashboard包含了很多信息,比如程序統計信息、問題統計信息、技術債務、代碼復雜度、單元測試覆蓋度等。


3)Hotspots熱點區
在熱點區,可以查看比較主要(hot)的信息。


4)問題視圖
點擊左側導航樹的“問題”,打開問題視圖頁。通過點擊問題數,如下紅框所示,可以查看具體問題。


點擊問題數后,進入具體問題頁。SonarQube允許管理員對問題進行重新確認,比如可以認為一個打開的問題是誤判的。


下面是認為一個問題是誤判后的情況。


在問題頁面,可以通過“狀態”搜索問題。下面是搜索“誤判”問題的結果。


5)技術債務
這里列出了修復問題所需要的時間,所謂技術債務。出來混總要還的,遺留的問題越多,技術債務越大。


6)問題明細
這里列出問題明細,包括問題嚴重級別,對應的問題數量,問題的描述。


結合Jenkins
可以將SONAR服務器放置在任意master或者slave節點上,在進行sonar分析時,必須在maven的conf/settings.xml中配置sonar服務器信息。然后就可以在jenkins中進行sonar分析了。
有兩種方法使jenkins與sonar結合:一種就是上面介紹的通過maven(jenkins -maven - sonar),另外一種是直接在jenkins中調用sonar。

參考:
Jenkins + sonar持續代碼審查: http://www.cnblogs.com/gao241/p/3190701.html






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM