NeFut Logo NeFut
EN 管理员登录

[AI学术] SemaDiff:通过生成代码与测试识别语义变化提交

发布于:2026-07-17 22:00 最后更新:2026-07-18 08:19
#algorithm #C++ #Open Source

摘要

在软件仓库挖掘中,区分语义保持提交与变化提交仍然是一个开放性挑战。现有方法虽然能准确检测重构提交,但无法确保提交是纯粹的语义保持,没有任何行为变化的修改。这一局限性会影响调试、故障定位、错误数据集构建、回滚分析和错误修复回溯等多个任务。为了填补这一空白,我们提出了SemaDiff,一种通过基于行为的分析来识别语义保持提交的新方法;通过比较提交前后版本的相似测试执行来实现。

由于受重构影响的代码往往难以测试且在两个版本中有所不同,我们提出生成额外的调用方法来测试这些代码,作为测试目标。给定一个提交,SemaDiff分析差异以识别修改的代码,并提取调用这些代码的未修改依赖代码。然后,利用大型语言模型生成一个附加的依赖类,以在两个版本中执行更改后的代码,并自动为依赖代码生成测试。通过这种方式,我们为不同代码版本获得相同的测试,从而实现行为差异检测。只有当所有生成的测试在两个版本中产生相同的结果时,该提交才被分类为语义保持。

为了评估SemaDiff,我们手动构建并注释了一个包含183个提交的数据集,这些提交来自知名的开源Java项目。结果表明,SemaDiff在约76%的情况下准确区分语义保持与变化提交,并在语义变化提交检测中达到100%的精度。

博主点评: SemaDiff通过生成测试代码的创新方式,巧妙地解决了语义变化提交检测中的难题。其利用大型语言模型的能力,不仅提升了准确度,还为软件开发中的版本控制和回滚分析提供了强有力的支持,展现了未来软件工程的潜力。

原文链接: https://arxiv.org/abs/2607.13111

[h] 返回首页