Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。Scrum在英语的意思是橄榄球里的争球。
虽然Scrum是为管理软件开发项目而开发的,它同样可以用于运行软件维护团队,或者作为计划管理方法:Scrum of Scrums 。
相关线上资料:http://zh.wikipedia.org/wiki/Scrum
Scrum定义了许多角色,根据猪和鸡的笑话分为两组,猪和鸡:
一天,一头猪和一只鸡在路上散步,鸡看了一下猪说,“嗨,我们合伙开一家餐馆怎么样?”,猪回头看了一下鸡说,“好主意,那你准备给餐馆卖什么呢?”,鸡想了想说“餐馆卖火腿和鸡蛋怎么样?”,“我不这么认为”,猪说,“我全身投入,而你只是参与而已”。
这个笑话挺冷的……不过倒是比较准确的划分了项目参与人员。
猪组
猪组的成员是在Scrum过程中全身投入项目的各种角色,他们在项目中承担实际工作。他们有些像上边那个笑话里的猪,要把自己身上的肉贡献出来。
鸡组
鸡组的成员并不是实际Scrum过程的一部分,但是必须考虑他们。敏捷方法的一个重要方面是使得用户和利益相关者参与到过程中的时间。参与每一个冲刺的评审和计划,并提供反馈对于这些人来说是非常重要的。
经验:
在冲刺中,每一天都会举行项目状况会议,被称为“scrum”或“每日站立会议”。每日站立会议有一些具体的指导原则:
假设会议定在每天下午下班前,在会议上,每个团队成员需要回答三个问题:
每一个冲刺完成后,都会举行一次冲刺回顾会议,在会议上所有团队成员都要反思这个冲刺。举行冲刺回顾会议是为了进行持续过程改进。
会议的时间限制在4小时。
经验:
下面几点有助于降低成员压力:
经验:
WEBIM项目实施白板:
左边的用户故事,实际上是对冲刺订单的分类。
订单一开始都在 todo 的下面,每个开发人员到实施白板前,审核还有那些订单在todo当中,从中选择自己喜欢或者相对擅长的订单,写上自己的名字,放在开发中,然后回去开发相应组件。
当组件基本开发完毕,就将订单放在自测栏下面。
如果准备将该组件提交测试,就将订单放在测试栏下面。
如果组件通过测试,就放在完成栏下面。这样一个组件就走完了整个开发流程。
实际开发中发现,由于测试实际上是在所有组件都完成开发后才执行的,所以订单放到自测阶段就基本上可以视为开发完毕,开发人员就应该去领新的订单了。
WEBIM项目中订单用便签实现:
WEBIM开发中,每个订单对应的是一个开发组件,标记了组件名称,类别,开发人员,预估时间。对应开发组件模型如下:
Name | Events |
Extends | |
Property | _$events |
Methods | addEvent removeEvent addEvents removeEvents fireEvent |
SP | 0.25 |
Name为组件名称,也是开发时的小文件名称。
Extends 为该组件继承自哪一个组件。
Property 为组件应当具有的属性。
Methods 为组件应当具有的方法。
SP 为开发该组件可能的耗时。1SP表示1个工作日(单个成员8个工作时)
项目开始前的集中会议非常重要,需要所有开发成员集中在一起执行。
应当集群体之力一起分析项目,拆解组件,但注意非关键性的细节不要过分追究,避免会议耗时。
应当有一个文档保存所有画出的组件模型。
燃尽图可以非常形象的表现项目执行进度。
以下图举例:
X轴原点为项目开始日期,末端为项目结束日期。每天为一格。
Y轴为预估的工作时。
经验:
先看一下WEBIM项目的燃尽图:
不可思议的是曲线一开始居然还有个增高。这说明一开始时间预估就不完善,开发中增加了预估时间。
一开始认为订单放到完成,才能从工作时中减去时间,但由于测试实际上是在所有组件开发完成后,所以当订单放在自测,就从工作时中减去时间。
这个图后期并没有完成。实际上是因为项目组件提前在12日都开发完成,但是新的问题出现:组件完成后还有一个联调的时间,未被预估在内。还好最终还是保证了项目按期联调完毕。
燃尽图后期的陡峭往往说明了任务分割与时间估算的不完善。但是有时这不可避免,可以考虑用完成度百分比乘以工作任务,或者将任务分阶段(将预备阶段,开发阶段与测试阶段分开)来平缓燃尽图曲线,达到更细致描绘工作进度的目的。
可以考虑联调前的订单被开发完成了70%,联调完毕才标记为100%,然后从总工作时中减去剩下百分比的时间。
一开始预估完总工作时间后,应当乘以一个系数(大于1,从未预估过时间,建议这个系数接近甚至大于2,否则建议为1.5)。以这个时间为总工作时间,以应付项目执行中可能遇到的突发事件。
Scrum 效率相当明显,执行过程中可以使成员中开发速度缓慢的地方被迅速暴露出来,使得项目中可能存在的问题被极早暴露,以便进行针对性的解决。
开发中要求成员有充分的自发性,自己如果能提前完成订单,应当负责起其他订单的开发任务,减轻项目整体的开发负担。
一开始的沟通会议非常重要,必须当面进行沟通会议,不可以有缺席。以保证每个成员对项目的细节都有所了解,可以负责任意一个组件的开发。
Scrum不仅仅用于软件开发,它是一种计划管理方式,适用于被限制时间,需要多人协作的团队项目。