6

私は c# で新しいプロジェクトを開始しており、突然変異テストを行うのに役立つツールを探しています。以前に、 pitestを使用して Java で突然変異テストを行ったことがあり、とても気に入りました。現在、私はC#用のそのようなツールを探していますが、見つけることができる唯一のものは、過去数年間更新されていないか、まだアルファ/ベータ(クリームニンジャタートルネスター)です。

信頼性が高く、2010 年以降に登場したツールで使用できるツールはありますか?

編集: この質問はWhat Mutation-Testing Frameworks exist?の複製であると言う人もいるかもしれません。【閉店】 . その質問だけが現在 8 年前のものであり、そこで議論されているツールのほとんどは、過去 6 ~ 8 年間更新されていないため、使用できません。

4

1 に答える 1

7

次の Visual Studio 2013 拡張機能を使用して成功しました: VisualMutator.Net. これは、他のミューテーション ツールが Visual Studio 2005 を配置するか、他の非常に古いソフトウェア/フレームワークなどを必要としたためです。

詳細はこちら: http://visualmutator.github.io/web/

基本的に、以下のような UI が得られます。

実行できるテスト

TestingExample.Tests変異します。おそらく、プロジェクトはすでに構造化されていますProject & Project.Tests 。次のミュータンスのリストにアクセスできます。

ISD (ISK) – スーパー/ベース キーワードの削除

演算子は、継承メソッドに属するオーバーロード メソッド内の基底クラス メソッドの呼び出しを削除します。

DMC – 委任されたメソッドの変更

オペレーターは、委任を処理する方法を、同様の署名を持つ別のものに変更します。

DEH – イベント処理の変更のために委任されたメソッド

オペレーターが呼び出しを変更して、エラー処理からメソッドを追加または削除します。EAM、

EMM – アクセサー、修飾子メソッドの変更

演算子は、クラス プロパティの呼び出しを同じ型の別のプロパティの呼び出しに変更します。EHR -

例外ハンドラの削除

別の catch または finally が存在する場合、演算子は catch ブロックを削除します。

EHC – 例外処理の変更

オペレーターは、catch ブロックの本体を、キャッチされた例外をスローするように変更します。

EXS – 例外の飲み込み

オペレーターは空のブロック catch(Exception e) を追加して、例外が現在のメソッドを離れることができないようにします。

JTI、JTD – このキーワードの挿入、削除

同じ名前のローカル変数が存在する場合、演算子はこのキーワードを追加または削除します。

JID – メンバー変数初期化削除 (フィールド初期化削除) 演算子削除

クラスのフィールドを適切な値で初期化します。

MCI – 別の継承されたクラスからのメンバー呼び出し

オペレーターは、オブジェクトのメソッドの呼び出しを別のオブジェクトの同じメソッドの呼び出しに変更します。

PRV - 互換性のある他のタイプの参照代入

演算子は、特定のオブジェクトを参照に割り当てることを、互換性のある別のオブジェクトを割り当てるように変更します。

標準演算子:

AOR – 算術演算子の置換

演算子は、算術演算 (+、-、​​、/、%) をこのグループから別のものに変更します。

LOR – 論理演算子の置換

演算子は、論理演算 (&、|、^) をこのグループから別のものに変更します。

LCR – 論理コネクタの交換

演算子は、論理式のコネクタ (,||) を別のものに変更します。

ROR – 関係演算子の置換

演算子は、各関係演算子 (>、<、<=、>=、==、!=) を同じグループの別のものに変更します。

SOR – シフト オペレーターの交換

演算子は、論理シフト (»、«) を反対のものに変更します。

OODL – オペレーターの削除

演算子は、+、-、>、<=、% などの各操作から 2 つのミュータントを作成します。1 つは操作を削除します。

そして、その左側にあるものは、操作と右側にあるものを削除します (たとえば、y=a+b から; y=a; と y=b; の後にミュータントがあります)。

SSDL – ステートメント ブロックの削除

演算子はステートメントと割り当てを削除しますが、宣言は削除しません (たとえば、int y=15 から; 次のミュータント: int y; があります)。

結果は次のようになります。

突然変異スコア 突然変異スコア

殺されていないミュータント 殺されていないミュータント

殺されたミュータント 殺されたミュータント

以下のテストにより

次の方法でミュータントを殺した

于 2016-09-14T10:59:35.987 に答える