リポジトリマイニング研究におけるデータソース
私は研究生であり、リポジトリマイニングの専門家ではありません。 本記事では、私が調査できた範囲でのデータソースを紹介します。 記事の内容は、随時更新していく予定です。
はじめに
リポジトリマイニングとは、ソフトウェアリポジトリに蓄積された膨大な開発履歴からデータの抽出及び分析を行う研究分野です。 これにより、ソフトウェア開発の実態や傾向を明らかにし、開発プロセスの改善や品質向上に寄与することが期待されています。
リポジトリマイニング研究では、データソースの選定が非常に重要になってきます。 これは研究の再現性や複製可能性を向上させ、研究成果の信頼性を高めることに繋がります。 しかし、データセットの構築にはいくつかの課題があり、適切な研究を行うことが難しい場合が多いです。
妥当性の脅威
多くの研究で、データソースの選定が妥当性の脅威として指摘されています。 例えば、以下のような問題があります。
妥当性の脅威 | 例 |
---|---|
特定のプログラミング言語 | Javaのみ、C++のみ |
特定のドメイン | Webアプリケーションのみ、モバイルアプリケーションのみ |
誤ったラベルの付与 | SZZアルゴリズムの使用、ヒューマンエラー |
少ないデータ量 | 100件未満のコミット数 |
妥当でないプロジェクト選定 | 1年未満のプロジェクト、100件未満のスター数 |
データ収集の困難性
複数サービスのデータ収集・統合
リポジトリマイニング研究では、ソフトウェア開発を取り巻く様々なデータが分析の対象となります。 例えば、GitHubやGitLabなどのリポジトリ管理サービス、JIRAやRedmineなどの課題追跡システム、SlackやDiscordなどのコミュニケーションツールなどです。 これらのデータを分析するためには複数のサービスからデータを収集し、それを正しく対応付ける必要があります。
サービス | 例 |
---|---|
リポジトリ管理 | GitHub, GitLab, Bitbucket |
課題追跡 | JIRA, Bugzilla, Redmine |
コードレビュー | GitHub Pull Requests, Gerrit |
コミュニケーション | Slack, Discord, mailing list |
CI/CD | GitHub Actions, Travis CI, CircleCI |
ドキュメント管理 | Wiki, Notion |
GitHubAPIの制限
GitHubは広く利用されているコードホスティングサービスであり、リポジトリマイニング研究においても重要なデータソースです。 また、GitHubは課題追跡やコードレビュー、CI/CDなどを統合した開発プラットフォームであり、データ収集を効率的に行うことができます。
GitHubは開発履歴を取得するためのAPIを提供しており、これを利用することでリポジトリのコミット履歴やプルリクエスト、イシューなどのデータを取得できます。 しかし、GitHubAPIには1時間あたり5000件リクエスト(認証済みの場合)までという制限があります。 これにより、大規模な調査や試行錯誤の実験が困難になります。
データソースの選定
リポジトリマイニング研究においては、既存のデータセットを利用することも一つの方法です。 しかし、必要なデータや特定の条件を満たすデータセットが見つからない場合もあります。 ここでは、考えられる選択肢をいくつか紹介します。
🚧 執筆途中 🚧
GitHubAPI
GitHubAPIはRest APIとGraphQL APIの2種類が提供されています。
vercel/next.js
の最新のプルリクエストのタイトルを取得する例
vercel/next.js
の最新のプルリクエストのタイトルを取得する例> gh api -X GET '/repos/vercel/next.js/pulls?per_page=1' --jq '.[0].title'
# Output
Update Rspack production test manifest
> gh api graphql -f query='
query {
repository(owner: "vercel", name: "next.js") {
pullRequests(last: 1) {
edges {
node {
title
}
}
}
}
}' --jq '.data.repository.pullRequests.edges[0].node.title'
# Output
Update Rspack production test manifest
GHTorrent
GHTorrentは、論文GHTorrent: GitHub's data from a firehoseで提示されたGitHubのデータセットです。
現在GHTorrentは利用できない様です。
GHArchive
🚧 要検証