2019年2月14日星期四

Scrum_004:Scrum 的三个文档

在 Scrum 中有三个文档是必须要写的,它们是:product backlog、sprint backlog、burn-down chart。

1. product backlog
product backlog 是整个项目的需求概要文档。由 PO 专职负责,一般每周更新一次,在项目的整个生命周期间存续。

用一句简短的、用户熟悉的语言表达的需求,是用户讲给开发人员的故事,不是开发人员讲给用户的故事。
用户故事一般用三段论式的方式描述:
As a XX, I want to XX, so that XX.
作为一个XX角色, 我想要XX功能, 以便于实现 XX 商业价值的目的

例如:作为一个家庭主妇,我需要一个 30 平米的餐厅,以便于我招待 10 位朋友用餐。
例如:作为系统的合法用户,可以通过录入账号和密码登录到系统中。

PO 根据对客户、对最终用户的商业价值来划分用户故事优先级。
PO 通过和客户进一步调研,以及和团队成员沟通,确定和完善用户故事的验收标准。

用户故事 “3C” 原则

  1. Card 可以写在卡片上
  2. Conversation 用于对话
  3. Confirmation 及时确认

至此,product backlog => 需求 + 优先级 => 用户故事 + 优先级 + 验收标准 => 用户角色 + 功能 + 目的 + 优先级 + 验收标准
前面说的都是功能需求,对于非功能需求怎么办?
如果能够明确到某个故事,就描述在故事的验收标准中;如果不能明确到某个故事,就单独写个“技术故事”,单独列出来这些非功能需求。

理想的用户故事具有“ INVEST”特点:
(1)独立性 Independent
尽可能避免故事之间存在依赖关系,否则会造成划分优先级的困难,在安排开发顺序时需要考虑故事之间的依赖关系。
(2)可协商性 Negotiable
故事是可协商的,故事是有弹性的,不是必须实现的书面合同或者需求。
(3)对客户有价值 Valuable
确保每个故事对客户有价值的最好方式是让用户编写故事。
(4)可预测性 Estimable
开发者应该能够预测故事的规模,以及编码实现所需要的时间。
(5)短小精悍 Small
一般一个故事在一个迭代周期内是可以实现的。
(6)可测试性 Testable
所编写的故事必须是可测试的,能够定义出验收标准。

用户故事是如何估算的?
用户故事的估算单位是故事点(Story Points),代表了开发用户故事所需的全部工作量,所以团队的估算必须考虑到影响工作量的所有因素。这可能包括:
  • 工作的数量
  • 工作的复杂度
  • 工作中存在的任何风险或不确定性
故事点是一个相对值,一般用 Fibonacci 数列来表示:0, 1/2, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89。虽然可以分为 12 个等级,但一般只采用0、1、2、3、5、8、13 这 7 个等级。如果在预估中发现超过 13 的,一般把任务分割为两部分。

等待 PO 基于商业价值挑选完毕某次交付中应该包含的用户故事后,接下来,Team 就可以挑选在某次迭代中要实现的用户故事了。

2. sprint backlog
sprint backlog 是在 sprint planning meeting 上讨论确认的任务列表。每个任务以小时为单位,一般没有超过 16 小时的任务。
sprint backlog 由 Team 专职负责,每天更新一次,在 spring 生命周期间存续。

每个任务完成的标志是什么?
(1)Team 成员检测:所有的单元测试通过。
(2)PO 检测:所有的功能测试通过。

3. burn down chart
burn down chart 译为燃尽图,还是很形象的,显示当前 spint 中未完成的任务数目,是展示项目进展的一个指示器。
每天开完 15 分钟站立会议后,由 SM 负责更新燃尽图。


横坐标为工作日期,纵坐标估计剩余的工作量,每个点代表了在那一天估计剩余的工作量。通过折线依次连接起所有的点形成为估计剩余工作量的趋势线。另外还有一条控制线,为最初的估计工作量到结束日期的连线,一般用不同的颜色画上边的两根线。
对此图的研判规则如下:
(1)如果趋势线在控制线以下,说明进展顺利,有比较大的概率按期或提前完工。
(2)如果趋势线在控制线以上,说明有比较大的概率延期,此时需要关注进度了。

注意,趋势线并非一直下行,也有可能上行,即发生了错误的估计或遗漏的任务时。

Scrum_003:Scrum 的五个会议

1. sprint plan meeting

WHY - 为本次 sprint 制定计划
WHO - 全体成员
WHEN - sprint 第 1 天
WHAT - 本次 sprint 要交付的内容
  • PO 讲解 product backlog 
  • 团队进行评估,得出 sprint backlog 
  • 评估每个任务的工作量
  • Team 成员领取任务
HOW LONG - 8 小时
INPUT - 产品列表,最新增量,团队容量,历史数据
OUTPUT - sprint backlog

2. daily scrum meeting

WHY - 制定 24 小时的计划
WHO - Scrum Master 和 Team
WHEN - 每天在固定的时间、规定地点开站立会议
WHAT - 每个 Team 成员依次讲三个问题:
  • 我昨天作了什么?
  • 我今天要做什么?
  • 我有什么问题?
HOW LONG - 15 分钟
INPUT - sprint backlog
OUTPUT - sprint backlog

3. product backlog refinement meeting

WHY - 团队成员帮助 PO 完善下一个迭代的用户故事
WHO - 全体成员
WHEN - 本次 sprint 进行中
WHAT -
  • 解释用户故事,排定优先级
  • 分解用户故事,评估工作量
  • 更新验收标准
HOW LONG - 2 小时
INPUT - product backlog
OUTPUT - product backlog

4. sprint review meeting

WHY - 检视增量,并做调整
WHO - 全体成员
WHEN - 本次 sprint 结束时
WHAT - Team 团队向 PO 和利益相关者展示已完成的功能
  • 检查哪些做了,哪些没做
  • 问题总结
  • 成果演示
  • 下一步计划
HOW LONG - 4 小时
INPUT - 增量、product backlog、问题列表
OUTPUT - product backlog、sprint backlog

5. sprint retrospective meeting
WHY - 为下一个 sprint 作改进
WHO - 全体成员
WHEN - sprint review meeting 结束之后
WHAT - 回顾与总结,提高团队效率,避免重复犯错
  • 检视
  • 调整
  • 计划
HOW LONG - 1 小时
INPUT - Burn Down Chart、评审会议结果、调查结果、sprint backlog
OUTPUT - 改进计划

Scrum_002:Scrum 的三大角色

Scrum 的三大角色是:Scrum Master、Product Owner、Team。这三个对等地位的角色构成一个平衡的铁三角推动整个项目的进展。
注意,这是三个角色,不是某三个人,每个角色可以有一个或多个人担任。
一个 Scrum 团队一般不超过 10 个人,这样才能保证团队的效率比较高。

1. Scrum Master
SM 在项目组承担了如下的细分角色:
(1)会议主持
负责主持四个主要的会议:迭代计划会议、每日站立会议、迭代评审会议、迭代回顾会议。
(2)牧羊犬
负责屏蔽项目组外部的干扰。
(3)雷锋
给 PO、Team 提供帮助:帮助 PO 确定需求、排定优先级;帮助 Team 做估算、分解任务、完成任务。
(4)外交官
当项目组外有人不理解项目组的工作时,负责去解释说明,负责对外发布项目组的信息。
(5)教练
提供 Scrum 培训,负责指导项目组成员按照 Scrum 的原则、方法做事。
(6)清道夫
负责排除在项目进展中遇到的各种障碍。

注意:SM 不是项目经理,他没有分配任务的权力,没有考核的权力,没有下命令的权力;SM 是一个协调的角色,保证各个角色及职责的良好协作。

2. Product Owner
PO 在项目组承担了如下细分角色:
(1)领域专家
了解客户、最终用户、以及其他利益相关者对项目的真正需求是什么。
(2)决定需求
负责编写和维护用户需求,并根据商业和市场价值确定需求优先级。
(3)解释需求
负责给项目组成员进行需求答疑。
(4)功能测试
负责编写每个需求的验收标准以及功能测试用例。
(5)验收
在迭代结束时验收开发团队的工作。

PO 可以是来自用户、客户、销售部、产品策划部门或者是开发部门的需求分析人员,无论是来自哪里,需要满足 “CRACK” 的要求:

  • Collaborative:易于协作、易于沟通
  • Representative:能代表用户、客户、市场的利益
  • Authorized:得到了用户、客户、市场等的授权
  • Committed:一诺千金,尽职尽责的工作
  • Knowledgeable:领域专家,行业知识丰富
3. Team
Team 是技术团队,他们负责实现这个系统。Team 是自我管理的,不需要外部的管理者来管理他们。Team 成员应该是“全栈型”技术人员,而不是那种专业化分工的团队,这样才能易于沟通。

Team 承担了如下的细分角色:
(1)设计人员
对系统进行架构设计。
(2)实现人员
负责构建并实现整个系统,并对系统执行单元测试。
(3)管理人员
大家一起来估算、一起来选择任务、一起来跟踪进展情况。

总结:PO 决定做什么,SM 从过程上保证如何实现这个项目,Team 从技术上保证如何实现这个项目。

Scrum_001:什么是 Scrum ?

Scrum 是当前最流行的一种敏捷开发方法论。
Scrum 的本意是橄榄球运动的争球,把一个开发流程的名字取名为 Scrum,是希望在开发软件时,大家像打橄榄球一样富有战斗激情和合作精神。

Scrum 五大核心价值
  1. 专注 Focus
  2. 勇气 Courage 
  3. 开放 Openness
  4. 承诺 Commitment 
  5. 尊重 Respect
Scrum 三大理论基础
  1. 透明性 Transparency
    开发过程的各个环节保持高度的可见性。
  2. 检验 Inspection
    开发过程中的各方面均可检验。
  3. 适应 Adaptation
    发现偏差,及时调整。
1. 什么是敏捷开发?
敏捷开发是一种以人为核心的、迭代增量式的、循序渐进的开发方法。
它是一种软件开发的流程,指导我们用规定的环节去一步一步完成项目的开发;而这种开发方式的主要驱动核心是人;采用迭代式开发,即整个开发过程由若干个短的迭代周期组成。

敏捷开发宣言(Manifesto for Agile Software Development)

  • 个体和互动 高于 流程和工具
    Individuals and interactions over processes and tools 
  • 可以工作的软件 高于 详尽的文档
    Working software over comprehensive documentation
    最好的文档是代码和团队。
    直到迫切需要并且意义重大时,才编写文档。
  • 客户合作 高于 合同谈判
    Customer collaboration over contract negotiation 
  • 响应变化 高于 遵循计划
    Responding to change over following a plan 

也就是说,尽管右项有其价值,我们更重视左项的价值。
That is, while there is value in the items on the right, we value the items on the left more.

2. 为什么敏捷开发是以人为核心的开发方法?
瀑布式开发模型是以文档为驱动的,在其整个开发过程中,需要写大量的文档,一切以文档为依据,开发人员都是根据需求和设计文档开发,测试人员根据测试文档测试。而敏捷开发只写最最必要的文档,它注重的是人与人之间的面对面的交流,所以它强调以人为核心。

3. 什么是迭代(Iteration)
迭代是指把一个复杂且开发周期很长的开发任务,分解为很多小周期可完成的任务,这样的一个周期就是一次迭代的过程。每一次迭代都可以生产出一个可以交付的软件产品。
在 Scrum 中,迭代称为冲刺(Sprint),Sprint 原意是短距离赛跑的意思,也就是说,我们要把一次迭代的开发内容以最快的速度完成它,这个过程我们称它为 Sprint。

切记,敏捷不是目的,敏捷是过程,为了敏捷而敏捷会导致萝卜快了不洗泥,导致 quick and dirty 式的开发。