2017-01-22 1 views
0

CHAを使用してJavaバイトコードのコールグラフを作成するアルゴリズムに関する質問があります。OPAL-CHAアルゴリズムを使用して抽象クラスで定義されたメソッド呼び出しの呼び出しについて

抽象クラスでのメソッドの具体的な実装方法がないため、このようなメソッドにコールエッジを追加すると少し誤解を招く可能性があります。 たとえば、junit-4.12.jarとします。 runFailedは、抽象クラスであるjunit.runner.BaseTestRunnerで定義されています。また、(ジェイソン&アタナス)「CHAコールグラフ構築アルゴリズムのための仮定階層」で、

は「与えられたと言われている間もjunit.runner.BaseTestRunner

で定義された方法getTestrunFailedへの呼び出しがありますxの宣言された型がCであるコール・サイトxm()では、xの実行可能タイプ は、抽象的な非サブタイプのCでなければなりません。

限り私が検討していますように、junit.runner.BaseTestRunner getTestからjunit.runner.BaseTestRunner runFailedにコールエッジ(Calledge1)を追加することなく、テストランナーがBaseTestRunnerを拡張するようjunit.runner.BaseTestRunner getTestからjunit/textui/TestRunner runFailedにコールエッジ(Calledge2)を追加することがより合理的です。

CallGraph.calledByStatistics()の結果を取得するためにテストコードを実行した後、Calledge1のみが見つかりました。 Calledge2がありません。

誰かが私にこれを確認する好意を与えることができますか? ありがとうございます。

よろしく、

答えて

1

私はOPALは、コールグラフの二つのビューを提供しています発見しました。もう1つは、コールエッジに「ライブラリコール」エッジを追加しません。 CallGraph.calledByStatisticsで

()

結合、例えば をcaller.methodする呼び出し場所(PC)との間である:「INVOKEVIRTUAL(junit.runner.BaseTestRunner {ボイドrunFailed(java.lang.Stringで)}との間)」と のJUnit /ランナー/ BaseTestRunner.public junit.framework.Test getTest(java.lang.Stringで)

CallGraph.callsStatisticsにおいて()

結合をcaller.methodするsubtype.methodの間でありますたとえば、 "junit/textui/TestRunner.protected void runFailed(java.lang.String)"および "junit/runner/BaseTestRunner.public junit.framework.Test getTest(java.lang.String)"

関連する問題