
BugRewind 用真实测试执行定位回归的起始提交
来源标题:Bugrewind
BugRewind 通过真实运行测试而非猜测,来调查测试在两次提交之间开始失败的原因。其 find 命令用二分查找在历史中定位首个测试失败的提交,N 个提交约需 log2(N) 次测试运行。目前项目处于 v0.2 早期开发阶段,仅 replay 和 find 两个命令已实现。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
BugRewind 用真实的测试执行而非猜测,来排查为什么某个测试在两个提交之间开始失败。状态:早期开发阶段(v0.2)。bugrewind replay 和 bugrewind find 已实现。下方路线图里的其他内容尚未实现。
bugrewind replay 在基线提交和头部提交上运行同一组 vitest 测试,每个提交都在自己的临时 git worktree 中进行,然后比较结果:它绝不会报告自己没观察到的通过。regression-reproduced 表示两个提交之间的行为不同;它并不说明是哪个改动导致的。
给定一个测试通过的提交(--good)和一个测试失败的提交(--bad,默认为 HEAD),find 会在两者之间的历史中做二分查找,并报告测试首次失败的提交,附上作者、提交信息以及自其前一个提交以来发生变化的文件。对于 N 个提交,它只需要大约 log2(N) 次测试运行。
npm run dev -- find --good v1.2.0 --bad main --file src/auth/session.test.ts --yes
只有当肇事提交的前一个提交确实被运行且通过、并且肇事提交确实被运行且失败时,结果才会被报告为 culprit-found。如果中途某个提交无法测试(崩溃、没有测试、超时),结论为 inconclusive,并给出剩余范围。它沿着第一父提交历史进行,假设失败只出现一次并持续存在,并且可能被不稳定的测试误导。
需要 Node.js 20 或更新版本(Linux 或 macOS;暂不支持 Windows)
需要 git
需要一个使用 vitest 的项目,且依赖已安装(node_modules 会被链接进各个 worktree)
开发 npm install npm test npm run typecheck
用法 npm run dev -- replay --base HEAD~1 --head HEAD --file src/auth/session.test.ts --yes npm run dev -- replay --base v1.2.0 --head main --test "refreshSession" --json --yes
选项
含义
--base <ref>
基线提交或引用(默认 HEAD~1)
--head <ref>
头部提交或引用(默认 HEAD)
--file <path>
要运行的测试文件
--test <pattern>
测试名称模式(vitest -t)
--timeout <s>
单次运行的超时时间(默认 120)
--node-modules <path>
要链接进 worktree 的 node_modules
--json
机器可读的输出
--yes
必填:确认两个提交中的测试代码可能在本机运行
退出码(两个命令相同):0 未观察到回归(或已修复),1 回归已复现 / 已找到肇事提交,2 用法或运行时错误,3 无法确定或已经处于失败状态。
你的工作区、索引和未提交的改动永远不会被修改。
只有在加上 --yes 时才会执行测试代码。测试代码可以运行任意命令:请只在信任的代码上使用。
名称看起来像密钥的变量(*API_KEY*、*TOKEN*、*SECRET*、*PASSWORD*)不会被传给测试进程。
不会通过网络发送任何内容。这个版本里没有任何 AI 组件。
局限性
仅支持 vitest。
node_modules 是从你的项目共享的;提交之间的依赖差异不会被复现。
测试所需的环境变量、服务和数据不会被重建。
未提交的改动不会包含在任何一次运行中。
🔍 工作原理
隔离:为基线提交和头部提交分别创建临时、隔离的 git worktree。
执行:在两个环境中分别独立运行你的 Vitest 测试套件。
比较:分析结果并给出明确的结论(regression-reproduced、culprit-found 等),同时不改动你当前的工作目录。
路线图(尚未实现) 证据引擎与报告、基于 AST 的影响分析、可选的 AI 分析(OpenAI/Gemini)、MCP 服务器、回归测试生成。
见 CONTRIBUTING.md 和 SECURITY.md。变更记录在 CHANGELOG.md 中。 你可以用 npx 立即运行 BugRewind:
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。