[30天快速上手TDD][Day 1]TDD Guidance

[30天快速上手TDD][Day 1]TDD Guidance

前言

相信許多 developer 一定都曾經聽過、看過甚至寫過所謂的 Unit Test,可能也嘗試過所謂的 TDD。

但可能心裡也有很大的疑問:

  1. 「為什麼我要寫兩份程式?」
  2. 「為什麼我要寫程式來驗證我已經知道的結果?」
  3. 「我又不是 SA,可能也不懂 domain,怎麼產生一開始的 test case?」

最後的感想就變成是:

  1. 「Unit Test,那都是說說而已」
  2. 「Unit Test?沒那美國時間啦!」
  3. 「TDD 只不過是被拿來炒作而已,現實開發中,誰用 TDD 寫過一整個大系統?至少台灣沒有吧!」
  4. 「TDD 只是先寫測試程式而已,有什麼特別的?」

希望透過這一系列的文章,可以滿足大家的求知慾,激起大家的熱情,讓大家也可以動手跟著練習看看。

相信我,你也可以真的在TDD。

 

TDD 修煉系列大綱簡介

如前言所說,這個系列希望可以把 TDD 學習的順序,以及實際實作的順序介紹一下,讓大家可以先學每個環節,接著再把所學的組合起來,進行案例的實作。

我預計將 TDD 整塊大餅分成四份,分別是 Testing, Refactoring, TDD, 最後輔以「ATDD 與 BDD」。設計的目標則是:working software。如下圖所示:

Day1 TDD組成

 

TDD 的學習順序

我對TDD建議的學習順序是:

  1. Testing
  2. Refactoring
  3. TDD
  4. ATDD & BDD

Day1 學習順序

 

TDD 的開發順序

TDD實際的開發順序則是:

  1. ATDD & BDD
  2. TDD
  3. Testing
  4. Refactoring

Day1 實作順序

 

不管是學習順序,還是實作順序,其實都是環環相扣、相輔相成。接下來29天,則預計以上述的四個部分,來進行細部的說明與簡單的實作。

註:因為每一個環節都緊緊相扣,所以有一些階段不是這麼容易區分清楚。例如 Testing 其實在 ATDD, BDD , TDD 中,都有包含在裡面,這邊獨立的 Testing,或許用 Unit Testing 會更加合適。

 

主要的大綱與精神

一、Testing

  1. 單元測試 ( Unit Testing )
  2. 整合測試 ( Integration Testing )
  3. Presentation Layer Testing

 

二、Refactoring

  1. 讓程式碼會說話 ( Let code can talk )
  2. 簡單就是美 ( Simple is beauty )
  3. 不要過度設計 ( Never over design )
  4. 運用基本的物件導向原則 ( Need to understand OO skill and principle )

 

三、TDD, ATDD, BDD

  1. 滿足使用者需求 ( Fulfil user requirement )
  2. 如何產生測試案例 ( How to get acceptance test cases )
  3. 如何由測試案例開始設計程式 (How to start by test cases )

 

四、開發實例

  1. User Story
  2. ATDD
  3. BDD
  4. TDD
  5. Refactoring

 

五、總結

  1. Object-Oriented
  2. Unit Testing
  3. Integration Testing
  4. Refactoring
  5. CI & Auto Testing
  6. Agile/XP ( Continuous feedback )

 

總訣

最後則是用來貫穿整系列文章的總訣:

程式碼的存在是為了,也只為了滿足使用者需求,而不是寫給工程師自己爽的

 

補充

補上一些專有名詞的全名:

  1. TDD: Test-Driven Development
  2. ATDD: Acceptance Test-Driven Development
  3. BDD: Behavior-Driven Development
  4. CI: Continuous Integration
  5. XP: eXtreme Programming

對敏捷開發有興趣的朋友,可以參考我的粉絲專頁:91敏捷開發之路

對 TDD 課程有興趣的朋友,課程內容、大綱與學員心得,可以參考 skilltree 的公開課程:自動測試與 TDD 實務開發

若需要聯絡我,可以透過粉絲專頁私訊或是側欄的關於我。