Scrum

Scrum

迭代式增量软件开发过程
Scrum是用于开发、交付和持续支持复杂产品的一个框架,是一个增量的、迭代的开发过程。在这个框架中,整个开发过程由若干个短的迭代周期组成,一个短的迭代周期称为一个Sprint,每个Sprint的建议长度是一至四周。在Scrum中,使用产品Backlog来管理产品的需求,产品backlog是一个按照商业价值排序的需求列表,列表条目的体现形式通常为用户故事。Scrum团队总是先开发对客户具有较高价值的需求。在Sprint中,Scrum团队从产品Backlog中挑选最高优先级的需求进行开发。挑选的需求在Sprint计划会议上经过讨论、分析和估算得到相应的任务列表,我们称它为Sprint backlog。在每个迭代结束时,Scrum团队将递交潜在可交付的产品增量。Scrum起源于软件开发项目,但它适用于任何复杂的或是创新性的项目。Scrum目前已被用于开发软件、硬件、嵌入式软件、交互功能网络、自动驾驶、学校、政府、市场、管理组织运营,以及几乎我们(作为个体和群体)日常生活中所使用的一切。
  • 中文名:
  • 外文名:Scrum
  • 适用领域:
  • 所属学科:
  • 定义:是一种迭代式增量软件开发过程
  • 包括:实践和预定义角色的过程骨架
  • 成员组成:主管,产品负责人,开发团队
  • 业务领域:管理软件开发项目以及运行软件维护团队

创始人

Jeff Sutherland

Jeff Sutherland的第一份工作居然是美国空军战斗机飞行员,还曾于1967年获得了“壮志凌云”称号,完成过100次飞越北部越南的作战任务。服役后期,他到斯坦福大学拿下统计学硕士学位,并在美国空军学院教授数学统计学和概率学。11年军旅生涯结束后,他成为了科罗拉多医学院的教师并获得了博士学位。在诺贝尔化学奖得主莱纳斯·鲍林的赞助下,他以放射学、生物学及预防医学助理教授的身份参与了维生素与癌症研究中心的创立,担任八年国家癌症中心的主要研究员,负责科罗拉多地区所有癌症患者的数据统计和IT方案与研究,整合了国家注册、临床试验、流行病学研究和癌变的超级计算机数学模型。1983年,他进入了一家遍及北美、经营着150家银行的公司,职务为先进系统副总裁及ATM业务部总经理。此后,Sutherland先后担任了11家软件公司的CEO、CTO或者工程副总裁,积累了丰富的软件开发经验。

Ken Schwaber

Ken Schwaber最初的职业也很特别——商船经理。在随后40多年开发生涯的前10年中,他曾经编写过操作系统,搞过嵌入式,为IBM大型机开发系统软件;先后在芝加哥大学、伊利诺伊理工学院、王安公司实验室工作,并逐渐展现出在软件开发方法上的天赋。在CASE工具和结构化方法热门的时候,他自己创办了ADM公司,从事软件开发方法培训服务。期间,公司开发了软件方法自动化工具MATE,用来生成各种软件流程所需的模板、计划等,生意很好。

合作经历

Sutherland和Schwaber相识于1980年代早期。1987年,两人开始合作。一天,Sutherland问Schwaber:“你们开发MATE工具都用了当前流行的哪一种方法?”“当然什么都没用,”Schwaber回答,“要不然公司早就完蛋了。”他们意识到问题的严重性,开始与开发者交谈,研究新方法。

1993年,Sutherland读到了两位日本管理教授内弘高和野中郁次郎介绍制造业里出现的新的产品开发方法Rugby(橄榄球)的文章。这种方法的特点是整个流程都由一个高性能、跨功能的团队执行到底。他受到启发,结合自己多年的经验,与Easel公司的John Scumniotales和Jeff McKenna一起开发了一套方法,取名为Scrum(来源于橄榄球术语,不是缩写)。

而Schwaber则从杜邦公司一位化工过程控制专家那里取经,意识到项目分为两种:确定性项目,一切都已经确定,可以自动化生产流程;实验性项目,充满不确定性,哪怕一点微小的变化也会牵一发而动全身,因此只能用各种仪表不断监控,随时做出调整——这就是每日站会的由来。

两人在一个IBM项目合作,并做了更详尽的研究,Scrum诞生了。1995年OOPSLA大会上他们第一次向世人介绍了Scrum。可当时,两个人的公司都还在做千年虫和各种重型开发方法咨询方面的业务呢。

进入新世纪,互联网带来的巨变使敏捷方法受到了更多开发团队的欢迎,而其中Scrum以其扩展性、门槛低、名字和术语更容易被项目经理接受等因素,逐渐成为最受欢迎的敏捷流派。而推出CSM等系列认证,虽然争议颇大,但客观上对Scrum扩大影响力起到了重要作用。

当今,Scrum的影响已经远远超出软件开发,成为零售、军事、风险投资甚至学校里完成各种任务的创新方法,正在改变着世界。

历史

1986年,竹内弘高和野中郁次郎阐述了一种新的整体性的方法,该方法能够提高商业新产品开发的速度和灵活性:他们将这种新的'整体性方法与橄榄球相比较,前者各阶段相互重叠,并且由一个跨职能团队在不同的阶段完成整个过程,而后者整个团队"tries to go to the distance as a unit,passing the ball back and forth"。他们对来自汽车,照片机器,计算机和打印机等产业的案例进行了研究。1991年,DeGrace和Stahl在《Wicked Problems, Righteous Solutions》一书中将这种方法称为Scrum,在竹内弘高和野中郁次郎的文章中提到的橄榄球术语。1990年代初,肯·施瓦伯在其公司使用了一种方法Advanced Development Methods(先进开发方法),这种方法后来发展为Scrum。同时,杰夫·萨瑟兰在Easel公司开发了一种类似的方法,并首次称之为Scrum。1995年,在奥斯汀举办的OOPSLA'95上,萨瑟兰和施瓦伯联合发表了论文首次提出了Scrum概念。施瓦伯和萨瑟兰在接下的几年里合作,将上述的文章,他们的经验,以及业界的最佳实践融合起来,形成我们当前所知的Scrum。2001年,施瓦伯与麦克·比窦(Mike Beedle)合著了《敏捷软件开发-使用Scrum过程》一书,介绍了Scrum方法。

特性

Scrum过程

Scrum是一个包括了一系列的实践和预定义角色的过程骨架(是一种流程、计划、模式,用于有效率地开发软件)。

在每一次冲刺(一个15到30天周期,长度由开发团队决定),开发团队创建可用的(可以随时推出)软件的一个增量。每一个冲刺所要实现的特性来自产品订单(product backlog,我觉得翻译成“产品目标”更恰当),产品订单(产品目标)是指按照优先级排列的需要完成的工作的概要的需求(目标)。哪些订单项(目标项目)会被加入一次冲刺,由冲刺计划会议决定。在会议中,产品负责人告诉开发团队他需要完成产品订单中的哪些订单项。开发团队决定在下一次冲刺中他们能够承诺完成多少订单项。在冲刺的过程中,没有人能够变更冲刺订单(sprint backlog),这意味着在一个冲刺中需求是被冻结的。

管理Scrum过程有很多实施方法,从白板上的即时贴到软件包。Scrum最大的好处是它非常容易学习,而且应用Scrum不需要太多的投入。

敏捷方法之极限编程(XP)和Scrum区别

区别之一:迭代长度的不同

XP的一个Sprint的迭代长度大致为1~2周,而Scrum的迭代长度一般为2~4周。

区别之二:在迭代中,是否允许修改需求

XP在一个迭代中,如果一个User Story(用户素材,也就是一个需求)还没有实现,则可以考虑用另外的需求将其替换,替换的原则是需求实现的时间量是相等的。而Scrum是不允许这样做的,一旦迭代开工会完毕,任何需求都不允许添加进来,并有Scrum Master严格把关,不允许开发团队受到干扰。

区别之三:在迭代中,User Story是否严格按照优先级别来实现

XP是务必要遵守优先级别的。但Scrum在这点做得很灵活,可以不按照优先级别来做,Scrum这样处理的理由是:如果优先问题的解决者,由于其它事情耽搁,不能认领任务,那么整个进度就耽误了。另外一个原因是,如果按优先级排序的User Story #6和#10,虽然#6优先级高,但是如果#6的实现要依赖于#10,则不得不优先做#10。

区别之四:软件的实施过程中,是否采用严格的工程方法,保证进度或者质量

Scrum没有对软件的整个实施过程开出工程实践的处方,要求开发者自觉保证。但XP对整个流程方法定义非常严格,规定需要采用TDD、自动测试、结对编程、简单设计、重构等约束团队的行为。

“猪”角色

猪是全身投入项目和Scrum过程的人;they are the ones with "their bacon on the line."

产品负责人代表了客户的意愿。这保证了Scrum团队在做从业务角度来说正确的事情。产品负责人编写用户故事,排出优先级,并放入产品订单。Scrum主管(或促进者)促进Scrum过程,他的主要工作是解决那些影响团队交付冲刺目标的障碍。Scrum主管并非团队的领导(由于他们是自我组织的),而是负责屏蔽外界对开发团队的干扰。Scrum主管确保Scrum过程按照初衷进行。Scrum主管是规则的执行者。开发团队是负责交付产品的团队。由5至9名具有跨职能技能的人(设计者,开发者等)组成小团队来完成实际的开发工作。

“鸡”角色

鸡角色并不是实际Scrum过程的一部分,但是必须考虑他们。使用户和利益相关者参与到过程中是敏捷方法的一个重要实践。“鸡”角色参与每一个冲刺的评审和计划,并提供反馈,对于Scrum过程来说是非常重要的。

用户软件是为用户而创建的!就像“假如森林里有一棵树倒下了,但没有人听到,那么它算发出了声音吗”,“假如软件没有被使用,那么它算是被开发出来了么?”利益所有者(客户,提供商)是影响项目成功与否的人,他们只直接参与到冲刺评审的过程中。经理是为产品开发团体架起环境的那个人。

会议

在冲刺中,每一天都会举行项目状况会议,被称为“scrum”或“每日站立会议”。每日站立会议有一些具体的指导原则:

会议准时开始。对于迟到者团队常常会制定惩罚措施(例如罚款,做俯卧撑,在脖子上挂橡胶鸡玩具)欢迎所有人参加,但只有"猪"可以发言。不论团队规模大小,会议被限制在15分钟。所有出席者都应站立。(有助于保持会议简短)会议应在固定地点和每天的同一时间举行。在会议上,每个团队成员需要回答三个问题:

你完成了哪些工作?以后你打算做什么?完成你的目标是否存在什么障碍?(Scrum主管需要记下这些障碍)

每一个冲刺完成后,都会举行一次冲刺回顾会议,在会议上所有团队成员都要反思这个冲刺。举行冲刺回顾会议是为了进行持续过程改进。会议的时间限制在4小时。

Scrum提倡所有团队成员坐在一起工作,进行口头交流,以及强调项目有关的规范(disciplines),这些有助于创造自我组织的团队。

Scrum的一个关键原则是承认客户可以在项目过程中改变主意,变更他们的需求,而预测式和计划式的方法并不能轻易地解决这种不可预见的需求变化。同样,Scrum采用了经验方法–承认问题无法完全理解或定义,而是关注于如何使得开发团队快速推出和响应不断出现的需求的能力最大化。

文档

产品订单

产品订单(product backlog)是整个项目的概要文档。产品订单包括所有所需特性的粗略的描述。产品订单是关于将要创建的什么产品。产品订单是开放的,每个人都可以编辑。产品订单包括粗略的估算,通常以天为单位。估算将帮助产品负责人衡量时间表和优先级(例如,如果"增加拼写检查"特性的估计需要花3天或3个月,将影响产品负责人对该特性的渴望).

冲刺订单

冲刺订单(sprint backlog)是大大细化了的文档,包含团队如何实现下一个冲刺的需求的信息。任务被分解为以小时为单位,没有任务可以超过16个小时。如果一个任务超过16个小时,那么它就应该被进一步分解。冲刺订单上的任务不会被分派,而是由团队成员签名认领他们喜爱的任务。

燃尽图

燃尽图(burn down chart)是一个公开展示的图表,显示当前冲刺中未完成的任务数目,或在冲刺订单上未完成的订单项的数目。不要把燃尽图与挣值图相混淆。燃尽图可以使'冲刺(sprint)'平稳的覆盖大部分的迭代周期,且使项目仍然在计划周期内。

项目管理

以下是一些Scrum的通用实践:

客户成为开发团队中的一部分。(例如客户肯定对开发的结果真正感兴趣。)和所有其他形式的敏捷软件过程一样,Scrum有频繁的包含可以工作的功能的中间可交付成果。这使得客户可以更早的得到可以工作的软件,同时使得项目可以变更项目需求以适应不断变化的需求。频繁的风险和缓解计划是由开发团队自己制定。–在每一个阶段根据承诺进行风险缓解,监测和管理(风险分析)。计划和模块开发的透明–让每一个人知道谁负责什么,以及什么时候完成。频繁的进行所有相关人员会议,以跟踪项目进展–平衡的(发布,客户,员工,过程)仪表板更新–所有相关人员的变更–你必须拥有预警机制,例如提前了解可能的延迟或偏差。没有问题会被藏在地毯下。认识到或说出任何没有预见到的问题并不会受到惩罚。在工作场所和工作时间内必须全身心投入。–完成更多的工作并不意味着需要工作更长时间。

术语

下面是Scrum用到的术语:

角色

产品负责人Product Owner:负责维护产品订单的人,代表利益相关者的利益。

Scrum主管Scrum Master:为Scrum过程负责的人,确保scrum的正确使用并使得Scrum的收益最大化。一般不翻译。

开发团队Team:由负责自我管理开发产品的人组成的跨职能团队。

工件

产品列表Product Backlog:根据用户价值进行优先级排序的高层需求。

冲刺订单Sprint Backlog:要在冲刺中完成的任务的清单。

产品增量Increment:最终交付给客户的内容

活动

计划会Sprint Planning Meeting:在每个冲刺之初,由产品负责人讲解需求,并由开发团队进行估算的计划会议。

每日立会Daily Standup Meeting:团队每天进行沟通的内部短会,因一般只有15分钟且站立进行而得名。

评审会Review Meeting:在冲刺结束前给产品负责人演示并接受评价的会议。

反思会/回顾会Retrospective Meeting:在冲刺结束后召开的关于自我持续改进的会议。

其他

冲刺Sprint:一个时间周期(通常在2周到1个月之间),开发团队会在此期间内完成所承诺的一组订单项的开发。

其他领域

虽然Scrum最初只应用于软件开发,它也可以被成功地应用于其他产业。当前Scrum通常被认为是一种用于开发任何产品或管理人和工作的迭代式的,增量的过程。

用于产品开发

将Scrum应用于产品开发是在《"T新新产品开发游戏"》(哈佛商业评论86116:137-146,1986年)第一次提出,之后野中郁次郎和竹内弘高合著的《"创造知识的企业"》(牛津大学出版社,1995年)进行了详细的阐述。当前Scrum被用于开发金融产品,互联网产品,以及医药产品。

项目管理方法

由于市场营销通常以项目的方式运作,许多一般项目管理的原则应用在市场营销上。市场营销也可以像项目管理技术那样进行优化。以Scrum方法进行市场营销被认为有助于克服市场营销经理们所遇到的问题。短时和固定的会议对于小的市场营销团队来说很重要,这是因为团队的每一个成员都可以了解其他人在做些什么,以及整个团队在朝着什么方向前进。Scrum在市场营销中应用可以:

在早期发现可能的问题,可以更快地,最小损失地应对问题。根据Scrum的主要原则“没有问题被扫入地毯下”,Scrum鼓励每一个团队成员描述他所遇到的困难,而这个困难可能会对整个团队的工作造成影响。降低财务风险。在每一个冲刺周期的开始,企业所有者可以不付出任何代价的改变任何市场营销的因素:包括增加投资以夸大顾客数量,减少投资直至未知风险被减轻,或用于支持其他活动。使得市场营销计划更灵活。采用冲刺的短期市场营销计划可以更加有效。如果一种促销方法在冲刺过程中显示无效,市场营销经理有机会将其换成另一种促销方法。向每一个团队成员说明每一个小的,但重要的任务的交付时间也变得更容易。使得客户以不同的方式参与。

相关词条

相关搜索

其它词条