GPA(Grade Point Average) 衡量你的專案品質

最近在處理維運及品質控管的工作,一邊研究各式各樣的code review的工具。

舉凡如codeclimatecodebeatscrutinizer之類的自動測試化工具,會依據一些品質指標進行分數評比,再將最終的分數進行以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就是你這個專案的得分了喔!