次の各例のようなコードで、コードを静的に分析して、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
、それを知っていれば役に立ちます|X| < 50
か?
@Vladimir Perevalov の提案から、Pex の概念を、対象のコード ポイントの可能な値を見つけるためにどのように適用できますか (チェックされていない (?)例外的なケースにつながるコード パスと値を検出するという Pex のように思われることではなく) ?