2001年2月由17位世界轻量级方法学家提出了一份敏捷联盟宣言,这个宣言只是简单的四 句话,但却是敏捷方法的精髓,也是对敏捷的高度抽象,这便是敏捷之道的最高境界:
- 人与交互 胜过 过程与工具
- 可以工作的软件 胜过 面面俱到的文档
- 客户协作 胜过 合同谈判
- 响应变化 胜过 遵循计划
Scrum 是目前最为流行的 Agile 开发方法,它简单易懂,并且易于采用。Scrum 实施的重点是团队领导和需求管理,强调对客户需求的快速反应以及团队的共同协作和自我管理。Scrum 方法通过将整个开发过程划分为若干个固定时间长度的 Sprint(迭代,有人也习惯叫 Iteration,其实是同一个概念),在每个 Sprint 结束时得到一个可以执行并演示的产品的增量版本,来推动产品的不断演进,直到最终发布。
在 Scrum 方法中共有 3 种角色:
- Product Owner(产品负责人):负责制定软件开发需求,确定待开发产品各项功能需求的优先级,并为产品的最终发布负责。
- Scrum Master(Scrum 导师):对整个 Scrum 过程负责,主持并参与所有 Scrum 工作会议。指导并督促全体项目成员遵从 Scrum 规则和实践,定期检查整个 Scrum 项目的执行情况。
- Team(开发团队):负责软件的具体开发测试。负责在每一个 Sprint (迭代)实现规划的软件功能,并在 Sprint 结束时生成可运行、演示的产品的增量版本供全体成员预览并检查。
Scrum 项目开发的大致流程如下图所示:
Product Backlog for Release k
- Iteration (Sprint) 1
- Feature 1
- Feature 2
- Iteration 2
- Feature 3
- Feature 4
- ...
- Iteration n
Iteration (Sprint) Backlog
- User Story 1 in Feature 1
- Task 1
- Task 2
- ...
- User Story 2 in Feature 1
- Task 1
- Task 2
- ....
- User Story 3 in Feature m
- Task 1
- Task 2
- ....
Work Item
- User Story: 定义用户角度的产品特征
- Tasks: 工作任务,如设计、开发、测试
- Test Case: 定义测试用例
- Bugs:测试后发现软件中存在的错误
- Issues: 定义对项目有影响的风险
Scrum 项目的起点是由 Product Owner 制定的待开发项目的 Product Backlog (需求列表)。这是一张包含功能性需求和非功能性需求的清单,并且按各项需求的优先级进行排序。然后,在此基础上,Product Owner 与开发团队一起进行评估并制定软件开发计划,计算出需要多少个 Sprint(迭代)来完成该项目。注意:Product Backlog 里的内容以及优先级会随着项目的进行而不断变化,这是由于 Agile 开发注重对客户要求的快速反应所决定的。
在每个 Sprint 将要开始时,从 Product Backlog 中拿出优先级较高的部分需求来实现,并按不同的开发组将需求的开发测试分解成各个不同的 Task(任务),从而制定该 Sprint 的开发计划,也就是 Sprint Plan。一个 Sprint 的时间是固定的,通常是 1 个月或 2 个星期。
在 Sprint 开始后,所有团队成员每天都要进行一项重要的 Scrum 实践,那就是 Daily Scrum Meeting(每日例会),时间十五分钟,会议的目标是检查开发进度,并协调团队工作。每位开发团队成员都需要回答三个问题:
- 从上次例会后的一天里你做了什么?
- 从现在到下次例会的一天时间里,你准备做什么?
- 在实现 Sprint 和项目目标的工作中,你碰到了什么困难?
在 Sprint 的结束后,所有人一起召开 Review Meeting,对团队提交的可运行的产品增量版本进行检查及评审,保证所实现的功能与需求一致。紧接着开始下一个 Sprint,周而复始,直到所有需求开发完成为止。