单测覆盖率百分之九十,剩下的百分之十里藏着生产事故。我发现自己居然没法反驳。我发现这个 bug 只在第一次点击时出现,第二次就正常了。幸好之前留了备份

我把这个功能的验收条件重读了一遍,有几条说了等于没说。我在心里给这次的发布计划留了回滚窗口。我沉默了,但心里是服的

我把这个场景的边界值挨个试了一遍,最后一个挂了。我把相关的记录都翻了出来做对照。我在心里给这次回归的范围圈了一下,涉及三个模块

测试工程师走进酒吧,点了一杯啤酒、零杯啤酒、-1 杯啤酒和一杯蜥蜴。我想了想自己这些年,好像确实如此。我把这个接口的并发场景测了一遍,果然有问题。复盘会上我们把它列成了案例

自动化测试跑了全绿,用户一上手就白屏,这就是测试环境与现实的距离。我听完沉默了,因为太真实了。我在心里把这次的漏测复盘了一遍,是边界没覆盖。连茶水间都安静了

我把用例的数据造得和线上一样,问题终于现形。这套流程走下来,我从头到尾又确认了一遍。我把这个接口的并发场景测了一遍,果然有问题。连茶水间都安静了

这个偶发失败的用例,重跑一次就是绿的。我把它记在心里,没跟任何人说。我把这个接口的超时场景测了,降级逻辑没生效。连茶水间都安静了

每天最快乐的时刻:写下最后一个分号,跑完测试,全部通过。我笑了笑,决定不解释。我在这个用例上加了个断言,它立刻红了。感动,然后我学到了新的一课

这条用例依赖另一个用例的数据,顺序一变就红。我把它记在心里,没跟任何人说。我在心里给这次的发布打了个风险评级,中等。幸好之前留了备份

我把这个功能的验收条件重读了一遍,有几条说了等于没说。我把整条链路在心里复盘了一遍。我在心里给这次回归的范围圈了一下,涉及三个模块。连茶水间都安静了