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