1. 程式人生 > >【程式碼質量管理工具】——sonar

【程式碼質量管理工具】——sonar

   【前言】

   bug越改越多,程式一換資料就崩,這就是目前我們系統的一個現狀。在這之前,進行過前後臺程式碼規範整理,程式碼判空等工作,但這是人工檢測的,有點慢,效率也比較低。當重新匯入資料之後,模組大多都起不來了。於是乎,忍無可忍,我們就用了強大的程式碼質量工具——sonar來自動檢測我們的程式碼,因為我們要寫更安全,更優雅的程式碼。

   【sonar簡介】

    sonar(SonarQube)是一個開源平臺,用於管理原始碼的質量,它不僅是一個質量資料報告工具,更是程式碼質量管理平臺。它通過外掛的形式來管理程式碼,它支援的語言包括:Java,PHP,C#,C等。

   【主要特點】

   sonar可以從以下七個維度來檢測程式碼質量:

   1、不遵循程式碼標準

    sonar可以通過PMD,CheckStyle,Findbugs等程式碼規則檢測工具規範程式碼的編寫;

   2、潛在的缺陷

    sonar可以通過PMD,CheckStyle,Findbugs等程式碼規則檢測工具檢測出潛在的缺陷;

   3、糟糕的程式碼複雜度分佈

    檔案、類、方法等,如果複雜度過高將難以改變,這使得開發熱女難以理解它們,且如果沒有自動化的單元測試,對於程式中的任何元件的改變都將可能導致需要全面的迴歸測試;

   4、重複

    顯然程式中包含大量複製貼上的程式碼質量低下的,sonar可以展示原始碼中重複嚴重的地方;

   5、註釋不足或者過多

    沒有註釋將使程式碼可讀性變差,特別是當不可避免地出現人員變動時,程式的可讀性將大幅度下降;

   6、缺乏單元測試

    sonar可以很方便地統計並展示單元測試覆蓋率;

   7、糟糕的設計

   通過sonar可以找出迴圈,展示包與包、類與類之間的相互依賴關係,可以展示自定義的架構規則。通過sonar可以管理第三方的jar包,可以利用LCOM4檢測單個任務規則的應用秦高,檢測耦合。

   【sonar使用】

    由於架構師已經給咱們裝好了sonarQube,咱們只需在Maven的配置檔案的profiles節點中新增一個sonar的profile節點,就可以直接在專案中執行Maven build命令——clean verify soanr:sonar使用了,執行完了之後,在伺服器上就可以看到我們測試的專案了:

   profile節點程式碼:

<profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>
                  http://192.168.22.220:9000
                </sonar.host.url>
            </properties>
        </profile>

   測試完成的程式碼:

 

   A為最高級別,如果這幾項全是A的話,那說明你寫的程式碼真的是太棒了!!!

   點開每個專案,檢視詳情:

   1、bug,duplicatinos等列表:

    

   2、點開具體的某一項,顯示所有的bug,或者有問題的地方。再繼續往下點,就會看到我們有問題的程式碼了,也會給出我們相應的解決方案。

  【總結】

   通過兩天的改bug,其實也就是改成規範的程式碼,說實在的,在改之前,我還不知道規範的程式碼原來應該是這樣寫的,雖然之前那樣寫也能夠得到想要的結果,但是不是很安全,有潛在的缺陷。

   這兩天,沒學啥技術,但是也漲了不少知識,我的收穫總體來說主要有以下三點:

   1、之前咱們看到的程式碼亂,寫法不規範,重複性高等。這些程式碼sonar都可以檢測到,並給出我們正確的解決方案,我們在解決問題的同時,也知道了規範性的程式碼應該如何寫。


   2、sonarqube程式碼質量管理平臺,是全英的,在解決問題的同時,我們又學到了英語。


   3、在這樣反覆的測試,修改,再測試的過程中,能夠提高我們編寫程式碼以及閱讀程式碼的能力。

今天要分享的都分享完了,接下來,繼續改我的bug,fighting~