重磅推荐
【推荐语】
*互联网公司软件交付工作原则与方法解析

作者在持续交付领域多年实践经验的精华总结

《持续交付:发布可靠软件的系统方法》作者作序推荐!

国内知名互联网公司多位管理者与领域专家合力倾情推荐!

持续交付2.0不只是关于软件的交付模型,而是从业务问题出发,关注业务假设验证速度的双环业务模型。只有从业务目标出发的持续交付实践才有强大的创造力和生命力!

书中指出,持续交付2.0双环模型高速运转的三个支柱分别是组织机制、软件架构和软件交付基础设施,同时给出了提升价值探索环以及快速验证环运转速度的多种可行方法。

本书还为我们呈现了在企业内部改善持续交付2.0能力所需遵循的基本原则,包括组织文化建设、软件系统架构、业务协作、配置管理、构建集成、自动化测试、发布与监控七大板块,并指出各领域实践关键点,以及多种可实操性方法。同时,通过3个完整的实践案例过程分析,说明每个企业或团队都必须从自己的业务目标出发,根据自己的实际情况,制定自己的改善路线。
【作者】
乔梁 敏思特咨询公司联合创始人,持续交付领域专家,敏捷与精益转型导师,任腾讯外聘研发管理顾问。拥有多年IT从业经验,曾就职于百度、Nokia等国内外知名软件公司,并先后担任腾讯、搜狐畅游等多家互联网公司的高级管理顾问,帮助多个产品线取得业务上的成功突破,曾为华为、上汽等非互联网软件企业提供敏捷转型咨询服务,指导解决组织转型与研发管理方面的相关问题。 乔梁是国内致力于通过敏捷开发与精益理论改善软件价值交付效率的实践者之一,精研各种软件工程方法论,2010年翻译《持续交付》一书,并将其融会贯通,成为持续交付和DevOps理念在国内的实践者和布道者,在8 年管理实践的基础上, 经过总结提炼,提出持续交付双环模型,并将工作心得整理成册, 取名为《持续交付2.0》,将关注点扩展至业务价值的持续探索与快速验证。关注本书公众号“持续交付2.0”(微信号continuous_delivery),或者访问本书网站www.continuousdelivery20.com,可以持续获取作者的分享,并参与互动和交流。
【内容】
本书“重新定义”了持续交付,增补了组织管理和架构两个维度,辅助以真实案例,对诸多持续交付的原则和实践加以解读,并对持续交付过程中的取舍原则加以论述。
本书分三个部分。*部分作者根据自己近十年的工作及咨询经历,不断总结、提炼和反思,对原有的持续交付进行了修正,重新定义持续交付为实现组织战略目标的能力,并引入持续交付的能力模型;第二部分阐述组织打造持续交付能力所需遵守的原则,包括基础原则、组织原则和架构原则;第三部分通过多个互联网公司案例的解读,阐述如何根据组织的当前状况,应用原则,并对*实践进行取舍,快速达到组织能力目标。
本书适合大型互联网公司的技术VP、技术负责人,中小型互联网公司的CTO、技术VP、研发 测试 运维负责人、主管及骨干,以及组织变革者阅读。
【目录】
目 录
第 1章 持续交付2.01
1.1 软件工程发展概述1
1.1.1 瀑布软件开发方法1
1.1.2 敏捷软件开发方法2
1.1.3 DevOps运动3
1.1.4 持续交付1.04
1.2 持续交付2.07
1.2.1 精益思想8
1.2.2 双环模型9
1.2.3 4个核心原则11
1.2.4 持续交付七巧板12
1.3 小结13
第 2章 价值探索环14
2.1 探索环的意义14
2.2 探索环的4个关键环节15
2.2.1 提问16
2.2.2 锚定17
2.2.3 共创19
2.2.4 精炼22
2.3 工作原则24
2.3.1 分解并快速试错24
2.3.2 一次只验证一点25
2.3.3 允许失败26
2.4 共创与精炼的常用方法27
2.4.1 装饰窗方法27
2.4.2 小可行特性法29
2.4.3 特区法30
2.4.4 定向探索法30
2.4.5 稻草人法31
2.4.6 小可行产品法32
2.5 实施注意事项32
2.6 小结35
第3章 快速验证环36
3.1 验证环的目标36
3.2 验证环的4个关键环节37
3.2.1 构建37
3.2.2 运行38
3.2.3 监测39
3.2.4 决策39
3.3 工作原则39
3.3.1 质量内建39
3.3.2 消除等待40
3.3.3 重复事务自动化43
3.3.4 监测一切43
3.4 小结44
第4章 持续交付2.0的组织文化45
4.1 安全、信任与持续改善45
4.1.1 失败是安全的45
4.1.2 相互信任45
4.1.3 持续改善46
4.2 文化塑造四步法46
4.2.1 行为决定文化46
4.2.2 谷歌的工程师质量文化48
4.2.3 Etsy的持续试验文化49
4.3 行动原则50
4.3.1 价值导向51
4.3.2 快速验证51
4.3.3 持续学习51
4.4 度量原则55
4.4.1 度量指标的4类属性56
4.4.2 度量的目标是改善57
4.5 “改善套路”进行持续改进57
4.6 小结58
第5章 持续交付的软件系统架构60
5.1 “大系统小做”原则61
5.1.1 持续交付架构要求61
5.1.2 系统拆分原则61
5.2 常见架构模式62
5.2.1 微核架构62
5.2.2 微服务架构63
5.2.3 巨石应用64
5.3 架构改造实施模式66
5.3.1 拆迁者模式67
5.3.2 绞杀者模式68
5.3.3 修缮者模式68
5.3.4 数据库的拆分方法70
5.4 小结70
第6章 业务需求协作管理72
6.1 产品版本周期概述73
6.1.1 准备期73
6.1.2 交付期74
6.2 需求拆分的利与弊75
6.2.1 需求拆分的收益76
6.2.2 需求拆分的成本78
6.3 需求拆分方法79
6.3.1 需求的来源80
6.3.2 技术债也是需求80
6.3.3 参与需求拆分的角色81
6.3.4 不平等的INVEST原则82
6.3.5 五大拆分技法82
6.3.6 七大组成部分84
6.4 需求分析与管理工具集85
6.4.1 用户故事地图85
6.4.2 用户故事树86
6.4.3 依赖关系图87
6.4.4 需求管理数字化平台87
6.5 团队协作管理工具87
6.5.1 团队共享日历88
6.5.2 团队回顾89
6.5.3 可视化故事墙90
6.5.4 明确“完成”的定义90
6.5.5 持续集成91
6.5.6 故事验证91
6.6 小结91
第7章 部署流水线原则与工具设计92
7.1 简单的部署流水线92
7.1.1 简单的产品研发流程92
7.1.2 初始部署流水线93
7.1.3 流水线执行状态解析95
7.2 部署流水线的设计与使用95
7.2.1 流水线的设计原则95
7.2.2 团队的协作纪律97
7.3 部署流水线平台的构成97
7.3.1 工具链总体架构97
7.3.2 平台应当具备的基本能力99
7.3.3 工具链建设策略100
7.4 基础支撑服务的云化100
7.4.1 基础支撑服务的协作过程解析101
7.4.2 编译构建管理服务103
7.4.3 自动化测试管理服务104
7.4.4 软件部署管理服务105
7.4.5 基础环境管理服务106
7.5 企业制品库的管理107
7.5.1 制品库的分类107
7.5.2 制品库的管理原则108
7.6 多种多样的部署流水线108
7.6.1 多组件的部署流水线108
7.6.2 个人部署流水线109
7.6.3 部署流水线的不断演进110
7.7 为开发者构建自助式工具111
7.8 小结113
第8章 利于集成的分支策略114
8.1 版本控制系统的使用目的114
8.1.1 集中式版本控制系统114
8.1.2 分布式版本控制系统115
8.1.3 版本控制系统中的基本概念117
8.2 常见分支开发模式118
8.2.1 主干开发,主干发布118
8.2.2 主干开发,分支发布119
8.2.3 分支开发,主干发布121
8.3 分支模式的演化126
8.3.1 三驾马车分支模式126
8.3.2 Gitflow分支模式127
8.3.3 GitHubFlow分支模式128
8.4 分支策略的选择128
8.4.1 版本发布模式128
8.4.2 分支策略与发布周期的关系132
8.5 小结133
第9章 持续集成134
9.1 起源与定义134
9.1.1 原始定义135
9.1.2 一次集成过程135
9.2 六步提交法136
9.2.1 4个关键点138
9.2.2 同步与异步模式139
9.2.3 自查表140
9.3 速度与质量的权衡141
9.3.1 分级构建142
9.3.2 多人同时提交的构建142
9.3.3 云平台的威力143
9.4 在团队中实施持续集成实践145
9.4.1 快速建立团队的持续集成实践146
9.4.2 分支策略与部署流水线148
9.5 常见的实施问题150
9.5.1 工程师的开发习惯151
9.5.2 视而不见的扫描问题151
9.5.3 自动化测试用例的缺乏151
9.6 小结152
第 10章 自动化测试策略与方法153
10.1 自动化测试的自身定位153
10.1.1 自动化测试的优势154
10.1.2 自动化测试所需的投入155
10.2 突破传统自动化测试的困境156
10.2.1 传统自动化测试的特点157
10.2.2 自动化测试的分层157
10.2.3 不同类型的测试金字塔160
10.3 自动化测试的实施策略163
10.3.1 增加自动化测试用例的着手点163
10.3.2 提高自动化测试的执行次数164
10.3.3 良好自动化测试的特征165
10.3.4 共享自动化测试的维护职责166
10.3.5 代码测试覆盖率167
10.4 用户验收自动化测试要点168
10.4.1 先搭建分层框架168
10.4.2 测试用例数应保持低位171
10.4.3 为自动化测试用例预留API171
10.4.4 为调试做好准备171
10.4.5 测试数据的准备171
10.5 其他质量检查方法173
10.5.1 差异批注测试方法173
10.5.2 代码规范检查与代码动静态检测174
10.5.3 AI在测试领域的应用174
10.6 小结175
第 11章 软件配置管理176
11.1 将一切纳入配置管理176
11.1.1 配置管理目标176
11.1.2 配置管理的范围177
11.1.3 软件配置管理原则177
11.2 软件包的版本管理181
11.2.1 包管理的反模式181
11.2.2 集中式包管理服务182
11.2.3 软件包的元信息183
11.3 包依赖管理185
11.3.1 显式声明依赖185
11.3.2 自动管理依赖187
11.3.3 减少复杂依赖188
11.4 环境基础设施管理191
11.4.1 环境准备的4种状态191
11.4.2 领域专属语言的应用197
11.4.3 环境基础设施即代码198
11.5 软件配置项的管理199
11.5.1 二进制与配置项的分离199
11.5.2 配置信息的版本管理200
11.5.3 配置项的存储组织方式201
11.5.4 配置漂移与治理202
11.6 不可变基础设施与云应用203
11.6.1 实现不可变基础设施203
11.6.2 云原生应用206
11.6.3 优势与挑战206
11.7 数据的版本管理208
11.7.1 数据库结构变更208
11.7.2 数据文件208
11.8 需求与源代码的版本关联209
11.9 小结209
第 12章 低风险发布211
12.1 高频发布是一种趋势211
12.1.1 互联网企业的高频发布212
12.1.2 收益与成本共存214
12.2 降低发布风险的方法215
12.2.1 蓝绿部署215
12.2.2 滚动部署216
12.2.3 金丝雀发布与灰度发布217
12.2.4 暗部署218
12.3 高频发布支撑技术219
12.3.1 功能开关技术220
12.3.2 数据迁移技术222
12.3.3 抽象分支方法225
12.3.4 升级替代回滚226
12.4 影响发布频率的因素227
12.5 小结228
第 13章 监测与决策229
13.1 生产监测范围230
13.1.1 后台服务的监测230
13.1.2 分发软件的监测230
13.2 数据监测体系231
13.2.1 收集与处理231
13.2.2 数据的标准化232
13.2.3 监测数据体系及其能力衡量233
13.3 问题处理体系235
13.3.1 告警海洋与智能化管理235
13.3.2 问题处理是一个学习过程236
13.4 生产环境测试237
13.4.1 测试活动扁平化趋势237
13.4.2 生产环境中的测试239
13.4.3 混沌工程239
13.5 向东,还是向西240
13.6 小结241
第 14章 大型互联网团队的FT化242
14.1 简介242
14.1.1 改进前状态243
14.1.2 改进后状态244
14.2 改进方法论245
14.2.1 指导思想245
14.2.2 改进步骤245
14.3 改进的历程246
14.3.1 架构解耦246
14.3.2 组织解耦248
14.3.3 研发流程再造250
14.3.4 自动化一切259
14.4 小结260
第 15章 小团队逆袭之旅262
15.1 背景简介262
15.1.1 改进前的“死亡行军”之旅264
15.1.2 改进后的无缺陷交付264
15.2 改进方法论265
15.2.1 指导思想265
15.2.2 试点团队的选择265
15.3 第 一阶段:研发准备期266
15.3.1 功能简介与需求拆分266
15.3.2 架构设计与需求依赖识别267
15.3.3 工作量估算与排期268
15.4 第二阶段:软件交付期270
15.4.1 通过可视化看板改进工作流程270
15.4.2 无缺陷交付277
15.4.3 主干开发与持续集成278
15.4.4 测试活动左移279
15.4.5 代码评审279
15.4.6 关注结果,更要关注过程280
15.5 小结281

第 16章 研发推动的DevOps283
16.1 改进的关键点285
16.1.1 改进方法论285
16.1.2 定义改进目标285
16.2 第 一阶段:敏捷101287
16.2.1 做个靠谱的计划287
16.2.2 开发阶段启航291
16.2.3 对过程质量的约束294
16.2.4 阶段性改进点301
16.3 第二阶段:DevOps转型302
16.3.1 与运维人员的 “冲突”303
16.3.2 高频部署发布中的具体障碍304
16.3.3 整体解决方案的设计304
16.3.4 DevOps阶段的团队改变308
16.4 小结308
附录A 软件工程的三次进化310
附录B 排序法做相对估算323
【媒体评论】

乔梁老师是软件工程领域的大师,同时作为腾讯的敏捷咨询顾问,也和我们合作多年,亲历了移动互联网发展的全过程。乔梁老师对产品研发运营体系的种种问题可谓洞若观火,对于效率的追求可谓孜孜不倦,而《持续交付2.0》是乔梁老师在大量实战项目中总结出来的理论框架,可谓历经千锤百炼。本书也许没有太多高深抽象的概念,但每一项原则和方法的后面,都有足够多的正反例支持,和乔老师的为人一样,低调、务实、简单,值得每一位钻研和应用高效产品研发运营体系的读者阅读体会。我相信,在互联网行业,效率代表未来。
返回顶部