近20年,软件、互联网飞速发展,在软件行业兴盛阶段和外包兴盛阶段(2000-2010年)进入了大量的测试人员,当时主流的测试实践是:重心放在系统验收阶段。测试人员的主要工作都投入在基于业务的黑盒测试,对代码能力、系统理解能力要求不高。2010年后,互联网行业的兴起让国内软件开发模式开始缓慢调头,快速迭代的模式逐步兴起,开发周期越来越端,迭代越来越快,系统越来越庞大、复杂、原来的测试工作模式和工作范围也变得无法满足要求。但大量从业人员技能范围转变是一件很难的事情。 从宏观上看大量QA技能转变跟不上需求转变,造成市场供求不匹配。
因此,1 只做手工测试,不懂系统实现的测试工程师的职业发展会越来越受阻;2 能够转型成适应市场需求的同学将在近几年的时间获得超额回报; 3 对于个人来说,自我成长永远最重要,要对自己的发展负责,不要依赖外部环境,要自己想办法变成市场的抢手人才。
什么样的算是抢手人才?
1-1、测试基本功-项目经验
有复杂系统的测试实战经验,你就超过了50%的应聘者。那什么是复杂系统?投入50人年开发出来的系统就可以称作一个复杂系统。但只接触其中一个简单模块、维护性开发,没有通盘理解,不能说是测试过复杂系统。「从头到尾接触一个完整项目的经历很宝贵」
1-2、测试基本功-基础知识
三本书:《ISTQB基础教程》 《高级软件测试设计》 《高级软件测试管理》
熟练应用其中的内容,你就超过 80%的应聘者
几个基本问题(要重视系统训练和系统学习):
测试时间不够,怎么办?
要测试一个你完全不熟悉的系统,怎么办?
平时会使用哪些测试设计方法?
2、熟练使用一门语言
这条你就超过70%应聘者。
什么叫熟练?如系统学习过Java的教程,高频面试50题 这样的题可以自测一下,可以回答上35个以上;熟悉Spring框架,能够写一个简单网站,实现基础的Restful服务;读懂一个测试框架,如mockito 或 Junit的源码;能熟悉进行接口测试;能读懂开发的业务代码,对他们的代码进行Code review
3、深入了解一门语言
这条你就超过90%应聘者。
什么叫深入了解?如熟练使用Java常见API,深入理解基于语言特性/系统特性的知识,如Collections的实现机制、类型系统、I/O、网络、多线程等;熟悉设计模式;熟悉JVM工作模式;熟练使用调试排查工具解决性能问题;熟练掌握市面上常见的脚手架;熟练掌握周边知识(网络知识、OPS);有不错的实战开发经验(做过真正被生产检验的东西);对于测试开发,AOP,Java字节码技术很重要 (以上大概需要几年时间养成)。其实已经可以胜任普通的开发岗位,也是高级测试开发岗位的技术底子。
4、积累一定的领域知识
工作几年之后,在工作的领域内要有积累。
如,测试一个核心电商系统的交易模块三年,要熟练讲出来业务:商品列表、购物车、下单、退单、废单、支付、发货、库存、退款、优惠使用等一坨业务流程,和可能出现的常见坑(各类问题产生的资损、各类问题产生的服务不可用、逻辑矛盾),否则无法体现经验沉淀和深入思考;技术角度上,要能够画出来系统交互图,熟悉核心尽快的核心参数,读懂开发代码,熟练使用trace和监控工具,诊断定位线上问题到代码行。
5、用技术保障质量的能力
举一个用技术手段提高测试效率、增强测试能力的例子?
常见回答:自动化测试回归(但是成功的例子很少,因为为什么做,怎么做都没有想好,就照网上教程攒了一个,结果变成了玩具,做好自动化,不仅是使用工具、框架、其实要对被测物特性、软件生命周期有深入理解和很强的开发知识。实际上,在环境、CI、数据、测试用例生成、数据比对的小点上,都能有不错的提效产出,把这些点做好,会得到不错的加分。有一个不错的成功案例,没有短板,就十拿九稳了)
6、技能以外的软素质- 实战案例、个人特质
能讲清楚一件特别拿得出手的工作,证明你能力的案例 (STAR法则)。
加分特质:快速学习、系统性学习、学以致用、系统性思考、强大推动力、技术思维、突出的沟通能力、条理性、抗压性、乐观精神、抗挫折能力、迅速调整能力、迭代意识、ownershiip、团队合作、愿景和规划。
这些特质体现一个人的内核,内核强大的人,做什么都能行,技能暂时不足,也一定能补足。这写对是否录用起决定性作用。