夏洛克审查Skill sherlock-review

该技能用于进行证据基础的代码审查,使用演绎推理调查代码问题,验证实现声称、调查bug、确认修复或进行根本原因分析。包含关键词:代码审查、证据调查、Bug分析、修复验证、质量保证。

测试 0 次安装 0 次浏览 更新于 3/9/2026

name: sherlock-review description: “使用演绎推理进行证据基础的调查代码审查,以确定实际发生的情况与声称的情况之间的差异。用于验证实现声称、调查bug、确认修复或进行根本原因分析。通过系统观察找到真理的基本方法。” category: quality-review priority: high tokenEstimate: 1100 agents: [qe-code-reviewer, qe-security-auditor, qe-performance-validator] implementation_status: optimized optimization_version: 1.0 last_optimized: 2025-12-03 dependencies: [] quick_reference_card: true tags: [investigation, evidence-based, code-review, root-cause, deduction]

夏洛克审查

<default_to_action> 在调查代码声称时:

  1. 观察:收集所有证据(代码、测试、历史、行为)
  2. 推理:证据实际显示什么 vs 声称是什么?
  3. 排除:排除不可能的情况
  4. 结论:证据是否支持声称?
  5. 文档:记录发现,基于证明而非假设

三步调查法:

# 1. 观察:收集证据
git diff <commit>
npm test -- --coverage

# 2. 推理:比较声称与现实
# 代码是否匹配描述?
# 测试是否证明修复/功能?

# 3. 结论:基于证据的判决
# 支持 / 部分支持 / 不支持

夏洛克原则:

  • “数据!数据!数据!” - 收集数据后再做结论
  • “排除不可能” - 什么是不能为真的?
  • “你看,但不观察” - 运行代码,而不只是阅读
  • 只信任可复现的证据 </default_to_action>

快速参考卡

证据收集清单

类别 检查什么 如何检查
声称 PR描述、提交消息 仔细阅读
代码 实际文件变更 git diff
测试 覆盖率、断言 独立运行
行为 运行时输出 本地执行
时间线 事件发生时间 git log, git blame

判决级别

判决 含义
证据完全支持声称
部分真 声称准确但不完整
证据与声称矛盾
? 无意义 声称不适用于上下文

调查模板

## 夏洛克调查:[声称]

### 声称
"[PR/提交声称要做什么]"

### 证据检查
- 代码变更:[文件、行数]
- 添加的测试:[数量、覆盖率]
- 观察的行为:[实际发生的情况]

### 推理分析

**声称**:[具体断言]
**证据**:[你发现的内容]
**推理**:[逻辑结论]
**判决**:✓/⚠/✗

### 发现
- 有效的内容:[附带证据]
- 无效的内容:[附带证据]
- 缺失的内容:[实现/测试中的空白]

### 建议
1. [基于发现的行动]

调查场景

场景1:“这修复了Bug”

步骤:

  1. 在修复前的提交上重现bug
  2. 在修复后的提交上验证bug是否消失
  3. 检查修复是否解决根本原因或症状
  4. 测试不在原始报告中的边缘案例

红旗警告:

  • 只是移除错误日志的修复
  • 仅适用于特定测试案例
  • 绕过而非根本原因修复
  • 未添加回归测试

场景2:“性能提升50%”

步骤:

  1. 在基准提交上运行基准测试
  2. 在优化后的提交上运行相同基准测试
  3. 在相同条件下比较
  4. 验证测量方法

红旗警告:

  • 只在玩具数据上测试
  • 不同的比较条件
  • 未提及权衡

场景3:“处理所有边缘案例”

步骤:

  1. 列出代码路径中的所有边缘案例
  2. 检查每个案例的测试覆盖率
  3. 测试边界条件
  4. 验证错误处理路径

红旗警告:

  • catch {} 隐藏错误
  • 通用错误消息
  • 未记录关键错误

示例调查

## 案例:PR #123 "修复异步处理程序中的竞态条件"

### 检查的声称:
1. "消除竞态条件"
2. "添加互斥锁"
3. "100%线程安全"

### 证据:
- 文件:src/handlers/async-handler.js
- 变更:添加`async/await`,移除回调
- 测试:2个新测试用于异步流程
- 覆盖率:85%(原为75%)

### 分析:

**声称1:"消除竞态条件"**
证据:添加`await`到顺序操作。无实际互斥锁。
推理:通过移除并发避免竞态,而非同步。
判决:⚠ 部分真(解决方式与声称不同)

**声称2:"添加互斥锁"**
证据:无互斥库、无锁变量、无同步原语。
判决:✗ 假

**声称3:"100%线程安全"**
证据:JavaScript是单线程。未使用工作线程。
判决:? 无意义(在此上下文中无意义)

### 结论:
修复有效但原因与声称不同。通过使操作顺序进行来避免竞态条件,而非添加同步。

### 建议:
1. 更新PR描述以准确反映解决方案
2. 添加并发请求处理测试
3. 移除错误的技术声称

代理集成

// 证据基础的代码审查
await Task("夏洛克审查", {
  prNumber: 123,
  claims: [
    "修复内存泄漏",
    "提升性能30%"
  ],
  verifyReproduction: true,
  testEdgeCases: true
}, "qe-code-reviewer");

// Bug修复验证
await Task("验证修复", {
  bugCommit: 'abc123',
  fixCommit: 'def456',
  reproductionSteps: steps,
  testBoundaryConditions: true
}, "qe-code-reviewer");

代理协调提示

内存命名空间

aqe/sherlock/
├── investigations/*   - 调查报告
├── evidence/*         - 收集的证据
├── verdicts/*         - 声称判决
└── patterns/*         - 常见欺骗模式

舰队协调

const investigationFleet = await FleetManager.coordinate({
  strategy: 'evidence-investigation',
  agents: [
    'qe-code-reviewer',        // 代码分析
    'qe-security-auditor',     // 安全声称验证
    'qe-performance-validator' // 性能声称验证
  ],
  topology: 'parallel'
});

相关技能


记住

“在获得数据之前进行理论化是重大错误。” 只信任可复现的证据。不要信任提交消息、文档或"在我的机器上工作"的说法。

夏洛克标准: 每个声称必须经验性地验证。证据实际显示什么?