Removing Noise or Introducing Bias? The Hidden Cost of MSR Filtering
本研究分析了 157 万个 GitHub 仓库,旨在证明挖掘软件仓库(MSR)研究中常见的过滤标准会引入显著的维护、生态系统和关系偏差,从而扭曲项目弃用率及变量间的关系,并倡导转向分层抽样和精细化的噪声检测。
原始论文采用 CC BY 4.0 许可(https://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,互联网是一个巨大的、混乱的图书馆,任何人都可以搭建一个书架并称之为图书馆。这就是开源软件(OSS)的世界——一个巨大的数字游乐场,数以百万计的人——从测试新编程想法的学生到构建下一个大型应用的专业开发者——都在这里存储他们的项目。研究人员就像是试图解开软件运作之谜的侦探,他们热爱造访这座图书馆。他们翻遍书架,观察有多少人“点赞”了一个项目(星星/stars)、多少次人们修改了书籍(提交/commits),以及有多少人参与了编写。这些线索帮助他们理解软件工程的奥秘。但问题在于:这座图书馆如此庞大,以至于里面充满了空盒子、测试假人和半成品涂鸦。为了找到那些“真正的”书,研究人员通常会扔掉任何看起来不够流行或不够活跃的东西。他们使用这样的规则:“如果一个项目没有至少 10 个星星,它就只是噪音,所以把它扔掉。”
但如果这些规则正在扔掉那些最有趣的故事呢?如果我们为了试图清理图书馆而变得如此急于求成,会不会在无意中隐藏了“大多数书籍其实已被废弃”的事实,或者让我们最终只读到了由少数几位著名作者编写的书籍?这正是研究人员 Mohit Kaushik 和 Jyoti Bawa 正在提出的重大问题。他们担心,科学家们用来使数据“干净”的那些过滤器,可能会因为隐藏了软件项目真实生存与消亡的混乱现状,从而让他们的发现变得“肮脏”。
大过滤器:是在清理数据,还是在掩盖真相?
在这项研究中,作者决定对一大堆数据进行一场“如果……会怎样?”的游戏。他们查看了来自 SEART 平台的 157 万个 软件仓库。把这个数据集想象成一桶混合在一起的乐高积木:有些是巨大的、色彩斑斓的城堡套装;有些是微小的、单个的红色积木;还有许多只是无人完成的破碎零件。
通常,研究人员看着这桶积木会说:“好吧,我们只想要那些大的、完成的城堡。让我们扔掉任何星星(点赞)少于 10 个或提交(更改)少于 10 次的项目。”作者测试了应用这些严格规则时会发生什么,就像是在调高一个过滤器的音量,直到它变得非常响亮。
“流行度”的隐藏代价
当研究人员应用“流行度过滤器”(只看拥有更多星星的项目)时,他们发现了一些令人惊讶的事情。随着他们将星星的阈值从 10 提高到 1,000,样本中的“平均”项目不仅仅是稍微变好了一点,而是变得大了 7 倍。这些项目变得更老,有更多的人参与工作,并且更有可能拥有正式的许可证(类似于规则手册)。
但转折在于:通过追逐热门项目,他们完全忽略了现实。在他们最初未经过滤的积木桶里,73.42% 的项目实际上是不活跃或“被废弃”的。然而,随着他们进行流行度过滤,这个数字下降了。到他们只观察超级热门项目(1,000+ 星)时,数据看起来像是只有 50.65% 被废弃了。过滤器不仅移除了噪音,还隐藏了“大多数项目实际上会失败或被遗弃”这一事实。这就像如果你只询问一个城市中最成功的人关于他们的工作,然后得出“失业率很低”的结论,因为你从未去接触过那些失去工作的人。
“活跃度”陷阱
作者还测试了“活跃度过滤器”,即只保留提交次数(更改)较高的项目。这更加极端。当他们过滤出高活跃度的项目时,平均项目规模增长了 18 倍!这些过滤器也改变了软件的“个性”。例如,使用 C++ 语言的项目在低阈值组中很常见,但在过滤器变得严格后,它们在排名前五的项目中消失了。与此同时,TypeScript 和 Go 在过滤后的列表中变得更加普遍。
研究表明,这些过滤器并非中立的。它们就像一个筛子,只允许特定类型的项目通过:那些更老、巨大且资金充足的基础设施项目。它们排挤掉了较小、较新或更具实验性的项目,即便这些较小的项目也是真实且活跃的。
关系的乱象
或许是最具趣味性(也最具危险性)的发现是关于这些过滤器如何扰乱不同事物之间的关系。想象一下,你试图弄清楚“努力工作”(提交)是否会导致“变得流行”(星星)。在真实的、混乱的世界中(基准数据),这两者之间的联系非常微弱。但当研究人员应用这些过滤器时,这种联系突然看起来变得异常强大。
例如,“提交”与“项目规模”之间的联系从适中的 0.466 跳跃到了活跃度过滤组中极强的 0.808。作者解释说,这并不是因为项目本身发生了变化,而是因为过滤器强行让它们看起来如此。通过只保留那些庞大、繁忙的项目,过滤器让它看起来像是“大项目总是有很多提交”,而实际上,这种关系要复杂得多。这就像如果你只研究最高的篮球运动员,然后得出结论说“身高是体育运动中唯一重要的事情”,而忽略了其他所有人。
结论:不要仅仅扔掉噪音
作者总结道,虽然我们需要清理数据,但我们不能在不加思考的情况下使用像“10 个星星”或“500 次提交”这样武断的规则。这些规则就像一把钝重的锤子:它们砸碎了“噪音”,但也砸碎了真相。它们创造了一个扭曲的图景,让软件项目看起来比实际情况更成功、更古老、更统一。
作者建议,与其盲目过滤,不如使用分层抽样。想象一下,从乐高桶里舀出一勺包含大城堡、小房子和破碎零件的公平混合物,而不是只挑选最大的城堡。他们还敦促科学家们重新思考什么才算作“噪音”。也许一个零星的项目不仅仅是一个失败的实验;也许它是一个尚未被发现的隐藏瑰宝。
简而言之,这篇论文警告我们,在我们急于寻找“完美”数据的过程中,我们可能会建造一座纸牌屋,它在外表上看起来完美无瑕,但一旦我们试图理解真实的、混乱的世界,它就会坍塌。作者并不是说我们应该完全停止过滤,但他们强烈建议我们停止使用这些“一刀切”的规则,并开始更加谨慎地对待我们正在丢弃的东西。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。