听到的最多的对敏捷开发的描述是迭代的开发,边做需求边做开发等等。有人还认为敏捷开发是一种模式,只要像其他方法论那样遵守哪些时间该做哪些事情就可以敏捷了。感觉这些说法都不能准确的描述敏捷开发,有些甚至是错误的。
经过这两年敏捷开发的实践,我感觉敏捷开发的本质就是一个合作和改进的过程。只有不断的改进,才能避免模式的照搬照抄,做出符合需求的,健壮的系统。
敏捷开发团队中那个角色是最重要的呢? 我认为客户是最重要的,这里的客户不一定是真正意义的客户,而是指系统的最终使用者。因为客户才是需求的真正来源。一个项目的开发可能经历几个月甚至几年的经验,就算你前期需求调研做的再细致,在信息技术和电子商务发展如此迅速的今天,系统在你交付的时候,很可能已经不再符合客户的需求了。所以如果没有客户的全程参与,开发团队很可能就走错了方向,顶多开发出一个精致的又不能用的机器。 怎么样的开发才能称为真正的敏捷开发呢? 我认为可以从以下几个方面来考虑
1. 你的项目有没有客户的全程参与? 尽管你有自己的需求团队(PD, BA)等等,但他们不是真正意义上的用户,不能保证真实的反应客户的需求。
2. 你的项目有没有进行真正的迭代和增量开发? 这里的迭代不仅仅是时间上的分段,而是要在每个迭代中都能产出可交付的,可测试的功能点,有人可能说他们的项目可能前几个迭代都在做基础架构的实现,不可能做出真实的可交付的功能。我觉得这是不符合敏捷开发的,敏捷开发要求我们在最短的时间作出客户最需要的功能,最大限度的降低项目的风险,如果花几个月的时间做基础架构,而后面做出的功能又不符合客户的要求或者客户要求变更需求,那么就有可能进行架构变更,代价就很大了。所以,敏捷开发也要求有可塑性强的,灵活的系统架构。
3. 你的项目有没有做出合理的任务分解,只有把大的任务(task)分解成小的增量,每个增量都只需要最少的计划和最短的完成时间,才能使整个开发过程变成可迭代的增量开发工程。
4. 你的项目有没有demo和feedback? 在每个迭代都给客户进行演示和要求客户进行反馈是敏捷开发与客户交流的最佳实践。
5. 你的项目是如何看待需求变更的,在敏捷开发中,需求变更在项目的任何一个阶段都是可接受的或者说受欢迎的。因为客户不可能完全正确的对他们的需求就行描述,他们的描述也不可能完全正确的体现在系统的实现中,只有在不断完善不断改进的过程中才能做出符合客户要求的与时俱进的系统来。
6. 你的项目是如何进行测试的,在敏捷开发过程中,测试时全程介入开发的全过程的,通过测试能尽可能早的发现问题,解决问题,这就要求敏捷开发团队提交的每段代码都是testable的,每个完成的task都是可交付的、可测试的。 以上是我对敏捷开发的一些认识,希望大家多多交流,共同提高。