學 TDD ( 測試驅動開發 ) 的動機請見《為什麼要寫 unit test?為什麼要先寫測試?》。這篇簡記一下我學習 TDD 的方式:
- TDD 的流程、精神:網路上零散的短文 [1] 和 Kent Beck 的書《Test Driven Development: By Example 》。
- Testing 的技巧:從 Google 的 Agile Coach Miško Hevery 的 Blog 學。
- Refactoring 的技巧:從 Martin Fowler 的書《重構:改善既有程式的設計》以及他的 Blog 學
看完書後,大致上是從大師的 Blog 跳著看有興趣(或著說,讀起來比較有感覺)的部份。自己寫個一陣子就看個幾篇,待思考消化後再回頭試著用自己的方式寫出來。如此反覆進行。最重要的是在自己的環境裡,用自己的方式進行 TDD,感受會更明確。
TDD 的概念很簡單,看過例子後應該能馬上使用,但無法立即精通 TDD 。它是一個習慣,而培養習慣需要時間累積。養成習慣後,接著需要提昇測試和重構的技巧,才能逐步提昇效果並降低使用 TDD 的成本。如同過去學 Design Pattern 或其它寫程式的技巧一般,需要讀書和時間練習。我在前幾次使用 TDD 時有犯一些錯,使得效果打折,有感受到一些好處,但也對一些壞處感到疑惑。直到寫了
五、六個小專案後,才釐清一些疑慮,確信 TDD 是很划算的取捨,從而決定持續使用 TDD。最近用它寫超過一萬行程式,更加感受到它的威力。
備註
- Java 的例子可見 The Bowling Game Kata;Python 的例子可見 Dive into Python 3 介紹 unittest module 的章節和介紹 refactoring 的章節。《Dive into Python 3》的例子比較不像真實的 TDD,為了教學方便,作者直接寫最終版的測試碼。若要看原汁原味的演化過程,看 Java 的例子或 Kent Beck 的書較適當。
沒有留言:
張貼留言