沒有銀彈,但你也需要子彈——讀《測試驅動開發的藝術》

Juven發表於2011-10-22

昨晚我發了條微博,內容如下:

程式設計本質上是用腦的,當程式複雜的時候人腦會不夠用,於是bug百出,程式設計師心力憔悴。好在出現了各種工具和方法論來幫助降低人腦的負荷,讓人能夠專注於有限的地方。但是,很多人迷信工具和方法論以致幾乎忽略了人腦的能力,就好像只要用對了方法和工具,放只猴子也能把軟體寫出來,這也應該反思。

這是我最近看到一些關於敏捷方法的爭論有感而發,就以測試驅動開發(TDD)為例,有那麼兩派人,一派是死忠,認為不用TDD寫不出好的程式碼,不寫測試就不能寫主程式碼;另一派則相反,覺得TDD是很扯淡的東西,是諮詢公司忽悠人的工具。我則認為兩派都走了極端,在我看來,包括TDD在內的敏捷方法論都旨在幫助降低程式設計師的腦負荷,因此恰當的使用能幫助我們專注於重要的事情,但認為TDD是萬能的,而忽視了,那也大錯特錯了,不管多麼神奇的方法,多麼完善的過程,我們都不能否認人腦思考是程式設計活動中最重要的一環。

所以TDD不是能讓你秒殺狼人的銀彈,但它的確是能幫助打獵的子彈。

回到《測試驅動開發的藝術》一書上來,首先我想批評的是這個看似很雅實則惡俗的題目,原書名為 Test Driven - Practical TDD and Acceptance TDD for Java Developers ,一經翻譯,意思完全走樣。這書比較重在介紹TDD(包括ATDD)以及相關的實踐,離”藝術”二字真差十萬八千里。不過除了題目,其他一切都不錯,包括那個照搬的Manning系列封面。下面介紹下內容:

  • 第1-3章 是對TDD入門的介紹,TDD是什麼,為什麼要用TDD,相關工具,然後是實際操作等等。由於TDD無法脫離重構而存在,因此這裡也有不少涉及。這一部分很棒,不是說內容多精彩,重要的是淺顯易懂。
  • 第4章 是對TDD概念和模式的一些挖掘,也是期望比較大的一章,我也看到了一些精彩的論述,包括如何提高程式碼可測試性的手段,將測試分為基於狀態和基於互動兩類,等等。可惜不夠過癮,作者引申的書倒不少,自己的料不夠足啊。
  • 第5-8章 就是一些實際的實踐了,可能也算本書的重頭,包括測試web元件,資料訪問元件,Swing元件,時間相關功能,以及多執行緒程式碼等等。根據自己背景需要,跳著看看就可以了。
  • 第9-11章 是對驗收測試驅動開發(ATDD)的介紹,是我個人,除第4章之外最喜歡的部分,因為我之前對TDD瞭解得不算少了,但對驗收測試的瞭解寥寥,這部分幫助我掃盲了,也學習了一下相關工具Fit(由Wiki之父Ward Cunningham開發)。
  • 第12章 也是最後一章,是教你如何推行TDD,基本上是一些諮詢培訓的技巧,也挺有趣,不過故事少了點(作者自己還在文中強調故事的重要性,有點搞笑啊)。

總得來說這是本介紹TDD和ATDD的不錯的書,優點在於淺顯易懂,而且有不少實踐,缺點就是深度不夠。

和TDD相關的書還有不少,順帶介紹幾本不錯的:

關於TDD,我最喜歡的是它的兩點。第一是它能幫助我建立對自己程式碼的信心,讓我能夠保持前進而不用在潛意識裡擔心破壞什麼東西;第二是它教會我在程式碼使用者的角度設計API,而不是在程式碼中越鑽越深最後竟忘了最初的需要。

TDD是枚不錯的子彈,當然前提是你眼睛得好使。

相關文章