最近公司有较大变动,所以打算找新的工作机会,把自己封了两年多的简历又开放出来刷了刷。
恰好碰到了一个做自动化测试的大学校友,建议我来这里看看有没有好的岗位,突然想起来自己是有个账号的。
我不是那种很勤快的人,所以从来也没有什么博客记录,也没有发表过什么感想。昨天偶然看到思寒的那篇 2016 年总结感想,觉得可以说点什么,就写下这篇记录,当做我自己对自己经历的一个回顾和分享吧!不知道是否能给测试入行的新盆友一些帮助和启发。
一、从设备维修工到开发的转行
05 年毕业,校招进了富士康做电气设备维护,就是生产设备故障处理和保养的。三班倒,白班转中班,中班转夜班,夜班又转白班,不累但是钱少没未来。虽然也做的不错,领导想提拔我当维修组长,但没太多钱就没什么特别的兴趣。当时每个月固定加两天班,税后拿下来两千五左右还包吃住,由于从小家里很穷,当时觉得能存钱真好。
但是到了 07 年的时候就开始心里不稳定了,一是股市疯涨,让我看到了我那点钱还不够塞牙缝;二是当时听说老家 (湖南郴州) 的房价涨到 1600 了,哎呀我操,我 05 年毕业的时候上网查的房价才八九百呀,心开始慌了;三是听说某某同学混的多好多好了,做个 web 开发打下手也可以随便拿三千多,做个嵌入式开发可以拿五六千。
我开始拿起我扔下了快两年的 C 语言/C++ 的书,把里面的知识点全部复习一遍,管它懂得不懂的,全部抄下来背,然后慢慢体会那些不理解的逻辑。(我不是计算机专业,是测控技术,所以 C++ 是自学的)。当时想找单片机开发的工作,但是一般公司听我没经验,都不要我,有一个勉强同意的面试负责人问我:“没经验,800 块干不干?” 哎,我想想我读书时的借债还没还完呢,还是算了。这样一直没找到开发相关的工作,但是我还是每隔一两个月就会把我抄下来的 C++ 笔记全部背一遍,直到我花了五千多块钱去广州一个培训机构做嵌入式 ARM 开发课程培训。
培训了将近三个月,每个工作日都上课,周六自习,周日休息。我发现除了老师演示的那几个应用开发之外,其他所有的逻辑我竟然全部听懂了,老师还叫我上台给其他学生讲知识点。信心从那个时候开始有点起来了,但是还缺一个门槛,这个门槛就是要培训机构推荐我到一些企业工作。我想我花了五千多一大半就是为了这个门槛吧,08 年经济危机,我想以我这样没有实际开发经验的人来讲,自己出去找工作确实很难的,无论我说得再漂亮,别人也不信。
二、从开发到测试
通过培训机构搭桥面试后到珠海一家做监控设备的企业工作,名字就不说了,公司很小。领导也知道我是培训出来的,钱也给的挺少,不到三千,安排我干一些不重要的杂活。我个人的抽象思维相对还是比较强,虽然领导和同事也不教我什么东西,上层的一些东西我都可以自己摸索出来。而且我的习惯是先从头到尾理清功能的逻辑思路,再写代码,所以工作效率很高;一般情况下一个星期其实可以闲两天,但是我也不能跟领导说,我自己把空闲的时间就看源代码学习。
小企业不好的地方就是,老员工喜欢保留技术,有时候他宁愿帮你把问题直接修复也不会告诉你什么原因和什么逻辑。学到的一些东西,大多是自己学的,领导只会安排任务。在这家公司呆了一年多点,除了食堂的饭菜超级难吃以外,我也不太记得里面有多少事情了。就这样,觉得想要更多的薪水,我直接辞职来了深圳;毕竟,我的集体户口还在深圳富士康啊!我还要赔富士康 5000 块钱的违约金,每年 10% 上涨,算算已经欠了六七千了。(当然后来国家政策改了,不允许公司收离职的违约金,我 11 年去把户口从富士康那里拿出来的时候没有赔钱)
裸辞的时候是 2009 年 12 月份,找到在深圳宝安工作的大学室友,本来想在他那里借宿省点钱的;没想到他和他女朋友已经同居了,我只好自己在宝安租了个单间下来,网上投简历。中间经历了将近一个月的时间,没事室友就会叫我去他家吃饭,和我一起打打桌球,玩玩游戏。一个月之后,海辉软件打电话叫我去面试,因为当时对 IT 行业不太懂,也不知道什么是外包,就糊里糊涂地去了。当然说是叫我去面试开发,其实就是自动化测试,招聘负责人忽悠我的。就是这个机缘巧合之下,我走上了测试这条道路。
这里有个小插曲,当时和我一起去面试的一个哥们,跟我说他最少要 7K,少了不去,建议我少于 7K 也不去。但我心里想的是,哇要是有六千,工资岂不是翻倍了,原来深圳搞 IT 得工资那么高!所以后来给我开 6K 的时候,我就去了。当然面试时要面试代码编写的,主要是 C 语言基础,我基本上都答题了,好像是整了有八九十分吧。
三、外包到华为的测试工作
不得不说,2010 年那个时候的外包行情,确实是红红火火。那个时候的海辉还没有合并成文思海辉,华为也没有投资中软国际和软通动力。华为对外包的活动经费什么的也还是挺大度,好东西也经常有外包员工的份,不会觉得特别没有归属感。我 13 年离开外包那时候就完全不一样了,特别没有归属感,文思海辉在华为的外包份额一点点都被转交给中软国际。
回归到工作的正题,第一个项目做的是多媒体组件测试,虽然没接触过测试,但不到一个月基本上就学会了。第一个月给领导答辩的时候,我就把这个产品的物理架构和逻辑分层架构全部画出来了,领导很满意。个人在这方面有一些知识面的优势,汇编、C 语言、操作系统、驱动、单片机、SOC、电子电路、电气维修、PLC,这些东西我在大学无聊从图书馆都会借过来翻一翻,都略懂一些,所以在分析产品的时候都不怎么费力。做这个项目的时候感觉都很容易,领导也陆陆续续让我独立负责一些特性测试设计和脚本编写、代码检视、性能设计、工具开发等相关的工作;现在回想起来,同部门的另外一个外包同事,基本上就只安排她做脚本编写和测试执行。当时华为方的领导也还是挺信任我的,也是那个团队的老员工教了我很多东西,让我有很多的锻炼机会;他们对我都很好,我一直心存感激。
第一年的过完的时候,领导给我加了 800 块。在整个这个项目的前两年,我都过的很踏实。我在华为年终抽奖的时候刚好中了一个电磁炉,然后就开始了我的做饭之旅,慢慢学会了做饭炒菜,还请同事到我家吃过两次。那个时候的我,充满了对未来的期望,第一年还了两万五的欠款,还存下来四万,开始觉得日子有奔头了。生活费最低的一个月,我差不多买菜只花了 250 块。我想的是,一年存六万,存三年就差不多可以付首付了;现在回头去看,这个想法真是可笑 。
安稳的工作状态很快就有了转折。第一件影响我较大的事情,那是 2012 年,有一次在华为公司附近的坂雪岗那里有个超市门口吃零食,碰到一个在银行做开发的人。聊起来问我多少钱一个月,我说差不多七千,他说他一万四。我问他怎么可以拿到比较高的工资,他就只跟我说:“这要看你在公司里面有什么样的担当”,我当时一脸懵逼:什么是担当,领导安排的任务不就是担当吗?我后来还特意在网上搜索了什么是担当,但是体会都不深。第二件事情,有个曾经见过一面的同公司外包同事(他具体做什么开发不知道,工作只有一年多),某天早上碰到我一起去上班,跟我说要找领导加薪到 8K,不加就离职。我当时心里就想,哎呀我都毕业六七年了,收入还比不上一个工作不到两年的小伙。最后一件事情,就是 2011 年家里的远房亲戚给介绍了一个对象。认识之后没多久,她说想在市里买房(那时候市中心的单价已经涨到 4000 了),想付首付差 10 万块钱。我听了之后特别不是滋味,想想自己银行卡里都还不到 10 万,当然这妹子后来也没有继续联系了。这几件大的事情之后,我就开始意识到自己不能满足于现状,必须努力做出改变才行。
由内向外发自内心的改变,让我有非常强大的自我学习驱动力。半年的时间,我从网上搜索各种资料,把知识体系一点一点地整理出来,告诉自己哪些东西需要了解,哪些东西需要掌握,从测试设计方法、测试报告模板、测试流程体系、IPD 流程,到无线基站原理结构图、七号信令、香农定理、TCP/IP 网络协议结构、互联网的发展历史及各种网络架构,等等。管它看不看得懂都强迫自己去看,基本上把华为公司内部共享路径上那些可以公开的培训胶片都看完了,反正《软件测试的艺术》这本书,我看了三遍。每天都如饥似渴地学习,晚上十点才回去,有问题搜集起来找各个华为的老员工请教。这半年是我职业生涯中成长最快的半年,这半年至少打下我后来工作能力中百分之三十的牢固基础。(题外话:后来我在各种招聘中碰到过很多从外包出来的面试者,甚至日常也见过好些从华为本公司出来的同事,他们都没有曾经好好学习过华为公司那些摆在那里的高价值文档。)
12 年 5 月的时候,多媒体项目结束了,后面在继续外包做了两个内部项目,都只是几个月的时间。这个时候华为也在慢慢砍文思海辉的外包了,总体感觉安全感很低,归属感很差,项目结束了还要去资源池闲呆着。不过在后面两个项目中,我都想有意无意地开始展露出我的测试能力了,包括对整个测试团队进行技术培训、设计项目的自动化测试方案、为项目编写辅助的测试工具,以及帮开发分析产品的疑难杂症。这些都不是领导要求的,都是我自发地去做,每一次做出成果了我都觉得很有成就感,觉得为项目贡献了自己的技术力量很开心。
题外话:有的朋友可能问我,跟华为这么有缘为什么不去华为面试?
还在外包的时候确实当时的领导安排去了一次(当然不知道领导是碍于面子还是怎么,因为这个面试的起因是有一次聚餐,研发经理过来到我们这一桌敬酒,跟我们的测试经理说:“你看,XXX 能力这么强,干得这么好,要不面试一下把他招进来”),基础技术面试就是我的老大肯定是过了。群面的时候我感觉不是特别好,题目就是现在网上老掉牙的 “唐僧、悟空、八戒、沙僧四个人你会选择哪个,为什么?” 群面有一群面试官在随时观察各个面试者的表现,我没见过这种面试场面(说实话我非常不喜欢里面那种过于刻意表现自己积极的的状态),也没有表现的非常积极,自然落选了。
还有一次是华为的朋友推荐去面试,性格测试没过关,说是有点忧郁。因为其中有两三道题目好像是说:“领导要开会了,你会做什么准备吗”、“你会事先准备好怎么回答领导的提问吗”,大概就这几个。我想还是要准备好一点吧,所以都填的是 “会”,结果评出来是我的忧郁指数稍高,我也是苦笑不得。
慢慢地,跟华为的缘分也算是错失了。现在也三十好几了,过了华为的评估线了,那就祝愿华为越来越好吧!
四、离开外包,独立成长
当开始发现自己的能力优势和发展方向明朗以后,就开始有意识地要离开外包公司了。不仅仅是钱,更是未来的职业发展。
正当我外包的最后一个项目要切换给中软国际的时候,收到上家公司的一个专场招聘邀请,刚好就面试上了,就简称为 A 公司吧。在 A 公司做的是网络照相机,我负责这个产品的整个测试工作。
从产品的需求分析、测试设计、测试方案、用例设计,到测试辅助工具开发和自动化测试设计,等等。虽然做的是普通的测试工作,但是完整地由自己掌控了整个测试过程,甚至还包括了员工培训和团队管理。自己开发的产品测试工具在整个公司开始普及使用,逐渐延伸到整个生产部。对于自动化测试框架,通过使用和研究 NUnit 的源代码让我基本明白了自动化测试框架的基本逻辑。
在 A 公司还是以手工测试为主,自动化测试和测试工具辅助,当然在我去之前是没有其他测试做过代码相关的工作。当然也不免遇到与同道一样的问题,需求文档太简单、流程不规范、开发话语权过大、领导不重视测试、开发踢皮球等等事情。对于这种常见的事情,我从个人建议还是以主动适应为先,然后慢慢去调整;可以提出建议,但不要期望马上就有效果。因为在公司里面,每个角色都有每个角色的难处,老板也有老板的难处。如果想要改变,那就把自己锻炼得很强大得到各方的认可,或者让自己坐上比较高的位置手里掌握更多的资源和话语权。
感觉还是觉得少了点什么,补充一点东西吧。这个 IP 摄像机产品获得了巨大的成功,据估计为 A 公司在 2014 年产生了四千万元的净利润,15 年我辞职的时候订单量不比 14 年少;前几天在网上跟里面一个还在职的朋友聊天,说这款产品现在还在为 A 公司挣钱。不过也仅仅是这一款产品,做完这个产品之后,A 公司的研发团队再也没有凑齐过像当年这个团队这样强的组合:系统工程师、研发主任工程师、项目经理、测试工程师,几个人负责人都感觉挺强的。直到昨天我在网上看到这家公司在 17 年亏损了将近 5 亿港币,原来的老员工基本上全部离职了;也是感慨物是人非,当年在一起奋斗的同事现在也是各自找到了新的去处。
因为一些原因,还是离开了这家公司。这里需要说的一点是,在公司的时候领导总觉得你的努力付出是应该的,你努力付出的东西有收益,老板不一定就会给你;反倒是离开之后,公司的那些领导和朋友才体会到你的技术所带来的高附加值,甚至对你念念不忘。后来那个项目经理跟我说加薪让我回去带公司的云项目自动化,本着好马不吃回头草的想法,还是拒绝了他。一个月后到了现在这家公司,我称之为 B 公司吧。
五、从工程师到部门经理,一路前行,前方就是自动化测试专家
15 年 8 月入职 B 公司,入职就是做自动化测试工程师。这个时候薪资刚好 15K,对于我来说,这也算是我一直努力一直成长的结果。虽然比起很多大公司来说不高,但我一直努力在往上爬。不过也接到过一些阿里、百度、腾讯的面试电话,但总是因为我没有做过互联网相关的测试没有被考虑。客观来说,目前普遍 IT 行业还确实是互联网或金融的测试工作薪酬高一个档次,一般做实体的企业都给的不会比较多。我当时拿这个薪酬,我的老大(测试总监)还要找老板特批。
我本来只是面试自动化测试工程师的,结果我入职一周,我的经理就辞职走了,所有的事情总监只能安排全部由我接手。因为 B 公司一直想做自动化测试,然后来来回回折腾了好几年,从 QA Basic,到 TCL,再到 Python,换了三四波人,都做不起来。我只能先把之前老员工留下来的烂摊子维护起来再说;公司除了我,没有其他人会写脚本,没人会做自动化;我从来没有学过 QA Basic 和 TCL,自学 python 也不到一个月;而这个时候,客户和 FAE 不停地投诉老的自动化测试脚本有这样或那样的问题。当时一度我想放弃这个公司,还是前面推荐我去华为面试的朋友跟我说:“既然来了,为什么不试一试?”
万事开头难,看着以前员工写的那些连注释都没几行的成篇代码,硬着头皮全部啃下来,把相关部门提出的问题全部修复。顺便也负责了公司的 BUG 管理系统 (IBM Clear Quest,很老的一个管理软件),也是自己一点点地分析它的逻辑流程和数据库结构,慢慢全部掌握了工具的基本功能修改和定制。从入职到完成这两个动作,花了我一个半月的时间,算是在自动化测试岗位上站稳了脚跟。
做完前面两件事情,我开始广泛地从客户、FAE 和测试那里接受需求,实现自动化脚本。在初步分析完前面员工留下来的 python 测试脚本后,我认为这种脚本写法已经完全跟不上时代,也不能满足公司未来的发展需要。我跟领导提出抛弃这种一个脚本一个用例的做法,我要自己根据自己的经验和创造性,实现一个全新的测试架构。当然 “测试框架” 这个概念不同的人有不同的理解,可能大多数入行的测试朋友只理解的是自动化测试的各中技术框架,比如 web 的元素识别、windows 的窗体识别等,以及这些常用技术开发者所附带的辅助工具 - 比如 selenium 就是一种技术框架,外加它提供的一套便捷的使用工具。所以我在在这里把我所认知的自动化测试框架、自动化测试测试架构和自动化测试体系这三者的区别简单说一下:
1. 自动化测试框架:多数来说就是技术框架,根据不同产品的测试模型有很多种,比如 web 元素自动捕获识别、界面捕获识别、声音对比技术、协议解析方法、消息收发等等。
2. 自动化测试架构:在架构里面,测试技术框架只是一部分。架构里面重要的是比如:测试框架的模块化及模块层级结构、数据驱动或关键字驱动、断言系统、测试套管理、日志系统、Fixture、参数配置系统、测试执行器、测试用例的识别/加载/执行、以及界面化的执行工具和自动的测试报告等内容。
3. 自动化测试体系:比自动化测试架构更大,涉及到环境自动部署、分布式执行、持续集成、角色管理、测试任务管理分配、测试资源管理分配,比如 jenkins;甚至还有用例管理平台、Bug 管理平台和自动化测试平台的联动管理,这个就很大了,不再局限于自动化测试,而是整个公司大的测试管理体系。
一个月的时间,我每天中午都没有休息,晚上加班到八点才回家。在试用期到来之前,我把测试架构模型写出来了,并且开始实际应用(简单来说我把自动化测试架构分成了公共 API 包、测试脚本包、界面化的测试执行器包)。试用期答辩的时候,把整个公司的自动化技术规划写成了一个 PPT 向测试总监、研发总监和研发总经理汇报,获得了领导的高度认可。从这个时候开始,公司内部一些有想法的同事,就已经开始跟领导提出要调到我这里来发展。
就这样一直发展,开始培养下属,开始招聘面试,开始根据各方的意见完善自动化测试框架(框架后来也陆陆续续做了脚本加密、用例属性识别、日志分割器、日志压缩解压器、半自动弹窗、单 PC 多套自动化测试执行、设备读写性能提升等一些事情)。能做的事情也越来越多,员工也发展到快十人;慢慢把公司的嵌入式自动化测试、安卓自动化测试、测试用例管理平台和 bug 管理平台定制做起来了,期间会用到 python、C/C++、C#、Java 语言。期间每个季度的绩效都是 A,顺利提升到自动化测试经理,薪酬也加到了 21K。
这里面其实有很多自动化测试技术,有机会我会再发一个帖子给大家分享。对于目前来说,我已经管理公司的整个自动化测试体系,平时除了解决自动化架构上的一些问题或修改,日常的脚本编写工作都交给了下属。我很欣慰的是,我努力培养的下属,基本上从不识别代码,到现在的一半以上都成为了骨干员工;薪酬虽然比不上很多大公司,但已经和其他测试工程师拉开了档次;毫不夸张的说,我培养的骨干即使去了 BATJ,照样也是优秀的。因为我不仅仅是培养员工的测试设计能力和代码编写能力,我更注重培养员工的思维逻辑、思考方式、工作方法、文档书写能力和口头表达能力。
六、未来的展望
写了好多,总算到了最后一个章节。感谢那些耐心看完我的自述的朋友,这是我的荣幸。
如果公司没有这次的变动的话,我想我还会再呆几年。不过世界经济在变,环境也在变,个人的力量也无法与时代抗衡;不要企图改变世界,适者生存,做好自己就好。做好自己的这份工作,其实就是为测试行业、为祖国、为社会增添了一份贡献。
昨天有个讨论薪酬的帖子,我也回复了一下,但我看到了很多年轻人在沾沾自喜,也看到很多年轻人的自卑。所以我最后还回复了一下,不要完全用薪酬去看待这个世界,不要太浮躁,充实自己。机会是留给有准备的人,不是有准备了就一定有机会;但是如果不准备,即使有机会也抓不住。在好公司拿到薪酬比你高的人,水平并不一定比你高;也许这是每个人的机缘,不同的机缘,不一样的人生!