什么是Scrum
Scrum 的英文原意是混战,在体育比赛中有争球的意思
Scrum最早由Jeff Sutherland在1993年提出,Ken Schwaber 在1995年OOPSLA会议上形式化了Scrum开发过程,并向业界公布。
之后,Scrum成为领先的敏捷开发方法之一,目前世界上有超过500家公司在使用Scrum。
Scrum是一个敏捷开发框架,是一个增量的、迭代的开发过程
整个开发周期由若干个小的迭代周期,每个小的的迭代周期称为一个 Sprint(2-4周)
在每个Sprint中,Scrum的开发团队拿到一个排列好优先级的需求列表,我们称它为 Sprint Backlog,Scrum的开发团队总是先开发的是对客户具有较高价值的需求
在每个迭代结束后,都会交付出高质量的可运行的软件产品
Scrum角色
Scrum有3个角色: Product Owner, ScrumMaster和 Scrum 团队.
Product Owner的职责:
确定产品的功能。
决定发布的日期和发布内容。
为产品的profitability of the product (ROI)负责。
根据市场价值确定功能优先级。
在30天内调整功能和调整功能优先级。
接受或拒绝接受开发团队的工作成果。
Product Owner参与Scrum planning。
ScrumMaster 作为Team Leader和Product owner紧密地工作在一起,他可以及时地为团队成员提供帮助。他必须:
保证团队资源完全可被利用并且全部是高产出的。
保证各个角色及职责的良好协作。
解决团队开发中的障碍。
做为团队和外部的接口,屏蔽外界对团队成员的干扰。
保证开发过程按计划进行,组织 Daily Scrum, Sprint Review and Sprint Planning meetings。
ScrumMaster 除了主持Daily Scrum meeting之外,还有三个主要职责:
ScrumMaster 需要知道什么任务已经完成,哪些任务已经开始,哪些新的任务已发现,和哪些估计可能已经发生变化。ScrumMaster 需要根据以上的情况更新反映每天完成的工作量以及还有多少没有完成的Burndown Chart。ScrumMaster 还必须仔细考虑进展中的开放任务数,进展中的工作需要得到最小化,以实现精益生产率的收益。
该ScrumMaster 需要找出阻碍Scrum的障碍和依赖。他们需要的优先次序和跟踪。根据优先级指定计划解决这些障碍。其中有些问题可以在团队内部解决,有些则要团队之间的协调,还有的要管理层的介入来解决,甚至有些是公司的问题阻碍了团队达到他们的生产力。比如:一个电信公司最近实施了Scrum,但后来发现只有两个问题和Scrum Team有关,其他的全是公司的问题需要管理层关注。
最后但并非最不重要, ScrumMaster 可能会注意到,个人问题或冲突在Scrum里是需要解决的。这些都需要被澄清,或通过内部的沟通解决,或向管理层和HR寻求帮助解决。ScrumMaster 必须注意去确保团队资源完全可被利用并且全部是高产出的。
Scrum Team:
具有不同特长的团队成员,人数控制在7个左右
确定Sprint目标和具体说明的工作成果。
在项目向导范围内有权利做任何事情已确保达到Sprint的目标。
高度的自我管理能力。
向Product Owner演示产品功能。
四个会议
Scrum四个仪式:Sprint计划会议,Daily Scrum(每日站会), Sprint Review Meeting,Sprint 回顾会议(retrospective)
Sprint Planning Meeting(Sprint规划会)
根据Product Owner制定的产品或项目计划在Sprint的开始时做准备工作。Product Owner可以是客户或者客户代表或代理。对于产品型的公司,客户就是市场,Product Owner扮演市场代理的角色。一个Product Owner需要一个确定产品最终目标的远景,规划出今后一段时间产品发展的路线图,以及根据对投资回报的贡献确定的产品特性。他要准备一个根据商业价值排好序的客户需求列表。这个列表就是Prodct Backlog,一个最终会交付给客户的产品特性列表,它们根据商业价值来排列优先级。
当为一个Sprint定义好足够多的Product Backlog,并且排列好优先级后Scrum就可以开始了,Sprint规划会是用来细化当前跌打得开发计划的。规划会开始的时候,Product Owner会和Scrum team一起评审版本,路线图,发布计划,及Product Backlog。Scrum Team会评审Product Backlog中功能点的时间估计并确认这些估计尽可能的准确。Scrum Team会根据资源情况看有多少feature可以放在当前的Sprint中。Scrum Team按照优先级的高低来确定开发的先后是很重要的。
当Sprint backlog确定后,ScrumMaster带领Scrum Team去分解这些功能点,细化成Sprint的一个个任务. 这些任务就是细化的来实施这些功能点的活动. Sprint Planning的这个阶段需要控制在4个小时。
Daily Scrum Meeting(每日站会)
一旦计划阶段结束,30天周期的Sprint就开始了。ScrumMaster需要组织团队成员每天开站会. 这个会议是用15分钟的时间来让大家过一下scrum的状态。在会上,每个团队成员需要问3个问题:我昨天做了什么,今天做什么,遇到哪些障碍。谁都可以参加这个会议,但只有Scrum团队成员有发言权。这个会议的目标是得到一个项目的全局观,用于发现任何新的依赖,定位项目成员的要求,实时的调整当天开发计划.
Sprint Review Meeting(Sprint评审会)和Sprint 回顾会议(retrospective)
在Sprint结束的时候召开Sprint评审会和Sprint 回顾会议,加起来最多不超过4个小时。Sprint评审会用来演示在这个Sprint中开发的产品功能给Product Owner. Produc Owner会组织这阶段的会议并且邀请相关的利益相关者参加。 业务,市场,技术都要做相关的评审。有Product Owner来决定Product Backlog中的哪些功能已经开发完成 ,还要和Scrum Team及相关的利益相关者讨论下个Sprint中Product Backlog的优先级。下个Sprint的目标在这个时候被确定下来。
接下来是Sprint 回顾会议(retrospective),是由Scrum Master和Scrum Team一起回顾当前的Sprint。团队评估大家在一起的工作方式,找出好的方式以后继续发扬,找出需要做的更好的地方,想办法提升。
Sprint评审会结束后,新一轮的迭代又继续开始,迭代会一直继续,直到开发了足够多的功能去交付一个产品。
三份文档
Scrum的三个物件: Product Backlog, Sprint Backlog 和Burndown Chart.
Product Backlog
在项目开始的时候,Product Owner要准备一个根据商业价值排好序的客户需求列表。这个列表就是Prodct Backlog,一个最终会交付给客户的产品特性列表,它们根据商业价值来排列优先级。Scrum team会根据这个来做工作量的估计
Product backlog应该涵盖所有用来构建满足客户需要的产品特性,包括技术上的需求。高优先级的一些产品特性需要足够的细化以便于我们做工作量估计和做测试。对于那些可以在下个Sprint中完成的Product Backlog功能点,大约10人天的工作量的粒度就不错了。对于那些以后将要实现的特性可以不够详细。
Sprint Backlog
Sprint Backlog 是Sprint规划会上产出的内容. 当Scrum team选择并承诺了Product backlog中要递交的一些高优先级的产品功能点后,这些功能点就会被细化成为Sprint Backlog:一个完成Product Backlog功能点的必需的任务列表.这些点会被细化为更小的任务,工作量小于2天。Sprint backlog完成后,Scrum team会根据它重新估计工作量,如果这些工作量和原始估计的工作量有较大差异,Scrum team和Product Owner 协商,调整合理得工作量到Sprint中,以确保Sprint的成功实施。
Burndown Chart
Burndown Chart 显示了Sprint中累积剩余的工作量,它是一个反映工作量完成状况的趋势图。
在Sprint开始的时候,Scrum Team会标示和估计在这个Sprint需要完成的详细的任务。所有这个Sprint中需要完成,但没有完成的任务的工作量是累积工作量,Scrum master 会根据进展情况每天更新累积工作量,如果在Sprint结束时,累积工作量降低到0,Sprint就成功结束。
Product Backlog 功能点被放到Sprint的固定周期中,Sprint Backlog 会因为如下原因发生变化:
随着时间的变化,开发团队对于需求有了更好的理解,有可能发现需要增加一些新的任务到Sprint Backlog中。
程序缺陷做为新的任务加进来,这个都做为承诺提交任务中未完成的工作,这些也许可以分开进行跟踪。
Product Owner也许会和Scrum team一起工作,以帮助team更好的理解Sprint的目标,ScrumMaster和team也许会觉得小的调整不会影响sprint的进度,但会给客户带来更多商业价值。
Scrum 的特点
−Scrum规定了一个非常简单的开发流程,是现有设计流程的总结。
−Scrum以团队为基础,是一种在需求迅速变化情况下迭代地、增量地开发系统和产品的方法。
−Scrum是一个控制由利益和需求冲突导致的混乱的流程。
−Scrum是改善交流并最优化合作的方式。
−Scrum是一种检测产品开发和生产过程中障碍并将其去除的方式。
−Scrum是最大化生产率的一种方法。Scrum适用于单一的项目到整个组织。
−Scrum可以控制并组织多个具有相关性的产品开发以及拥有超过千名开发者和执行者的项目实施过程。
−Scrum能让每个参与者都对自己所做的工作以及自己做出的贡献感到骄傲,并让他们发挥到最佳水平。