JP2016539421A - コールパスファインダ - Google Patents

コールパスファインダ Download PDF

Info

Publication number
JP2016539421A
JP2016539421A JP2016532101A JP2016532101A JP2016539421A JP 2016539421 A JP2016539421 A JP 2016539421A JP 2016532101 A JP2016532101 A JP 2016532101A JP 2016532101 A JP2016532101 A JP 2016532101A JP 2016539421 A JP2016539421 A JP 2016539421A
Authority
JP
Japan
Prior art keywords
function
node
child
graph
call
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016532101A
Other languages
English (en)
Other versions
JP6349395B2 (ja
Inventor
ラジャンナ,ラマクリシュナ
グプタ,ディーパンク
ベラユサム,アルル・シバ・ムルガン
シェオポリー,アビシェク
アガーワル,アンキト
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of JP2016539421A publication Critical patent/JP2016539421A/ja
Application granted granted Critical
Publication of JP6349395B2 publication Critical patent/JP6349395B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Telephonic Communication Services (AREA)
  • Library & Information Science (AREA)

Abstract

コードベースについての関数コールグラフを作成するための技術およびシステムが開示される。グラフ作成は、関数シグネチャによってコードベースにおいて関数を識別すること(1001)と、コールグラフにおいて第1のノードとして関数を表わすこと(1070)とを含む。当該関数について、当該関数の関数シグネチャから呼出先関数、呼出元関数、継承親および子、ならびにベースクラスを識別すること(1200)と、識別された呼出先関数および呼出元関数に基づいて、第1のノードに子ノード(1020)を追加することと、当該関数におけるベースクラスメソッドへのインターフェイスコール(1010)について、ベースクラスメソッドのオーバライドのインプリメンテーションに基づいて、第1のノードに子ノード(1020)を追加すること(1090)と、追加された子ノードについて、オーバライドのインプリメンテーションを含むソースファイルと、当該関数を含むソースコードファイルとが少なくとも1つの共通のバイナリファイルを共有していない場合には、第1のノードから当該子ノードを除去すること(1100)〜(1150)とが行われる。

Description

背景
複雑な大規模ソフトウェアプロダクトまたはソフトウェア開発環境によって、開発またはメンテナンスを行うプログラマが未知のコードを読むことがますます必要となり得る。そのような状況において、ある関数から別の関数まで制御フローを辿ることは困難かつ時間を消費するものであり得る。
概要
コードベースについての関数コールグラフを生成する方法に関係する本願明細書において論じられるソリューションのいくつかの実施形態において、当該方法は、関数シグネチャによってコードベースにおいて関数を識別することと、関数コールグラフにおいて第1のノードとして特定の識別された関数を表わすことと、特定の関数について、当該特定の関数の関数シグネチャに基づいて、特定の関数に関連付けられる呼出先関数と、呼出元関数と、継承親と、継承子と、ベースクラスとを識別することと、識別された呼出先関数および呼出元関数に基づいて、第1のノードに第1の子ノードを追加することと、特定の関数におけるベースクラスメソッドへのインターフェイスコールについて、ベースクラスメソッドのオーバライドのインプリメンテーションに基づいて、第1のノードに第2の子ノードを追加することと、少なくとも1つの追加された第2の子ノードについて、オーバライドの特定の追加されたインプリメンテーションを含む第1のソースコードファイルと、特定の関数を含む第2のソースコードファイルとが少なくとも1つの共通のバイナリファイルを共有するかどうか判定することと、第1および第2のソースコードファイルが共通のバイナリファイルを共有しないという判定に応答して、追加された第2の子ノードを第1のノードから除去することとを含む。
いくつかの実施形態において、当該方法は、その後のランク付けのために、第1のノードと追加された第2の子ノードとの間のグラフエッジを識別することを含む。いくつかの実施形態において、上記方法は、関数コールグラフのメモリフットプリントを低減することを含む。
いくつかの実施形態において、メモリフットプリントを低減することは、各関数シグネチャにハッシュ関数を適用することと、関数シグネチャを表すものとしてハッシュ関数の結果を格納することとを含む。
いくつかの実施形態において、オーバライドの特定の追加されたインプリメンテーションを含む第1のソースコードファイルと、特定の関数を含む第2のソースコードファイルとが少なくとも1つの共通のバイナリファイルを共有するかどうか判定することは、特定の関数に関連付けられる従属性を識別することと、識別された従属性についてバイナリファイルをテストするよう第1のブルームフィルタを生成することとを含み、ブルームフィルタを生成することは、識別された従属性の数に基づいて第1の生成されたブルームフィルタのサイズを変更することを含み、上記方法はさらに、特定のバイナリファイルが特定の関数を含むかどうか判定するために、特定のバイナリファイルに第1の生成されたブルームフィルタを適用することを含む。
いくつかの実施形態において、オーバライドの特定の追加されたインプリメンテーションを含む第1のソースコードファイルと、特定の関数を含む第2のソースコードファイルとが少なくとも1つの共通のバイナリファイルを共有するかどうか判定することは、特定のバイナリファイルが特定の追加されたインプリメンテーションを含むかどうか判定するために、特定のバイナリファイルに第2の生成されたブルームフィルタを適用することと、特定のバイナリファイルが第1および第2の生成されたブルームフィルタの両方を通過することに応答して、第1および第2のソースコードファイルが共通のバイナリファイルとして特定のバイナリファイルを共有することを判定することとをさらに含む。
いくつかの実施形態において、上記方法はさらに、第2のソースコードファイルを使用してコンパイルまたは生成されるコードベースのバイナリファイルに基づいてブルームフィルタを生成することと、生成されたブルームフィルタを第1のノードに追加することとを含む。
いくつかの実施形態において、オーバライドの特定の追加されたインプリメンテーションを含む第1のソースコードファイルと、特定の関数を含む第2のソースコードファイルとが少なくとも1つの共通のバイナリファイルを共有するかどうか判定することは、第1のソースコードファイルに第1のノードのブルームフィルタを適用することを含む。
いくつかの実施形態において、ブルームフィルタのサイズは、頻繁に使用されるソースコードファイルがより大きなサイズのブルームフィルタに関連付けられるように、どれだけ多くのコードベースのバイナリファイルが第2のソースコードファイルを使用して、コンパイルまたは生成されるかによって決定される。
コードベースにおいて2つの関数の間の可能性の高いコールパスを判定する方法に関係する本願明細書において論じられるソリューションのいくつかの実施形態において、当該方法は、ソース関数およびデスティネーション関数を入力として受け取ることと、関数コールグラフにおいて、ソース関数に関連付けられる開始ノードと、デスティネーション関数に関連付けられる終了ノードとを識別することと、関数コールグラフにおいて開始ノードと終了ノードとの間で可能なパスを探索することとを含み、上記探索することは、探索パスに沿った各ノードについて、開始ノードおよび終了ノードによって共有される共通の従属性のリストに対してノードを評価することと、共通の従属性のリストに含まれる従属性を有する評価されたノードについて、評価されたノードを可能なパスに含むことと、関数コールグラフにおいて評価されたノードの任意の子ノードと開始ノードまたは終了ノードとの間ですべての可能なパスを探索することと、共通の従属性のリストに含まれる従属性を有していない評価されたノードについて、評価されたノードを任意の可能なパスから除外することとを含み、上記方法はさらに、上記探索および評価するステップの結果生成された、開始ノードと終了ノードとの間のすべての可能なパスをソートすることと、ソートされた可能なパスの少なくとも1つを、可能性の高いコールパスとして返すこととを含む。
いくつかの実施形態において、すべての可能なパスをソートすることは、最も短いものから最も長いものへ、すべての可能なパスを順序付けすることと、順序付けされたパスの中から、単一のコードベース内に完全に存在するパスを識別することと、パス長さおよび重み係数に基づき、すべての可能なパスが最も可能性が高いものから最も可能性が低いものへと順序付けされるように、順序付けされたパスに重み係数を適用することとを含み、重み係数は、単一のコードベース内に完全に存在するパスをより可能性が高いものとして示すことを含み、さらに、重み係数を適用した後で、少なくとも最も可能性の高いパスを可能性の高いコールパスとして返すことを含む。
いくつかの実施形態において、重み係数を適用することは、以前の関数実行から生成された履歴トレースデータに基づいて、履歴トレースデータによって示される関数コールパスが、当該パスがより可能性の高いことを示す重み係数に関連付けられるように、重み係数を生成することを含む。
いくつかの実施形態において、重み係数を適用することは、より可能性の高いものとして、共通して使用されるオブジェクトクラスを含むコールパスが示されるように、クラスベースの重み係数を適用することを含む。
いくつかの実施形態において、可能なパスを探索することはすべての可能なパスを探索することを含む。いくつかの実施形態において、可能なパスを探索することは、開始ノードおよび終了ノードの両方から始まる双方向探索を実行することを含む。
コードベースについて関数コールグラフを表わすデータ構造に関係する本願明細書において論じられるソリューションのいくつかの実施形態において、グラフは、各々がコードベース内におけるコール可能な関数を表わす複数のグラフノードを含み、当該複数のうちの第1のグラフノードは、コードベース内におけるコール可能な関数を一意に識別する関数シグネチャを含み、さらに、ファイルシステム内において、コール可能な関数を含むデータファイルの絶対位置を識別する第1のグラフノード絶対パスと、第1のグラフノードの子ノードを識別する情報とを含み、子ノードを識別する情報は、子ノードに関連付けられる子関数を識別する子関数シグネチャと子ノードに関連付けられる子ノード種類とを表したものを含み、子ノードに関連付けられる子関数シグネチャは、第1のグラフノードおよび子ノードを接続するグラフエッジを表わしており、子ノード種類は、ダイレクトコール種類およびインスタンスコール種類のうちの1つを含み、インスタンスコール種類は、子ノードが、コール可能な関数において呼び出されるベースクラスメソッドのオーバライドのインプリメンテーションを表わすということを示す。
いくつかの実施形態において、子ノードを識別する情報は、子ノードに関連付けられる子関数がリモートプロシージャコール関数であるかどうかを示すフラグをさらに含む。
いくつかの実施形態において、関数シグネチャは、ハッシュされた形態で、第1のグラフノードに含まれており、ハッシュされた形態は、媒体においてデータストレージ空間を占めることがより少ない。
いくつかの実施形態において、子ノードは、コードベース内において子関数を一意に識別する子関数シグネチャと、ファイルシステム内において、子関数を含むデータファイルの絶対位置を識別する子ノード絶対パスと、グラフノードの接続ノードを識別する情報とを含み、接続ノードを識別する情報は、子ノードによって表わされる子関数を呼び出す呼出元関数を識別する呼出元関数シグネチャを表すものを含み、接続ノードに関連付けられる呼出元関数シグネチャは、子ノードおよび接続ノードを接続するグラフエッジを表す。
いくつかの実施形態において、第1のグラフノードは子ノードの接続ノードである。
本願明細書において記載されるソリューション、技術、およびシステムの実施形態は、プロセッサと、命令が具現化されるプロセッサ読取可能メモリとを含むシステムを含み得、当該命令は、プロセッサに、上に記載されたステップもしくはオペレーションのうちのいくつかもしくはすべてを行わせるか、および/または、上に記載されたデータ構造のうち1つ以上を表すものを作成させるように構成される。
本願明細書において記載されるソリューション、技術、およびシステムの実施形態は、命令が具現化される一時的または一時的でないコンピュータ読取可能媒体を含み得、当該命令は、コンピュータに、上に記載されたステップのうちのいくつかもしくはすべてを行わせるか、および/または、上に記載されたデータ構造のうち1つ以上を表すものを作成させる。
論じられるシステムおよび方法の適用可能性のさらなる範囲は、以下に与えられる詳細な説明から明白になるであろう。しかしながら、本願明細書において開示される概念の精神および範囲内のさまざまな変更および修正がこの詳細な説明から当業者には明白であるので、詳細な説明および特定の例は、システムおよび方法の実施形態を示しているが、単に例示としてのみ与えられるということが理解されるべきである。
論じられるシステムおよび方法は、本願明細書において以下に与えられる詳細な説明と、単に例示として与えられるため限定的ではない添付の図面とからより完全に理解されるであろう。
本願明細書に記載される、関数コールグラフ生成オペレーションの実施形態を表わすブロック図を示す図である。 本願明細書に記載される、共有されたバイナリ識別オペレーションの実施形態を表わすブロック図を示す図である。 本願明細書に記載される、関数コールグラフの部分の実施形態を表わすブロック図を示す図である。 本願明細書に記載される、グラフノードの実施形態を表わすブロック図を示す図である。 本願明細書に記載される、グラフ探索およびコールパス生成オペレーションの実施形態を表わすブロック図を示す図である。 本願明細書に記載される、コールパスソートまたはランク付けオペレーションの実施形態を表わすブロック図を示す図である。 本願明細書において記載される、グラフ生成およびコールパス識別オペレーションのいくつかまたはすべてを行なうように構成されるコンピューティングデバイスの実施形態を表わすブロック図を示す図である。
図面は、詳細な説明において、詳細に説明される。
詳細な説明
以下の詳細な説明は添付の図面を参照する。異なる図における同じ参照番号は同じまたは同様の要素を識別する。さらに、以下の詳細な説明は、論じられる概念を限定しない。その代わりに、本願明細書において論じられる概念の範囲は、添付の請求の範囲およびその均等物によって規定される。
複雑な大規模ソフトウェアプロダクトまたはソフトウェア開発環境によって、開発および/またはコードメンテナンスを行うプログラマは、未知のコードを読むことが必要になり得る。そのような状況において、ある関数から別の関数まで制御フローを辿ることは困難かつ時間を消費するものであり得る。コードベースにおける任意の2つの関数同士の間の1つ以上の可能性の高いパスを発見することができるコールパスファインダは、コードを理解するプロセスを簡素化するとともに、より速く容易なソフトウェア開発およびメンテナンスを可能にし得る。
特定のコードベースについてのコールパスファインダの実施形態は、グラフまたはツリーデータ構造を作成し、次いで、クエリ送信することにより実現され得る。いくつかの実施形態において、そのようなグラフは、グラフノードとしてコードベースの各関数を含み得、接続ノードは、当該関数から呼び出されるか、または、呼び出され得る他のすべての可能な関数および/または関数インスタンスを表す。さらに、接続ノードはさらに、特定のノードによって表わされる関数を実行または呼び出し得る関数および/または関数インスタンスである呼出元関数(call-from function)を表し得る。
モノリシックなコードベースでは、たとえば、1つ以上のデータベーステーブルにおいて、ソートされたキーマップとしてそのようなグラフが構築され得る。各グラフノードは、ノードによって表わされる特定の関数を識別する、関数シグネチャのような一意のシグネチャを含み得る。コードベースへの更新および変更に対応するために、そのようなグラフは、一定間隔(たとえば毎晩)で再構築および/または更新され得る。
オブジェクト指向技術を伴う実施形態において、入力および出力関数コールの静的解析は、関数オーバローディングまたはオーバライドといったものによって引き起こされる微妙な変更または変動を捉え得ない。いくつかの実施形態において、関数は、ベースクラスのメソッドまたは関数にインターフェイスコールを行い得る。いくつかの場合には、これがベースクラスのインスタンスへのコールであり得る。他の場合において、これは、ベースクラスメソッドのオーバロードされたインスタンスへのコールであり得る。オーバロードされた関数に対応することを意図するいくつかの実施形態において、所与のノードへの接続の数は、子ノードまたは接続ノードとしてベースクラスメソッドのオーバライドの各インプリメンテーションを含むよう拡張され得る。
モノリシックなコードベースについてのグラフ構築プロセスの実施形態が図1aに示される。示される実施形態において、コードベースにおける各関数は、関数シグネチャを有し得る。これは、コードベース内において関数を一意に識別する数、ストリングまたは他の情報であり得る。いくつかの実施形態において、そのような関数シグネチャは、グラフ構築プロセスの一部として当該関数のために生成され得る。いくつかの実施形態において、コードベースまたは開発環境のためのソース管理ポリシーまたは業務は、各関数および/または各クラスが、関数シグネチャの一部またはすべてとして使用され得る一意識別子に関連付けられることを必要とし得る。
関数シグネチャの一例は、たとえばJava(登録商標)のようなオブジェクト指向プログラミング言語におけるクラスシグネチャを含み得る。関数シグネチャの別の例は、特定のクラスについてソースコードファイルのディレクトリパスから作成される名称、クラスの名称、およびクラス内の関数の名称を含み得る。他の実施形態は、関数シグネチャとして使用するよう一意識別子を作成するために他の技術を利用し得る。
関数シグネチャは、1001にて、生成または読み出され得、シグネチャによって識別された関数は、1070にてノードとしてグラフに追加され得る。いくつかの実施形態において、1070にてノードとしてグラフに関数を追加することは、1200にて、呼出先(call-to)関数および呼出元関数を識別するよう、関数をパースまたはトラバースすることを含み得る。
呼出先関数は、追加された関数内から呼び出されるまたは呼び出され得る関数である。そのような呼出先関数は、当該追加された関数を表わすノードの子ノードまたは接続ノードとして含まれる関数シグネチャを有し得る。いくつかの実施形態において、上記追加された関数を呼び出すまたは呼び出し得る関数である呼出元関数はさらに、関数シグネチャに基づいて識別され得る。
いくつかの実施形態において、コードベースのすべての関数シグネチャは1つ以上のデータベーステーブルに格納され得る。いくつかの実施形態において、シグネチャは、データルックアップの容易さのためにソートされたストリングテーブルに格納され得る。いくつかの実施形態において、関数シグネチャは、特定の関数についての呼出先、呼出元、また任意の関連する継承情報にアクセスするキーを示すか、または、キーとして機能し得る。そのような実施形態において、そのようなデータベーステーブルをスキャンすることは、特定の関数について呼出先および呼出元データを提供し得る。
他の実施形態において、呼出元情報は、グラフ構築の間に再帰的に生成され得る。そのような実施形態では、特定のノードにおいて呼出元関数を識別することにより、当該特定のノードが呼出元関数を表わすノードについての呼出先ノードとして識別されることが可能になる。いくつかのそのような実施形態では、マスター呼出先または呼出元テーブルまたはデータ構造が、グラフ生成プロセスの一部として1つ以上のデータベーステーブルにおいて動的に作成され得る。いくつかの実施形態において、すべてのグラフノードは、幅優先探索を促進するよう呼出先値を含み得る。いくつかの実施形態において、すべてのグラフノードは、幅優先探索を促進するよう呼出元値を含み得る。
いくつかのオブジェクト指向の実施形態では、追加された関数は、ベースクラスメソッドへのインターフェイスコール1010を含み得る。ベースクラスのメソッドまたは関数へのそのようなインターフェイスコール1010は、いくつかの場合において、ベースクラスのインスタンスへのコールであり得る。他の場合において、そのようなインターフェイスコール1010は、ベースクラスメソッドのオーバロードされたインスタンスへのコールであり得る。静的解析セッティングでは、インターフェイスコール1010が、オーバロードされたインスタンスに対するものであるか否かを容易に判定することができないため、グラフ構築方法のいくつかの実施形態は、当該関数を表わすノードの呼出先子ノードまたは接続ノード1020として、ベースクラスメソッドのオーバライドの各インプリメンテーションを追加し得る。
いくつかの実施形態において、そのような継承拡張(inheritance expansion)によって、グラフにおけるノードおよび接続の数が管理不可能なほど大きくなる。いくつかの実施形態において、そのような継承拡張は、不可能またはそうでなければ起こりそうもない(たとえば偽陽性)グラフエッジを示唆する子ノードまたは接続ノードを追加し得る。
いくつかの実施形態において、関数は、任意の潜在的な子ノード1020と共に、コールグラフ1090に追加され得る。このようにして、さまざまなコールパスについて、1050にて、グラフが構築され得、各グラフノードはブルームフィルタのようなフィルタに関連付けられる。所与の呼出元/呼出先関数ペアについてのブルームフィルタは、1040にて、関数に共通のバイナリファイルに基づいて作成され得る。
いくつかの実施形態において、ブルームフィルタは、コードベース内においてコンパイルされるかまたはコンパイルのために示される各バイナリファイルに基づいて作成され得る。いくつかの実施形態において、そのようなブルームフィルタは、どのソースコードファイルおよびどのソースコードファイルバージョンがアプリケーションまたはプログラムの特定のバージョンになるようにコンパイルされるべきであるかを識別するバージョン管理ツールといったユーティリティに基づいて作成され得る。いくつかの実施形態において、特定のブルームフィルタの長さまたはデータサイズは、ソースコードファイルおよび/またはコンパイルされたアプリケーションもしくはプログラムを表わす特定のバイナリファイルに含まれる関数の数に基づき変動し得る。
いくつかの実施形態において、グラフ構築プロセスは、コードベース内の各関数を読み出し得る。いくつかのそのような実施形態では、グラフ構造プロセスは、1060にてすべての関数が読み出されてグラフ1090に追加されたことをひとたび示せば、1080にて、作成されたグラフのメモリフットプリントを低減するよう進み得る。メモリフットプリント低減の実施形態は、上で論じたようにハッシュされた関数シグネチャおよび可変長ブルームフィルタを使用することを含み得る。
いくつかの実施形態において、構築されたコールグラフは、グラフへのより速いアクセスおよびグラフのトラバースを可能にするために、フラッシュメモリのような揮発性メモリまたは高速アクセスメモリに格納され得る。いくつかのそのような実施形態では、ブルームフィルタの長さまたはデータサイズは、偽陽性結果についての所望の許容性に依存して変動され得る。いくつかの実施形態において、0.01%の偽陽性結果を可能にするようブルームフィルタのサイズの変更することにより、データ品質とデータサイズとの間のバランスが良好になり得る。関数ベースのブルームフィルタを使用する実施形態では、そのファイルがより多くのバイナリファイルに存在する関数が、より大きなサイズブルームフィルタを取得し得る。
コールパスを発見する一般的なバイナリファイル識別プロセスの実施形態の一例が図1bに示される。ブルームフィルタのようなバイナリファイルフィルタ1100と、グラフにおける開始ノード1170および終了ノード1180とから始めて、開始ノードおよび終了ノードに関連付けられる関数シグネチャは、フィルタ1110を使用して評価され得る。関数シグネチャによって識別される関数が、1130にて、フィルタによって表わされるバイナリファイルに含まれていると示されない場合、当該ブルームフィルタについてのフィルタリングプロセスは停止し、バイナリファイルのその後のセットについてのフィルタリングプロセスが開始され得る。
関数シグネチャによって識別される関数が、1120にて、ブルームフィルタに表わされるバイナリファイルに含まれると示される場合、子ノードまたは接続ノードとして追加されたベースクラスメソッドのオーバライドの各インプリメンテーションは、その同じフィルタ1140を使用して評価され得る。当該フィルタを通過したベースクラスメソッドのオーバライドの各インプリメンテーションは、1150において、バイナリファイルに含まれると判定され、関数コールパスにおいて可能性のあるノードとして残る。フィルタを通過しないベースクラスメソッドのオーバライドの各インプリメンテーションは、コーリング(呼出元)関数1160と共通してバイナリファイルを有さないと判定され、そのため、関数コールパスにおいて可能性のあるノードではない。
他の実施形態において、ブルームフィルタは、継承拡張に対応するために追加される子ノードまたは接続ノードを有する各グラフノード/関数シグネチャについて作成され得る。そのような実施形態において、ブルームフィルタは、どのソースコードファイルおよびどのソースコードファイルバージョンがアプリケーションまたはプログラムの特定のバージョンになるようにコンパイルされるべきであるかを識別するバージョン管理ツールといったユーティリティに基づいて作成され得る。グラフノードの関数シグネチャによって識別される関数に基づく特定のセットのバイナリファイルについてのブルームフィルタは、識別された関数が発生するバイナリファイルの各々におけるすべての関数に関する情報を含み得る。そのような実施形態では、ブルームフィルタは、1140にて、子ノードまたは接続ノードとして追加されたベースクラスメソッドのオーバライドの各インプリメンテーションの直接的な評価を可能にし得る。なぜならば、ブルームフィルタは、開始ノードおよび終了ノードにおいて表わされる関数を含むバイナリファイルに対して既に固有であるからである。
例示的な関数コールグラフまたはグラフ部分の実施形態が図1cに示される。示される実施形態において、更新要求関数1500からの関数コールパスが示される。クラスクライアントにおいて呼び出される更新要求関数1500は、クラスサーバにおいて更新要求ハンドラー関数1510を呼び出し得る。更新要求ハンドラー関数1510は、要求検証関数1520、要求処理関数1530および応答セッティング関数1540を呼び出し得る。クラスアクションからの要求処理関数1530は、それぞれクラスアクション1、クラスアクション2およびクラスアクション3における要求処理関数1550,1560,1570によってオーバライドされ得る。これらの接続は、いくつかの実施形態において、静的解析を通じてではなく、ランタイム分析の間に、グラフ内において解決されなければならないので破線によって示される。アクション2要求処理関数1560は、自身に対してコールバックする再帰的計算関数1580を呼び出し得る。示される実施形態において、関数の各々はグラフノードを表わす。
本願明細書において論じられるような関数コールグラフのノードを表わすデータ構造の実施形態が図2に示される。示される実施形態では、グラフノード2010は、ノードによって表わされる特定の関数を識別する関数シグネチャ20200を示す情報を含み得る。グラフノード2010はさらに、関数シグネチャ20190によって識別される関数を含むソースファイルの絶対パスを示す情報を含み得る。そのような絶対パス20190は、仮想または論理ファイルシステムにおけるディレクトリと、1つ以上の特定のストレージまたはストレージを備えたデバイスの特定のストレージ位置におけるデータの絶対的な物理的位置とのうちの一方または両方における特定のファイル位置に関する情報を含み得る。
グラフノード2010の実施形態はさらに、グラフノードによって識別される関数がコンパイルされるすべてのバイナリファイルに基づいたブルームフィルタ20210を表わす情報を含み得る。上で論じたように、そのようなブルームフィルタは、所望または許容可能なレベルのフォールトトレランスに基づき、長さが可変であり得る。偽陽性(または偽陰性)の結果が許容されないまたは許容可能でないいくつかの実施形態では、異なるタイプのフィルタが使用され得る。
グラフノード2010の実施形態はさらに、子ノードまたは接続ノードのリストを含み得る。そのようなノードは、子ノードとしてリストされているが、グラフノードから他のノードへの接続を表わしており、親グラフノードと子グラフノードとの間での階層または特徴もしくはデータの伝達もしくは共通性を示しているわけではない。示される例示的なグラフノード2010は、潜在的に任意数の子ノード20100,20130,20160を含む。各子ノード20100,20130,20160は、それぞれの子ノード20100,20130,20160の関数シグネチャに従って、グラフノード2010において識別され得る。各関数が一意の関数シグネチャを具備しているかまたは当該一意の関数シグネチャによって識別される実施形態では、そのような関数シグネチャはさらに、各グラフノードが一意に識別されることを可能にする。
グラフノード2010において表わされる各子ノード20100,20130,20160はさらに、ノード種類20110,20140,20170に関する情報を含み得る。いくつかの実施形態において、ノード種類は、ダイレクトコール種類およびインスタンスコール種類のうちの1つを含んでおり、インスタンスコール種類は、コール可能な関数において呼び出されるベースクラスメソッドのオーバライドのインプリメンテーションを子ノードが表わすことを示す。ダイレクト関数コールは、ブルームフィルタを通じてグラフをトラバースする必要なく、静的解析に対して可視(visible)または別の態様で利用可能であり得る。インスタンスコールはランタイム分析を必要とし得る。
いくつかの実施形態において、グラフノード2010において表わされる各子ノード20100,20130,20160はさらに、その子ノードがリモートプロシージャコール20120,20150,20180を表わすかどうかを特定するフラグを含み得る。そのようなフラグは、コードベースの外部の関数を呼び出し得るまたはトリガし得るプロシージャまたはサブルーチンを参照する関数の識別を可能にし得る。さらに、いくつかの実施形態において、リモートプロシージャコールとしてフラグが立てられる関数は、コードベース内に呼出先関数を有し得ない。
関数コールグラフの実施形態がひとたび生成されると、当該グラフは、開始関数と終了関数との間の1つ以上の可能な関数コールパスを発見するよう探索され得る。コールパス探索オペレーションの実施形態は図3に示される。
示される実施形態では、コールグラフ探索ツールは、開始グラフノード3001を識別する関数シグネチャと、終了グラフノード3010を識別する関数シグネチャとを入力として受け取り得る。いくつかの実施形態において、コールグラフ探索ツールはさらに、開始および終了ノードの共通の従属性を示すリストまたはデータベースを構築またはアクセスし得る。そのような従属性は、たとえば、従属性として特定のクラス、関数またはソースファイルを含むすべてのバイナリを含み得る。いくつかのそのような実施形態では、第1の関数から第2の関数へのコールグラフパスを判定する際に(両方の関数は特定の実行可能なものにのみ存在する)、すべての中間グラフノードも、その特定の実行可能なものにのみ存在するはずである。これは、異なる実行可能ファイルからの関数に関するグラフノードを考慮から除外することによりグラフ探索をスピードアップし得る。
開始ノード3001もしくは終了ノード3010のいずれかにて開始するか、または、いくつかの実施形態においては、開始ノード3001および終了ノード3010から双方向に開始して、すべての子ノードまたは接続ノードの幅優先パス探索が開始され得る。いくつかの実施形態において、これは、3020にて開始ノードまたは終了ノードのいずれかがリモートプロシージャコール(RPC: remote procedure call)を含むかどうかまずチェックすることによって、実現され得る。モノリシックなコードベースにおいてさえ、リモートプロシージャコールは、開始ノードおよび終了ノードによって表わされる関数を含むものを超えて、バイナリファイルのセットにおける関数を参照し得るので、このチェックはいくつかの実施形態において実行され得る。
3020にて開始ノードおよび終了ノードのうちの1つがRPCである実施形態では、使用されるバイナリのセットは、3040において、開始または終了ノードのいずれかを参照するすべてのバイナリを含み得る。開始ノードまたは終了ノードのいずれもRPCではない実施形態では、使用されるバイナリのセットは、3030において、開始ノードおよび終了ノードの両方を参照するバイナリのみを含み得る。
各ノードについて、3080にて、そのブルームフィルタが抽出され得るとともに、3080にて共通の従属性の少なくとも1つがそのノードについてブルームフィルタを通過するかどうか判定するようバイナリファイルがブルームフィルタに対してテストされ得る。
共通の従属性を表すバイナリファイルがそのノードについてのブルームフィルタを通過しない場合、当該ノードは、3070にて、可能性のあるまたは可能性の高い関数コールパスの一部でないとして廃棄される。共通の従属性がそのノードについてのブルームフィルタを通過する場合、当該ノードは、3090にて、可能性のあるコールパスのリスティングまたはトレース(trace)に追加される。幅優先探索を使用する実施形態において、3110にて、そのような評価は、所与のレベルのグラフにおけるすべてのノードについて進み得るか、または、所与の時間期間内で分析され得るか、もしくは、コンピューティングリソースの特定の割り当てを有する所与のレベルのグラフにおけるすべてのノードについて進み得る。そのような実施形態において、その関連付けられるブルームフィルタにより当該グラフレベルにおける所与のノードが評価された後、3110にて当該レベルにおけるすべてのノードが評価されるまでか、または、いくつかの場合には、所定の量の時間が経過するか、もしくは、所定の量のコンピューティングリソースが消費されるまで、3100にて当該レベルにおける次のノードが同様に評価され得る。
その後、3130にて、ランク付けスキームに従って、パスリストに含まれるノードは、最も可能性の高い次のノードおよび最も可能性の低い次のノードを判定するよう、ランク付けされ得る。いくつかの実施形態において、ランク付けは、ノードがダイレクト関数コールまたはオーバロード/継承された関数コールかどうかといったようなファクタに基づいて判定され得る。いくつかのそのような実施形態において、ダイレクト関数コールは、オーバロードまたは継承された関数コールより高くランク付けされ得る。いくつかの実施形態において、ある数のランク付けされたノードのみが対象であり得る。いくつかのそのような実施形態において、最も高くランク付けされた5つのノードのみが、ランク付けされたノードとして維持され得、残りのノードは、廃棄されるか、または、さらに評価されない。いくつかの実施形態において、3010にて終了ノードにマッチするノードは最も高くランク付けされたノードであり得る。
ノードが3130にてランク付けされた後、ランク付けされたノードは各々、最も高くランク付けされたノードから、3050での後の幅優先パス探索において含むべき子ノードを有しているかどうか3060にて判定するよう、3120にて拡張され得る。そのような拡張は、3050にてすべてのランク付けされたノードについて行なわれ得るか、または、それは所与の時間期間内に分析され得るか、もしくは、コンピューティングリソースの特定の割り当てを有するすべてのランク付けされたノードについて行なわれ得る。
いくつかの実施形態において、この探索および評価オペレーションは、探索パスが開始ノード3001もしくは終了ノード3010で終了するまでか、または、双方向の実施形態では、探索パスが合致して3140にて拡張および探索されるべき子ノードもしくは接続ノードが残っていなくなるまで、継続する。可能性のある関数コールパスのリストがひとたび作成されると、最も可能性があるかもしくは最も可能性の高いと考えられる1つ以上の関数コールパスを識別するよう、3150にてパスのリストがソートまたはランク付けされ得る。その後、グラフ探索ツールは、3160にて、最も可能性のあるパスを含むコールパスのうちのいくつかまたはすべてを返し得る。
いくつかの実施形態において、グラフ探索ツールは、単一または分岐パスに沿って接続されるノードを表すものとして関数コールパスを示し得るグラフィカルインターフェイスを含むか、または、当該グラフィカルインターフェイスの一部であり得る。いくつかの実施形態において、継承拡張に基づいてノードを接続するグラフエッジは、識別されるか、またはそうでなければ、当該エッジを識別するよう異なって表示され得る。
いくつかの実施形態において、パスリストは、全体的なパス長さ(たとえばノードの数またはパスにおけるグラフエッジの数)、アプリケーションまたはプロダクトコードベース同士間でパスが交差するかどうか、パスが特定のオブジェクトまたはオブジェクトクラスから関数を呼び出すかどうか、および、頻繁な関数コール挙動を示す以前のランタイムトレースなどといったファクタを含むさまざまな基準によってソートされ得る。パスリストソーティングおよび確率判定オペレーションの実施形態が図4に示される。
4001にて、図3に示されるようなグラフ探索オペレーションに基づいてコンパイルされたパスリストから開始して、ソートおよびパス確率プロセスは、4010にて、リストにおいて最も短いパスを識別し得る。いくつかの実施形態において、返すべきパスの数および/または最大の許可されるパス長さを管理する外部から定義または外部から制御されたセッティングによって、最も短いパスの数が判定され得る。パス長さは、パスにおけるノードの数、パスに含まれるグラフエッジの数、またはその組合せにより判定され得る。いくつかのパスにおいて、たとえば、あるノードは複数回通過され得、これにより、パスにおけるグラフエッジの数がパスにおけるノードの数より大きくなる。
いくつかの実施形態において、4020にて、パスは、当該パスが特定のプロダクトまたはアプリケーションについてのコードベース内に完全に存在しているかどうかに基づいて識別され得る。いくつかの実施形態において、パス長さと、さらに、パスが単一のプロダクトコードベース4020内に残っているかどうかとに基づき、プレファレンスがパスに与えられ得る。いくつかのそのような実施形態では、プロダクトまたはアプリケーションコードベース内に完全に存在するパスは、単一のプロダクトまたはアプリケーションコードベース内に完全に存在しない同じまたは同様の長さのパスよりも、より可能性があるまたはより可能性が高いものとしてソートされ得る。
いくつかの実施形態において、オブジェクトクラス重み係数がさらにパスに適用され得る。そのようなオブジェクトクラス重み係数は、いくつかの実施形態においては、特定のオブジェクトまたはオブジェクトクラスに関連付けられる使用頻度に基づき判定され得る。そのような実施形態では、重み係数に関連付けられる特定のオブジェクトまたはオブジェクトクラスからの関数を表すノードを含む関数コールパスには、当該ノードを含まない同じまたは同様の長さの関数コールパスよりも、より高い尤度または確率が与えられ得る。
いくつかの実施形態において、特定の関数コールパスの尤度または確率は、パス長さ、コードベースおよびクラス重み係数に基づいて計算される特定の確率パーセンテージに関連付けられ得る。他の実施形態では、特定の関数コールパスの尤度または確率は、特定のパーセンテージを提供することなく、他のコールパスと比較して相対的に表され得る。いくつかの実施形態において、特定の関数コールパスの尤度または確率は、コールパスリストにおける特定のコールパスのランク付け順によって示され得る。いくつかの実施形態において、4040にてコールパス確率を判定することは、4010でのパス長さ、4020でのコードベース内のパス長さ、および/または、4030でのクラス重み係数に基づき、関数コールパスを再順序付けまたは再ランク付けすることを含み得る。
いくつかの実施形態において、4040にてパス確率を判定するようパスリストにおける関数コールパスのそのような再順序付けまたは再ランク付けすることはさらに、4050にて、過去のランタイムトレースに対して関数コールパスを評価することを含み得る。そのようなランタイムトレースは、履歴アプリケーション挙動に基づいて頻繁および/または可能性の高いコールパスを示す履歴関数コールデータを含み得る。たとえば4040にて最も可能性の高いものから最も可能性の低いものまでコールパスをランク付けまたは順序付けすることにより絶対的または相対的なコールパス確率がひとたび判定されると、何らかの量の最も可能性の高いコールパス(たとえばトップランクのパス)が、パス探索ツールのユーザへの提示または(たとえばアプリケーション開発またはプロトタイピングプログラムまたはプログラムスイートのような)他の情報要求エンティティへの提示のために返されるかまたは選択され得る。
機能の点について上で論じたが、関数グラフ生成およびコールパス探索の特徴および特性は、1つ以上の特殊化されたプログラマブルな、および/または、特別にプログラムされたコンピューティングデバイスまたはその部分の使用により実現され得る。
図5は、本願明細書において記載されるようなコールグラフ生成およびコールパス探索技術を実行するように構成される例示的なコンピューティングデバイス500を示すブロック図である。非常に基本的な構成501において、コンピューティングデバイス500は典型的に、1つ以上のプロセッサ510およびシステムメモリ520を含む。プロセッサ510とシステムメモリ520との間で通信するためにメモリバス530が使用され得る。
所望の構成に依存して、プロセッサ510は、マイクロプロセッサ(μP)、マイクロコントローラ(μC)、デジタル信号プロセッサ(DSP)またはその任意の組合せを含むがこれらに限定されない任意のタイプであり得る。プロセッサ510は、レベル1キャッシュ511およびレベル2キャッシュ512といった1つ以上のレベルのキャッシングと、プロセッサコア513と、レジスタ514とを含み得る。プロセッサコア513は、算術論理演算ユニット(ALU:arithmetic logic unit)、浮動小数点ユニット(FPU:floating point unit)、デジタル信号処理コア(DSPコア:digital signal processing core)またはその任意の組合せを含み得る。メモリコントローラ515がさらにプロセッサ510と共に使用され得、または、いくつかの実現例では、メモリコントローラ515はプロセッサ510の内部部分であり得る。
所望の構成に依存して、システムメモリ520は、(RAMのような)揮発性メモリ、(ROM、フラッシュメモリなどのような)不揮発性メモリまたはその任意の組合せを含むがこれらに限定されない任意のタイプであり得る。システムメモリ520は典型的に、オペレーティングシステム521、1つ以上のアプリケーション522、およびプログラムデータ524を含む。アプリケーション522は、本願明細書において論じられるように、コールグラフ生成および/またはコールパス探索機能を含み得る。プログラムデータ524は、上述したように所望のオペレーションを実行するのに有用である1つ以上の依存性リストまたはオブジェクト名リスト525といった位置データを含む。いくつかの実施形態において、アプリケーション522は、全体のシステムが本願明細書において論じられるような技術の1つ以上の特定の変形例を実行するように、オペレーティングシステム521上でプログラムデータ524を用いて動作するよう構成され得る。この記載された基本構成は図5において、ライン501内のそれらのコンポーネントによって示される。
コンピューティングデバイス500は、基本構成501と任意の必要とされるデバイスおよびインターフェイスとの間の通信を促進するよう、付加的な特徴または機能および付加的なインターフェイスを有し得る。たとえば、バス/インターフェイスコントローラ540は、ストレージインターフェイスバス541を介する基本構成501と1つ以上のデータストレージデバイス550との間の通信を促進するよう使用され得る。データストレージデバイス550は、リムーバブルストレージデバイス551、非リムーバブルストレージデバイス552、または、その組合せであり得る。リムーバブルストレージデバイスおよび非リムーバブルストレージデバイスの例は、たとえば、フレキシブルディスクドライブおよびハードディスクドライブ(HDD)のような磁気ディスクデバイスと、コンパクトディスク(CD)ドライブまたはデジタルバーサタイルディスク(DVD)ドライブといった光学ディスクドライブと、ソリッドステートドライブ(SSD)と、テープドライブとを含む。例示的なコンピュータストレージ媒体は、コンピュータ読取可能命令、データ構造、プログラムモジュール、または他のデータといった情報の格納のために任意の方法または技術で実現される揮発性および不揮発性のリムーバブルおよび非リムーバブル媒体を含み得る。
システムメモリ520、リムーバブルストレージ551および非リムーバブルストレージ552は、コンピュータストレージ媒体のすべての例である。コンピュータストレージ媒体は、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、デジタルバーサタイルディスク(DVD)もしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または、所望の情報を格納するために使用され得るとともにコンピューティングデバイス500によってアクセスされ得る任意の他の媒体を含むが、これらに限定されない。任意のそのようなコンピュータストレージ媒体は、デバイス500の一部であり得る。
コンピューティングデバイス500はさらに、さまざまなインターフェイスデバイス(たとえば出力インターフェイス、周辺インターフェイスおよび通信インターフェイス)からバス/インターフェイスコントローラ540を介して基本構成501への通信を促進するためのインターフェイスバス542を含み得る。例示的な出力デバイス560は、1つ以上のA/Vポート563を介してディスプレイまたはスピーカのようなさまざまな外部デバイスと通信するように構成され得るグラフィック処理ユニット561および音声処理ユニット562を含む。例示的な周辺インターフェイス570は、入力デバイス(たとえばキーボード、マウス、ペン、音声入力デバイス、カメラ、タッチ入力デバイスなど)または他の周辺機器(たとえばプリンタ、スキャナなど)のような外部デバイスと1つ以上のI/Oポート573を介して通信するように構成され得るシリアルインターフェイスコントローラ571またはパラレルインターフェイスコントローラ572を含む。例示的な通信デバイス580は、ネットワーク通信により1つ以上の通信ポート582を介して1つ以上の他のコンピューティングデバイス590との通信を促進するように構成され得るネットワークコントローラ581を含む。
通信接続は通信媒体の一例である。通信媒体は典型的に、コンピュータ読取可能命令、データ構造、プログラムモジュール、または、搬送波もしくは他の伝送メカニズムといった変調データ信号における他のデータによって具現化され得、任意の情報送達媒体を含む。「変調データ信号」は、信号における情報をエンコードする態様でセットまたは変更されるその特性のうち1つ以上を有する信号であり得る。限定ではなく例示として、通信媒体は、有線ネットワークまたは直接的な有線接続といった有線媒体と、音波、無線周波数(RF)、赤外線(IR)および他の無線媒体のような無線媒体とを含み得る。本願明細書において使用されるコンピュータ読取可能媒体という用語は、ストレージ媒体および通信媒体の両方を含む。
コンピューティングデバイス500は、携帯電話、個人用携帯情報端末(PDA)、パーソナルメディアプレーヤーデバイス、ワイヤレスウェブウォッチデバイス、パーソナルヘッドセットデバイス、特定用途向けデバイス、または、上記の機能のいずれかを含むハイブリッドデバイスといったスモールフォームファクタポータブル(またはモバイル)電子デバイスの部分として実現され得る。コンピューティングデバイス500はさらに、ラップトップコンピュータ構成および非ラップトップコンピュータ構成の両方を含むパーソナルコンピュータとして実現され得る。
いくつかの場合において、システムの局面のハードウェアインプリメンテーションとソフトウェアインプリメンテーションとの間には区別があまり存在せず、ハードウェアまたはソフトウェアの使用は、一般にコスト対効率のトレードオフを表わす設計選択である(しかし、ある文脈では、ハードウェアとソフトウェアとの間の選択は有意であり得るという点で常にではない)。本願明細書において記載されるプロセスおよび/またはシステムおよび/または他の技術が実行され得るさまざまな手段(vehicle)が存在し(たとえばハードウェア、ソフトウェアおよび/またはファームウェア)、好ましい手段は、プロセスおよび/またはシステムおよび/または他の技術が展開される文脈に応じて変化する。たとえば、実装者がスピードおよび正確さが最も重要であると決定した場合、実装者は、主としてハードウェアおよび/またはファームウェアの手段を選択し得、柔軟性が最も重要である場合、実装者は、主としてソフトウェアインプリメンテーションを選び得るか、または代替的には、実装者は、ハードウェア、ソフトウェアおよび/またはファームウェアの何らかの組合せを選択し得る。
上記の詳細な説明は、ブロック図、フローチャートおよび/または例の使用を介してデバイスおよび/またはプロセスのさまざまな実施形態を記載した。その限りにおいて、そのようなブロック図、フローチャートおよび/または例は1つ以上の機能および/またはオペレーションを含んでいるので、当業者であれば、そのようなブロック図、フローチャートまたは例における各機能および/またはオペレーションは、広範囲のハードウェア、ソフトウェア、ファームウェアまたはその実質的に任意の組合せによって個々におよび/または集合的に実現され得るということが理解されるであろう。一実施形態では、本願明細書において記載される主題のいくつかの部分は、特定用途向け集積回路(ASIC: Application Specific Integrated Circuit)、フィールドプログラマブルゲートアレイ(FPGA: Field Programmable Gate Array)、デジタル信号プロセッサ(DSP: digital signal processor)、または他の集積フォーマットを介して実現され得る。しかしながら、当業者は、本願明細書において開示される実施形態のいくつかの局面が、全体的または部分的に、1つ以上のコンピュータ上で動作する1つ以上のコンピュータプログラムとして(たとえば1つ以上のコンピュータシステム上で動作する1つ以上のプログラムとして)、1つ以上のプロセッサ上で動作する1つ以上のプログラムとして(たとえば1つ以上のマイクロプロセッサ上で動作する1つ以上のプログラムとして)、ファームウェアとして、または、その実質的に任意の組合せとして、集積回路において均等に実現され得るということと、回路を設計すること、ならびに/または、ソフトウェアおよび/もしくはファームウェアのためのコードを記述することがこの開示を考慮して当業者の技能内に存在するということとを認識するであろう。さらに、当業者は、本願明細書において記載される主題のメカニズムは、さまざまな形態のプログラムプロダクトとして配布可能であり、当該配布を実際に行なうために使用される特定タイプの信号担持媒体にかかわらず、本願明細書において記載される主題の例示的な実施形態が適用されるということを認識するであろう。信号担持媒体の例は、フロッピーディスク(登録商標)、ハードディスクドライブ、コンパクトディスク(CD)、デジタルビデオディスク(DVD)、デジタルテープ、コンピュータメモリなどといった記録可能なタイプの媒体と、(たとえば光ファイバケーブル、導波路、有線通信リンク、無線通信リンクなどといった)デジタルおよび/またはアナログ通信媒体のような伝送タイプの媒体とを含むがこれらに限定されない。
当業者は、本願明細書において述べられる態様でデバイスおよび/またはプロセスを記載し、その後、そのような記載されたデバイスおよび/またはプロセスをデータ処理システムへ統合するようエンジニアリングプラクティスを使用することは当該技術において一般的であるということを認識するであろう。すなわち、本願明細書において記載されるデバイスおよび/またはプロセスの少なくとも一部は、妥当な量の実験を介してデータ処理システムへ統合され得る。当業者は、典型的なデータ処理システムは一般に、システムユニット筐体、ビデオ表示デバイス、揮発性および不揮発性メモリのようなメモリ、マイクロプロセッサおよびデジタル信号プロセッサのようなプロセッサ、オペレーティングシステム、ドライバ、グラフィカルユーザインターフェイスおよびアプリケーションプログラムのような計算エンティティ、タッチパッドもしくはスクリーンのような1つ以上のインタラクションデバイス、ならびに/または、フィードバックループおよび制御モータを含む制御システム(たとえば、フィードバックは位置および/もしくは速度を感知するためであり、制御モータはコンポーネントおよび/もしくは量を移動および/もしくは調節するためである)のうちの1つ以上を含むということを認識するであろう。典型的なデータ処理システムが、データコンピューティング/通信および/またはネットワークコンピューティング/通信システムにおいて典型的に発見されるようなコンポーネントのような任意の好適な商業的に利用可能なコンポーネントを利用して実現され得る。
本願明細書において実質的に任意の複数および/または単数の用語の使用に関して、当業者は、文脈および/または用途に適切であるように、複数から単数および/または単数から複数へ変更し得る。さまざまな単数/複数の順列は、明瞭さの目的のために、本願明細書において明らかに述べられ得る。
本開示において、本願明細書において論じられたシステムおよびソリューションの例示的な実施形態のみが示され記載される。本願明細書において論じられたシステムおよびソリューションがさまざまな他の組合せおよび環境における使用が可能であり、本願明細書において表されるような概念の範囲内での変更または修正が可能であるということが理解されるべきである。いくつかの変形例は、ハードウェア、ファームウェアおよび/またはソフトウェアの組合せで具体化され得る。いくつかの変形例が、メモリチップ、ハードドライブ、フラッシュメモリ、光学ストレージ媒体のようなコンピュータ読取可能ストレージ媒体上で少なくとも部分的に具現化され得るか、または、さまざまなハードウェアデバイスおよび/もしくはハードウェアデバイスの組合せ/集合への送信/さまざまなハードウェアデバイスおよび/もしくはハードウェアデバイスの組合せ/集合によるダウンロード/さまざまなハードウェアデバイスおよび/もしくはハードウェアデバイスの組合せ/集合上へのインストールに好適な完全または部分的にコンパイルされたプログラムとして具現化され得る。そのような変形例は、本願明細書において論じられたシステムおよびソリューションの精神および範囲からの逸脱と見なされるべきではなく、当業者にとって明白であるすべてのそのような修正例は添付の請求の範囲内に含まれるように意図される。

Claims (26)

  1. コードベースについての関数コールグラフを生成するコンピュータベースの方法であって、
    プロセッサにより、関数シグネチャを使用して前記コードベースにおける関数を識別すること(1001)と、
    前記関数コールグラフにおいて第1のノードとして特定の識別された関数を表わすこと(1070)と、
    前記特定の関数について、当該特定の関数の関数シグネチャに基づいて、前記特定の関数に関連付けられる呼出先関数と、呼出元関数と、継承親と、継承子と、ベースクラスとを識別すること(1200)と、
    識別された前記呼出先関数および前記呼出元関数に基づいて、前記第1のノードに第1の子ノード(1020)を追加すること(1090)と、
    前記特定の関数におけるベースクラスメソッドへのインターフェイスコール(1010)について、前記ベースクラスメソッドのオーバライドのインプリメンテーションに基づいて、前記第1のノードに第2の子ノードを追加することと、
    前記第1のノードの各子ノード(1020)について、親子関係についてのバイナリファイルフィルタを生成すること(1040)とを含み、前記バイナリファイルフィルタは、前記特定の関数と子ノードによって表わされる関数とを含むバイナリファイルに基づく、方法。
  2. 前記バイナリファイルフィルタは、前記特定の関数と、前記ブルームフィルタを通過するファイルとして前記子ノードによって表わされる前記関数とを含むバイナリファイルを示すように構成されるブルームフィルタである、請求項1に記載の方法。
  3. 前記関数コールグラフのメモリフットプリントを低減すること(1080)をさらに含む、請求項1に記載の方法。
  4. 前記メモリフットプリントを低減することは、関数シグネチャにハッシュ関数を適用することと、前記関数シグネチャを表すものとして前記ハッシュ関数の結果を格納することとを含む、請求項3に記載の方法。
  5. バイナリファイルが2つの関数の間のコールパスを含むかどうか判定する方法であって、
    関数コールグラフにおいて、開始関数に関連付けられる開始ノード(1170)を表わす情報を受け取ることと、
    関数コールグラフにおいて、終了関数に関連付けられる終了ノード(1180)を表わす情報を受け取ることと、
    前記開始ノードおよび前記終了ノードの少なくとも1つに関連付けられるバイナリファイルを第1のブルームフィルタ(1110,1140)でテストすることとを含み、前記テストすることは、前記バイナリファイルが前記開始関数および前記終了関数を含むかどうか判定する(1130,1120)ために、前記バイナリファイルに前記第1のブルームフィルタを適用することを含む、方法。
  6. 前記特定の関数と、前記子ノードによって表わされる前記関数とを含むバイナリファイルの数に基づいて、前記ブルームフィルタのサイズを変更することをさらに含む、請求項2に記載の方法。
  7. バイナリフィルタを生成することは、前記コードベースのバイナリファイルに基づいてブルームフィルタを生成することを含み、前記方法はさらに、
    生成された前記ブルームフィルタを前記第1のノードに追加することを含む、請求項1に記載の方法。
  8. 前記オーバライドの特定の追加されたインプリメンテーションを含む第1のソースコードファイルおよび前記特定関数を含む第2のソースコードファイルが少なくとも1つの共通のバイナリファイルを共有するかどうかを判定することは、前記第1のソースコードファイルを使用してコンパイルされたバイナリファイルに前記第1のノードの前記ブルームフィルタを適用することを含む、請求項7に記載の方法。
  9. 前記ブルームフィルタのサイズは、頻繁に使用されるソースコードファイルがより大きなサイズのブルームフィルタに関連付けられるように、どれだけ多くの前記コードベースのバイナリファイルが前記第2のソースコードファイルを使用して、コンパイルまたは生成されるかによって決定される、請求項8に記載の方法。
  10. コードベースにおいて2つの関数の間の可能性の高いコールパスを判定する方法であって、
    ソース関数およびデスティネーション関数を入力として受け取ることと、
    関数コールグラフにおいて、前記ソース関数に関連付けられる開始ノード(3001)と、前記デスティネーション関数に関連付けられる終了ノード(3010)とを識別することと、
    前記関数コールグラフにおいて前記開始ノードと前記終了ノードとの間で可能なパスを探索すること(3050)とを含み、前記探索することは、前記グラフのあるレベルでの各ノードについて、
    前記開始ノードおよび前記終了ノードによって共有される共通の従属性のリストに対して前記ノードを評価すること(3080)と、
    前記共通の従属性のリストに含まれる従属性を有する評価されたノードについて、当該評価されたノードを可能なパスリストに含むこと(3080,3090)と、
    前記共通の従属性のリストに含まれる従属性を有していない評価されたノードについて、当該評価されたノードを任意の可能なパスリストから除外すること(3080,3070)とを含み、前記方法はさらに、
    前記可能なパスリストに含まれる前記ノードをランク付けすること(3130)と、
    各ランク付けされたノードについて、ランク付けされた前記ノードが子ノードを含むかどうか判定するために、ランク付けされた前記ノードを拡張することと、
    ランク付けされた前記ノードが子ノードを有するという判定に応答して、ランク付けされた前記ノードを開始ノードとして扱うとともに、ランク付けされた前記ノードの各子ノードについて、前記可能なパスを探索することを実行すること(3060)と、
    ランク付けされた前記ノードが子ノードを有していないという判定に応答して、ランク付けされた前記ノードを含む関数コールパスを可能な関数コールパスであると識別すること(3060,3140)と、
    前記開始ノードと前記終了ノードとの間で前記可能な関数コールパスをソートすること(3150)と、
    ソートされた前記可能な関数コールパスの少なくとも1つを、可能性の高いコールパスとして返すこと(3160)とを含む、方法。
  11. 前記すべての可能な関数コールパスをソートすることは、
    最も短いものから最も長いものへ、前記すべての可能な関数コールパスを順序付けすることと、
    順序付けされた前記関数コールパスの中から、単一のコードベース内に完全に存在する関数コールパスを識別することと、
    関数コールパス長さおよび重み係数に基づき、前記すべての可能な関数コールパスが最も可能性が高いものから最も可能性が低いものへと順序付けされるように、順序付けされた前記関数コールパスに重み係数を適用することとを含み、前記重み係数は、単一のコードベース内に完全に存在する関数コールパスをより可能性が高いものとして示すことを含み、前記方法はさらに、
    前記重み係数を適用した後で、少なくとも最も可能性の高い関数コールパスを可能性の高いコールパスとして返すことを含む、請求項10に記載の方法。
  12. 前記重み係数を適用することは、以前の関数実行から生成される履歴トレースデータに基づいて、前記履歴トレースデータによって示される関数コールパスが、当該関数コールパスをより可能性の高いものとして示す重み係数に関連付けられるように重み係数を生成することを含む、請求項11に記載の方法。
  13. 前記重み係数を適用することは、より可能性の高いものとして、共通して使用されるオブジェクトクラスを含むコールパスが示されるように、クラスベースの重み係数を適用することを含む、請求項10に記載の方法。
  14. 前記可能なパスを探索することは、前記グラフ内のすべての可能なパスを探索することを含む、請求項10に記載の方法。
  15. 前記可能なパスを探索することは、前記開始ノードおよび終了ノードの両方から始まる双方向探索を実行することを含む、請求項10に記載の方法。
  16. 前記共通の従属性のリストに対して前記ノードを評価することは、前記ソース関数および前記デスティネーション関数の少なくとも1つを含むソースコードファイルからコンパイルされた少なくとも1つのバイナリファイルに、前記ノードに関連付けられるブルームフィルタを適用することを含み、
    前記ノードは、前記少なくとも1つのバイナリファイルが、適用された前記ブルームフィルタを通過することに応答して、前記共通の従属性のリストに含まれる従属性を有すると評価される、請求項10に記載の方法。
  17. 前記ソース関数および前記デスティネーション関数の少なくとも1つがリモートプロシージャコールであるという判定に応答して、前記ブルームフィルタが、前記ソース関数および前記デスティネーション関数の少なくとも1つを含むバイナリファイルを通過させるように構成されることと、
    前記ソース関数および前記デスティネーション関数の少なくとも1つがリモートプロシージャコールではないという判定に応答して、前記ブルームフィルタが、前記ソース関数および前記デスティネーション関数の両方を含むバイナリファイルを通過させるように構成されることとをさらに含む、請求項16に記載の方法。
  18. 前記ブルームフィルタのサイズは、前記ブルームフィルタが通過するように構成されるバイナリファイルの数に基づく、請求項16に記載の方法。
  19. コードベースについての関数コールグラフを表わすデータ構造が具現化される一時的でないコンピュータ読取可能媒体であって、前記グラフは、
    複数のグラフノードを含み、各グラフノードは前記コードベース内におけるコール可能な関数を表わしており、前記複数のうちの第1のグラフノードは、
    前記コードベース内において前記コール可能な関数を一意に識別する関数シグネチャと、
    ファイルシステム内において、前記コール可能な関数を含むデータファイルの絶対位置を識別する第1のグラフノード絶対パスと、
    前記第1のグラフノードの子ノードを識別する情報とを含み、前記子ノードを識別する情報は、前記子ノードに関連付けられる子関数を識別する子関数シグネチャと前記子ノードに関連付けられる子ノード種類とを表したものを含み、
    前記子ノードに関連付けられる前記子関数シグネチャは、前記第1のグラフノードおよび前記子ノードを接続するグラフエッジを表わしており、
    前記子ノード種類は、ダイレクトコール種類およびインスタンスコール種類のうちの1つを含み、前記インスタンスコール種類は、前記子ノードが、前記コール可能な関数において呼び出されるベースクラスメソッドのオーバライドのインプリメンテーションを表わすということを示す、一時的でないコンピュータ読取可能媒体。
  20. 前記子ノードを識別する情報は、前記子ノードに関連付けられる前記子関数がリモートプロシージャコール関数であるかどうかを示すフラグをさらに含む、請求項19に記載のデータ構造。
  21. 前記関数シグネチャは、ハッシュされた形態で、前記第1のグラフノードに含まれており、前記ハッシュされた形態は、前記媒体においてデータストレージ空間を占めることがより少ない、請求項19に記載のデータ構造。
  22. 前記子ノードは、
    前記コードベース内において前記子関数を一意に識別する前記子関数シグネチャと、
    ファイルシステム内において、前記子関数を含むデータファイルの絶対位置を識別する子ノード絶対パスと、
    前記グラフノードの接続ノードを識別する情報とを含み、前記接続ノードを識別する情報は、前記子ノードによって表わされる前記子関数を呼び出す呼出元関数を識別する呼出元関数シグネチャを表すものを含み、
    前記接続ノードに関連付けられる前記呼出元関数シグネチャは、前記子ノードおよび前記接続ノードを接続するグラフエッジを表す、請求項19に記載のデータ構造。
  23. 前記第1のグラフノードは前記子ノードの接続ノードである、請求項19に記載のデータ構造。
  24. 各グラフエッジは関数コールパスの少なくとも一部を表しており、前記方法はさらに、過去のランタイムトレースに対して前記関数コールパスを評価することにより前記その後のランク付けを実行することを含む、請求項22に記載の方法。
  25. システムであって、
    プロセッサと、
    コードベースについての関数コールグラフを生成する方法を前記プロセッサに実行させるための命令が具現化されるプロセッサ読取可能メモリとを含み、前記方法は、
    プロセッサにより、関数シグネチャを使用して前記コードベースにおける関数を識別すること(1001)と、
    前記関数コールグラフにおいて第1のノードとして特定の識別された関数を表わすこと(1070)と、
    前記特定の関数について、当該特定の関数の関数シグネチャに基づいて、前記特定の関数に関連付けられる呼出先関数と、呼出元関数と、継承親と、継承子と、ベースクラスとを識別すること(1200)と、
    識別された前記呼出先関数および前記呼出元関数に基づいて、前記第1のノードに第1の子ノード(1020)を追加すること(1090)と、
    前記特定の関数におけるベースクラスメソッドへのインターフェイスコール(1010)について、前記ベースクラスメソッドのオーバライドのインプリメンテーションに基づいて、前記第1のノードに第2の子ノードを追加することと、
    前記第1のノードの各子ノード(1020)について、親子関係についてのバイナリファイルフィルタを生成すること(1040)とを含み、前記バイナリファイルフィルタは、前記特定の関数と子ノードによって表わされる関数とを含むバイナリファイルに基づく、システム。
  26. システムであって、
    プロセッサと、
    コードベースにおいて2つの関数の間の可能性の高いコールパスを判定する方法を前記プロセッサに実行させるための命令が具現化されるプロセッサ読取可能メモリとを含み、前記方法は、
    ソース関数およびデスティネーション関数を入力として受け取ることと、
    関数コールグラフにおいて、前記ソース関数に関連付けられる開始ノード(3001)と、前記デスティネーション関数に関連付けられる終了ノード(3010)とを識別することと、
    前記関数コールグラフにおいて前記開始ノードと前記終了ノードとの間で可能なパスを探索すること(3050)とを含み、前記探索することは、前記グラフのあるレベルでの各ノードについて、
    前記開始ノードおよび前記終了ノードによって共有される共通の従属性のリストに対して前記ノードを評価すること(3080)と、
    前記共通の従属性のリストに含まれる従属性を有する評価されたノードについて、当該評価されたノードを可能なパスリストに含むこと(3080,3090)と、
    前記共通の従属性のリストに含まれる従属性を有していない評価されたノードについて、当該評価されたノードを任意の可能なパスリストから除外すること(3080,3070)とを含み、前記方法はさらに、
    前記可能なパスリストに含まれる前記ノードをランク付けすること(3130)と、
    各ランク付けされたノードについて、ランク付けされた前記ノードが子ノードを含むかどうか判定するために、ランク付けされた前記ノードを拡張することと、
    ランク付けされた前記ノードが子ノードを有するという判定に応答して、ランク付けされた前記ノードを開始ノードとして扱うとともに、ランク付けされた前記ノードの各子ノードについて、前記可能なパスを探索することを実行すること(3060)と、
    ランク付けされた前記ノードが子ノードを有していないという判定に応答して、ランク付けされた前記ノードを含む関数コールパスを可能な関数コールパスであると識別すること(3060,3140)と、
    前記開始ノードと前記終了ノードとの間で前記可能な関数コールパスをソートすること(3150)と、
    ソートされた前記可能な関数コールパスの少なくとも1つを、可能性の高いコールパスとして返す(3160)こととを含む、システム。
JP2016532101A 2013-11-19 2014-11-17 コールパスファインダ Active JP6349395B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/084,399 2013-11-19
US14/084,399 US9218169B2 (en) 2013-11-19 2013-11-19 Callpath finder
PCT/US2014/065906 WO2015077175A1 (en) 2013-11-19 2014-11-17 Callpath finder

Publications (2)

Publication Number Publication Date
JP2016539421A true JP2016539421A (ja) 2016-12-15
JP6349395B2 JP6349395B2 (ja) 2018-06-27

Family

ID=53174616

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016532101A Active JP6349395B2 (ja) 2013-11-19 2014-11-17 コールパスファインダ

Country Status (8)

Country Link
US (2) US9218169B2 (ja)
EP (2) EP3072070B1 (ja)
JP (1) JP6349395B2 (ja)
KR (2) KR101841751B1 (ja)
CN (1) CN105745647B (ja)
BR (1) BR112016009391B1 (ja)
DE (1) DE202014010893U1 (ja)
WO (1) WO2015077175A1 (ja)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2956078C (en) 2014-07-24 2021-12-07 Ab Initio Technology Llc Data lineage summarization
US9250891B1 (en) * 2014-10-28 2016-02-02 Amazon Technologies, Inc. Optimized class loading
US9483241B2 (en) * 2014-12-19 2016-11-01 Successfactors, Inc. Method ranking based on code invocation
US9569183B2 (en) * 2015-02-25 2017-02-14 Red Hat, Inc. Contract based builder
US9405906B1 (en) * 2015-02-25 2016-08-02 Veracode, Inc. System and method for enhancing static analysis of software applications
US10229273B2 (en) * 2015-02-25 2019-03-12 Veracode, Inc. Identifying components for static analysis of software applications
US9529836B1 (en) * 2015-09-30 2016-12-27 Semmle Limited Managing disjoint-or trees
US10353703B1 (en) * 2016-01-28 2019-07-16 BrainFights, Inc. Automated evaluation of computer programming
US11650903B2 (en) 2016-01-28 2023-05-16 Codesignal, Inc. Computer programming assessment
US11593342B2 (en) 2016-02-01 2023-02-28 Smartshift Technologies, Inc. Systems and methods for database orientation transformation
US10585655B2 (en) 2016-05-25 2020-03-10 Smartshift Technologies, Inc. Systems and methods for automated retrofitting of customized code objects
CN106020848A (zh) * 2016-06-07 2016-10-12 北京信息科技大学 面向c#的函数调用路径生成方法
US10089103B2 (en) 2016-08-03 2018-10-02 Smartshift Technologies, Inc. Systems and methods for transformation of reporting schema
US10467229B2 (en) 2016-09-30 2019-11-05 Microsoft Technology Licensing, Llc. Query-time analytics on graph queries spanning subgraphs
US9792114B1 (en) * 2016-10-10 2017-10-17 Semmle Limited Source code element signatures
US10545945B2 (en) 2016-10-28 2020-01-28 Microsoft Technology Licensing, Llc Change monitoring spanning graph queries
US10445361B2 (en) 2016-12-15 2019-10-15 Microsoft Technology Licensing, Llc Caching of subgraphs and integration of cached subgraphs into graph query results
US10402403B2 (en) 2016-12-15 2019-09-03 Microsoft Technology Licensing, Llc Utilization of probabilistic characteristics for reduction of graph database traversals
US10891326B2 (en) * 2017-01-05 2021-01-12 International Business Machines Corporation Representation of a data analysis using a flow graph
US10242223B2 (en) 2017-02-27 2019-03-26 Microsoft Technology Licensing, Llc Access controlled graph query spanning
US10992729B2 (en) 2017-04-18 2021-04-27 Microsoft Technology Licensing, Llc Endpoint configuration for a communication session
US10388039B2 (en) 2017-05-31 2019-08-20 International Business Machines Corporation Accelerating data-driven scientific discovery
CN107479985B (zh) * 2017-06-30 2020-01-03 武汉斗鱼网络科技有限公司 一种远程过程调用的方法、装置及计算机设备
US11132180B2 (en) * 2018-01-05 2021-09-28 Microsoft Technology Licensing, Llc Neural-guided deductive search for program synthesis
US10698674B2 (en) 2018-02-06 2020-06-30 Smartshift Technologies, Inc. Systems and methods for entry point-based code analysis and transformation
US10740075B2 (en) * 2018-02-06 2020-08-11 Smartshift Technologies, Inc. Systems and methods for code clustering analysis and transformation
US10528343B2 (en) 2018-02-06 2020-01-07 Smartshift Technologies, Inc. Systems and methods for code analysis heat map interfaces
FR3078182B1 (fr) * 2018-02-19 2021-12-24 Bull Sas Systeme et procede informatique d'analyse de performance d'une application realisant des appels de fonction de communication entre plusieurs processus.
WO2019182191A1 (ko) 2018-03-21 2019-09-26 경북대학교 산학협력단 C0x2 아세틸화제를 유효성분으로 포함하는 퇴행성 신경질환의 예방 또는 치료용 약학적 조성물
US20200134482A1 (en) * 2018-10-29 2020-04-30 Walmart Apollo, Llc Scaling overrides in a rules engine using a streaming probabilistic data structure
US20220147347A1 (en) * 2019-02-26 2022-05-12 Mitsubishi Electric Corporation Sequence diagram generation apparatus
CN110032394B (zh) * 2019-04-12 2022-05-31 深圳市腾讯信息技术有限公司 一种无源码文件的分析方法、装置和存储介质
US11782971B2 (en) * 2019-06-27 2023-10-10 Tencent America LLC Static and dynamic NBMP function image retrieval and scale ranking
KR20210012123A (ko) * 2019-07-24 2021-02-03 에스케이하이닉스 주식회사 메모리 시스템, 메모리 컨트롤러 및 동작 방법
CN111026467B (zh) * 2019-12-06 2022-12-20 合肥科大智能机器人技术有限公司 一种有限状态机的控制方法及有限状态机
US11360751B2 (en) 2020-03-19 2022-06-14 Codelogic, Inc. Systems and methods for dependency analysis
US11593255B2 (en) * 2020-07-31 2023-02-28 Bank Of America Corporation Mobile log heatmap-based auto testcase generation
CN112631935A (zh) * 2020-12-30 2021-04-09 中国农业银行股份有限公司 一种基于版本冲突的测试方法和装置
CN116028375B (zh) * 2023-02-21 2023-06-16 深圳大数信科技术有限公司 基于图论的代码测试方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1195990A (ja) * 1997-09-22 1999-04-09 Nippon Telegr & Teleph Corp <Ntt> プログラム構造表示方法および装置
JP2001092652A (ja) * 1999-09-22 2001-04-06 Hitachi Software Eng Co Ltd 従属サブルーチン探索支援装置
WO2013005825A1 (ja) * 2011-07-07 2013-01-10 日本電気株式会社 情報処理装置、情報処理方法およびプログラム
CN103345472A (zh) * 2013-06-04 2013-10-09 北京航空航天大学 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7120904B1 (en) * 2000-04-19 2006-10-10 Intel Corporation Data-flow method for optimizing exception-handling instructions in programs
US7003507B2 (en) 2000-09-18 2006-02-21 International Business Machines Corporation Scalable propagation-based methods for call graph construction
US7174536B1 (en) * 2001-02-12 2007-02-06 Iowa State University Research Foundation, Inc. Integrated interactive software visualization environment
US6904590B2 (en) * 2001-05-25 2005-06-07 Microsoft Corporation Methods for enhancing program analysis
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US7661095B2 (en) * 2005-04-14 2010-02-09 Hewlett-Packard Development Company, L.P. System and method to build a callgraph for functions with multiple entry points
US7721269B2 (en) * 2005-12-23 2010-05-18 Sas Institute Inc. System and method for detecting redundant subroutine calls
US7774760B2 (en) * 2005-12-23 2010-08-10 Microsoft Corporation Tracing errors in software
US7739553B2 (en) * 2007-05-31 2010-06-15 Microsoft Corporation System crash analysis using path tracing technologies
CN101436192B (zh) * 2007-11-16 2011-03-16 国际商业机器公司 用于优化针对垂直存储式数据库的查询的方法和设备
US8990792B2 (en) * 2008-05-26 2015-03-24 Samsung Electronics Co., Ltd. Method for constructing dynamic call graph of application
US8347272B2 (en) * 2008-07-23 2013-01-01 International Business Machines Corporation Call graph dependency extraction by static source code analysis
US8332558B2 (en) * 2008-09-30 2012-12-11 Intel Corporation Compact trace trees for dynamic binary parallelization
US8996568B2 (en) * 2009-07-14 2015-03-31 Qualcomm Incorporated Methods and apparatus for efficiently processing multiple keyword queries on a distributed network
CN101876939B (zh) * 2009-11-20 2011-12-21 北京信息科技大学 系统测试方法及装置
US8595709B2 (en) * 2009-12-10 2013-11-26 Microsoft Corporation Building an application call graph from multiple sources
EP2522106A1 (en) * 2010-01-04 2012-11-14 Telefonaktiebolaget LM Ericsson (publ) Method and apparatus for secure routing of data packets
EP2529578A1 (en) * 2010-01-29 2012-12-05 Telefonaktiebolaget LM Ericsson (publ) Packet routing in a network
WO2011091871A1 (en) * 2010-01-29 2011-08-04 Telefonaktiebolaget Lm Ericsson (Publ) Packet routing in a network by modifying in-packet bloom filter
WO2011116987A1 (en) * 2010-03-26 2011-09-29 Software Diagnostics Technology Gmbh A method for automatically generating a trace data set for a software system, a computer system, and a computer program product
EP2390790A1 (en) * 2010-05-27 2011-11-30 Fujitsu Limited Profiling of software applications
US8990243B2 (en) * 2011-11-23 2015-03-24 Red Hat, Inc. Determining data location in a distributed data store
CN102567200A (zh) * 2011-12-14 2012-07-11 北京航空航天大学 基于函数调用图的并行化安全漏洞检测方法
US8762396B2 (en) * 2011-12-22 2014-06-24 Sap Ag Dynamic, hierarchical bloom filters for network data routing
CN103186406B (zh) * 2011-12-30 2016-08-17 国际商业机器公司 用于控制流分析的方法和装置
US8527532B2 (en) * 2012-01-31 2013-09-03 Adobe Systems Incorporated Transforming function calls for interaction with hierarchical data structures
US9092568B2 (en) * 2012-04-30 2015-07-28 Nec Laboratories America, Inc. Method and system for correlated tracing with automated multi-layer function instrumentation localization
US8918766B2 (en) * 2012-12-12 2014-12-23 Microsoft Corporation Analysis of propagated information using annotated forests
US10685313B2 (en) * 2012-12-14 2020-06-16 Software Ag Systems and/or methods for path finding on model structures
CN103336760B (zh) * 2013-07-11 2016-12-28 北京信息科技大学 一种基于逆向工程自动生成软件文档的方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1195990A (ja) * 1997-09-22 1999-04-09 Nippon Telegr & Teleph Corp <Ntt> プログラム構造表示方法および装置
JP2001092652A (ja) * 1999-09-22 2001-04-06 Hitachi Software Eng Co Ltd 従属サブルーチン探索支援装置
WO2013005825A1 (ja) * 2011-07-07 2013-01-10 日本電気株式会社 情報処理装置、情報処理方法およびプログラム
CN103345472A (zh) * 2013-06-04 2013-10-09 北京航空航天大学 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法

Also Published As

Publication number Publication date
CN105745647B (zh) 2019-06-04
EP4369180A3 (en) 2024-05-22
KR20180032669A (ko) 2018-03-30
EP3072070A4 (en) 2017-08-09
KR102154757B1 (ko) 2020-09-10
EP3072070B1 (en) 2024-05-01
US10042746B2 (en) 2018-08-07
EP4369180A2 (en) 2024-05-15
US9218169B2 (en) 2015-12-22
BR112016009391B1 (pt) 2023-03-28
KR20160073402A (ko) 2016-06-24
KR101841751B1 (ko) 2018-05-04
DE202014010893U1 (de) 2017-02-20
BR112016009391A8 (pt) 2022-08-30
US20150143339A1 (en) 2015-05-21
US20160092350A1 (en) 2016-03-31
CN105745647A (zh) 2016-07-06
BR112016009391A2 (pt) 2017-08-01
EP3072070A1 (en) 2016-09-28
JP6349395B2 (ja) 2018-06-27
WO2015077175A1 (en) 2015-05-28

Similar Documents

Publication Publication Date Title
JP6349395B2 (ja) コールパスファインダ
US10824420B2 (en) Caching build graphs
US9009693B2 (en) Out-of-band framework libraries within applications
US8782635B2 (en) Reconfiguration of computer system to allow application installation
US9779158B2 (en) Method, apparatus, and computer-readable medium for optimized data subsetting
US10102249B2 (en) Data structure creation using ordered application of traversal rules
US20140052433A1 (en) Automatically extracting a model for the behavior of a mobile application
JP2004038965A (ja) 拡張可能なオンデマンドプロパティシステム
US9367307B2 (en) Staged points-to analysis for large code bases
US10768913B2 (en) Method for performing deep static analysis with or without source code
US10318257B2 (en) Selective object sensitive points-to analysis
AU2018202520B1 (en) Identifying and using dependencies in historical applications to generate application designs
US10620946B1 (en) Dynamic modeling for opaque code during static analysis
US8612407B1 (en) Source control inheritance locking
TWI690802B (zh) 函式分析方法與記憶體裝置
US9703532B1 (en) Dynamically updating class instances based on class definition changes
Vanecek et al. sys-sage: A Fresh View on Dynamic Topologies & Attributes of HPC Systems

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170414

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170509

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170720

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20171212

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180404

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20180411

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180508

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180604

R150 Certificate of patent or registration of utility model

Ref document number: 6349395

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250