来源笔记

SemLoc: Structured Grounding of Free-Form LLM Reasoning for Fault Localization

Fault LocalizationLLM GroundingSemantic AnalysisCode IntelligenceSoftware Debugging

SemLoc 是一种面向这类缺陷的故障定位方法:通过和不同的控制流无关的 passing 和 failing 运行,覆盖率信号无法区分出有问题的代码行。它把 LLM 写出的语义约束转成可执行检查,测量这些检查在各个测试上的失败情况,并用这些证据给可疑代码排序。

  • 它针对的是语义型缺陷,例如数值关系错误、缺少归一化、边界逻辑错误;这类缺陷里,passing 和 failing 执行可能按相同顺序经过相同语句。
  • 基于覆盖率、切片或轨迹结构的传统故障定位方法在这种场景下会丢失信号,导致调试变慢、成本变高。
  • 之前基于 LLM 的定位方法常常输出自由形式的猜测或解释,难以和运行时行为对照,也难以在不同测试之间比较。
  • SemLoc 让 LLM 根据有缺陷的函数、SSA 转换后的代码以及 passing/failing 测试,推断程序预期行为的语义约束。
  • 每个推断出的约束都会被强制写入一个封闭的中间表示,包含类别、程序锚点和可执行的布尔表达式,因此可以在精确的代码位置检查。
  • 系统对程序加埋点,运行测试集,构建语义违反谱:这是一个按约束和测试组织的矩阵,记录哪些语义检查在了哪些测试上失败。
  • 它用类似 SBFL 的 Ochiai 公式给约束打分,再把这些分数映射回语句,用语义证据而不是单纯覆盖率生成排序后的故障列表。
  • 反事实验证步骤会为优先级最高的约束提出最小修复,重新运行测试,并区分主要因果违反、下游效应和过宽的约束。
  • 评测使用 SemFault-250,这是一个包含 250 个 Python 程序 的语料库,程序里各有一个语义缺陷,来源于真实仓库和已有基准。
  • 使用 Claude Sonnet 4.6 时,SemLoc 的故障定位准确率为 Top-1 42.8%Top-3 68.0%
  • 与命名基线相比,它在这个基准上优于 SBFL-Ochiai:Top-1 6.4% / Top-3 13.2%delta debugging:0.0% / 0.0%
  • 它把需要检查的范围缩小到 7.6% 的可执行行,论文把这描述为相对 SBFL 的 5.7 倍减少
  • 反事实验证把 Top-1 准确率从 30.8% 提高到 42.8%,提升了 12.0 个百分点
  • 论文还声称,反事实验证为 60.8% 的程序识别出了一个 主要因果约束