56 个故障注入测试全过,唯一没注入故障的那个挂了
来源:dev.to — 2026-09-13
📋 概述
作者在为「数据含义悄悄变化」做检测工具,并用 56 个已知根因的种子缺陷做基准,得分 55/56。但只由故障组成的基准无法回答「会不会误报」,于是他加了四个正确答案是安静的控制组,其中「什么都不改」的那个直接失败:一次报出三处高危信号。原因是两个叠加的失真:HyperLogLog 的近似计数在不同运行之间波动可达 30%,而阈值只有 10%;以及 DuckDB 并行聚合导致浮点求和顺序不确定,第十五位小数的差异就足以改变去重结果。
🔑 核心要点
- 只包含故障的基准只能判断「会不会触发」,判断不了「会不会触发得太多」。
- 控制组「什么都不改」失败了,报出三处高危信号。
- HyperLogLog 的估计在同数据两次运行间波动可达 30%,而判定阈值只有 10%。
- 并行聚合让浮点求和顺序不确定,数学上相同的分组在第 15 位小数产生差异。
- 修法是精确计数、浮点先四舍五入到 6 位,同样的两次运行现在零信号。
💡 金句
确定性不是锦上添花,而是检测的前提:如果你的测量过程自带方差,你就造了个挂了阈值、带报警功能的随机数生成器。
👍 0
👎 0
← 返回 dev.to 首页