一句话:提出 PAFL,通过挖掘项目历史故障模式并设计故障模式描述语言,增强现有故障定位工具。
论文关注缺陷定位:现有方法普遍采用通用定位策略,忽略了每个软件项目各自特有的、反复出现的故障模式。作者提出项目感知故障定位(PAFL),在给定项目的一个含缺陷版本和基线定位器后,先从该项目过去的含缺陷版本中挖掘故障模式,再用这些模式修正基线定位器给出的语句可疑度分数。其核心包含两项新想法:一是设计了一种领域特定的故障模式描述语言,其语言实例称为 crossword,用于刻画项目特有的故障模式及其对可疑度分数的影响方式;二是提出一种从历史含缺陷版本中合成 crosswords 的算法。作者在 7 个基线故障定位器和 12 个真实 C/C++ 与 Python 项目上开展评估,结果显示 PAFL 能够有效、稳健且高效地提升基线定位技术的性能。
We present PAFL, a new technique for enhancing existing fault localization methods by leveraging projectspecific fault patterns. We observed that each software project has its own challenges and suffers from recurring fault patterns associated with those challenges. However, existing fault localization techniques use a universal localization strategy without considering those repetitive faults. To address this limitation, our technique, called project-aware fault localization (PAFL), enables existing fault localizers to leverage project-specific fault patterns. Given a buggy version of a project and a baseline fault localizer, PAFL first mines the fault patterns from past buggy versions of the project. Then, it uses the mined fault patterns to update the suspiciousness scores of statements computed by the baseline fault localizer. To this end, we use two novel ideas. First, we design a domain-specific fault pattern-description language to represent various fault patterns. An instance, called crossword, in our language describes a project-specific fault pattern and how it affects the suspiciousness scores of statements. Second, we develop an algorithm that synthesizes crosswords (i.e., fault patterns) from past buggy versions of the project. Evaluation using seven baseline fault localizers and 12 real-world C/C++ and Python projects demonstrates that PAFL effectively, robustly, and efficiently improves the performance of the baseline fault localization techniques.
@article{paperbot3217,
title = {PAFL: Enhancing Fault Localizers by Leveraging Project-Specific Fault Patterns},
author = {Donguk Kim and Minseok Jeon and Doha Hwang and Hakjoo Oh},
journal = {Proceedings of the ACM on Programming Languages},
volume = {9},
number = {OOPSLA1},
year = {2025},
doi = {10.1145/3720526}
}