循環的複雑度(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で回しても良いと思います。
Checkstyle以外の静的解析ツール
FindBugs(FindBugs-IDEA)、PMD(QAPlug - PMD)あたりが有名みたいですね。
実際にどんな感じで怒られるのか
こんな感じの右寄りのコードがあると(real-time reportで既に赤くなって怒ってるけど)
許容上限を10に設定してあるので、CCが14になってんぞぼけ、と無事怒られました。
追記
Android Studio標準のインスペクタでもCCのチェックは出来るらしい。今手元にAndroidStudioが無いのでまだ確認はしてない。thx @masanobuimai