Scrum的起源
Scrum这个名字来源于英式橄榄球的一种争球方式,为什么要取这个名字?大概创造者认为这种敏捷开发方法跟Scrum有相似的地方吧,迭代,反馈,快速反应和有效的沟通。
1991年Degrace和Stahl在《Wicked Problems, Righteous Solutions》中首次提到了Scrum。
1995年,在美国德克萨斯州,奥斯汀举办的OOPSLA上,美国人Ken Schwaber和Jeff Sutherland联合介绍了Scrum。他们在接下的几年里合作,把前辈们的文章,他们的经验,以及业界的最佳实践融合起来,形成我们现在所知的Scrum。
Scrum好像是最早提出的一种敏捷方法,之后又出现了Xp、Crystal、FDD、Lean等等……
现在在中国大陆,Scrum已经成为最流行的敏捷开发方法之一。
Scrum过程
在我看来Srum是一种轻量级的软件过程,它是一个项目管理框架。
它是由一套关于项目的开发流程,开发维护人员沟通方法,各种最佳实践组成的。
一个完整的Scrum流程包括很多个Spint(就是迭代),每个sprint在2到4周不等。
1. 在项目开始时,将所有需要完成的工作列在一个Product Backlog中。
每次Spint时:
1. 召开Sprint计划会议,在会议上产品负责人(Product owner)为Product Backlog中各项功能需求确定优先级。
2. 随后,开发团队“认领任务”,并把这些任务从Product Backlog中挪到Sprint Backlog中去。
3. 每天举行站立会议,参加人员Team Leader和Srum团队,时间尽量短,15分钟即可。每个人回答3个问题:
a) 你已经做了什么?
b) 你即将做什么?
c) 你遇到了什么困难?
会议完后,相关人员可讨论遇到的问题。
4. 一个Sprint结束之后召开Sprint评审会议。会议主要展示本次迭代完成的原型,主要参与者包括所有对该产品感兴趣的人,可以是产品负责人,开发团队,客户等等,时间控制在两小时以内。
5. 召开Sprint回顾会议。会议由产品负责人、团队开发人员和Team Leader参加,总结本次迭代哪些做得好,哪些做得不好,团队在下一次sprint中要如何改进。
Scrum角色
Product Manager:偏向于行政管理的角色,负责产品质量,保证项目预期商业价值和目标。使团队在开发过程中,免受打扰,在任何情况下提供保护和援助。
Scrum Master:相当于首席程序员,保证Scrum流程顺利执行,排除Product manager和开发团队之间的障碍。改善工程实践和工具,千方百计提高团队的生产力。
Scrum Group:开发实现团队,具有完全自主性。
Scrum开发实践
在微观的层面上,Scrum吸收了其他敏捷方法的技术实践,包括XP的TDD、持续集成、验收测试、结对编程、重构。
自动化测试,代码评审等等……只要是优秀的实践都可以拿来用。
Scrum的优缺点
Scrum的优点就是敏捷的优点,很注重实效,能更好的应对变化。
缺点是,他过于强调了人的自我管理。 有的观点认为,Scrum适用于一帮资深程序员组成的团队,每个人都是牛人,每个人都有激情干活,这样才work。在国内大家缺乏能动性,没什么激情,很不适合Scrum。
还有一个问题,就是很容易不停的因为目标变化而重新设计,最终导致不能交付。
Scrum并不能保证项目成功,它只是给你更多的反馈,更多的可控性,让你更灵活的应对变化。在实际项目中我们应该对Scrum进行可适应性调整。