找 Bug:用对拍预言机把模糊测试做到极致
来源: matklad.github.io
概述
针对随机化测试是否比例子式单元测试更有效的争论,matklad 亲手写了一个针对 Rust regex crate 的模糊测试器:用 regex 与 regex_lite 互为预言机对拍,先复现了别人找不到的那个 bug,又额外发现了一个。
核心要点
- 争议起于有人说自己的通用模糊测试器找不到 regex crate 里那个刁钻的 bug。
- 测试算法的第一要务是与已知正确答案比较:同时实现 O(N log N) 与 O(N²) 两个版本对拍。
- 没有预言机不是借口——为系统造出预言机本来就是设计可靠系统的一部分职责。
- 生成输入时应倾向小而刁钻的例子,而不是巨大均匀的随机串,断言字符全相同的字符串更容易触发 bug。
- 技巧包括先用 swarm 方式随机选字母表子集,再随机长度生成字符串,并复用内存以避免分配开销。
- 生成正则时按权重随机启用交替、重复、通配与字面量,始终让字面量权重非零。
- 当一个 bug 躲过了模糊测试器,正确的第一反应是把它当作模糊测试器本身的 bug,修好之后再谈修复与单元测试。
金句
每当有一个 bug 躲过了你的模糊测试器,你的第一件事就是把它当成模糊测试器的 bug。
👍 0
👎 0
← 返回 Lobsters 首页