6.1 故事分享:从测试工程师成长为敏捷测试工程师

从1995年IBM中国开发中心成立到我进入公司的2004年的这段时间,公司主要以接外国成熟产品的测试项目为主,那时候除了少之又少的几个团队在做些边角料的开发工作外,其他团队几乎都在做测试。我们招募了非常优秀的人,却让他们做着不怎么有技术含量的工作,但是,大家都很敬业,每到年终考核大家都攒了一些合作团队的某某开发大牛、某某资深架构师对中国测试团队工作成绩的表彰。新项目一个接一个地在中国落地开花,开发工程师人数急速膨胀,不断有管理职位、高级技术岗位空缺。随着IBM对中国市场和研发的投资兴趣的激增,那时最开心的事情就是去美国出差一两个月做技术交接,不但可以晒晒从奥特莱斯(outlets)买到的打折奢侈品,还能很快迈入更大的发展空间和平台。我们那些年的茶话会的主题通常是到国外出差或是旅行的各种见闻,谁谁谁又要去了,谁谁谁快回来了。而我们的桌上总是不断摆满各国巧克力或者小纪念品,记得有个美女秘书的工位上总有那么多的各国玩偶和各色高级巧克力包装盒,很是令人羡慕。

我感激我的第一任老板,除了把我招进来给了我丰厚的起薪外,还给了我成长的空间,入职一年后便计划送我去美国两个月接手新的工作。我的部门在当时叫做普适计算,其实做的就是IBM软件部的“尖峰”项目,我们也是最早把控开发的团队之一,记得我们手上总有各种最新的手机设备,我们使用SMF技术写各种Bundle,并在模拟和真实手机平台上跑。而我们做的产品是公司的雏形项目,通常非常快地通知你要开始,也会非常快地通知你这个项目的生命周期到此为止,或者将要移交给另外一个部门的团队。我在这个部门的日子其实并不算好,不停地换项目,有时候随着项目的迁移还要换老板,有时来不及换老板,就直接借调出去帮忙做项目。

我也是从这个时候起特别崇拜技术好的前辈,特别是我的师傅,从华为跳槽过来的资深程序员,他带着团队大展拳脚,总能搞定别人以为攻克不了的问题。当他走向领奖台领取IBM中国区第一个突出技术贡献奖(OTAA)时,我不禁感动万分。我真心希望认真跟他学习技术,沾染些逢题必解的“好运气”。可是,试用期过后,师傅建议我做测试,原因是他觉得我更适合。

半年后,我不但掌握了产品测试的主要技能,还做了产品图形化测试的自动化测试负责人。因此,我的工作满满当当,经常需要写脚本、写代码。因为对技术的“憧憬”,我抓住一切机会学习新知识、新技能,并乐此不疲,以至于老板几次问我想走技术路线还是管理路线的时候,我都执意说:“技术路线!”

那时候,因为开发中心高调扩充实力和规模,管理路线确实发展比较快速。我记得当时真的后悔过,为什么不选择做管理,比起技术路线看似简单、升迁也快得多。而后来我客观地意识到,我若是没有当时的一股子傻劲,做各种苦活累活,怕是不会有今天面对困难的自信。在经历了这么多项目和事情的考验后,在信念深处,我相信任何技术问题没有得到解决只是时间的问题,总有一种针对性的解决方案可以解决它。

那时值得骄傲的一件事就是领导常常表扬我,说我负责的模块他是不用操心的,而工作中比较有成就感的是总可以花费工作时间学习新技术,无论是产品相关的移动平台开发技术、OSGI、SMF即插即用的概念,还是2层或者3层的基于RFT的自动化测试框架等,或者其他几个我现在已想不起名字的新技术。每每我能够使用一种技术成功调通一个“Hello World!”或使用新技术改进了我原有的工作成果时,我那略微自恋的情绪就开始膨胀了。

自从进入公司开始,大小培训不断,而每次能够得到新培训机会会让我变得非常开心。IBM的培训课都是昂贵的而且宝贵的,不仅课程含金量很高,对于我们这些每天埋头苦干的人来说,这是一个帮助我们“抬头看路”的机会。除了在培训中结识和我一样勤奋但做完全不一样事情的朋友外,我特别喜欢的事情就是和培训课上的特邀嘉宾进行“面对面”的交流。在一次“测试基础”的课堂上,我很有幸结识了我的偶像Karan,他是软件部QSE技术社区负责测试的Lead。通过Karan我认识到了QSE自动化测试社区、测试社区和质量社区的Lead和追随他们的一群优秀的人。

记得初次见到Brent和Karan时,因为他们年纪很大了,也很胖,给我留下的是典型的美国式肥胖症的印象。但是,听着听着,你的思想就会被他们睿智的眼神和富有激情的腔调所贯穿,那么让人敬畏而又羡慕。美国人喜欢活跃的课堂,因为我较为外向,加上英语还不错,所以很快就和Brent、Karan混熟了。课堂上,我总是积极地响应、做游戏或者回答问题。尽管学员有时会出错,但是他们都不会难为学员,相反会让你觉得不论任何观点都是有价值且受尊重的。

如果凑巧说到某个非常有价值的想法,与大师之间的沟通就不仅限于课堂了,他们都会很主动地给你写邮件和你深入探讨。有时候,我们会一起署名文章发表在QSE的社区,就这样,我很荣幸地加入了第一个QSE的社区——测试与自动化,我伴随社区多年,一直积极参与社区的建设。慢慢地,我也就融入了QSE这个圈子,这才发现我们平时努力思考的问题也是很多人努力钻研的,你没有想过的和想不明白的问题,有许多人已经做得很成功,早就有了可以照搬过来的思路和方法。通过在社区里不断积极分享和虚心学习,我渐渐觉得自己的价值在社区里被认可了。之后,我连续发表了多篇有关测试自动化、质量管理、度量以及开发过程的文章。

经过大师们的调教,我工作中的一些关键问题也迎刃而解。我越来越感到,无论是改进方法后的工作效率提升、发现更多的问题,还是原来看似平淡的工作都有了新的非凡意义,都让我兴奋不已。因为每每QSE社区希望大力宣传一种新方法、新技术时,他们都愿意找我这个爱说“实话”和“有观点”的人提供意见;而当我们的想法被充分尊重,我们也会同样尊重其他人。我组织了国内志同道合的同事参与到小范围的社区活动中,我们更为贴近一线的思考方式和实践成果为QSE社区继续添砖加瓦,我也举荐了不少优秀的同事参与到QSE的其他社区活动和团队中,例如开发社区、TDD社区和质量社区。

也许正是因为结识了国内外这些不错的朋友,他们不断给我传递正能量,所以至今我都没有离开IBM。我在这里经历过的磨练和辛苦都没有白白浪费,无论是愉快的还是悲伤的回忆我都会保存下来与人分享,我知道没有过去就没有未来。

虽然我在社区中的影响力和知名度有了显著提升,但我不得不承认这些并没有给我带来丰厚的物质回报,薪水、奖金这回事毕竟还只是取决于你的顶头上司。相反,有时超过别人期望的知名度反而成为我们对立面的放大镜,会更加暴露自己的短板,所以,如果你希望和我一样扩大影响力,请同时保持低调。

上司交给我的工作无论多艰苦、多有难度,我都理解为对我的关照和我必经的磨练。做事和论坛“炒概念”比较起来更需要“务实”,而我也确实静下心来做到了老老实实做人,踏踏实实做事,扎扎实实做工作(必须感谢我的母校西北工业大学对我的教育)。我那时候的状态现在看来仿佛就是怀揣梦想、刻苦用功的一段日子,在心中为自己画了一个大饼,直到很多年后这个饼才得以实现;而在那个青涩年龄,则显得略微“太有想法”、“太刻苦”。

不过我的付出还是有回报的,在IBM国际技术社区里我展露头角,同时,我成为了中国区测试、自动化测试的专家,领导过整个开发中心做自动化测试的研究,后来成为敏捷社区中有IBM认证的Scrum Fellow和社区领导团队中国区代表。

在IBM国际技术社区中遇到的同事,总是在我需要的时候给我带来帮助和希望。在这个社区里遇到的令人兴奋的事情就是能够和许多思想犀利、卓有成绩的人做深入的探讨。这个过程让我体会到,在公司这个以商务为首的大环境下,仍然能够坚持追求真理和懂得顺势而生的大智慧。

很多人历经二三十年甚至更久的时光,几经沉浮,洗尽铅华,最后终成大器;所谓读万卷书不如行万里路,行万里路不如和有智慧的人聊上一聊。我真心感谢我的导师和朋友们,在我最初几年的IBM生涯中点醒我、帮助我,以至于没有因为浮躁和焦虑离开这家公司,在这里我学习智慧而不仅仅是知识和技能。

我在从事测试工作时,有一次,我所在的部门出现了严重的问题,而我真心烦透了频繁的重组,领导不管项目了,但是各种杂事不少,还碰上了不喜欢的“独裁型”老板,而项目却依然一个接一个地忙。我记得名下曾经挂靠过108个实验室设备,我们整个团队每天都在封闭的实验室中,在一堆堆的仪器间穿梭。我给自己充实更多、更重的工作来防止大脑去思考那些烦透的事情,而设备天线发出的哔哔声让心中的那股凄凉不时刺痛着我。

我在我希望那样的日子早些结束,也认识到必须主动求变才是尽头。那一年是我的测试生涯中最难捱的一年,某天我终于因为过重的思虑和一点风寒刺激生病了,一躺下就是两个星期高烧和喉痛不止。当我重新回到团队上岗时,便毫不犹豫地离开了这个团队。

在做管理者之前,技术是我唯一可用、可控的方式,以减少低头做手动测试的时间。而我最纠结的是,无论技术如何改进似乎都达不到100%的自动化,而即使实现了自动化,一些测试环境的异常依然会使测试的可靠性降低。

但是当我经过一番挣扎而重获新生之时,我非常清楚自己不愿意成为经理的窥视下用冰冷的手指拍打键盘的僵尸,也不愿意成为因为某些人推卸责任的一句“看,我们需要更多的测试”而经常加班的员工。我希望成为决策“为何要做”的人。

自此,我开始理解测试的价值体系,我的价值观又发生了一些变化,那时我做了3年测试,几乎已经做过各种类型的测试,经验丰富、技术过关,但现在回想起来,当时的我还只是在搬砖,只是山脚下徘徊的登山者。

一次,社区的Brent老兄推荐了一篇发表于《计算机世界》的文章(James Batch,A Framework for Good Enough Testing,IEEE computer society,1998),读完这篇文章,我狠狠地拯救了自己一把,为什么我没有早点意识到呢?这篇文章主要以“足够好而且有限的测试”来挑战“无限制测试”价值体系,作者并没有直接给出如何做到“足够好而且有限的测试”,或如何判断我们当前的测试已经到达“足够且刚刚够”,但是却从定义上进行了解释和回答:“足够好而且有限的测试指的是我们能对所测对象提供足够的质量评估,以合理的投入,帮助决策团队做出明智和及时的决策。”

于是,我这几年的历程所形成的对于测试的情感不知不觉地移情给了“自动化测试”。自动化测试不仅仅解放了不断重复劳作的我们,更重要的是,自动化测试能够更好地解决“配置敏感的”、“容易因为人为因素造成返工的”的测试过程,更容易地捕获First Error并提供充分的证据,更有效地减少人工交互。