測試覆蓋率,沒錯,是個數字...
是個很可能出現在 KPI、驗收規格文件等地方的需求
只要把 unit test 上的 Assert 都拿掉,全部的 Function都呼叫一遍
就能輕輕鬆鬆的 100% 了呢~
某種程度上來說的確很表面很沒意義
要如何讓這個數字具有價值也更有意義呢?
91大對於測試涵蓋率的建議:
- 至少要大於0%,代表該產品存在著相關的自動測試
※ 代表環境都建置好了,就差隨手寫寫 Unit Test - 檢視測試案例是否包含最主要的情境,以及曾經出錯的情境
- 檢視是否有不必要的產品程式碼或缺少對應的測試案例
- 相對趨勢大於絕對數字
※ 以前的包袱就算了,至少之後要更好吧~!
關於「『相對趨勢大於絕對數字』,只要後來的扣都有寫上 Unit Test
覆蓋率的數字就不會往下降」,這句話實在激起了我的證明魂,
轉換為數學語言,簡單證明一下:
假設原來的扣為 x 行,測試有涵蓋到的扣為 y 行,原測試覆蓋率即為: y / x ;
再假設新增的扣為 k 行,增加 k 行且都有做 unit test ,其覆蓋率為:(y+k) / (x+k) ≧ y / x ;
故要證明的式子是:
(y+k) / (x+k) ≧ y / x, where y < x and x, y, k > 0
證明:
假設 (y+k) / (x+k) < y / x
=> x (y+k) < y (x+k)
=> xy + xk < xy + yk
=>xk < yk => x < y
→← 矛盾,故假設錯誤,得證。
假設新的扣都有好好的寫測試,覆蓋率的確只會越來越高呢~
(前提是新的修正很單純只是加上新的扣,若有重構等總總考量就很難說了...)