← 最新论文
💻 computer science

Enhancing Software Maintenance: A Learning to Rank Approach for Co-changed Method Identification

本文提出了一种利用源代码特征和拉取请求历史来准确识别并排序共同变更方法的排序学习方法,证明了随机森林模型在管理大规模 Java 项目软件依赖方面显著优于现有基准模型。

原作者: Yiping Jia, Safwat Hassan, Ying Zou

发布于 2026-06-19
📖 1 分钟阅读☕ 轻松阅读

原作者: Yiping Jia, Safwat Hassan, Ying Zou

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

以下是对论文《增强软件维护:一种用于识别共同变更方法的学习排序方法》的解释,通过简单的概念和日常类比进行了拆解。

核心问题:代码中的“多米诺效应”

想象你正在管理一座规模宏大且复杂的城市(一个软件系统)。有时,你需要修理主街上的一个坑洼。但由于城市的布局方式,修复这个坑洼可能会意外导致五大道的一个红绿灯失灵,或者地下室的一根水管发生泄漏。

在软件中,这些被称为共同变更方法(co-changed methods)。它们是不同的代码片段,即使看起来毫无关联且生活在不同的“社区”(文件或包)中,也会随着时间的推移倾向于一起发生变化。如果开发者修复了一个却忘记了另一个,整个系统可能会崩溃或产生漏洞。

问题的难点在于,这些联系并不总是显而易见的。你无法仅通过观察蓝图(代码结构)就能看出来。有时,两段代码之所以相关,仅仅是因为团队过去的工作“历史”。

旧方法 vs. 新方法

旧方法(“提交”的误区):
之前的工具试图通过观察单个“提交”(commit,即代码的每日小更新)来发现这些联系。

  • 类比: 想象一下,你试图通过观察谁在某个周二正好坐在了同一个午餐桌旁 15 分钟,来判断谁是最好的朋友。你可能会因此错过他们每天早上一起去健身房的事实,或者你会误以为两个人是朋友,仅仅因为他们碰巧在某一时刻同时去喝了杯咖啡。
  • 缺陷: 这种方法噪声太大。它会错过那些发生在较长时间跨度内的联系,并且会产生过多的虚假警报。

新方法(“拉取请求”视角):
本文提出的方法是观察拉取请求(Pull Requests, PRs)。PR 是指在将更改合并到主系统之前,由团队进行评审并批准的一组“数据包”。

  • 类比: 我们不再只看 15 分钟的午餐,而是看整周的饮食计划。如果两个人每周都一致地订购同一种复杂的套餐,那么他们很可能是一个团队。这能提供更清晰的图景,展示谁真正一起工作。

解决方案:CoRanker(“智能媒人”)

作者构建了一个名为 CoRanker 的工具。可以把它看作是一个聪明的代码媒人。

  1. 它从历史中学习: CoRanker 不使用僵化的规则(例如“如果它们在同一个文件中,它们就是相关的”),而是使用机器学习(具体来说是一种“学习排序”方法)。它研究了数千个过去的拉取请求,以学习其中的模式。
  2. 它权衡多种线索: 当你修改一段代码时,CoRanker 会询问:“还有谁可能也需要被修改?”它会查看:
    • 历史记录: 这两者以前是否一起变更过?(这是最强的线索)。
    • 位置: 它们是否在同一个文件夹里?
    • 人员: 是否由相同的开发者编写或编辑过它们?
    • 含义: 它们的功能是否相似?(即使代码看起来不同)。
  3. 它对答案进行排序: 它不会只给出一个包含 1,000 个可能性的混乱长列表。它的作用就像搜索引擎一样,将最有可能的候选对象放在列表的最顶端,这样开发者只需检查前 5 个即可。

研究发现(结果)

研究人员在 150 个不同的软件项目上进行了测试(这是一个巨大的数据集,相当于阅读了数百万页的代码)。

  • 最佳模型: 他们尝试了许多不同的“媒人”算法。胜出者是**随机森林(Random Forest)**模型。你可以把它想象成一个由 300 位不同专家组成的委员会,通过投票来决定谁是最匹配的对象。这种方法明显优于所有其他方法。
  • 击败竞争对手: CoRanker 比现有工具表现得好得多。在某些测试中,它的表现比次优方法高出多达 573%。
  • “大语言模型(LLM)”的意外发现: 研究人员还尝试使用高级的大语言模型(类似于经过代码训练的超聪明 AI 聊天机器人)来预测这些联系。
    • 结果: 这个 AI 实际上比基于历史的简单工具表现更差
    • 原因: AI 擅长编写新代码,但在理解这两段代码在多年间如何共同演进的特定“历史”方面却显得力不从心。这就像是请一位刚搬到小镇的天才来猜谁是当地最好的朋友;他还不了解当地的历史。
  • 多久重新训练一次: 该工具在每 两个月 更新一次记忆时效果最好。如果等待时间过长(超过 60 天),其记忆中的“旧闻”就会干扰它,导致预测效果变差。

为什么这很重要

这个工具帮助开发者避免“多米诺效应”。

  • 对于开发者: 当你修复一个 Bug 时,工具会在耳边低语:“嘿,别忘了也检查一下这个文件,否则你会搞砸的。”
  • 对于团队: 它有助于理解软件的隐藏结构,揭示出两段看似遥远的程序代码实际上是“最好的朋友”。

总结

本文介绍了 CoRanker,这是一个能够预测软件项目中哪些部分需要共同变更的智能系统。通过观察“拉取请求”(大批量的变更)而非微小的每日更新,并利用一种能够权衡历史、位置和作者身份的学习算法,它能帮助开发者找到隐藏的联系。它比旧方法更有效,甚至比专门处理此类任务的 AI 聊天机器人还要出色,只要每隔两个月更新一次即可。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →