敏捷开发是一种开发理念,一种开发原则,不是开发方法。
敏捷开发的价值观
- 个人与互动胜过过程与工具。
- 可用的软件胜过复杂的文件。
- 跟客户的密切协作,优于合同和谈判。
- 能够响应变化,优于遵循计划。
敏捷开发原则
- 交付原则
- 尽早且持续交付有价值的软件来满足客户。
- 拥抱变化,欢迎改变需求。
- 持续交付,小步快跑
- 使用可用性在衡量软件进度的指标。
- 持续关注软件设计和软件技术是否优秀。
- 保持简单,尽最大可能减少不必要的工作。
- 人员沟通原则
- 业务人员与开发人员必须在一起工作,每日互动。
- 信任个人,积极主动。
- 面对面交谈是最好的沟通方式。
- 保持稳定的人员的节奏。
- 自我组织架构和设计,不需要专门的架构师。
- 团队要定期反思如何更有效,并相应地进行调整。
从敏捷开发的价值观和原则可以看出,敏捷开发并没有规定开发方法。
敏捷开发的内容包括敏捷建模、演进式架构设计、开发方法、重构、自动回归测试。敏捷开发框架有:Scrum、极限编程(XP)、水晶编程(Crysal)精益软件开发(Lean Software Development)、动态系统开发方法(DSDM)、特征驱动开发(Feature Driver Development)。
敏捷开发采用的一定是迭代开发+增量开发方法。迭代开发是指将开发过程分为小周期的迭代,每个迭代完成一部分开发,每个迭代包含需求分析、设计、开发、测试阶段。增量开发是指在现有的软件功能上增加一个客户可感知的完整功能。迭代开发+增量开发是指将开发过程分为小周期的迭代,每个迭代在现有软件功能基础上增加一个客户课感知的完整功能。
敏捷开发优缺点
优点:能更快的交付软件,降低软件风险。
缺点:缺乏文档。
Scrum
什么是Scrum
Scrum是用于开发、交付和持续支持产品的一个框架,是一个增量的、迭代的开发过程。在Scrum框架中,整个开发过程由若干个短的迭代周期组成,一个短的迭代周期称为一个Sprint,每个Sprint的建议长度是一至四周。
在Scrum中,使用产品backlog(积压的工作)来管理产品的需求,产品backlog是一个按照商业价值排序的需求列表,列表条目的体现形式通常为用户故事。Scrum团队总是先开发对客户具有较高价值的需求。在Sprint中,Scrum团队从产品Backlog中挑选最高优先级的需求进行开发。挑选的需求在Sprint计划会议上经过讨论、分析和估算得到相应的任务列表,我们称它为Sprint backlog。在每个迭代结束时,Scrum团队将递交潜在可交付的产品增量。
Scrum框架内容
Scrum框架包括3个角色、3个工件、5个事件、5个价值:
角色:产品负责人(Product Owner)、Scrum Master、开发团队。
工件(其实就是东西的意思):产品Backlog、Sprint Backlog、产品增量(Increment)。
事件(主要就是4个会议):Sprint计划会议(Sprint Planning Meeting)、每日站会(Daily Scrum Meeting)、Sprint评审会议(Sprint Review Meeting)、Sprint回顾会议(Sprint Retrospective Meeting)。
价值:总的来说就是好好干。
Scrum角色
Scrum Master
领导Scrum团队、服务Scrum团队、服务Scrum团队。
- 组织Scrum中的事件。
- 帮助找到有效定义Product Goal 和管理Product Backlog 的技巧。
- 帮助建立基于经验主义的产品规划。
- 引导利益攸关者协作。
- 作为教练在自管理和跨职能方面辅导Scrum 团队成员。
- 移除 Scrum Team 工作进展中的障碍。
Product Owner
- 明确产品目标。
- 将解决复杂问题所需的工作整理成一份Product Backlog。
- 定义完成标准。
- 对 Product Backlog 条目进行排序。
Product Owner 要保证Product Backlog 是透明的、可见的和可理解的。
开发团队
参与Scrum的四个会议,好好干。
- 为 Sprint 创建计划,即Sprint Backlog。
- 根据完成标准交付Spring Backlog。
- 每天根据 Sprint Goal 调整计划。
Scrum事件
Sprint计划会议
启动新的Sprint,制定Sprint 目标,讨论要启动的Backlog、完成标准以及完成方法。
每日站会
每天15分钟的站会,每个成员沟通目前进展、后续计划、发现障碍、提出帮助、调整计划。
Sprint评审会议
交付并展示Sprint成果。
Sprint回顾会议
针对过去的Sprint,开发团队谈论自己的感受,讨论在 Sprint 期间哪些进展顺利,遭遇到哪些问题以及这些问题是如何解决(或未解决) 的。提出可以的优化地方,在下一个Sprint中执行。