覆蓋率 100% 的迷思
覺得我們的內容實用嗎? MyApollo 電子報讀者募集中!歡迎訂閱電子報!
軟體工程裡面針對測試有項指標稱為覆蓋率(coverage),簡單解釋就是你的測試案例能讓受測程式執行到的程度。
例如下列程式碼:
def is_negative(x):
if x < 0:
return True
return False
我們針對上述程式寫了 1 個測試案例:
def test_is_negative():
assert(is_negative(-1)) is True
受測程式碼有 3 行,但我們的測試案例只跑了 2 行,覆蓋率為 2/3, 約為 66% 。
所以在撰寫測試案例時通常會盡量追求高覆蓋率,務求每 1 行都能盡量執行到會比較安心。
不過高覆蓋率並不等於測試案例正確有效!也就是說高覆蓋率不能與程式的強固劃上等號!
同樣再舉 1 個例子:
def divide(x, y):
return x / y
假設我們又寫了 1 個測試案例:
def test_divide():
assert(divide(10, 5) == 2)
這個覆蓋率肯定 100% 的啦, 不過它卻漏了測試分母為 0 的情況,在分母為 0 時,這個程式就會出錯⋯⋯(老闆心想:「你不是 100% 覆蓋率,怎麼還會出錯?」)。
所以只一昧追求高覆蓋率是不夠的,還要測試案例正確有效才是通往高強固程式的道路!