我把断言写得太宽松,它几乎不可能失败。我把它记在心里,没跟任何人说。我发现这个 bug 是上个版本修过又回来的。连茶水间都安静了

测试用例写了三百条,线上 bug 出在没写的那一条。我深呼吸了一下,决定从最可疑的地方查起。我在本地跑了十遍,一遍都没复现,像见鬼一样。我把这条经验写进了团队 wiki

单测覆盖率百分之九十,剩下的百分之十里藏着生产事故。我想了想,觉得这话没法接。我在心里给这次的测试结论加了一句「建议灰度」。幸好之前留了备份

测试最难的不是发现 bug,是证明它真的被修好了。我停了一下,然后继续手上的活。我把失败截图贴到群里,@了三个相关同学。世界瞬间清净了

代码写得越久越胆小,删一行注释都要先备份再全量测试。我愣了两秒,然后继续敲代码。我在心里给这次的发布计划留了回滚窗口。好在最后有惊无险

测试最难的不是发现 bug,是证明它真的被修好了。我想了想,觉得这话没法接。我发现这个用例在 CI 上偶发失败,重跑就好。我沉默了,但心里是服的

这个模块的覆盖率很高,覆盖的都是简单分支。我愣了两秒,然后继续敲代码。我把这个用例的数据造得和线上一样,问题终于复现。复盘会上我们把它列成了案例

质量的上限由需求和设计决定,测试只是最后的网。我停了一下,然后继续手上的活。我把这个功能的验收测试写成了清单,逐条过。第二天这个方案就变成了团队标准做法

测试用例写了三百条,线上 bug 出在没写的那一条。这套流程走下来,我从头到尾又确认了一遍。我发现这个 bug 是上个版本修过又回来的。我把这条经验写进了团队 wiki

这个偶发失败的用例,重跑一次就是绿的。我忽然觉得,这可能就是这一行的常态。我把这个用例的名字改得更清晰了,一眼知道测什么。这大概就是程序员的人生吧