沒有銀彈,但你也需要子彈——讀《測試驅動開發的藝術》
昨晚我發了條微博,內容如下:
程式設計本質上是用腦的,當程式複雜的時候人腦會不夠用,於是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相關的書還有不少,順帶介紹幾本不錯的:
- Test Driven Development by Kent Beck 極限程式設計之父的經典,必讀
- Growing Object-Oriented Software, Guided by Tests by Steve Freeman and Nat Pryce 我個人非常非常喜歡的一本書,他告訴了TDD就是物件導向設計,啟發非常之大
- Agile Testing by Lisa Crispin and Janet Gregory 還沒來得及讀,不過看目錄就心嚮往之。
關於TDD,我最喜歡的是它的兩點。第一是它能幫助我建立對自己程式碼的信心,讓我能夠保持前進而不用在潛意識裡擔心破壞什麼東西;第二是它教會我在程式碼使用者的角度設計API,而不是在程式碼中越鑽越深最後竟忘了最初的需要。
TDD是枚不錯的子彈,當然前提是你眼睛得好使。
相關文章
- 有沒有銀彈?——閱讀思考
- 你這不是測試驅動開發
- 沒有銀彈 NODE.JS效能未必就很高Node.js
- "測試"驅動開發
- win10彈出驅動器中沒有磁碟請在驅動器怎麼辦Win10
- 談“測試驅動的開發”
- 測試驅動開發(TDD)跟敏捷開發有衝突敏捷
- 【敏捷開發】驅動測試開發敏捷
- 有自驅力的測試開發實習生
- 測試驅動開發(TDD)的思考
- 小議測試驅動開發
- 基於測試驅動的iOS開發iOS
- 面向 C++ 的測試驅動開發C++
- Laravel 測試驅動開發 -- 正向單元測試Laravel
- 《Android藝術開發探索》學習筆記之View的事件體系(View的彈性滑動)Android筆記View事件
- TDD(測試驅動開發)死了嗎?
- 什麼是測試驅動開發
- 變異測試是測試驅動開發(TDD)的演變
- 精讀《編寫有彈性的元件》元件
- Scrum敏捷軟體開發之技術實踐——測試驅動開發TDDScrum敏捷
- 測試驅動開發(TDD)例項演示
- 測試驅動開發到底好不好
- 執行runInstaller沒有介面彈出
- Q萌硬核彈射手遊《彈射王》開啟安卓端不刪檔測試!安卓
- 使用者管理系統,PHP專案開發銀彈?PHP
- 模型驅動的軟體測試技術模型
- 測試驅動開發(TDD)實戰心得 - DeniMoka
- 銀彈谷:協同辦公供需動態
- 銀彈谷:低程式碼開發平臺發展趨勢展望
- 是否使用TDD(測試驅動開發)進行UI開發UI
- 測試驅動開發在專案中的實踐
- 基於Python的測試驅動開發實戰Python
- 測試驅動的Rails開發系列之二——實體AI
- 拒絕測試驅動開發(TDD)的10個理由
- 測試驅動開發上的五大錯誤
- 有沒有鬼佬的測試技術論壇?
- 面向開發的測試技術(三):Web自動化測試Web
- 手指的熱量也會暴露你的密碼,AI驅動下僅需數秒破解密碼AI