

做了这么多年测试,见过形形色色的项目,踩过大大小小的坑。有些事情,时间久了会淡忘,但有些话,只要一听到,脊背就发凉。
不是因为这话本身有多恶毒,而是因为——每一句的背后,都藏着一场你预感得到、却阻止不了的灾难。
说这话的,通常是产品经理,偶尔是开发,极少数情况下是你的老板。
“简单”这个词,是测试行业的诅咒。
凡是被说成“简单”的功能,要么需求文档语焉不详,要么涉及的上下游系统多达七八个,要么是某个已经在线上跑了三年、从来没人动过的祖传模块。
我经历过一次“就改了个文案”的上线,结果那个文案字段牵扯到了国际化配置,国际化配置又跟支付金额显示有关联,最终在海外用户侧触发了一个小数点精度问题。
退款处理花了两周。
从那以后,每次听到“很简单”,我都会在心里默默加一条:越简单,越要认真问清楚。
这句话的翻译版本是:“我们还会继续改的,而且改的时间点你猜不到。”
需求会变,这是行业共识。但每次听到“这是最终版”,测试负责人的压力并不会减少,反而会增大——因为一旦对方真的信了这句话,测试资源就会按“最终版”来分配,回归计划、自动化覆盖、文档归档……全部按这个基线来做。
然后某一天,产品过来说:“改了一点点,只是加了个字段,你们再过一遍就好。”
“一点点”三个字,是另一个诅咒。
字段加了,数据库表结构改了,接口版本升了,前端联调出了问题,而当初的测试用例已经按“最终版”归档,覆盖那个新字段的用例根本不存在。
需求没有最终版,只有当前版。
这句话最危险的地方,不在于“小问题”本身,在于“先别动”三个字。
“先别动”的意思,通常是:没有人知道谁来负责这件事,也没有人打算去弄清楚。
小问题会生长。
一个没有修复的边界条件Bug,在流量低的时候毫无存在感;等到活动大促,流量翻了十倍,它就从“偶发”变成了“必现”。
更麻烦的是,“先别动”说久了,就变成了默认状态。半年后,新来的同事看到这个问题,不知道背景,修了一半;老开发说“这个动不得,有历史原因”;测试这边既没有用例,也没有文档,整个团队对这个问题的认知只停留在“反正存在,反正没人管”。
直到它爆炸的那一天。
线上问题没有“小”,只有“还没爆”。
这是测试负责人最常面对、也最两难的处境。
项目延期了,开发超时了,上线时间不能动——于是所有人都看向测试,因为测试是最后一个环节,也是最容易在表面上“压缩”的环节。
说“砍一砍”的人,大多不是出于恶意。他们只是不知道——测试时间被压缩,风险并不会消失,只是从“测试阶段发现”变成了“用户发现”。
代价是一样的,甚至更高。
测试负责人在这种时候最难受。答应了,良心过不去,而且真出了问题,第一个被追责的是测试;不答应,又显得不配合、不顾大局。
我见过最聪明的做法,是把“砍”变成“选”:不是砍掉测试,而是把砍掉哪些测试的决定权,还给提出这个要求的人。
把风险列清楚,逐条说明,哪些用例覆盖的是核心流程,哪些覆盖的是边缘场景,每条对应的风险等级是什么。然后说:“你来决定砍哪些,我来执行,风险你来签字确认。”
通常说完这句话,时间会神奇地多出来。
说这句话的时机,一般是:线上事故复盘会,台上坐着七八个人,气氛凝重。
测试是容易背锅的角色,这是行业现实。但这句话真正让测试负责人寒心的,不是“被怼”,而是说这句话背后隐藏的逻辑:测试是质量的最后一道门,出了问题就是测试没把好关。
这个逻辑本身就是错的。
质量不是测试出来的,是开发出来的。测试的职责是发现问题,而不是制造质量。如果开发阶段的单测覆盖率是0,代码审查走个形式,联调靠嘴说,那么无论测试多努力,都是在用人力去补偿流程的缺失。
更现实的问题是:需求文档没有写清楚的边界条件,算谁的测试范围?上线前半小时改了代码、没有通知测试重新回归,算谁的责任?
出了问题,要问的第一句话不是“测试为什么没发现”,而是“这个问题是在哪个环节引入的”。
这五句话,每一句都不是在针对个人,说这些话的人,大多也只是在各自的压力下做出的反应。
但测试负责人的难,就难在这里——你要在这些话砸下来的时候,既能扛住压力,又能把真正的问题说清楚,还要让项目继续往前走。
没有什么标准答案,只有一次次的经验和一点点磨出来的判断力。
如果你也有那句“最怕听到的话”,欢迎留言,说不定我们怕的是同一句。