まず、 DecisionとConditionの違い。
条件は、より単純なブール式に分解できない原子ブール式です。例: a
(a
ブール値の場合)。
決定は、0 個以上のブール演算子を含む条件の複合です。演算子のない決定も条件です。例: (a or b) and c
but alsoa and b
または just a
.
簡単な例を見てみましょう
if(decision) {
//branch 1
} else {
//branch 2
}
両方の分岐をカバーするには、2 つのテストが必要です。それが決定カバレッジまたは分岐カバレッジです。決定が条件である場合 (つまり、単に)、これは基本条件カバレッジa
とも呼ばれます。これは、1 つの条件の 2 つの分岐のカバレッジです。
decision
条件に分解できます。
例を挙げましょう
decision = (a or b) and c
デシジョン カバレッジは次のように達成されます。
ただし、そのブール部分式のすべての組み合わせの順列は、完全な条件カバレッジまたは複数の条件カバレッジです)。これは、基本的な条件カバレッジの複合です。
| a | b | c |
| 0 | 0 | 1 |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
| 1 | 1 | 0 |
それは非常に多くのテストになりますが、いくつかの条件は他の条件でカバーされているため、それらのいくつかは冗長です。これは、条件カバレッジと関数カバレッジの組み合わせである修正条件/判定カバレッジ(MC/DC) に反映されています。
MC/DC では、各条件が独立して結果に影響を与える必要があります。上記のテスト (すべてが 0 またはすべてが 1) では、a と b が 0 の場合は c 値は問題にならない、または a と c が 1 の場合は b 値は問題にならないという事実を無視します。
したがって、座って頭を使って、全体の結果 R が 1 または 0 になる組み合わせを考えてみてください。
| a | b | c | a or b | c | R | eq
1 | 0 | 0 | 0 | 0 | 0 | 0 | A
2 | 0 | 0 | 1 | 0 | 1 | 0 | B
3 | 0 | 1 | 0 | 1 | 0 | 0 | A
4 | 0 | 1 | 1 | 1 | 1 | 1 | C
5 | 1 | 0 | 0 | 1 | 0 | 0 | A
6 | 1 | 0 | 1 | 1 | 1 | 1 | D
7 | 1 | 1 | 0 | 1 | 0 | 0 | A
8 | 1 | 1 | 1 | 1 | 1 | 1 | D
最後の列は等価クラスを示しています。
- A: c = 0、結果は 0、a も b も影響を与えない
- B: a,b = 0、結果は 0、c は影響なし
- C: b,c = 1、結果は 1、a は影響なし
- D: a,c = 1、結果は 1、b は影響なし
B と C の場合、どちらを選択するかは明らかですが、A と D の場合は異なります。それぞれについて、演算子を置き換えるとどうなるかを確認する必要があります。つまり、or -> and、and -> or、これがどのように影響するか(サブ)決定の結果。結果が影響を受ける場合は候補者を獲得し、そうでない場合は候補者を獲得しません。
- A : (0 and/or 0) and/or 0 -> 関係ありません
- A : (0 と 1) vs (0 か 1) -> 関係ありません。-> 候補者
- A : (1 と 0) vs (1 か 0) -> 関係ありません! -> 候補者
- A : (1 および/または 1) -> 関係ありません
- D : (1 and 0) vs (1 or 0) -> 重要 -> 候補者
- D : (1 と 1) -> 関係ありません
したがって、上記のように最終的なテスト セットを取得します。
- a = 0、b = 1、c = 0 -> 偽分岐 (A) OR a = 1、b = 0、c = 0
- a = 0、b = 0、c = 1 -> 偽分岐 (B)
- a = 0、b = 1、c = 1 -> 真の分岐 (C)
- a = 1、b = 0、c = 1 -> 真の分岐 (D)
特に後者のテスト - 演算子の変更 - は、ミューテーション テストのようなツールを使用して実行できます。これは、演算子を置き換えるだけでなく、オペランドの反転、ステートメントの削除、実行順序の変更、戻り値の置換など、さらに多くのことを行うことができます。コードを変更するたびに、テストが実際に失敗するかどうかを検証します。これは、テスト スイートの品質を示す良い指標であり、コードがカバーされているだけでなく、コードのテストが実際に有効であることを保証します。
用語に関しては、「複合判定カバレッジ」という用語がどこにも見つかりませんでした。私の見解では、「複合決定」は条件の複合の複合、つまり、条件の複合です。