bugspots (Google のバグ予測アルゴリズム)を3ヶ月くらい運用してみた話

このエントリーをはてなブックマークに追加
開発の土田です。

bugspots が何かをご存知でない方はまず、下記の記事をご参照ください。

Google のバグ予測アルゴリズムと bugspots の導入

bugspots は簡単に言うと、「そのファイルはバグ修正が最近沢山されているから、次に修正するときもバグが入る可能性が高い」という考え方でスコアを算出するアルゴリズムです。コミットログを参照し、ファイルごとにスコアを算出します。前回の記事では、bugspots の簡単な紹介と、その導入について書きました。今回はその応用編として、どのように運用しているかを書いていきたいと思います。

コミットログについて

bugspots はバグが発生したコミットが重要な指標で、バグかどうかの判断基準にコミットログの文字列を使っています。デフォルトは「fixとかcloseっぽい文字列」(fixes, fixed, closes, closed を含むコミットログ)が対象になります。

弊社では BTS として bugzilla を使っているので、バグフィックスをした際は bug XXX(バグ番号)みたいなコミットログが入っていることが多いです。そのため、「bug ではじまる」コミットを対象にしています。ただ、前回も書いたように、エンハンスにも bug id を切っている場合があるので、本来は機能追加でバグではないのに、(bugspots から見ると)バグとして扱われてしまう問題がありました。

今回は開発チーム内で相談して、エンハンスの場合はコミットログに何か別の文字列をつける(たとえば「[Enhance]」などを頭に付与する)ことで、区別できるようにルールを変えてもらいました。過去のものはどうにもならないですが、bugspots はその性質上、直近のコミットのほうが重視される(スコアが上がる)ようになっているので、いずれ時間が解決してくれるでしょう。

実行方法について

最初は master へのコミットフックで実行していたのですが、しばらく使っていると、大きな変動は無いことが分かったので、月一回の定期実行に変えました。このあたりは、プロジェクトのファイルサイズや期間で変動してくると思うので、様子を見て最適なポイントを見つけると良いと思います。

実行方法はシンプルで、Jenkins の定期実行を使って master に対して実行し、HTML Publisher でテキストとして保存しているだけです。Jenkins で使ってるシェルスクリプト(って言うほどのものでも無いですが。。。)は下記

source $HOME/.bashrc
bugspots -r "/\Abug/" . > bugspots.txt

ついでにキャプチャも取ったので載せておきます。こんな感じで、上記スクリプトを毎月1日9時頃に流しています。


活用方法について

「pull request にフックして点数が高ければ警告」とか本当はやりたいのですが、結構手間がかかるので、そこまでできていません。月一回の定期実行の後に、生成されたレポートを見ています。

bugspots のスコアの妥当性について


ここ3ヶ月くらい、bugspots のスコアを実際に見ていますが、意外なところはあまり無く、「知ってた」、「まあココ触ればそりゃバグ出るよねぇ」みたいなモノがほとんどでした。では、「このスコアには意味がないのか?」というと、僕はそんなことはないと考えています。複雑度(Cyclomatic Complexity)等もそうなんですけど、こういうツールを使って検出した結果は大体経験と一致していることが多いです。でもそれは自然であり、良いことだと僕は考えます。

一つは、直感とあまりに反する結果が出た場合、それを信じていいのか良く分からないからです。「bugspots のスコアが高いところを中心にリファクタリングをして、今後のバグが出ないようにする」という施策を打つ場合、結果が直感にあまりに反している場合、本当にそれをやってよいのか自信を持てません。

二つ目の理由も同じような感じですが、たとえば、「このクラスやばいので、直したいです」という提言をする場合に、bugspots や複雑度等で高いスコアが出ていれば、それを理由にすることができます。直感的にやばそうで、かつメトリクスを見てもやばいところは、多分直したほうが良いと思うので。


今後について

レポートを見て、実際に修正を行って、スコアがどう変動していくか、みたいなサイクルが作れると良いな、と思っています。

「俺たちの戦いはこれからだ!」というわけで、シャノンではソースコードのメトリクスを見ながら製品を改善していきたい開発者も大募集しています。興味のある方はこのブログの右側の「エンジニア募集」をクリックしてみてください!


次の記事
« Prev Post
前の記事
Next Post »
Related Posts Plugin for WordPress, Blogger...