iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
Software Development

如何一步步實踐TDD (測試驅動開發)系列 第 28

TDD 過往的論戰

每個人肯定都有不同的作法或理念,所以人們會吵架,網路上的鄉民會在貼文上做筆戰,軟體界的大老們同樣也會。

因此今天不是談 TDD 的實踐,而是來聊聊,對於 TDD 曾發生過什麼樣的論戰。


擁護者

TDD 在 2003 年正式被提出,其提出者 Kent Beck 理所當然是 TDD 的擁護者巨頭之一。

系列書籍《Clean Code》的作者 Uncle Bob,也是知名的 TDD 擁護者,《Clean Coder》一書在 2011 年出版,同樣提倡了 TDD 的使用。

然而書中的說法卻很耐人尋味,在章節開頭前幾頁就聲明:

  • 此事已有定論!
  • 爭論已經結束。
  • TDD 確實可行。

這不明著在說曾發生過爭論嘛,而且論戰還沒結束,才需要這樣強烈跟讀者說,但我閱讀當時沒有繼續探究。

Bob 在該小節更做了一個引戰的結論:

TDD 的各項優點表明了一件事,不使用 TDD 就說明你可能還不夠專業。


2014 年,RoR之父批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 對此做了一個 懶人包整理


2016 年,Bob 與 Ian

《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 未來真的可能發展成軟體開發的最高準則,但至少現在不是。

不過這個爭論也還沒有結束,我想擁護者與反對者大概都還是會繼續爭論下去,至於結果如何,就讓我們在軟體界繼續看下去吧。


上一篇
TDD 實戰 D13:Laravel 小結
下一篇
BDD 行為驅動開發
系列文
如何一步步實踐TDD (測試驅動開發)30

尚未有邦友留言

立即登入留言