TDD(Test Driven Development) 真正的涵義

TDD: The Synergy
http://aydsoftware.blogspot.com/2009/03/tdd-synergy.html 

March 22, 2009
Posted by Mike Bria
Published in MBarking on Innovation


TDD (Test Driven Development) 這個practice已經在agile界流傳已久, 當初是由Kent Back 所提出來的一個作法. 也非常感謝他的提出, 否則在這之前, 測試是非常冷門的學問, 它的存在, 讓測試這東西再度鹹魚翻身, 至少大家知道這個東西很重要, 是否真的了解可能是另一件事情.

在這篇文章中, 作者認為 TDD的不是一個"工作任務". 它並不是我們除了做設計或是撰寫程式外, 額外要做的事情.相反的, 它是我們在定義一些 user story, design 或撰寫程式時, 所要尊循的一個做事方法或程序. 也就是你在開發時, 就要按照這樣方法來進行.

TDD是agile每項practice的基礎, 如果做的好時, 它會確保整個團隊活著很好

以下是作者認為, TDD在各個階段中所要做的事情
1. 在定義一些user story時, TDD 就是等於需求分析.
一開始要想怎麼用這個軟體, 也就是要定義一些user story, 而這些story其實就是acceptance test的來源. 通常你會用FitNesse, Selenium, WaTiR, 或是類似的東西來實做. 根據這些user stories, 你可以知道所謂完成, 到底是什麼東西要做出來.

2. 在做design時, TDD就是用來描述我們所要做的東西, 它的運作行為看起來應該是怎麼樣的. 大部分是使用xUnit 家族的工具.

3. 在coding階段, TDD就是讓unit test告訴我們, 是否所寫的code照我們想像的運作. 更重要的是, 當你做完refactoring, 你會知道是否原先的code還仍然運作正常
 
假如你並沒有遵照前面所說的去做, 那你的作法會變成真的是driven by test. 你先寫test, 然後因為不通過, 之後再開始撰寫程式碼, 那也就是test變成是我們的spec. 這個味道就和作者提的完全是不一樣的.

所以真的TDD是什麼呢? 根據上述來看, 在Acceptance (Story/Service) test level, TDD的一種分析的活動. 在micro (unit/object) test level, TDD是一種設計的活動. 它並不是單純在做 verification, 它是一種spec確認的活動.

總之, TDD提供一個作法, 確保在整個開發過程中, 我們是建立真正對的軟體. 而不單純只是把軟體做對而已

arrow
arrow
    全站熱搜

    kojenchieh 發表在 痞客邦 留言(0) 人氣()