L1.11.1stochastic defects will not replay设计研究
同一输入得到不同输出使缺陷难以复现,用户报告的问题可能无法重演
别名: 缺陷不可复现 · 报告无法重演 · non-reproducible bug
概念解释
用户截了一张错的图,工单写着「我输入了这句话」。支持按原句再跑,得到另一段,错没了,工单被标成无法复现。错仍可能在分布里。随机缺陷不会按需重演(stochastic defects will not replay):报告描述的是一次采样,复现按钮描述的是另一次。
这不是「输出会变」给终端用户看的那一面,是缺陷管理被抽样拆掉的那一面。
机制
传统缺陷默认失败是状态的函数。给定输入和环境,应当再得到失败。采样把失败变成分布上的事件,复现的成功概率是该事件的质量,可能只有几个百分点。支持流程把一次未重演当成「用户环境问题」或「已经好了」,于是低概率但高伤害的错在队列里饿死。
用户侧同样受挫:他们被要求「再试一次给我们看」,再试一次抽到了正常点,被体验成不被相信。报告成本上升,以后更少报。
怎么研究
用已知会以 p 概率出现的植入缺陷,走真实工单流程:用户报、支持重跑 n 次。因变量:工单被关为无法复现的比例、从报告到被当作真缺陷的时间。自变量:n、是否保存原始输出、是否允许「按原输出而不是按原输入」立案。
p 要低。高 p 的植入会让传统流程看起来够用。
边界
温度锁死且全程记种子的内部工具链,在同一版本里可以重演,越出版本就不行——下一张。确定性校验能抓住的结构错误不依赖重演。用户已经把完整输出贴在工单里时,缺的不是重演,是把输出当证据收下来。这条只管「按输入再跑」作为立案条件时的失效。
怎么落地
- 立案主键是那一次输出(或其哈希),不是提示文本。未保存输出的报告,先请用户贴结果,不要先自己重跑再关单。
- 支持重跑最多作为「是否仍高发」的抽样,不能作为「是否存在过」的判决。
- 给用户「把这次结果报告为问题」而不要求他们复现。
- 验证:把一次已知的错输出交给支持,不给种子。若工单因「我这边跑不出来」关闭,流程在用错误的复现定义。再数因无法复现关闭、后来同类输出又出现的单。