[突然変異試験]新しい試験方法論
2417 ワード
突然変異操作
突然変異テストは、柔軟に構成可能な突然変異操作セットによって、あなたのコードから新しいコードをコンパイルします.
たとえば、CONDITIONALS_BOUNDARY_MUTATOR
で条件境界を変更すると、ソースコードから次の文が生成されます.if ( i >= 0 ) {
return "foo";
} else {
return "bar";
}
それに対応する文はif ( i > 0 ) {
return "foo";
} else {
return "bar";
}
PITは、メソッド呼び出しの除去、論理条件の逆設定、戻り値の変更など、ソースコードから突然変異する様々な方法を定義する.
PITの実行には、コンパイラがバイトコードに以下のデバッグ情報を提供する必要があります.
if ( i >= 0 ) {
return "foo";
} else {
return "bar";
}
if ( i > 0 ) {
return "foo";
} else {
return "bar";
}
突然変異
PITは、突然変異オペレータを適用することによって、多くの(おそらく非常に大きな数の)突然変異体を生成する.各突然変異Javaクラスには、突然変異していないクラスとは異なる動作をする突然変異(またはエラー)が含まれます.
PITはこれらの突然変異後のクラスをあなたのユニットテストを実行し、突然変異が殺される(突然変異後にテストの使用例を満たさない)場合、今回のテストが有効であることを証明します.
とうかとつぜんへんい
コード条件を変更することによって実行ロジックを変更することはそれほど簡単ではなく、場合によっては、突然変異が未突然変異以前のロジックに完全に等価である.
等価突然変異の原因は2つあります.
突然変異の結果は突然変異前の挙動と完全に一致した.
たとえば、次の2つのコードは論理的に完全に等価です.int i = 2;
if ( i >= 1 ) {
return "foo";
}
//...
int i = 2;
if ( i > 1 ) {
return "foo";
}
突然変異の前後には異なる挙動があったが,試験例は突然変異による非正常な結果に覆われなかった.
もう1つの比較的一般的な等価変異の例はDEBUGまたはログであり、PITはcommon loggingなどのログコンポーネントの変異生成を排除し、構成によってログコンポーネントをフィルタすることもできる.
テスト実行
PITは、修正されたコードに基づいてユニットテストを自動的に実行します.テストを実行する前に、PITはテストに対して従来の行オーバーライド率分析を実行し、これらのデータとテストの時間を使用して、修正されたコードを目標とするテスト例のセットを選択します.次いで、これらおよびテスト後のデータを用いて、テスト例を選択して変異コードのセットを実行する.
このような実行メカニズムもまた、PITの実行速度が他の類似の突然変異試験システムよりはるかに速い理由(例えばJester、Jumble)であり、これもPITが単一クラスの技術実装のみを試験するのではなく、試験をすべてのコードに昇格させることができる理由である.
突然変異テストレポートの出力結果セットは次のように説明されます.
コード条件を変更することによって実行ロジックを変更することはそれほど簡単ではなく、場合によっては、突然変異が未突然変異以前のロジックに完全に等価である.
等価突然変異の原因は2つあります.
突然変異の結果は突然変異前の挙動と完全に一致した.
たとえば、次の2つのコードは論理的に完全に等価です.
int i = 2;
if ( i >= 1 ) {
return "foo";
}
//...
int i = 2;
if ( i > 1 ) {
return "foo";
}
突然変異の前後には異なる挙動があったが,試験例は突然変異による非正常な結果に覆われなかった.
もう1つの比較的一般的な等価変異の例はDEBUGまたはログであり、PITはcommon loggingなどのログコンポーネントの変異生成を排除し、構成によってログコンポーネントをフィルタすることもできる.
テスト実行
PITは、修正されたコードに基づいてユニットテストを自動的に実行します.テストを実行する前に、PITはテストに対して従来の行オーバーライド率分析を実行し、これらのデータとテストの時間を使用して、修正されたコードを目標とするテスト例のセットを選択します.次いで、これらおよびテスト後のデータを用いて、テスト例を選択して変異コードのセットを実行する.
このような実行メカニズムもまた、PITの実行速度が他の類似の突然変異試験システムよりはるかに速い理由(例えばJester、Jumble)であり、これもPITが単一クラスの技術実装のみを試験するのではなく、試験をすべてのコードに昇格させることができる理由である.
突然変異テストレポートの出力結果セットは次のように説明されます.
通常、実行不可能な突然変異や実行エラーは表示されません.