一种修复真实世界项目中测试不稳定性的通用方法
软件工程
2024-04-16 v1
摘要
测试不稳定性是一种与代码更改无关的构建非确定性行为,是交付可靠软件的主要且持续的障碍。极少数用于自动修复测试不稳定性的技术是专门为修复依赖顺序(OD)或依赖实现(ID)的不稳定性而设计的。它们也都属于符号方法,即利用程序分析来检测和修复已知的测试不稳定性模式和根本原因,无法泛化。为了弥合这一差距,我们提出了 FlakyDoctor,这是一种结合了 LLM 的泛化能力和程序分析的可靠性的神经符号技术,用于修复不同类型的测试不稳定性。我们使用来自 243 个真实世界项目的 873 个已确认的不稳定测试(332 个 OD 和 541 个 ID)进行了广泛评估,证明了 FlakyDoctor 修复不稳定性的能力,分别实现了 57%(OD)和 59%(ID)的成功率。与三种替代的不稳定性修复方法相比,FlakyDoctor 修复的 ID 测试比 DexFix 多 8%,修复的 OD 不稳定测试比 ODRepair 多 12%,比 iFixFlakies 多 17%。无论底层 LLM 是什么,FlakyDoctor 的非 LLM 组件贡献了整体性能的 12-31%,即虽然 FlakyDoctor 的部分能力来自使用 LLM,但仅靠 LLM 不足以修复真实世界项目中的不稳定测试。使所提出的技术在测试不稳定性缓解以及一般的程序修复方面优于相关研究的原因在于,它修复了真实世界项目中 79 个此前未修复的不稳定测试。我们为所有带有相应补丁的案例提交了拉取请求;在提交时,其中 19 个已被接受并合并。
引用
@article{arxiv.2404.09398,
title = {A Generic Approach to Fix Test Flakiness in Real-World Projects},
author = {Yang Chen and Reyhaneh Jabbarvand},
journal= {arXiv preprint arXiv:2404.09398},
year = {2024}
}