← 最新论文
💻 computer science

The Influence of Code Smells in Efferent Neighbors on Class Stability

本研究通过挖掘 100 个热门 GitHub 项目的提交历史,探讨了代码异味在依赖类(efferent neighbors)中的存在及其相互关联与交互效应如何影响目标类的稳定性。

原作者: Zushuai Zhang, Elliott Wen, Ewan Tempero

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

原作者: Zushuai Zhang, Elliott Wen, Ewan Tempero

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

这篇论文就像是在研究**“为什么一个原本很干净、很完美的房间,最后却变得乱七八糟,需要频繁打扫?”**

在软件世界里,这个“房间”就是代码类(Class),“打扫”就是修改代码。如果某个代码类总是被频繁修改,或者每次修改都要大动干戈,我们就说它**“不稳定”**。

以前的研究主要关注:是不是因为这个房间自己太乱了(代码里有“坏味道”),所以才总被修?
但这篇论文提出了一个更有趣的观点:也许房间本身很干净,但因为它的“邻居”太乱了,导致它也不得不跟着乱!

下面我用几个生动的比喻来拆解这篇论文的核心内容:

1. 核心概念:什么是“坏味道”和“邻居”?

  • 代码坏味道 (Code Smells)
    想象一下,如果你走进一个房间,发现墙上挂满了乱七八糟的电线,或者家具堆得连路都走不通。虽然房子还能住,但这就是“坏味道”。在代码里,这些就是设计得很糟糕、很难维护的结构(比如一个函数长得像条龙,或者一个类包揽了所有工作)。

    • 以前的观点:只要房间自己有坏味道,它就不稳定。
    • 这篇论文的新观点:即使你房间很整洁,如果你的邻居(你依赖的其他代码类)是个“烂摊子”,你也很难独善其身。
  • 外向邻居 (Efferent Neighbors)
    想象你(你的代码类)要出门办事,你必须依赖隔壁老王(邻居类)提供的工具。在代码里,这叫“依赖关系”。

    • 如果老王今天把工具改得面目全非(邻居类被修改了),你就得赶紧调整你的用法(你的代码也得跟着改)。
    • 这篇论文研究的正是:如果这些“邻居”身上有“坏味道”,会不会让你变得不稳定?

2. 两个关键的新发现:传染与共振

论文不仅看邻居有没有坏味道,还看了两种更复杂的情况:

A. 坏味道的“串门” (Interrelation / Coupling)

想象你和邻居老王都有坏味道。

  • 情况:你房间乱,老王房间也乱。
  • 后果:你们俩虽然没直接连在一起,但因为都乱,整个小区的氛围都很差。一旦老王要修东西,你大概率也得跟着修。这叫**“坏味道耦合”**。

B. 坏味道的“握手” (Interaction)

这是论文最精彩的部分。

  • 比喻:想象你和老王之间不仅都乱,而且直接连了一根管子(代码里的静态依赖),这根管子直接通向你房间最乱的那个角落,也通向他房间最乱的那个角落。
  • 后果:只要老王那边稍微动一下(比如修个水管),因为那根管子直接连着你的乱源,你的乱源也会立刻被波及。这种“直接连线”会让修改像多米诺骨牌一样,瞬间把你拖下水。
  • 论文结论:这种“直接握手”的坏味道,比单纯的“邻居都乱”更可怕,会让你的代码变得极不稳定。

3. 他们是怎么做的?(研究方法)

为了验证这个理论,作者们没有坐在办公室里空想,而是做了一次**“大数据考古”**:

  1. 挑选样本:他们从 GitHub 上挑了 100 个最火的开源 Java 项目(就像挑选了 100 个最繁忙的社区)。
  2. 时间旅行:他们观察了这些项目过去一年的所有修改记录(就像监控了社区一年的维修日志)。
  3. 抓现行
    • 用自动化工具扫描代码,找出哪些类有“坏味道”。
    • 画出依赖图,看看谁依赖谁(谁是邻居)。
    • 统计每个类被修改了多少次(频率)和修改了多少行代码(规模)。
  4. 数学分析:用复杂的统计模型(就像给数据做 CT 扫描),排除掉“房间太大”、“邻居太多”等干扰因素,专门看**“邻居的坏味道”是不是导致“房间不稳定”**的罪魁祸首。

4. 他们发现了什么?

虽然具体的数学结果还在等待最终发布,但他们的核心假设是:

  • 邻居的坏味道确实会传染:即使你的代码很干净,如果你的邻居很烂,你也会变得不稳定。
  • 直接连线更危险:如果坏味道之间还有直接的“连线”(交互),这种不稳定性会成倍增加。
  • 不仅仅是看自己:以前大家只盯着自己的代码修修补补,以后可能得盯着整个依赖链,看看邻居是不是在“拖后腿”。

5. 这对我们有什么意义?

这就好比装修房子:

  • 以前:如果你家墙皮脱落,你会想“是不是我装修得不好?”然后自己修。
  • 现在:这篇论文告诉你,如果你家墙皮脱落,可能是因为隔壁老王在拆墙,或者你们之间的承重墙(依赖关系)有问题。

给开发者的建议
在决定要不要重构(大扫除)一段代码时,不要只看它自己乱不乱。还要看看它依赖的那些类是不是也很乱。如果邻居很乱,哪怕你现在的代码很完美,你也得小心,因为邻居随时可能把你带进坑里。

总结一句话
“近朱者赤,近墨者黑”在代码世界里同样适用。如果你的邻居(依赖的类)浑身是“病”,你自己就算再健康,也迟早会被传染得“病恹恹”,变得不稳定。

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

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

试用 Digest →