Edited at

Subversion管理のソースもbugspotsで分析したい

More than 1 year has passed since last update.


概要

Google謹製のバグ予測アルゴリズムを実装したツールに「bugspots」というものがありますが、

分析対象はGitリポジトリで管理されているソースのみとなっています。

一方でGitを使用したいけど技術的・政治的な理由でSubversionを利用せざるを得ないというケースも多いのではないのでしょうか。

本記事では、ソースコードはSubversion管理だけどbugspotsを利用して分析したい!という方向けに、

そのやり方を紹介する記事となります。


どうやるか?

簡単に調べた感じ、3つの実現方法がありそうです。



  1. bugspots-svnを利用する


  2. bugspots-netを利用する

  3. 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 コマンドで initfetch をまとめて実行してもOKですが、

エラー時に途中から再開できるよう initfetch を別々に実行するやり方をお勧めします。

※はじめは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/" .

実行結果をテキストにしてレポーティングするなど良しなにやってみてください。


参考