2011-07-20 5 views
1

私は、スートフレームワークを使用して構築するコールグラフを使用して、いくつかの依存関係分析を行うことを検討しています。私は、ポイント・ツー・アナリシスを使用してコール・グラフの精度を向上させることができることをガイドで読みました。 「ポイントツー」分析とは正確に何ですか?コールグラフの精度を向上させる方法は?ポイントツー分析 - 定義

答えて

1

データフローを理解する上での重要な問題は、各ポインタが参照できる日付がわかっていることです。オブジェクトへのポインタについて何も知らず、そのオブジェクトがポインタ(たとえば、p = 3)を介して更新された場合、システム全体のオブジェクトが変更される可能性があります。 pが特定のオブジェクトO1を参照していることがわかっている場合は、O1だけが変更される可能性があります。したがって、pが指すことができる知識は、副作用を理解する上で重要であり、そのような影響の範囲も重要です。

ここで、関数へのポインタがあるとします。関数ポインタpが何を指しているのかわからない場合は、 とpを介して関数呼び出しが間接的に呼び出されます。関数が呼び出され、副作用が関数の副作用になる可能性があります。 pがfooだけを指すことができることを知っていれば、fooが引き起こす可能性のある副作用が発生する可能性があります。

コールグラフを計算するとき、一部の関数呼び出しは明らかに1つの場所にしか移動しません。いくつかの関数呼び出しは実際にはポインタを介した関数呼び出しなので、さまざまな場所に移動することができます。 OO言語の "メソッド"呼び出しは、このようなことが多く、多形性をサポートするために行われます。

ポイントツー分析を行っていない場合、分析のために関数ポインタのポイントを実行できない可能性があります。つまり、あなたの構築されたコールグラフは、ノードバーがポインタpを介して多くの可能な関数を呼び出す可能性があることを意味します。つまり、心配する必要のある副作用がたくさんあります。

正確なポイント・ツー・アナリシスは正確なファンクション・ポイント・ツー・アナリシスにつながり、正確な副作用分析をもたらし、コードが何をすることができるかをよりよく理解することができます。もちろん、精度は相対的です。分析に「非常に正確な」ポイントを得ることは困難です。限界では、完全なポイントを得ることは不可能です - anlaysis;あなたはチューリングマシンを分析しています。

フロー解析と「より正確な」コールグラフの例については、http://www.semdesigns.com/Products/DMS/FlowAnalysis.html