← 最新论文
💻 computer science

SACS: A Code Smell Dataset using Semi-automatic Generation Approach

本文提出了一种半自动生成方法,通过结合自动规则生成与针对模糊样本的人工审核,构建了包含长方法、大类和特征 envy 三种代码坏味道的高质量开源数据集 SACS,以解决机器学习研究中高质量标注数据匮乏的问题。

原作者: Hanyu Zhang, Tomoji Kishi

发布于 2026-04-21
📖 1 分钟阅读☕ 轻松阅读

原作者: Hanyu Zhang, Tomoji Kishi

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

这篇文章介绍了一个名为 SACS 的新项目,它的核心任务是制造一份“代码坏味道”的教科书,用来训练人工智能(AI)去自动发现软件中的问题。

为了让你更容易理解,我们可以把写软件比作盖房子,把“代码坏味道”(Code Smell)比作建筑里的隐患(比如承重墙没砌好、房间布局太乱、或者把厨房建在了卧室里)。

以下是这篇论文的通俗解读:

1. 为什么要造这个数据集?(痛点)

  • 现状:软件用久了,里面会积累很多“坏味道”(比如一段代码太长、一个类太复杂)。这些隐患会让软件很难维护,就像老房子容易塌一样。
  • 难题:现在大家都想用 AI(机器学习)来自动发现这些隐患。但是,AI 需要大量的“教材”来学习。
  • 困境
    • 人工造教材太慢太贵:让资深程序员像挑刺一样,一个个去检查代码,既费时间又费钱,而且不同人挑刺的标准可能不一样(有人觉得是病,有人觉得没事)。
    • 机器自动造教材太假:如果让机器随便改代码来制造“坏味道”,虽然快,但造出来的东西可能不像真的“病”,AI 学了之后会学歪。

2. 他们是怎么解决的?(SACS 的半自动魔法)

作者想出了一个"半自动 + 人工把关"的聪明办法,就像开了一家"代码体检中心":

第一步:机器“故意搞破坏”(自动生成)

  • 做法:他们写了一套规则,让机器在原本健康的代码里“故意”制造坏味道。
    • 比喻:就像为了教医生识别“骨折”,故意把几根健康的骨头(代码)用胶水粘在一起(合并方法),或者把两个房间(类)强行打通。
    • 针对三种“病”
      1. 长方法 (Long Method):把好几个小功能强行塞进一个函数里,让它变得像一条超长面条。
      2. 大类 (Large Class):把几个小类合并成一个超级大胖子类。
      3. 特征依恋 (Feature Envy):把一个本该在 A 房间做的事,硬塞到 B 房间去做(比如把“计算折扣”的逻辑硬塞进“用户”类,而不是“订单”类)。

第二步:机器“快速初筛”(分组策略)

  • 做法:机器造出来的东西,不一定都是“真病”。他们用了几个简单的尺子(代码指标,比如代码行数)来把样本分成两堆:
    • A 组(自动通过组):机器一看,这代码行数多得像座山,或者少得像根针,毫无疑问是“病”或“健康”的。这部分直接入库,不用人看。
    • M 组(人工复核组):机器拿不准的,比如代码长度在“尴尬区”的。这部分被挑出来,交给人类专家。
    • 比喻:就像安检机。行李里全是水的(明显安全)和全是铁块的(明显危险)直接放行或扣留;只有那些形状奇怪、看不清楚的,才需要安检员人工开包检查。

第三步:专家“精准诊断”(人工审核)

  • 做法:人类专家只盯着那部分“拿不准”的 M 组样本。
    • 他们使用作者专门开发的一个IDE 插件工具(就像给程序员装了个“透视眼镜”),在写代码的软件里直接打勾或打叉。
    • 专家不仅确认这是不是“病”,还要指出“怎么治”(比如:哪几行代码该切出来?)。
    • 比喻:老医生只负责看那些 X 光片上模棱两可的病例,确诊后开出“手术方案”(重构建议)。

3. 成果是什么?(SACS 数据集)

通过这个方法,他们造出了一份巨大的开源数据集,叫 SACS

  • 规模大:包含超过 10,000 个标记好的“坏味道”样本(针对三种主要类型)。
  • 质量高:既有机器的大规模生产,又有人类的精准把关,比纯人工快,比纯机器准。
  • 公开:就像把这本“坏味道教科书”免费发给了全世界,让其他研究者可以用它来训练更聪明的 AI。

4. 总结与比喻

想象一下,以前我们要教 AI 识别“坏苹果”:

  • 纯人工:雇 100 个人,一个一个拿起来闻、摸、看,累死且慢。
  • 纯机器:拿个机器把苹果捏扁,说“看,这是烂苹果”,但捏扁的苹果和真的烂苹果不一样,AI 学傻了。
  • SACS 方法
    1. 机器先把苹果捏得特别扁(明显烂)和特别圆(明显好)的挑出来。
    2. 把那些“有点扁但又不像烂”的苹果,交给几个老果农(专家)快速看一眼。
    3. 最后,我们得到了一大筐既多又准的“坏苹果样本”,用来训练 AI 成为“苹果质检员”。

一句话总结
这篇论文发明了一套"机器制造 + 人工精修"的流水线,高效地制造了大量高质量的“代码坏味道”样本,让 AI 能更好地学会如何发现并修复软件中的隐患。

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

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

试用 Digest →