LoginSignup
41

More than 5 years have passed since last update.

AndroidStudio+Checkstyleで循環的複雑度を自動チェックする

Last updated at Posted at 2014-07-22

循環的複雑度(CC)とは、20を超えていたら「このコード読めないしどうやってテストすんだよボケ」と中身を読まずにコードレビュで突き返して良い指標、ではなく、そのメソッドをちゃんとテストするのにどれぐらいの量のテストケース数が必要なのかを表す指標です。これが高かったからといって必ずしもクソコードだというわけではないですが、コードの不吉な臭いを定量化したり自動監視したりするのに使える指標の一つだと言えます。

さてAndroidStudioではCheckstyle(CheckStyle-IDEA)というプラグインを入れることで、様々なコードスタイルのチェックをリアルタイムだったりコミット時だったりに自動でかける事が出来るのですが、循環的複雑度のチェックも含める事が出来ます。

Checkstyleの設定

checkstyle - Metrics(CyclomaticComplexity)

<module name="CyclomaticComplexity">
    <property name="max" value="7"/>
</module>

これをCheckstyleの設定ファイル(XML)に追加すれば、循環的複雑度が7を超えたメソッドについて警告を出してくれるようになります。なおデフォルトの許容上限値は10です。

許容上限値をいくつにするべきか

私は20にしています。デフォルトの10でも良いと思います。

継続的解析

Jenkinsを使って継続的に静的コード解析をさせる

私はコードレビュ時に人力複雑度チェッカーになるのが嫌で導入しましたが、Jenkinsで回しても良いと思います。

Checkstyle以外の静的解析ツール

FindBugs(FindBugs-IDEA)、PMD(QAPlug - PMD)あたりが有名みたいですね。

実際にどんな感じで怒られるのか

スクリーンショット 2014-07-22 16.54.25.png

こんな感じの右寄りのコードがあると(real-time reportで既に赤くなって怒ってるけど)

スクリーンショット 2014-07-22 16.57.10.png

許容上限を10に設定してあるので、CCが14になってんぞぼけ、と無事怒られました。

追記

Android Studio標準のインスペクタでもCCのチェックは出来るらしい。今手元にAndroidStudioが無いのでまだ確認はしてない。thx @masanobuimai

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41