敏捷手册

2017-03-16  本文已影响0人  helphi

敏捷软件开发宣言

<big><big>
个体与交互 胜过 流程和工具
可用的软件 胜过 完备的文档
客户合作 胜过 合同谈判
响应变化 胜过 遵循计划
</big></big>


敏捷宣言遵循的原则

  1. 我们的最高目标是通过尽早、持续地交付有价值的软件来满足客户
  2. 即使到了开发后期也欢迎改变需求,敏捷过程利用变化来为客户创造竞争优势
  3. 不断交付可用的软件,周期越短越好
  4. 在整个项目开发期间,业务人员与开发人员必须天天都在一起工作
  5. 善于激励项目成员,给他们提供所需的环境和支持,并相信他们能够完成任务
  6. 无论是团队内还是团队间,最有效的沟通方法是面对面的交谈
  7. 可用的软件是衡量进度的主要指标
  8. 责任人、开发者和用户应保持恒久稳定的开发速度
  9. 对技术的精益求精以及对设计的不断完善将提升敏捷性
  10. 简洁是一门艺术,要尽最大可能减少不必要的工作
  11. 最佳的架构、需求和设计出自于自组织的团队
  12. 团队要定期反省并调整团队行为以便更高效地工作

Scrum 最佳实践

承诺 勇气 专注 开放 尊重

  1. 具备清晰且好记的愿景
  2. 拥有维护良好的产品代办列表
  3. 产品代办列表依照业务价值进行排序
  4. 产品代办列表中故事的大小由团队决定
  5. 举行每日站立会议
  6. 使用燃尽图
  7. Sprint 不能受到管理层以及客户的干扰
  8. 团队交付的软件必须符合“完成的定义”
  9. 举办协作式的评审会议
  10. 回顾会议的重点要放在改进团队和组织的工作流程上

十大典型障碍

  1. 会议规则没能被遵循
  2. 产品远景和 Sprint 目标不清晰
  3. 没有产品负责人负责回答提问
  4. 产品待办列表未能按商业价值区分优先级
  5. 并不是所有负责交付产品的人员都是团队里的成员
  6. Scrum Master 还要处理其他任务,不能集中精力
  7. 团队人数过多(多于7人)
  8. 团队没有能坐在一起工作的空间
  9. 团队的 Sprint 待办列表混乱

极限编程最佳实践

沟通 简单 回馈 勇气 尊重

  1. 结对编程
    所有的产品软件都是由两个程序员、并排坐在一起在同一台机器上构建的。
  2. 计划游戏
    计划是持续的、循序渐进的。每2周,开发人员就为下2周估算候选特性的成本,而客户则根据成本和商务价值来选择要实现的特性。
  3. 测试驱动开发
    程序员以非常短的循环周期工作,他们先增加一个失败的测试,然后使之通过。
  4. 完整团队
    开发人员、业务分析师、测试人员等一起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的墙壁上随意悬挂着大幅的、显著的图表以及其他一些显示他们进度的东西。
  5. 持续集成
    团队总是使系统完整地被集成。
  6. 改进设计
    随时改进糟糕的代码。保持代码尽可能的干净、具有表达力。
  7. 客户测试
    作为选择每个所期望的特性的一部分,客户定义出自动验收测试来表明该特性可以工作。
  8. 编码标准
    系统中所有的代码看起来就好像是被单独一个非常值得胜任的人编写的。
  9. 集体代码所有权
    任何结对的程序员都可以在任何时候改进任何代码。
  10. 简单设计
    团队保持设计恰好和当前的系统功能相匹配。它通过了所有的测试,不包含任何重复,表达出了编写者想表达的所有东西,并且包含尽可能少的代码。
  11. 系统隐喻
    团队提出一个程序工作原理的公共景像。
  12. 可持续的速度
    团队只有持久才有获胜的希望。他们以能够长期维持的速度努力工作。他们保存精力,他们把项目看作是马拉松长跑,而不是全速短跑。

敏捷开发最佳实践

面向对象设计原则

  1. SRP 单一职责原则
    就一个类而言,应该仅有一个引起它变化的原因。
  2. OCP 开放-封闭原则
    软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。
  3. LSP 里斯科夫替换原则
    子类型必须能够替换掉它们的基类型。
  4. DIP 依赖倒置原则
    抽象不应该依赖于细节。细节应该依赖于抽象。
  5. ISP 接口隔离原则
    不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。
  6. REP 重用发布等价原则
    重用的粒度就是发布的粒度。
  7. CCP 共同封闭原则
    包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
  8. CRP 共同重用原则
    一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
  9. ADP 无环依赖原则
    在包的依赖关系图中不允许存在环。
  10. SDP 稳定依赖原则
    朝着稳定的方向进行依赖。
  11. SAP 稳定抽象原则
    包的抽象程度应该和其稳定程度一致。

通用会议规则

缩写词:

  • PB = Product Backlog/产品待办列表
  • SB = Sprint Backlog/Sprint 待办列表
  • SM = Scrum Master
  • PO = Product Owner/产品负责人

基本要求

会前准备

  1. 提前邀请所有必须参会的人,让他们有时间准备
  2. 发送带有会议目标和意图的会议纲要
  3. 预订会议所需的全部资源:房间、投影仪、挂图、主持设备,以及此次会议需要的其他东西
  4. 会前 24 小时发送提醒
  5. 准备带有会议规则的挂图

会议推进

  1. 展开讨论时会议的推进人必须在场。他不能参与到具体讨论中,但是他需要注意讨论进程,如果讨论参与者失去重点,他还要将讨论带回正轨
  2. 推进人展示会议的目标和意图
  3. 必要时推进人可以商定由某个人撰写会议记录
  4. 推进人可以记录团队的意见或教授团队如何自己记录文档;而且推进人可能会在挂图上进行记录,将对话可视化
  5. 推进人会使用类似“停车位”之类的工具来记录与会议无关的议题供后续讨论,从而保证会议围绕重点进行
  6. 推进人会对会议进行收尾,并进行非常简短的回顾以传达会议上所达成的共识(不超过 5 分钟)

估算会议

  • 与会者 = 团队 + SM + PO + 用户
  • 时间 < 90 分钟

会议目的

会议输入

会议过程

  1. PO 依次展示 PB 中的故事
  2. 每展示一个团队就对该故事进行估算并记录平均故事点数
  3. 如果其中两个人的估算点数超过两倍则分别说明原因,然后重新估算
  4. 如果某个故事过大应将其划分为较小的故事然后进行估算

注意:

  • 只有团队能估算 PB 中的故事,PO 不参与估算
  • 上一个 Sprint 遗留下来的故事需要重新估算
  • 不要讨论技术细节

会议输出


计划会议

  • 与会者 = 团队 + SM + PO + 用户
  • 时间 < 60 分钟

会议目的

会议输入

会议过程

  1. 团队依次讨论 PB 中的故事
  2. 找出验收条件
  3. 找出非功能性需求(性能、安全……)
  4. 确定每个故事的验收测试用例
  5. 确定每个故事完成的定义
  6. SM 向团队正式提问“是否能在本 Sprint 周期内完成该故事”,如果是则放入本次 SB 中
  7. 确定本次 Sprint 要达成的目标

注意:

  • 只有团队能够决定 SB 中可以包含哪些故事

会议输出


任务分解会议

  • 与会者 = 团队 + SM
  • 时间 < 60 分钟

会议目的

会议输入

会议过程

  1. 团队依次讨 SB 中的故事
  2. 针对每个故事讨论需要创建什么样的架构,需要编写什么样的接口、类、组件,需要新增或修改哪些数据表等
  3. 根据讨论的结果创建任务
  4. 为每个任务估算时间(可选)
  5. 将故事和任务整理到任务板上并宣布本次 Sprint 正式开始

注意:

  • 不要分配任务

会议输出


每日例会

  • 与会者 = 团队 + SM
  • 时间 < 15 分钟

会议目的

会议输入

会议过程

  1. 团队在任务板旁站成一个圈
  2. 从左边第一个人开始,从任务板上取下其当前的任务并向其他成员说明目前的情况
  3. 如果没有完成则放回进行列并做好标记
  4. 如果该任务已经完成则将其放入完成列,然后领取新的任务并承诺完成时间
  5. 如果在完成该任务过程中遇到障碍则报告给 SM,同时在任务卡上做好标记
  6. 和其他成员预约结对编程
  7. 其他成员对该任务有疑问可随时提出

注意:

  • SM 站在圈外,团队不是向 SM 汇报工作
  • SM 不要提问题、不要移动任务卡或更新燃尽图
  • 不要讨论技术细节问题,可以会后单独讨论
  • 不要在没有准备的情况下参会
  • 进行中的任务不要过多(一般不超过 4 个)

会议输出


评审会议

  • 与会者 = 团队 + SM + PO + 用户
  • 时间 < 90 分钟

会议目的

会议输入

会议过程

注意:

  • 不要展示还不能发布的产品增量
  • SM 不要负责展示结果
  • 团队不要针对 PO 展示

会议输出


回顾会议

  • 与会者 = 团队 + SM
  • 时间 < 90 分钟

会议目的

会议输入

会议过程

  1. 宣布本次 Sprint 结束
  2. 准备一张写着“做得好”标题和一张写着“可改进”标题的挂图
  3. 在每张挂图上绘制一条带有开始和结束日期的时间线
  4. 从“做得好”开始,团队成员依次(包括 SM)在时间线上写上认为做得不错的事件并说明
  5. 以同样的方式完成“可改进”议题
  6. 讨论如何改进并记录在卡片上,如果是障碍则做好标记

会议输出


用户故事

用户故事是从用户的角度来描述用户渴望得到的功能

故事三要素

  1. 角色:谁要使用这个功能
  2. 活动:需要完成什么样的功能
  3. 商业价值:为什么需要这个功能,这个功能带来什么样的价值

用户故事模板

注意:

  • 用户故事不能够使用技术语言来描述,要使用用户可以理解的业务语言来描述

Ron Jeffries 的 3 个 C

  1. 卡片(Card):用户故事一般写在小的记事卡片上。卡片上可能会写上故事的简短描述,工作量估算等。
  2. 交谈(Conversation):用户故事背后的细节来源于和客户或者产品负责人的交流沟通。
  3. 确认(Confirmation):通过验收测试确认用户故事被正确完成。

用户故事的六个特性(INVEST原则)

  1. 独立性(Independent):要尽可能的让一个用户故事独立于其他的用户故事。用户故事之间的依赖使得制定计划,确定优先级,工作量估算都变得很困难。通常我们可以通过组合用户故事和分解用户故事来减少依赖性。
  2. 可协商性(Negotiable):一个用户故事的内容要是可以协商的,用户故事不是合同。一个用户故事卡片上只是对用户故事的一个简短的描述,不包括太多的细节。具体的细节在沟通阶段产出。一个用户故事卡带有了太多的细节,实际上限制了和用户的沟通。
  3. 有价值(Valuable):每个故事必须对客户具有价值(无论是用户还是购买方)。一个让用户故事有价值的好方法是让客户来写下它们。一旦一个客户意识到这是一个用户故事并不是一个契约而且可以进行协商的时候,他们将非常乐意写下故事。
  4. 可以估算性(Estimable):开发团队需要去估计一个用户故事以便确定优先级,工作量,安排计划。但是让开发者难以估计故事的问题来自:对于领域知识的缺乏(这种情况下需要更多的沟通),或者故事太大了(这时需要把故事切分成小些的)。
  5. 短小(Small):一个好的故事在工作量上要尽量短小,最好不要超过10个理想人/天的工作量,至少要确保的是在一个迭代或Sprint中能够完成。用户故事越大,在安排计划,工作量估算等方面的风险就会越大。
  6. 可测试性(Testable):一个用户故事要是可以测试的,以便于确认它是可以完成的。如果一个用户故事不能够测试,那么你就无法知道它什么时候可以完成。一个不可测试的用户故事例子:软件应该是易于使用的。

任务板

任务板以可视化的方式展示团队的工作

任务板有 3 列

  1. 准备做
    • 要完成一个故事,你得完成一些任务。在计划会议上创建的任务以及后续添加的任务都应该放在该列
  2. 进行中
    • 当团队成员领取某个任务时将任务挪到该列
    • 每日站会上会对该列中没有完成的任务做一个标记(如一个圆点)
    • 如果该列中的任务是因为过大而不能在一天内完成则可以考虑将其分解为多个任务重新安排
    • 如果一个任务因为障碍无法完成应该做一个标记(如一个红点)
  3. 已完成
    • 当一个任务完成后,着手该任务的团队成员就可以将其放入该列并领取下一个任务

燃尽图

记住:跟踪进度要由团队来完成。


角色

隐喻:我们是在拍电影!

Scrum Master = 电影导演

团队 = 演员

管理层 = 制片厂老板

客户 = 制片人

Product Owner = 故事作者

最终用户 = 观众


产品负责人工作检查清单


团队工作检查清单


工程实践检查清单

上一篇 下一篇

猜你喜欢

热点阅读