每個人肯定都有不同的作法或理念,所以人們會吵架,網路上的鄉民會在貼文上做筆戰,軟體界的大老們同樣也會。
因此今天不是談 TDD 的實踐,而是來聊聊,對於 TDD 曾發生過什麼樣的論戰。
TDD 在 2003 年正式被提出,其提出者 Kent Beck 理所當然是 TDD 的擁護者巨頭之一。
系列書籍《Clean Code》的作者 Uncle Bob,也是知名的 TDD 擁護者,《Clean Coder》一書在 2011 年出版,同樣提倡了 TDD 的使用。
然而書中的說法卻很耐人尋味,在章節開頭前幾頁就聲明:
- 此事已有定論!
- 爭論已經結束。
- TDD 確實可行。
這不明著在說曾發生過爭論嘛,而且論戰還沒結束,才需要這樣強烈跟讀者說,但我閱讀當時沒有繼續探究。
Bob 在該小節更做了一個引戰的結論:
TDD 的各項優點表明了一件事,不使用 TDD 就說明你可能還不夠專業。
2014 年時,Ruby on Rails 的創始人 David Heinemeier Hansson,在演講及文章中說 TDD 已死。
大家過於相信「TDD宗教」,甚至以為,是自己不夠懂,所以,才沒辦法發揮出TDD的好處,但是,一昧講究TDD,反而會破壞系統的設計。
iThome 的報導 有做了一些整理。
之後 Kent Beck 寫文章 RIP TDD 以反諷來回應。
Bob 也寫了 When TDD doesn't work. 及 Professionalism and TDD (Reprise) 回應。
部落格 In 91 對此做了一個 懶人包整理。
《Software Engineering》一書由作者 Ian Sommerville 撰寫,書中詳盡地歸納了軟體開發該如何進行,對於現代的軟體業是重要的知識。
TDD 也作為敏捷開發的技巧被收錄在其中,最新第十版在 2016 年出版,第九版則是 2011 年。
然而作者個人的部落格,在 2016 年三月發表了一篇文章,Giving up on test-first development。
他嘗試在自己的個人專案使用 TDD,但之後認為 TDD 會對設計過程造成負面的影響與結果,因此決定放棄 TDD (雖然文章標題是寫 test first,但內文是講 TDD)。
文章一出來之後,立刻得到大量的回應,簡單瀏覽後,看起來多數是偏向擁護 TDD,甚至有人質疑,作者在出版《Software Engineering》前自己竟然沒有用過 TDD (但我不同意這質疑的論點)。
Bob 對此先在 Twitter 上發了一則貼文,接著寫了一篇文章 Giving Up on TDD 來回應。
I think he gave up too quickly and too easily.
過幾天 Ian 也又發了一篇文章回應 Responding to Uncle Bob’s comments on test-driven design。
對於這兩次,軟體界大佬們的論戰,老實說我還沒辦法消化,有興趣的讀者歡迎分享你的心得。
但我目前認為論戰的重點,在於一個資訊的交流,也許對於擁護者與反對者,論戰的輸贏很重要,但對於學習者與使用者來說卻不是。
要開發出好的軟體,會有很多種做法,而其中可能包含 TDD。他目前是個選項,但並不是個絕對的指標,也許 TDD 未來真的可能發展成軟體開發的最高準則,但至少現在不是。
不過這個爭論也還沒有結束,我想擁護者與反對者大概都還是會繼續爭論下去,至於結果如何,就讓我們在軟體界繼續看下去吧。