出版時間:2010年8月 出版社:機械工業(yè)出版社 作者:Steve Freeman,Nat Pryce 頁數(shù):253 譯者:王海鵬
Tag標簽:無
前言
隨著軟件發(fā)布周期越來越短,一個困境出現(xiàn)了:如何在更少的時間里發(fā)布更多的軟件,并持續(xù)地發(fā)布下去?我們需要新的觀點來解決這個困境。只有技術的轉變是不夠的。 本書展示了這樣一個新觀點——假如軟件不是“做”出來的,不像我們做紙飛機那樣,疊好后就飛出去,情況會怎樣呢?假如我們像對待有價值、有產出的農作物那樣(培育、剪草、收割、施肥和灌溉)對待軟件,情況會怎樣呢?幾十年或幾個世紀以來,傳統(tǒng)的農夫知道如何讓農作物高產。如果我們以同樣的方式對待程序,軟件開發(fā)會有什么不同呢? 我印象最深的是,本書同時提供了這種觀點轉變的哲學思想和實現(xiàn)機制。本書的作者是善于寫代碼的實踐者,他們也善于教別人寫代碼。您從中可以學到如何保持高產,以及如何重新審視您的程序。 這里展示的測試驅動開發(fā)的方式不同于我所使用的方式。雖然我還不能清晰表達其中的區(qū)別,但我已從作者清楚、自信的技巧介紹中受益。方言的多樣化已經為我進一步優(yōu)化開發(fā)提供了思考的新源泉。本書展示了一個有條理的、一致的開發(fā)體系,其中的不同技巧相互支持?! ∥医ㄗh您閱讀本書,通過書中的例子,了解作者如何思考編程,如何實踐編程。這種體驗將豐富您的軟件開發(fā)方式,有助于您編程,而且同樣重要的是,有助于您以不同的觀點來看待您的程序。
內容概要
本書采用通俗易懂的比喻,眾所周知的編程語言,短小精悍的工作實例,深入淺出的分析處理——仿佛在和幾位世界級的編程高手一邊喝茶,一邊聊天,循序漸進地讓讀者在不知不覺中進入編程的最高境界。即使是剛剛入門的初學者,也會從中找到讀書的樂趣,因為可以從一開始就找到開啟面向對象開發(fā)大門的鑰匙;隨著經驗的積累,編程水平的提高,再來看這本書,用不同的視角重新審視程序,又會體會到更深層的編程哲學?! ”緯蔷幊虗酆谜叩膯⒚芍改?,更是系統(tǒng)分析人員、測試人員、程序設計人員、軟件開發(fā)人員以及面向對象程序研究人員等專業(yè)人士革新編程思想的必備手冊。
作者簡介
Steve Freeman是一名獨立咨詢師,擅長領域是敏捷軟件開發(fā)(http://www.m3p.co.uk)。他與Nat Pryce一同贏得了2006年敏捷聯(lián)盟的Gordon Pask獎。他是倫敦極限星期二俱樂部(London Extreme Tuesday Club)的創(chuàng)建成員,也是第一任倫敦XP日(London XP Day)的主席,還經常在國際
書籍目錄
對本書的贊譽 譯者序 序 前言 作者簡介 致謝 第一部分 簡介 第1章 測試驅動開發(fā)的要點 第2章 測試驅動開發(fā)與對象 第3章 工具介紹 第二部分 測試驅動開發(fā)過程 第4章 啟動測試驅動循環(huán) 第5章 保持測試驅動循環(huán) 第6章 面向對象風格 第7章 實現(xiàn)面向對象設計 第8章 基于第三方代碼構建 第三部分 工作的例子 第9章 委托開發(fā)一個拍賣狙擊者 第10章 可行走的骨架 第11章 通過第一個測試 第12章 準備競拍 第13章 狙擊者發(fā)出競拍出價 第14章 狙擊者贏得拍賣 第15章 邁向真正的用戶界面 第16章 狙擊多項物品 第17章 分解Main 第18章 填充細節(jié) 第19章 處理失敗 第四部分 可持續(xù)的測試驅動開發(fā) 第20章 聆聽測試 第21章 測試可讀性 第22章 構造復雜的測試數(shù)據(jù) 第23章 測試診斷 第24章 測試的靈活性 第五部分 高 級 主 題 第25章 測試持久性 第26章 單元測試與線程 第27章 測試異步代碼 后記 模擬對象簡史 附錄A jMock2速查手冊 附錄B 編寫Hamcrest Matcher 參考文獻
章節(jié)摘錄
這意味著在實踐中我們可以把系統(tǒng)分成兩個“世界”:值和對象。值以函數(shù)式的方式對待,對象則實現(xiàn)了系統(tǒng)有狀態(tài)的行為。在第三部分,您會看到書中的編碼風格是如何根據(jù)我們面對的世界而變化的。 在本書中,我們將使用術語“對象”來指具有標識符、狀態(tài)和處理過程的實例,而不用于指值。似乎沒有其他可以接受的術語同時包含這兩種含義(如實體或過程)?! ?.3 對象通信 只有當對象設計容易組合時,我們才能從這種高層次的、聲明式的方式中獲益。在實踐中,這意味著它們遵循相同的通信模式,也意味著它們之間的依賴關系是顯式的。通信模式是一組規(guī)則,決定了一組對象相互交談的方式。這些規(guī)則包括它們扮演的角色、它們可以發(fā)送什么消息、何時可以發(fā)送等。在Java這樣的語言中,我們可以利用(抽象的)接口來標識對象的角色,而不是利用(具體的)類——雖然接口不能定義任何我們想說的內容?! 「鶕?jù)我們的觀點,領域模型就在這些通信模型之中,因為正是它們?yōu)閷ο箝g可能的關系賦予了意義。以動態(tài)的、互相通信的結構來思考一個系統(tǒng),這對于靜態(tài)的分類來說是思考方式的巨大轉變,而我們中的大多數(shù)人在剛接觸對象時學到的都是靜態(tài)的分類。領域模型甚至都不是明顯可見的,因為在我們使用的編程語言中,通信模式沒有明確表達出來。本書希望展示測試和模擬對象如何幫助我們更清楚地看到對象之間的通信?! ∵@里有一個小例子,說明關注對象間的通信是怎樣指導設計的?! ≡谝粋€視頻游戲中,對象可能包括:參與者(如玩家和敵人)、場景(玩家飛過的環(huán)境)、障礙(玩家遇上就會撞毀)、效果(如爆炸和煙霧)。還有一些腳本,它們在游戲過程中在后臺大量生成對象?! 耐婕业囊暯莵碚f,這是一種很好的分類,因為它支持我們在玩游戲時需要做出的決定,也就是從外界與游戲進行交互時做決定。但是,對于實現(xiàn)這個游戲來說,這不是很有用的分類。游戲引擎必須顯示可見的對象,告訴對象隨時間產生動畫效果,檢測實體對象間的碰撞,并在實體對象發(fā)生碰撞時,把決定代理給碰撞處理器,如圖2-2所示?! ≌缒趫D2-2中看到的,這兩種視角是不同的,一個是從游戲引擎的角度來看,另一個是從參與對象實現(xiàn)的角度來看。例如,障礙是可見的、實體的,而腳本是碰撞處理器和動畫的,但不是可見的。游戲中的對象扮演了不同角色,取決于引擎當時對它們的需要。這種靜態(tài)分類與動態(tài)通信之間的不匹配意味著,我們不太可能對游戲對象得到一個整齊的類層次結構,同時又能適合引擎的需要?! ≡谧詈玫臅r候,類層次結構代表了應用的一個維度,它提供了一種機制,讓對象之間能共享實現(xiàn)細節(jié)。例如,我們可能有一個基類來實現(xiàn)基于幀的動畫的共同特征。在最壞的時候,我們曾看到許多代碼庫(包括我們自己的),充滿了復雜性和重復,因為使用一種機制來表達多個概念。
媒體關注與評論
“終于有一本書用豐富的代碼揭示TDD和OOD之間的共生關系。本書值得保存?!薄 猂obert C.Martin “如果您想成為當前TDD領域的一名專家,就需要理解本書中的思想。” ——Michael Feathers
編輯推薦
《測試驅動的面向對象軟件開發(fā)》對于更快交付更好的軟件,測試驅動開發(fā)(TDD)現(xiàn)在是一種已經確立的技術。TDD基于一個簡單的思想:在寫產品代碼之前先寫它的測試代碼。但是,這個“簡單”的思想需要一些技能和判斷才能做得好?,F(xiàn)在有了一本TDD實踐指南。讓您深入理解那些基本概念,并向您展示了如何讓測試來引導開發(fā),“培育”出一致的、可靠的。可維護的軟件。 作者描述了他們使用的過程,努力實現(xiàn)的設計原則。以及完成工作的一些工具。通過一個詳細實現(xiàn)的例子,您可以看到TDD如何在各個層次上工作,如何利用測試來驅動特征開發(fā)和代碼的面向對象結構,如何利用模擬對象來發(fā)現(xiàn)并描述對象之間的關系。在這個過程中。《測試驅動的面向對象軟件開發(fā)》系統(tǒng)地討論了開發(fā)團隊在使用TDD時遇到的挑戰(zhàn)——從過程中集成TDD到測試最難的特征?! ∨f代碼帶來的新思維,Robert C.Martin高度評價,Kent Berk作序推薦?! 稖y試驅動的面向對象軟件開發(fā)》包括以下內容: ●如何有效實現(xiàn)TDD:啟動,然后在整個項目中保持你們的沖勁?! 袢绾蝿?chuàng)建更干凈的、更有表現(xiàn)力的、更可維護的代碼?! 袢绾卫脺y試。對可持續(xù)的品質保持最嚴格的關注。 ●理解在真實軟件開發(fā)的環(huán)境中,TDD、模擬對象、面向對象設計如何交織在一起?! 袢绾卫媚M對象來指導面向對象設計?! 袢绾卧赥DD困難的地方取得成功:管理復雜的測試數(shù)據(jù)。測試持久層和并發(fā)。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載