第1部分 软件敏捷概述 5
第1章 敏捷方法介绍 5
1.1 在软件经济中获得竞争优势 5
软件开发方法与行业一起发展 5
1.2 走进敏捷方法 6
1.3 敏捷的规模 7
1.4 了解敏捷方法 8
敏捷宣言 9
1.5 采用敏捷方法的趋势 10
1.6 软件敏捷的企业效益 11
1.6.1 提高生产力 11
1.6.2 提高质量 12
1.6.3 提升团队士气和工作满意度 12
1.6.4 更快地面市 12
1.7 XP、Scrum及RUP的简介 13
1.7.1 极限编程(XP) 13
1.7.2 Scrum 13
1.7.3 Rational统一过程 14
1.8 小结 15
第2章 为什么瀑布模型不适用 17
2.1 瀑布模型的问题 18
2.2 瀑布模型的假设 19
2.2.1 假设1:如果我们花时间来理解的话,存在着一套定义相当明确的需求 20
2.2.2 假设2:改变是小型且便于管理的 20
2.2.3 假设3:系统集成顺利进行 21
2.2.4 假设4:我们完全可以按计划交付 21
2.3 利用敏捷方法来纠正行为 24
第3章 XP的本质 27
3.1 什么是XP 27
3.2 有关XP的争议 28
3.3 有关XP的极限 28
3.4 XP的基本原则 29
3.5 XP的价值、原则及实践方法 30
3.5.1 XP的5个核心价值 31
3.5.2 基本原则 31
3.5.3 XP的13个关键实践技巧 32
3.5.4 对结对编程的注释 35
3.6 XP的过程模型 35
3.7 XP方法的应用 36
阅读参考 37
第4章 Scrum的本质 39
4.1 Scrum是什么 39
4.2 Scrum的角色 39
4.3 Scrum的哲学根基 40
4.4 Scrum的价值观、原则及实践方法 41
4.5 Scrum的关键实践方法 42
4.6 Scrum的基本原则:经验过程控制 43
4.7 Scrum的过程模型 43
4.8 对Scrum和组织的变更 45
4.9 方法的应用 45
阅读参考 46
第5章 RUP的本质 47
5.1 什么是RUP 47
5.2 RUP的关键特征 47
5.3 RUP的根源 48
5.3.1 RUP的原理与实践 49
5.3.2 迭代:RUP的基本原则 51
5.3.3 架构驱动和用例中心化 51
5.3.4 RUP开发过程模型 52
5.3.5 时间轴 52
5.3.6 规程轴 53
5.3.7 RUP生命周期迭代类型 53
5.4 敏捷RUP变体 54
5.4.1 开放统一过程(OpenUP) 54
5.4.2 敏捷统一过程 55
5.5 方法的适用性 56
阅读参考 57
第6章 精益软件开发、DSDM和FDD 59
6.1 精益软件开发 59
关于精益软件开发的阅读参考 61
6.2 动态系统开发方法 61
6.2.1 背景 62
6.2.2 DSDM的基本原则 62
6.2.3 DSDM的核心实践 63
6.2.4 访问DSDM 65
6.3 特征驱动开发 65
FDD的最佳实践 66
第7章 敏捷的本质 69
7.1 敏捷正在改变什么 69
7.1.1 成功的新措施 70
7.1.2 不同的管理文化 70
7.1.3 需求、架构和设计的不同方法 71
7.1.4 修正编码和实现实践 71
7.1.5 测试和质量保证实践的转变 72
7.1.6 规划和进度安排的新方法 73
7.1.7 最大的变化:范畴VS日期,优先考虑日期 73
7.2 敏捷的重要动力:短时间盒内的工作代码 74
7.3 总结 77
第8章 可伸缩敏捷的挑战 79
8.1 方法的明显障碍 79
8.1.1 小团队规模 80
8.1.2 客户是团队的一部分 80
8.1.3 配置 80
8.1.4 架构形成 81
8.1.5 缺乏需求分析和规范文档 81
8.1.6 文化和物理环境 81
8.2 企业的障碍 82
8.2.1 过程和项目管理组织 82
8.2.2 现有正式的策略和流程 82
8.2.3 企业文化 83
8.2.4 固定日程、固定功能授权 83
8.2.5 开发部门和用户/客户代理团队之间的摩擦 83
8.2.6 通过纪律组织人力而不是生产线 84
8.2.7 高度分布 84
8.3 总结 84
第2部分 7种可伸缩的敏捷团队实践 89
第9章 定义/构建/测试模块团队 89
9.1 什么是定义/构建/测试模块团队 89
简单故事的生命周期 90
9.2 解除功能单元 91
9.3 敏捷模块团队的角色和职责 93
9.4 创建自组织、自管理的定义/构建/测试团队 96
9.4.1 团队中有合适的人 97
9.4.2 团队是被领导而不是被管理 98
9.4.3 团队了解任务 99
9.4.4 团队不断交流与合作 99
9.4.5 团队为结果负责 100
9.5 分布式的团队 100
第10章 计划和追踪两个级别 101
10.1 通用敏捷框架 101
10.1.1 定义迭代 102
10.1.2 剖析迭代 103
10.1.3 定义发布 103
10.1.4 剖析发布 104
10.1.5 计划发布 104
10.1.6 为发布分配需求 105
10.1.7 发布计划 105
10.2 小结:两个级别的计划 105
第11章 掌握迭代 107
11.1 迭代:敏捷的推动力 107
11.2 标准的两周迭代 107
11.3 计划和执行迭代 108
11.4 迭代计划 109
11.4.1 为迭代计划会做准备 100
11.4.2 参与者 110
11.4.3 迭代计划会议 110
11.4.4 结果:迭代计划 111
11.4.5 附加的迭代计划指导原则 112
11.4.6 分布式团队的迭代计划 112
11.5 迭代执行 113
11.5.1 承担职责 113
11.5.2 开发 114
11.5.3 交付故事 114
11.5.4 宣布故事完成 114
11.5.5 接收迭代 115
11.6 迭代追踪和调整 115
11.6.1 追踪每日站立例会 116
11.6.2 每日站立例会指导原则 116
11.6.3 追踪迭代状态 117
11.6.4 追踪剩余时间表 117
11.7 迭代节奏日历 118
第12章 更小、更频繁的发布 121
12.1 小型发布的好处 121
12.2 定义发布和制定发布的日程 123
12.2.1 日程驱动发布 123
12.2.2 最简单的模型:固定周期发布日期 124
12.2.3 估算特征集 125
12.3 计划发布 126
12.3.1 参与者 126
12.3.2 准备 126
12.3.3 发布计划过程 127
12.3.4 结果:发布计划 128
12.3.5 附加的发布计划指导原则 128
12.4 发布追踪 128
12.4.1 为发布状态审查做准备 129
12.4.2 发布状态审查会 129
12.4.3 成果/文档 129
12.5 发布路线图 130
12.6 大规模敏捷的预览:全面的发布计划和追踪 131
12.6.1 组织大规模的敏捷 131
12.6.2 多团队发布计划 134
12.6.3 发布追踪 135
第13章 并发测试 137
13.1 敏捷测试介绍 137
构建本质上可测试的系统 138
13.2 敏捷测试原则 138
13.3 单元测试 139
13.3.1 迭代过程中的单元测试 140
13.3.2 单元测试和测试驱动开发 141
13.4 接收测试 142
自动接收测试实例:FIT方法 142
13.5 组件测试 143
13.6 系统和性能测试 144
13.7 小结:简述敏捷测试策略 145
迭代和发布测试模式 146
第14章 持续集成 149
14.1 什么是持续集成 149
非持续集成:微观世界的问题 149
14.2 持续集成 151
14.3 实现持续集成的3个步骤 151
14.3.1 源代码集成 152
14.3.2 自动化构建管理 152
14.3.3 自动构建验证测试 153
14.4 什么是持续集成成功 155
第15章 定期反省和调整 157
15.1 迭代回顾 157
15.1.1 迭代回顾的形式 158
15.1.2 定量评估 158
15.1.3 定性评估 160
15.1.4 要求行动 161
15.2 发布回顾 162
15.2.1 定量评估 162
15.2.2 定性评估 163
15.2.3 利用迭代回顾消除组织的障碍 163
第3部分 创建敏捷企业 169
第16章 有意识的架构 169
16.1 什么是软件架构 169
16.2 敏捷和架构 171
16.2.1 极限编程:架构形成 171
16.2.2 Scrum 172
16.2.3 在FDD中的架构 172
16.2.4 RUP:以架构为中心 173
16.3 关于重构和可伸缩系统 175
16.4 你在创建什么 175
16.5 用于企业级系统的敏捷架构方法 176
基于组件的系统:组织遵从架构 176
16.6 创建架构跑道 177
16.6.1 架构的脆弱性和临时性本质 180
16.6.2 扩展架构跑道 180
16.6.3 通过产品记录重构 181
16.6.4 扩展架构跑道:与迭代同步 181
16.6.5 扩展架构跑道:一种精益的、基于拉的方法 183
第17章 伸缩时的精益需求:愿景、路线图、适时的细化 185
17.1 概述:需求金字塔 185
17.1.1 利益相关者的需要 186
17.1.2 解决方案的“特性” 186
17.1.3 软件需求 187
17.1.4 传统的需求方法 187
17.2 敏捷方法中需求的不同 189
17.2.1 在XP中的需求 189
17.2.2 Scrum、产品拥有者和产品记录 191
17.2.3 在RUP中的需求 192
17.3 一种可测量的、敏捷的需求方法:概要、路线图以及适时的细化 193
17.3.1 细化用户故事 200
17.3.2 细化用例 202
17.3.3 细化接收测试用例 203
17.4 小结 204
第18章 系统的系统及敏捷发布序列 205
18.1 敏捷组件发布日程 206
18.1.1 驱动敏捷序列的经验教训 208
18.1.2 敏捷发布序列的原则 209
18.2 敏捷发布序列 209
18.2.1 序列是同步的 209
18.2.2 序列是由愿景、主题和端到端用例驱动的 210
18.2.3 保持序列被跟踪并符合日程 211
18.2.4 测量过程和速度 211
18.2.5 观察系统级模式 212
18.2.6 管理相互依赖关系 212
18.3 发布序列审查 213
第19章 管理高度分布式开发 215
19.1 在规模上,所有的开发都是分布式开发 215
19.2 案例研究1 PING IDENTITY公司:分布式定义/构建/测试组件团队 216
19.2.1 Ping Identity案例研究背景 217
19.2.2 学到的其他经验教训 219
19.3 案例研究2 BMC软件公司:高度分布式的、大规模企业中的敏捷改革 220
19.3.1 背景 220
19.3.2 IMD应用敏捷 220
19.3.3 结果 220
19.3.4 从编码到编程:大范围采用敏捷 221
19.3.5 吸取的经验:贯穿大型组织的可伸缩敏捷实践 223
19.3.6 下一步骤:敏捷成功的第.年后 224
19.4 重视沟通 225
19.4.1 穿梭访问 225
19.4.2 通信基础设施 226
19.5 企业级敏捷的基础设施建设 228
19.5.1 源代码管理 230
19.5.2 网络基础设施 230
19.5.3 在早期迭代中提供基础设施 231
19.6 小结 231
第20章 对客户和操作的影响 233
20.1敏捷方法对销售和市场的好处 233
20.2对产品市场/产品管理的影响 235
20.3更小、更频繁的发布 236
更小、更频繁发布的挑战 237
20.4 优化敏捷发布过程 237
20.4.1 发布选择1:忽略敏捷 238
20.4.2 发布选择2:追求敏捷 239
20.4.3 发布选择3:通过从外部发布中分离出开发发布,进行优化 240
20.5 来自真正的销售和市场执行人员关于敏捷的真实挑战和错觉 244
第21章 组织变更 247
21.1 概述 247
21.2 为何敏捷需要改变组织 248
21.3 为Scrum和敏捷做准备 252
21.3.1 让软件过程和组织都“Scmming” 253
21.3.2 让执行主管成为组织变更的Scm主管 253
21.3.3 当心:变更是很困难的 254
21.4 消除软件生产率的障碍 255
21.5 给执行管理层的敏捷模型 257
21.5.1 支持采用敏捷 257
21.5.2 实践你宣扬的理论:把敏捷作为执行管理层实践 258
21.6 在大型组织中全面开展Scrum/敏捷 259
21.6.1 概观、评估和先导准备 260
21.6.2 先导项目 261
21.6.3 组织扩张 262
21.6.4 获得影响 262
21.6.5 度量、评估和调整 263
21.6.6 扩展和胜利 263
21.7 小结 264
第22章 度量业绩 265
22.1 敏捷测量:主要区别 265
22.2 测量团队业绩 266
22.2.1 敏捷项目度量 266
22.2.2 敏捷过程度量 266
22.2.3 评估成果 270
22.3 关于度量、“过程策略”和团队自评估 270
22.4 扩展至组织业绩:综合评价卡方法 271
22.4.1 效率 273
22.4.2 质量 273
22.4.3 价值交付 273
22.4.4 敏捷性 274
22.5 可伸缩的敏捷度量:为企业实现一个灵活的、自动化的和有意义的BSC 274
22.5.1 第1步:量化BSC矩阵元素 275
22.5.2 第2步:转为字母等级 275
22.5.3 第3步:聚合成产品线、业务单元和企业 276
结论:敏捷是可伸缩的 279
索引 281