软件工程案例教程(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

案例二 即时通信软件QQ

一提到腾讯QQ,相信但凡上网的人都不会陌生。

腾讯公司成立于1998年11月,是目前中国最大的互联网综合服务提供商之一,也是中国服务用户最多的互联网企业之一。通过互联网服务提升人类生活品质是腾讯公司的使命。目前,腾讯把为用户提供“一站式在线生活服务”作为战略目标,提供互联网增值服务、移动及电信增值服务和网络广告服务。通过以下数据见证腾讯QQ的成功。(数据引自PCQQ官方网站)。

(1)万人大关

1999年

2月,腾讯公司即时通信服务开通,与无线寻呼、GSM短消息、IP电话网互联。

11月,QQ用户注册数突破6万。

2000年

4月,QQ用户注册数达10万。

2000年5月27日20点43分,QQ同时在线人数首次突破十万大关。

6月,QQ注册用户数再破十万。

6月21日,“移动QQ”进入联通移动新生活,对众多的腾讯QQ和联通移动电话用户来说意义深远。

11月,QQ2000版本正式发布。

2001年

2月,腾讯QQ在线用户成功突破100万大关,注册用户数已增至2000万。

2002年

3月,QQ在线用户突破300万大关。

7月,倡导行业自律,签署《中国互联网行业自律公约》。

12月,腾讯公司被认定为“2002年度深圳市重点软件企业”。

(2)亿人大关

2003年

8月,推出的“QQ游戏”再度引领互联网娱乐体验。

9月,QQ用户注册数升到2亿。

12月,再次被认定为“2003年度深圳市重点软件企业”。

2004年

1月,获中国移动梦网“2003年度移动梦网合作伙伴最佳进步奖”“2003年度移动梦网音信互动业务合作伙伴最佳业绩奖”和“2003年度移动梦网短信业务合作伙伴最佳业绩奖”三个大奖。

4月,QQ注册用户数再创高峰,突破3亿大关。

5月,“2003年深圳软件企业百强”排行榜,位居第四。

7月,位列“2003年度广东省民营企业百强”第25位。

8月,QQ游戏同时在线突破了62万人。

9月,2003年全国“私营企业纳税百强榜”中排名第29。

10月22日,在刚刚结束的“2004中国商业网站100强”大型调查中,腾讯网得票率名列第一,领先于新浪、搜狐、网易等门户。

12月,“2004年亚太区高科技500强”中腾讯名列第17位,入选“2003年度深圳民营企业50强”。

(3)飞跃发展

2005年

1月,腾讯公司被认定为“2004年度深圳市重点软件企业”。

2月16日,腾讯QQ的同时在线人数首次突破了1000万。自2000年5月腾讯QQ的在线人数突破10万以来,仅用了4年时间就达到了100倍的增长。

4月,腾讯公司获“2004年度深圳市知识产权先进单位”称号。

4月22日,腾讯公司荣获深圳市知识产权保护先进单位第三名,前两位分别是华为技术有限公司和中兴通讯股份有限公司。

5月,腾讯公司位列“2005年中国软件产业最大规模前100家企业”第25位。

(4)服务扩增

2008年

3月,腾讯QQ实行限制用户异地修改密码的安全措施,暂对异地使用密码保护取密修改并无影响;IP政策出台。QQ聊天室(酷Q社团)再现江湖;酷Q社团成立于2006年12月。

4月,10位QQ号码问世并已开放申请。

5月,QQ申诉功能优化改编,新增好友辅助申诉功能,其他证据一栏将取消并惹争议;申诉人性化。

6月,QQ同时在线用户数突破4000万。注册用户接近8亿。QQDNF黑钻业务推出,从此“七钻鼎立”。

9月,QQ增值业务:会员Q豆正式发布,使用Q豆可以兑换QQ公仔纪念品等。

腾讯启动了多项打击QQ外挂措施,首当其冲的是“显示用户IP地址”、“显示用户是否隐身”等功能的彩虹版QQ外挂。

2009年

1月,QQ同时在线用户数突破4300万,继续领跑国内同类软件。

QQ推出纪念十周年的活动,有上亿网友参与,同时在2月23日晚8时,同时在线人数突破5100万,注册用户达到9亿多。

(5)再创辉煌

2010年

3月5日腾讯QQ同时在线用户数突破一亿。

10月09日,QQ同时在线人数创历史新高,达到了一亿二千万人。

2010年11月3日晚,腾讯发布公告,在装有360软件的电脑上停止运行QQ软件。2010年11月10日下午,在工信部等三部委的积极干预下,腾讯与360已经兼容。

2011年

腾讯QQ同时在线用户数突破一亿四千万。

2012年

腾讯QQ同时在线用户数突破一亿七千万。2月,腾讯宣布与日本KDDI合作,推出手机QQ日本版,全面打入日本市场。首先发布了Android版本。

5月,手机QQ日本版推出iPhone版本,支持iOS系统3.0以上版本。

2013年

腾讯公司发行QQ 2013新版本,进行了更多细节上的优化。2013年01月11日发布了Beta2版本,推出了“剑鱼”全新音视频引擎,高清画质最高可达HD级别(720P)。2013年01月22日,腾讯发布QQ 2013新春版。

(6)继续引领

2014年

2014年9月连续发布QQ 5.0~QQ 6.4共11个版本,性能提升,方便性增强。

从2006年开始,腾讯的研发规模开始快速扩大,开发模式急需规范和标准化。之后研发管理部开始与Thought Works公司接触,逐渐将敏捷产品开发引入进来,并正式命名为TAPD(Tencent Agile Product Development)。腾讯的TAPD是吸收了XP(极限编程)+SCRUM(迭代式增量软件开发过程)+FDD(产品特性驱动开发过程)三者特点的并行迭代开发模式,涉及范畴包括敏捷项目管理和敏捷软件开发。

1 腾讯是如何做敏捷管理的?

(1)故事墙

平时工作中,很多团队会把每天开发的一些产品特性采用story的方式,每天都在白板里面展示出来。整个团队每天都会围绕这个白板清晰地看到整个产品或者整个项目的一个过程。写在白板上比用Excel或者其他工具更好管理,因为写在白板上让人感觉更紧迫、更正式、更一目了然,有一种别人在监督、在注视的感觉。

(2)每日晨会

每个团队每天大概花15~30分钟,回顾昨天做了什么,昨天有些什么问题,同时也会介绍每个人今天计划做些什么工作。对团队而言,这是检查进度、快速调整且非常有效的形式。

最早是通过白板的方式去做,就是每天项目经理组织团队成员对着白板,白板上体现项目的进展情况,通过会议可以很明确地知道昨天大家做到什么进程,今天大家计划做什么,最早的时候每个成员都是口头汇报的。后来腾讯也做了一些改进,比如有些项目开始通过即时通信软件每天去交流,最后由一个人去统一发布出来,这样能解决一些分布式团队的合作。

(3)规划游戏

对敏捷的一种常见误解是不要计划,其实在敏捷的体系中不仅强调计划,甚至区分Release计划、Iteration计划和Task计划等多种不同粒度、不同时长的计划。规划游戏突出的是让用户代表参与,由用户代表评估用户故事/特性的优先级,开发人员评估任务的开发时间,由用户代表+项目经理+核心成员三方共同排序、组合,确定本次迭代计划需要实现的特性列表。在腾讯,用户代表就是“产品经理”。腾讯特别强调的是并行迭代,即多个版本并行,最大程度发挥资源的效率。Release(发布)可理解成当实现的产品特性累积到一定用户价值时的正式发布,它是比迭代更大的概念。迭代是在固定时间内开发特性的过程,Release一般包括多次迭代。

(4)时间盒

在腾讯的产品研发中,产品的每一次迭代都有一个明确的时间盒。在每一次迭代开始的时候会召开一次IPM会议,即本次迭代的计划会议,会议中团队里的所有成员,包括产品人员、开发人员、项目经理、总监、部门领导,一起敲定本次迭代要完成的任务。一旦任务敲定下来,本次迭代就会严格按照这个去落实执行。TimeBox反映了敏捷开发的节奏,即在固定时间内实现不固定特性的周期,抛开需求定义阶段,从设计—实现—测试到部署,在腾讯一般一至两周时间内完成。

(5)产品演示

提交测试前由开发人员演示实现的功能,产品经理到场Review是否符合当初的设想,避免接近发布时才反溃意见。

(6)迭代总结

在每一个产品发布的时候都会有程序化的总结。具体的做法是,把做得好的、不好的总结出来,做得好的在下一次迭代发扬光大,做得不好的在下一次迭代就要注意改进。这样的总结是要求项目的所有成员都必须参加,包括项目的开发人员、测试人员、QA、项目经理、产品经理等,每个人都要总结他在上一个迭代中碰到了什么问题,通过便笺纸的方式贴出来。项目经理实际上可以看成是Scrum Master,负责总结这样一些内容:我们下一次迭代继续发扬什么,必须要注意什么,最后就会得出一个Excel的文档,包括上一个迭代中出的问题,具体的解决办法等。

(7)自运转团队

自运转团队,是将需求开发过程详细划分成开发的各个环节,并明确每个环节的负责人,由该负责人来驱动上下游的负责人,而不再由项目经理来连接各个环节,再配合高效的项目协助工具平台,实现开发过程自运转。这时项目经理则由指挥者变成服务者,观察各环节之间产生的瓶颈,并及时采取措施扫除障碍。

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

(1)用户研究

通过抓取一些用户数据做分析,分析用户在这个产品上整个过程的体验是怎样的,通过后台的数据可以看到整个活动的曲线。互联网是非常强调同用户间的反馈的。腾讯有自己内部的一个用户参与反馈平台,在这个平台上可以收集到所有用户的反馈。产品经理每天都会看到他所负责的产品有哪些反馈,包括内部的、外部的,然后他就可以根据这些反馈对产品进行一些快速的调整,包括开发一些什么样的产品特性。另外,内部同事也可以踊跃地在平台上反馈,因为内部同事本身就是QQ用户。

(2)故事卡片/故事墙/特征列表

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

(3)结对编程

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

(4)测试驱动

自动化测试在腾讯比较盛行,因为有测试部门专门的自动化测试团队在推动,而且链接的是正式生产环境,可以即时反映产品当前的状态。

(5)持续集成

持续集成可以降低发布前集成阶段的难度与成本,腾讯的自动化构建系统推行得比较早,覆盖了大多数产品,而且正在朝自动化构建—自动化测试—自动化发布三者协同的目标迈进。Dailybuild每日构建系统,让产品经理、测试人员可以尽早进行体验和测试。作为一个自动化系统,利用静态代码检查、单元测试报告等手段为团队提供报告,促进编码质量不断提高,降低缺陷解决成本、缩短问题解决时间。

(6)灰度发布

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

(7)发布汽车

过于频繁的发布会打破团队节奏,有效的发布管理是必不可少的。根据业务特点,通常会采用三种发布模式,腾讯内部称之为“发布汽车”。

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

(8)重构

好的代码不是设计出来的,而是重构出来的。重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。也许有人会问,为什么不在项目开始时多花些时间把设计做好,而要以后花时间来重构呢?要知道,一个完美得可以预见未来任何变化的设计,或一个灵活得可以容纳任何扩展的设计是不存在的。系统设计人员对即将着手的项目往往只能从大方向予以把控,而无法知道每个细枝末节。其次永远不变的就是变化,提出需求的用户往往要在软件成形后才开始“品头论足”,系统设计人员毕竟不是先知先觉的神仙,功能的变化导致设计的调整再所难免。所以“测试为先,持续重构”是良好的开发习惯,并被越来越多的人所采纳。测试和重构像黄河的护堤,成为保证软件质量的法宝。