作为80后的很多人,小时候应该都有看过日本动画片《圣斗士星矢》。我是比较喜欢的,不管雅典娜面对怎么样的死亡威胁,圣斗士们总是第一时间出现,燃烧自己无限可能的小宇宙,也不管对手是实力悬殊的高介圣斗士还是阿波罗这样的神,都无所谓畏惧,勇往直前。这里我不是打算让读者回味儿时动画片那些在我们记忆深处的经典。而是要带领大家去体会一下这样一群人,他们不是疯子,而是普通的百度测试开发工程师,在他们身上读者一定能体会到那种即便身心巨创,也一定要站起来,始终斗志高昂地去完成自己的使命的决心和信念。
我在2014年11初加入了百度,作为一个普通的测试开发工程师,我怀着一种对技术的憧憬开始自己的奋斗。当初还是一个小小T4的简单工程师,加入团队那天起因为是移动端测试开发岗位,起初百度在14年刚刚开始布局移动端业务,在外界看来确实有些慢拍,但是这也从侧面反映出百度的决心,也为日后的“夯实移动基础”奠定了基础。
我所在的团队有个高工叫门神(别名),不知道怎么回事每次换工位的时候,他总是靠柱子第一个,所以我就这样对他做了简称,门神刚毕业1年就在百度直升了2级,属于精英中的精英,能坐定工位纹丝不动,可以12小时以上,大都时候他不在编程,主要工作是组织协调业务,推进工作进度,和排查报警信息。这些工作繁琐耗精力,也需要一定专业技能的人才胜任,后来也成了我的直属上级,转了管理。我和他认识就从经理带我逛了一圈,最后介绍的时候,我俩正式打了照面开始。
当时,整个团队在糯米业务开始做起涉足O2O领域,从团购SDK,到糯米网,再到后来的糯米组件化。整个发展都是大势所趋,我们的竞品就是美团。测试开发的工作本质上是保证产品质量,提高用户体验的一种类型。但是在百度,这个职位所包含的广度与深度,远非外界所看到的那样。不仅仅是业务功能和产品迭代上线需要我们全力以赴,更多的时候我们会通过技术手段来保证整个产品线的质量,测试执行的效率,以及CI自动化能力的成熟度,线上监控等。整个项目链路的全程参与和基础技术能力的沉淀。甚至我们还担负着对竞品的理解和分析,希望能够通过QA的力量提出一些有价值和收益的建议,能够帮助产品经理设计合理的产品功能,这些都是我们为之奋斗的业务基础能力。且不说这些是不是真能带效果,光是这些工作量都是要工程师付出极大的智慧和辛劳。事实最后也证明了通过我们的技术保证,给产品甚至给产品经理带来了更好的idea和用户的极致体验。
在这些技术专项中,就有一项响应时间测试专项,要求APP的启动速度和落地页面能够秒开,尤其是一些高频使用的场景。这些场景直接关系到用户的使用时长,如果在核心场景一个落地页面在一般家庭wifi网络情况下打开需要3秒以上那绝对是对自己产品的一种吐槽,用户流失也是无法估计的,更不用提在市场上的竞争地位了。因此高于竞品同等场景的页面打开响应时间被列入了所有开发项目的重中之重,这项工程的发起便是产品线的最高老大,因此,落实到具体负责人,其中就包含了门神。门神被天天淹没在百度hi消息群中,不是有个项目启动急需QA资源,忙着协调和招聘;就是一个联调项目要求排期上线,前后端,上下游依赖端,接口人都封闭开发;分身无暇,更本没有时间去研究这类专业性的技术。
但是就是在这个时候,上层的高度关注度,以及产品的急待升级的用户体验,让他踌躇满志,原本黝黑的脸比以往更黑,他心事重重地找到了杨弟一个文艺范儿十足的同事。讲了他在hi群被老大点名的无奈,说这个topic要是QA能介入做出成绩来,不仅技术上有提升,就是自己以后在述职晋升道路上也是非常有帮助的。
杨弟听了这些信誓旦旦的承诺,提起mac便在chrome中打入github的网址,开始搜索开源框架和解决方案。两个月之后,他突然从工位站了起来,一股兴奋的劲头从他布满血丝的眼神里面喷涌而出,“我有办法了”。他的声音清脆响亮,引起了我的注意,我走到他的工位上,想看看他是怎么实现解决这个响应时间测试问题的。论在当时的环境下,其实他的方案整体还是比较先进的。
他通过脸书的开源自动化框架,抓取APP关键元素的方式来计算,由于网络传输的耗时,修改了利用在指令触达到APP那一刻起作为起始时间,再计算他在APP中打开页面的关键元素出现的截止时间的差值来计算。这里也会存在关键元素轮巡多次的耗时不准的情况,他做了一次优化采用图片和Button作为关键元素,降低等待时间,轮巡次数缩减到一次。由于这个方案可以适合Android和iOS端使用,因而在多次实验中数据稳定也接近APP内的打点时间,而且数据样本也是可观。
因而他的这个响应时间测试方案便成了鼻祖,对后来者在此基础上的不断完善和迭代,提供了很大的参考意义。虽然后期糯米APP的形态发生了变革,以及对资源的利用率的严苛要求下,这类方案存在一些资源损耗,但是总体的自动化驱动始终是基于相同内容进行的,我也在他的这个驱动基础上,加了一套截帧的能力和图片相识度对比能力的计算方案,成为日后的App响应时间测试标准方案。
杨弟,平时话不多,但是要是谈到感兴趣的话题,他便说个不停,尤其喜欢说,“不是的不是的”,个人主见很多,喜欢搞一些新鲜的事情,有品味的生活。我们圣诞节那天团队有个习俗,在一个空间内,我们会提前准备一些圣诞礼物,主要是自己挑选的礼品包装在盒子里随机互送,意义在于一年的辛苦合作和奋斗,始终不抛弃不放弃。最后,投票决定谁送的礼物最有代表意义。他选择的礼物通常是实用而美观的,总是产生很多投票。他的态度很明确,工作为了美好的生活。
做这个topic的的确确花费了他很多精力,因为百度的QA不仅需要在业务的质量上做到极致,这是本质工作也是责无旁贷份内之事,更需要在自己的职场发展中具有创新的精神,和克服困难的狼性。很多时候,我见到他白天工作,既要需求评审又要和Rd讨论技术细节,甚至还要code review。通常要忙到晚上9点之后,在一层楼里,很多工位差不多都空了的时候,他开始整理了自己繁乱的思绪,集中精神挑灯专研。他有个很自律的内容,就是不管自己多么困咖啡因等之类的东西绝不能碰,也不喝碳酸饮料。所以这个,能够保持他精力旺盛的法宝就是,中午趴在工位小憩一会,或者到睡眠室休息。这就导致他每过一年身体发胖,虽然他也经常运动,毕竟时间不够,因为中午餐后的休息时间太短,挤在一起是最容易让自己发胖了。
有几次大概闭关修炼到快要紧急关头,因为晚上要发布iOS的App新版本,很多琐碎的事情就落到了他的身上。App的签名校验,小流量开关核对,渠道线上验证,iOS测试质量报告等等,这些事情由于没有及时有备份的同事接手(互联网公司不管是一线的还是二线的,最缺的永远是人力),基本每次都是杨弟亲力亲为。门神这个时候也是非常繁忙,一些待确认的Bug list需要整理,以及整体风险评估,这个时候就需要拉上杨弟和Android端的QA负责人一起去参与,有可能就是历时到次日的会议了。
很多次糯米高歌猛进的时期,在大家疲惫地完成产品线迭代上线的凌晨,杨弟还在默默地记得门神的嘱托,也是他课题的最关键时期,一个人还会多留一会儿。甚至周末,其实团队中的很多人都不知道,他都是抽一天来公司继续他手头的紧急任务的。那个时候我们也知道在他身上发生另一件的事情,他和自己大学认识很久的女友分手了,具体事情我不太了解,我知道他内心是极度地悲伤的,但是也许就是这样的事情,工作本身更促使他对时间的珍惜和对生活的期待,也将百度的狼性文化发扬到极致,既然事情已经由自己开始了,那么终点也必须由自己去结束。而他最终也用实际行动证明了自己的使命感,就如下图晚霞一样耀眼和光芒万丈。
2017年的一个非常炎热的夏天,我和兆生一同从上海赶往北京科技园,K5大楼里永远是工位一座难求,找了很久也不见一个空位,无奈我们找了一个没人的会议室,开始紧急的实行“星驰计划”。这个项目是由我们这边的高工亮神发起的,他base在百度APP主航道产品线中,深入到业务线内,甚至临时把工位也搬了过去。亮神,人略显胖一点,感觉稳重和厚实,另外代码能力也非常厉害,公司有个CI评级平台-泰坦,也是由他一手操刀做起来的,支持整个公司的CI成熟度考评。
现在他接到总监的亲自命令,要求将百度搜索公司的APPCI化的能力输出到手百,让手百能够达到周发版的要求。APPCI的能力包括很多,从APP自动化编译打包,安装到远程设备,代码安全漏洞扫描,到APP性能自动化评测和发布等等都被纳入到了这个CI流程中,指标要求全部100%自动化实现。
亮神,临危受命,也是千头万绪,因为主航道产品的首要的任务就是信息流,要将信息流的知名度打响,不仅在APP的版本迭代过程中有多彩的功能,更需要有迭代的速度,甚至能够超越竞品。
他同时找了最好的搭档,现在的TC主席,连夜飞去了上海,拉拢了一拨人,其中鲁班的一帮开发者也就是我们,也在里面。亮神把他的想法,和一些最初的方案同TC主席,还有总监说了,然后各自平台负责人分担不同的功能模块,介绍如何在有限的时间和资源下去完成交代的任务。
我们被要求实现跨版本代码覆盖率,APP端监控以及性能自动化的需求。由于糯米业务线整体的战略方向调整从主航道转至到护城河。因而,总监也希望我们能够将积累的这些能力和经验一起打包到手百,希望有价值的内容应该最大化体现和延续。我在鲁班内部会议中和大家讨论了一下,现有资源下我们能否去做这三件事情,并让大家各抒己见,将能做的内容,可以提一个简要的大致实现方向。这样我结合了现有技术能力和一些提案,在正式会上陈述了我的方案,并得到了TC主席和亮神的认同。于是乎就有了刚才说的和兆生去了北京,扎到了手百现场的事情。
兆生是一个憨厚,话不多,诚恳得有些老实巴交,为人低调,脾气好到爆的人;同时也是一个技术控,耐操,抗骂的人。当然这么说感觉有点讽刺,其实像我们这样一些人都有被被狠狠地骂过,批评过的经历,不管过往是怎么样的狼狈不堪,我们总能在别人的冷嘲热讽之后,继续挺起腰板,迎头赶上的能力。很多时候我们做事情的目的是非常的专注和单纯,也或许就是这样的品性,让我们觉得没有必要为着别人的目光而或喜或悲,我们内心始终保持以激昂不灭的热情。经过多少次的项目测试开发与合作,尽管我们没有经验,犯了错,捅了篓子。我们始终要抗得起骂,经得起大浪淘沙,用结果证明我们的错就是未来的成功。
我想了很久,决定兵分三路。起先,由我带头做起APP端监控,先打头阵。这块实现起来时间短,见效快,能够短时间内获取业务方的信任,有了这个基础,相信为其他的两块功能的开发提供更多的宝贵时间,因为不仅仅是我们可以做,其他团队也有实力可以做,而且很有可能比我们做的更好,只是现在给到了我们这样的机会,所以快速争取信任感是这个唯一的机会。再由其他两块功能单纯地从糯米这里转移过去直接使用对接是不行的,有些内容需要定制化开发,况且跨版本代码覆盖率又是一个从来没有的一个新内容。这就对我们提出了挑战。我让兆生去和百度iOS端的接口人对接需求。让槟榔(湖北小伙上班最爱嚼槟榔)去搞创新的模块,他最爱玩Google的算法游戏而且很厉害,具体啥游戏我是out了没听过。
我就按照这个想法准备开始部署实施了。一开始发起了一个大的会议,大抵把鲁班的角色,现有的架构功能,解决的案例和业务线的同学们仔细的讲了一遍,从他们的眼神中我看到了一些希望,对于主航道产品线来说,繁重的业务迭代已经压的他们气喘吁吁,要是想实现鲁班这块移动端的通用解决方案,相信短时间内完全建设还是比较耗时的。会上,业务线的同学很积极的提出一些业务的痛点,诸如:iOS的性能数据自动收集实现原理;不同分支代码的覆盖率怎么合并去重得到一个整体覆盖率;APP线上视频播放白屏情况很多,监控怎么实现等等问题。我和兆生还有亮神给出了我们的看法和意见,由于做足了功课,这些问题都很好的解答。初步合作意向已经达成,后面就是给出开发排期了。
晚上12点我们回到了酒店,后厂村不仅交通拥堵,就是打车也非常的困难,那边的北京滴滴司机专会挑单。因而为能被抢到单子,都是直接打表来接。而且还不容易被抢。在酒店里,我们又在hi上详细过了一下今天的需求,理了理方案的可行性,以及可能存在的问题和todo事项。一个回车键把准备好的邮件连同附件发给了相关人,此刻已经凌晨1:30分了。
在K5大楼的工位上我和兆生一直在讨论iOS端的性能数据自动化收集评测框架的搭建,从现有的框架中剥离了一些内容,交付兆生处理,希望他能马上给个demo出来,预计这两天可以完成。但是,由于兆生这些天又有自己的业务需求上线,搞得焦头烂额,心急如焚。百度APP对接人那边又急着催我们能把设备和环境搭建完成,她的时间不是很充裕,因为马上他们就要被要求封闭测试开发,估计到时一时半会儿不会找到他们的影子。心里更是堵的慌。
我知道他对我推着赶路,心里是不舒服的,虽然,他还是任劳任怨加班加点,扎在业务线上,但是从hi上的沟通中我已经看到端倪,他有怨气了。其实,我也在远程和上海的同事-小芳,还有一个外包同学沟通很多端监控的设备部署,以及一些接口调整的事情,有时忙得中午饭都没时间吃。甚至,在远程沟通中一度因为消息没有得及时反馈而怪责了他们,那时自我感觉有了些急躁和不安,我深感要是端监控没有拿下他们的信任,后面我们的机会就有被人抢走的风险,而我们的所有努力也终将没有成果。想到这里,我便内心忐忑,火急火燎地一边催着兆生赶紧交付一个demo,另一边还得亲自部署很多端监控的事情,不免在沟通的语气上表现的有些急功近利了些,这或许让兆生心里感觉了压力。
其实,对于百度app业务线中跨版本代码覆盖率的统计才是需要高优完成的,恰恰这个也是现有平台一下子不能满足的,需要槟榔,调研和深入持续开发才能完成。所以我才考虑到将APP的端监控提到最高优的事情来做,一来希望最明显的效果能够及时出现获取业务线的信任,二来也是为团队开发其他两块内容争取时间。为了能把这件事情做好,我和小芳,以及思虑和刘铮(鲁班的其他组员)开始找到资源池调度平台的负责人对接鲁班,希望借助他们的强大的资源调度能力,能将鲁班现有的机器群和端监控能力发挥起来。
合作非常顺利,短时间内我们在手百APP信息流上的点击视播放无效的问题监控,初战成功,得到了手百业务线老大的极度认可,邮件的感谢信中也表露得对我们团队的充分信任。这个及时信也为苦战的团队打了鸡血,尤其是兆生,对我之前的推赶模式和一些严格的要求有了谅解。我们恢复了之前的默契合作,之后端监控在白屏,黑屏,错误页面的监控以及后期对接了图像自动处理深度学习能力使得整个APP端监控走在了行业的领先地位。
端监控的顺利产生的辐射效应,在搜索公司内慢慢的拓开,不仅跨版本代码覆盖率系统的完成,iOS性能自动化评测的能力也输出到了其他13个业务线,后面为产生的小程序测试解决方案,和小程序单元测试解决方案提前打下了成功的种子。这些成功,都是在很多次徘徊在挣扎的边缘下,以及极度的自律和严格的要求下推进业务按照鲁班的测试工程能力流程化标准去进行大量沟通了解和说明来完成的。
我很多次回忆起和同伴不管是酷暑还是极度的寒冷,在一个必要的里程节点下,一路飞奔到北京,对方的业务线的接口人有高工和技术经理,有RD和FE,有产品经理和新员工,我们都一一详细的把我们的想法和意见输出到他们,并使得他们努力的接受我们的这个初衷。我们没有希望通过强大我们自己来接管业务线的基础建设,而是始终站在业务线的视角通过合作,技术输出来达到双赢的目的。
这些想法和意见不是那么容易灌输下去的,除了要有过硬的技术核心能力和稳定性的系统平台为支撑外,更重要的还是影响力和信任,尤其是信任,短时间内或者没有好的契机难以将我们的实力尽显,我们很多次就是和业务线之间的初次沟通上面没有好的信任基础,比如像百度网盘,而失之交臂。但是,这并不要紧,我们很快就会找一些内部高工,在技术上面很多时候是容易打成一片的,这些高工对我们还是比较认可的,尤其我们做出的主航道成功案例,这样去推行还是较为容易,最后再由高工把这些想法传递到业务线,那么事情就比较顺畅一些了。
当部门开始重新整合,内部弥漫着一些不太好的想法,这个时候鲁班的角色定位也开始变得模糊,此刻大家都意识到鲁班的生存危机,门神虽然对鲁班依然抱有很大的希望,也在过去的时光中给予了很大的支持,协同我们这些人去推进业务的拓展与合作,使得鲁班一时风生水起。他也不断地同上级沟通希望能够将鲁班人力资源更加合理的分配。但是这次部门的重整在整个搜索公司内比较大,也就导致了一部分人开始动摇了。
这里就有开始说的杨弟,去了杭州定居;兆生,转了部门去了展示广告组;思虑,鲁班的后端核心人员,一个做事非常靠谱,耐力十足的女同事,多少次鲁班后端重构都是她一手负责,尤其后期鲁班推进手百上业务的拓展,基本都是她独立开发完成,去了创业公司。标哥,鲁班的前端御用FE,标哥是一个马拉松爱好者,坚持锻炼和喜欢远行,使得他具有阳光般的灿烂笑容。耀明,湖南人,一身正气敢作敢为,技术能力很强的高工,负责鲁班的对外和EP合作的事情,去了当下人工智能很火的创业公司。这些人的相继离去,使得我几个晚上都没有好好休息过,当他们看到这篇文章的时候,我相信,他们应该会体会我当时的痛苦和无助。
当一段时间过去后,我慢慢的协调到了一些内部资源,也从这个临时的打击中恢复了过来,决定努力培养能够顶替离开人的那些工作--菁小妹,伟金和文武就这样被物色了出来,在他们身上我找到之前离去那些人的身影,仿佛又看到了他们在我身边一样,充满着技术人的那种微笑和自信。他们的成长是非常迅速的,不但继承了工匠的精益求进的精神,也具备不达目的绝不罢休的决心,在之后的成长中他们变得开始越来越能够独立担当。
我们在一起又像圣斗士一样,变得强大和团结。伟金是临时从门神负责的广告组拉过来支持的,负责前端开发,对后面小程序发布审核开发设计的起到决定性帮助;菁妹一开始毕业就在鲁班负责一些接口的开发,虽然不是熟练,但是分配的内容都能很完美的完成,虽然她同时还全力负责繁杂的糯米端上的业务。文武,主要负责iOS端的响应时间自动化开发和iOS端的分级发布,属于除兆生外,对iOS有比较好的认识和有经验的人才。就这样,鲁班又开始了生机盎然的发展,使得我们每个人都能感觉到自己存在的价值。我们来往于北京和上海,不是奔波在路上,就是在会议室内和业务线讨论实际的业务需求,将热情与专注留在了我们为之奋斗的理想和初衷之内。
团队和项目取名为-鲁班,其寓意容易显而易见,工欲善其事,必先利其器。专注于工匠的精神,不为名,亦不为利,只为实事。在百度,这是由为突出的,加上狼性文化将这个精神发挥的更为淋漓尽致,使得我们永远像圣斗士里面的青铜战士一样,不为艰难,不为神权,去诠释我们的思想和初衷。