Was It Never Collected, or Rewritten Away? A Commit-Provenance Dataset Separating Ingestion Gaps from Upstream History Edits across the World of Code
本文介绍了一个提交溯源数据集,该数据集区分了由上游历史重写(强制推送)导致的缺失提交与由全球代码镜像中真实的摄取间隙导致的缺失提交,揭示了约 6.5% 的缺失提交属于被重写而非丢失,并提供了用于提高贡献计数准确性和镜像完整性报告准确性的修正因子。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正试图为一个规模宏大的全球艺术项目制作一本完美的、完整的照片集,记录下每一个瞬间。在这个项目中,成千上万的人在不断地在彼此的作品之上进行涂鸦、擦除和重绘。
这篇论文介绍了一个新工具,它能帮助我们理解为什么我们的相册里会缺少一些照片。
问题所在:“缺失照片”之谜
多年来,研究人员一直试图从 GitHub 中收集每一个提交(即代码变更的“照片”),并将其存入一个名为 World of Code (WoC) 的巨型数据库中。但他们发现了一个问题:这个相册是不完整的。有数百万张本该出现在那里的“照片”却不见了。
此前,研究人员只是简单地认为这些缺失的照片永远丢失了,因为收集系统未能抓取到它们。他们认为:“噢,我们漏掉了 40% 的照片;我们的收集系统坏了。”
但本文认为:等等。也许照片并没有丢失;也许它们是被故意删除的。
两大嫌疑人
作者 Audris Mockus 指出了导致照片缺失的两种截然不同的原因:
- 收集缺口(“漏拍”): 相机(收集系统)眨了眼,或者文件传输失败了,导致照片从未被保存。这是一个真正的错误。
- 历史重写(“删除草稿”): 艺术家(项目所有者)觉得某个版本的画作不太满意。他们使用“强制推送”(一种数字橡皮擦)抹去了那个版本,并用一个新的版本替换了它。这张照片在最终版本中从未存在过,因为它被艺术家擦除了。
旧的计数方法将这两者混为一谈。它说:“我们丢失了 46% 的照片!”这让收集工作的表现看起来比实际情况糟糕得多。
侦探工作:两种不同的视角
为了破解这个谜团,作者使用了两个不同的“相机”来观察同一个事件:
- 相机 A (GHArchive): 这就像是一个安全监控摄像头,它记录下发生时所宣称的一切。它不在乎照片稍后是否被删除;它只记录:“下午 2:00,有人推送了一张名为‘Commit X’的照片。”
- 相机 B (World of Code): 这是当前的相册。它保存了目前为止收集到的所有内容,但它不保留已被删除的照片。
通过将安全摄像头的日志(曾经“存在”过什么)与当前相册(目前“保留”了什么)进行对比,作者可以将每一张缺失的照片精准地归入三个堆栈中:
- 存在: 照片在相册中。(53% 的情况)
- 已重写: 照片曾被宣称存在,但随后被艺术家擦除了。安全摄像头看到了它,但相册里没有它,因为它被删除了。(6.5% 的情况)
- 从未摄入: 照片曾被宣称存在,艺术家也并未删除它,但相册里仍然没有它。这才是真正的收集缺口。(40% 的情况)
巨大的惊喜
结果令人震惊。此前,人们认为“缺失率”接近 47%。
- 现实情况是: 只有 40% 是真正的缺失(收集缺口)。
- 反转在于: 大约有 6.5% 的“缺失”照片实际上是由艺术家本人删除的。
这意味着,在每 15 张缺失的照片中,就有一张不是因为收集者的失误,而是因为创作者的刻意编辑。
为什么这很重要(用通俗的话说)
1. 诚实的报告
如果你正在研究软件,你不再需要说:“我们的数据有 47% 的不完整性。”你可以说:“我们的数据有 40% 的不完整性,而另外 7% 是由创建者删除的。”这会让你的研究更加准确。
2. 正确统计工作量
想象一个工人写了 100 行代码,然后删掉它们并重新写了 100 行新的代码。
- 旧计数法: 你只能看到那 100 行新的代码。你认为他们只做了 100 行的工作。
- 新计数法: 这个工具能看到他们先写了 100 行,然后删掉,又写了 100 行。它意识到那些“被删除”的 100 行也是真实的劳动,只是被隐藏了。
- 结果: 论文表明,如果你只统计目前可见的内容,你将会低估总生产力约 10.8%。这就像是一座工厂明明造了 100 辆车,但因为其中 10 辆被报废并重建了,你却以为他们只造了 90 辆。
3. 避免重复计数
如果开发者重写了一个提交(擦除旧的并创建一个带有新 ID 的新提交),这本质上是同一处代码补丁。如果没有这个工具,计算机可能会把旧版本和新版本视为两项独立的贡献。该工具会将它们标记为重复项,以免造成混淆。
总结
这篇论文为我们提供了一个侦探的放大镜。它将“损坏的相机”(收集缺口)与“删除的草稿”(历史重写)区分开来。
它告诉我们,World of Code 比我们想象的更擅长收集数据(因为部分所谓的“缺失”数据原本就不打算留下),但也告诉我们,由于无法看到那些被擦除的工作,我们低估了开发者的实际工作量。
作者已经发布了所有的数据和工具,以便任何人都可以使用这个“侦探透镜”来获得一个更清晰、更真实的编程世界图景。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。