探索の範囲

PexSettingsAttributeBase は、属性としての設定範囲に対する抽象基底クラスです。 IntelliTest での設定の概要については、「ウォーターフォールの設定」を参照してください。

この属性とその派生属性の名前付きプロパティを使用して、設定を変更することができます。

[PexClass(MaxRuns = 10)]
public partial class FooTest {...}
  • 制約解決の範囲
  • 探索パスの範囲
    • MaxBranches - 1 回の実行パス中に実行できる分岐の最大数。
    • MaxCalls - 1 回の実行パス中に実行できる呼び出しの最大数。
    • MaxStack - 1 回の実行パス中の任意の時点でのスタックの最大サイズ。アクティブな呼び出しフレームの数として測定されます。
    • MaxConditions - 1 回の実行パス中に確認できる入力に対する条件の最大数。
  • 探索の範囲
    • MaxRuns - 探索中に試行される実行の最大数。
    • MaxRunsWithoutNewTests - 新しいテストが生成されずに連続する実行の最大数。
    • MaxRunsWithUniquePaths - 探索中に試行される一意の実行パスでの実行の最大数。
    • MaxExceptions - 検出されたすべての実行パスの組み合わせで検索できる例外の最大数。
  • テスト スイート コード生成の設定

MaxConstraintSolverTime

制約ソルバーが、新しい別の実行パスを使用することになる入力を計算する必要がある時間 (秒単位)。 これは PexSettingsAttributeBase とその派生型のオプションです。

IntelliTest がプログラムの実行パスを深く探索すればするほど、IntelliTest がプログラムの制御フローとデータ フローからビルドする制約システムが複雑になります。 時間制限に応じて、この値を設定して、IntelliTest が新しい実行パスを検出する時間を長くしたり短くしたりすることができます。

通常、タイムアウトの理由は、IntelliTest が、ソリューションがないことが認識されていない制約システムのソリューションを見つけようとすることです。 これはタイムアウトの最も一般的なケースであるため、範囲を増やしても意味がないかもしれません。

MaxConstraintSolverMemory

制約ソルバーが、新しい別の実行パスを使用することになる入力を計算する必要があるメガバイト数。 これは PexSettingsAttributeBase* とその派生型のオプションです。

IntelliTest がプログラムの実行パスを深く探索すればするほど、IntelliTest がプログラムの制御フローとデータ フローからビルドする制約システムが複雑になります。 コンピューターの使用可能なメモリに応じて、IntelliTest がより複雑な制約システムに対応できるようにこの値を設定することができます。

通常、タイムアウトの理由は、IntelliTest が、ソリューションがないことが認識されていない制約システムのソリューションを見つけようとすることです。 これはメモリ不足状態の最も一般的なケースであるため、範囲を増やしても意味がないかもしれません。

MaxBranches

1 回の実行パスで実行できる分岐の最大数。

この探索の範囲の背後にある意図は、IntelliTest が入力生成中に探索する実行パスの長さを制限することです。 特に、プログラムが無限ループに入った場合に、IntelliTest が応答しなくなることを防ぎます。

実行および監視されるコードの各条件付き分岐および無条件分岐がこの上限に達するまでカウントされます。これには、パラメーター化されたテストの入力に依存しない分岐が含まれます。

たとえば、次のコードでは約 100 の分岐を使用します。

for (int i=0; i<100; i++) { }

MaxCalls

1 回の実行パス中に実行できる呼び出しの最大数。

この探索の範囲の背後にある意図は、IntelliTest が入力生成中に探索する実行パスの長さを制限することです。 特に、プログラムがメソッドを無限に再帰的に呼び出した (IntelliTest が回復できないスタック オーバーフローが発生することになる) 場合に、IntelliTest が応答しなくなることを防ぎます。

実行および監視されるコードの各呼び出し (直接、間接、仮想、ジャンプ) がこの上限に達するまでカウントされます。

MaxStack

1 回の実行パス中の任意の時点でのスタックの最大サイズ。アクティブな呼び出しフレームの数で測定されます。

この探索の範囲の背後にある意図は、IntelliTest が入力生成中に探索する実行パスのスタックのサイズを制限することです。 特に、使用可能なスタック領域をすべて使用する (IntelliTest が回復できないスタック オーバーフローが発生することになる) ことを防ぎます。

MaxConditions

1 回の実行パスでチェックできる入力に対する条件の最大数。

この探索の範囲の背後にある意図は、IntelliTest が入力生成中に探索する実行パスの複雑さを制限することです。 パラメーター化されたテストの入力に依存している各条件付き分岐が、この上限に達するまでカウントされます。

たとえば、次のコード内の各パスは、n+1 条件を使用します。

[PexMethod]
void ParameterizedTest(int n)
{
     for (int i=0; i<n; i++) { // conditions are "0<n", "1<n", ..., "!(n<n)"
          ...
     }
     for (int i=0; i<100; i++) { // irrelevant for MaxConditions, since conditions do not depend on input
          ...
     }
}

MaxRuns

IntelliTest がテストの探索中に試行する実行の最大数。

この探索の範囲の背後にある意図は、ループまたは再帰を含むコードには無限の実行パスが存在する場合があるため、IntelliTest を入力生成中に制限する必要があることです。

MaxRunsMaxRunsWithUniquePaths の 2 つの設定は次のように関連します。

  • IntelliTest は、さまざまなテスト入力で MaxRuns の最大回数までパラメーター化されたテスト メソッドを呼び出します。
  • 実行されるコードが明確な場合、IntelliTest は毎回、異なる実行パスを使用します。 ただし、一部の条件下では、さまざまな入力で、実行されるコードが既に使用されている実行パスに従う場合があります。
  • IntelliTest は、一意の実行パスの検出数をカウントします。この数は、MaxRunsWithUniquePaths オプションで制限されます。

MaxRunsWithoutNewTests

新しいテストが生成されずに連続する実行の最大数。

多くの場合、IntelliTest は短時間で多数の対象のテスト入力を検出できますが、しばらくすると、新しいテスト入力を検索せず、単体テストを生成しなくなります。 この構成オプションは、IntelliTest が新しいテストを生成せずに実行できる連続試行の数を制限するものです。 これに達すると、探索が停止します。

MaxRunsWithUniquePaths

IntelliTest が探索中に考慮する一意のパスの最大数。

この探索の範囲の背後にある意図は、ループまたは再帰を含むコードには無限の実行パスが存在する場合があるため、IntelliTest を入力生成中に制限する必要があることです。

MaxRunsMaxRunsWithUniquePaths の 2 つの設定は次のように関連します。

  • IntelliTest は、さまざまなテスト入力で MaxRuns の最大回数までパラメーター化されたテスト メソッドを呼び出します。
  • 実行されるコードが明確な場合、IntelliTest は毎回、異なる実行パスを使用します。 ただし、一部の条件下では、さまざまな入力で、実行されるコードが既に使用されている実行パスに従う場合があります。
  • IntelliTest は、一意の実行パスの検出数をカウントします。この数は、MaxRunsWithUniquePaths オプションで制限されます。

MaxExceptions

探索が停止する前に検出できる例外の最大数。

この探索の範囲の背後にある意図は、多くのバグを含むコードの探索を停止することです。 IntelliTest がコードで検出したエラーが多すぎる場合、探索は停止します。

TestExcludePathBoundsExceeded

構成されたパスの範囲の MaxCallsMaxBranchesMaxStack、および MaxConditions を超える実行パスは無視されます。

この探索の範囲の背後にある意図は、(多くの場合) 終了しないテストを処理することです。 IntelliTest は、MaxCallsMaxBranchesMaxStack、または MaxConditions などの探索の範囲に達すると、テストは終了しないプロセスではなく、後でスタック オーバーフローが発生することはないと判断します。 このようなテスト ケースは他のテスト フレームワークでの問題を発生させる可能性があります。この属性は、終了しないプロセスまたはテスト ケースが原因でスタック オーバーフローが発生する可能性がある場合に、IntelliTest がテスト ケースを生成しないようにします。

TestEmissionFilter

IntelliTest が生成する必要があるテストの種類を示します。 指定できる値は、

  • すべて - 想定の違反を含む、すべての場合にテストを生成します。
  • FailuresAndIncreasedBranchHits (既定) - すべての固有エラーの場合、また、TestEmissionBranchHits で制御される、テスト ケースのカバレッジが増えるたびにテストを生成します。
  • FailuresAndUniquePaths - IntelliTest が検出したすべてのエラーの場合、また、実行パスが一意となるテスト入力ごとにテストを生成します。
  • Failures - エラーの場合にのみテストを生成します。

TestEmissionBranchHits

現在の TestEmissionFilter の設定に応じて、IntelliTest は、以前はカバーされていなかった、プログラムの分岐をカバーする場合に新しいテスト ケースを生成します。

TestEmissionBranchHits 設定により、IntelliTest が、分岐がすべてカバーされた (TestEmissionBranchHits=1) かどうかや、テストで 1 回または 2 回カバーされた (TestEmissionBranchHits=2) かどうかなどを考慮する必要があるかどうかが決まります。

TestEmissionBranchHits=1 の場合、IntelliTest が到達する可能性のあるすべての分岐をカバーする非常に小さなテスト スイートが生成されます。 特に、このテスト スイートでは、到達したすべての基本的なブロックとステートメントもカバーします。

このオプションの既定値は TestEmissionBranchHits=2 で、今後の回帰エラーの検出にもより適している、表現力の高いテスト スイートが生成されます。

フィードバックが欲しい場合

ご意見や機能に関するご要望を開発者コミュニティで投稿してください。