RSG(Regional Scrum Gathering)这两天在上海召开,看了下朋友圈里的分享主题,颇有感触。敏捷研发走过这么多年,很多地方依然是李逵与李鬼并存,很多时候过多地谈论术而忽视了道的本源,于是便想窥一下敏捷的前世今生,为自己作下梳理和总结。

敏捷宣言是怎么回事

2001年2月11-13日,包括Kent Beck、Martin Fowler、Robert C. Martin在内的17人在一起思维碰撞产生了敏捷宣言。 在那个时候,敏捷研发及其相关的方法论包括XP、Scrum等都属于软件工程的边缘地带,人们关注的更多的是流程、计划和文档。

2001年软件发布的周期往往长达1年至数年(一些通信设备软件直到2007年的时候1年才发布一个版本更新)。而现在很多公司一周甚至一天发布几个版本,如facebook的web端在2016年之前每天发布3个版本,之后更是演进到准持续发布的阶段,而它的移动端现在也达到一周一个版本的发布频率。

敏捷软件开发宣言

英文版 我们一直在实践中探寻更好的软件开发方法, 身体力行的同时也帮助他人。由此我们建立了如下价值观:

  • 个体和互动 高于 流程和工具
  • 工作的软件 高于 详尽的文档
  • 客户合作 高于 合同谈判
  • 响应变化 高于 遵循计划

也就是说,尽管右项有其价值, 我们更重视左项的价值。

思想与实践

敏捷研发的本质是拥抱变化,快速地响应客户需求,无论采用何种模型,我们的最终目的都是要快速、准确、高质量地满足客户需求。

常见的实施方法有Scrum和看板等。

Scrum

1986年,竹内弘高和野中郁次郎提出了这个方法。1991年,DeGrace和Stahl在《Wicked Problems, Righteous Solutions》一书中将这种方法称为scrum。 Scrum是一个英式橄榄球术语,有团队整体前进的意思。

Scrum中的角色定义

有一个很形象的故事来描述scrum中的角色定义:

一天,一头猪和一只鸡在路上散步。鸡对猪说:“嗨,我们合伙开一家餐馆怎么样?”猪回头看了一下鸡说:“好主意,那你准备给餐馆起什么名字呢?”鸡想了想说:“叫‘火腿和鸡蛋’怎么样?”“那可不行”,猪说:“我把自己全搭进去了,而你只是参与而已。”

按照猪和鸡这两种参与特点,可以把角色分为两类:

  • Scrum Team

    一个scrum team是自组织的,通常的规模在5-8人,一般不会少于4人,也不会多于10人,团队中包含完成一个需求所需要的各种角色,如研发、测试、运维等,他们作为一个整体前进。

  • Scrum Master

    scrum master的作用是促进scrum流程的顺利完成,减少scrum团队遇到的各种干扰,保证sprint的顺利完成,通常建议scrum master不属于某一个scrum team

  • Product Owner

    产品负责人,通常是客户需求的代表,负责编写用户故事,安排优先级

这些是全搭进去的

  • User

    用户,软件的具体使用者,软件开发出来的目标群体

  • Stake Holder

    影响项目成功的人,如公司股东、客户、提供商等

  • Manager

    维护组织架构,为团队提供环境支持,通常一个manager会同时负责几个scrum team

这些只是参与而已

Sprint

一个scrum的研发单元称为一个sprint(冲刺),时间为1~4周,在一个sprint的开始会计划出这个sprint需要交付的目标,在sprint的结束的时候会对sprint作评审和回顾,包括交付目标和工作方式方法。

每日站会

scrum最为人所知的就是每日站会。所谓每日站会,是指:

  • 每天的固定时间
  • 在固定地点
  • scrum team的所有成员参与
  • 欢迎其他人参与,但只有“猪”可以发言
  • 所有人保持站立
  • 时间不超过15分钟
  • 每个人回答三个问题:
    • 昨天我做了什么
    • 今天打算做什么
    • 完成目标有什么障碍

Scrum的常见工具

  • Product Backlog

    产品的需求订单,按照优先级从高到低排列,粒度较粗,包含粗略的估计,单位有时为小时,也有用故事点(story point)的,用story point的做法一般是以一个过往的需求作为参考,假设完成那个需求需要1个story point,以相对的方式来估计需求。

  • Sprint Backlog

    一个Sprint(1~4周)的任务订单,同样按照优先级从高到低排列,粒度细得多,包含较精确的估计,任务需要拆分得足够细,通常1个人在1~2天内可以完成。 Backlog

  • Burn down chart

    燃尽图,用来显示一个sprint未完成任务的情况

Scrum实践的常见问题

  • 团队成员能力差异较大,且不经常轮换任务
  • 传统的Manager在这个模式下定位模糊,容易成为障碍
  • 项目经理出身的PO过多干预scrum team的具体工作

需要注意的是:

scrum实践中scrum team是自组织的,包括计划、评审和回顾,都是team自身完成的,不需要也不应该有其他人来主导这些事情(像PO,Manager可以参与)。

一个完整的scrum框架见下图: Scrum Framework

看板

看板实践来自于丰田汽车,之后被应用到软件研发领域。 相对于Scrum的各种角色定义和实践会议,看板要简单不少。想直观的感受下看板,可以在TAPD上创建一个看板试一下,同时可以尝试将披萨游戏用看板的方式画出来。

看板的特点是:

  • 从现在开始
  • 渐进式地改变
  • 尊重当前的流程、任务、职责和职位
  • 奖励每一项改进

通常看板的实践包括:

  • 将整个流程可视化

    通过将整个流程以可视化的方式呈现出来,便于发现流程的问题以进行改进Kanban board example.jpg Scrum Framework

  • 限制在制品(WIP)

    简单来说就是减少库存,WIP越多,说明流程越不顺畅,一个完美的系统是做到零库存

  • 明确每个阶段间的转移标准

    比如In Test => Done,必须有明确的标准 一个较完整的看板示例见下图: Kanban Framework

做我们产品发布后的第一批用户

Facebook CD

上图是facebook的准持续的“push-from-master”系统。 功能提交,经过自动化测试系统,会被自动合并入master,master上的变更会被自动部署到内部员工系统上,而后是2%的生产环境,再是100%的生产环境。

这里可以看到facebook的web系统使用者从先到后是这样的:

  1. 自动化测试
  2. 内部员工
  3. 2%外部用户
  4. 100%外部用户

有一句话叫“eat your dog food”,经常使用我们自己开发出来的系统,才能更好地了解它,发现它存在的问题,进而更好地改进它。包括以功能测试的形式或系统测试的形式去经常性地使用它。

人、习惯和工具:缺一不可

敏捷研发比传统的瀑布研发对人有更高的要求,它要求人的技能的多元化,要求团队的混合组成,要求团队的自组织能力。 同时它要求团队培养一个固定的步调来交付产品。 实践上工具有很重要的地位,无论是为了提高测试效率而引入的测试自动化框架,还是看板可视化面板,还是持续交付平台,都需要工具团队付出相当的努力才能完成。 这方面google和facebook堪称业内表率,他们把工具研发摆在相当重要的位置,从SDN等网络基础设施,到全链路监控平台,到测试工具如webdriver,无处不见工具团队的身影。

延伸阅读