[隨筆] TDD 是一種修煉過程

學會 TDD?用 TDD?落實 TDD?到底什麼時候該用 TDD 呢?

TDD 其實是一種修煉的過程,讓你可以在每一次寫程式的過程,都逐步在累積功力,就像金庸的射雕英雄傳中,馬鈺教郭靖修煉內功的方式,無外乎就是一些呼吸、走路、睡覺的法子。

(圖片來源:獵人 Hunter x Hunter)

前言

很多朋友都會問我,在實務上所有需求、每一行程式碼,你真的都用 TDD 來進行開發嗎?

需求變動頻率很高的時候,你也 TDD 嗎?寫不了測試或很難寫測試的情況,你也 TDD 嗎?時間很吃緊的時候,你也 TDD 嗎?

就如同我常常強調的:

請把 TDD 當成一種習慣,而不是拿來當作開發規範

TDD 是種修煉過程

TDD 是一種輔助開發的方式,同時也是一種養成好的開發習慣跟好設計的修煉過程

舉個例子來說,在沒修煉以前,畫直線要用尺,畫圓要用圓規。這都是修煉過程。

當你已經練到很進階了,當你沒有尺的時候,你畫出來的線也「足夠」直。不給用圓規時,你也能畫出個「夠圓的圓」。

而這個修煉是持續不斷、沒有盡頭的,但任何時間在實務需求不允許你修煉,而需要應急時,你的修煉就會展現出成果。

即使你不用 TDD,你的 design 仍會有足夠的可用性、擴充性、可維護性跟品質,因為已經習慣總是從需求思考,從呼叫端設計,腦袋總能自由地把實作的細節與抽象的互動分離。

即使你不寫測試,你的思路仍然是從「呼叫端或使用者該怎麼用」、「需求該有哪些 scenario」出發。

結論

練武的人不會因為練成了某個招式就停止修煉,因為停止修煉就會生疏,TDD 也是一樣的。(葉問再熟詠春,也是要繼續跟木人樁繼續練功)

最近幾個月加入 wechat 的幾個技術社群,不得不說對岸的大牛跟技術狂熱者真的相當多,他們的技術社群活躍能量也遠遠大於台灣。他們有人可以每天早晚以練習 kata 來暖機(Uncle Bob 也是這樣建議),以練習 kata 來當作睡眠的儀式。(如果你跟我一樣有睡眠障礙,不要常幹這件事,很容易太嗨睡不著的)

社群中還有朋友會自己發明一些 kata 來提供給整個社群的朋友用不同語言練習,多人群毆或 pair 形式,直播整個 TDD 過程,留下影片跟每一個步驟的紀錄,還會把針對這個 kata 在 wechat 群裡的討論整理出來。他們的 kata 接力真的相當有趣。

不管是李小龍講的「練習一萬次踢腿」或是「一萬個小時的練習」,刀是越磨越利,就算你的 kata 已經練習過成千上百次,每一次的練習都還是有可能激出更進一步的火花。可能是思路、可能是寫 code 的技巧、可能是 IDE 的某個熱鍵、可能是命名、可能是演算法,而這些都會一點一滴的累積在你的體內跟腦袋裡面,進而在實務上默默地發揮出效果。

說再多都沒用,開始動手做吧。

(圖片來源:來自網路)

Kata Reference

當你使用 cyber-dojo 的時候,可能會覺得這個服務介面怎麼設計地這麼不方便、難用,但作者說了,因為他希望你多想一點再動手寫,而不是因為工具的便利性,而導致你的手動得比腦袋還快。

標準「這是個 feature, 不是 bug」的體現。

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

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

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