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]
   266   267   268   269   270   271   272   273   274   275   276