sonar报表阅读

如何看懂 Sonar 報表

Sonar 主要還是透過maven的一些plugins PMD , CPD , findbugs , checkstyle , cobertura(coverage ) , JavaNCSS ,來對java程式碼做靜態分析(static analysis),然後用比較美觀的方式呈現將各種報表整合在一起。想要看懂Sonar 的分析結果,就得先了解它做了那些方面的分析。所有相關分析的術語跟分析方式的概要說明在這裡

Dashboard

Dashboard看的是統計跟平均值,真正有用的資訊,應該是drilldown進去看到細節會比較有用

Dashboard中常會看到向上或向下的三角型,通常會有灰、紅、綠三色,那個叫Tendency ,是指跟前一次build出來的results比較的結果.

Rules Compliance

sonar报表阅读_第1张图片

左邊的圖是程式五項能力指標

Usa. Usability可用性

Eff. Efficiency 效率

Mai. Maintainabilitiy 維護性

Por. Portability 可攜性

Rel. Reliability 可靠性

愈高愈好,最好能五個指標都是 100%

右邊的Voilations是程式經過checkstyle, PDM, findbugs,….這些rule檢查後的不通過數量,嚴重性依上而下為

Blocker阻塞

Critical嚴重

Major主要

Minor次要

Info資訊

檢查不通過的數量當然是愈少愈好,理想值是都為0

建議盡可能的把所有的check rules打開,然後再把不適用的rule做調整或停用

Code coverage

sonar报表阅读_第2张图片

程式的單元測試覆蓋率

line converage 行覆蓋率 : 100行程式碼,有95被測到,就算95%

branch coverage 分支覆蓋率 : if - elseif - else 如果只測到if內的code就只有33%,若測到 if - elseif 就是66%if - elseif - else全測到就是100%

tests test class數量

skipped略過沒測的數量

另外常見的還有

class converage : 類別覆蓋率

method converage : 方法覆蓋率

覆蓋率愈高愈好,100%為理想值,但通常,粒度(Grain)的單位愈小,愈難達到100%,粒度的大小由上至下為,類別 > 方法 > 分支 > 行一般來說,建議值為: * class converage 100%  * method converage 100%

branch coverage 採用TDD 的號稱可以達到95%, 但個人建議值在 70% 以上

line coverage 採用TDD 的號稱可以達到95%, , 但個人建議值在 80% 以上

覆蓋率比較有爭議性, 覆蓋率 !=品質,但基本上把不需要測試的settor,gettor去掉後,保持line coverage 75%以上,應該不難。

Complexity

sonar报表阅读_第3张图片

程式的複雜度,採用McCabe 的計算方式

左邊是平均值,右邊的chart圖是統計值,統計有兩個view,可以從class的角度或從method的角度來看(建議)

x軸是複雜度,y軸是數量,在本例中:

複雜度為1method約有600

複雜度為2method約有180

複雜度為4method約有100

method為計算單位的建議值

Cyclomatic Complexity

Risk Evaluation

中文解釋

1 to 10

a simple program, without very much risk

method夠簡單,風險低

11 to 20

a more complex program, moderate risk

method有點複雜,有點風險

21 to 50

a complex, high risk program

method很複雜,高風險

> 50

an un-testable program (very high risk)

只有上帝跟原開發者才懂的method(也許過個月後,只有剩上帝懂)

Chidamber & Kemerer

sonar报表阅读_第4张图片

左邊的chart圖是LCOM4(Lack of cohesion of methods),右邊是RFC(Response for class) LCOM4是用來判別類別是否具有太多的責任的指標,一般來說,類別設計應該符合單一責任原則 ,如果一個類別之中的methods,並沒有共同的參數或是公用的field,那表示此類別可能可以進行切割。

LCOM4的說明文章 LCOM4chartx軸是LCOM4的值,y軸是class的數量

LCOM4 = 1 好的類別,表示類別只有一個責任

LCOM4 >= 2 可能需進行切割的類別,數字表示可以切割的數量

LCOM4 = 0 空類別

sonar报表阅读_第5张图片

上圖中,LCOM4=3,每一個區域表示可以被獨立切割的部份

RFCchartx軸是RFC的值,y軸是class的數量,RFC的值愈小愈好,

0~50建議值

> 50 表示該類別太過複雜

這個chart圖,通常會搭配Dependency Structure Matrix (DSM)(依赖结构矩阵)

Comments & Duplications

sonar报表阅读_第6张图片

左邊是程式註解的數量,右邊是程式重覆(copy & paste code)的數量

Package design

左邊的Package tangle index是指package糾纏指標,右邊的Dependencies to cut是指有多少個packages需要做依賴性切割

Package tangle index的值愈小愈好

0%最佳值

100%最差值

Dependencies to cut的值愈小愈好,理想值為0

sonar报表阅读_第7张图片

只要圖中消除紅底白色的部份,就可以有效降低Package tangle index

Size metrics

sonar报表阅读_第8张图片

左邊的Lines of code(loc)是程式數量的統計,右邊的classes是類別內容的統計

你可能感兴趣的:(sonar报表阅读)