SANER 2021 https://arxiv.org/pdf/2103.04682.pdf

背景

挖掘软件存储库 (Mining Software Repositories,MSR) 是软件工程领域的一个研究领域,在过去的二十年中得到了显着发展。 MSR 研究旨在通过利用软件存储库中可用的有价值信息来收集有关开发人员和软件项目的经验证据。 为了进行 MSR 研究,研究人员通常执行以下步骤:
Define the context:定义哪些是研究感兴趣的存储库(例如,在 GitHub上的 1,500 个最流行的
Java 存储库)
Create the raw dataset:通过识别感兴趣的潜在存储库并收集相关数据来创建原始数据集。 通常需要在自己的工作计算机上克隆存储库。
Clean raw dataset : 通过删除那些与软件开发无关的存储库来清理原始数据集
Analyze:通过处理收集的数据来分析干净的数据集,从而收集经验证据。

因此,GitHub 最适合 MSR ,但也存在一些问题:
API 限制。在 GitHub 上搜索特定项目(例如,存储库或用户),每个查询返回最多 1,000 个结 果。此外,分页限制为 100 个结果。 这意味着,对于返回 1,000 个结果的查询,需要向 Search API 发出 10 个HTTPS 请求才能获得 1,000 个结果。 最后,每个经过身份验证的 GitHub 用户每分钟最多可以发送 30 个 HTTPS 请求(而非经过身份验证的 GitHub 用户每分钟最多只能发送 10 个HTTPS 请求)。
其他语言的存储库。当通过某种编程语言搜索存储库(通过搜索 API)时,结果可能(错误地)包括不包含该编程语言文件的存储库。
与软件开发无关的存储库。GitHub 可用于不同于软件开发的目的。 因此,存储库的搜索(通过搜索 API)可以返回存储库教程、网站等的理论
其他语言。搜索英文仓库时,Search API 可以返回(口语)语言与英语不同的仓库。如果发生这种情况,对于不会说这些存储库中使用的语言的研究人员来说,了解这些存储库是否涉及软件开发可 能会非常困难且耗时。
本文介绍了G-Repo可帮助进行 MSR 研究的研究人员创建原始数据集,然后清理这些数据集,可解决上述1,2,4情况。

方法设计

GUI Module

G-Repo: a Tool to Support MSR Studies on GitHub - 图1

Search Repositories Module

对于上述问题1(API限制),本文设置一下解决方案
当查询的结果超过 1,000 条时,它会自动将查询拆分为多个查询(通过使用减少的存储库创建日期间隔),以便收集所有结果;
自动处理每页 100 个结果的限制;
对HTTPS 请求进行计时以防止达到速率限制(关于每分钟30 个请求)。

Programming Language Check Module

对于上述问题2(编程语言问题),本文采取的解决方法

  1. 所查询语言限定符值,eg,java -> .java
  2. 该存储库的文件数目
  3. 该存储库中符合条件1的文件数目
  4. 计算比例

对于每个存储库,GUI 会显示请求的编程语言及其百分比。 值得一提的是,即使用户在查询 GitHub 存储库时没有指定语言限定符,该模块也能工作。 在这种情况下,模块的行为略有不同,因为它计算每种已知编程语言的百分比,然后将概率最高的语言与存储库相关联(连同百分比)。

Language Detection Module

  1. clean README , eg: 去除代码块,超链接等。
  2. py库函数检测语言
  3. 1) english 只检测到英语
    1. not english 没检测到英语
    2. mix 都检测到

      3. 实验

      https://youtu.be/mb9CIALBFZk.