上个月被裁的那天,HR把我叫到会议室,桌上放着两张纸:一张《优化沟通函》,一张《保密与竞业补充协议》。她说话轻得像脚尖落地:“公司业务收缩,我们很遗憾……”我盯着玻璃门外那条走廊,想起这几年在公司过的夜:凌晨两点的回归、三点半的线上告警、五点写完的postmortem。我的工牌还热着,门禁却已经被后台关了。补偿是N+1,但绩效打了个“B-”,我知道那意味着少一截钱。收拾工位时,我把笔记本电源从插线板上拔下来,抽屉里还有没喝完的速溶咖啡包,旁边压着一叠没合并的测试用例评审意见。那一刻我忽然很确定:没人会记得是谁通宵盯过Jenkins的红灯,又是谁在群里背过“上线回滚责任不清”。
我做测试八年,几乎把自己揉进了流程里: ——需求评审会上提醒“边界条件”,产品笑着说“先不考虑那么极端”; ——提了工单让后端处理并发下的脏读,开发说“线上不会那么巧”; ——灰度那晚触发了缓存穿透,流量打歪,凌晨两点我们清链路、补指数,研发群里只剩我和另一个同事在回帖; ——第二天的复盘里,P0事故被改成“P1(短时影响)”,而“测试未提前预判场景”写进了结论。 我以为“背锅”是职业常态,直到娃出生,奶粉、纸尿裤、体检卡一张张压上来,我才意识到:再熬下去,熬的是娃的口粮。
卡里只剩下最后一点缓冲,我去中和的二手车行,花八千买了辆跑了十万公里的旧比亚迪电车,办了滴滴车主。方向盘握在手里,我告诉自己:把测试里那套“拆问题—做评估—控风险”的方法论,挪到新的活法里。
第一晚就吃瘪。十点多,在中和湿地公园接了个醉汉。上车就瘫在副驾,酒气拌着粗口。我要求他系安全带,他推我胳膊:“你管老子!”我没回嘴,手心冒汗。后备箱里躺着娃的空奶粉罐。我把车速控制在“安全+不至于被催”的区间,像在灰度时限流。把人送到门口,他绊了一下,回头骂我“破车”。我盯着表显里程和电量,掰手指把这单扣掉电费算了三次:只够两小罐最便宜的奶粉。那一下鼻子发酸,比看CI流水线连续红三次还疼。
晚高峰的天府五街,比回归用例更磨人。接了个去环球中心的单,我刚并入主路就被堵死。三轮车突然斜切,我轻点刹车避开。后座乘客不耐烦:“你会不会开车?”我解释这段路太乱,他直接掏手机拍车牌,说要投诉我慢。我只好在喇叭和雨点里盯三件事:车流的节奏、电池SOC、以及后座那口气随时会炸。送到后,我后背汗透。时间硬生生比预计多了四十分钟,后面两单被迫取消。那点损失,换算成我熟悉的“成本表”:两天盒饭,或一包纸尿裤。
为了抢天府机场的早单,我五点起床,在中和大道便利店买个凉包子。刚咬两口,单来了。客人上车第一句:“座椅套怎么起球成这样?”我没说那是前车主留下的——换新的,就是两包纸尿裤的钱。快到机场她说手机落家里,先送进去,回头加我微信转钱。我犹豫了,平台不允许私下交易。她急得快哭,我点了头。直到现在,她的好友申请没通过。那一百多,我在天府五街堵着,又跑了三单短途才补回来。每跑一单我都像值夜班:眼里三件事不停切换——盯前车、盯侧后窜出来的自行车、盯电量从18%掉到15%。快充排队,慢充要等,尖峰电价贵;像极了看日志找根因:每个选项都要付出代价。
夜里回家,门刚开,娃的哭声像报警短信。我老婆抱着孩子,眼睛肿得像核桃:“他又吐奶了,是不是奶粉太便宜?”我把脸埋在她肩头,不敢让她看到我红的眼眶。白天拉过一个老奶奶,她说她孙子喝三百多一罐的奶粉,“贵但放心”。我没接话。做测试时,我把“放心”这个词写在报告里要斟酌半天;做父亲以后,发现“放心”的成本比我想的高太多。
有一次在中和二街等红灯,旁边一辆宝马摇下窗,主人看我的眼神里有点不屑。我想起以前在写字楼里夹着电脑走廊快步穿梭,工位上堆着“覆盖率”“通过率”“缺陷密度”的报表,节前一定要“清零”。线上挂了Sev1,大家抢工单,我第一个去定位链路;出了结论,“测试未覆盖到X场景”会被加粗。那会儿我告诉自己:忍忍,熬过去也许能涨一点工资,给娃换好点的奶粉。结果,熬到最后换来的是“优化”。现在,我不再纠结92还是95,却要在几个充电站之间来回比:这个港湾的快充枪坏了,那边排队七辆,旁边的目的地桩是贵的尖峰价。绿灯亮,我只敢轻点电门,生怕地板电踩深了,耗电就像压测时QPS一样猛涨。后视镜里,中和的路灯一盏盏退后,像把体面一行行删掉。
昨天暴雨,在环球中心接到一位赶时间的乘客。雨刮器卖力,视线还是糊。天府五街有段积水,一辆自行车横穿,我猛打方向避开,车身一晃,她尖叫:“你会不会开车!迟到要扣工资,你赔得起吗?”我道歉,说雨太大、自行车多,慢点安全。她更不耐烦。我不再回嘴,心里却像被雨灌满:我也怕迟到,怕少接一单,怕今晚电量掉进红区,只能在暴雨里排队快充。做测试挨骂时,至少还有个会议室;跑滴滴受委屈,连个说理的地方都没有。
我试着把测试的肌肉移植到路上: — 以前写用例,现在拆线路:从中和老街到天府五街,哪些口子更少三轮乱入,哪个时段电价更低; — 以前盯Jenkins的红灯,现在盯中控的SOC,从22%到15%,再到“预计剩余里程”,每一个点都是阈值告警; — 以前做回归,现在做“绕行回归”:某个路口一旦出现一次险情,我就标记为“复现概率高”,下次自动规避; — 以前写postmortem,现在写“自我申诉”:乘客投诉我开得慢,我把全程轨迹、路况截图、交管实时信息拼起来,像写事故复盘一样自证清白——多数时候没人看,但我还是做。
冬天快到了,我开始研究热泵、空调制热的能耗,雾天怎么除雾不至于电耗飙升,雨天怎么设定能量回收不让后座晕车。有人觉得这很极客,可我只是算账:每百公里少1度电,一个月能省下来的,可能就是娃更好的纸尿裤。一边跑一边想起以前在项目上争取“把上游那个埋点再提前两秒”,别人说“没必要”;现在我会为了提前两分钟去错峰充电,在谷段把电补满,第二天就能多接两单。
每天把车停在中和的停车场,我都会先不下车。仪表盘像我的日报:今天收入多少,扣掉平台抽成和电费,还剩几何;这条路线的平均能耗是多少;哪几个口子风险高需要规避。娃的笑,会在我脑子里像个小icon亮一下。那是唯一让我觉得“通过”的指标。
我知道自己不再年轻,也知道测试岗位不等人。可我也知道,八年里练出来的东西不会全白费:把问题拆小、把风险兜住、把坏运气当作异常流处理。只要方向盘还在手里,只要那盏家里的灯还亮着,我就继续开下去。哪怕慢一点,哪怕挪着走,也要把车往前挪,把日子往前挪。 就像写最后一版用例:不完美,但覆盖到关键路径;不漂亮,但能跑通主流程。等娃不哭的那一晚,我想重新把简历打开,把这段“中和夜班司机”的经历,也写进“问题定位与风险管理”的一行里——不是丢脸,是我活下来的证据。