記得去年在JuluOSDev 與 Tossug 合辦聚會活動,曾探討了Tdd with python unittest for embedded c 這個主題,非常多朋友熱情參與。
最近這一段時間,筆者又接觸到ATDD (Acceptance Test-Driven Development),
之前大略看了,最近再花些時間研讀,溫故知新一下。
其中主要差異在於TDD 針對單元測試,
而 ATDD 則是對客戶要驗收的需求來實作單元測試。
有個真實小案例:
王小明是一個很盡責的工程小組長,他和小組完成整個程式專案,也都一一通過各成員所撰寫單元測試,整個程式運作穩定正常。
驗收當天,元大頭為主要客戶代表來驗收,交付程式前,產生如下的對話:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
元大頭說:「小明,可以讓我來試試程式符不符合我們的要求。」
王小明很有信心地說:「可以,程式經過我們嚴格的單元測試,目前版本已是穩定版了!」
元大頭試著輸入一些資料,他不小心把網路線弄掉,結果程式跑出一個錯誤,
他皺著眉說:「這是什是意思“Error:ECONNREFUSED”,我看不懂,這是火星文嗎?」
王小明立刻看了一下把線接上,不加思索,直接回說:
「因為網路連不上,網路線鬆掉了,現在接好,您再試試。」
元大頭按下OK後,待重新連線訊息完成,即能正常輸入後,過了一會有些不滿地說:
「咦?剛輸入資料怎麼全不見,小明你不說沒問題嗎?怎麼會這樣!
之前開需求時,不是有提到要讓使用者方便在常用頁快速輸入,也要讓使用者看得懂啊!」
王小明心虛地說:「抱歉!這是我們的失誤,會儘速修正。」
⋯⋯
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
小結:
以上述案例而言,小明的團隊其實有錯誤處理網路斷線的問題(曾見到沒處理的app程式直接閃退),但卻漏掉兩個需求。
- 易懂的錯誤訊息
- 常用頁的輸入時,錯誤處理應儘量保持使用者輸入的資料
若使用 ATDD,設法把需求轉成驗收測試單元,再寫程式來通過這些單元測試;
就比較不會發生遺漏使用者需求的情況。當然這個案例只是冰山一角,
ATDD 也不見得是萬靈丹,有任何想法,歡迎一同討論。
就比較不會發生遺漏使用者需求的情況。當然這個案例只是冰山一角,
ATDD 也不見得是萬靈丹,有任何想法,歡迎一同討論。
參考資料:
- wiki: Test-driven_development
- slideshare: tcmak's atdd-in-practice
- discussion: BDD for Acceptance Tests vs. BDD for Unit Tests (or: ATDD vs. TDD)
- stackoverflow: are there any good online tutorials to tdd for an experienced programmer who is
沒有留言:
張貼留言