[论文解读] Entropy Guided Spectrum Based Bug Localization Using Statistical Language Model
本文提出 EnSpec,一种混合方法,通过整合基于统计语言模型计算的代码熵,提升基于谱的错误定位(SBL)的准确率。通过将 SBL 分数与基于熵的可疑度相结合,EnSpec 在测试覆盖率较低的场景下优于单独使用 SBL,且在 Java 和 C 项目中均表现出色。
Locating bugs is challenging but one of the most important activities in software development and maintenance phase because there are no certain rules to identify all types of bugs. Existing automatic bug localization tools use various heuristics based on test coverage, pre-determined buggy patterns, or textual similarity with bug report, to rank suspicious program elements. However, since these techniques rely on information from single source, they often suffer when the respective source information is inadequate. For instance, the popular spectrum based bug localization may not work well under poorly written test suite. In this paper, we propose a new approach, EnSpec, that guides spectrum based bug localization using code entropy, a metric that basically represents naturalness of code derived from a statistical language model. Our intuition is that since buggy code are high entropic, spectrum based bug localization with code entropy would be more robust in discriminating buggy lines vs. non-buggy lines. We realize our idea in a prototype, and performed an extensive evaluation on two popular publicly available benchmarks. Our results demonstrate that EnSpec outperforms a state-of-the-art spectrum based bug localization technique.
研究动机与目标
- 解决当测试套件代码覆盖率差或无法区分错误代码行时,基于谱的错误定位(SBL)所面临的局限性。
- 探究代码熵(通过统计语言模型衡量不自然程度)是否可作为识别错误代码的可靠、正交信号。
- 开发一种仅需源代码、不依赖错误报告或大量测试覆盖率的、与语言无关的混合错误定位技术。
- 评估将 SBL 与熵结合在项目内和跨项目错误定位设置中的有效性。
提出的方法
- 在源代码上训练统计语言模型(n-gram),以计算每行程序的熵,其中熵越高表示越不自然,越可能为错误代码。
- 利用测试执行数据(通过和失败的测试覆盖情况)计算标准的基于谱的可疑度分数。
- 使用机器学习模型(如逻辑回归)将熵分数与 SBL 可疑度分数结合,生成最终的可疑行排序列表。
- 采用一种混合评分函数,对熵和谱信息进行加权,以提升排序精度。
- 在两个公开基准上评估该方法:Defects4J(Java)和 ManyBugs(C),涵盖超过 500 个错误和 3,715 个错误代码行。
- 进行跨项目评估,以检验在历史错误数据有限的真实场景下的泛化能力和鲁棒性。
实验结果
研究问题
- RQ1能否通过统计语言模型推导出的代码熵,作为错误代码的可靠指标?
- RQ2与单独使用 SBL 相比,将熵与基于谱的可疑度结合是否能提升错误定位的准确率?
- RQ3在历史错误数据有限的跨项目错误定位中,EnSpec 的表现如何?
- RQ4该方法在不同编程语言(如 Java 和 C)中是否有效且具有泛化能力?
主要发现
- EnSpec 通过引入代码熵作为额外的可疑度信号,显著提升了标准 SBL 的错误定位准确率。
- 将熵与 SBL 结合可减少对高覆盖率测试套件的依赖,使方法在测试覆盖率较低时仍具鲁棒性。
- EnSpec 在项目内和跨项目设置中均优于 SBL,证明了其在不同软件项目间的泛化能力。
- 该方法在不同编程语言中均有效,且在 Java 和 C 项目中均表现出一致的改进效果。
- 代码熵与错误代码行呈正相关,证实不自然(熵较高)的代码更可能包含缺陷。
- 该方法无需错误报告或外部元数据,因此适用于早期开发阶段等此类数据可能不可用的场景。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。