Mantalog

~ blog of the Mantarou, by the Mantarou, for the Mantarou ~

「bugspots」のWindows版を作ってみた

もう2年も前ですが、googleのバグ予測アルゴリズムを実装した「bugspots」というツールが発表されました。

本家のWebサイト
https://github.com/igrigorik/bugspots
http://google-engtools.blogspot.jp/2011/12/bug-prediction-at-google.html

日本語での紹介
http://www.publickey1.jp/blog/12/bugspots.html

SVN版を作ってくれた方
http://szk-takanori.hatenablog.com/entry/20120109/p1

気にはなっていたのですが、いままでバグ予測をしたい場面が無かったので放置してました。ですが、ちょっと最近これを使用したくなりましたので、自分用にカスタマイズした
bugspots.net
を作ってみました。

f:id:mantarou-tarou:20140115005254p:plain

 オリジナルからの変更点は以下の通りです。

2年経っても誰も作ってなかったので需要は無いかもしれませんが、現場のQA担当の方など試してみてください。 

簡単な使い方

  1. 「URL」に解析したいリポジトリを入力
  2. 「Execute」ボタンを押下
  3. しばし待つ
  4. 「Maximum」や「Total」が大きいところが怪しいので、
    そのあたりのファイルを調査

使い方

  • URL
    リポジトリのURLを入力します。
    例えば、http://server/svn/trunk/
  • Username、Password
    リポジトリにアクセスするユーザ名とパスワードを入力します。
  • View file list
    後述する「Filter regex」を指定すると、ファイル一覧には解析対象のみが表示されます。全ファイルを表示したい場合、この設定を変更します。
    処理が重くなるため、Disable推奨です。
    - Disable:解析対象のみを表示します
    - All files:解析対象以外の全ファイルを表示します。ただし外部参照は表示しません。
    - All files (including externals):解析対象以外の全ファイルを表示します。外部参照も表示します。
  • Start revision、End revision
    解析対象の開始リビジョン・終了リビジョンを入力します。
    推奨は空欄で、その場合は全てのリビジョンが対象になります。
    ただし「Limit」での制限はかかります。
  • Limit
    解析対象のログの数を入力します。
    空欄の場合は全てのログが対象になります。
    推奨は500です。(本家と同じ)
  • Filter regex
    「Filter check file」が空の場合、入力した正規表現がコミットログにマッチすると解析対象になります。例えば不具合のコミットログには「fixes」or「fixed」が入力されている場合、この「Filter regex」に「fixes|fixed」と入力します。
  • Filter check file
    文字列を改行で区切ったファイルを指定します。
    「Filter regex」で抽出した文字列が、このファイルに書かれている場合に解析対象とします。
    例えばRedmineで管理している場合、「Filter check file」には不具合チケットを改行で並べたファイルを指定します。そして「Filter regex」には「refs #([\d]+)」と入力します。これにより正規表現でコミットログからチケット番号を取得し、そのチケットがファイルに存在する場合に解析対象になります。
  • Testボタン
    正規表現のテストダイアログを表示します。
  • Executeボタン
    bugspotsの解析を行います。
  • Export CSVボタン
    解析結果をcsv出力します。

実装に関するメモ

勉強のためWPFを使用しています。

C#からSVNにアクセスしています。これには「SharpSVN」というライブラリを使用しています。最近のVisual StudioではNuGetで取得できるようです。

TreeなGridには「WPF TreeListView Control」というライブラリを使用してます。Gridの縦線・横線を表示するのに苦戦しましたが、非常に使いやすく便利です。