目录

会写代码,只是测试开发工程师的门槛——关于「软素质」的讨论

很多人一提到「测试开发工程师」,第一反应还是:

会写代码的测试。

我必须要指出,也许10年前是这样,但是在越来越卷的今天,“会写代码”,或者说有一定的技术能力,只是这个岗位的门槛。想进入这个岗位,或者想在这个岗位发展下去,真正重要的,是一整套“软素质”。

毫无疑问: 这些软素质,往往不会写在 JD 里,却决定了在团队里的位置、话语权,以及职业上限。如果你是个学生,想走测开方向|或者你是个开发,想转测开|亦或是你已经在测开岗位上,我都希望我的这篇文章能对你有些帮助。

这篇文章,我想系统聊聊:测试开发工程师,到底需要哪些软素质。

在开始之前:为什么“软素质”听起来这么虚?

很多测试开发,特别是学生,当从猎头或者HR处打听到:

需要重点考察候选人的软素质

内心第一反应往往是:

  • 这是不是面试官的“自由发挥空间”?

  • 是不是不好量化,才统一丢给“软素质”?

  • 会不会变成一种人为拔高、事后解释的虚无标准?

这种感觉其实非常正常。

因为在大多数公司的语境里:

  • 硬技能,有明确清单:语言、框架、工具、经验年限

  • 软素质,却往往只剩下一些模糊词汇:

  • 沟通能力好

  • 有责任心

  • 主动性强

听起来正确,但几乎无法操作,也无法复盘。

但如果你真的参与过测试开发的面试设计,或者带过人,就会发现:

领导口中的“软素质”,并不是性格评价,而是那些没法写成代码、却直接影响结果的能力。

它们之所以显得“不可量化”,只是因为很难用几道题考出来,

但几乎每一次线上事故,都会和它们有关。

一、对“风险”的敏感度,而不是对“BUG”的执念

很多测试新人都会有一个阶段:

  • 看到 BUG 就兴奋

  • BUG 数量 = 自我价值

  • 修不完的 BUG = 成就感

有一个经典梗,说BUG多就扣开发的绩效,BUG少就扣测试的绩效。但这只是一个梗而已,BUG的多少不能说明开发的能力,也不能说明测试的能力。

测试开发工程师的视野要迈过的第一道坎,是从“找 BUG”转向“控风险”。

成熟的测试关注的是:

  • 这个问题会不会影响用户?

  • 会不会影响核心链路?

  • 上线后出现,代价有多大?

然后便会开始自然地做取舍,而不是“雨露均沾”。

不是所有 BUG 都值得挡版本,但有些风险,哪怕只有 1% 的概率,也必须死磕。

这是一种业务判断力,也是测试的第一软素质。


二、站在“整体系统”视角,而不是模块视角

测试开发工程师,最怕的一句话是:

“这个不归我测。”

当然,职责边界很重要。 但系统性思维,恰恰是测试开发最重要的软能力之一。

你需要天然地关心:

  • 这个改动会不会影响上下游?

  • 数据结构变了,历史数据怎么办?

  • 多端是否一致?

  • 异常情况下,系统如何自愈?

很多线上事故,并不是因为功能没测,而是因为:

没有人从“系统整体”去看它。

而测试,往往是最后一个、也是最合适站出来补这个视角的角色。


三、沟通能力:不是“会说话”,而是“会对齐”

测试开发工程师的沟通,并不等同于:

  • 能吵架

  • 能输出长文档

  • 能在群里持续刷屏

当然,“会说话”、能输出、维护人际关系都是优势,但对于沟通能力来说,只有一个目标:降低不确定性,让事情更快往前走。

包括但不限于:

  • 把模糊需求问清楚

  • 把风险说清楚

  • 把结论说短

  • 把分歧前置

很多测试“背锅”,本质上都是信息不对称。

而优秀的测试开发,会主动去“对齐信息”,而不是事后证明自己是对的。


四、敢于坚持,但知道什么时候该让步

这是一个非常微妙、但极其重要的软素质。

测试开发工程师,既不能:

  • 一味妥协,什么都放

也不能:

  • 逢版必刚,逢人就怼

你需要非常清楚:

  • 哪些问题是原则问题

  • 哪些问题是成本问题

  • 哪些问题是认知差异

坚持,是为了降低系统性风险,而不是为了赢一场争论。

成熟的测试,会在关键点上寸步不让, 也会在非关键点上,体面退场。


五、负责程度:可以摸鱼,但该盯的东西一定要盯

很多人一听到“负责”,心里会本能抗拒。 因为现实中,“负责”这个词,常常被滥用成:

  • 多干一点

  • 多扛一点

  • 最后兜底

  • 出事问责

但成熟的团队,对测试负责程度的期待,远没有这么简单粗暴。

更接近真实情况的是:

你可以不一直高强度输出,可以不显得特别忙,甚至可以在一些无关紧要的地方适度摸鱼,但在关键时刻,你有没有把该盯的东西真正盯住。

比如版本临近时:

  • 核心链路有没有被完整验证

  • 风险结论是不是拍脑袋得出来的

  • 灰度、回滚方案是不是只停留在文档层面

  • 线上指标异常时,有没有人持续跟进而不是丢一句“已反馈”

这些事情,往往不会写进测试用例,也不会每天有人追着你问。但一旦出问题,所有人都会回头复盘:当时,这件事有没有被当成一件必须安全落地的事情在盯。

这里有一个非常现实、但很多测试心里都明白的对比:

开发可以明确地说,这不是我负责的模块,这块逻辑我没有改动。

这在开发体系里是成立的,因为开发的职责边界,本身就是围绕模块划分的。

而测试的职责,天然更偏向结果。

当问题跨模块、跨服务、跨团队时,如果测试也选择只站在自己的那一小块范围内,问题往往就会在边界处被不断传递、不断稀释,直到某一天以事故的形式爆出来。

所以很多时候,测试的负责,并不是亲自解决问题,而是确保问题不会悄无声息地消失。

你不一定是最终的 owner,但需要知道:

  • 这个问题现在卡在哪一步

  • 当前是谁在处理

  • 是否存在被忽略或被低估的风险

也正因为如此,在事故复盘或面试追问中,经常会出现类似的问题:

  • 这个问题当时你是怎么看的。

  • 这个问题为什么没有继续往下追。

  • 如果再来一次,你会在哪个节点多盯一步。

这些问题表面看起来在问判断,实质上在确认一件事。

当系统开始变复杂、责任开始变模糊时,你会不会依然选择对结果保持关注。

这也是测试开发工程师“负责程度”最核心、也最难被量化的一部分。


六、自我驱动:没人逼你,但你知道该补哪里

测试开发工程师往往处在一个比较尴尬的位置:

  • 成果不容易被量化,价值不容易被即时感知。

  • 很多事情,做与不做,在短期内看起来差别并不明显。

不得不说,开发这个岗位要求定期交付一定的成果,但测试要“混”起来还是比较容易的,这就决定了,自我驱动能力,几乎决定了一个测试开发的成长上限:

  • 是否会在没人要求的情况下,主动去补系统知识。

  • 是否会在流程卡顿时,想着是不是能通过工具或机制减少重复劳动。

  • 是否会在多次踩坑后,总结出一套可以复用的方法,而不是只停留在经验层面。

这些行为,很少会被直接写进绩效目标,但它们会慢慢改变你在团队中的位置:

  • 从被动接需求的人,变成大家默认会提前拉你参与讨论的人。

  • 从版本末尾被通知的人,变成关键节点必须被同步的人。

这种变化,往往不是某一次技术突破带来的,而是长期自我驱动积累的结果。


七、和测试工程师相比,测试开发工程师的软素质差异在哪里

很多讨论软素质的问题,绕不开一个对比对象。

测试工程师和测试开发工程师。

这两者在技术栈上的差异,大家已经讨论得很多了。但事实上,发展到今天,我认为二者已经没有什么本质区别。硬要说的话,我认为有以下几点,且并不是谁高谁低,而是关注点不同、承担的隐性责任不同。

首先,在风险视角上,两者的重心并不完全一样。

测试工程师,更多是在既定需求和实现方案下,尽可能发现问题。

关注的是功能是否符合预期,边界条件有没有覆盖,现有用例是否还能兜住改动。

而测试开发工程师,往往需要在更早的阶段介入。

在需求还不够清晰、方案还没完全落地时,就开始判断系统性风险,评估设计是否可测试、可回滚、可监控。

这就决定了,测试开发的软素质中,前置判断能力占比会更高。

其次,在责任边界的处理方式上,两者也有所不同。

测试工程师的职责边界,相对更清晰。

在测试阶段内,把分配到的需求测清楚、问题提清楚,本身就是一件合格甚至优秀的事情。

而测试开发工程师,往往会被默认承担一些没人明确指派、但又必须有人持续关注的事情。

比如测试体系是否可持续,环境是否稳定,数据和依赖是否可靠,线上质量指标是否长期健康。

这些事情,很难和某一个版本强绑定,也不容易量化。

于是它们自然就落进了软素质的范畴。

第三,在沟通方式上,两者的侧重点也不同。

测试工程师的沟通,更多围绕具体问题展开。

而测试开发工程师的沟通,更多是在做取舍和对齐,是在参与决策,而不仅仅是反馈问题。

最后,在成长路径上,两者对软素质的依赖程度也不同。

测试工程师可以在执行和验证路径上持续深耕。

而测试开发工程师,如果只停留在会写代码的测试,软素质迟早会成为瓶颈。

因为越往后走,技术能力会逐渐同质化,真正拉开差距的,是在复杂系统中持续做判断的能力。


八、为什么开发更懂代码,但招聘往往并不偏爱开发转测试

从表面看,开发转测试似乎是一个非常合理的路径:开发懂代码、懂架构、懂实现细节,按理说做测试开发应该更有优势。但现实中,很多团队在招聘测试开发时,反而会对纯开发背景转测试保持谨慎。

这并不是对能力的否定,而是对角色认知差异的担忧。

首先,开发和测试在思维起点上就不一样。

开发的核心目标,是把事情做成。

在需求明确、方案既定的前提下,功能跑通、本次需求交付完成,往往就是阶段性成功。

而测试开发的核心目标,是尽可能提前发现事情可能会出问题的地方。

需要在方案还没完全敲定、代码还没完全落地时,就开始反向思考风险和失败路径。

很多开发转测试的人,在早期都会不自觉地带着实现视角。

更容易站在够用即可的位置,而不是持续追问极端情况下系统会怎样。

其次,开发更容易天然地为代码和方案辩护。

这不是主观问题,而是一种长期形成的职业惯性。

当你亲手设计和实现过大量功能后,很难在心理上迅速切换到一个完全反向的角色。

在评审或讨论中,容易出现替方案解释合理性、低估异常概率、用后续优化换当前推进的倾向。

而测试开发,往往需要站在一个不太讨喜的位置,把这些问题一遍遍拉回台面。

第三,招聘真正担心的不是技术,而是角色认同。

测试开发不是过渡岗位,也不是技术退路。

它意味着你要长期接受一个现实:

  • 你做了很多事,但不一定被感知。

  • 你阻止了很多问题,但它们不会被记录为成功。

  • 你更多是在降低损失,而不是创造显性收益。

如果一个人内心仍然把测试当成次优选择,这种心态迟早会在工作中显现。

这也是为什么面试中,面试官会反复追问转岗动机。包括应届生面试中,如果同时投递了开发和测试开发,也会反复追问职业规划。

最后需要说明的是,这并不意味着开发不能成为优秀的测试开发工程师。

一旦完成角色认知和思维方式的切换,我认为确实有开发背景的人往往上手更快、上限也更高。我的身边就存在着既有深厚技术功底又有极好风险意识的开发,也正是这样的人给我带来职业危机感,促使我不断学习进步。