l

2012年12月11日 星期二

對付時好時壞的測試案例(6):Resource Leaks

Dec. 10 15:17~15:54

761067903184999

先打個廣告,12月份的C. C. Agile活動即將於12月13日(禮拜四)舉辦,還剩下少數幾個名額,有興趣參加的鄉民們請多加把握。這裡是報名網址:http://www.accupass.com/go/CCAgileSprint04

 

Resource Leak

本系列最後一集談的是第五種造成測試案例時好時壞的原因:Resource Leak(資源洩漏)。這類的問題翻成白話文就是說:資源用完沒有歸還。在軟體世界中,最常忘記歸還的資源就是記憶體,其他還包括資料庫連線、網路連線、開啟中的檔案、磁碟空間等等。

如果鄉民們的程式存在著Resource Leak的問題,就會造成測試案例時好時壞。因為這類的問題在「資源被用光之前」程式執行起來都很正常,所以在大部分的情況之下測試案例都會通過。換句話說,這類的問題通常不容易被找到。

怎麼辦

要處裡Resource Leak是一件不容易的事,Martin Fowler的建議是:限制可用資源的大小或容量,如此一來如果程式中有Resource Leak的問題,便可以增加測試失敗的機會。舉個例子,假設鄉民們的程式需要連線資料庫,但是有時候在系統跑了幾天之後,會發生連線失敗的錯誤。這看起來很像是一個Resource Leak的問題。鄉民們可以嘗試:

  1. 將連線資料庫的程式改用connection pool。
  2. 在測試程式中,將connection pool的大小設很小,例如2。
  3. 開始執行測試程式,因為connection pool的大小被設定為一個很小的值,因此如果系統中有忘記釋放connection的程式,就比較容易被暴露出來(迷之音:使用connection pool不是會自動管理connection嗎?挑眉質疑)。

再舉一個Martin Fowler提到的例子,假設鄉民們的系統會使用到很多暫存檔,這些檔案使用完畢之後需要主動刪除以免佔用硬碟空間。在測試程式中,鄉民們可以讓產生暫存檔的程式永遠都產生相同的檔案,這樣一來如果程式中忘記刪除暫存檔,則會立刻就造成測試案例失敗。

***

友藏內心獨白:Resource Leak真的是很難找到的一種bug啊。

沒有留言:

張貼留言