出版時間:2012-9-5 出版社:機械工業(yè)出版社華章公司 作者:Alan Shalloway,Scott Bain,Ken Pugh,Amir Kolsky 頁數(shù):185 譯者:鄭立,鄒駿,黃靈
Tag標簽:無
前言
前言盡管本書是一本技術性的書籍,但里面涉及的很多想法都是我們在NetObjectives公司的敏捷開發(fā)培訓課程中迸發(fā)出來的。過去,在給學生傳授如何采用Scrum或者精益方法的時候,經(jīng)常有人會問我:“我們應該怎樣做,才有能力一步步地構(gòu)造我們的軟件呢?”答案對我而言顯而易見。他們其實真正想問的問題是:“我們怎么才能用最好的方式,學習如何一步步地構(gòu)造我們的軟件?”關于這個問題,有下面三種方法:讀書我相信任何一個讀過并且讀懂了《DesignPatternsExplained:ANewPerspectiveonObject- OrientedDesign》和《EmergentDesign:TheEvolutionaryNatureofProfessionalSoftwareDevelopment》的人,都知道如何一步步地寫軟件。參加培訓這個方法要更好一點。如果能夠把NetObjectives公司的課程(設計模式(DesignPatterns)和浮現(xiàn)式設計(EmergentDesign))結(jié)合在一起上,那就無法超越了。學習一些“小舵板”(trimtab)軟件開發(fā)中的“小舵板”使得一步步地構(gòu)造軟件更加有效。第一種方法需要投入很多時間,第二種方法則花費很高。相比之下,第三種方法所需要的投入則小得多。遺憾的是,這些“小舵板”不是簡簡單單就可以講清楚的?!笆裁词切《姘澹╰rimtab)呢?”它們是飛機和船只上的零件,用以減少控制飛機副翼或者船舵所需要的能量。但是這里“小舵板”的意思則是來源于BuckyFuller曾經(jīng)提到過的東西。在思考一個小小的人類個體能夠做什么的時候,一些東西曾經(jīng)給過我很深的沖擊。想象一下“瑪麗皇后”號——當整艘船遠去,它的舵浮現(xiàn)眼前。你會發(fā)現(xiàn),在舵的邊緣,有一個小零件,叫做“小舵板”。它是一個微縮版的船舵。只需移動這塊小小的舵板,產(chǎn)生一個輕微的壓力,就可以拉動整個船舵轉(zhuǎn)動,毫不費力。我認為小小的個體也可以成為“小舵板”。一個人在社會中的行為,就好比一艘船的舵板,細微的行動也可以驅(qū)動社會這艘大船向前行駛。所以,請叫我“小舵板”。換言之,這里要學習的“小舵板”,就是指可以讓我們在較小投入下獲得最深刻理解的措施和真知灼見。在設計模式課程中,我們識別出三個基本的“小舵板”。實踐了這三點的學生,他們都看到了自己在設計和編程能力上的巨大提高?!斑@三點是什么?”當然就是本書要講的內(nèi)容:意圖導向編程(ProgrammingbyIntention)。把使用從構(gòu)造中分離。編碼前考慮可測試性。這三點非常簡單,實踐它們也幾乎不會增加額外的時間。實際上,它們都是與封裝相關的。第一點和第三點封裝的是行為的具體實現(xiàn),而第二點則顯然著重于封裝如何構(gòu)造。這個主旨非常重要,因為對實現(xiàn)進行封裝是一種抽象過程。它是眾多實現(xiàn)方式中的一種——在未來,可能還會有其他的方式。我認為,把新代碼集成到原有系統(tǒng)時遇到嚴重問題的主要原因,就是因為忘記了這一點。要推薦的第四個“小舵板”是,遵循Shalloway原則。這一點需要多花點時間,但總是很有用處。本書就是“小舵板”的匯集。這些“小舵板”都是NetObjectives公司的講師和教練發(fā)現(xiàn)的敏捷軟件開發(fā)人員可以遵從的基本要素,告訴我們?nèi)绾我杂行У男问絹砭帉懜哔|(zhì)量的代碼。你可以在閑暇的時間里,按任何的章節(jié)順序來閱讀本書。也就是說,這些章節(jié)順序如此編排僅僅是為了協(xié)助我們理順思緒而已。
內(nèi)容概要
本書的4位作者都是世界頂級的軟件開發(fā)專家和敏捷導師,都有數(shù)十年的軟件行業(yè)從業(yè)經(jīng)驗,其中3位曾榮獲Jolt大獎。本書是敏捷軟件開發(fā)領域公認的經(jīng)典著作,權威性毋庸置疑。
書中內(nèi)容圍繞“敏捷式編程”這一主題展開,對每一位敏捷軟件開發(fā)人員都應該掌握的核心技能和技術進行了深入闡述,總結(jié)出了大量最佳實踐,提供了一整套最精煉的技術集合,可以幫助他們在開發(fā)中變得游刃有余,極大地提高開發(fā)效率和軟件質(zhì)量。
全書共分四個部分:第一部分(1~7章),闡述了在軟件開發(fā)過程中能起到“四兩撥千斤”作用的幾種思想方法(“小舵板”),如意圖導向編程、分離構(gòu)造和使用、測試先行和Shalloway原則等,并總結(jié)了業(yè)界常用的幾種實踐,包括如何封裝、面向接口的設計和驗收測試驅(qū)動等;第二部分(8~9章),對過度設計和持續(xù)集成這兩個問題進行了深入的探討,并給出了最佳實踐;第三部分(10~13章),作者分享了很多只有在他們的教學現(xiàn)場才能獲得的經(jīng)驗,這些經(jīng)驗是優(yōu)秀架構(gòu)師應該具備的,具體包括共性和可變性分析、以開放關閉原則為目標的重構(gòu)、需求與功能接口、何時以及如何使用繼承等重要內(nèi)容;第四部分是附錄,介紹了統(tǒng)一建模語言、提高代碼質(zhì)量的原則,以及如何封裝原始數(shù)據(jù)類型等。
作者簡介
Alan Shalloway,Net
Objectives公司創(chuàng)始人及CEO。Alan有40多年工作經(jīng)驗,他是計算機軟件行業(yè),特別是精益、看板、產(chǎn)品系列管理、scrum和敏捷設計方面的思想領導者。他幫助公司在企業(yè)級層面向精益和敏捷方式轉(zhuǎn)型,同時教授員工相關課程。Alan開發(fā)了關于精益-敏捷的培訓輔導方法,這幫助Net
Objectives公司的客戶取得了長期的可持續(xù)的生產(chǎn)力。他經(jīng)?;钴S于全球范圍的高端峰會并發(fā)表精彩演講。他還是《Design
Patterns Explained: A New Perspective on Object-Oriented
Design》(Jolt獲獎作品)和《Lean-Agile Pocket Guide for Scrum
Teams》的主要作者。在他的職業(yè)生涯中,Alan從事過多個行業(yè)。他是精益軟件和系統(tǒng)協(xié)會(the Lean Software and
Systems Consortium)的共同創(chuàng)始人及董事會成員。他擁有麻省理工學院計算機科學系的碩士學位和艾莫利大學(Emory
University)數(shù)學系的碩士學位。更多詳細信息請查看Twitter上的@alshalloway。
Scott
Bain,在計算機技術方面有將近40年經(jīng)驗,從事過軟件開發(fā)、軟件工程、框架設計等方面的工作。Scott也曾經(jīng)從事課堂和遠程教學等教育活動,包括課程的設計、實施培訓和相關管理,給用戶提供認證培訓和終端用戶培訓。目前Scott在敏捷分析和設計模式、高級軟件設計和可持續(xù)的測試驅(qū)動開發(fā)等方面進行授課和提供咨詢。同時,Scott還經(jīng)常在JavaOne和SDWest這樣的開發(fā)者研討會上進行精彩的演講。他是《Emergent
Design: The Evolutionary Nature of Professional Software
Development》的作者,此書榮獲了Jolt生產(chǎn)力獎。
Ken Pugh, Net
Objectives公司高級咨詢師。憑借多年的豐富經(jīng)驗,他提供培訓和輔導,幫助公司向精益-敏捷轉(zhuǎn)型。他熱衷于研究溝通(特別是有效地傳遞需求)、業(yè)務價值交付,以及用精益原則來快速進行高質(zhì)量的交付。同時,在技術課題方面,他提供從面向?qū)ο笤O計到Linux/Unix等多方面的培訓和指導。此外,他還寫過好幾本編程書籍,包括獲得2006年Jolt大獎的《Prefactoring:
Extreme Abstraction, Extreme Separation, Extreme
Readability》。最近的一本書是《Lean-Agile Acceptance Test Driven Development:
Better Software Through
Collaboration》。他的客戶遍及倫敦、波士頓、悉尼、北京和海得拉巴。工作之余,他喜歡滑雪、帆船、自行車和阿巴拉契亞徒步登山活動。
Amir Kolsky,Net
Objectives的資深咨詢師、教練和培訓師。Amir從事計算機科學領域已經(jīng)超過25年了。他在IBM研究院工作過10年,此外有9年時間在各種大小類型的公司擔任過首席架構(gòu)師和首席技術官等職位。他從2000年開始接觸敏捷開發(fā)。他先后創(chuàng)建了MobileSpear
以及XPand軟件公司,專門在以色列和歐洲提供敏捷輔導、軟件教育和敏捷項目實施。目前Amir把他的專業(yè)經(jīng)驗帶到了Net
Objectivs,作為敏捷教練和講師,提供關于精益和敏捷軟件流程、工具和實踐、Scrum、極限編程、設計模式以及測試驅(qū)動開發(fā)方面的培訓。
書籍目錄
推薦序
譯者序
叢書前言
前言
致謝
第一部分最關鍵的小舵板
第1章意圖導向編程
1.1意圖導向編程:一個實例
1.2優(yōu)點
1.2.1方法的內(nèi)聚性
1.2.2可讀性和表達性
1.2.3調(diào)試
1.2.4重構(gòu)和增強
1.2.5單元測試
1.2.6更易修改和擴展
1.2.7在代碼中發(fā)現(xiàn)模式
1.2.8可遷移的方法
1.3小結(jié)
第2章分離構(gòu)造和使用
2.1一個重要的問題
2.2兩種視圖
2.2.1創(chuàng)建視圖
2.2.2使用視圖
2.2.3隱藏的部分更容易改動
2.2.4現(xiàn)實的做法
2.2.5一些實際的考量因素
2.3給你的決策計時
2.4重載和C++
2.5自我查驗
2.6小結(jié)
第3章代碼未動,測試先行
3.1一個小舵板:測試與可測試性
3.2什么是測試
3.3可測試性和代碼質(zhì)量
3.4案例學習:可測試性
3.4.1隨時應對變化
3.4.2青蛙一樣的程序員
3.5一個關于測試先行的思考
3.5.1更好的設計
3.5.2更清晰的范圍和避免不必要的工作
3.5.3降低復雜性
3.5.4其他優(yōu)勢
3.5.5沒有例外
3.6小結(jié)
第4章Shalloway法則和Shalloway原則
4.1冗余的種類
4.1.1復制和粘貼
4.1.2“魔法”數(shù)字
4.1.3其他類型
4.2重新定義冗余
4.3其他形式的冗余
4.4設計模式在減少冗余時扮演的角色
4.5很少有開發(fā)人員花費大量的時間去“修改”代碼錯誤
4.6冗余對代碼質(zhì)量其他方面的影響
4.7小結(jié)
第5章封裝
5.1未封裝的代碼:對全局變量的破壞
5.2成員標志的封裝
5.3自封裝成員
5.4預防代碼更改
5.5封裝引用對象的難點
5.6用get()來打破封裝
5.7對象類型的封裝
5.8設計的封裝
5.9各個層次的封裝
5.10實用性建議:把困難封裝起來
5.11小結(jié)
第6章面向接口的設計
6.1針對接口的設計
6.2接口的定義
6.3接口約定
6.4分離不同的視圖
6.5接口的模擬實現(xiàn)
6.6讓接口保持簡單
6.7避免過早采用繼承體系
6.8接口和抽象類
6.9依賴反轉(zhuǎn)原則
6.10多態(tài)性概述
6.11不是每個類都需要接口
6.12小結(jié)
第7章驗收測試驅(qū)動開發(fā)
7.1兩種開發(fā)流程
7.2驗收測試
7.3一個關于驗收測試的實例
7.4實現(xiàn)驗收測試
7.4.1針對用戶界面的測試腳本
7.4.2測試用戶界面
7.4.3XUnit測試
7.4.4驗收測試框架
7.4.5四種方法間的聯(lián)系
7.5一個練習
7.6如果客戶不告訴你怎么做的時候,你應該怎么辦
7.7小結(jié)
第二部分基本態(tài)度
第8章避免過度設計或設計不足
8.1給開發(fā)人員的箴言
8.2代碼質(zhì)量病理學
8.3避免過度設計或設計不足
8.4把復雜度和返工最小化
8.5永不把代碼變得更糟/僅在有目的的情況下降低代碼質(zhì)量
8.6使代碼容易修改,足夠強大健壯,適應變化并安全可靠
8.7在非面向?qū)ο蟮拇a或遺留系統(tǒng)里編寫易于修改代碼的策略
8.8小結(jié)
第9章持續(xù)集成
9.1建立源代碼分支
9.1.1多版本:特殊分支
9.1.2孤立地工作:開發(fā)分支
9.1.3問題、解決方案、新的問題
9.2將主干內(nèi)容合并回分支
9.3測試驅(qū)動開發(fā)與合并成本
9.4持續(xù)集成
9.5持續(xù)集成服務器
9.6小結(jié)
第三部分設計問題
第10章共性和可變性分析
10.1用動詞和名詞來做指南:警告,前面有危險
10.2真正的問題是什么
10.3我們所需要知道的
10.4共性和可變性分析
10.4.1共性分析
10.4.2可變性分析
10.4.3面向?qū)ο笤O計“一箭三雕”
10.5發(fā)掘?qū)ο蟮男路妒?br />10.6分析矩陣:一個用例學習
10.7小結(jié)
第11章以開放關閉原則為目標的重構(gòu)
11.1開放關閉原則
11.1.1從開放關閉原則引申到其他
11.1.2開放關閉原則是一個“原則”
11.2重構(gòu)
11.2.1為何重構(gòu)
11.2.2負債還是投資
11.2.3重構(gòu)和遺留系統(tǒng)
11.2.4以開放關閉原則為目標的重構(gòu)
11.2.5“及時”設計
11.3小結(jié)
第12章需求與功能接口
12.1迪米特法則
12.2耦合,可惡的耦合,還有依賴
12.2.1耦合和可測試性
12.2.2需求與功能
12.3理想的分離方案:需求接口和
功能接口
12.4回到迪米特法則
12.5小結(jié)
第13章何時以及如何使用繼承
13.1“四人組”
13.2初始向量,最終結(jié)果
13.3優(yōu)先委托
13.4使用繼承與使用委托
13.5繼承的使用
13.6可擴展性
13.7在敏捷開發(fā)里應用四人組的訓誡
13.8測試問題
13.9更多
第四部分附錄
附錄A統(tǒng)一建模語言概覽
附錄B代碼質(zhì)量
附錄C封裝原始數(shù)據(jù)類型
章節(jié)摘錄
第一部分Part1最關鍵的小舵板第1章意圖導向編程第2章分離構(gòu)造和使用第3章代碼未動,測試先行第4章Shalloway法則和Shalloway原則第5章封裝第6章面向接口的設計第7章驗收測試驅(qū)動開發(fā)第1章Chapter1意圖導向編程舊貌總能換新顏。那些給我們寫了極限編程書籍的人們這些人包括:KentBeck、CynthiaAndres、MartinFowler、JamesNewkirk、RobertMartin、RonJeffries、LisaCrispin、TipHouse、AnnAnderson和ChetHendrickson。也在著力于推廣一系列軟件開發(fā)的最佳實踐。其中一個實踐,他們稱為“意圖導向編程”(ProgrammingbyIntention,也稱目的導向編程)。它并非一個全新的概念,數(shù)年前,在COBOL和Smalltalk等語言中,它是個非常普遍的編碼技術(常常稱為“自頂向下”編程)。實踐確實是個好東西:經(jīng)過時間檢驗的東西往往最可靠,因為它們的價值在真實環(huán)境中被一次次地證明。本章中,我們將一起來考察這一實踐,首先,我們簡單地說明它是什么,然后研究我們遵照著做會有什么好處。最后討論它與測試、可測試性以及設計方面的相關性。1.1意圖導向編程:一個實例在這個實例中,需要寫些代碼。我們需要創(chuàng)建一個服務程序,它接受一個業(yè)務交易,然后提交。我們決定(不管是正確或錯誤)先簡單創(chuàng)建一個對象,這個對象只包含一個公共方法來完成這件事。具體需求如下:交易信息開始于一串標準ASCII字符串。這個信息字符串必須轉(zhuǎn)換成一個字符串的數(shù)組,數(shù)組存放的值是此次交易用到的領域語言(domainlanguage)中所包含的詞匯元素(token)。每一個詞匯元素必須標準化(第一個字母大寫,其余字母小寫,空格和非字母數(shù)字的符號都要刪掉)。包含超過150個詞匯元素的交易,應該采用不同于小型交易的方式(不同的算法)來提交,以提高效率。如果提交成功,API方法應該返回“true”;失敗,則應該返回“false”。這里并沒有涉及某些細節(jié)(比如提交的算法具體是什么),這樣就可以只關注我們感興趣的實踐。有一點是應該充分利用的:在學習一種程序語言編碼的時候,我們會把問題分解為一系列的功能性步驟,在這個過程中,我們的思維不斷地得到鍛煉。隨著代碼寫得越來越多,我們解決這類問題的能力也變得越來越強。繼續(xù)考慮前面的那個問題,需求列出的每一點要求都代表一個功能性步驟。在寫代碼的過程中,我們會按照一定的順序,有意識地去完成每一點要求。而意圖導向編程是指,先假設當前這個對象中,已經(jīng)有了一個理想方法,它可以準確無誤地完成你想做的事情,而不是直接盯著每一點要求來編寫代碼。先問問自己:“假如這個理想的方法已經(jīng)存在,它應該具有什么樣的輸入?yún)?shù),返回什么值?還有,對我來說,什么樣的名字最符合它的意義?”
編輯推薦
《敏捷技能修煉:敏捷軟件開發(fā)與設計的最佳實踐》編輯推薦:4位世界頂級軟件開發(fā)專家、敏捷導師兼Jolt大獎獲得者數(shù)十年工作經(jīng)驗結(jié)晶,敏捷軟件開發(fā)領域公認的經(jīng)典著作。圍繞意圖導向編程、分離構(gòu)造和使用、測試先行、Shalloway原則、面向接口設計、測試驅(qū)動開發(fā)、避免過度設計、持續(xù)集成、共性和可變性分析、重構(gòu)等核心技術主題給出了大量最佳實踐,字字珠璣。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載