《浮現式設計》是由趙俐編寫,於2011年8月出版。作者闡述了如何在整個軟體生命周期中高效地開發、管理變更以及持續交付健壯、可靠且經濟高效的系統。
基本介紹
- 中文名:浮現式設計
- 外文名:Emergent Design: The Evolutionary Nature of Professional Software Development
- 作者: 趙俐
- 出版:人民郵電出版社
- 類型:書
基礎信息,內容簡介,作者簡介,譯者簡介,媒體評論,圖書目錄,
基礎信息
原書名: Emergent Design: The Evolutionary Nature of Professional Software Development
原出版社: Addison-Wesley Professional作者: (美)Scott L. Bain
譯者: 趙俐 華潔
ISBN:9787115259783
上架時間:2011-8-25
出版日期:2011 年8月
開本:16開
頁碼:278
內容簡介
隨著軟體的不斷進化和成熟,軟體開發過程變得越來越複雜,越來越依賴各種方法學和開發方法。要想讓軟體兌現它的承諾,提供長期穩定的回報,軟體開發必須足夠 成熟,成為一門真正的專業。本書闡明了構建下一代軟體的方法。作者把當今最重要的開發原則匯集成了一個統一的、流線化的、實用的軟體開發方法,他汲取了模 式、重構和測試驅動開發的精華,闡述了如何在整個軟體生命周期中高效地開發、管理變更以及持續交付健壯、可靠且經濟高效的系統。
本書反映了對系統 開發的自然流程的深刻理解,並幫助開發人員順應這個流程,而不是反其道而行之。Bain向我們介紹了一次只做一個步驟的自然而生的設計的原則和實踐,展示 了如何隨著時間的推進逐步促進軟體系統的自然進化,使系統更好地工作並提供更大價值。為了演示這種方法,書中提供了大量代碼示例,最後還提供了一個完整的 案例分析。
作者簡介
擁有30年從業經驗的資深計算機技術專家,主要從事開發、工程和設計。他還曾負責設計、提供和管理認證培訓課程,從事最終用戶的技能培訓,既有課堂授課,也 有遠程教育。Scott一直在華盛頓州普捷灣畔的Net Objectives公司工作,負責培訓課程以及有關設計模式、重構、單元測試、測試驅動開發的諮詢工作。Scott與Net Objectives的CEO Alan Shalloway一起為敏捷環境中的設計模式集成做出了卓越的貢獻。
譯者簡介
趙俐 從事軟體開發相關工作14年,6精研軟體工程、測試、敏捷設計、C#等領域。2008年開始與圖靈公司合作,曾翻譯出版《領域驅動設計與模式實戰》、《調試九法:軟硬體錯誤的排查之道c》、《領域驅動設計:軟體核心複雜性應對之道》、《一頁紙IT項目管理》。
媒體評論
“這本書就是一座智慧的金礦!本書蘊藏的豐富的智慧來自軟體工程領域多年經驗的累積。它集合了大量軟體開發的最佳實踐,並將其運用於自然而生的設計的理念之中。本書是軟體開發人員的必讀書籍!我給開發小組領導者的建議是:那些沒讀過這本書的程式設計師,到年末統統開掉!”
——Amazon
“這本書的不少代碼示例是用Java寫的,也有一些是C#,它們淺顯易懂、直指要害。本書寫作風格獨特,Bain輕鬆隨意的敘述手法讓枯燥的技術問題看起來妙趣橫生,他甚至拿自己現實生活中的小事作類比,讀來讓人忍俊不禁。”
——Truewill
圖書目錄
《浮現式設計:專業軟體開發的演進本質》
第1章 軟體開發這個職業1
1.1 人類製作軟體已經有多久的歷史了1
1.2 軟體開發是一種什麼樣的活動2
1.3 軟體開發缺少了什麼4
1.4 誰說了算6
1.5 獨特性6
第2章 從衣櫥到探月8
2.1 軟體開發中的模式和專業化8
2.2 andrea的衣櫥9
2.3 探月13
2.3.1 因素的連鎖變化16
2.3.2 不同的因素導致不同的設計16
2.3.3 還有更多環境因素17
2.3.4 成本和獲益18
2.3.5 火星探險18
2.4 模式的價值19
2.5 小結20
第3章 軟體開發的本質21
3.1 失敗率過高21
.3.2 成功的定義22
3.3 standish group23
3.4 做了錯誤的事情24
3.5 做事的方式錯了25
3.6 隨著時間的推移,軟體開發也有所改善27
3.7 一個原因:土木工程的類比27
3.8 放棄希望29
3.9 有時等待和拖延也是必要的30
3.10 橋是硬的,軟體是軟的30
3.11 我們在變化的海洋中游泳31
3.12 接受變化31
3.13 擁抱變化32
3.14 利用變化32
3.15 更好的類比:不斷演進的系統34
3.16 小結37
第4章 代碼的演進:初級階段38
4.1 用對象結構來代替過程邏輯38
4.2 面向對象和模式的起源39
4.3 一個示例:簡單條件和proxy模式40
4.4 下一步:多路徑條件選擇43
4.5 為什麼要採用對象結構45
4.6 從多個條件中選擇一個46
4.7 小結46
第5章 使用和發現模式48
5.1 根據上下文進行設計:我做的另一個
木匠活48
5.2 模式引出了另一個看問題的角度55
5.3 模式提供了一種討論設計的語言55
5.4 本書中的模式56
5.5 小結56
第6章 軟體開發金字塔58
6.1 構成專業的元素58
6.2 一種形象的表示60
6.3 小結60
第7章 注重軟體質量61
7.1 封裝62
7.2 內聚62
7.2.1 方法內聚63
7.2.2 視角層的內聚65
7.2.3 類內聚66
7.2.4 內聚到何種程度才足夠67
7.3 耦合67
7.3.1 有意耦合與意外耦合68
7.3.2 耦合類型69
7.4 冗餘73
7.5 可測試性77
7.6 可讀性78
7.7 軟體的病症79
7.7.1 內聚性較差的信號79
7.7.2 意外耦合或不合邏輯耦合的
信號80
7.7.3 冗餘的信號81
7.8 小結81
第8章 注重原則和智慧結晶83
8.1 使用與創建分離83
8.1.1 fowler的三層視角83
8.1.2 另一種視角84
8.1.3 使用的視角85
8.1.4 一個單獨的視角:創建86
8.1.5 最後考慮構造細節87
8.1.6 回到現實88
8.2 開閉原則89
8.2.1 類級的開閉原則90
8.2.2 方法級的開閉原則91
8.3 依賴倒置原則92
8.4 gof的建議93
8.4.1 設計方法的接口93
8.4.2 設計類的接口94
8.4.3 gof:優先使用對象聚合而非類
繼承95
8.5 gof:在設計中思考什麼應該變化並
封裝會發生變化的概念98
8.6 小結100
第9章 注重實踐101
9.1 統一編碼風格101
9.1.1 注釋102
9.1.2 命名類、方法和變數103
9.1.3 編碼標準的好處104
9.2 意圖導向編程105
9.3 封裝構造函式107
9.3.1 原則與實踐110
9.3.2 做出決定110
9.4 公共性—可變性分析111
9.5 實踐與自由114
9.6 小結115
第10章 注重紀律:單元測試116
10.1 測試的經濟學116
10.1.1 單元測試117
10.1.2 先寫測試119
10.2 junit框架120
10.2.1 junit基礎知識121
10.2.2 junit示例122
10.2.3 rule.java:先編碼,再測試122
10.2.4 rulecontainer.java:先測試,
再編碼128
10.2.5 消除冗餘:@before和@after135
10.2.6 自動化批量測試137
10.2.7 異常和單元測試139
10.3 模擬對象141
10.3.1 mockobject框架142
10.3.2 偽對象145
10.3.3 依賴注入和endo-testing
技巧146
10.3.4 endo-testing147
10.4 小結148
第11章 注重紀律:重構149
11.1 重構質量糟糕的代碼150
11.2 重構質量優秀的代碼151
11.3 結構變化與功能變化152
11.4 重構可幫助你做出選擇153
11.5 模式可以成為重構的目標154
11.6 避免重構:預構154
11.7 重構技巧155
11.8 重構遺留代碼162
11.9 小結164
第12章 測試驅動開發165
12.1 何謂測試驅動開發165
12.1.1 測試驅動與先寫測試165
12.1.2 從單元測試的角度來設計166
12.2 測試與質量167
12.2.1 測試與內聚167
12.2.2 測試與耦合168
12.2.3 測試與冗餘169
12.3 測試驅動開發與模式169
12.3.1 strategy模式169
12.3.2 烏龜站在烏龜上,一直
向下……170
12.3.3 模擬對象/模擬烏龜171
12.4 模擬對象172
12.5 模擬烏龜174
12.6 測試decorator模式174
12.7 小結178
第13章 模式與因素179
13.1 在演進的設計中做決策179
13.2 christopher apexander與他所提出的
“因素”180
13.2.1 信號處理器示例180
13.2.2 pkzip示例184
13.2.3 測試與因素186
13.3 更多選擇,更多因素187
13.4 小結190
第14章 浮現式設計:案例分析191
14.1 問題領域:mwave公司191
14.2 團隊192
14.3 最簡單的能夠正常運作的設計194
14.4 新需求:更複雜的機器196
14.5 順便介紹一下198
14.6 更多好訊息199
14.7 小結:設計是一次漫長而奇特的
旅行200
第15章 結束語:展望2020年202
附錄a 演進路徑204
附錄b 示例中用到的模式簡介213
附錄c 有用幻覺之原理274
參考書目279