《洞悉敏捷》客观全面地介绍了全球正在使用的各种敏捷方法的价值、原则、架构、过程和适用场景,包括敏捷方法和瀑布式方法的对比;Scrum、Kanban、XP、Crystal、FDD、Lean、DSDM 等各个敏捷方法之间的对比,需求搜集、规划、评估、跟踪、报告、测试、集成;超越IT 领域的敏捷思想,必需跨越的常见问题及其解决方案等。基于学术研究及亲身经历,通过逼真用例、实际案例以及对先驱实践者发人深思的采访,作者将众多复杂的概念融会贯通,对不同敏捷实践中的关键概念进行了清晰地阐述。
无论你是何角色,也无论你经验如何,《洞悉敏捷》都会为你已经或是即将开启的敏捷之旅打好坚实的基础。
第1章 敏捷软件开发的历史及价值观 1
软件开发方法的缘起 1
敏捷软件开发方法的兴起 2
敏捷宣言 3
开曼设计公司 6
结论 6
总结 7
参访Robert Martin(Bob大叔) 7
参考资料及延伸阅读 10
复习题 11
复习1 11
复习2 11
第2章 敏捷型组织文化的注意事项 12
什么是组织文化,以及为什么重要? 13
团队成员的视角 13
差别在哪? 13
成功 18
失败/风险 21
经理的视角 23
有什么不同? 23
成功 25
失败/风险 27
执行官的视角 29
差别在哪? 29
成功 32
失败/风险 34
结论 36
总结 36
采访Scott Ambler 38
参考资料及扩展阅读 39
复习题 40
复习1 40
复习2 41
复习3 41
复习4 41
第3章 理解不同类型的敏捷 42
极限编程(XP) 43
频繁发布,短周期开发 43
结对编程 45
定期构建,集成测试以及快速反馈 46
Scrum 46
特性驱动开发 48
动态系统开发方法 49
精益软件开发 51
看板方法 52
水晶方法族 53
认证 55
开曼设计公司所实施的工具和技术 56
结论 57
总结 57
采访Alistair Cockburn 58
参考资料及延伸阅读 60
复习题 61
复习1 61
复习2 61
第4章 介绍不同的角色 62
深入学习Scrum中的角色 62
产品负责人 63
Scrum Master 67
团队 72
鸡和猪的故事 76
角色实例 77
扩展的团队成员 81
其他方法中的角色 82
项目发起人 83
需求收集人员 83
项目经理 83
团队教练 84
架构师或技术主管 84
开发团队 85
文档和培训 86
敏捷教练 86
看板 86
角色的实例 86
初创公司 87
中型公司 87
大型跨国公司 88
结论 90
总结 90
对Roman Pichler的采访 92
采访Lyssa Adkins 94
参考资料及延伸阅读 95
复习题 97
复习 1 97
复习 2 97
复习 3 98
复习 4 98
第5章 收集和记录需求的新方法 99
老的收集需求的形式 100
Scrum中的敏捷需求 100
用户故事的格式 101
史诗 103
验收标准 105
编写用户故事的最佳实践 106
对其他方法的补充和思考 110
回顾Scrum中的需求和用户故事有助于我们对比的理解
其他的方法。 110
极限编程 110
动态系统开发方法 110
对需求的增强 111
引入用户角色 111
人机交互(HCI)和易用性 112
商业价值 113
从用户故事到可交付的产品 114
发布管理 115
特性管理―市场/销售 VS 开发 115
客户定制代码 116
沟通 117
分享愿景 117
内部路线图和外部路线图 119
精益产品开发和最简可行产品(MVP) 121
结论 123
总结 123
采访Ellen Gottesdiener和Mary Gorman 125
参考资料和扩展阅读 128
复习题 130
习题1 130
复习题2 130
复习题3 130
复习题4 130
第6章 梳理和计划 131
产品待办事项列表(Scrum和XP) 132
特性驱动开发(FDD) 133
为故事排优先级 134
基于价值的排序 134
价值流图 135
莫斯科规则(MoSCoW) 135
Kano模型 136
估算 137
工作量水平(LOF)或T恤尺码法 137
理想时间(天或小时) 137
小时数 138
故事点 138
团队参与 139
Scrum:产品待办事项列表梳理会议 141
额外的输入 142
Scrum:Sprint计划会议 146
输入 146
计划会议 146
输出 147
鸡与猪的典故 147
极限编程:XP计划游戏 148
遗留代码的维护 149
在Sprint中预留时间 149
为维护分配一个团队 149
兵分两路 149
项目三角约束 150
看板 151
结论 151
总结 152
采访Mike Cohn 153
参考资料和扩展阅读 155
复习题 157
复习1 157
复习2 157
复习3 158
复习4 158
第7章 测试、质量和集成 159
质量 159
建立以质量为中心的企业文化 160
测试驱动的开发(单元测试) 161
重构代码 162
一个TDD和重构的例子 163
更复杂的测试用例 170
手动、自动或用户测试 177
结论 181
总结 181
采访Tim Ottinger 182
参考资料及延伸阅读 185
复习题 186
复习1 186
复习 2 186
第8章 跟踪和报告 187
看板 188
看板 189
在制品(WIP)限额 189
跟踪 192
极限编程(XP) 192
燃图 192
信息辐射器 196
特性驱动开发(FDD)的停车场工具 197
其它流程图 198
跟踪质量 198
会议或仪式 200
每日立会 200
Sprint评审或演示 202
回顾会议 203
衡量敏捷的成功 204
结论 205
总结 205
采访Kent McDonald 207
参考资料和扩展阅读 208
复习题 210
复习1 210
复习2 210
复习3 210
复习4 210
第9章 延伸到IT之外的敏捷 212
软件开发之外的产品 213
客户协作 213
响应变化 216
可工作软件 218
个体与交互 220
敏捷的与市场对话 220
特性管理 221
有限的受众 222
持续增强 222
其它部门中的敏捷 222
广泛使用的工具 223
敏捷营销 224
结论 227
总结 227
采访Travis Arnold 229
参考资料和扩展阅读 230
复习题 232
复习1 232
复习2 232
复习3 233
复习4 233
附录 John Deere公司案例研究 234
术语表 241
索引 279
——InfoQ中国总编辑崔康
作为软件工程师,我们是幸运的。软件赋予了我们改变世界的能力,用一个人的力量去改变世界的能力。一个世界五百强公司搞的大型建设项目,肯定是无法由个人去完成的;然而,一个大型软件工程,却可以被两三个人在两个礼拜内实现。这是多么奇妙的事情!Agile 方法,是几代软件开发者们实践和智慧的结晶。它不只是对团队有用。学会它、善用它,其实更是你个人的福祉。它会带给你强大的力量,让你能够独当一面,成为一个人的军队。虽万千人吾往矣!
——资深软件工程师 Gary Zhang
“这是一本非常好的敏捷入门书, 深入浅出、通俗易懂,可以让读者迅速体系化掌握敏捷的各种概念、方法与实践,了解如何跟自己的项目相结合、如何在组织内落地。每章结尾还精心设计了对一到两位敏捷大师的访谈,譬如Bob 大叔、Mike Cohn、Scott Ambler、Lyssa Adkins、Alistair Cockburn等业界敏捷专家,内容非常精彩。”
——《敏捷无敌》作者、《敏捷开发一千零一夜》主编王立杰
常被一些敏捷的初学者问到“有没有一本书可以使我对敏捷的各种实践和方法有个大概的了解呢?”,而我的回答是“没有,因为敏捷博大精深,需要慢慢体会和学习”。虽然说得不错,但我却一直希望有这样一本“浓缩”的敏捷丛书,帮助大家快速入门。《洞悉敏捷》刚好填补了这个空缺。本书全面介绍了敏捷的各个领域,对各种实践方法进行了说明和比较,并把对多位业界大牛的采访收录其中。阅读本书,不仅使初学者可以一窥敏捷的全貌从而进行更深入的学习,而且让有经验的实践者能对敏捷有更全面和客观的认识。
——软件工匠和敏捷教练姚若舟
自2001 年敏捷宣言缔造以来,敏捷软件开发方法在中国IT 产业蓬勃发展,已经成为不可逆转的趋势。尤其在互联网时代,不敏捷就意味着落后挨打。然而在市场上少见一本囊括了敏捷开发方法全部基础的入门书籍。中国大学和研究生的软件工程课程体系里,已经开始逐渐引入敏捷开发作为现代软件工程方法的课程,但缺乏一本很好的教材能够囊括基本的方法、
实践和案例。对于企业里刚接触敏捷的工程师和管理层,阅读本书也是踏入敏捷世界的一个良好的开端。
——精益看板国际认证讲师,曾任微软过程改进经理王明兰
推荐序一
从2001 年2 月17 位签署人在盐湖城雪鸟滑雪场共同推出“敏捷宣言”,从而标志着敏捷方法的诞生开始到15 年后,敏捷方法已经变成了软件开发的主流开发方式。甚至已经不限于软件开发,有数据表明,敏捷方法已经开始从最早的类似于人事系统(注:克莱斯勒的C3 项目是极限编程的源头),工资系统,互联网软件到传统的核武器系统,编译器,操作系统,实时工业控制,医疗设备系统等。在中国,我们也见到或者帮助大型医疗设备研发团队,石油天然气行业设备研发团队,军工科研向敏捷开发方式转型。
15 年来,随着敏捷方法越来越流行,敏捷方法家族也有了长足的发展,也从最初的Scrum, 极限编程,水晶,DSDM,有发展出了看板、精益以及众多敏捷小工具等等。随着越来越多的组织开始接触敏捷。这些组织不可避免遇到了林林总总的挑战,比如,
如何让这些组织了解敏捷方法的关系与区别,从而更好的选择敏捷药方?
敏捷方法的背后蕴含的企业文化如何?
如何支持传统组织以及传统组织里的各种角色向敏捷工作方式转变?
除了教科书上的敏捷,还有那些有用的工具、技巧和方法?
敏捷组织里面的各种角色以及他们的职责有哪些?
不同敏捷方法中最通用的部分有哪些?
在公司发展的不同阶段需要多敏捷?
针对这面这些棘手的问题,您都可以从这本书里面找到一些答案或者启发。
如果您想迅速的了解敏捷方法的概况,并能够快速上手,这本书是一个不可多得的选择。
唤醒者滕振宇
2015 年•夏
推荐序二
为什么要看这本书
市面上有关敏捷软件开发(下文简称敏捷)的书已经很多了,为什么选择要看这本书呢?这本书非常全面地介绍了敏捷下的各种方法,包括Scrum、看板、极限编程、水晶开发方法、特性驱动开发、精益软件开发以及动态系统开发方法。并且还深入地介绍了每种方法所涉及的团队角色。书中每章最后都会对一名敏捷大牛进行采访,比如Robert C Martin,Alistair
Cockburn,Mike Cohn 等。本书另外一个重要的特色是,在最后一章,专门介绍了IT 之外的敏捷是什么样子的。
敏捷有这么多方法,那么在开始采用某个方法之前,我认为有必要搞清楚为什么要进行敏捷?
为什么要进行敏捷软件开发
敏捷起源于2001 年,有17 位轻量型软件开发的大牛,一起聚集在雪鸟滑雪胜地,最后形成了敏捷宣言和敏捷原则。在随后的十多年里,全球范围内越来越多的企业或组织在进行敏捷的尝试,也有很多成功与失败的案例。那么为什么越来越多的企业或组织要进行敏捷转型呢?
首先,让我们一起来看一下软件开发的本质。软件开发,从根本上来看,是把客户(或用户)的脑袋中的想法,转换成可以工作的软件。这一过程就决定了软件开发的本质是学习与反馈的过程。也就是说,软件开发的第一步是要学习,不断地学习。为了能够真正理解客户(或用户)脑子当中的想法,我们需要不断(在软件开发过程中)去和客户(或用户)沟
通,了解他的行为,学习他的思维模式。从而真正理解客户的需求,而不是只在软件开发前期和后期与客户(或用户)沟通。除了不断学习,软件开发的第二步是反馈。在软件开发过程中,反馈是必需的。在与客户(或用户)不断学习的过程中,我们需要带着可工作的软件去和客户(或用户)学习沟通。只有这样,我们才能得到他们真正的反馈。基于客户(或用户)的反馈,我们再进行调整从而响应变化。因此软件开发的本质就是不断学习和持续反馈。
“新产品开发的规则在发生改变。许多公司已经发现,高质量、低成本和差异化已经很难超越当今市场白热化的竞争。超越市场需要的是速度与灵活性。”为了赢得市场,我们需要足够快的速度和灵活性,也就是说我们需要不断学习客户(或用户)的想法(需求),并且持续获得客户(或用户)的反馈。而敏捷可以完美得符合软件开发的本质。为什么这么说呢?让我们一起看看什么是敏捷。
什么是敏捷
敏捷就是尽早频繁的交付商业价值。具体展开来讲,敏捷是一种带有固定时间盒的迭代增量式软件开发方法。迭代(iterative),指的是需要重构已做的工作(即要改设计)。而增量(Incremental),指的是在现有软件的基础上逐渐增加新功能(不改原来的设计)。固定时间盒,可以使团队在短时间内就获得一些产出,从而可以持续获得客户(或用户)的反馈。因此,敏捷天生就是为软件开发而生的,它和软件开发的本质有机地结合在一起。
最后想要强调的一点是,敏捷不是一种状态,不是说我们到达了某个状态或者地方就代表我们敏捷了。敏捷更像是在路上,我们一直朝着敏捷的方向前进,不断学习与持续反馈。
中国敏捷社区的主要推动者姜信宝
2015 年•夏