2015第36週三測試驅動開發的藝術書評

2021-09-07 02:13:55 字數 2288 閱讀 3422

目錄 

翻開目錄我就發現,中文出版社將這本書標題定為藝術實在是掩蓋了這本書散發出濃濃的「實踐」的氣息。沒看到任何的藝術,只看到滿眼的具體實踐,而且與日常工作聯絡十分的緊密。 

第一章 

第一章作者用不大的篇幅介紹了一下tdd的概念,這部分並沒有任何出彩的部分,大部分以tdd為名的書籍都有這樣的介紹,不過本書不同的是介紹了atdd(驗收測試驅動開發),這在大部分tdd的書裡是沒有的。敏捷軟體開發中度量進度的標準就是實際交付物,並不是你用單元測試驅動出來了多少**。那麼如果我們用驗收測試驅動出來**,然後讓驗收測試變綠,這算不算呼應敏捷軟體開發的進度度量呢?所以很多tdd的書對atdd的忽視也算一種缺憾。 

第二、三章 

不管你看了多少tdd的書,如果沒有看到真實的示例,你還是覺得這些都是浮雲。沒有**就開始測試?我測什麼,怎麼測?作者用了兩章的篇幅用tdd的方式來編寫了乙個功能很弱但也算完備的模板引擎。並在字裡行間不斷的提醒我們:測試->實現->重構的步驟,一次又一次的警告我們不要貪多,重構要小步進行。從這點,讓我回憶起有多少次rollback一整天的工作,僅僅就是因為違背了這些看似簡單的規則。 

第三章對我的觸動更為深刻,在公司裡每當我們無法對乙個使用者故事劃分出清晰任務(完成這個故事採用的先後步驟),我們就先要進行spike,然後我們就可以劃分出任務了,從而也可以估計出比較合理的點數。不過作者所闡述的依照測試列表工作而不要根據任務列表倒是沒有嘗試過,有機會可以嘗試一下。 

在2.6節作者寫了個簡單的效能測試,不過卻在我心中起了不小的波動。效能這東西是個非常難以捉摸的怪物,考慮早了可能根本抓不著瓶頸到底在哪兒,考慮遲了可能為時已晚。如果我們跟使用者談好可接受的效能,然後我們編寫乙個效能測試,這個測試就像乙個警報一樣,只要效能一突破這個防線,警報就拉響,我們就要查查是我們剛剛編寫的哪段**影響了我們的效能。嗯,這也許是個很可行的方法。 

在閱讀第

二、三章的時候,如果你能開啟你最順手的ide,和作者一道使用tdd驅動出這個模板引擎,我相信你將收穫頗多。不過你可能要嚷道,我們的專案可比這複雜得多,我們的專案需要幾十人月,有多少多少**。嗯,我知道你們的專案很複雜,但是複雜的專案也是非常多簡單的**有機的組合而成。在你實現乙個功能的時候你不要想著你的專案有多複雜,你只需要關注你當前的測試就可以了。這也是作者在這兩章裡時常提醒的原則。 

第四章 

怎麼樣,跟著作者使用tdd的方式完成了這麼個小「模板引擎」,是不是覺得單元測試很簡單?如果你這麼想那就上鉤了,要寫單元測試特別是寫好單元測試並不那麼簡單。要讓自己的測試有模有樣,還是有很多模式和原則需要遵守的。作者如是在短暫的實踐之後馬上奉上了一章tdd的概念與模式。 

在這一章不僅僅介紹了「夾具」、「測試替身」、「基於狀態的測試」等基本名詞概念,還給出了很多實用的技巧,比如三角法,就像幾何中的三點確定乙個平面,我們也用幾個測試來固定乙個產品**。嗯,還有不能不提的測試驅動基本原則:1)、絕不跳過重構(如果沒有重構這一環節,即使你有很完備的測試,還是會生產出很多糟糕的**,因為使用測試驅動我們總是想盡快通過測試,甚至很少去思考設計上的問題) 2)、盡快變綠 3)、出錯後放慢腳步(記得曾經在**看到過,敏捷就是慢的藝術,在寫**時切忌跑得過快,貪多,我們要做到每一步都胸有成竹,如果出錯了不要緊,說明你走得太快了,放慢你的腳步)。 

如果你曾經試圖過給已經寫就的**加單元測試,你會發現總有一些東西在阻礙你:繼承(我們此時只關注子類,但父類很多的東西帶來了累贅)、靜態(static關鍵字修飾的東西或單件模式是一種緊耦合,很難使用測試替身替代,也很難模擬)。 

和開發產品**一樣,測試驅動也有很多很有用的模式,銘記這些模式會讓你事半功倍。 

最後作者用很短的篇幅介紹了怎麼在遺留**上進行工作,如果你沒時間閱讀《修改**的藝術》這本書,這裡是個很不錯的總結。 

第五、六、七、八章 

雖然前幾章已經很精彩了,但是碰到有些具體場景你可能還是束手無策,發現前面幾章的內容還是有點不夠用。嗯,後面作者用了四章來闡述測試驅動在具體場景中如何工作:在web開發中如何和控制器一起工作?如何驗證渲染的檢視是不是正確的?如何使用測試驅動開發出dao層?對於dao層我們還是一如既往的使用模擬物件麼?如果寫整合測試我們該怎麼做?有的時候我們經常會發現測試隨機失敗,這太讓人氣餒了,其實你是遇見了不可**的問題,作者也準備了一章篇幅來介紹這些問題:與時間相關的問題,與多執行緒相關的問題。第五章介紹了web開發,第八章確實桌面開發了,如果你能給你的桌面應用寫出很好的單元測試,說明你的桌面應用中業務邏輯也很好的與介面解耦了,這不是我們一直追求的麼?呵呵。 

第九、十、十一章 

嗯,本書極具特色的一部分來了:驗收測試。在這一部分講解了使用者故事,驗收測試的工具驗收測試的策略。實際上第三部分作者不僅僅是在講解驗收測試驅動開發,更是在談論敏捷的開發方式,如果不想投入大把時間去看使用者故事、敏捷計畫等相關的專門書籍,本部分是乙個很好的概覽。

2015第17週三專注

古訓有言 欲多則心散,心散則志衰,志衰則思不達 簡單理解就是人的慾望和涉及面多了,心思和精力就會分散,這樣自己內心的志向就會被遺忘或衰退,而志向和目標不明確就使自己變得糊塗,這樣就很難成就一番事業!要集中精力專注於某一種很有意義或很需要的事,需要幾個先決條件 一 興趣。可以是先天的,也可以是後天的,...

2015第36週日每天進步1

20世紀50年代,美國質量管理大師戴明博士多次到日本松下 索尼 本田等企業講學,他傳授了最簡單的方法 每天進步1 日本的這些企業照著做了,收到了明顯效果。現在日本先進企業評比,最高榮譽獎仍是 戴明博士獎 但是要做到每天進步1 很不容易,大部分人每天工作8小時能讓自己在本職工作上進步1 嗎,然後是工作...

POJ c 程式設計程式設計題第4周 三

注意 總時間限制 1000ms 記憶體限制 65536kb 寫乙個二維陣列類 array2,使得下面程式的輸出結果是 0,1,2,3,4,5,6,7,8,9,10,11,next 0,1,2,3,4,5,6,7,8,9,10,11,程式 include include using namespace...