这两天一篇阿里、京东缩招的新闻刷爆了朋友圈,两家公司也都出来辟谣没有这回事。不管缩招是不是真的,这个行业变化快是真的,要求越来越高也是真的,在这样的大背景下,未来测试岗位将何去何从,测试工程师该如何规划好自己的职业生涯,快速成长,成了很多工程师困惑的点。
有这么个普遍现象
测试招聘者,特别是一、二线互联网公司的招聘者最苦恼的事儿就是招人。想找到一个合适的人难于上青天,每天各种撒网,简历看几百份,面大几十人,能捞到一个中意的小伙伴就谢天谢地了。
但同时很多测试小伙伴发现找工作很难,特别是进大一点的厂,他们特别挑:代码要会写,要有软件架构能力,问一大坨平时根本用不到的技术问题,还挑经验,挑沟通能力,挑这挑那,有时候还特么挑学历、挑年龄。。。
供求总难以匹配起来,造成了双方都很痛苦。
Why?
能力要求不匹配是最核心的问题。
软件、互联网近20年来飞速成长,其实也经历了很多阶段:
行业软件兴盛阶段和外包兴盛阶段(2000-2010年)行业进入了大量的测试人员,当时最主流的测试实践是:重心放在系统验收阶段。测试人员的主要工作基本都投入在了基于业务的黑盒测试上,对代码能力、系统理解的能力要求不多。
2010年后,互联网行业的真正兴起让国内软件开发模式开始缓慢调头,快速迭代的模式逐步兴起,开发周期越来越短,迭代越来越快,但系统越来越越庞大、复杂。
原来的测试工作模式和工作范围越来越无法满足要求了。但大量从业人员技能范围转变是一件很难的事情,行业是有巨大惯性的。从宏观上看大量 QA 技能转变跟不上需求转变是造成市场供求不匹配的主要原因。
So What?
三个观点:
只做手工测试,不懂系统实现的测试工程师的职业发展会越来越受限;
能够转型成适应市场需求的同学将在近几年的时间获得超额回报(因为市场供不应求,企业不得不抬高价格来寻找这样的人);
对于个体来说,自我成长永远最重要,自己永远要对自己的发展负责,别依赖外部环境,自己想办法变成市场的香饽饽才靠谱。
到底什么样的人抢手?
测试的底子-项目经验
有比较复杂系统的测试实战经验,你就超过了50%以上的应聘者。
什么叫做比较复杂系统呢?投入50人年开发出来的系统就可以称作一个复杂系统了。因此,复杂系统并不是很罕见。但是,如果你只接触一个简单的模块,甚至只是测试一个稳定模块的维护性开发,而不是通盘理解,不能说是测试过复杂系统。有从头到尾接触一个完整项目的经历很宝贵。
测试的底子-基础知识
对照三本书:《ISTQB基础教程》 《高级软件测试设计》 《高级软件测试管理》(后两本是 ISTQB 的高级认证教程)。这里边的内容你都能熟练应用(真的是熟练应用,而不只是有概念),你就能超过80%以上的应聘者了。
面试过数百人,我经常会问几个问题:
如果测试时间不够,你会怎么办?
如果让你去测试一个你完全不熟悉的系统,你会怎么办?
你平时会使用那些测试设计方法?
看似很稀松平常的问题,非常考验人。因为大部分从业者都没有经受过系统训练和学习,工作多年,依然技能不足,意识跑偏。
熟练使用一门主语言
满足这条,你就超过了70%的应聘者。
什么叫做熟练呢?拿 Java 来说吧:
系统学习过Java的教程,高频面试50题 这样的题可以自测一下,可以回答上35个以上;
熟悉最主流的 Spring 框架,能够写出一个简单的网站,实现基础的Restful 服务;
读懂过一个测试框架,如 mockito 或者 Junit 的源码;能够熟练实施接口测试(基于一些测试框架 如:rest-assured+Junit );
能够读懂开发的业务代码,对他们的代码进行 Code Review;
对一门语言有比较深入了解
满足这条,你就超过了90%的应聘者。
什么叫有深入了解呢?还拿 Java 来说吧:
熟练使用 Java 的常见 API;
深入理解基于语言特性/系统特性的知识,如 Collections的实现机制、类型系统、I/O、网络、多线程等;
熟知设计模式(广义范围的设计模式,不局限于 GOF 的设计模式);
熟悉 JVM 的工作模式;熟练使用调试排查工具解决性能问题;熟练掌握市面上常见的脚手架;熟练掌握周边知识( OPs 相关,网络知识相关)有不错的实战开发经验(做过真正被生产检验的东西);
对于测试开发,AOP,Java 字节码技术是很重要的知识。。。
这是一个很长的学习 list,需要几年时间来养成。做到这点,其实你可以胜任普通的开发岗位了,这也是高级测试开发岗位的技术底子。
在一个领域知识有不错的了解
人不可能什么都懂,但工作几年之后,会在工作的域内一定要有积累才行。
例如,你测试一个核心电商系统的交易模块三年了
业务上你一定要熟练讲出来:商品列表、购物车、下单、退单、废单、支付、发货、库存、退款、优惠使用等等一坨业务流程,和可能出现的常见的坑(各类问题产生的资损、各类问题产生的服务不可用、逻辑矛盾),不然根本无法体现你经验沉淀和深入思考;
技术角度上,你要能够画得出来系统的交互图,熟悉最核心的接口和最核心的参数,能够读懂开发的代码,熟练使用 trace 和监控工具,诊断定位线上问题到代码行。
用技术保障质量的能力
测试开发岗一定会问到一个问题:你能够举一个你用技术手段提高测试效率,增强测试能力的例子么?
这是面试时最大的一个坎。 很多人会讲一些自动化测试回归的例子,但是真正成功的例子非常少,因为为什么做,怎么做都没有想好就照网上一个教程攒了一个,结果变成了玩具。
做好自动化,不仅仅是会使用工具、框架,其实要对被测物特性,软件生命周期有很深的理解并且有很强的开发知识才行。实际上,在环境、CI、数据、测试用例生成、数据比对的很小的一些点上,都能有不错的提效产出,从这些点能够做得好,会得到不错的加分。
有一个不错的成功案例,你胜出的几率就超过了80%,没有短板,就十拿九稳了。
技能以外的东西- 实战案例
以前的工作印证了你的能力。
能够讲清楚一件特别拿得出手的工作,证明你能力的案例是面试时候最有用的投名状。
技能以外的东西 - 你的个人特质
一般有如下特质会大大加分:快速学习、系统性学习、学以致用、系统性思考、强大的推动力、技术思维、突出的沟通能力、条理性、抗压性、乐观精神、抗挫折能力、迅速调整的能力、迭代改进的意识、ownership、团队合作、愿景和规划。
这些特性体现人的内核,有强大内核的人,做什么都行,技能暂时不足,也一定能补足。所以,在招聘的时候往往对是否录用的判断起决定性作用。
(文章来源于霍格沃兹测试学院)