6

ミューテーション テストで発生する問題の 1 つは、生成された各ミューテーションに対してデフォルトで完全なテスト ラン (テスト ファイルまたは一連のテスト ファイル) を実行するため、速度が遅いことです。

ミューテーション テストを高速化する 1 つの方法は、単一の障害が発生した場合に特定のミュータントのテスト実行を停止することです (ただし、ミューテーション テスト中のみ)。ミューテーションテスターが、最後のミュータントを殺す最初のテストが何であったかを覚えておき、それを最初に次のミュータントに与えるとさらに良いでしょう。これらのことのいずれかを実行するルビーはありますか、それともモンキーパッチを開始するのが最善の策ですか?

(はい、単体テストは高速であるべきだと思います。また、失敗したすべてのテストを表示することは、突然変異テスト以外でも役立ちます。何かが間違っていることを特定するだけでなく、どこが間違っているのかを特定するのにも役立ちます)

編集:私は現在、テスト/ユニットでやじを使用しています。テスト/ユニットが実行中にどのテストが失敗したかを覚えておくことができない場合は、やじまたは実行中の何かがそれを覚えている可能性があります。

4

3 に答える 3

2

私のミュータントツールは、rspec2--fail-fastオプションを使用して、失敗した例が見つかったらすぐに停止します。--rspec-dm2影響を受ける単体テストのみを実行する戦略とともに、非常に高速なミューテーションカバレッジテストを取得します。(速度)デモンストレーションについては、このasciicastを参照してください。

于 2012-12-10T09:22:33.607 に答える
2

最善の方法は、github からやじのソースをチェックアウトし、パッチを適用して、そのパッチを開発者に送信することです。heckle 用のカスタム テスト ランナーを作成できるはずです。

モンキー パッチは、このような問題に対する答えにはなりません。実際、モンキー パッチが解決策になることはほとんどありません。

于 2009-04-16T17:00:27.677 に答える
1

私が使い始めたアプローチの 1 つは、メソッドごとに単体テストを作成し、それらを ruby​​spec のように編成された個別のファイルに入れることでした。やじたい正確なメソッドを指定して、各仕様を個別に実行します。これらすべてを管理し、失敗したミューテーションがある場合は最後にレポートを出力する rake タスクがあります。

最終的に、結果を永遠に待たずに、各メソッドを完全に網羅することができます。さらに、誰もが使用する通常のアプローチよりもさらに優れています。なぜなら、付随的なカバレッジが得られないためです。各メソッドの仕様は、そのメソッドのすべての変更をカバーする必要があります。

于 2010-04-29T02:55:09.257 に答える