寓言
两本成绩单
老林的自动化测试工坊接了一家大客户的订单,客户要求在三个月的试用期内把每条测试流水线的成功率做到百分之九十五以上。老林让团队堆人力、加容错、把重试次数拉满,月底交了一份漂亮的报表:任务成功率百分之九十七。
客户看了报表很高兴,决定续签年度合同。但续签之后第二个月,客户的运维主管找上门来,说你们的流水线虽然最终任务完成了,但每条任务平均重试了四遍半,单次任务动辄跑四十多分钟,后半夜还在排队。成本翻了三倍,下游团队天天加班等结果。
老林把原始日志翻出来重新算了一遍。数据不骗人:任务成功率确实有百分之九十七,但步骤成功率只有百分之六十二。一个典型的测试任务有八个步骤,平均要失败三个、重试三个,最后靠重试机制硬把任务兜住了。
老林把两条曲线画在同一张图上。任务成功率是一条平滑的上坡线,一路爬到百分之九十七。步骤成功率是一条锯齿线,冲到六十几就掉下去,再爬再掉,反复震荡。客户看着这张图沉默了三十秒,说:原来我们付了三倍的钱,买的是同一个结果。
老林跟客户一起把每条流水线的步骤拆开,逐项分析哪一步失败率最高、失败原因是超时还是资源不够、能不能在步骤层面修复而不是靠任务级别的重试硬扛。他们把超时的外部 API 调用改成了异步队列,把几个容易冲突的数据库锁操作拆到不同的时间窗口。
三个月后,任务成功率还是百分之九十七,但步骤成功率从百分之六十二涨到了百分之八十九。单条流水线的平均运行时间从四十分钟降到了九分钟。客户运维主管发来一条消息:昨晚所有流水线跑完,凌晨一点就全结束了。
老林在年终总结里加了一个新规矩:以后任何流水线评估,报表第一行写任务成功率,第二行必须跟步骤成功率。两个数字之间的缺口直接用红字标注,缺口越大,问题越严重。
他给同行讲这件事的时候说了一个比方:任务成功率是看终点线,步骤成功率是看整条跑道上摔了几跤。一个人如果能一口气跑完,另一个人摔了五次爬起来五次,两个人同时撞线,但体力和鞋底磨损完全不一样。