l

2015年3月18日 星期三

測試案例壞味道(8):Erratic Test

March 09 16:32~17:45

螢幕截圖 2015-03-09 18.04.01

睡著的時候最乖(只要不執行程式,就不怕有bug了啊 XD)。

 

有按時收看〈搞笑談軟工〉的鄉民們對於Erratic Test(不穩定的測試)這個壞味道應該不陌生,因為Teddy之前有好幾篇文章介紹過這個主題:

 

這是一個非常討人厭且令人頭大的壞味道。在沒有對程式碼做任何修改的情況下,測試案例有時候正常可以正常執行,有時候又會執行失敗。為什麼會這樣勒?!

***

xUnit Test Patterns: Refactoring Test Code》書中提到導致這個壞味道的情況有好幾個:

  • Interacting Tests:測試案例依賴其他測試案例,因為所相依的測試案例失敗導致自己執行失敗。具體例子可參考〈對付時好時壞的測試案例(2):Lack of Isolation〉。
  • Interacting Test Suites:這是Interacting Tests的一種特別案例,測試案例在自己的測試組(test suite)中可以正常執行,但是如果好幾個test suite放在一起直行則會時好時壞。
  • Lonely Test:這也是Interacting Tests的一種特別案例。執行整個test suite,所有測試案例會通過。但是單獨執行test suite裡面的某個測試案例則會失敗。這種單獨執行會失敗的測試案例就叫做Lonely Test。
  • Resource Leakage:資源洩漏也會造成測試案例時好時壞,具體例子可參考〈對付時好時壞的測試案例(6):Resource Leaks〉。
  • Resource Optimism:測試案例所依賴的外部資源並不是很穩定,具體例子可參考〈對付時好時壞的測試案例(4):Remote Services〉。
  • Unrepeatable Test:測試案例第一次的行為和之後的行為不一樣,所以跑了一次就不能跑了(只有第一次成功)。或是第一次會失敗,但之後的執行都會成功。這種情況通常是共用測試資料所引起的問題。
  • Test Run War:好幾個人同時都在執行測試案例,這種情況很容易導致測試狀態錯誤,造成測試案例時好時壞。
  • Nondeterministic Test:測試案例本身行為無法預期,嚴格講起來上述幾個原因都會造成測無法預期的測試案例。其他的情況包含每次執行測試案例的時候都會得到不同的回傳值,例如產生唯一的鍵值(unique key)。另外,在程式中使用條件判斷式也會造成這個問題。

***

不穩定的測試會導致開發人員對測試案例失去信心,最終可能造成根本沒人想寫測試案例。這是一個非常糟糕的測試壞味道,一旦發現勢必要立即排除。如果一時無法排除也要加以隔離(請參考〈對付時好時壞的測試案例(1):還沒痊癒,就先隔離〉),以免影響其他身體健康的測試案例。

***

友藏內心獨白:這個等級的壞味道應該算bug了吧!

沒有留言:

張貼留言