次の各例と同様のコードで、静的解析を行い、SpecialFunction()に渡す可能な値のリストを調べることができます。静的解析、変数/パラメータの可能な値
SpecialFunction(5); // A
int x = 5;
SpecialFunction(x); // B
int x = 5;
x = condition ? 3 : 19;
SpecialFunction(x); // C
私はすでに、抽象構文木へのC#を解析することができますし、私はすでにAのようなケースを扱うことができる、と私はケースBを推測するための値の初期割り当てを追跡することができると思いますが、Cのような例として簡単にすぐに複雑になるようです。
私は、すべての場合においてxを静的に解くことはできないと確信していますが、それは問題ありません。それを試みる戦略、それができない時を認識する方法を知りたい。クラスレベルのフィールドとマルチスレッドを含める必要がある場合はどうすればよいですか?閉鎖? x
、|X| < 50
のすべての可能な値のセットX
を知っていれば助けになるでしょうか?
@Vladimir Perevalovの提案から、Pexの考え方は、Pxがコードパスと値を発見してにチェックを入れない(?)ではなく、対象となるコードポイントの可能な値を見つけるのにどのように適用できるか?例外的な場合)?
+1。指定されたパラメータ値の範囲の失敗/成功の可能性を推測することは、静的解析の「義務」とは考えないでください。これは、おそらく「動的解析」の「義務」です。しかし、たとえそうであっても、この* *のケースではパラメータの*カップル*のみを扱いますが、関数を扱うと、IEnumerable GetValuesForx(...) '? –
Tigran
@Tigran - プログラム(またはフラグメント)の実行またはシミュレーションはオプションではありません。また、静的解析で答えが得られるケースもありますが、明らかにそうではないケースもあります。私は可能な場合を特定して達成しようとしています。 –