[91大的TDD課程心得] 測試覆蓋率的價值

測試覆蓋率,沒錯,是個數字...

是個很可能出現在 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  →← 矛盾,故假設錯誤,得證。

假設新的扣都有好好的寫測試,覆蓋率的確只會越來越高呢~
(前提是新的修正很單純只是加上新的扣,若有重構等總總考量就很難說了...)