Fault localization is a critical step in software maintenance. Yet, many existing techniques, such as Spectrum-Based Fault Localization (SBFL), rely heavily on the availability of fault-triggering tests to be effective. In practice, especially for crash-related bugs, such tests are frequently unavailable. Meanwhile, bug reports containing stack traces often serve as the only available evidence of runtime failures and provide valuable context for debugging. This study investigates the feasibility of using stack traces from crash reports as proxies for fault-triggering tests in SBFL. Our empirical analysis of 60 crash-report bugs in Defects4J reveals that only 3.33% of these bugs have fault-triggering tests available at the time of the bug report creation. However, 98.3% of bug fixes directly address the exception observed in the stack trace, and 78.3% of buggy methods are reachable within an average of 0.34 method calls from the stack trace. These findings underscore the diagnostic value of stack traces in the absence of failing tests. Motivated by these findings, we propose SBEST, a novel approach that integrates stack trace information with test coverage data to perform fault localization when fault-triggering tests are missing. SBEST shows an improvement, with a 32.22% increase in Mean Average Precision (MAP) and a 17.43% increase in Mean Reciprocal Rank (MRR) compared to baseline approaches under the scenario where fault-triggering tests are absent.
翻译:故障定位是软件维护中的关键步骤。然而,许多现有技术,如基于频谱的故障定位(SBFL),其有效性严重依赖于故障触发测试的可用性。在实践中,特别是对于与崩溃相关的缺陷,此类测试往往不可用。同时,包含堆栈跟踪的错误报告通常作为运行时故障的唯一可用证据,并为调试提供了宝贵的上下文信息。本研究探讨了在SBFL中使用崩溃报告中的堆栈跟踪作为故障触发测试代理的可行性。我们对Defects4J中60个崩溃报告缺陷的实证分析表明,在错误报告创建时,仅有3.33%的缺陷具备可用的故障触发测试。然而,98.3%的错误修复直接处理了堆栈跟踪中观察到的异常,且78.3%的有缺陷方法平均仅需0.34次方法调用即可从堆栈跟踪中定位到。这些发现强调了在缺乏失败测试时堆栈跟踪的诊断价值。基于这些发现,我们提出了SBEST,一种在故障触发测试缺失时,通过整合堆栈跟踪信息与测试覆盖数据来进行故障定位的新方法。与基线方法相比,在故障触发测试缺失的场景下,SBEST在平均精度均值(MAP)上提升了32.22%,在平均倒数排名(MRR)上提升了17.43%。