2017-12-31 68 views
0

私はコード解析と突然変異を調べ始めています。私はEclipseプロジェクトでPITestをプラグインとして使用しています。私はこの突然変異体に遭遇し、私は殺すことができません。次のコードがあるとします。 SPECIAL_CHARSに属していないcharは((と言う)がある場合条件付き境界突然変異体を殺す方法

class Mutation{ 
     public static void main(String [] args){ 
      int i=0; 
      String SPECIAL_CHARS = "[email protected]"; 
      String password = "Something"; 
      for (int pos = 0; pos < password.length(); pos++) { 
       char c = password.charAt(pos); 
       if(SPECIAL_CHARS.indexOf(c) < 0) { 
       i++; 
       } 
      } 
    } 
} 

限り私の理解が行くように、変数iが増分します。 PITestは2つの変異体を報告する。以下の情報を

enter image description here

enter image description here

enter image description here

私は運がなく、この変異体を殺すことがあり、いくつかのJUnitのテストを書き込もうとしました。誰かが私にそれを殺すことが可能です方法を説明してくださいできますか?

パスワードが?で、文字列の最初の文字がpasswordの場合、条件付き境界チェックが終了する可能性があります。増分はどうですか?どういう意味ですか?

+0

「私はどこに宣言しましたか?あなたのコードはコンパイルされていますか?おそらくあなたはこれを古いコンパイル版で実行しています。 –

+0

'private static final String SPECIAL_CHARS ="?!$ @ ";'これは 'main'の内部には存在しません。 https://ideone.com/RhCJDS –

+1

それを無視してください、私は素晴らしい論理的な意味を持たずに私のプロジェクトからその文字列をコピーしました。これはちょうどアイデアを与えるためです – rockability

答えて

0

コードが何もしないので、あなたが提示したコードの可能性のある突然変異体を殺すためのテストを書くことはできません。このメソッドはvoidを返し、コードは副作用を実行しません。

Pitestはこのメソッドからすべてのコードを削除でき、プログラムは機能的に同等です。

何らかの種類の出力(おそらく特殊文字の数?)が生成され、入力パスワードがハードコードされないようにコードが変更された場合、変更されたプログラムをunと区別するテストを書くことができます - 変異したもの。

条件付き境界変異体は、これはこれは、カウントで検出された確認パスワードの0インデックスに特殊文字を使用してテストケースによって検出することができた

if (SPECIAL_CHARS.indexOf(c) <= 0) 

にコードと同等を生成します。

インクリメント突然変異演算子は、これは非常に不安定な突然変異であり、含有するパスワードを提供した任意のテストケースによって検出される

i-- 

i++ 

から減少、すなわちに増分を変換します結果のカウントにアサートした特殊文字。

関連する問題