Coverage

概要

各メソッドのコードカバレッジ(C0カバレッジ)の平均値が一定値以上の際に獲得できる実績です.

タイトル (Lv.1) タイトル (Lv.2) タイトル(Lv.3)
Judge a code by it's cover Lookers-on see most of the game End up catching both
課題 基準値 (Lv.1) 基準値 (Lv.2) 基準値 (Lv.3)
Trial --- --- ---
Lexer --- --- ---
Parser --- --- ---
Checker --- --- ---
Compiler 70%以上 80%以上 90%以上

注釈

コードカバレッジCode coverage ,コード網羅率)とは,ソフトウェアテストで用いられる尺度の1つであり,プログラムのソースコードがテストされた割合を意味しています.

コードカバレッジの測定にはいくつかの手法があり,主に以下のような手法があります:

  • 命令網羅 (statement coverage) :ソースコードの各文がテストで実行されたかどうか
  • 分岐網羅 (branch coverage) :制御構造上の分岐でそれぞれの分岐方向がテストされたかどうか
  • 条件網羅 (condition coverage) :分岐条件の各項で真と偽の両方がテストされたかどうか
  • 経路網羅 (path coverage) :対象コードの考えられる全ての経路についてテストで実行されたかどうか

上で列挙した手法は相互に関係しており,例えば経路網羅は命令網羅と分岐網羅を含んでいます. また,命令網羅は C0カバレッジ ,分岐網羅は C1カバレッジ ,条件網羅は C2カバレッジ とも呼ばれます. Coverageの実績では,C0カバレッジによる測定結果を用いています.

コード例

カバレッジの説明を行うために,以下のようなサンプルコードを考えます.

void hoge(input1, input2) {
  final int MAX = 10;

  //条件分岐1
  if (input1 > MAX) {
    //処理1
  } else {
    //処理2
  }

  //条件分岐2
  if (input1 % 2 == 0 || input2 % 3 == 0) {
    //処理3
  } else {
    //処理4
  }
}

命令網羅(C0カバレッジ)

C0カバレッジを網羅するには,命令(処理)に注目してそれらを全て通過するようなテストケースを考える必要があります. 上記のコード例で言うと,処理1から処理4までの全ての処理を通過するテストケースを作成します. テストケースの例としては,

  • input1 = 12 として,処理1と処理3をチェック
  • input1 = 9 として,処理2と処理4をチェック

の2パターンをテストすることで,C0カバレッジを網羅できます.

分岐網羅(C1カバレッジ)

C1カバレッジを網羅するには,条件分岐に注目して全ての条件についてTrue/Falseの判定結果を網羅するようなテストケースを作成します. 上記のコード例で言うと,

  • 処理1(True)& 処理3(True)
  • 処理1(True)& 処理4(False)
  • 処理2(False)& 処理3(True)
  • 処理2(False)& 処理4(False)

の全ての分岐を通過するテストケースを作成します. テストケースの例としては,以下のようなものを考えることでC1カバレッジを網羅できます.

入力値 条件分岐1 条件分岐2
input1 = 12 True True
input1 = 13 True False
input1 = 9 False True
input1 = 8 False False

条件網羅(C2カバレッジ)

C2カバレッジを網羅するには,条件分岐内の条件に注目して全ての条件結果を網羅するするようなテストケースを作成します. 分岐網羅(C1カバレッジ)との違いは,ANDやORで複数の条件が結ばれていても,それぞれを独立した条件と見なします。 上記のコード例では,条件分岐2に着目すると2つの条件がORで結ばれています( input1 % 2 == 0 || input2 % 3 == 0 ). C1カバレッジではこの条件式を1つと見なし,True/Falseの結果を確認していましたが,C2カバレッジでは別々の条件として考えます. もちろん最終的には,条件分岐1も含めて考える必要があるため,テストケースの総数は8(条件分岐1では2パターン,条件分岐2では4パターン,計 4 × 2 = 8パターン)となります.

input1 input2 条件分岐1 条件分岐2 ( input1 % 2 == 0 条件分岐2 ( input2 % 3 == 0
12 3 True True True
12 4 True True False
13 3 True False True
13 4 True False False
8 3 False True True
8 4 False True False
9 3 False False True
9 4 False False False

ちなみに

Eclipse,IntelliJ Ideaともにカバレッジを可視化した状態で確認することができる機能があります.