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