在腾讯开发 QQ IM 的工作体验是怎样的?
我之前在 PC QQ(以下简称 QQ)部门做过一段时间客户端开发,就讲讲我的一些经历。
开发每个人有两台联想台式机,预装 Win 7 和一堆内网监控软件,你懂的。配置还可以,不过其实开发 QQ 有时候还是会有点吃力。一台接入开发网,只能用来开发和上公司内网。另一台接入办公网,可以上外网,但是腾讯内部有白名单,非腾讯自家客户端上网也必须设代理,所以有时候就比较尴尬,比如如果某个软件不支持代理就傻了。我曾经想 push 代码到 GitHub,后以失败告终。总部大厦几乎每个地方都有免费 Wi-Fi,所以如果你自带电脑的话上网还是可以比较爽的。
开发环境 Visual Studio 2005,我因为习惯了 Vim,所以都是在 Vim 里敲代码,然后拿 VS 来编译和跑程序。强烈推荐再装上「小番茄」[1],至于我们有没有交钱这个你也懂的。版本控制是 ClearCase(大槽点之一。。。以下简称 CC),CC 绝对是我见过的最逆天、最无敌的软件,安装文件硕大无比,用的时候卡得一逼。
QQ 内部对版本控制系统的使用要求比较严格,当你需要开发一个新需求的时候要先发一封邮件给 CC 管理员(居然有单独的管理员!),让他给你建一个子流(相当于建分支,建分支居然还要申请!)。然后从 CC 服务器上把新建的子流拉到本地,注意,虽然这只是一个分支,但是你需要把整个 QQ 代码都再重新下载一遍!所以一般这种时候你可以去喝杯水看看风景啥的,时间取决于网速,一般 30 分钟至数小时不等。然后你终于开始了「愉快」的开发生活,你会发现每当你要修改一个文件的时候,你需要先 checkout 它(注意跟 Git 的 checkout 没有半毛钱关系),checkout 完之后就只有你能改这个文件,如果刚好有人和你在同一个子流开发,必须等到你 checkin 之后才能 checkout 这个文件。当然如果你等不及别人 checkin,你可以先 hijack 这个文件,改完之后再跟别人的修改合并。写好代码想编译下看看效果,首次编译 QQ 的话耗时巨长无比(而且每次拉了新的子流后都要经历一次),所以你又可以去喝杯水看看风景啥的,时间取决于机器性能,一般 1 小时至数小时不等。并且编译过程中开发机基本处于卡死状态,根本没法用,于是我通常都是吃饭前或者下班回家前干这种事情。
开发完成之后没有 code review,况且要通过 CC 来看更改也极为麻烦。这时需要制作一个安装包给测试人员,打安装包这种事情一般交给编译机,时间 20 分钟左右,最快记录貌似是 8 分钟,当时负责优化性能的同学还拿了奖啥的。测试过程中使用内部系统 TAPD 进行 bug tracking,每个 bug 分高、中、低三个等级,QQ 这边的 QA 对于质量要求很严格,需要同时通过功能测试和性能测试,通常要求是 0 个高单和中单(俗称 0 bug 合入),少量低单是允许的。在经过严格的测试之后就可以合入主流了,使用 CC 的 deliver 功能来完成。但最好是先 rebase 主流(相当于 merge 主流,同样跟 Git 没有半毛钱关系),确保没有问题之后再 deliver。至此你的开发任务已经完成,接下来就是等待版本发布。
QQ 内部有一套成熟的客户端框架,代号 Hummer(蜂鸟),提供了诸如代码解藕、公共库、插件机制、国际化等功能。自研的皮肤引擎,代号 GF(GUI Foundation),用来实现各种界面效果。这两块是作为 QQ 开发者必须要掌握的,同时围绕这两块还开发了一堆小工具,最常用的就是 LogViewer,用来查看日志文件,还有性能工具用来分析代码性能。底层代码和应用层代码是分离的,因此有时在 debug 时会遇到部分代码无法查看的情况。
最后配图一张,原谅写得有点罗嗦。话说自从来了知乎以后,就再也体会不到那种按下 F7 的快感了。
图片来自 http://xkcd.com/303
10:51 更新:
http://impd.tencent.com,QQ 客户端官方技术博客,有兴趣的同学可以订阅。
——
[1] http://www.wholetomato.com
Posted on http://www.zhihu.com/question/20672463/answer/15809516