auto-test-code(批判性思维驱动的代码自审查技能)
与 bensz-collect-bugs 的协作约定
- 因本 skill 设计缺陷导致的 bug,先用
bensz-collect-bugs规范记录到~/.bensz-skills/bugs/,不要直接修改用户本地已安装的 skill 源码;若有 workaround,先记 bug,再继续完成任务。 - 只有用户明确要求“report bensz skills bugs”等公开上报时,才用本地
gh上传新增 bug 到huangwb8/bensz-bugs;不要 pull / clone 整个仓库。
你要产出的东西
本 skill 的交付不是"口头建议",而是一组可追溯的文件:
(目录位置以 config.yaml:directories.tmp + config.yaml:directories.tests 为准;默认 tmp/run_{timestamp}/tests/;不再使用 reviews/)
tmp/run_YYYYMMDDHHMMSS/tests/vYYYYMMDDHHMM/:A 轮会话目录(计划/过程/结果都在这里)REVIEW.md:A 轮批判性审查(问题清单 + 改进计划)TEST_PLAN.md:测试计划(本轮验证哪些修复点)TEST_RUN.md:测试过程(命令、关键输出摘录、关键决策)TEST_REPORT.md:测试结果(结论 + 证据 + 遗留问题)_artifacts/:中间产物(命令输出、日志、截图、对比结果等)
tmp/run_YYYYMMDDHHMMSS/tests/b-vYYYYMMDDHHMM/:B 轮会话目录(结构同上,REVIEW.md为质量检查报告)
目录与命名规范
- 测试会话 ID:
vYYYYMMDDHHMM(分钟级时间戳) - 运行工作区:
tmp/run_YYYYMMDDHHMMSS/(同一次技能执行的 A/B 轮必须复用同一个run_id) - A 轮会话目录:
tmp/run_YYYYMMDDHHMMSS/tests/vYYYYMMDDHHMM/ - B 轮会话目录:
tmp/run_YYYYMMDDHHMMSS/tests/b-vYYYYMMDDHHMM/ - 兼容:
verify_session.py可识别旧目录名tests/B轮-vYYYYMMDDHHMM/;新建统一使用tmp/run_*/tests/b-vYYYYMMDDHHMM/ - ⚠️
reviews/已废弃:不再创建、不再写入;如目标项目中存在旧的reviews/,应将其视为历史遗留并在审查时排除。
工作流程
隔离工作区硬规则
- 每次 skill 执行开始时,必须先在目标项目根目录创建当次专用工作区:
tmp/run_YYYYMMDDHHMMSS/。 - 所有由 skill 生成的计划、报告、日志、辅助脚本与中间产物,只能写入当前
tmp/run_*/工作区内。 - 运行可能产生缓存或临时文件的命令时,优先将工作目录、
TMPDIR、XDG_CACHE_HOME、PYTHONPYCACHEPREFIX等重定向到当前tmp/run_*/工作区。 - 除了用户明确要求的源码修复外,不得把 skill 相关文件写到
tmp/run_*/之外的位置,以免污染源软件项目。
概览
用户输入(目标代码路径)
↓
[A轮 × N]:静态分析 → 动态推理 → 安全分类审查 → 计划 → 优化 → 轻量测试
↓
B轮:代码质量原则检查 → 针对性优化 → 轻量验证
↓
完成(文档齐全 + 问题闭环)
A 轮代码审查(可重复 N 次)
A.1 初始化会话(生成测试 ID + 目录)
目标:创建本轮的 tmp/run_*/tests/ 会话骨架(计划/过程/结果都在同一目录)。
推荐使用确定性脚本:
# 在目标代码根目录内执行(选择你实际的安装路径)
RUN_ID=run_YYYYMMDDHHMMSS
python3 ~/.codex/skills/auto-test-code/scripts/create_session.py --code-root . --run-id "$RUN_ID" --kind a --id vYYYYMMDDHHMM
# 或
RUN_ID=run_YYYYMMDDHHMMSS
python3 ~/.claude/skills/auto-test-code/scripts/create_session.py --code-root . --run-id "$RUN_ID" --kind a --id vYYYYMMDDHHMM
最低要求:
tmp/run_YYYYMMDDHHMMSS/tests/存在tmp/run_YYYYMMDDHHMMSS/tests/vYYYYMMDDHHMM/REVIEW.md、TEST_PLAN.md、TEST_RUN.md、TEST_REPORT.md存在
A.2 批判性分析与计划生成(写入 tmp/run_*/tests/ 会话目录)
目标:使用批判性思维发现代码中的系统性问题,写成可执行计划,按 P0/P1/P2 排序。
输出:tmp/run_YYYYMMDDHHMMSS/tests/vYYYYMMDDHHMM/REVIEW.md
⚠️ 批判性思维是核心要求:
- 必须使用「刁钻角度」思考(详见
references/CRITICAL_THINKING_FOR_CODE.md) - 必须发现至少 3 个系统性问题(算法设计/边界条件/并发安全/内存安全/安全漏洞/设计质量)
- 禁止列出"不痛不痒"的表面问题(如"缺少注释"等 P2 级别问题不应占多数)
质量要求(强制):
- 每轮至少发现 10 个问题(P0 + P1 + P2 总和)
- 鼓励达到 15-20 个问题
- P0 + P1 占比必须 ≥ 60%
- 系统性问题 ≥ 3 个(算法/边界/并发/内存/安全/架构/设计)
核心要求:
- 独立评估原则(强制):
- 每轮 A 轮必须基于目标代码的当前工作状态独立分析
- 不查看历史
tmp/run_*/工作区中的审查文件 - 每轮都是一次完整的、无偏见的系统性审查
- 审查范围(强制):
- 必须审查:核心源代码文件(以
config.yaml:a_round_check.independent_review.scan_patterns为准) - 必须审查:配置文件、构建脚本、测试代码
- 必须审查:核心源代码文件(以
- 排除范围:
tmp/等 skill 产物目录,以及node_modules/、venv/、__pycache__/等依赖/缓存目录;目标项目的测试代码仍属于必须审查范围 - 全维度覆盖(强制):每轮必须覆盖所有审查维度(以
config.yaml:a_round_check.dimensions为准);不得以“本轮不聚焦”为由跳过任何维度 - 深挖维度(可选):可在全覆盖基础上额外指定 1-2 个深挖维度,对该维度使用刁钻角度做更细致分析;多轮时建议轮换深挖点
- 刁钻角度:在深挖维度上必须使用至少一个刁钻角度(空输入/超大输入/恶意输入/竞态条件/资源耗尽/权限绕过/供应链污染)
- 优先级依据:P0/P1/P2 必须有明确的判定标准
- P0: 崩溃风险、可利用安全漏洞、未授权访问、敏感信息泄露、数据损坏、死锁/活锁、内存泄漏
- P1: 性能问题、边界条件缺陷、逻辑错误、资源泄漏、需要前置条件或组合利用的安全风险
- P2: 代码风格、可读性、冗余代码
- 可追溯性:每个问题必须包含位置、现象、影响、修复建议、验证方法
批判性思维框架(必读):
references/CRITICAL_THINKING_FOR_CODE.md⚠️ 核心文档,必须使用- 框架 1: 静态分析视角(算法设计/数据结构/代码复杂度/设计质量)
- 框架 2: 动态推理视角(边界条件/异常处理/资源管理)
- 框架 3: 问题质量标准(黄金公式 + 质量检查清单)
- 框架 4: 设计质量视角(架构/扩展性/API/状态/建模/耦合/模式)
- 框架 5: 安全漏洞分类视角(CWE/OWASP/STRIDE/七大王国/CVSS)
references/A_ROUND_REVIEW_TEMPLATE.md⚠️ 代码审查计划模板references/CODE_SMELLS.md代码异味识别指南references/SECURITY_PATTERNS.md安全漏洞模式库references/SECURITY_TAXONOMY.md安全漏洞分类审查体系(必须用于安全维度)references/DESIGN_ANTI_PATTERNS.md设计反模式识别指南
A.3 执行优化与轻量测试(写入 tmp/run_*/tests/)
目标:按计划逐项修复,并用轻量测试验证。
输出:
- 过程:
tmp/run_YYYYMMDDHHMMSS/tests/vYYYYMMDDHHMM/TEST_RUN.md - 结果:
tmp/run_YYYYMMDDHHMMSS/tests/vYYYYMMDDHHMM/TEST_REPORT.md
轻量测试原则:
- 只验证"核心路径"与"本轮变更点"
- 每条结论必须有可复现证据(命令输出、日志、对比结果)
- 中间产物放入
tmp/run_YYYYMMDDHHMMSS/tests/vYYYYMMDDHHMM/_artifacts/
可选增强:
python3 ~/.codex/skills/auto-test-code/scripts/verify_session.py --require-review tmp/run_YYYYMMDDHHMMSS/tests/vYYYYMMDDHHMM
# 或
python3 ~/.claude/skills/auto-test-code/scripts/verify_session.py --require-review tmp/run_YYYYMMDDHHMMSS/tests/vYYYYMMDDHHMM
说明:verify_session.py --strict 仅用于你已将会话文档中的模板占位符全部替换后的最终自检;新建骨架默认会失败(属于预期行为)。
A.4 是否进入下一轮
⚠️ 强制检查:
- 本轮已提出至少 10 个问题(P0 + P1 + P2 总和)
进入下一轮 A 轮的条件:
- 用户指定的轮次数未完成
- 本轮问题(P0/P1/P2)已全部闭环
重要:A 轮结束后,必须进入 B 轮代码质量检查。
B 轮代码质量检查
⚠️ 强制执行:B 轮代码质量检查是自动测试流程的强制性环节。
B.1 产出质量检查报告(写入 tmp/run_*/tests/ 会话目录)
目标:对 A 轮后的最新代码做系统性质量检查。
输出:tmp/run_YYYYMMDDHHMMSS/tests/b-vYYYYMMDDHHMM/REVIEW.md
推荐使用确定性脚本创建 B 轮会话目录:
# 在目标代码根目录内执行(选择你实际的安装路径)
RUN_ID=run_YYYYMMDDHHMMSS
python3 ~/.codex/skills/auto-test-code/scripts/create_session.py --code-root . --run-id "$RUN_ID" --kind b --id vYYYYMMDDHHMM --a-test-id vYYYYMMDDHHMM
# 或
RUN_ID=run_YYYYMMDDHHMMSS
python3 ~/.claude/skills/auto-test-code/scripts/create_session.py --code-root . --run-id "$RUN_ID" --kind b --id vYYYYMMDDHHMM --a-test-id vYYYYMMDDHHMM
检查维度(以 config.yaml 的 b_round_check.dimensions 为准):
- 算法复杂度分析
- 边界条件覆盖
- 异常处理完整性
- 资源管理(内存/文件/连接)
- 并发安全性
- 安全漏洞分类审查(CWE/OWASP/STRIDE/七大王国/CVSS)
- 代码可读性与可维护性
- 测试覆盖充分性
- 设计质量(可扩展性/架构/API/状态/建模/耦合/模式)
模板:templates/B_ROUND_CODE_QUALITY_TEMPLATE.md
B.2 B 轮优化与验证(写入 tmp/run_*/tests/)
⚠️ 强制修复要求:
- B 轮发现的 所有 P0-P2 问题都必须处理
- P0 问题必须修复
- P1 问题必须修复(除非有合理理由)
- 每个修复必须有验证证据
完成条件:
- P0 问题修复率 = 100%
- P1 问题修复率 ≥ 80%
- 所有修复都有可复现证据
完成条件(验收)
- 用户指定的 A 轮次数已完成
- B 轮代码质量检查已完成
- 每轮 A 轮平均问题数量 ≥ 10 个
- 每轮 P0 + P1 占比 ≥ 60%
- 每轮系统性问题 ≥ 3 个(算法/边界/并发/内存/安全/设计)
- 关键问题(P0/P1)已闭环
-
tmp/run_*/tests/会话结构完整且可追溯(每轮都有 REVIEW/PLAN/RUN/REPORT + artifacts)
可复用资源
- 配置:
config.yaml - 模板:
templates/- A 轮审查:
templates/CODE_REVIEW_TEMPLATE.md - B 轮质量检查:
templates/B_ROUND_CODE_QUALITY_TEMPLATE.md - 测试计划:
templates/SESSION_TEST_PLAN_TEMPLATE.md - 测试过程:
templates/SESSION_TEST_RUN_TEMPLATE.md - 测试报告:
templates/SESSION_TEST_REPORT_TEMPLATE.md
- A 轮审查:
- 参考:
references/- 批判性思维指南:
references/CRITICAL_THINKING_FOR_CODE.md⚠️ - A 轮审查结构:
references/A_ROUND_REVIEW_TEMPLATE.md⚠️ - 代码异味识别:
references/CODE_SMELLS.md - 安全漏洞模式:
references/SECURITY_PATTERNS.md - 安全漏洞分类审查体系:
references/SECURITY_TAXONOMY.md⚠️ - 边界条件检查清单:
references/BOUNDARY_CHECKLIST.md - 设计反模式识别:
references/DESIGN_ANTI_PATTERNS.md
- 批判性思维指南:
- 辅助脚本:
scripts/create_session.py - 辅助脚本:
scripts/verify_session.py