2

こんにちは、ミューテーション テストについて質問があります。サンプル コードは次のとおりです。

//Effects: If numbers null throw NullPointException
// else return LAST occurance of val in numbers[]
//If val not in numbers [] return -1
 
public static int findVal (int numbers[], int val)
{
 int findVal = -1;
for( int i = 0 ;  i < numbers.length ; i++)     // for( int i = 1 ;  i < numbers.length ; i++)
 
if( numbers[i] == val)
findVal = i;
return (findVal);
}
 

(a) 可能であれば、ミュータントに到達しないテスト入力を見つけます。

(b) 可能であれば、到達可能性を満たすが変異体の感染は満たさないテスト入力を見つけます。

(c) 可能であれば、感染を満たし、変異体の伝播は満たさないテスト入力を見つけます。

(d) 可能であれば、ミュータントを殺すテスト入力を見つけます。

4

1 に答える 1

2

あなたの質問には、到達可能性、感染、および伝播の定義が含まれていませんでした-私は次のことを想定しています:

  • 到達可能性: 変更された式の実行
  • 感染: 変異した式の値が元の (変異していない) 式の値と異なる
  • 伝播:感染状態(異なる発現値)は、観察可能な状態の感染につながります

また、(d) 入力だけでなくテスト オラクルにも依存することに注意してください。伝播の達成は、ミュータントの強制終了を意味するものではありません。

次の入力は、要件を満たしています。

(a) そのような入力は存在しません。が nullint i = 0であっても、すべての入力に対してループ初期化子が実行され、その結果としてNullPointerException が発生します。メソッドを呼び出さないテストのみがミュータントに到達できないことに注意してください。呼び出しは、このミュータントの到達可能性を満たすことを意味します。numbersnumbers.lengthfindValfindVal

(b) そのような入力は存在しません。変異した式は、メソッド パラメータ ( i=0!=i=1任意の入力の場合) とは無関係です。到達可能性を満たすことは、この変異体の感染を満たすことを意味します。

(c)numbersは空の配列です。が 0 の場合、状態が感染していても(任意の>=0)numbers.lengthの初期値は問題になりません。null for を渡すことは、感染は満たしますが伝播は満たさない別の例です。iiinumbers

(d)numbersは、要素値が に等しい 1 要素の配列ですval。伝播を満たす多くの入力があります。つまり、ミュータントを殺すことができます。テストが実際にミュータントを殺すかどうかは、テストが結果をアサートするかどうかによって異なります。

于 2015-11-25T10:53:37.110 に答える