2

これら 2 つのカバレッジ基準の違いを理解しようとしていますが、どのように異なるのかわかりません。デシジョンカバレッジとは何かを正確に理解できていないと思います。私のソフトウェア テストの教科書では、複合判定カバレッジはコストがかかる可能性があると述べています ( n 個の基本条件に対して2 n 個の組み合わせ)。

私は、基本的な条件の補償がより高価になると思っていたでしょう.

を考慮してくださいa && b && c && d && e。私の理解では、基本的な条件のカバレッジでは、テスト ケースが基本的な条件の妥当性を持つためには、これらのアトミック変数のそれぞれがテスト ケースで TRUE と FALSE の値を持つ必要があります。つまり、32 の異なるテスト ケースです。

では、実際の違いは何であり、「基本条件」と呼ばれるものは何ですか。上記の例ではa、基本条件ですか?

ありがとう。

4

2 に答える 2

2

用語に関しては、「基本的な条件の範囲」と「複数の条件の範囲」という正確な用語を使用している便利な情報源は 1 つもありません。Binder の「Testing Object-Oriented Systems」には、「条件カバレッジ」と「複数条件カバレッジ」と書かれています。Everett & McLeod の「Software Testing」には、「単純な条件カバレッジ」と「複合条件カバレッジ」と書かれています。しかし、それぞれの場合の最初の用語は「基本的な条件の適用範囲」であり、2 番目の用語は「複合条件の適用範囲」であると確信しています。これらの用語を以下で使用します。

基本条件カバレッジとは、他の条件に関係なく、プログラム内のすべての基本条件が、あるテストでは true であり、あるテストでは false であることを意味します。以下では

if a && b && c
  # do stuff
else
  # do other stuff
end

a && b && cと の3 つの基本条件を持つa複合条件 がbありcます。すべての基本条件が true の場合とすべてが false の場合の 2 つのテスト ケースだけで、基本的な条件を完全にカバーできます。基本条件がたまたま複合条件の一部であることは問題ではありません。

基本条件カバレッジは分岐カバレッジではないことに注意してください。複合条件が の場合、a && b && !c上記の 2 つのテスト ケースは基本的な条件のカバレッジを達成しますが、分岐のカバレッジは達成しません。

基本的な条件をカバーするためのあまり積極的に最適化されていない一連のテスト ケースには、3 つの基本的な条件がすべて false である 1 つのテスト ケースと、異なる基本的な条件がそれぞれ true である 3 つのテスト ケースがあります。それは、複合条件の基本条件の 8 つの可能な組み合わせのうちの 4 つにすぎません。他の 4 つを無視しているという不快感が、複合条件カバレッジがある理由です。これには、複合条件内の基本条件の可能な組み合わせごとにテストが必要です。上記の例では、複合条件を完全にカバーするにはabとの可能な値の組み合わせごとに 1 つずつ、計 8 つのテストが必要です。c

于 2016-05-09T19:04:40.420 に答える
2

まず、 DecisionConditionの違い。

条件は、より単純なブール式に分解できない原子ブール式です。例: a(aブール値の場合)。

決定は、0 個以上のブール演算子を含む条件の複合です。演算子のない決定も条件です。例: (a or b) and cbut 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
  • a、b、c = 1

ただし、そのブール部分式のすべての組み合わせの順列は、完全な条件カバレッジまたは複数の条件カバレッジです)。これは、基本的な条件カバレッジの複合です。

| 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)

特に後者のテスト - 演算子の変更 - は、ミューテーション テストのようなツールを使用して実行できます。これは、演算子を置き換えるだけでなく、オペランドの反転、ステートメントの削除、実行順序の変更、戻り値の置換など、さらに多くのことを行うことができます。コードを変更するたびに、テストが実際に失敗するかどうかを検証します。これは、テスト スイートの品質を示す良い指標であり、コードがカバーされているだけでなく、コードのテストが実際に有効であることを保証します。

用語に関しては、「複合判定カバレッジ」という用語がどこにも見つかりませんでした。私の見解では、「複合決定」は条件の複合の複合、つまり、条件の複合です。

于 2016-05-09T20:57:16.747 に答える