現(xiàn)代軟件工程:如何高效構(gòu)建軟件
鏈接:https://pan.baidu.com/s/12LyxEwtWpNbM_G8bG-Dsjg?pwd=8aso?
提取碼:8aso

(1)持續(xù)交付先驅(qū)戴維.法利全新力作。曾與耶斯.亨布爾(JezHumble)共同撰寫了獲Jolt大獎的圖書《持續(xù)交付:發(fā)布可靠軟件的系統(tǒng)方法》。
(2)改進(jìn)復(fù)雜軟件系統(tǒng)的工程實踐指南。糾正人們對軟件工程的傳統(tǒng)認(rèn)知誤區(qū),闡述生產(chǎn)力和創(chuàng)造力在軟件工程中缺一不可的辯證關(guān)系;跳出特定的工具或技術(shù),抽象、提煉、連貫為一套具有普適性、基礎(chǔ)性的現(xiàn)代軟件工程思想和范式;以實用有效的方法為重點,講解科學(xué)原理、工程技術(shù)如何應(yīng)用于軟件開發(fā)。
(3)廣泛適用于各類軟件開發(fā)團隊。書中提及的“道fa術(shù)器”,對于初創(chuàng)公司或大型企業(yè)都適用,促進(jìn)軟件組織更加可靠、有效、高質(zhì)量地構(gòu)建軟件,交付業(yè)務(wù)價值,激發(fā)創(chuàng)新活力。
(4)國家衛(wèi)星氣象中心風(fēng)云四號氣象衛(wèi)星地面系統(tǒng)副總設(shè)計師 楊磊、中國信息通信研究院云計算與大數(shù)據(jù)研究所副總工程師陳屹力等業(yè)界學(xué)者、實踐者親筆推薦。
內(nèi)容簡介
本書探討了軟件工程的真正含義,匯集了一些重要的軟件開發(fā)基本原則,將它們緊密結(jié)合成一個一致的模型,旨在幫助讀者有效、快速地構(gòu)建軟件。全書共4個部分:第1部分探討軟件工程的真正含義,以及如何將工程的原則和原理應(yīng)用到軟件開發(fā)中;第2部分講述運用科學(xué)思想優(yōu)化軟件開發(fā)過程的方法,包括迭代式、增量式工作,獲得并利用快速、高質(zhì)量的反饋,采用實驗性和經(jīng)驗主義的科學(xué)方法;第3部分介紹管理軟件復(fù)雜性的方法,深入探討模塊化、內(nèi)聚力、關(guān)注點分離、信息隱藏和抽象、管理耦合等原則;第4部分介紹支持軟件工程的工具,以及一些貫穿本書的軟件開發(fā)理念,包括可測試性、可部署性、速度、控制變量、持續(xù)交付等。
作者簡介
戴維.法利(David Farley)是持續(xù)交付的先驅(qū)、思想領(lǐng)袖,也是持續(xù)交付、DevOps、測試驅(qū)動開發(fā)和軟件開發(fā)領(lǐng)域的專家。
從現(xiàn)代計算的早期開始,戴維曾擔(dān)任過程序員、軟件工程師、系統(tǒng)架構(gòu)師和成功團隊的核心,他掌握了計算機和軟件開發(fā)的基本原理,并形成了開創(chuàng)性的方法,改變了開發(fā)人員和團隊的工作方式。他挑戰(zhàn)了傳統(tǒng)的思維方式,帶領(lǐng)團隊開發(fā)了世界top級的軟件。
戴維是獲Jolt大獎的《持續(xù)交付:發(fā)布可靠軟件的系統(tǒng)方法》一書的作者之一,是一位受歡迎的會議演講者,并在YouTube上運營著廣受歡迎的“持續(xù)交付”頻道,主題是軟件工程。他建立了世界上速度快的金融交易所之一,是行為驅(qū)動開發(fā)的先驅(qū),是《反應(yīng)式宣言》的作者之一,并憑借LMAX Disruptor獲得了杜克開源軟件獎。
戴維熱衷于通過咨詢、YouTube 頻道和培訓(xùn)課程分享他的專業(yè)知識,幫助世界各地的開發(fā)團隊改進(jìn)軟件的設(shè)計,提高軟件的質(zhì)量和可靠性。
精彩書評
我們處在信息化時代中,軟件技術(shù)正在影響著我們現(xiàn)在的生活,對未來也會產(chǎn)生深遠(yuǎn)的影響,從人工智能、商業(yè)航天到我們的手機、計算機、電動汽車、智能家電等。信息化時代的開啟,軟件工程在其中起著不可估量的作用。軟件工程又是一門理論性和實踐性都很強的學(xué)科,它采用工程化的概念、理論、技術(shù)和方法來指導(dǎo)開發(fā)與維護(hù)計算機軟件?!冬F(xiàn)代軟件工程:如何高效構(gòu)建軟件》通過探討軟件工程的真正含義、利用科學(xué)思想優(yōu)化開發(fā)過程、管理軟件復(fù)雜性,匯集了軟件開發(fā)中的一些基本原則,能夠幫助讀者快速、有效地構(gòu)建現(xiàn)代軟件。這本書可作為高等院校、繼續(xù)教育院?!败浖こ獭闭n程的教材和教學(xué)參考書,也可供有一定實踐經(jīng)驗的軟件開發(fā)人員和管理人員參考。
——楊磊,國家衛(wèi)星氣象中心風(fēng)云四號氣象衛(wèi)星地面系統(tǒng)副總設(shè)計師
近年來,隨著云計算、人工智能、大數(shù)據(jù)、區(qū)塊鏈等新一代信息技術(shù)的發(fā)展,傳統(tǒng)軟件形態(tài)發(fā)生變化,新型智能化應(yīng)用和產(chǎn)品呈現(xiàn)爆發(fā)式增長。軟件架構(gòu)向分布式、松耦合和工程化等方向演進(jìn),快速變化的業(yè)務(wù)需求亟需有效的軟件構(gòu)建來支撐。這本書從糾正人們對軟件工程的傳統(tǒng)認(rèn)知誤區(qū)出發(fā),闡述生產(chǎn)力和創(chuàng)造力在軟件工程中缺一不可的辯證關(guān)系,并跳出特定的工具或技術(shù),抽象、提煉、連貫為一套具有普適性、基礎(chǔ)性的現(xiàn)代軟件工程思想和范式;進(jìn)而以實用有效的方法為重點,講解科學(xué)原理、工程技術(shù)如何應(yīng)用于軟件開發(fā)。書中提及的現(xiàn)代軟件工程“道fa術(shù)器”,廣泛適用于各類軟件開發(fā)團隊,無論是初創(chuàng)公司還是大型企業(yè),對于改進(jìn)復(fù)雜軟件系統(tǒng)的工程實踐十分有幫助,促進(jìn)軟件組織更加可靠、有效、高質(zhì)量地構(gòu)建軟件,交付業(yè)務(wù)價值,激發(fā)創(chuàng)新活力。
——陳屹力,中國信息通信研究院云計算與大數(shù)據(jù)研究所副總工程師
經(jīng)歷了上百個軟件項目后,在“如何有效地構(gòu)建軟件、保質(zhì)保量地交付軟件產(chǎn)品”方面我有了一些體會,但卻感覺知識、經(jīng)驗零散,不成體系。于是我迫切地想找到一套工具,把這些零散的知識、經(jīng)驗鏈接起來,形成一整套理論體系。恰好此時我遇見了這本書,如同犯困的時候有人遞枕頭,讀完仿佛睡了一個好覺,有神清氣爽、酣暢淋漓之感。
——王旭東,中銀保險有限公司信息科技部副總經(jīng)理
這本書從軟件設(shè)計的角度闡明了什么是軟件工程,貫穿了實用的設(shè)計理念和開發(fā)原則,幫我們梳理了進(jìn)化式地擴展我們的系統(tǒng)、即便在不清楚目標(biāo)的前提下也可以取得進(jìn)展的方法,同時整理了隨著系統(tǒng)變得越來越復(fù)雜,管理系統(tǒng)復(fù)雜性的各種設(shè)計和開發(fā)思想。我們在項目中遇到的實際問題,都可以在這本書中找到借鑒之處。這本書既適合初學(xué)者學(xué)習(xí),又適合有經(jīng)驗的軟件開發(fā)人員和架構(gòu)師作為參考用書,甚至對于管理者在組織架構(gòu)方面都提出了很好的建議。
——黃海,北京郵電大學(xué)信息與通信工程學(xué)院多媒體技術(shù)教研中心主任、碩士生導(dǎo)師
讀了這本書,我明白了為什么在我和戴維一起工作的那段時間里,我們作為“軟件工程師”是如此成功和滿意。我希望你通過閱讀這本書,可以從戴維的經(jīng)驗和建議中受益,而不必為你的團隊雇用一位戴維.法利。
——特麗莎.吉(Trisha Gee),開發(fā)技術(shù)推廣工程師和Java 擁護(hù)者
《現(xiàn)代軟件工程:如何高效構(gòu)建軟件》這本書非常好,它描述了當(dāng)今有經(jīng)驗的從業(yè)者們實際構(gòu)建軟件的方式。法利介紹的技術(shù)不是死板的、規(guī)定性的或線性的,但是它們嚴(yán)格遵循軟件構(gòu)建所需要的方式:經(jīng)驗主義的、迭代的、反饋驅(qū)動的、經(jīng)濟的,并且專注于可運行的代碼。
——格倫.范德堡(Glenn Vanderburg),Nubank 公司的工程總監(jiān)
有很多書會告訴你如何效仿一個特定的軟件工程實踐,但這本書不一樣。戴維在書中所做的是,闡述軟件工程的本質(zhì),以及它與簡單工藝的區(qū)別。他解釋了為什么為了掌握軟件工程,你須成為學(xué)習(xí)和管理復(fù)雜性的專家,如何用已經(jīng)存在的實踐支持這一結(jié)論,以及如何判斷關(guān)于軟件工程價值的其他觀點。這本書適用于任何認(rèn)真考慮把軟件開發(fā)當(dāng)作一門真正的工程學(xué)科的人,無論你是剛剛起步還是已經(jīng)構(gòu)建軟件幾十年了。
——戴夫.豪恩斯洛(Dave Hounslow),軟件工程師
這些都是重要的話題,有一個綱要把它們匯集成一個整體太好了。
——邁克爾.尼加德(Michael Nygard),《發(fā)布!軟件的設(shè)計與部署》一書的作者,專業(yè)程序員和軟件架構(gòu)師
我一直在看戴維.法利這本書的評閱樣書,這本書正是我們需要的。任何有志成為軟件工程師或想要掌握這項工藝的人都應(yīng)該閱讀這本書。這本書給了我們關(guān)于專業(yè)工程的務(wù)實、實用的建議。它應(yīng)該成為大學(xué)和訓(xùn)練營的薦讀書。
——布賴恩.芬斯特(Bryan Finster),杰出的工程師和美國空軍一號平臺的價值流架構(gòu)師
目錄
序 ——特麗莎.吉(Trisha Gee),開發(fā)技術(shù)推廣工程師和Java 擁護(hù)者
第 1部分 什么是軟件工程?
第 1章 簡單介紹 3
1.1 工程——科學(xué)的實際應(yīng)用 3
1.2 軟件工程的定義 4
1.3 重新定義“軟件工程” 6
1.4 軟件工程的誕生 7
1.5 范式轉(zhuǎn)移 9
1.6 小結(jié) 10
第 2章 什么是工程? 11
2.1 生產(chǎn)不是我們的問題 12
2.2 設(shè)計工程,而非生產(chǎn)工程 12
2.3 工程學(xué)的初步定義 17
2.4 工程不等于代碼 18
2.5 為什么工程很重要? 20
2.6 “工藝”的極限 20
2.7 精度和可伸縮性 21
2.8 管理復(fù)雜性 22
2.9 測量的可重復(fù)性和準(zhǔn)確性 23
2.10 工程、創(chuàng)造和工藝 25
2.11 為什么我們所做的不是軟件工程 27
2.12 權(quán)衡 28
2.13 進(jìn)步的錯覺 28
2.14 從工藝到工程的旅程 29
2.15 只有工藝還不夠 30
2.16 是時候反思了? 30
2.17 小結(jié) 32
第3章 工程方法的基本原理 33
3.1 變革的行業(yè)? 33
3.2 度量的重要性 35
3.3 應(yīng)用穩(wěn)定性和吞吐量 37
3.4 軟件工程學(xué)科的基礎(chǔ) 38
3.5 學(xué)習(xí)專家 39
3.6 管理復(fù)雜性的專家 40
3.7 小結(jié) 41
第 2部分 優(yōu)化學(xué)習(xí)
第4章 迭代式工作 45
4.1 迭代式工作的實際優(yōu)勢 47
4.2 迭代作為防御性設(shè)計策略 49
4.3 計劃的誘惑 51
4.4 迭代式工作的實用性 56
4.5 小結(jié) 58
第5章 反饋 59
5.1 反饋重要性的實例 60
5.2 編碼中的反饋 63
5.3 集成中的反饋 64
5.4 設(shè)計中的反饋 66
5.5 架構(gòu)中的反饋 68
5.6 傾向于早期反饋 70
5.7 產(chǎn)品設(shè)計中的反饋 71
5.8 組織和文化中的反饋 72
5.9 小結(jié) 74
第6章 增量主義 75
6.1 模塊化的重要性 76
6.2 組織增量主義 77
6.3 增量主義工具 79
6.4 限制變更的影響 80
6.5 增量式設(shè)計 82
6.6 小結(jié) 84
第7章 經(jīng)驗主義 85
7.1 立足于現(xiàn)實 86
7.2 區(qū)分經(jīng)驗主義與實驗性 87
7.3 “我知道那個bug!” 87
7.4 避免自我欺騙 89
7.5 創(chuàng)造符合我們論點的現(xiàn)實 90
7.6 以現(xiàn)實為指導(dǎo) 93
7.7 小結(jié) 94
第8章 實驗性 95
8.1 “實驗性”是什么意思? 96
8.2 反饋 97
8.3 假設(shè) 99
8.4 度量 100
8.5 控制變量 101
8.6 自動化測試作為實驗 102
8.7 將測試的實驗結(jié)果置于環(huán)境中 103
8.8 實驗范圍 105
8.9 小結(jié) 106
第3部分 優(yōu)化管理復(fù)雜性
第9章 模塊化 109
9.1 模塊化的標(biāo)志 111
9.2 低估優(yōu)秀設(shè)計的重要性 111
9.3 可測試性的重要性 113
9.4 可測試性設(shè)計提高模塊化 114
9.5 服務(wù)和模塊化 120
9.6 可部署性和模塊化 121
9.7 不同規(guī)模的模塊化 123
9.8 人類系統(tǒng)中的模塊化 124
9.9 小結(jié) 126
第 10章 內(nèi)聚力 127
10.1 模塊化和內(nèi)聚力:設(shè)計的基礎(chǔ) 127
10.2 內(nèi)聚力的基本降低 128
10.3 上下文很重要 131
10.4 高性能軟件 134
10.5 與耦合的聯(lián)系 135
10.6 測試驅(qū)動開發(fā)推動高內(nèi)聚力 136
10.7 如何實現(xiàn)內(nèi)聚軟件 136
10.8 內(nèi)聚力差的代價 139
10.9 人類系統(tǒng)中的內(nèi)聚力 140
10.10 小結(jié) 140
第 11章 關(guān)注點分離 141
11.1 依賴注入 145
11.2 分離本質(zhì)復(fù)雜性和偶然復(fù)雜性 146
11.3 領(lǐng)域驅(qū)動設(shè)計的重要性 149
11.4 可測試性 151
11.5 端口和適配器 151
11.6 何時采用端口和適配器 154
11.7 什么是API 155
11.8 使用測試驅(qū)動開發(fā)推動關(guān)注點分離 156
11.9 小結(jié) 157
第 12章 信息隱藏和抽象 158
12.1 抽象或信息隱藏 158
12.2 是什么導(dǎo)致了“大泥球” 159
12.3 組織和文化問題 159
12.4 技術(shù)問題和設(shè)計問題 162
12.5 對過度設(shè)計的恐懼 165
12.6 通過測試改進(jìn)抽象 168
12.7 抽象的力量 169
12.8 抽象泄漏 170
12.9 選擇適當(dāng)?shù)某橄?172
12.10 問題領(lǐng)域的抽象 174
12.11 抽象偶然復(fù)雜性 175
12.12 隔離第三方系統(tǒng)和代碼 178
12.13 總是傾向于隱藏信息 179
12.14 小結(jié) 180
第 13章 管理耦合 181
13.1 耦合的代價 181
13.2 擴展 182
13.3 微服務(wù) 183
13.4 解耦可能意味著更多的代碼 185
13.5 松耦合不是唯一重要的類型 187
13.6 傾向于松耦合 188
13.7 這與關(guān)注點分離有何不同? 189
13.8 DRY 太過于簡單化 190
13.9 異步作為松耦合的工具 192
13.10 松耦合設(shè)計 193
13.11 人類系統(tǒng)中的松耦合 194
13.12 小結(jié) 196
第4部分 支持軟件工程的工具
第 14 章 工程學(xué)科的工具 199
14.1 什么是軟件開發(fā)? 200
14.2 可測試性作為工具 202
14.3 測量點 205
14.4 實現(xiàn)可測試性的問題 205
14.5 如何提高可測試性 209
14.6 可部署性 210
14.7 速度 212
14.8 控制變量 213
14.9 持續(xù)交付 214
14.10 支持工程的通用工具 215
14.11 小結(jié) 216
第 15章 現(xiàn)代軟件工程師 217
15.1 工程作為人類過程 219
15.2 數(shù)字化顛覆性組織 220
15.3 結(jié)果與機制 222
15.4 持久且普遍適用 224
15.5 工程學(xué)科的基礎(chǔ) 227
15.6 小結(jié) 227
查看全部↓