リポジトリマイニングとは何か?膨大なデータから将来の開発に役立てるための研究分野を紹介

2021年5月14日

リポジトリマイニングの概要

リポジトリマイニングとは、ソフトウェア開発において蓄積された膨大な開発資産をマイニング(採掘)し、新たなソフトウェア開発の生産性や品質向上に役立てるための知見を得る研究分野のことです。
開発資産とは具体的にCVSやSubversion、Gitなどのバージョン管理システム、Bugzilla、Redmineなどのバグ管理システム、ドキュメント、メールの履歴などの情報を指します。
これらの開発資産を分析することで、新しいソフトウェア開発において、バグを含んでいる可能性の高いモジュールを予見し、レビューやテストを重点的に行ったり、バグの混入箇所の特定を行ったりします。

リポジトリマイニングはOpen Source Software(OSS)の拡がりとともに発展してきました。
OSSでは世界中の開発者たちが蓄積したデータを使用することができるためです。

なぜリポジトリマイニングが必要なのか

OSSの普及によって、閲覧可能なソフトウェアの開発資産は非常に膨大になりました。
しかし、開発資産はそのままでは単なるデータの塊というだけで終わってしまいます。
そこで、この膨大な情報を整理して有効な情報を抽出し十分に活用しようという試みが始まりました。それがリポジトリマイニングです。

一般的に研究の価値とは、現状の課題を解決すること、新しい知見を得ることに大きく分かれますが、リポジトリマイニングは後者の要素が大きいとされています。

どういうときにリポジトリマイニングが使われるのか

リポジトリマイニングの研究テーマは多岐に渡ります。
ここでは研究テーマの例をいくつか紹介します。

バグモジュール分析

どこにバグが潜んでいるかを予測し、レビュー工数やテスト工数を最適に配分します。
バージョン管理システムの履歴をもとにバグの混入時期、修正時期、混入者、混入箇所を推定し、ソースコードの複雑さや変更規模に対して検出されたバグから予測したいバグの数などを算出します。

Bug Localization

バグの混入している、修正対象となるソースコードを特定します。
バグ管理システムに登録されたバグレポートで報告されたソースコードと、新規に作成したソースコードとを比較対象にして、テキスト類似度を計算し新規のコードにバグが混入しているかどうかを発見します。

コーディングパターン検出

バージョン管理システムの履歴から関数やApplication Programming Interface(API)の呼び出し方のパターンを抽出します。
デザインパターンの利用状況を知ったり、アンチパターンが使用されていないかを検出したりすることができます。