Scrum是一种迭代增量式的软件开发过程,用于敏捷软件开发。Scrum是一个包括一系列实践和预定义角色的过程框架。
Scrum要素包括角色、周期、工件,以及如何确定用户故事、如何估算工作,如何召开每日站立会议。
当前,Scrum方法在国内已经逐渐普及,为众多知名IT公司和软件开发团队采用。 本书是帮助软件开发人员认识、初步了解Scrum方法的佳作。通过本书可以理清Scrum的相关知识和概念,为采用和实践Scrum方法做好充分准备。
Scrum团队周记
工作项目的候选列表,新特性和错误修复的工作都有,这些都是项目上最重要的代办事项。
白纸板是用来文字记录的,例如,团队都认可的故事“完成”定义。
Sprint燃尽图,用来监测下一周任务完成过程中的速度变化。
Scrum日会是一种短会,用于团结和协调团队 。为了鼓励大家都简洁点,这个会是站着开的。它因此而得名“每日站会”。
团队成员轮流分享信息:前一天完成了什么任务,明天的Scrum日会前打算做哪个任务,有没有碰到什么障碍或是受到了什么拖累。
第一部分:敏捷力介绍
瀑布模型将开发和交付且软件项目的流程分割为相互独立的阶段:
- 需求收集
- 设计
- 编码
- 测试
唯一能够指望的只有变化。所有种类的敏捷流程都有一个共同点:拥抱变化,视变化为成长的良机,而非障碍。
简单地看,敏捷开发和瀑布开发之间差别在于:瀑布开发必须先完成当前步骤之后才能头也不回地迈向下一步骤。这不是敏捷团队的方式。敏捷团队会一点点需求收集,一点点设计、编码、测试,最后交付一点点价值给客户。接着团队再重复此过程……周而复始,工作推进过程中不断改善、调整流程,一直到项目完成为止。
敏捷迭代(在Scrum中称为“Sprint”)可不是微型瀑布,敏捷流程可是真的没有什么步骤之说。敏捷开发是一个整体流程,即测试、设计、编码、和需求收集是完全整合彼此依赖的流程。
敏捷提倡的良好实践:
- 边做边测试
- 及早且频繁地交付产品
- 文档边做边写
- 构建跨职能团队
敏捷方式的核心思想在于迅速交付商业价值,体现维可工作的软件,还要以定期增量的形式持续地交付价值。
敏捷宣言
- 个体和互动 高于 流程和工具
- 工作的软件 高于 详尽的文档
- 客户合作 高于 合同谈判
- 响应变化 高于 遵循计划
遵循尽早且频繁交付软件的敏捷框架可以带来高效率,因而保障了客户可以实现所投入时间和金钱的最大化价值回报,进一步也排除了对前期合同洽谈的需要。
敏捷原则
- 我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
- 欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
- 经常地交付可工作的软件,相隔几个星期或一两个月,倾向于采取较短的周期。
- 业务人员和开发人员必须相互合作,项目中的每一天都不例外。
- 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
- 不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
- 可工作的软件是进度首要度量标准。
- 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同其步调稳定延续。
- 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
- 以简洁为本,它是极力减少不必要工作量的艺术。
- 最好的架构、需求和设计出自组织团队。
- 团队定期地反思如何能提高成效,并依次调整自身的举止表现。
早交付,频交付。
第二部分:Scrum
Scrum是一个基于团队进行复杂系统和产品开发的框架。
选择最佳方法以达成目标是团队的责任。
任何时候都可以决定是否要交货,或者再继续做一个sprint以便完成更多功能。
Scrum角色
Scrum只承认三个互不相同的角色:产品负责人、Scrum master和团队成员。
角色:产品负责人
产品负责人的责任在于,帮公司得到最高投资回报。做法是指引团队做最有价值的作业,并远离不那么有价值的作业。也就是说,产品负责人控制着团队列表上那些条目的优先级顺序。
在Scrum中,产品负责人是唯一有权要求团队做事以及改变列表条目优先级的人。这必然也就意味着,产品负责人需要和干系人密切地合作,判别需要何时构建何物,从而交付最多业务价值。
产品负责人是产品愿景的监护人。愿景包括,产品为谁而建、他们为何需要、如何使用。
产品负责人角色概要:
- 持有产品愿景
- 代表业务
- 代表客户
- 拥有产品列表
- 划定故事优先级
- 设立故事的接收标准
- 有空回答团队成员们的问题
角色:Scrum Master
Scrum Master担当教练角色,引领团队达到更高级的凝聚力、自组织和表现。团队的交付物是产品,而Scrum Master的交付物就是自组织团队。
Scrum Master角色概要:
- Scrum专家和谏言者
- 教练
- 阻碍推土机
- 引导者
角色:团队成员
Scrum团队是高度协作的,也是自组织的。
做具体实现工作的团队成员们,同样也需要负责估计实现特性需要的工作量。产品负责人可以决定故事的顺序,但完成特性或任务需要多少时间是开发人员说了算。
作为Scrum团队成员,要完成的不是你的工作,而是这份工作。
团队成员角色概要:
- 负责交付用户故事
- 做所有的开发工作
- 自组织地交付用户故事
- 支配估算流程
- 支配“如何干活”的决策
- 避免“与我无关”
Sprint周期
Sprint规划会议
Sprint规划会议标志着Sprint的开始。通常来说这个会议分为两个部分。第一部分的目标是,团队要选择一组交付物作为当前Sprint的承诺。会议的第二部分,团队要罗列出交付用户故事所需完成的所有任务。
第一部分:要做什么?
Sprint规划会议第一部分的目标在于,团队要找出他们有信心在Sprint结束时交付的一组“已承诺”故事。产品负责人引导这一部分的会议。产品负责人按照优先级顺序,逐个地介绍他希望团队在当前Sprint完成的那些故事。
团队成员们要和产品负责人探讨所有故事,审查其验收标准,确保大家对预期结果有一致的理解。团队成员协商解决依赖性问题,一般还会讨论实现故事要做哪些事情。接着团队成员就要决定他们是否承诺这个故事。
团队的速率(velocity)指的是每个Sprint团队所完成故事点数的平均值,它是一个有效的工具,可以帮助团队选择承诺适量的工作。
第二部分:要怎么做?
会议的第二部分,团队卷起袖管就开工,把选定的故事分解成任务。要记得故事是交付物,他们是干系人、用户和客户想要的东西。团队成员需要完成这些任务才能交付故事。
Scrum日会
Scrum日会有时候也被称为站立会议:
- 每天:大多数团队选择在一天工作刚开始的时候开这个会。
- 小:只有开发团队的成员们可以参加。
- 简要:这个会不是用来解决大问题的,而是用于保持交流渠道的畅通。站立的意义在于阻止各种离题跑调的情况发生,避免开会变遭罪。
- 直截了当:参会者轮流快速地分享:
- 在上一次Scrum日会之后,我已经完成的内容
- 到下一次Scrum日会之前,我期望完成的内容
- 导致我慢下来的障碍
故事时间
也被称为“列表修整”会议
Sprint评审
也被称为Sprint演示。即便是这个Sprint什么也没有完成,也要坚持召开Sprint评审会议,得让干系人了解情况,因为Scrum靠透明度而活。
回顾
Scrum就是为了帮助团队持续地进行检验和适应而设计,能够带动绩效和幸福感不断提升。每个迭代都要召开回顾会议,在迭代最后才举行,是专门留给团队的时间,专注于讨论他们当前Sprint的心得体会,并用于继续改进。
检验和适应
归根结底,我们以短周期形式做开发工作的原因在于,学习。经验是最好的老师,而Scrum短周期的设计家就是要为我们提供多方位接收反馈的机会,包括客户、团队和试吃昂,并从中学习。
检验和适应也被称为“持续改进”。
Scrum工件
Scrum工件是可用于实现进度可视化的工具。
- 列表
- 燃尽图
- 任务板
- 完成之定义
产品列表
产品列表是产品预期交付物的累积清单。这包括了特性、缺陷修复、文档变更和任何值得创建的东西。列表上的所有内容都能以某种弄方式帮助用户。
产品列表不断地改变。
列表的优点在于,绝不会浪费时间给那些可能永不见天日的特征写详细规格书。列表上的故事都是按照优先级排序的,可以说是精确排序。
产品负责人拥有列表,只有产品负责人可以增加、减少列表中的条目,或是进行优先级排序,尽管他也必须借助于和业务干系人、客户和团队成员的紧密配合才能做到。
Sprint列表
Sprint列表是团队当前Sprint的任务清单。它只存活一个Sprint的时间。里面包括所有已承诺的故事以及相关联的任务,以及此外的附加工作。
Sprint列表在Sprint规划会议中产生,一旦Sprint规划会议结束,,产品负责人就不可以再修改Sprint列表的故事清单。这是Scrum中业务方和开发团队之间的基本协议,每次Sprint开始前,业务方都可以改变方向,然而Sprint开始后,则允许团队只专注于他们所承诺的故事。改变这个已承诺故事清单有一个方式,就是由干这个活的团队成员提出变更请求。
信息辐射器
任务板贴满了便事贴,分为待办、进展中、已完成三种状态。
重要的是这些东西要做得大,而且要放在所有人都能看见的地方。要努力在墙上留住尽可能多的信息。
燃图
燃尽图描述了剩余工作随时间变化的轨迹。纵坐标绘制剩余量,横坐标是时间。
发布燃尽图:产品负责人以此为工具追踪剩余工作随时间变化的过程。图表中有不同斜率的下降趋势线,反映了单位时间段内所完成点数的变化。
Sprint燃尽图:显示当前Sprint剩余工作量的变化。Sprint燃尽图的目的在于,能够让团队看清楚情况,知道自己能够交付迭代中已经承诺的全部。
燃耗图:团队的速率就是团队每个Sprint所完成的工作单位数量(例如故事点)。燃耗图绘制出已完成故事点随时间的变化的情况,是团队速率的可视化指示器。
任务板:最简单的任务板由待办(todo)、办理(doing)和已办(done)三部分组成。
完成之定义
完成之定义和验收标准是有区别的。验收标准属于产品负责人或客户的领域,明确定义了被视为“可接受”产品必须满足的条件并记录在案。完成之定义归开发团队所有,关注的不是产品面向用户的功能,而是产品要可交付必须要做完的那些任务。
用户故事
用户故事是产品列表的基础构件。用户故事通常都是手写在索引卡上的。1
2
3作为<某类用户>
我想<做某事>
从而<创造出某些价值>
基于上述版本,又演化出了聚集目标的用户故事模板1
2
3为了<达成某类目标>
作为<某类用户>
我想<做某事>
和聚焦价值的用户故事模板1
2
3为了<创造某价值>
作为<某类用户>
我想<做某事>
用户故事是交谈的敲门砖。用户故事不是完整的需求或说明书,它们是占位符。它们的信息量足以提醒团队有东西要完成,但我们刻意地不过多探讨细节……直到必需之时。
用户故事、交谈和接收标准结合起来组成了完整的需求规格说明书。用户故事让我们可以快速且完全地捕获想法。在交谈中,我们可以阐述所需完成的细节,并达成一致且可实现的理解。最终,我们用明确的、可测试的接收标准来记录共识。
用户故事大小估值工作
生成估值的真正目标是要提供进度的可预测性度量。、
第三部分:辅助性实践
Scrum是轻量级框架,它不告诉你如何规划发布,或开发产品原型,或编写及测试代码。
发布规划
发布规划是为产品发布挑选故事(特性、功能增强、缺陷修复等)的流程,以及应该如何进行发布。
- 固定范围
- 固定日期
- 固定日期且固定范围
速度、成本和范围,这是项目管理周期中著名的“铁三角”。在软件项目中,速度指的是构建和发布系统所需的时间,成本通常受项目上人头数的影响,范围涉及所包含的故事数量。三者组成一个平衡方程式,改变其中任何一个,必然都会导致另外一个或两个相应地产生变化。
用户角色人物
用户角色人物是整理妥当的简要档案,用作参考时方便手持。研究自然环境中真实用户的习惯、态度和行为,虚构人物往往是它们的混合体。
绘制故事地图
绘制故事地图是另一种组织用户故事的方式,能够提供比传统产品列表更丰富的上下文,也有助于进行发布规划。
尽管故事地图并不完全是产品列表的替代品,但对照比较一下还是很有好处的。本质上来看,产品列表是唯一的,用户故事按优先级从最高到最低的顺序排列。故事地图是二维的,不仅指示了故事的优先级,也指出了它们彼此的关系和用户更高层次的目标。地图能帮助团队理解故事是如何组装起来形成可发布产品的。
纸上原型
纸上原型并不是Scrum的一部分,但它具有敏捷的本质,是充实产品负责人工具箱的上佳之选。
这种低科技、高参与度的方式能移除障碍,让客户也可以参与到设计与开发流程中,还能让学习成效最大化,因为它的反馈循环快得只在转瞬间。
项目微章程
微章程就是明确记载了项目关键信息的概要项目。项目伊始只不过是一个想法,而微章程就是有效捕获想法的一种方法。捕捉到之后,想法就会变得更易于分享、讨论和修订,这会极大地帮助你发现并排除掉范围及使命蔓延。
基础微章程包含如下元素:
- 代号:给项目取个名字
- 使命宣言:表达项目的目的
- 愿景宣言:描述项目想要创建的未来
- 电梯演讲:关注项目要解决的问题,以及公司或客户将由此获得的好处。
- 商业价值:项目对业务而言在金钱或其他方面的价值是什么
- 客户和用户:做购买决策的人
- 度量指标:讲清楚计划如何去度量之前所描述的那些价值
- 里程碑:重要的时间点
- 资源:完成如下描述的项目必须或必需用到的资源
- 风险:可能危害或颠覆项目的事情
- 权衡:现实地评估团队运作环境中的各种约束。
重构
敏捷宣言声明:最好的架构、需求和设计出自自组织团队。
重构就是,在不改变代码外在行为的前提下,对代码做出修改,以改进程序内部结构的一种有纪律的方法。核心是通过一连串的小行为实施转变。每次转变(称之为一次“重构”)都只做一点点,但一系列的转变就能带来显著的结构重组。由于每次重构都不大,也就不容易出错 。每次重构之后系统也依然运作良好,减少了系统在重组过程中严重受损的几率。
把设计工作内置于开发流程之中,这就是敏捷开发迭代复迭代不断前行的方式。
测试驱动开发
测试驱动开发的目标在于快速地开发出设计精良、正确性已获证实的代码。
通过先行测试,可以把注意力集中于开发人员需要让代码展现的外部行为。一旦开发人员切实地理解了代码需要做什么,就已经准备周全可以妥善地设计代码实现了。
结对编程
结对编程更加快速地产出设计更精良、整洁的代码。它还能消灭知识简仓。