本节课,我来详细介绍下项目开发中常见的开发模式,并告诉你如何选择。常用的开发模式有以下三种:
- 瀑布模式;
- 迭代模式;
- 敏捷模式。
在实际项目开发中,选择合适的开发模式取决于项目的特点和需求,需要结合具体情况进行灵活选择和调整。
瀑布模式
瀑布模式,是软件开发过程中常用的一种传统开发方法。在瀑布模式中,项目开发过程被划分为一系列有序的阶段,按照线性顺序依次完成,每个阶段都有明确的任务和交付物。
瀑布模式中,项目开发通常被分为需求阶段、设计阶段、开发阶段、测试阶段、发布阶段、运营阶段。每个阶段依次推进,每个阶段完成后才会进入下一个阶段,并伴随着交付产物:
- 需求阶段交付的一般是经过评审后的需求文档;
- 设计阶段交付的一般是设计文档和产品原型;
- 开发阶段交付的是可测试的代码、可测试的构建产物和开发文档;
- 测试阶段交付的是可发布的构建产物,例如:二进制文件、容器镜像;
- 发布阶段交付的是正在运行的现网应用。
瀑布模式的优点在于开发流程清晰、管理方便,适用于需求稳定、项目周期短的项目。然而,瀑布模式也存在一些缺点,如需求变更成本高、研发周期比较长,很难适应互联网时代对产品快速迭代的诉求。
迭代模式
因为瀑布模式,很难适应互联网时代对项目快速迭代的诉求。所以,后来诞生了迭代模式。
迭代模式是软件开发过程中常用的一种敏捷开发方法,旨在通过短周期的迭代循环迅速响应需求变化、提高交付质量和客户满意度。在迭代模式中,项目被切分为一系列小的轮次,每一个轮次都是一个迭代,每一次迭代都包括需求分析、设计、实现、测试和交付等环节。每次迭代的结果都是一个可运行的、增量改进的软件产品,这样可以持续地交付增量的软件版本。迭代模式不要求每一个阶段的任务都是做到最完美的,而是先把主要功能搭建起来,然后再通过客户的反馈信息进行不断地完善。
首先,在迭代模式中,项目团队首先进行项目规划和需求收集阶段,确定项目范围、优先级和目标。然后将整个项目划分为多个迭代周期,每个迭代通常持续 1~ 4 周。
在每个迭代开始时,团队会进行需求分析和设计工作,明确本次迭代的目标和任务。开发团队根据需求设计系统架构和功能,明确实现目标。
接着是编码阶段,开发团队会根据设计文档开始编写代码,实现本次迭代的功能。迭代周期结束时,团队会进行代码审查和单元测试,确保代码质量和功能完整性。
在测试阶段,测试团队会进行集成测试和系统测试,验证本次迭代开发的功能是否符合需求并且没有明显的缺陷。根据测试结果,团队可以及时发现和修复问题。
最后是交付阶段,将本次迭代开发完成的软件交付给用户或客户,收集反馈意见和建议,根据用户需求灵活调整下一次迭代的计划和优先级。
迭代模式的优点在于可以灵活应对需求变化、提高产品质量和用户满意度,同时能够更快地实现软件交付。它的灵活性极大地提升了适应需求变化的能力,克服了高风险、难变更、复用性低的特点。然而,迭代模式也存在一些挑战,如需求管理、进度控制等问题。迭代模式比较专注于开发过程,很少从项目管理的视角去加速和优化项目开发过程
敏捷模式
因为传统的研发方式越来越不能胜任互联网时代的研发需求,后来就出现了敏捷开发模式。
敏捷开发把一个大的需求,分成多个可分阶段完成的小迭代分别完成,每个迭代交付的是一个可使用的软件,在此过程中软件一直处于可使用状态。行业中有多种敏捷开发模式,其中最有代表性的是 Scrum 开发模式。
Scrum开发流程中的三大角色:
- 产品负责人(Product Owner):主要负责确定产品的功能和达到要求的标准,指定软件的发布日期和交付的内容,同时有权力接受或拒绝开发团队的工作成果;
- 流程管理员(Scrum Master):主要负责整个Scrum流程在项目中的顺利实施和进行,以及清除挡在客户和开发工作之间的沟通障碍,使得客户可以直接驱动开发;
- 开发团队(Scrum Team):主要负责软件产品在Scrum规定流程下进行开发工作,人数控制在5~10人左右,每个成员可能负责不同的技术方面,但要求每成员必须要有很强的自我管理能力,同时具有一定的表达能力;成员可以采用任何工作方式,只要能达到Sprint的目标。
Scrum 开发模式的流程如下:
- 首选 PDM(产品负责人) 会确定一个Product Backlog(按优先顺序排列的一个产品需求列表,一般是按优先级排序);
- Scrum Team 根据 Product Backlog 列表,做工作量的预估和安排;
- 有了 Product Backlog 列表,我们需要通过 Sprint Planning Meeting(Sprint 计划会议) 来从中挑选出一个 Story 作为本次迭代完成的目标,这个目标的时间周期是 1~4 个星期,然后把这个 Story 进行细化,形成一个Sprint Backlog;
- Sprint Backlog 是由 Scrum Team 去完成的,每个成员根据 Sprint Backlog 再细化成更小的任务(细到每个任务的工作量在 2 天内能完成);
- 在 Scrum Team 完成计划会议上选出的 Sprint Backlog 过程中,需要进行 Daily Scrum Meeting(每日站立会议),每次会议控制在 15 分钟左右,每个人都必须发言,并且要向所有成员当面汇报你昨天完成了什么,并且向所有成员承诺你今天要完成什么,同时遇到不能解决的问题也可以提出,每个人回答完成后,要走到黑板前更新自己的 Sprint burn down(Sprint 燃尽图);
- 做到每日集成,也就是每天都要有一个可以成功编译、并且可以演示的版本;
- 当一个 Story 完成,也就是 Sprint Backlog 被完成,也就表示一次 Sprint 完成,这时,我们要进行 Srpint Review Meeting(演示会议),也称为评审会议,产品负责人和客户都要参加(最好本公司老板也参加),每一个 Scrum Team 的成员都要向他们演示自己完成的软件产品(这个会议非常重要,一定不能取消);
- 最后就是 Sprint Retrospective Meeting(回顾会议),也称为总结会议,以轮流发言方式进行,每个人都要发言,总结并讨论改进的地方,放入下一轮 Sprint 的产品需求中。
术语解释:
- 产品待办列表(Product Backlog): 包含所有待实现的产品特性需求,由产品负责人负责维护和排序;
- 迭代待办列表(Sprint Backlog): 每个迭代开始时选定的要完成的任务列表,由开发团队共同决定;
- 冲刺(Sprint): 固定长度的开发周期,通常为2-4周。在每个冲刺中,团队致力于交付一定数量的功能;
- 冲刺计划会议(Sprint Planning Meeting): 在冲刺开始前召开,产品负责人和开发团队确定要实现的功能和相关任务。
敏捷开发可以快速迭代、拥抱变化,所以非常适合互联网时代对软件的发布诉求。因此也是当前最为主流、用的最多的开发模式。
迭代模式 VS 敏捷模式
通过上面的介绍,你已经了解了迭代模式和敏捷模式。有没有感觉迭代模式和敏捷模式很像?我在刚开始学习的时候,会觉得二者有很多相同点,傻傻的分不清。本小节,我来介绍下二者的异同。
在我看来,迭代模式属于敏捷开发中的一部分,属于包含与被包含的关系。敏捷模式是一种基于模式和自组织的软件开发方法,强调团队合作、快速交付和持续改进,而且更注重用户的需求和反馈。
二者的核心区别如下:
- 用户参与:敏捷开发更加强调用户的持续参与和反馈,而传统的迭代开发可能在迭代初期需要用户参与,但不如敏捷开发持续和深入;
- 性质不同:迭代开发是软件开发的生命周期模型,是一种开发过程;敏捷开发是多种软件开发项目管理方法的集合,是一种开发方法。这是二者最根本的区别。敏捷开发不仅是一种开发模式,它还包括一套文化和实践,如日常站立会议、持续集成等,而传统的迭代开发不包括这些实践。