最近在学习一些敏捷开发相关的知识,觉得有必要和传统的瀑布开发模式做个比较。因为瀑布模式仍然被很大程度在使用着,作为技术开发出身我有较深的体会,相信有针对行的对比分析会有更好的理解。
关于瀑布模式和敏捷开发的基本特征可以参照:https://blog.csdn.net/vessalasd1/article/details/70142105
个人理解对比如下:
瀑布模型 | 敏捷开发 | |
工作方式 | 1.以文档驱动,将软件项目开发周期严格划分为几个固定阶段(需求分析,系统设计,软件设计,编码,测试,交付),每个阶段结束都有对应的详细文档作为输出 2.上一个阶段的输出会作为下一个阶段的输入,直至完成整个开发流程 3. 重视和强调过程文档 | 1.更加强调人的协作(团队之间,客户与团队之间),在高度协作的环境中使用迭代方式进行增量开发 2.每次迭代完成都有可交付客户查验的产品功能并根据客户的反馈进行产品功能的调整和完善 3.进行多次迭代直至完成完整产品交付 |
优点 | 1.每个阶段目的明确,阶段人员完全专注于该阶段的工作,有助于提高阶段效率 2. 由于存在详细的过程文档,在早期就能明确出项目的范围和概况,能够更有效的组织和调配资源开展项目 | 1.开发的阶段性成果可以在开发过程中被客户查验,降低了项目开发的风险 2. 灵活性高,需求的变更可以在任何时候进行 |
缺点 | 1.阶段间大量的文档,极大的增加了工作量 2.项目后期才能展示成果给客户,增加了项目开发的风险 (例如项目最终与客户预期差别很大,若要修复会造成项目的延期和成本增加) 3.需求变更的成本较高 (需求的变动理论上也会严格按照各个阶段去实施,导致时间成本过高) | 1.最终交付的内容无法预测,预期和实际完成的内容经常会有很大差异 2.敏捷需要高水平的协作以及开发人员和用户之间的定期沟通。 业务和IT人员在沟通前需要做大量的准备工作,但很多情况下业务的沟通时间无法保证 |
适用项目 | 软件需求十分明确并且不会有频繁的变化 | 需求不明确的项目、创新性的项目或者需要抢占市场的项目 |