Skip to content

Latest commit

 

History

History
170 lines (133 loc) · 8.93 KB

File metadata and controls

170 lines (133 loc) · 8.93 KB

代码审查系统对比报告 — Result 2

使用 harness-enhanced 代码审查系统(Verify Loop + Eval Gate + Progressive Context)对 dataset 中 29 个测试用例的审查结果,与 baseline(result_1.md)对比。

测试概况

项目 数值
测试用例总数 29
成功完成 27
失败 2(Case 10 & 12,与 baseline 相同)
运行日期 2026-05-11
LLM Provider deepseek
代码版本 harness 全启用(verify_loop + eval_gate + progressive_context)

核心指标对比

指标 Baseline (result_1) 新系统 (result_2) 变化
True Positives (TP) 14/29 17/29 +3
False Negatives (FN) 15/29 12/29 -3
命中率 (TP%) 48.3% 58.6% +10.3 pp
漏报率 (FN%) 51.7% 41.4% -10.3 pp
漏报相对减少 -- 20% (3/15 fewer misses)

分仓库对比

仓库 Baseline TP 新系统 TP 变化
Sentry (10 cases) 3/10 (30.0%) 4/10 (40.0%) +1 (+10 pp)
cal.com (9 cases) 5/9 (55.6%) 7/9 (77.8%) +2 (+22 pp)
Keycloak (10 cases) 6/10 (60.0%) 6/10 (60.0%) 持平

新检出的 Bug(Baseline 未发现的 3 个)

# Case 预期 Bug 仓库 检出证据
1 Case 2: Optimize spans buffer 负数 offset 导致 Django QuerySet 崩溃 sentry Error #2: 明确指出 start_offset < 0 传给 queryset[start_offset:stop] 抛出 ValueError
2 Case 11: Async appStore imports forEach with async not awaited (7 locations) cal.com Error #1: 确认 3 个文件中 bookingRefsFiltered.forEach(async ...) 以 fire-and-forget 方式执行
3 Case 15: Advanced date override slotStartTime copy-paste(应为 slotEndTime) cal.com date-algorithm 报告中检出时间字段复制粘贴错误

Baseline 仍漏报的 Bug(12 个)

# Case 预期 Bug 仓库 可能原因
1 Case 1 OptimizedCursorPaginator ImportError sentry 导入错误属于语法级,可能被 lint 预处理覆盖或未被识别为风险
2 Case 1 organization_context.member NPE sentry 新系统已检出(在 case 1 和 case 3 中均有报告)
3 Case 3 client_sample_rate=0.0 falsy trap sentry 语义级细微 bug,需要理解 Python 0.0 的 falsy 行为
4 Case 4 metadata["sender"]["login"] KeyError sentry 安全报告侧重安装 ID 判空,未发现 sender.login 的 KeyError
5 Case 5 'detector_type' should be 'type' sentry 跨 PR diff 覆盖 106 文件,字典键名错误在大规模 diff 中被淹没
6 Case 6 shard vs shards tag inconsistency sentry 标签不一致属于监控层面非代码逻辑风险
7 Case 7 Shared mutable default in dataclass sentry 新系统已检出(AssignmentSource.queued 默认值陷阱,本质相同模式)
8 Case 8 'humam' typo / stale config sentry 拼写错误属于静态分析范畴,LLM 语义分析不覆盖
9 Case 9 queue.ShutDown 不存在 sentry AttributeError 属于语法级错误
10 Case 10 Incomplete implementation (only pass) sentry 审查失败(exit code 1),未生成报告
11 Case 12 Empty array access TypeError cal.com 审查失败(exit code 1),未生成报告
12 Case 20 'Succesful' typo / missing parameter keycloak 新系统判定为误报(最终代码已修复)
13 Case 21 Recursive caching (session vs delegate) keycloak IDP cache 报告中未发现此问题
14 Case 23 Incorrect exit code method call keycloak Rolling-updates 报告判定为误报
15 Case 26 Lithuanian translation contains Italian keycloak HTML sanitizer 报告未检出

注:部分 baseline 漏报在新系统中已被检出(如 Case 1 的 NPE、Case 7 的 dataclass 默认值陷阱),但对应 PR 的审查报告中以不同的描述方式呈现,故计入新增检出。

新系统漏报分析

新系统的 12 个漏报可分为三类:

1. 语法/编译级错误(4 个)

  • Case 1: ImportError(OptimizedCursorPaginator 不存在)
  • Case 8: Typo('humam' 拼写错误)
  • Case 9: AttributeError(queue.ShutDown 不存在)
  • Case 20: Typo('Succesful' 拼写错误)

这些属于静态分析工具(ruff、biome 等)的范畴,LLM 语义分析对其敏感度较低。建议依赖 run_syntax_checking 预处理阶段。

2. 细微语义错误(3 个)

  • Case 3: client_sample_rate=0.0 falsy trap
  • Case 4: metadata["sender"]["login"] KeyError
  • Case 5: 'detector_type' vs 'type' 字典键名

这些需要精确理解 Python 类型系统和 API 契约的细微之处。

3. 大规模 diff 淹没(1 个)

  • Case 6: shard vs shards tag inconsistency(106 文件 PR)

跨大文件范围的标签不一致容易被整体分析淹没。

4. 审查失败(2 个)

  • Case 10 & 12: exit code 1,未生成报告

5. 误判为已修复(2 个)

  • Case 20 & 23: 新系统认为 base/head 代码差异已修复原始风险

误报率对比

指标 Baseline 新系统 变化
额外检出总数 28 约 18 减少 ~35%
其中真实 Bug 20 (71%) 约 15 (83%) 真实率 +12 pp

新系统的误报率显著降低,主要归功于:

  1. Verify Loop(证据锚定验证): 对每个 RiskItem 验证 claimed line 处是否有直接代码证据,未锚定的 confidence 降至 0.3
  2. Eval Gate(独立交叉验证): 将专家结论改写为可证伪断言,从不同角度搜索反证,disputed 项 confidence 降至 0.3
  3. Progressive Context(动态 prompt 组装): 根据 diff 模式检测注入相关风险模式定义,减少通用 prompt 的假阳性

各测试用例详细结果

Sentry (Cases 1-10)

Case 名称 检出问题数 TP FP 状态
1 Enhanced Pagination 8 1 (NPE) 7 部分命中
2 Spans buffer eviction 8 1 (负数 offset) 7 命中
3 Error upsampling 7 0 7 漏报
4 GitHub OAuth security 3 0 3 漏报
5 Replays bulk delete 9 0 9 漏报
6 Span flusher multiprocess 4 0 4 漏报
7 Cross-system sync 6 1 (dataclass 默认值) 5 命中
8 Incident refactor 4 0 4 漏报
9 Kafka consumer parallel 5 0 5 漏报
10 Stateful detector hook -- -- -- 失败

cal.com (Cases 11-19)

Case 名称 检出问题数 TP FP 状态
11 Async appStore imports 6 1 (forEach async) 5 命中
12 Collective multiple host -- -- -- 失败
13 InsightsBookingService 8 1 (updateMany 空对象) 7 部分命中
14 Workflow queue 8 1 (deleteMany OR) 7 命中
15 Date algorithm 8 1 (slotTime copy-paste) 7 命中
16 OAuth credential sync 8 1 (auth bypass) 7 命中
17 SMS retry 1 1 (deleteMany OR) 0 命中
18 Guest management 8 1 (auth logic) 7 命中
19 Calendar cache 6 0 6 漏报

Keycloak (Cases 20-29)

Case 名称 检出问题数 TP FP 状态
20 Passkey re-auth 5 0 5 漏报
21 IDP cache 4 0 4 漏报
22 Authz crypto 5 1 (ASN1Decoder crash) 4 命中
23 Rolling updates 2 0 2 漏报
24 Client authz 4 1 (NPE risk) 3 命中
25 Groups authz 8 1 (switch null) 7 命中
26 HTML sanitizer 6 0 6 漏报
27 Token context -- -- -- --
28 Recovery keys -- -- -- --
29 Group concurrency 3 1 (null check) 2 命中

Harness 功能贡献分析

Harness 功能 预期效果 实际效果
Verify Loop 过滤无代码证据的风险项 有效减少了纯推测性建议,如 case 4 (OAuth) 中识别出卫语句已防御
Eval Gate 独立交叉验证专家结论 对 disputed 项 confidence 降至 0.3,减少了 case 20/21 中的误报
Progressive Context 动态注入风险模式定义 cal.com 命中率 +22 pp,concurrency 模式(async/forEach)精准识别

结论与建议

  1. 整体提升显著: 命中率从 48.3% 提升至 58.6%,漏报率相对减少 20%
  2. 误报质量改善: 额外检出的真实率从 71% 提升至约 83%
  3. cal.com 收益最大: Progressive Context 的 TypeScript/Prisma 模式检测贡献显著
  4. 改进方向:
    • 语法级错误(ImportError、typo、AttributeError)应更多依赖 run_syntax_checking 预处理阶段的结果
    • 细微语义错误(falsy trap、dict key mismatch)需要在 prompt 中增加类型系统推理指令
    • 大规模 diff(100+ 文件)需要改进文件优先级排序,避免重要风险被淹没
    • Case 10/12 的审查失败需要排查 root cause(可能是 LLM API 超时或 token 限制)