Androidでコードカバレッジがどんな感じで測れるのか


はじめに

前回のAndroidでJUnitがどんな感じで動くのかに続き、今回はコードカバレッジがどのような感じで測れるのかについてご紹介します。

設定を有効にする

Androidのビルドシステムではnew-build-systemのドキュメントにあるように、0.10.0からコードカバレッジの仕組みとしてJacocoがサポートされています。この仕組みを使用することでJUnitの実行時にどの程度、アプリのコードを網羅しているかを測定することができるようになります。

設定を有効にするにはbuild.gradleにtestCoverageEnabledのオプションを追加するだけです。次の行を追加します。

    buildTypes {
        debug {
            testCoverageEnabled true
        }
    }

サンプルアプリ

前回と同じく、使用しているアプリは次のURLで公開しています。

ソースコードの取得には次の様にgitコマンドを使用して取得してください。

$ git clone https://github.com/cattaka/FastCheckList.git

コードカバレッジのレポートを作成する

コードカバレッジのレポートの作成にはプロジェクトのルートディレクトリで次のコマンドを実行します。
なお、実機を接続していなかったり、エミュレーターを起動していない場合は"No connected devices!"というエラーがでますのでご注意ください。

$ ./gradlew createDebugCoverageReport

このコマンドを実行すると以下の場所にhtmlファイルとしてレポートが作成されます。アプリのモジュール名やBuild Flavorsの指定によってはディレクトリ構造が若干異なるので、その場合は適宜読み替えてください。

  • ./app/build/outputs/reports/coverage/debug/index.html

レポートの見方

レポートには命令と分岐の網羅度が表示されます。命令の網羅度とはコード上の処理の中で、JUnitの実行中に実際に実行した割合を意味します。分岐の網羅度とは、if文などの分岐においての網羅度を意味します。

レポートのトップページではJavaのパッケージ単位に網羅度を集約した値が表示されます。
これらはクリックして展開していくとパッケージ>クラス>メソッドの順で網羅度を閲覧することができます。

メソッドより詳細に展開すると、コードが表示され、実際に実行されたものは緑で、実行されなかったものは赤色で表示されます。赤色が多い場合はテストのカバレッジが不十分であることを意味します。

赤色の部分が多い場合は、テストが不十分であるということで、テストの項目を追加することが望まれます。ただし、カバレッジはアプリケーションの品質を表す指標のうちの1つでしかないため、闇雲に追加すれば良いわけではないのでご注意ください。

カバレッジのレポートのサンプル

サンプルアプリのカバレッジのレポートはこちら

おわりに

簡単にですがAndroidでコードカバレッジを測定する流れを紹介しました。なんとなくどのように動くのかが伝わりましたでしょうか。

次回はCIを通してテストとコードカバレッジの測定を自動化する方法をご紹介します。