作者:朱金灿
来源:http://blog.csdn.net/clever101
首先谈谈我对敏捷开发的理解。如果我的理解有不到位之处,请各位看官谅解并拍砖。应该说任何一种新的开发方式都是在如何解决旧的开发方式的弊端上产生的,敏捷开发也不例外。传统的瀑布式开发将开发分为需求分析、系统设计、系统开发、系统部署和系统维护等多个阶段,看上去很美好,却忽略一个简单的事实:冗长的开发周期敌不过用户的需求变化。首先需求分析就是一件很模糊的事,你问用户需要什么,大多数的用户估计会这样回答你:我需要一个功能强大、运行快速的系统,就算退一万步讲,就算用户把需求讲清楚了,难道用户的需求不会变化吗?比如用户看到互联网正成为潮流,估计那天他就要求系统要能联网,比如那天用户看到硬件已经是多核了,就要求系统支持多核并行计算。你能指责用户的反复无常吗?你不能。如果你不能适应用户的变化,就只能被无情的市场淘汰掉。这时你就明白了世界上一个朴素的真理:世界上不变的只有变化。
敏捷开发就应适应用户需求变化而生的。敏捷开发是怎样做到迅速响应用户变化的呢?敏捷开发提出一个最高原则:可以交付用户使用的软件胜过一切。下面以一个具体例子说明传统的瀑布式开发和敏捷开发的区别。比如A软件公司要为B工厂开发一个管理系统,这个管理系统包括录入职工信息、查询职工信息、录入生产资料信息、查询生产资料信息、生成财务报表、打印财务报表等6个功能,采用传统的瀑布式开发是这样干的:
后来A公司发现这套开发流程不能迅速响应用户的需求变化,采用了下面一种敏捷开发流程:
从上图可以看出,敏捷开发实际上是将瀑布式开发中设计、开发和测试等阶段都分割到一个个敏捷开发周期中,强调通过不断通过交付可用版本给用户获取用户的反馈来积极响应变化。敏捷开发放弃开发前冗长的需求分析和系统设计,强调快速的迭代修改更能响应用户的需求变化。因此与敏捷开发需要和敏捷测试和敏捷设计配套。
敏捷开发看上去很美好,是不是放之四海而皆准呢?在我看来,敏捷开发需要在一定的条件才能实施:
1. 开发团队需要比较高度的自主权,并单独负责一个项目或产品的开发。国内的现状是多数老板有项目就接,一个骨干往往承担多个项目的开发,一个项目定好的敏捷开发周期也会被其它项目的活动所打断,能搞敏捷开发吗?
2. 从上图可以看出,用户参与使用软件并积极反馈是敏捷开发的重要一环。如果你做的是国家单位的项目,就算你能交付可用的版本,但单位的大爷就是不用不反馈,这又怎称得上敏捷开发?
3. 实行敏捷开发需要一个高素质的开发团队。首先开发团队必须明白敏捷开发的意义所在,其次他们需要有比较强的沟通能力,因为敏捷开发需要团队之间以及开发人员和用户之间的充分沟通,而现实中开发人员闷头拉车的居多。最后开发人员的开发水平要适应敏捷开发的节奏,如果一个小功能的实现都超出一个敏捷开发周期,谈何敏捷?
当然敏捷开发中强调团队之间的充分沟通,以及通过迅速交付可用版本来提高测试的频率等优点在软件研发实践还是应该予以吸收的。