测试人的职业迷茫与破局:从测试小白的技术专家

大家好,我是宏夏

最近看到一篇关于测试职业发展和进阶的好文章,自己重新梳理了一下跟大家做个分享

文章很长,常看常新。相信读完能够让你对测试的认知又上一台阶

一、测试行业的困境

有这么个普遍现象:测试招聘者,特别是一、二线互联网公司的招聘者最苦恼的事儿就是招人。

想找到一个合适的人难于上青天,每天各种撒网,简历看几百份,面大几十人,能捞到一个中意的小伙伴就谢天谢地了。

但同时很多测试小伙伴发现找工作很难,特别是进大一点的厂,他们特别挑:代码要会写,要有软件架构能力,问一大坨平时根本用不到的技术问题,还挑经验,挑沟通能力,挑这挑那,有时候还特么挑学历、挑年龄。

供求总难以匹配起来,造成了双方都很痛苦。

二、为啥出现这种局面

能力要求不匹配是最核心的问题。

软件、互联网近 20 年来飞速成长,其实也经历了很多阶段。行业软件兴盛阶段和外包兴盛阶段(2000 - 2010 年)行业进入了大量的测试人员,当时最主流的测试实践是:重心放在系统验收阶段。测试人员的主要工作基本都投入在了基于业务的黑盒测试上,对代码能力、系统理解的能力要求不多。

2010 年后,互联网行业的真正兴起让国内软件开发模式开始缓慢调头,快速迭代的模式逐步兴起,开发周期越来越短,迭代越来越快,但系统越来越庞大、复杂。

原来的测试工作模式和工作范围越来越无法满足要求了。但大量从业人员技能范围转变是一件很难的事情,行业是有巨大惯性的。

从宏观上看大量 QA 技能转变跟不上需求转变是造成市场供求不匹配的主要原因。

三、测试人如何破局?

三个观点:

  1. 只做手工测试,不懂系统实现的测试工程师的职业发展会越来越受限。
  2. 能够转型成适应市场需求的同学将在近几年的时间获得超额回报(因为市场供不应求,企业不得不抬高价格来寻找这样的人)。
  3. 对于个体来说,自我成长永远最重要。自己永远要对自己的发展负责,别依赖外部环境,自己想办法变成市场的香饽饽才靠谱。

四、到底什么样的人抢手?

到底什么样的人抢手?按照我一点理解讲一讲什么样子的人会抢手吧,限于篇幅会偏重技术角度来讲。个人之见,欢迎讨论和拍砖。

(一)测试的底子 - 项目经验

有比较复杂系统的测试实战经验,你就超过了 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
  • 团队合作
  • 愿景和规划

这些特性体现人的内核,有强大内核的人,做什么都行,技能暂时不足,也一定能补足。所以,在招聘的时候往往对是否录用的判断起决定性作用。

高级测试的需求

1、计算机领域知识的通盘理解

这条范围非常大,人不可能什么都懂。但最最基础的知识是不能有盲点的:

操作系统工作基础原理与基础操作:如 linux,要通读过 linux 操作系统的书,熟悉最基本的概念,基本命令要熟悉,shell 要能写和读;

网络知识特别是 TCP/IP, HTTP 知识:推荐两本书《图解 tcp/ip》《图解 Http》这两本书里的东西要懂。

数据库知识:市面常见数据库(redis,mysql,oracle)的常见 DBA 操作,问题排查;SQL 的熟练使用;

Web 及移动端知识:能够懂 HTML,CSS,能够读懂 Javascript 代码,能够读懂 Android 或者 iOS 的代码,做简单开发最好。

安全知识:常见的安全防护方法、工具使用;基本的安全攻防原理;软件工程/开发过程管理:实战中各种磨练,建议系统的学习 PMP,敏捷开发的一些认证课程。

2、在一个领域的深耕

人不可能什么都懂,但在一个领域是需要深耕的。

比如,在做了四、五年移动端测试以后。android 和 iOS 都要具备一定的开发能力了,能读懂开发的业务代码是最基础的,能够代替开发实现部分业务功能,完成部分组件开发是个非常好的自检点。

能够对移动端自动化工具栈、监控工具栈(如友盟、bugly、newrelic 等)、内存泄露检测、卡顿检测、耗电量、弱网、流量、埋点、灰度、版本控制、兼容性、用户体验、安全等等的质量保障方案有通盘搞定能力。

什么叫搞定呢?举个例子:比如,使用多种手段把崩溃率降低到千分之一以下。

对于一个小团队,这是个很不容易实现的坎。

做到这点,你需要

了解如何收集崩溃率,使用一系列工具来定位核心问题

如何推动开发改动,并且预防,包括

  • 静态代码扫描工具引入,
  • 阻止乱用第不成熟的第三方插件,
  • 代码 reivew 防止常见 pattern 如空指针引发的崩溃,
  • 推动开发养成良好的 log 习惯,
  • 推动移动端防御性编程编程开发习惯,
  • 推动后端开发按照规范吐接口,
  • 帮助开发引入内存泄露、卡顿工具,趋势报表,警钟长鸣,各种灰度方式设置,线上监控。。。

一个数据的改观,背后要有大量的质量相关工作

也就是使用综合手段来保障软件质量提升效能的能力。

听起来很抽象,举几个例子吧。

例子 1:你所在的 team 总在被开发抱怨测试用的时间太长。如何能缩短一下测试时间呢?

通过调研,发现测试小伙伴诟病的最多的就是环境不可用。环境到底多不可用呢?

你基于 Grafana 和 Prometheus 做了一个环境可用的监控报表,使用后,发现环境在工作日整体可用率只有 35% 左右,主要原因是:几个核心热点应用经常挂了没人管。

你拉了整个 team,明确了部署责任人,约定了部署规则:只能中午饭和晚饭时间部署,并且部署后要自己看一下是不是 OK。

一周后,环境可用度上升到了 65%。再深入分析,发现 2 个同学不守规矩,总是他们在破坏规则,你去找他们单独谈话。

一周后,环境可用度上升到了 80%。还是有少量人不守规矩。

你找 SRE 的同学提需求,做了部署卡点,非部署时间部署必须 TL 审批。

一周后,环境可用度上升到了 85%。有些 TL 也不守规矩。

你建了个报警,环境乱部署,坏掉了,在大团队的群里 @ 全体,告知谁搞坏了环境。

一周后,环境可用度达到了 92%。你加了一个 feature:应用挂了一段时间无人响应,自动重启服务功能,仍然有问题,就自动回滚上一版本。

你推动了开发解决了某个应用启动时间过长的问题。

你推动了环境分组。

你推动了测试环境版本上线的规范流程实施。

你推动了冒烟自动化用例卡点。

你推动了环境部署人备份机制。

你推动了全员基础环境部署培训。

你总结了部署手册。

你做了。。。。。

最后,环境可用度稳定到了 97% 以上。你为测试节省了 60% 以上 block 时间(原来可用度为 35%)

例子 2:上面的问题,除了环境,还有一个槽点:开发提测质量不高。

测试的头几天,很多主流程都走不通,导致测试总是在等待,或者是跟着开发一起联调。而这段时间,已经被习惯性的认为是测试时间了,因为:提测了。

你推动了:测试提供冒烟用例,开发必须完成一定程度的自测才能提测。

你推动了:测试和开发做自动化同期共建,在开发过程中,核心功能就被自动化用例保护起来了。

你推动了:开发切分 feature 提测,而不是攒一个大招一下子提一坨。

你推动了:代码 Codereview 变成团队常规活动,QA 在早期跟进核心代码,把问题坑杀在萌芽阶段。

你推动了:外部资源联调非常早的进行,不会让它在测试后期成为测试 blocker。

。。。

例子 3:你发现测试时间长,QA 自己也有问题。

你推动了:有明确的测试计划,并让所有干系人都有明确的预期。

你推动了:测试依据风险测试,最大的风险得到最快的 cover,科学分配时间,明显缩短 bug 反馈时间弧。

你推动了:bug 严格管理,所有重要 bug 都及时修复。

你推动了:良好的沟通和汇报机制,每天让团队主要干系人清晰的知道,距离发布还差多远。

你推动了。。。。

你能讲出自己做过 5 个以上这样的成功例子,我敢保障,你会被 1 线大厂疯抢。职级基本都是专家起。

3、持续学习能力和复杂问题解决能力

例子 1:你近期的工作是帮助团队提升后台服务稳定性。你看到了 netflix 内部使用一个叫做 ChaosMonkey 的东西来随机对生产服务期进行攻击,而逼迫工程师提高稳定性,所以,你也实现了类似(更温和)的内部机制,推动团队稳定性的提高。

你怎么知道这个叫做 ChaosMonkey 的东西呢? 因为你会习惯性浏览一线厂商的技术博客,参与行业大会,关注各类新技术。持续性的养成习惯。

例子 2:做大规模接口自动化好难,外部数据依赖太难搞,参数构造太费劲,assert 太难写。如果能够简单的录制回放就好了。

但是,外部依赖是个天坑,写操作 mock 也是个天坑,assert 也是个天坑。

实际的案例是,经过几年多个团队持续不懈的填坑,阿里内部已经有应用级的录制回放工具了,数百个应用成功的是用了它,把不可能回归的任务变成了可能(上万数量级的 case 当天生成,当天投入使用,并可以分析覆盖率),自动化测试实施需要付出的工作时间革命性降低(不足原来付出时间的 10%)。

你能讲出自己做过 5 个以上这样的成功例子,我敢保障,你也会被 1 线大厂疯抢。职级基本都是专家起。

其它能力

测试是个万金油,高阶一些的职位需要什么都要会一些 ,因为越高阶的职位需要解决的问题越综合,需要打交道的人的种类越多。

不然很容易变成你职业短板,做个 list 吧(一定不全):

很好的项目管理能力,至少与开发经理能力同级,甚至要强于他。

一定的软件架构能力。

一定的产品 sense:可以跟一个资深的产品经理能够顺畅的交流,明白知道他为什么会这么想,所要实现产品的意义,路径;从产品质量方面的考虑要超过产品经理,给他输出。

极好的沟通能力。

团队管理能力(这个太重要)

目标管理能力

有一个好的内核(上面提到过)

测试人怎么转型/进阶?

其实不难,没有什么高端的方法。下面这 4 条就够了,核心秘密就是坚持不懈。

1、熟悉你的被测系统。

能够从技术、业务角度做到对被测系统熟悉是做一个好 QA 的最基本职业素养,也是能力提升的最主要源泉。

自检点:

我能够画出系统的架构图么?

我能够读懂开发的代码么?

我熟悉常见的业务监控系统么?

熟悉日志系统么?

知道开发是如何调试和定位问题的么?

给我一个线上问题,我能定位么?

我能给别人完整的介绍这个域的核心业务么?

我能自己直接动手发布上线一个系统么?

知道如何回滚么?

灰度是如何做的?

我知道所有关键的技术点么,如一个交易的幂等性是如何实现的?

我在团队中有:“这家伙对系统最熟” 的口碑么?

如果自检点全部是否定答案。。。 花一年时间把它全变成肯定答案。这一过程,你一定被迫学到了很多很多,并且获得了极为长足的成长,这是进阶的必由之路,也是卡了很多人的地方。 如果说做不到,后面不用看了,前面的也全部忘掉吧。

方法:通读所有文档,强迫自己读代码,积极参与开发所有讨论,不懂的狂问,观察开发如何上线,如何排查问题,模仿,学习,善用搜索引擎,总结。。。

2、找到问题解决问题。

你一定有一堆问题,如果你觉得自己做得挺好,没有问题要解决,那必然是你自己有巨大的问题!

自检点:找一支笔,写出你觉得质量方面,你的 team 的 10 个问题,做排序。排出最重要的 3 个。

方法:找到 top3 的问题,选一个,列个接话,去解决。如果找不出来,使劲去观察,然后去看看做的好的同行,比比你比人家差在哪里。

尝试去解决这些问题,从小问题,能够见到效果的问题入手,设置一个时间点。你真正解决了 5 个以上问题以后,感觉一定会有。

3、系统学习

自检点:我系统的学过一门知识么?我能讲清楚我这么操作,我写的这行代码的原理么?

方法:从工作出发,确认你需要补足哪些知识。从网上找一个具体知识的学习路线图,订个计划,照着来。 参加学习小组,找到帮你解决难题的人,多请他吃饭,多请教他。获取知识后,马上回到工作中做检验。还是学以致用才能有所增长。结合工作来系统学习的效果是最好的。

再举个例子:

上家公司有个小伙伴(他应该也会泡这个社区),开始应聘的时候,他说熟悉 jenkins,用的很多。所以第一份工作是:把所有 CI 的日常工作交给了他,并告知 2 个月内要全部搞定。 他一下懵逼了,原来那些不深入的理解支撑不了工作要求。后来他每天死磕,看了 jenkins 所有的文档(对,几乎所有文档通读了一遍),翻了无数问题的解决帖子,记录了上百个问题解决的过程,写了上百篇 jenkins 的小 blog(现在还没公布出来)。

几个月以后,他比我熟了,他的一项基础能力成长为:可以独自给一个小公司完整的搞定前端、后端、移动端的一整套 CI 解决方案。其实单凭这一套,就能找到不错的工作了。这是依托工作,系统性学习的结果。

看到有同学说要裸辞,去接受培训。我的建议是,别这样。裸辞你就失去了学以致用的阵地,失去了真正解决问题的机会,还失去了资金来源。依托工作,自主学习是王道。自己饶过不去坎,其实有很多网上教程和非脱产培训班啊。

4、选择有挑战的团队

自检点:

在团队里有很多人比我强么?

周围的同事都是我佩服的么?

我做的事儿有挑战么?

方法:如果这三点都是否定的,并且你处于职业生涯的早期。也许(只是也许),你该考虑一下换个团队了。

#职业发展##测试开发学习路线##测试#
全部评论
写的很好哇,支持
1 回复 分享
发布于 02-08 20:24 北京
哪个好文章 分享一下
点赞 回复 分享
发布于 02-09 18:21 广东
感觉很有深度,没个五年以上的积累写不出来
点赞 回复 分享
发布于 02-23 13:39 广东
接好运
点赞 回复 分享
发布于 03-04 12:20 湖南省
太强了啊
点赞 回复 分享
发布于 03-12 09:46 北京

相关推荐

02-26 20:10
已编辑
中山大学 游戏策划
【一面 32min】  1. 介绍比较喜欢的一款休闲游戏?  2. 这款游戏的XX设计会让玩家的核心游戏体验失焦吗?  3. 你说的“分层玩家体验”是怎么样的分法?  4. 你在设计游戏 Demo 的时候,有借鉴哪些跑酷游戏吗?  5. 你觉得做 Demo 和做商业游戏的思路有什么区别?  6. 介绍你的职业规划?  7. 对想做的游戏品类有偏好吗?投了哪些品类的策划岗位?  8. 秋招你投的其他公司有更往后的流程进度吗?  9. 对消除类游戏有哪些了解?  10. 为什么想做消除,对消除类游戏看好吗?【反问】忘记了hh。【二面 47min】1. 你的demo是怎么做的?2. 你的demo的趣味点?3. 你提到调整节奏和把控玩家心流体验,这在你的Demo中是怎么体现的?4. 你在简历里提到你在demo制作中“总结了游戏设计的关键决策和玩家测试反馈”,具体是怎样的?5. 你在笔试题“令人印象深刻的设计”中提到《塞尔达传说》的“究极手”设计,可以详细说明一下吗?6. 你在笔试题“喜欢的游戏里”提到《艾尔登法环》,认为它达到了“魂系风味和商业取向间的良好平衡”,可以详细说明一下吗?7. 你在笔试题中还提到“艾尔登法环在人物塑造上弱化言行,而以少许高光时刻将人物形象立体化”,可以举例说明一下吗?8. 你在笔试题自由发挥部分里提到出海市场相关内容,可以详细说明一下吗?9. 为什么想做出海游戏?10. 你觉得主要面向国内和国外的游戏在制作上有什么差别?11. 消除游戏的趣味点体现在哪些地方?一个好的关卡是怎样的?关卡节奏、玩家心流的把控又是怎样的?【反问】1. 乐元素的新人培养机制&流程?2. 消除游戏较前的关卡(如200关之前)和较后的关卡(如1000关后)在制作上和玩家体感上的不同?3. 为什么乐元素没在开心消消乐里做对标竞品的三消+其他品类玩法?#非技术面试记录##秋招##游戏策划##消消乐##游戏求职进展汇总##关卡策划面经##游戏行业校招#
点赞 评论 收藏
分享
评论
14
71
分享

创作者周榜

更多
牛客网
牛客企业服务