2013年4月26日 星期五

初探 ﹣ 驗收測試驅動開發 (ATDD)






記得去年在JuluOSDev 與 Tossug 合辦聚會活動,曾探討了Tdd with python unittest for embedded c 這個主題,非常多朋友熱情參與。

最近這一段時間,筆者又接觸到ATDD (Acceptance Test-Driven Development),
之前大略看了,最近再花些時間研讀,溫故知新一下。

其中主要差異在於TDD 針對單元測試,
而 ATDD 則是對客戶要驗收的需求來實作單元測試。

有個真實小案例:

王小明是一個很盡責的工程小組長,他和小組完成整個程式專案,也都一一通過各成員所撰寫單元測試,整個程式運作穩定正常。

驗收當天,元大頭為主要客戶代表來驗收,交付程式前,產生如下的對話:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

元大頭說:「小明,可以讓我來試試程式符不符合我們的要求。」

王小明很有信心地說:「可以,程式經過我們嚴格的單元測試,目前版本已是穩定版了!」

元大頭試著輸入一些資料,他不小心把網路線弄掉,結果程式跑出一個錯誤,

他皺著眉說:「這是什是意思“Error:ECONNREFUSED”,我看不懂,這是火星文嗎?」

王小明立刻看了一下把線接上,不加思索,直接回說:

「因為網路連不上,網路線鬆掉了,現在接好,您再試試。」

元大頭按下OK後,待重新連線訊息完成,即能正常輸入後,過了一會有些不滿地說:

「咦?剛輸入資料怎麼全不見,小明你不說沒問題嗎?怎麼會這樣!
之前開需求時,不是有提到要讓使用者方便在常用頁快速輸入,也要讓使用者看得懂啊!」

王小明心虛地說:「抱歉!這是我們的失誤,會儘速修正。」
⋯⋯

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

小結:

以上述案例而言,小明的團隊其實有錯誤處理網路斷線的問題(曾見到沒處理的app程式直接閃退),但卻漏掉兩個需求。
  • 易懂的錯誤訊息
  • 常用頁的輸入時,錯誤處理應儘量保持使用者輸入的資料
若使用 ATDD,設法把需求轉成驗收測試單元,再寫程式來通過這些單元測試;
就比較不會發生遺漏使用者需求的情況。當然這個案例只是冰山一角,
ATDD 也不見得是萬靈丹,有任何想法,歡迎一同討論。



參考資料:



沒有留言: