← 最新论文
💻 computer science

A Longitudinal Study of Dependency Reclassifications in JavaScript Projects

该论文通过对 33,087 个 JavaScript 项目的纵向研究,揭示了依赖重分类(包括移除和角色转换)是普遍存在的维护活动,并指出其具有长期性、反复性及高发生率,从而为依赖管理工具和研究提供了新的视角。

原作者: Yuxin Liu, Cristian Bogdan, Benoit Baudry

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

原作者: Yuxin Liu, Cristian Bogdan, Benoit Baudry

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

这篇论文就像是在给 JavaScript 软件项目做一次"依赖关系的大体检"。

为了让你更容易理解,我们可以把开发一个软件项目想象成经营一家餐厅

1. 背景:餐厅里的“食材”与“工具”

在餐厅(软件项目)里,你需要各种东西来运作:

  • 核心食材 (Core Dependencies):这是顾客点菜时必须要用到的,比如牛肉、蔬菜。没有它们,餐厅没法营业(程序无法运行)。
  • 后厨工具 (Dev Dependencies):这是厨师在准备阶段用的,比如切菜机、特殊的调味酱配方。顾客看不到,餐厅关门后也不需要它们(只在开发/测试时用)。
  • 共享调料 (Peer Dependencies):这是一种特殊的约定。比如你卖的是“披萨底”,你告诉顾客:“你需要自己提供番茄酱和芝士,我只负责饼底”。这意味着这些材料由顾客(使用你代码的人)自己准备。

以前的研究主要关注:大家是不是在换食材的品牌?(比如把“牛肉”从"A 品牌”换成"B 品牌”)。这就像关注“版本更新”。

这篇论文关注的是:大家是不是在重新定义这些东西的用途?(比如把“切菜机”从“后厨工具”误放到了“核心食材”里,或者发现“番茄酱”其实应该由餐厅自己准备,而不是让顾客带)。

2. 核心发现:大家经常“改口”

研究人员像侦探一样,检查了 33,087 个 餐厅(JavaScript 项目)的菜单(package.json 文件)历史记录。他们发现了一个惊人的现象:

  • 改口很常见:近 80% 的餐厅,在经营过程中都曾经把某些东西的“身份”给改了。
  • 扔掉东西很频繁:97% 的餐厅都曾经把某些食材或工具彻底扔进垃圾桶(删除依赖)。
  • 身份互换很普遍:38% 的餐厅,会把东西从“核心食材”移到“后厨工具”,或者反过来。
    • 比喻:就像发现那个“切菜机”其实顾客点菜时也需要,于是把它从“后厨工具”移到了“核心食材”;或者发现那个“牛肉”其实只是用来试菜的,于是把它从“核心食材”移回了“后厨工具”。
  • 反悔也很常见
    • 扔了又捡回来:33% 的餐厅,把东西扔了之后,过段时间又后悔了,把它捡回来继续用。
    • 反复横跳:11% 的餐厅,某个东西的身份在“核心”和“工具”之间反复横跳,像钟摆一样。

3. 为什么会出现这种情况?(就像餐厅的“试错”过程)

论文发现,这种“改口”通常不是一瞬间完成的,而是一个漫长的过程(中位数需要 408 天,也就是快一年!)。

  • 一开始可能搞错了:刚开餐厅时,厨师可能分不清哪些是“核心食材”,哪些是“后厨工具”。
  • 边做边改:随着时间推移,厨师发现:“哎呀,原来这个工具顾客根本不需要带,还是我们自己做吧!”于是就把“共享调料”改成了“核心食材”。
  • 批量大扫除:有时候,厨师会一次性把一堆不用的工具都扔了(批量删除)。但过几天发现:“坏了,扔过头了,那个切菜机还得用!”于是又只捡回了一部分。

4. 这个研究有什么用?(给未来的建议)

这篇论文告诉我们要改变对软件管理的看法:

  1. 对工具开发者(给厨师用的智能助手)

    • 现在的工具只告诉厨师“你现在用了什么”,但没告诉厨师“你以前用过什么,后来为什么改了”。
    • 建议:未来的工具应该像“餐厅历史顾问”,告诉厨师:“嘿,这个工具你以前把它当核心食材用了半年,后来发现其实是后厨工具,你确定现在还要把它放核心里吗?”
  2. 对包管理器(像美团/饿了么这样的配送平台)

    • 现在的平台只管“送什么”,不管“送得对不对”。
    • 建议:如果系统发现某个东西(比如“切菜机”)被错误地放在了“核心食材”里,应该立刻报警:“警告!这东西通常只用于后厨,放在核心食材里会让餐厅变重(体积变大)且不安全!”
  3. 对研究人员

    • 不要只盯着“版本更新”看。要理解为什么开发者会犯这些错,为什么他们会反复修改。这不仅仅是代码问题,更是认知和决策的问题。

总结

这就好比我们装修房子。刚开始装修时,我们可能把“电钻”当成了“日常家电”放在客厅(Core),后来发现它太吵了,把它移到了工具箱(Dev)。过了一年,我们又发现邻居装修时借走了电钻,导致我们没法用,于是又把它搬回客厅。

这篇论文告诉我们:软件里的依赖关系不是一成不变的死板规定,而是一个随着项目成长、不断试错、不断调整的动态过程。 理解这个过程,才能帮开发者把软件维护得更好、更轻、更安全。

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

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

试用 Digest →