2016年12月25日 星期日

[iThome第8屆鐵人賽 14]程式碼品質 - 介紹篇

我曾經聽過一個笑話,一個人到一家公司面試,面試官問他:「請問你如何保證/保持你的程式碼品質?」

這個年輕人回答:「我...我會在發現bug的時候把問題加班修好」。

其實這個有點悲哀,也說明了為什麼軟體工程師時常需要加班,因為當軟體越寫越複雜的時候,要保持程式的品質是需要一些事情,但是這些事情是什麼?有沒有可能進入到我們日常環境里?

這個就是接下來會介紹的部分,我們如何透過做CI把程式碼品質要做的事情整合進來。

如何保持程式碼品質?

保持程式碼品質其實本身就是一個很大的主題,在這個系列裡面不會介紹非常詳細,但是會針對幾個比較容易執行並且能夠整并到我們CI裡面的來做介紹。

基本上,有兩方面的程式碼品質:

  • 需要做事情的 - 寫測試
  • 工具分析型的 - 程式碼分析

透過測試保證程式碼品質

測試有很多種,最常聽到的應該就是單元測試(Unit Test)。

單元測試簡單的說是一個最小單元是否符合撰寫的邏輯。但是,一個最小單元裡面可能有不同的路徑,測試到底包含了多少路徑會影響到這個測試的完整性。

舉例來說,一個簡單的方法,有個if邏輯判斷,如果測試只測試了true的部分,但是沒有測試false的部分,只能保證說true是沒問題的,但是false那段完全沒有涵蓋到。因此,涵蓋率只有50%

所以,我們的測試涵蓋率到底多少,能說明這個測試的完整性有多少。

這個部分,我們將會透過使用一個Open source的專案叫做OpenCover來做這方面的檢測。

不需要每一個方法的涵蓋率都要100%

雖然說涵蓋率越高越好,但是並不代表所有涵蓋率都要100%,也不可能都到100%,所以這個參考就好。

程式碼分析

像在做資安掃描的時候一樣,有所謂的白箱測試,在程式碼品質的部分也有這種類型的工具,而這種工具又有分兩種:

  1. 程式碼風格分析 - 這個其實不和程式邏輯有關,而是和寫程式的風格有關。風格指的是,例如每一行內容要空幾行,怎麼寫註解之類。最出名的工具就是 StyleCop
  2. 程式碼分析 (static analyzer) - 這個其實和跑白箱測試是一樣概念,分析程式並且把有些寫法有問題的標註出來。例如,方法參數沒有用到這種,甚至Sql injection檢查。最出名的工具 就是 FxCop,再後來,整合進去到後來Visual studio 裡面的Code Analysis

這兩個最大不同之處在於,程式碼風格分析是對 原始碼做分析,程式碼分析 則是對 編譯過的dll做分析

結語

在這篇我們介紹了可以透過什麼工具來保持程式碼的品質,在接下來的章節裡面,我們將會開始介紹怎麼把這些工具整合進去到我們的build script裡面

下篇,先從測試涵蓋率,OpenCover開始介紹


沒有留言 :

張貼留言