最近在處理維運及品質控管的工作,一邊研究各式各樣的code review的工具。
舉凡如codeclimate
、codebeat
、scrutinizer
之類的自動測試化工具,會依據一些品質指標進行分數評比,再將最終的分數進行以rank A~F的GPA評分來衡量最後的情況。
何謂GPA呢(Grade Point Average)?
GPA是美國一種衡量學生的分數指標,通常來說分為四點分數(4-point),也就是最高就是4分(A rank),但是這個指標會依據不同的地區有不同的評量標準。
以最常見的四分(4-point)來看的話,學生可以分成下面的等級
Rank | Score |
---|---|
A | 4.0 |
B | 3.0 |
C | 2.0 |
D | 1.0 |
F | 0 |
以小明來說好了:
某天小明得了兩個A
、一個B
和一個C
,那麼小明的分數就是(4+4+3+2)/4=3.25
,整體平均看起來還不錯。
當然,GPA不全然只有單純的四分得點,可能依據不同的環境會有不同的計分方式,像是比較常見的4.5分得點(4.5-point)以及五分得點(5-point)。
程式碼評斷的標準
程式碼不會像是純粹的得分計算,就跟學生對於不同科目來說,每個科目的重要性也不相同。
以程式碼來說,程式的主要衡量指標為行數
,不然一個只有10行的程式跟100行的程式直接比較差距很容易過於樂觀。
那計算的標準呢?
品質的計算方式不外乎下面幾個指標
- 待處理的區塊(todo code block)
- 重複(duplication)
- 複雜度(mess)
- 風格(coding style)
依據不同指標會有不同程度的評比,以codeclimate
來說,他的計算方式為累計得點,換算如下
score | Rank |
---|---|
0 - 2M | A |
>2M - 4M | B |
>4M - 8M | C |
>8M - 16M | D |
>16M | F |
如何計算
先前有提到評斷的標準為行數,以一個例子來說好了。
目前專案的狀態像是下面的表
file | point | loc |
---|---|---|
Foo.php | 3000000 | 100 |
Bar.php | 1500000 | 50 |
Foo1.php | 4100000 | 200 |
file
是目前這個專案底下所有的檔案,point
是累計得點,而loc
是該檔案的總共行數。
根據上一個標題我們可以得到:
Foo.php為Rank B(3.0)
Bar.php為Rank A(4.0)
Foo1.php為Rank C(2.0)
那我們的分數可以依據下面的公式得出
GPA = (3*100 + 50 * 4 + 200 * 2) / (100 + 50 + 200) = 2.57
最後得到的2.57
就是你這個專案的得分了喔!