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