シェープ解析
シェープ解析は、多くの問題に適用することができる。
メモリリークの発見。Java 的なリーク(不要のオブジェクトに対するポインタがヌルクリアされていないために発生する)を含む
メモリブロックが複数回解放されるような場合の発見(C)
"dangling pointer" (Cでは解放されたメモリに対するポインタ)の解放の検知
配列の境界違反の発見
type-state properties の確認(例えば、ファイルが read() されるより前に open()されることを保証する)
リンクリストを逆方向にたどるメソッドが、循環しないことを検証する
ソートするメソッドが正しくソートされた結果を返すことを検証する
シェープ解析ではより柔軟にオブジェクトに名前をつけることによって、ポインタ解析の問題点を克服している。プログラム全体を通してオブジェクトに同じ名前を与える替わりに、プログラムの動作によって名前を変えることができる。異なる名前のオブジェクトのいくつかは「要約 (summarize)」して同じ名前を持つようにすることができる。「要約された」オブジェクトが実際にプログラムによって使用されるとき、これを「実体化(materialize)」、すなわち要約化されたオブジェクトを、一つのオブジェクトと残りの要約されたオブジェクトの二つに分割し、識別できるような異なる名前をつける。シェープ解析の基本的な方法では、プログラムが使用しているオブジェクトは一意の実体化されたオブジェクトとして表現し、使用していないものは要約された形で表現する。
上記の例で、オブジェクトの配列は行 [1], [2], [3] で別々の方法で要約化される。行 [1] では、配列の要素は部分的にのみ初期化されている。