Skip to main content
QUICK REVIEW

[论文解读] Mining Fix Patterns for FindBugs Violations

Kui Liu, Dongsun Kim|arXiv (Cornell University)|Dec 8, 2017
Software Engineering Research参考文献 71被引用 5
一句话总结

本文提出一种无监督方法,从开源Java项目中的真实代码变更中挖掘修复模式,以识别重复出现的、真实的FindBugs报告问题。通过结合卷积神经网络(CNN)进行特征学习与X-means聚类进行模式分组,该方法为116个未见过的问题中的69个生成了开发者认可的修复方案,并在Defects4J中的真实缺陷上展现出良好的可迁移性。

ABSTRACT

In this paper, we first collect and track a large number of fixed and unfixed violations across revisions of software. The empirical analyses reveal that there are discrepancies in the distributions of violations that are detected and those that are fixed, in terms of occurrences, spread and categories, which can provide insights into prioritizing violations. To automatically identify patterns in violations and their fixes, we propose an approach that utilizes convolutional neural networks to learn features and clustering to regroup similar instances. We then evaluate the usefulness of the identified fix patterns by applying them to unfixed violations. The results show that developers will accept and merge a majority (69/116) of fixes generated from the inferred fix patterns. It is also noteworthy that the yielded patterns are applicable to four real bugs in the Defects4J major benchmark for software testing and automated repair.

研究动机与目标

  • 研究真实世界开源项目中FindBugs问题的重复出现性及其修复模式。
  • 识别开发者实际修复的问题,表明其更可能是真实问题。
  • 从开发者验证的代码变更中提取并泛化常见的代码与修复模式,以指导未来的修复工作。
  • 评估挖掘出的修复模式在应用于先前未修复问题时的有效性。
  • 通过优先处理高影响问题并支持自动化修复建议,提升静态分析工具的实用性。

提出的方法

  • 收集并追踪730个开源Java项目,提取多个版本中的问题报告及其对应的修复变更。
  • 使用卷积神经网络(CNN)从表示问题及其修复的代码片段中学习语义与结构特征。
  • 应用X-means聚类基于学习到的特征,将相似的问题与修复分组为不同的修复模式。
  • 通过将未修复问题映射到最相似的挖掘出的修复模式,为其生成候选修复方案。
  • 通过拉取请求中的开发者接受度与Defects4J基准测试验证修复质量。
  • 采用无监督学习方法,避免对标注修复数据的依赖,从而实现从真实世界代码变更中可扩展的模式发现。

实验结果

研究问题

  • RQ1静态分析问题在软件项目版本间有多频繁地重复出现?已修复与未修复问题在分布上存在哪些差异?
  • RQ2哪些类型的问题最常被开发者修复?其修复过程具有何种典型模式?
  • RQ3在实际中被成功修复的问题中,存在哪些重复出现的代码与修复模式?
  • RQ4挖掘出的修复模式在为先前未修复问题生成可接受且可复用的修复方案方面效果如何?
  • RQ5所识别的修复模式是否具备泛化能力,并可有效应用于Defects4J等成熟基准中的真实世界缺陷?

主要发现

  • 在116个为先前未修复问题生成的修复方案中,有69个被开源项目中的开发者接受并合并,表明其具有强大的实际应用价值。
  • 挖掘出的修复模式成功修复了Defects4J基准中的四个真实缺陷,证明其在训练项目之外具有良好的可迁移性。
  • 已修复问题在各类别中并非均匀分布;某些类型(如BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS)更常重复出现,并遵循一致的修复模式。
  • 已修复问题的分布与所有检测到的问题在频率、类别分布与代码结构方面存在显著差异,表明基于重复出现性进行优先级排序可显著提升工具的可用性。
  • 基于CNN的特征学习与X-means聚类相结合,能有效捕捉代码变更中的语义有意义模式,从而实现准确的修复建议。
  • 部分常见问题在后续项目版本中消失,表明问题重复出现可能具有时间变化性与上下文依赖性。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。