第五年:
有人担心,写到后面会不会变太监了。其实越往后面就真的越难写,一方面是那些人就在你旁边,你要顾及他们的感受;而那些事,也才刚刚过去或者正在进行中,身在其中很难有个客观的描述。不过既然都写了这么多,那就继续写下去吧,后面的事情比较近,也不太有名,估计感兴趣的人不多了。
我曾经写过一篇博文,是对于“小黑屋”的描述,淘宝有个传统,牛叉的项目都要在小黑屋中进行,当年我们做[我的淘宝]和[招财进宝]的时候,有人羡慕我被关在一个小黑屋里面。到了08年的时候,我开始羡慕别的关在小黑屋里面的人了。这样的人有两拨,一拨人做了传说中的[淘宝商城],一拨人做了传说中的[淘宝系统3.0]。做淘宝商城的那拨人暂且不说,淘宝主站系统在那个时候经历了一次翻天覆地的变化。
因为发展实在太快,淘宝的系统一直处于变化之中,但大的版本变迁,大概有两次,一次是把最初那个LAMP架构的系统迁移到java平台上,一次是把集中的java系统拆分成多层的分布式系统。从php到java在04年就迁移完毕了,我去的时候正赶上迁移完成后那帮sun的工程师开始做支付宝,所以我错过了。从集中的java平台拆分成多层的分布式系统的时候,我在做[淘宝旅行],又错过了。
我一直相信像[淘宝旅行]这样的垂直市场才是最好的业务模式,不可能所有的商品用同一种展示方式,也不可能所有的交易用同一个流程。但在主站拆分之前,要做垂直市场只能重新做一个系统,拆分之后,只需要在业务逻辑层重组一下就可以了。所以这次网站的拆分,不仅撑住了不断上涨的流量,也支持了后续几年新的业务的发展。在拆分的过程中有很多技术的创新,我们从使用技术到了创造技术的阶段。记得有一次我们跟腾讯的工程师交流,大家提起了那个时候各自做了一个文件存储系统,仿照GFS,淘宝做了一个TFS(taobao file system),腾讯做了一个TFS(tencent file system),在GFS的理论基础上各自有不同的创新。除此之外还有Key-value的缓存系统、消息中间件、java中间件、海量数据的存储和计算等等。一个系统发展到10亿流量的级别,你不得不做技术创新。
这些我都错过了。
但[淘宝旅行]最初两年的发展非常缓慢,商城在做业务的创新,主站在做技术的创新,我们这个团队游离于商城和淘宝主站之外。这个时候,有人来挖我了。
我总是容易被女人说动,尤其是漂亮的女人,而郭芙就是这样的女人。她问我淘宝主站拆分之后,对测试有什么挑战?我说系统分层多了,出错的几率大了,但功能测试无法探测到下层。她问有没有办法深入到代码级别来测试?我说有但很难做。她说难才找你的嘛,有什么办法来作?我说做单元测试,但单元测试最好让工程师自己做,我们做再往上一层接口的测试。然后她说英雄所见略同,我已经有几个人在做了,你愿不愿意一起把这事做大?这时候发现她挖了一个坑给我跳。(^_^) 不过这是淘宝项目开发中的一项很大的变化,做好的话将对系统的稳定性有很大保障,而我也觉得每天在那里卖机票有点乏味了,那就搞点没人搞过的事情吧。
我做过开发,做过PM,兼职做过PD,还像SQA一样搞过几个流程,在08年底,我又开始了测试工程师的生涯。进到测试团队之后我发现以前对测试的认识都太肤浅了,尤其是淘宝的测试团队,其测试技能和测试方法是业内顶尖的,我要做的就是招募一个能写java代码的有测试思路的团队,但后来发现没有这样的人。于是招募能写代码的,然后给他们培训测试方法,另外也吸收能做测试的,给他们培训写代码的技能。在2009年的上半年,我大半的精力都放在了招人和培养人上面,团队从4个人增加到19个。我记得跟铁花一起做接口测试工程师的培训,有个外号叫老鸨的,给我们取了个名字——“花柳组合”。
接口测试的思路很简单,就是用测试代码来验证系统代码的逻辑是否正确。但做起来很困难,最大的困难就是被测代码太“拥抱变化”了,三天两头的变,测试代码经常会失效;另外一个问题就是要验证一个业务逻辑,也许要用10倍的测试代码才能覆盖,所以这事儿也是一个体力活。我们发现系统里面越往下层,变动越小,逻辑越简单,于是我们就从最底层的IC/TC/UIC这些开始测试。测试代码写完之后放入持续集成的环境中,一旦被测代码提交SVN,测试代码就回归一遍,把错误信息发布出来。09年是这个团队异常艰难的一年,我们把最底下一层的代码都做了接口测试,有些还有性能的测试。我记得做UIC接口测试的时候,模拟了10亿以上的请求量,结果发现了JDK里面的bug,后来提交给了sun。做这些事情的过程中我们也对常用的测试方法做了一个抽象,弄了一个测试的框架,写了一本《接口测试白皮书》。
我跟郭芙说既然我们做了这么多事情,有这样的实力,就可以高调一点,向外传播我们的影响力,于是我们提出了一个愿景:“做测试的行业标准”。她任命我们“花柳组合”一方面去维护qa.taobao.com这个博客,一方面对内开展大量的学习和培训,我们叫它“3T交流会”(taobao test technology 或者 taobao test team 或者 taobao test training 都行)。
在测试团队做的很开心,也有机会跟更多可爱的女孩子共事。但从很多人的眼光来看,一个开发的人员去做测试好像有点奇怪,我也常常思索自己这么跳来跳去到底好不好。直到前面一段时间,网上流行3种青年,我也把工程师大致分了一下类别:普通工程师跟着业务跑,来啥需求做啥事;文艺工程师专注于自己的领域,研究的非常精深;2B工程师跳来跳去,啥都干,啥都浅尝辄止;还有一种工程师叫牛B工程师,啥都能干,啥都精通(这种人在工程师心中叫“神”)。而我应该属于第三种,不过我幸运的是,淘宝里面机会太多了,我做的都是自己喜欢的事情。
08年的年底,我被提升到了M1.没有看错,当时从P6到M1是升级了,悲剧的是过了一年之后,公司更加重视专业能力,M1==P6 了。
也许是看我在测试团队把培训做的风生水起,09年底的时候,又有人来找我了。