← 最新论文
🤖 AI

Automated Classification of Source Code Changes Based on Metrics Clustering in the Software Development Process

本文提出了一种基于度量指标聚类的源代码变更自动分类方法,该方法利用 k-means 算法和余弦相似度对变更度量向量进行聚类,并通过专家映射将聚类结果归类,在五个软件系统上的验证表明该方法能显著减少代码审查时间并实现较高的分类纯度。

原作者: Evgenii Kniazev

发布于 2026-02-17
📖 1 分钟阅读☕ 轻松阅读

原作者: Evgenii Kniazev

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

这篇论文讲述了一个关于如何自动给软件代码的“修改记录”分类的聪明办法。

想象一下,你经营着一家巨大的图书馆(这就是一个软件系统)。每天,都有成千上万的图书管理员(程序员)进来,他们有的添新书(新功能),有的修补破书(修 Bug),有的重新整理书架(重构),还有的只是把书皮擦干净(格式化代码)。

1. 遇到的问题:图书馆太乱了

如果每天有成千上万条修改记录,图书馆长(代码审查员)根本看不完。他需要花大量时间逐条检查:“这条是修 Bug 的吗?那条是加功能的吗?”这太累人了,而且容易出错。

2. 核心思路:给修改记录“贴标签”

这篇论文提出了一种**“自动分拣机”。它的目标是不用人工去读每一条修改记录,而是通过计算一些“特征数据”**(比如改了多少行字、逻辑变复杂了多少),自动把这些修改归类。

这就好比给每个图书管理员的修改动作拍一张**“体检报告”**:

  • 他动了多少页纸?(代码行数)
  • 他的逻辑有多绕?(圈复杂度)
  • 他删了还是加了文件?

3. 这个“自动分拣机”是怎么工作的?

整个过程分为两步,就像**“先分组,后定名”**:

第一步:自动分组(聚类)

系统把所有修改记录的“体检报告”拿出来,用一种叫 K-Means 的算法(你可以把它想象成一个**“自动找朋友”**的游戏)把它们聚在一起。

  • 怎么找朋友? 系统不看谁改得多,而是看**“改的风格像不像”**。
  • 比喻: 就像在舞会上,不管一个人跳了多久(改了多长代码),只要他的舞步节奏(代码修改的结构特征)和另一个人一样,他们就会被分到同一个舞池(簇/Cluster)里。
  • 这里用了一个很巧妙的尺子叫**“余弦相似度”**。它不关心你跳了多大力气(代码量大小),只关心你的舞步方向(修改类型)是否一致。

第二步:专家定名(映射)

机器把大家分好了组(比如分成了 12 个舞池),但它不知道哪个舞池是“修 Bug 的”,哪个是“加功能的”。
这时候,人类专家只需要看一眼每个舞池里最典型的几个例子,然后说:“哦,这个舞池里的人都在修 Bug,那这个舞池就叫'Bug 修复组’吧。”
一旦专家定好了名,机器就会自动把该舞池里剩下所有的人(成千上万条修改)都打上这个标签。

4. 效果怎么样?

作者拿几个真实的软件项目(比如 Subversion 和 NHibernate)做了实验,效果很惊人:

  • 以前: 专家需要手动检查所有 2000 多条修改记录。
  • 现在: 专家只需要检查其中几十条(用来教机器怎么分),剩下的 95% 以上机器都能自动分好。
  • 准确率: 大约有 75% 的修改能被机器分得和专家一模一样。剩下的 25% 主要是那些“既像修 Bug 又像重构”的复杂情况,机器有点拿不准,但这已经大大节省了时间。

5. 总结:为什么要这么做?

这就好比以前我们要人工数每一粒沙子,现在发明了一台**“自动筛沙机”**。

  • 好处: 极大地减少了人类专家的工作量,让他们能把精力集中在真正重要的、复杂的代码审查上。
  • 意义: 让软件开发过程更清晰、更快速,就像给混乱的图书馆装上了智能导航系统,让管理员能瞬间知道哪本书该放哪。

一句话总结:
这篇论文发明了一种**“智能分类器”**,它通过观察代码修改的“形状”和“节奏”,自动把成千上万条代码变动分成不同的类别(如修 Bug、加功能等),让专家只需做少量工作就能完成大规模代码审查,就像给图书馆装上了自动分拣系统一样。

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

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

试用 Digest →