SVNのコミット履歴を分析する

「おいおい2010年頃の記事かよwwww」
ってなる人もいるかもしれないですが、2018年の記事です。

いや、まだSubversion、TortoiseSVN全盛ですからね、、、
世の中はGitHubがマイクロソフトに!とか騒いでますがね。。。

■コミット履歴を可視化する

はじめは隙間時間のゲーム感覚だったのですが、
・曜日ごとのコミット数
・誰がいつごろコミットしているのか
・コミット数が多いクラスは何か
→そのクラスはバグが多いのか?
とかいろいろ肌感覚で感じていることと、
実際のずれとかってあると思うので見直してみようと思いトライです。

TortoiseSVN単体でもそれっぽい統計は取れます。
ログを表示 > 右下に「統計」のボタンがあるのでそこをクリック

これでこんな感じに見ることが出来ます。

2:8の法則っぽくはなる

これだけでもちょっと面白いんですが、もう少しいろいろ見てみたいです。

そこでstatSVNを使います。

■statSVNの使い方

まずはダウンロードします。
http://sourceforge.net/projects/statsvn/
ここにアクセスしてzipファイルをダウンロードします。

ダウンロード時点でstatsvn-0.7.0でした(たぶんもう更新とか無いでしょう)

statSVNに食わせるファイルを作成します。
とりあえずreadme.txtにあるQuick Startに習って実行していきましょう。

↓readmeの中のコレ
* Change into that directory and type
‘svn log –xml -v > svn.log’
* Change back to the c:\statsvn directory
* type ‘java -jar statsvn.jar c:\myproject\svn.log c:\myproject’
* Open c:\statsvn\index.html in your web browser

コマンドプロンプトを開いて、取得したい最上位の階層まで行って
svn log –xml -v > svn.log

こんな風にコマンドを打つとログが取得できます。

テキストデータなのに大きい、、、

くっそでかいテキストファイルが取得できました。

* type ‘java -jar statsvn.jar c:\myproject\svn.log c:\myproject’
一番最後の引数のc:\myprojectは出力先ですね。

始まりました。

index.htmlが作成されるとのことなので待ちましょう。。。。

待つことしばらく、
outputフォルダに25529個のファイルが作成されました。。。
多い

この中からindex.htmlを開きましょう

結構かゆいところに手が届くくらい分析してくれます。

人の切り口ですと

■どのパッケージに修正をよくいれているか

■いつの時間帯にコミットが多いか
人単位とそのパッケージにコミットしている単位でみれます。

■いつの曜日にコミットが多いか
こちらも人単位とそのパッケージにコミットしている単位でみれます。

 

■その人のコミットは変更が多いのか新規追加が多いのか
どういったことを多くやってきたのかざっくりわかりますね。
不具合修正が多いと変更が多くなりそうです。

コードの切り口ですと
■誰がそのコードに一番手をいれているか

■多く変更が入ったコードはどれか(コレがほしかった)
トップ20までざっと出してくれます

■コードの行数が多いコードはどれか
こちらもトップ20まで出してくれます。

とくに多く修正が入ったコードからはいろいろ学べます。

多く変更が入ったコードはよくないコードという認識です。

悪いコード
→よく変更が入るコード
→よく変更が入るコードは影響度が大きい
→コミットが入る→バグるリスクが高い(コミットしなければバグは増えない)
→バグりやすい
→よく変更が入るコードはバグが多い
→いっぱい修正しているから変更が入っている

ざっくりこんなコードですね。

やっぱり変更が多いコードは大低以下の要素を満たしています。
・行数が1000行は軽くオーバーしている
・条件文が多い。2重ループとかも多い

基本的にif文は少ないほうがいいです。
同じような条件式になる場合、メソッドに切り出せばそれだけでif文が減ります。
JUnitのテストも少なくてすみますよね。

行数も多くなれば多くなるだけそのクラスに対しての責務が大きくなります。

500行とか超えだしそうならクラスに問題があると思うべきでしょう。
(voクラスとかDaoクラスとかはカラム数に結構依存してしまうので若干例外かもしれませんが、
これもまぁうまいことやれば回避しようはいくらでもありますしね)

ちょっと今まで書いたコードを分析する良い機会になりました。

コメント

タイトルとURLをコピーしました