[突然変異試験]新しい試験方法論

2417 ワード

突然変異操作


突然変異テストは、柔軟に構成可能な突然変異操作セットによって、あなたのコードから新しいコードをコンパイルします.
たとえば、CONDITIONALS_BOUNDARY_MUTATORで条件境界を変更すると、ソースコードから次の文が生成されます.
if ( i >= 0 ) {
    return "foo";
} else {
    return "bar";
}

それに対応する文は
if ( i > 0 ) {
    return "foo";
} else {
    return "bar";
}

PITは、メソッド呼び出しの除去、論理条件の逆設定、戻り値の変更など、ソースコードから突然変異する様々な方法を定義する.
PITの実行には、コンパイラがバイトコードに以下のデバッグ情報を提供する必要があります.
  • コード行番号
  • ソースファイル名
  • ほとんどの構築システムは、mavenのデフォルトのようにこれらの情報を提供しています.

    突然変異


    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が単一クラスの技術実装のみを試験するのではなく、試験をすべてのコードに昇格させることができる理由である.
    突然変異テストレポートの出力結果セットは次のように説明されます.
  • Killed:突然変異が殺され、突然変異を表すコードが試験用例
  • を満たさない
  • Lived:突然変異が生存することは、等価突然変異または突然変異が変化する論理を意味するが、テスト例に合致し、この場合のコードに問題がある可能性がある.
  • No coverageコードは上書きされておらず、生存と同様に、このテストにも問題がある可能性があります.
  • Non viable:バイトコードがある程度無効であるため、実行不可能な突然変異はJVMがロードできない.PITはそれによって生じた非生存突然変異の数を最小限に抑えようとした.
  • Timed Out:突然変異が無限ループをもたらし、例えばforループのカウンタからインクリメンタルを削除すると、タイムアウトする可能性があります.
  • Memory error:メモリエラーは、システムで使用されるメモリの数を増やす突然変異によって発生するか、突然変異が発生した場合にテストを繰り返し実行するために必要な追加のメモリオーバーヘッドの結果である可能性があります.大量のメモリエラーが発生した場合は、テストのためにより多くのスタックとpermgenスペースを構成することを考慮してください.
  • Run error:エラーは、突然変異をテストしようとしたときにエラーが発生したことを意味します.一部のタイプの生存不可能な突然変異は、現在、実行エラーを引き起こす可能性があります.多くの実行エラーが表示されている場合は、エラーの兆候かもしれません.

  • 通常、実行不可能な突然変異や実行エラーは表示されません.