我曾經聽過一個笑話,一個人到一家公司面試,面試官問他:「請問你如何保證/保持你的程式碼品質?」
這個年輕人回答:「我...我會在發現bug的時候把問題加班修好」。
其實這個有點悲哀,也說明了為什麼軟體工程師時常需要加班,因為當軟體越寫越複雜的時候,要保持程式的品質是需要一些事情,但是這些事情是什麼?有沒有可能進入到我們日常環境裡?
這個就是接下來會介紹的部分,我們如何透過做CI把程式碼品質要做的事情整合進來。
同步發表於我的部落格:http://blog.alantsai.net/2016/12/devopsSeries-codeQuality-Intro.html (部落格的格式會漂亮一些)
保持程式碼品質其實本身就是一個很大的主題,在這個系列裡面不會介紹非常詳細,但是會針對幾個比較容易執行並且能夠整併到我們CI裡面的來做介紹。
基本上,有兩方面的程式碼品質:
測試有很多種,最常聽到的應該就是單元測試(Unit Test)。
單元測試簡單的說是一個最小單元是否符合撰寫的邏輯。但是,一個最小單元裡面可能有不同的路徑,測試到底包含了多少路徑會影響到這個測試的完整性。
舉例來說,一個簡單的方法,有個if邏輯判斷,如果測試只測試了true的部分,但是沒有測試false的部分,只能保證說true是沒問題的,但是false那段完全沒有涵蓋到。因此,涵蓋率只有50%
所以,我們的測試涵蓋率到底多少,能說明這個測試的完整性有多少。
這個部分,我們將會透過使用一個Open source的專案叫做OpenCover來做這方面的檢測。
不需要每一個方法的涵蓋率都要100%
雖然說涵蓋率越高越好,但是並不代表所有涵蓋率都要100%,也不可能都到100%,所以這個參考就好。
像在做資安掃瞄的時候一樣,有所謂的白箱測試,在程式碼品質的部分也有這種類型的工具,而這種工具又有分兩種:
程式碼風格分析 - 這個其實不和程式邏輯有關,而是和寫程式的風格有關。風格指的是,例如每一行內容要空幾行,怎麼寫註解之類。最出名的工具就是 StyleCop
程式碼分析 (static analyzer) - 這個其實和跑白箱測試是一樣概念,分析程式並且把有些寫法有問題的標註出來。例如,方法參數沒有用到這種,甚至Sql injection檢查。最出名的工具 就是 FxCop,再後來,整合進去到後來Visual studio 裡面的Code Analysis
這兩個最大不同之處在於,程式碼風格分析是對 原始碼做分析,程式碼分析 則是對 編譯過的dll做分析
在這篇我們介紹了可以透過什麼工具來保持程式碼的品質,在接下來的章節裡面,我們將會開始介紹怎麼把這些工具整合進去到我們的build script裡面
下篇,先從測試涵蓋率,OpenCover開始介紹