纵观敏捷开发的发展过程,充满了“拿来主义”和“实用主义”的思想
二十世纪三十年代,当中国闭关自守的大门被砸破之后,帝国主义列强为中国“送来”了鸦片、枪炮、电影 及各种小东西进行军事、经济、文化侵略,因而使清醒的青年们对于外来的东西“发生了恐怖”,产生了一种盲目排外、全面否定的思想。面对这种社会现状,鲁迅先生提出了“我们要运用脑髓,放出眼光,自己来拿!”的“拿来主义”。而实用主义则是由美国的皮尔士提出,其根本纲领是:把确定信念作为出发点,把采取行动当作主要手段,把获得实际效果当作最高目的。
敏捷开发的聪明之处正在于它只定义了核心的价值观和12个基本原则,而把如何基于“拿来主义”和“实用主义”思想,有效利用基于核心价值观和基本元则的各种最佳实践,实现真正的敏捷开发的任务交给了使用者。成功了,功在敏捷,倘若失败了,则败在实施。在敏捷宣言发布之前,很多最佳实践就已存在。例如RUP中的迭代式软件开发、两级项目规划、风险和价值驱动的生命周期等;例如XP中的持续集成、整体团队、测试驱动开发等;象“精益开发”中的减少浪费、快速交付、尊重个人等。而敏捷开发只是奉行“拿来主义”原则将其我们所有。而决定每种最佳实践是否被我所有的原则就是“实用主义”。敏捷开发关注如何快速交付客户价值,避免交付对客户没有价值的东西,避免过度规划和设计造成的浪费,这些都是“拿来主义”和“实用主义”思想在敏捷开发中的体现。
敏捷开发 VS RUP
在敏捷开发最佳实践中我们很容易看到昔日RUP的核心思想:迭代式软件开发、两级项目规划和持续集成的影子。同时顺应敏捷开发的发展,RUP经过敏捷化定制推出的OpenUP,正是RUP全面支持敏捷、贡献敏捷的具体表现。同时,RUP在解决今天敏捷开发过程中存在的问题方面有着无法忽视的价值。尤其是在敏捷走向规划化的时候,很多敏捷实践者都会发现敏捷团队的沟通、文化冲突、架构管理和变更管理等方面,正遇到越来越多的麻烦。而在这方面,RUP的风险驱动的生命周期管理和以架构为核心的最佳实践,会对在组织级推广敏捷过程时,提供完美的解决方案。怪不得敏捷开发大师Scott Ambler会说:RUP实施的好,就是敏捷的过程;而敏捷过程实施的好,就是RUP。
RUP以其完整的软件开发过程和过程中每个环节具体工作方法、最佳实践的定义,奠定了软件工程方法和思想基础,它培养了整整一代软件工程从业人员。今天随着敏捷开发过程的出现和成熟,Rational已经完成了由传统的RUP向今天合适的软件开发过程的演进,赋予RUP以新的内涵和能力。因此,由RUP发展而成的RMC最佳实践库是整个软件工程领域(IBM和整个软件工程社区)最佳实践的结晶,它既包含传统的软件开发过程,也包含业界最新的敏捷开发和大规模敏捷开发的最佳实践。它更像是一个能够满足不同企业、不同规模项目要求的软件开发过程的过程族,丰富而不死版,默默贡献却又不拘一格。
敏捷开发 VS 精益开发
敏捷开发的成长得益于很多其它软件交付方法的发展,这其中精益开发为敏捷带来很多的思想精髓。精益(Lean)开发始于丰田汽车的流水线生产的管理方法,它的核心思想是避免所有的浪费和尽早地让客户参与。而敏捷开发的哲学是集中精力向客户交付价值,避免生产对客户没有价值的东西,因此有效利用精益方法关于如何减少浪费的相关经验,会对敏捷方法大有裨益。
基于Poppendieck的统计分析,软件开发过程中的九大浪费主要在于:
1. 部分完成的工作:成为过时的、价值不明的工作,造成潜在浪费
2. 额外的特性:额外的成本、额外的工作,产生的却是可能对客户没有价值的功能
3. 重新学习:同样的事情做两遍,并可能重新犯同样的错误
4. 任务转换:必然带来流动损耗和资源浪费
5. 移交:关键信息的损失,导致价值的衰减和资源浪费(特别是通过文档 )
6. 延迟:意味带来更多的变更机会和未能向客户交付价值
7. 缺陷:成本 = 影响 x 修正时间
8. 多余的流程 :代表了不必要的文档工作和无效的沟通
9. 管理活动 :不恰当的管理活动意味着浪费的工作量和失去关注点
基于以上统计结果,如何有效利用敏捷开发实践,避免上述的各种浪费,是精益开发带给敏捷实践者最大的礼物。