Page 271 - 《软件学报》2026年第4期
P. 271
1712 软件学报 2026 年第 37 卷第 4 期
解决问题报告的代码补丁时, 还需额外提交用于复现问题报告并验证问题报告是否解决的测试用例补丁, 从而增
加了开发者的工作负担. 为了解决这一问题, 本文提出了一种结合大语言模型和检索增强生成的故障复现测试用
例生成方法. 该方法首先通过检索与问题报告相关的多元代码上下文信息, 包括报错根函数、import 语句和测试
用例样本, 随后构建精确的 prompt, 以引导模型生成有效的故障复现测试用例. 在与现有的 Libro 方法进行对比实
验时, 本文的方法显著优于 Libro, 成功生成故障复现测试用例的问题报告比例从 6.57% 提升至 22.33%. 此外, 消
融实验进一步表明, 本文检索增强生成的 3 部分内容对故障复现测试用例生成均发挥了积极作用, 其中测试用例
样本的贡献最大. 尽管本文方法在故障复现测试用例生成任务中展现了有效性, 但仍有改进空间, 未来的展望如下.
(1) 提升方法的有效性. 在使用检索增强生成策略时, 本文检索了报错根函数、import 语句和测试用例样本这
3 种信息, 未来可以挖掘更多有价值的信息. 当面对项目中测试函数样本不足的情况时, 可以检索其他与问题报告
相关的上下文信息, 包括代码注释、项目历史提交记录、开发者评论以及项目文档等, 为大语言模型提供更丰富
的背景信息和开发者意图, 从而提升故障复现测试用例的生成质量. 同时, 可以优化检索策略, 以提高检索内容的
准确性, 从而更好地辅助模型理解问题报告, 提升故障复现测试用例生成效果.
(2) 提升方法的通用性. 本文方法目前应用于 SWE-bench Lite 数据集, 该数据集仅包含 300 个 Python 代码仓
库的问题报告. 未来, 可以考虑将本文方法扩展到其他编程语言的 GitHub 问题报告, 例如 Java、C、C++等. 此外,
本文的方法也可考虑应用于本地代码仓库中, 用户只需提交问题报告描述和代码仓库路径, 便可自动生成故障复
现测试用例.
(3) 提升方法的可解释性. 本文方法使用大语言模型生成故障复现测试用例时, 缺乏对测试用例的解释. 未来
可以考虑在生成故障复现测试用例的同时, 让模型解释测试用例的信息来源及其与问题报告的关联. 此外, 还可以
考虑建立用户反馈机制, 允许用户对生成的测试用例进行评价与反馈, 增强用户对测试用例的理解和信任.
References
[1] GitHub. 2024. https://github.com/
[2] Jimenez CE, Yang J, Geng JY. SWE-bench Lite. 2024. https://www.swebench.com/lite.html
[3] Soltani M, Derakhshanfar P, Panichella A, Devroey X, Zaidman A, van Deursen A. Single-objective versus multi-objectivized
optimization for evolutionary crash reproduction. In: Proc. of the 10th Int’l Symp. Search Based Software Engineering. Montpellier:
Springer, 2018. 325–340. [doi: 10.1007/978-3-319-99241-9_18]
[4] Nayrolles M, Hamou-Lhadj A, Tahar S, Larsson A. JCHARMING: A bug reproduction approach using crash traces and directed model
checking. In: Proc. of the 22nd IEEE Int’l Conf. on Software Analysis, Evolution, and Reengineering. Montreal: IEEE, 2015. 101–110.
[doi: 10.1109/SANER.2015.7081820]
[5] Chen N, Kim S. STAR: Stack trace based automatic crash reproduction via symbolic execution. IEEE Trans. on Software Engineering,
2015, 41(2): 198–220. [doi: 10.1109/TSE.2014.2363469]
[6] Kang S, Yoon J, Yoo S. Large language models are few-shot testers: Exploring LLM-based general bug reproduction. In: Proc. of the
45th IEEE/ACM Int’l Conf. on Software Engineering. Melbourne: IEEE, 2023. 2312–2323. [doi: 10.1109/ICSE48619.2023.00194]
[7] Brown TB, Mann B, Ryder N, et al. Language models are few-shot learners. In: Proc. of the 34th Int’l Conf. on Neural Information
Processing Systems. Vancouver: Curran Associates Inc., 2020. 159.
[8] Jimenez CE, Yang J, Wettig A, Yao SY, Pei KX, Press O, Narasimhan KR. SWE-bench: Can language models resolve real-world GitHub
issues? In: Proc. of the 12th Int’l Conf. on Learning Representations. Vienna: OpenReview.net, 2024.
[9] Rozière B, Gehring J, Gloeckle F, et al. Code LLaMA: Open foundation models for code. arXiv:2308.12950, 2024.
[10] Yang J, Jimenez CE, Wettig A, Lieret K, Yao SY, Narasimhan K, Press O. SWE-agent: Agent-computer interfaces enable automated
software engineering. In: Proc. of the 38th Int’l Conf. on Neural Information Processing Systems. Vancouver: Curran Associates Inc.,
2024. 1601.
[11] Zhang YT, Ruan HF, Fan ZY, Roychoudhury A. AutoCodeRover: Autonomous program improvement. In: Proc. of the 33rd ACM
SIGSOFT Int’l Symp. on Software Testing and Analysis. Vienna: ACM, 2024. 1592–1604. [doi: 10.1145/3650212.3680384]
[12] Xia CS, Deng YL, Dunn S, Zhang LM. Agentless: Demystifying LLM-based software engineering agents. arXiv:2407.01489, 2024.
[13] Fraser G, Arcuri A. EvoSuite: Automatic test suite generation for object-oriented software. In: Proc. of the 19th ACM SIGSOFT Symp.
and the 13th European Conf. on Foundations of Software Engineering. Szeged: ACM, 2011. 416–419. [doi: 10.1145/2025113.2025179]

