Abstract

摘要:已经提出了许多故障定位 (FL) 技术来促进软件调试。 由于重量轻,基于频谱的故障定位 (SBFL) 是最受欢迎的 FL 系列之一,并广泛部署在程序修复工具中。 SBFL 通过记录测试套件下的程序覆盖率来对程序元素进行排名,并使用排名公式计算每个元素的可疑度分数。 尽管提出了许多公式,但 SBFL 仍然无法提供除节目覆盖范围之外的新信息来源。 基于突变的故障定位 (MBFL) 迭代地突变一个故障程序,并通过推翻失败测试用例的突变体提出故障位置。 然而,由于其爆炸性的搜索空间,MBFL 仅被少数程序修复工具采用。 在本文中,我们旨在通过构建实用的 FL 工具来利用 MBFL 的优势并以低开销提升 SBFL。 我们提出了 FLIP,这是一种从变异谓词推断的 FL 技术。 基于 SBFL,我们利用和扩展谓词切换技术来推断故障位置,无论突变的谓词是否可以推翻失败的测试用例。 最后,我们使用结合了程序覆盖率和变异推理的联合推理来计算一个新的排名列表。 我们使用 Defects4j(版本 1.5.0),包含来自六个项目的 438 个实际故障来评估 FLIP。 所有七种最先进的 SBFL 技术都受益于 FLIP(例如,通过在 top-1 中排名高达 46.4% 的故障)和低开销(例如,每个故障的平均开销不到 2 分钟)。 我们还提供了一些关于如何根据经验结果进一步改进现实世界故障的 FL 的见解。
索引词——故障定位、测试、调试

I. INTRODUCTION

在软件工程中,调试软件是不可避免的、繁琐且耗时的。 为了使开发人员免于繁重的工作并降低软件维护成本,先进的故障定位(FL)技术,例如基于频谱的[1-3、18、47、56]、基于切片的[12、59]、基于突变的[32 , 34] 和基于机器学习的 [49, 55] 技术已经被提出。 FL 技术旨在通过收集和分析程序的静态或动态信息来自动发现错误程序中的错误元素。 最近,自动程序修复 (APR) 引起了研究人员的关注,大多数 APR 工具在 APR 工作流程的第一阶段使用 FL 工具 [31, 33, 54]。

Problem Statement. 在本文中,我们旨在设计一种 FL 方法来发现现实世界的故障。 为了满足现代软件调试的需求,FL 技术应该是精确的(例如,能够定位 top1 中的许多错误元素)和高效的(例如,能够在几分钟而不是几小时内完成)。 此外,APR 要求 FL 工具是细粒度的(例如,通过在语句级别识别错误元素)并适用于一般类型的错误(例如,不依赖专家知识或程序规范)。