四、腾讯是如何进行敏捷开发的?

1、用户研究

如何加强用户的参与度,这是一种成本比较低的用户研究方法。通过抓取一些用户数据做分析,分析用户在这个产品上整个体验的过程是怎样的,通过后台的数据可以看到整个活动的曲线,同时CE也可以通过一些科学的手段去保证,包括市场调研、用户研究、数据挖掘、产品体会等,这是通过一些对用户反馈、用户观察的工具去配合去对用户做研究。比如QQ拍拍的一个用户的研究,我们可以到现场去做的一个调研,经常会由产品经理和用户研究人员到用户的实际办公地点进行调研,做的反馈,通过观察用户是如何使用你的产品,配合一些相关的工具去科学的分析。因为互联网是非常强调同用户的这种反馈的,腾讯有自己内部的一个CE反馈平台,在这个平台上可以收集到所有用户的反馈,产品经理可以每天都会看到他所负责的产品有哪些反馈,包括内部的、外部的,然后他可以根据这些反馈对产品进行一些快速的调整,包括开发一些什么样的产品特性,内部同事也可以踊跃的在平台上反馈,内部同事本身是QQ用户。


2、故事卡片/故事墙/特征列表

StoryCard是XP中推荐的需求定义方法,要求符合Invest和Moscow原则;故事墙则用于跟踪故事卡片的 变化状态,而特征列表是Tencent一直沿用的需求表达形式,在腾讯的TAPD工具中已经实现了类似ThoughtWorks 的Mingle的故事卡片管理功能,对于需求跟踪而言这是不错的方法,一目了然。


3、结对编程

理论上结对编程可以提高代码的质量,而且并不会降低开发效率,但腾讯的业务繁忙,资源上不允许两人结对。但是在一些团队里面还是一直在尝试着做结对编程的工作。一个在编写程序,旁边还有一个人,同时记录编写过程、编写思路、碰到的问题、自己的想法,编写完以后一段时间他们会交换一下,是互相交换着进行编程,这是一个结对编程的一个过程。

4、测试驱动

“测试驱动开发”在腾讯执行地并不太好,腾讯的产品以Web形式居多、业务逻辑相对简单,C++下的单元测试有些力不从心。相反自动化测试在腾讯比较盛行,因为有测试部门专门的自动化测试Team在推动,而且链接的是正式生产环境,可以即时反映产品当前的状态。

5、持续集成
持续集成可以降低发布前集成阶段的难度与成本,腾讯的自动化构建系统推行的比较早,覆盖了大多数产品,而且正在朝自动化构建-自动化测试-自动化发布三者协同的目标迈进。作为加快产品的发布的能力,持续集成在以下几个方面作用明显。

    自动编译输出报告,维护代码可运行,及时暴露风险,降低集成成本。
    Dailybuild日构建系统,让产品经理、测试人员可以尽早进行体验和测试。
    作为一个自动化系统,利用静态代码检查、单元测试报告等手段为团队提供报告,促进编码质量不断得到重视,降低缺陷解决成本、缩短解决时间。

6、灰度发布

灰度发布是腾讯的又一创新,它将产品试用扩大到海量用户一端,在小范围及时吸取用户反馈,分析用户行为和喜好,持续修正自己产品的功能体验。在互联网行业,灰度发布已经成为重要的发布控制手段。有时我们希望通过向小部分用户开发新功能,让他们先来体验新功能、新特性。通过用户反馈、数据运营的手段及早获得反馈,及时改进。以此方式,既可以降低发布风险,也可以提升发布频率,加快发布节奏。

简单说是,将一项业务不是一下发布给所有用户,而是分批分期的发布,目的有两个方面,一是减轻服务器压力,二是期间可以在小范围收集到用户的反馈,如果业务出现问题,不会让大范围用户受到影响。随着经验的累计,我们有了许多种灰度策略和方法,灰度也有了更多的应用,甚至引入到了测试环境,即选择一些热心用户,将功能首先发布给他们,通过他们的使用,来帮助进行一些现网测试,这使得一些难于模拟的测试场景变得简单,测试人员的压力大大降低;更重要的用户是好的测试人员,测试结果更加真实;同时他们也享受到了优先体验的特权,可谓一举三得。发布的时候也有策略,比如发布时如何放量,对用户有些什么样的实验,技术上怎样做一些后台开关,运营上怎样跟进,怎样保证4小时人员的留守,发布完后怎样收集用户反馈等等都会有一些统一的规则。


7、发布汽车

过于频繁的发布会打破团队节奏,有效的发布管理是必不可少的,根据业务特点,我们通常会采用三种发布模式,我们管它叫“发布汽车”。

    班车模式:像班车一样,固定周期进行,比如每两周发布一次,这周比较适合特性规划比较好的产品,比如QQ客户端基本每个月都会发布一个版本。
    的士模式:与QQ客户端不同,QQServer作为一个平台,它的需求来源非常多,因此它采用多线并行的方式,根据需求来源分成十多个子项目,根据每个子项目如果想要发布,像打的一样随叫随发布。他的好处是快,但是协调发布的成本是比较高的,比作班车花钱要多。
    警车模式:顾名思义可以不按法规来开车,因此对于一下特别紧急的需求或运营事件,必须采用警车这种模式,紧急发布,但这样做成本更高,会把交通秩序搞乱,开发节奏打破。

8、重构

好的代码不是设计出来的,而是重构出来的。

四、总结

当然流程和开发方法确定了还远远不够,更难的是如何将它推动落地。首先腾讯组织开发了承载敏捷思想的TAPD项目管理工具,它类似 ThoughtWorks的Mingle;然后推出了敏捷能力模型,类似CMM成熟度模型一样对Team评级加以引导;同时还推出了敏捷指数排行榜形成竞争,营造你追我赶的声势氛围。

从某个渠道了解到,TAPD的原型是:http://www.jetbrains.com/youtrack/index.jsp,果然是强大的山寨帝国啊~~~