軟件交付過(guò)程是指在編程序改代碼之后,直到將軟件發(fā)布給用戶使用之前的一系列活動(dòng),如提交、集成、構(gòu)建、部署、測(cè)試等。本書(shū)作為通識(shí)類圖書(shū),對(duì)軟件交付過(guò)程的各個(gè)方面進(jìn)行了全面綜合的介紹。這包括三部分內(nèi)容:第1部分,介紹在研究軟件交付過(guò)程時(shí)常見(jiàn)的思路和思考框架;第2部分,梳理軟件交付的總體過(guò)程;第3部分,考查軟件交付過(guò)程中的各個(gè)具體活動(dòng)?偟膩(lái)說(shuō),本書(shū)提供了一種類似于對(duì)人進(jìn)行體檢的方法,對(duì)特定軟件產(chǎn)品的交付過(guò)程進(jìn)行全方位的調(diào)研,可以根據(jù)其所在的業(yè)務(wù)領(lǐng)域、當(dāng)前采用的技術(shù)棧、使用的工具、流程和方法等實(shí)際情況,找出當(dāng)前突出、值得改進(jìn)的問(wèn)題。
董越,DevOps 資深專家,阿里巴巴集團(tuán)前研發(fā)效能事業(yè)部架構(gòu)、高級(jí)產(chǎn)品專家等職,從事 Aone&云效 DevOps 產(chǎn)品設(shè)計(jì)、阿里云專有云集成與交付解決方案設(shè)計(jì)等工作。在加入阿里之前,他還曾就職于西門(mén)子、摩托羅拉、雅虎、索尼、去哪兒網(wǎng)等大型企業(yè),一直從事軟件配置管理、軟件集成與交付、DevOps 相關(guān)的工作。當(dāng)前主要從事企業(yè)級(jí)DevOps體系建設(shè)與咨詢工作,幫助眾多企業(yè)提升軟件研發(fā)交付效能。已服務(wù)過(guò)的客戶有華為、工商銀行、交通銀行、招商銀行、中信銀行、中國(guó)移動(dòng)、中國(guó)聯(lián)通、中國(guó)電信、華泰證券、泰康人壽等。
第1部分 思維方式
第1章 本書(shū)要解決什么問(wèn)題2
1.1 提供一種系統(tǒng)全面的方法2
1.2 分析軟件交付過(guò)程3
1.3 軟件交付過(guò)程包括三類事情4
1.4 軟件交付不是按時(shí)間階段或角色劃分出來(lái)的4
1.5 本書(shū)本質(zhì)上是講述軟件交付這門(mén)學(xué)科5
1.6 本書(shū)分成三個(gè)部分講述5
第2章 我們要追求什么6
2.1 一切為了業(yè)務(wù)的成功6
2.2 小步快跑7
2.3 軟件實(shí)現(xiàn)側(cè)該追求什么目標(biāo)8
2.4 軟件交付過(guò)程追求的目標(biāo)10
第3章 幾十年來(lái)的探索12
3.1 軟件工程12
3.1.1 軟件危機(jī)12
3.1.2 工程化13
3.2 敏捷14
3.2.1 敏捷的理念14
3.2.2 敏捷的實(shí)踐15
3.3 精益16
3.3.1 起源于制造業(yè)的精益思想16
3.3.2 把精益應(yīng)用于軟件開(kāi)發(fā)17
3.4 持續(xù)集成18
3.4.1 持續(xù)集成是什么18
3.4.2 為什么要持續(xù)集成19
3.4.3 如何做到持續(xù)集成19
3.5 持續(xù)交付20
3.5.1 包括所有質(zhì)量驗(yàn)證工作20
3.5.2 比較頻繁地發(fā)布上線21
3.5.3 持續(xù)部署22
3.6 DevOps22
3.6.1 DevOps的誕生22
3.6.2 DevOps三步工作法23
3.6.3 DevOps落地實(shí)踐23
3.7 技術(shù)方面的演進(jìn)24
3.7.1 軟件架構(gòu)24
3.7.2 部署運(yùn)行24
3.8 它們之間是什么關(guān)系25
第4章 做好軟件交付的10個(gè)策略27
4.1 細(xì)粒度、低耦合、可復(fù)用的架構(gòu)27
4.1.1 軟件架構(gòu)27
4.1.2 測(cè)試腳本和測(cè)試數(shù)據(jù)的架構(gòu)28
4.1.3 組織架構(gòu)29
4.2 小批量持續(xù)流動(dòng)的流程30
4.2.1 大批量帶來(lái)等待等問(wèn)題31
4.2.2 短周期、小顆粒度、減少在制品31
4.2.3 小批量持續(xù)流動(dòng)的交付過(guò)程32
4.3 運(yùn)用綜合手段保證質(zhì)量和安全32
4.3.1 各種各樣的測(cè)試32
4.3.2 左移 右移33
4.3.3 測(cè)試人員 開(kāi)發(fā)人員33
4.3.4 人工測(cè)試 自動(dòng)化測(cè)試33
4.3.5 綜合運(yùn)用34
4.4 自動(dòng)化與自助化34
4.4.1 單項(xiàng)活動(dòng)的自動(dòng)化34
4.4.2 流程的自動(dòng)化34
4.4.3 自助化35
4.4.4 相關(guān)支持35
4.5 加速各項(xiàng)活動(dòng)35
4.5.1 為什么要加速35
4.5.2 加速的通用思路36
4.6 及時(shí)修復(fù)36
4.6.1 為什么要及時(shí)修復(fù)37
4.6.2 如何做到及時(shí)修復(fù)37
4.7 完備記錄,充分展現(xiàn)38
4.7.1 任務(wù)及其執(zhí)行情況38
4.7.2 版本和配置信息39
4.7.3 關(guān)聯(lián)關(guān)系40
4.7.4 單一可信源40
4.7.5 相關(guān)支持41
4.8 標(biāo)準(zhǔn)化41
4.8.1 規(guī)范可重復(fù)41
4.8.2 方案收斂41
4.8.3 環(huán)境一致性42
4.9 協(xié)調(diào)完成完整功能43
4.9.1 背景43
4.9.2 開(kāi)發(fā)全過(guò)程的協(xié)調(diào)43
4.9.3 交付過(guò)程的協(xié)調(diào)43
4.10 基于度量的持續(xù)改進(jìn)44
第5章 一個(gè)典型的軟件交付過(guò)程47
5.1 前傳47
5.2 代碼改動(dòng)累積并終提交48
5.3 特性改動(dòng)累積并終提交48
5.4 集成并終發(fā)布49
第6章 各個(gè)細(xì)分領(lǐng)域51
6.1 交付過(guò)程51
6.2 源代碼及其構(gòu)建52
6.3 部署運(yùn)行54
6.4 靜態(tài)測(cè)試54
6.5 動(dòng)態(tài)測(cè)試55
第7章 各個(gè)關(guān)注角度58
7.1 執(zhí)行時(shí)機(jī)58
7.2 執(zhí)行效果60
7.3 執(zhí)行效率61
7.4 問(wèn)題處理效率62
7.5 避免引入問(wèn)題64
第2部分 總體過(guò)程
第8章 代碼改動(dòng)累積68
8.1 導(dǎo)論68
8.1.1 考查范圍68
8.1.2 關(guān)注重點(diǎn)68
8.2 執(zhí)行時(shí)機(jī)68
8.2.1 包含改動(dòng)的顆粒度:實(shí)時(shí)進(jìn)行的測(cè)試68
8.2.2 包含改動(dòng)的顆粒度:隨時(shí)進(jìn)行的測(cè)試69
8.3 執(zhí)行效率70
第9章 代碼改動(dòng)提交71
9.1 導(dǎo)論71
9.1.1 考查范圍71
9.1.2 關(guān)注重點(diǎn)71
9.2 執(zhí)行時(shí)機(jī)72
9.2.1 包含改動(dòng)的顆粒度:提交的顆粒度72
9.2.2 包含改動(dòng)的顆粒度:提交時(shí)進(jìn)行的測(cè)試72
9.3 執(zhí)行效果73
9.4 執(zhí)行效率73
9.4.1 執(zhí)行效率度量:從發(fā)起提交到提交完成的時(shí)間73
9.4.2 工具輔助記錄和展現(xiàn):代碼改動(dòng)提交說(shuō)明73
9.4.3 工具間集成:代碼改動(dòng)提交與工作項(xiàng)關(guān)聯(lián)74
第10章 特性改動(dòng)累積75
10.1 導(dǎo)論75
10.1.1 特性的概念75
10.1.2 特性隔離76
10.1.3 考查范圍76
10.1.4 關(guān)注重點(diǎn)76
10.2 執(zhí)行時(shí)機(jī)76
10.2.1 包含改動(dòng)的顆粒度:代碼改動(dòng)提交觸發(fā)的測(cè)試76
10.2.2 包含改動(dòng)的顆粒度:隨時(shí)進(jìn)行的測(cè)試77
10.2.3 流程順序和卡點(diǎn):適當(dāng)并行78
10.2.4 管理并發(fā):控制在研的特性數(shù)量78
10.2.5 整體協(xié)調(diào):完整的特性79
10.3 執(zhí)行效果79
10.4 執(zhí)行效率81
10.4.1 自動(dòng)執(zhí)行:構(gòu)建流水線81
10.4.2 工具輔助記錄和展現(xiàn):流水線執(zhí)行情況81
10.4.3 方案收斂82
10.5 問(wèn)題處理效率83
10.5.1 問(wèn)題處理效率度量83
10.5.2 適當(dāng)通知83
10.5.3 記錄版本:流水線配置的修改歷史83
10.6 避免引入問(wèn)題84
第11章 特性改動(dòng)提交86
11.1 導(dǎo)論86
11.1.1 考查范圍86
11.1.2 關(guān)注重點(diǎn)86
11.2 執(zhí)行時(shí)機(jī)86
11.2.1 包含改動(dòng)的顆粒度:特性的顆粒度86
11.2.2 包含改動(dòng)的顆粒度:當(dāng)特性做不到既小又獨(dú)立時(shí)87
11.2.3 包含改動(dòng)的顆粒度:特性提交時(shí)進(jìn)行的測(cè)試88
11.2.4 流程順序和卡點(diǎn):特性提交門(mén)禁89
11.2.5 整體協(xié)調(diào):完整的特性89
11.3 執(zhí)行效果90
11.4 執(zhí)行效率90
11.4.1 執(zhí)行效率度量:從發(fā)起提交到提交完成的時(shí)間90
11.4.2 自動(dòng)執(zhí)行:合并請(qǐng)求91
11.4.3 工具輔助記錄和展現(xiàn):特性內(nèi)容說(shuō)明91
11.4.4 工具間集成:特性的代碼改動(dòng)與工作項(xiàng)之間的關(guān)聯(lián)92
11.5 問(wèn)題處理效率92
11.5.1 問(wèn)題處理效率度量92
11.5.2 適當(dāng)通知93
11.5.3 便捷回退:特性摘除93
第12章 集成94
12.1 導(dǎo)論94
12.1.1 考查范圍94
12.1.2 關(guān)注重點(diǎn)94
12.2 執(zhí)行時(shí)機(jī)94
12.2.1 包含改動(dòng)的顆粒度:持續(xù)接收特性改動(dòng)提交94
12.2.2 包含改動(dòng)的顆粒度:特性合入觸發(fā)的測(cè)試95
12.2.3 包含改動(dòng)的顆粒度:針對(duì)新特性的測(cè)試95
12.2.4 流程順序和卡點(diǎn):制品晉級(jí)96
12.2.5 管理并發(fā):適當(dāng)交疊97
12.2.6 管理并發(fā):管理變體98
12.3 執(zhí)行效率99
12.3.1 自動(dòng)執(zhí)行:部署流水線99
12.3.2 工具間集成:版本的特性列表100
12.3.3 工具間集成:特性狀態(tài)信息101
12.3.4 工具間集成:自動(dòng)維護(hù)說(shuō)明文檔102
12.3.5 自主完成:各項(xiàng)活動(dòng)102
12.3.6 自主完成:工具的配置103
12.3.7 便捷配置103
12.4 問(wèn)題處理效率103
12.4.1 問(wèn)題處理效率度量:紅燈修復(fù)時(shí)長(zhǎng)103
12.4.2 問(wèn)題處理效率度量:缺陷修復(fù)時(shí)長(zhǎng)104
12.4.3 及時(shí)發(fā)現(xiàn)104
12.4.4 適當(dāng)通知105
12.4.5 及時(shí)處理105
12.4.6 快速定位106
12.5 避免引入問(wèn)題106
第13章 發(fā)布107
13.1 導(dǎo)論107
13.1.1 考查范圍107
13.1.2 關(guān)注重點(diǎn)107
13.2 執(zhí)行時(shí)機(jī)108
13.2.1 包含改動(dòng)的顆粒度:發(fā)布的顆粒度108
13.2.2 包含改動(dòng)的顆粒度:發(fā)布前的測(cè)試109
13.2.3 包含改動(dòng)的顆粒度:生產(chǎn)環(huán)境的測(cè)試109
13.2.4 減少等待:發(fā)布時(shí)間窗口109
13.2.5 操作對(duì)象的顆粒度110
13.2.6 整體協(xié)調(diào):按一定順序發(fā)布111
13.2.7 整體協(xié)調(diào):當(dāng)在特性分支上完成全部測(cè)試時(shí)112
13.2.8 整體協(xié)調(diào):當(dāng)每個(gè)微服務(wù)都有自己的迭代節(jié)奏時(shí)113
13.2.9 整體協(xié)調(diào):靜態(tài)庫(kù)典型情況之公共基礎(chǔ)庫(kù)114
13.2.10 整體協(xié)調(diào):靜態(tài)庫(kù)典型情況之整體應(yīng)用的組成部分115
13.2.11 整體協(xié)調(diào):靜態(tài)庫(kù)典型情況之服務(wù)接口定義116
13.3 執(zhí)行效果117
13.4 執(zhí)行效率117
13.4.1 執(zhí)行效率度量117
13.4.2 自主完成:精簡(jiǎn)發(fā)布審批流程118
13.5 問(wèn)題處理效率118
13.5.1 問(wèn)題處理效率度量:故障恢復(fù)與缺陷修復(fù)的時(shí)長(zhǎng)118
13.5.2 及時(shí)發(fā)現(xiàn)118
13.5.3 適當(dāng)通知119
13.5.4 及時(shí)處理119
13.5.5 快速定位119
13.5.6 便捷回退:發(fā)布回滾119
13.5.7 緊急改動(dòng)的生效方式:緊急發(fā)布120
第3部分 具體活動(dòng)
第14章 源代碼版本控制122
14.1 導(dǎo)論122
14.1.1 考查范圍122
14.1.2 關(guān)注重點(diǎn)122
14.2 執(zhí)行時(shí)機(jī)123
14.2.1 管理并發(fā):晚分叉模式支持交疊123
14.2.2 管理并發(fā):早分叉模式支持交疊124
14.2.3 管理并發(fā):用主干代表已發(fā)布版本125
14.2.4 管理并發(fā):特性分支的管理126
14.2.5 操作對(duì)象的顆粒度:代碼庫(kù)的尺寸127
14.3 執(zhí)行效果127
14.4 執(zhí)行效率128
14.4.1 執(zhí)行效率度量128
14.4.2 快速執(zhí)行:分布式版本控制工具128
14.4.3 快速執(zhí)行:便捷的頁(yè)面操作129
14.4.4 規(guī)范可重復(fù):管理眾多代碼庫(kù)129
14.4.5 規(guī)范可重復(fù):明確代碼庫(kù)內(nèi)的目錄結(jié)構(gòu)和內(nèi)容129
14.4.6 規(guī)范可重復(fù):規(guī)范版本號(hào)130
14.4.7 規(guī)范可重復(fù):標(biāo)識(shí)源代碼版本131
14.5 問(wèn)題處理效率132
14.5.1 便捷回退:特性摘除132
14.5.2 便捷回退:發(fā)布回滾132
14.5.3 緊急改動(dòng)的生效方式:已提交特性的修改133
14.5.4 緊急改動(dòng)的生效方式:緊急發(fā)布133
14.6 避免引入問(wèn)題134
第15章 構(gòu)建135
15.1 導(dǎo)論135
15.1.1 構(gòu)建的概念135
15.1.2 考查范圍136
15.1.3 關(guān)注重點(diǎn)136
15.2 執(zhí)行時(shí)機(jī)136
15.3 執(zhí)行效率137
15.3.1 工具輔助記錄和展現(xiàn):構(gòu)建遇到的問(wèn)題137
15.3.2 快速執(zhí)行:從全局視角提速構(gòu)建138
15.3.3 規(guī)范可重復(fù):構(gòu)建的可重復(fù)性140
第16章 構(gòu)建環(huán)境管理142
16.1