关于 fuzz
用于通过模糊测试框架检查代码分析规则的技能,指导开发者运行针对性或语料库测试,并处理发现、保存回归用例和报告结果。
主要功能
- 01运行针对规则的模糊测试
- 02按标签测试规则组
- 03使用预备的仓库语料库
- 04排查崩溃与误报
- 05保存回归用例并重放种子
适用场景
- 01在定向测试通过后检查规则
- 02在真实仓库中测试规则行为
- 03重现并调查模糊测试发现
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ millionco/ react-doctor --skill fuzz安装后在 Claude Code 中输入/fuzz确认已加载。
详细介绍
模糊测试规则
通过针对性规则测试后,使用 packages/fuzz。阅读其 README.md,了解测试框架架构和语料库设置。
运行测试框架
先运行目标规则:
FUZZ_RULE=<rule-id> FUZZ_STRICT=1 FUZZ_ITERATIONS=500 nr fuzz
有用的变体:
nr fuzz
FUZZ_RULE=<rule-id> FUZZ_SEED=42 nr fuzz
FUZZ_INVARIANTS=1 nr fuzz
FUZZ_CORPUS_DIR=<repository-directory> nr fuzz
FUZZ_RULE=<rule-id> FUZZ_PRINT_SILENT=1 nr fuzz
确认目标规则会触发。未触发的规则只会执行提前退出逻辑。如果规则一直未触发,请在 packages/fuzz/src/snippet-pools.ts 中添加可触发的代码形态,然后重新运行。
使用 FUZZ_TAG=<tag> 代替 FUZZ_RULE,以测试整个注册表类别。
建议进行完整扫描(例如在发布一批规则之前),并将语料库指向真实代码仓库。现成的语料库可在任何机器上使用,详见软件包 README 中的“Canonical corpora”:bun scripts/sync-fuzz-corpus.ts 会生成一个固定版本的 48 个仓库样本(存在 RDE 缓存时创建符号链接,否则克隆仓库),而 bun scripts/build-bench-corpus.ts 会从 react-bench 中提取 RD-health 诊断密集型目标文件:
cd packages/fuzz
bun scripts/sync-fuzz-corpus.ts
FUZZ_INVARIANTS=1 FUZZ_ITERATIONS=100 FUZZ_CORPUS_DIR=tmp/corpus-repos nr fuzz
当规则变更影响常见语法时,运行直接误报检查:
cd packages/fuzz
bun scripts/hunt-false-positives.ts
分类处理发现
复现用例位于 packages/fuzz/tmp/fuzz-findings/。
- 崩溃:精简程序,添加不会抛出异常的回归测试,修复规则,并重放种子
- 慢速用例:分析异常代码形态,限制遍历范围,并保留现有阈值
- 判定结果下降:修复依赖偶然语法结构的检测逻辑,并在适当时将规则添加到稳健性门禁
- 不变量违反:判断规则是否应对重写作出反应;修复意外变更并进行测试
- 误报:将有效程序添加到规则测试和模糊测试回归语料库中
重放一条发现记录:
FUZZ_RULE=<rule-id> FUZZ_SEED=<seed> FUZZ_ITERATIONS=1 nr fuzz
保留误报用例
对于每个确认的误报:
- 在
packages/fuzz/corpus/regressions/<rule-id>--<slug>.tsx中添加最小测试样例。 - 在测试样例头部注明规则 ID、弱点类别和源代码。
- 在规则测试套件中添加一个针对性的有效用例。
- 如果现有代码池无法生成该弱点,则添加一个生成器代码片段。
- 运行
nr -C packages/fuzz test并重放目标规则。
使用稳定的弱点名称,例如 library-idiom、control-flow、wrapper-transparency、name-heuristic、alias-guard、cross-file、framework-gating、paren-shape、default-parameter、dynamic-computed、private-member 或 copy-tracking。
项目级死代码和依赖项发现应放在核心测试中,而不是规则模糊测试器中。
报告结果
记录命令、目标规则触发次数、发现结果、重放种子、语料库测试样例和生成器变更。将已确认的实现问题交给 rule-validate 处理。