概要
Google謹製のバグ予測アルゴリズムを実装したツールに「bugspots」というものがありますが、
分析対象はGitリポジトリで管理されているソースのみとなっています。
一方でGitを使用したいけど技術的・政治的な理由でSubversionを利用せざるを得ないというケースも多いのではないのでしょうか。
本記事では、ソースコードはSubversion管理だけどbugspotsを利用して分析したい!という方向けに、
そのやり方を紹介する記事となります。
どうやるか?
簡単に調べた感じ、3つの実現方法がありそうです。
- bugspots-svnを利用する
- bugspots-netを利用する
- git-svnを利用し、SVN上のソースをGitリポジトリに移管した上で本家のbugspotsを利用する
bugspots-svn利用(パターン1)
個人が開発したbugspotsのSVN対応版となります。
http://szk-takanori.hatenablog.com/entry/20120109/p1
所感
- 完全に開発止まってる(最終コミット:Jan 18, 2012)
解析ロジック自体は本家のものを流用新規で利用しているため、本家に置いてかれている可能性あり - Ubuntu以外のOSでの動作が怪しい(というかsubversionのrubyバインディングのインストールで躓く)
bugspots-net利用(パターン2)
個人が開発したbugspotsのWindows版となりますが、こちらもリポジトリはSVNを想定したものとなっています。
http://mantarou.hatenablog.com/entry/2014/01/15/004904
所感
- こちらも開発止まってる(最新リリース:Jan 15, 2014)
- GUIで見やすくなっているが、CUIが欲しい(Jenkinsとかで定期実行してレポーティングとかしたい。)
git-svn + bugspots(本家)利用(パターン3)
SVN管理のソースをgit-svnを利用してgitリポジトリに移管した上で本家のbugspotsを利用するパターンです。
所感
- bugspots用とはいえ、gitリポジトリの利用ができることが前提
- 本家のbugspotsが利用できるのが安心
今回紹介する方法
やはり本家のものを利用するのが分析結果の信頼性もあるということで、
git-svn + bugspots利用(パターン3)のやり方を紹介したいと思います。
(そもそもGitリポジトリの利用ができないという方はごめんなさい。)
環境情報
- OS: Amazon Linux
- Ruby: 2.0.0
1. bugspotsインストール
gemで簡単にインストールできます。(rubyがインストールされている前提とします。)
gem install bugspots
2. git-svnインストール
SVN管理のソースをGit移管するためにgit-svnをインストールします。
sudo yum install git-svn
3. SVNリポジトリからGitリポジトリ作成
git svn init -s --prefix=svn/ https://your.svn/repos/project
git svn fetch
git svn clone
コマンドで init
と fetch
をまとめて実行してもOKですが、
エラー時に途中から再開できるよう init
と fetch
を別々に実行するやり方をお勧めします。
※はじめはWindows上で試したのですがRuby製ということもあり git svn clone
が「ハンパなく」遅いです。
(リビジョンの大きさ次第ですが、私が試したのはリビジョン40000ぐらいで丸一日かけても終わらないレベル)
Linux上での実行を推奨します。
4. bugsopts実行
bugspots -r "/^*bug/" .
bugspotsは解析ロジックの中で「バグフィックスのコミット回数」を使用しており、
-r
オプションで「バグフィックスのコミット」を特定するコミットログメッセージのパターンを指定します。
日本語のコミットメッセージが許容されている場合は「修正」等、適宜利用環境に応じて指定してください。
5. 結果確認
Scanning . repo
Found 1234 bugfix commits, with 1234 hotspots:
Fixes:
- fix a comment
- Fixed index hogehoge
Hotspots:
0.8875 - Gemfile.lock
0.8478 - Gemfile
0.7712 - app/controllers/hoges_controller.rb
0.3702 - app/views/hoges/index.text.slim
Hotspotsのスコアが高ければ高いほど、バグが潜んでいる可能性が高いコードという見方になります。
6. 定期的に実行する場合は
定期的に実行する場合は git svn fetch
でSVNの更新分を取得し、 bugspots
コマンドを実行します。
git svn fetch
bugspots -r "/^*bug/" .
実行結果をテキストにしてレポーティングするなど良しなにやってみてください。