JP6512050B2 - 探索方法、探索プログラム及び探索装置 - Google Patents

探索方法、探索プログラム及び探索装置 Download PDF

Info

Publication number
JP6512050B2
JP6512050B2 JP2015188352A JP2015188352A JP6512050B2 JP 6512050 B2 JP6512050 B2 JP 6512050B2 JP 2015188352 A JP2015188352 A JP 2015188352A JP 2015188352 A JP2015188352 A JP 2015188352A JP 6512050 B2 JP6512050 B2 JP 6512050B2
Authority
JP
Japan
Prior art keywords
search
route
methods
node
path
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.)
Expired - Fee Related
Application number
JP2015188352A
Other languages
English (en)
Other versions
JP2017062710A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015188352A priority Critical patent/JP6512050B2/ja
Publication of JP2017062710A publication Critical patent/JP2017062710A/ja
Application granted granted Critical
Publication of JP6512050B2 publication Critical patent/JP6512050B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Description

本発明は、探索方法、探索プログラム及び探索装置に関する。
プログラムソースコードの解析において、プログラムソースコードに含まれる複数のメソッド間における呼出し関係の経路を抽出する方法が知られている(例えば、特許文献1参照)。これによれば、ソースコードを解析するとグラフ構造の形でメソッドの呼出し関係を抽出することができる。
メソッド間における呼出し関係の経路の抽出は、例えば、オープンソースソフトウェア(OSS)に独自の機能を追加し顧客に提供する開発者が利用することが考えられる。開発者は、OSSのバージョンアップ時に変更内容の把握や必要なテスト範囲の特定などのために、抽出したグラフ構造の経路上のメソッドを調査起点にする。特に、OSSのバージョンアップの対応等で、複数のメソッド間に呼出し関係の経路があることは確実であるが、その経路が以前と変わっていないかを精査する際に上記呼出し関係の経路の抽出方法が重要になる。
特開2012−3752号公報
しかしながら、ソースコードの規模が大きくなると、経路抽出対象の2メソッド間の呼出し関係の経路抽出のための探索範囲が指数関数的に増加してしまい、上記の方法では、実用的な時間で経路の抽出が完了しないという課題がある。
そこで、一側面では、本発明は、呼出し関係にある複数のメソッドのうち経路探索の起点となるメソッドを結ぶ経路の抽出時間を短縮することを目的とする。
一つの案では、呼出し関係にある複数のメソッドのうち経路探索の起点となる複数のメソッドを結ぶ経路を前記起点のメソッド毎に並行して経路探索を行う処理をコンピュータが実行する探索方法であって、前記起点となる前記複数のメソッドからnホップ目の経路探索対象となる経路が複数ある場合、メソッドに対応するクラスを記憶する記憶部を参照して、前記経路で接続された2つのメソッドに対応する経路優先度を算出し、前記経路優先度に基づき、前記経路探索対象となる複数の経路のうちから経路探索を行う経路を特定し、特定した前記経路に基づき前記経路探索の起点となる複数のメソッドの経路探索を行う、探索方法が提供される。
一側面によれば、呼出し関係にある複数のメソッドのうち経路探索の起点となるメソッドを結ぶ経路の抽出時間を短縮することができる。
ソースコードと呼出し関係のグラフ構造との一例を示す図。 ソースコードとメソッド保持関係のグラフ構造との一例を示す図。 呼出し関係経路の抽出のための探索範囲が指数関数的に増加する一例を示す図。 一実施形態にかかる探索装置の機能構成の一例を示す図。 一実施形態にかかる呼出し関係グラフデータ格納部の一例を示す図。 一実施形態にかかるメソッド保持関係グラフデータ格納部の一例を示す図。 呼出し関係及びメソッド保持関係のグラフ構造の一例を示す図。 一実施形態にかかる経路抽出処理の一例を示すフローチャート。 一実施形態にかかる辺探索指示処理の一例を示すフローチャート。 一実施形態にかかる経路探索進行の一例を示す図。 一実施形態にかかるグラフ辺探索処理の一例を示すフローチャート。 一実施形態にかかる経路出力処理の一例を示すフローチャート。 一実施形態にかかる中間地点選出処理の一例を示すフローチャート。 一実施形態にかかるクラス類似度の算出処理の一例を示すフローチャート。 一実施形態にかかる経路探索進行の一例を示す図。 一実施形態にかかる優先探索節点選出処理の一例を示すフローチャート。 一実施形態にかかる経路探索の結果の一例を示す図。 一実施形態にかかる経路探索の効果の一例を示す図。 一実施形態にかかる探索装置のハードウェア構成例を示す図。
以下、本発明の実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複した説明を省く。
(はじめに)
はじめに、呼出し関係のグラフ構造のデータ化の一例について、図1を参照して説明する。図1に示すソースコードを解析すると、TranceiverのクラスのTranceiver.transmit()のメソッドが、Transformer.encode()のメソッド、Protocol.makeHeader()のメソッド、Tranceiver.send()のメソッドの3つのメソッドを呼び出している。そのうちTranceiver.send()のメソッドは、Tranceiver.transmit()と同じクラス(Tranceiver)のメソッドである。Transformer.encode()のメソッド及びProtocol.makeHeader()のメソッドは、Tranceiver.transmit()と異なるクラスのメソッドである。
このようにしてソースコードを解析すると、メソッドの呼出し関係を示すグラフ構造を作成できる。ここで、グラフの「節点」はメソッドを表し、グラフの「辺」はメソッドからメソッドへの呼出し関係を表す。これによれば、どのクラスがどのメソッドを保持しているかの関係も、グラフ構造でデータ化できる。
図2は、ソースコードとメソッド保持関係のグラフ構造との一例を示す。図2で示すソースコードは、図1で示したソースコードと同じである。ソースコードを解析すると、どのクラスがどのメソッドを保持するかのメソッド保持関係を示すグラフ構造を作成できる。例えば、図2では、グラフの節点はクラスまたはメソッドを表し、グラフの辺はクラスがメソッドを保持する関係(アノテーションが<has>の場合)、または実装の関係(アノテーションが<impl>の場合)を表す。つまり、図2では、アノテーション<has>はTranceiverのクラスがsendのメソッド及びtransmit()のメソッドを持っていることを示す。<impl>はクラス間の関係を示す。
図3は、メソッドb(節点b)を経路探索の起点となる節点(以下、「起点節点」ともいう。)を中心に外側に出る辺を探索する範囲を示す。各円は、内側から順に1ホップ(1回目の辺探索)、2ホップ(2回目の辺探索)、3ホップ(3回目の辺探索)を示す。1ホップの時刻では節点bからの距離≦1となり、2ホップの時刻では節点bからの距離≦2となり、3ホップの時刻では節点bからの距離≦3となる。
1ホップ目にはd個のメソッドがあり、2ホップ目にはd個のメソッドがあり、3ホップ目にはd個のメソッドがある。よって、距離rまでを探索した時点での探索済み節点の総数はおおよそd個のメソッドがある。
上記の探索は、メソッドbを起点節点に外側に出る辺を探索したが、探索方向は逆方向(つまり、節点から内側に入る辺)もあるのでおおよそ2d個のメソッドがある。ホップ数が多くなればメソッド数が指数関数的に増加する。つまり、ソースコードの規模が大きくなると、離れた経路抽出対象の2つのメソッド(以下では、「起点節点s」ともいう。)間の呼出し関係経路の抽出のための探索範囲が指数関数的に増加してしまい、実用的な時間でメソッド間の呼出し関係の経路を抽出を完了することは困難になる。
これに対して、Dijkstra法では、辺の重みによって優先度付けを行い、経路抽出対象の2つのメソッド間の経路を探索する。しかしながら、呼出し関係のグラフ構造では辺重みがすべて同一のため、Dijkstra法での優先度付けが機能しない。よって、Dijkstra法では、ソースコードの規模が大きくなると実用的な時間で経路の抽出を完了することは困難になる。
また、Aスター法は、ゴール設定までの距離が小さい経路を探索する。呼出し関係のグラフ構造では、Aスター法が求める予測値の算出方法を新たに追加しない限り、予測値を求められない。このため、呼出し関係のグラフ構造では、Aスター法での優先度付けが機能しない。よって、Aスター法によっても、ソースコードの規模が大きくなると実用的な時間で経路の抽出を完了することは困難になる。
さらに、呼出し関係のグラフ構造では、グラフ構造上の一般の経路探索と異なり、経路抽出対象の2つの起点節点のうち、どちらが始点(呼出し元)であるか一般に判別できない。そのため両方の起点を起点に経路探索する必要がある。
そこで、以下に説明する本実施形態では、呼出し関係にある複数のメソッドのうち起点となるメソッドを結ぶ経路の抽出時間を短縮する探索方法を提案する。
[探索装置の機能構成]
まず、本実施形態に係る探索方法を実行する探索装置1の構成の一例について、図4を参照しながら説明する。図4は、一実施形態にかかる探索装置1の機能構成の一例を示す。本実施形態に係る探索装置1は、呼出し関係にある複数の節点のうち経路探索の複数の起点節点を結ぶ経路を節点毎に並行して経路探索を行う。探索装置1は、記録装置とCPU(プロセッサ)を含むコンピュータや他のデジタル処理装置であり得る。ただし、探索装置1の構成は、これに限らず、例えば、CPUを含み、インターネットやLAN(Local Area Network)等を介して記録装置へのアクセスが可能な装置であってもよい。
探索装置1は、探索指示部10、グラフ探索部11、起点集合(Z)格納部12、記憶部13、クラス類似度計算部14、中間地点節点選出部15及び優先探索節点選出部16を有する。探索指示部10は、呼出し関係にある複数の節点のうち経路探索の複数の起点節点を結ぶ経路の探索を指示する。
グラフ探索部11は、グラフ辺探索部111、要訪問節点集合(open)格納部112、訪問済節点集合(close)格納部113及び先行及び後続節点(prev・next)格納部114を有する。
グラフ探索部11は、呼出し関係のグラフ構造において、2つ以上の起点節点の探索経路を探索する。グラフ探索部11は、各起点節点から前方方向(以下、「fwd」ともいう。)への探索及び各起点節点から後方方向(以下、「bwd」ともいう。)への探索を並列して別々に行う。例えば、起点節点が3つ存在する場合、グラフ探索部11は、3つの起点節点からそれぞれfwd及びbwd方向に6つの探索を並行して行う。このとき、グラフ探索部11は、並行して行う複数の探索(前記例では6つの探索)をbulk synchronous parallel方式等により1ホップずつ同期させる。ただし、グラフ探索部11は、非同期で複数の探索を行うこともできる。
要訪問節点集合(open)格納部112は、これから訪問(探索)する必要がある節点を格納する。訪問済節点集合(close)格納部113は、訪問済(探索済)の節点を格納する。先行及び後続節点(prev・next)格納部114は、先行メソッド(先行節点)との関係情報を先行節点辞書prevに格納し、後続メソッド(後続節点)の関係情報を後続節点辞書nextに格納する。グラフ辺探索部は、要訪問節点集合格納部112、訪問済節点集合格納部113及び先行及び後続節点格納部114に格納された各情報に基づき経路を探索する。
起点集合格納部12は、起点節点を格納する。起点集合格納部12の起点集合Zには、経路抽出対象の2つ起点節点と、中間地点節点が選択されている場合には特定の中間地点の節点とが格納される。
記憶部13は、呼出し関係グラフデータ格納部131及びメソッド保持関係グラフデータ格納部132を有する。ソースコードを解析した結果、呼出し関係グラフデータ格納部131及びメソッド保持関係グラフデータ格納部132に以下の各データが保存される。
呼出し関係グラフデータ格納部131は、メソッドの呼出し関係情報を格納する。図5は、一実施形態にかかる呼出し関係グラフデータ格納部131の一例を示す。ソースコード解析結果求められる呼出し関係のグラフ構造のうち、リレーションタイプが「call」の情報を有する。呼出し関係グラフデータ格納部131は、ソース名(呼出し元メソッド)131a、ソースタイプ131b、ディスティネーション名(呼び出し先メソッド)131c、ディスティネーションタイプ131d及びリレーションタイプ131eの各データ項目を有する。
メソッド保持関係グラフデータ格納部132は、クラスとメソッドとの関係及びクラスとクラスとの関係情報を格納する。ソースコード解析結果求められる呼出し関係のグラフ構造を格納するテーブルのうち、リレーションタイプが「has」と「impl」との情報を有する。図6は、一実施形態にかかるメソッド保持関係グラフデータ格納部132の一例を示す。ソースコード解析結果求められる呼出し関係のグラフ構造を格納するテーブルのうち、リレーションタイプが「has」と「impl」との情報を有する。メソッド保持関係グラフデータ格納部132は、ソース名132a、ソースタイプ132b、ディスティネーション名132c、ディスティネーションタイプ132d及びリレーションタイプ132eの各データ項目を有する。
クラス類似度計算部は、複数の起点節点からnホップ目の経路探索対象となる経路が複数ある場合、複数に対応するクラスを記憶する記憶部13を参照して、前記経路で接続された2つの複数に対応するクラス類似度を算出する。
中間地点節点選出部15は、路探索の起点となる中間地点のメソッド(以下、中間地点節点)ともいう。)を特定する。中間地点節点選出部15は、複数の中間地点の節点されている場合、クラス類似度に基づき、複数の中間地点のうちから経路探索を行う中間地点の優先度を特定する。
優先探索節点選出部16は、起点節点からnホップ目の経路探索対象となる経路が複数ある場合、メソッドに対応するクラスを記憶する記憶部を参照して、前記経路で接続された2つの節点(メソッド)に対応する経路優先度を算出する。
グラフ探索部11は、経路優先度に基づき、経路探索対象となる複数の経路のうちから経路探索を行う経路を特定し、特定した前記経路に基づき複数の起点節点の経路探索を行う。
例えば、図7に一例を示すように、ソースコード群に基づき呼出し関係グラフデータ格納部131が保持するメソッドの呼出し関係のグラフ構造が作成される。また、ソースコード群に基づきメソッド保持関係グラフデータ格納部132が保持するメソッド保持関係のグラフ構造が作成される。
本実施形態にかかる探索装置1は、図7のメソッドの呼出し関係のグラフ構造において特定した経路抽出対象の2つの起点節点(図7ではメソッドQ.bとメソッドV.i)とをつなぐ最短の探索経路を抽出する。
[経路抽出処理]
以下では、本実施形態にかかる探索装置1が実行する探索処理のうちの経路抽出処理について図8を参照して説明する。その後、探索装置1が実行する探索処理のうちの辺探索指示処理(図9)、グラフ辺探索処理(図11)、経路出力処理(図12)、中間地点選出処理(図13)、クラス類似度の算出処理(図14)、優先探索節点選出処理(図16)の各処理が説明される。
図8の経路抽出処理が開始されると、探索指示部10は、カウンタ(count)に0を設定する。カウンタには、探索のホップ数がカウントされる。探索指示部10は、経路a→bの探索を指示する。経路a→bにて示される「a」及び「b」は経路抽出対象の起点節点を含む。「a」及び「b」は中間地点節点であってもよい。
次に、探索指示部10は、各経路a→bに対して{“fwd”,”bwd”}の冪集合の要素を返すように設定する(ステップS101)。また、探索指示部10は、検知結果辞書pを、全経路に対して空集合{}を返すように設定する(ステップS101)。検知結果辞書pは、求めている経路があったか否かの結果を保持する辞書であり、求めている経路が見つかっていない初期状態では、検知結果辞書pは空集合{}になっている。
検知結果辞書pは、求めている経路が見つかった時点で、前に進んだ方向(以下、「fwd」ともいう。)に経路が見つかったとき(例えば、起点節点から他の起点節点又は中間地点節点に辿りついたとき)、探索指示部10は、該当経路(例えば経路a→b)に“fwd”の要素を記憶する。検知結果辞書pには、後ろに進んだ方向(以下、「bwd」ともいう。)に経路が見つかったとき、該当経路(例えば経路a→b)に“bwd”の要素を記憶する。
次に、探索指示部10は、起点節点s1を指定して図9の辺探索指示処理の実行をグラフ探索部11に指示する(ステップS102)。また、探索指示部10は、起点節点s2を指定して辺探索指示処理の実行をグラフ探索部11に指示する(ステップS102)。
(辺探索処理)
図9の辺探索指示処理が開始され、グラフ辺探索部111は、指定された起点節点sを起点集合Zに要素として追加する(ステップS201)。起点集合Zには、その時点で起点となっている節点が格納される。この時点では、起点集合Zには起点節点s1,s2が格納されていてもよい。例えば、図10に示す呼出し関係のグラフ構造の経路抽出対象Q.b及びV.iのメソッドが起点節点s1,s2の一例である。後述する中間地点の節点(例えば、図10のV.i、U.fのメソッド)が選定された場合、起点集合Zには起点節点s1,s2とともに、これらの中間地点の節点が格納される。起点集合Zに格納された中間地点は起点節点の一つとして経路探索の起点となる。
次に、グラフ探索部11は、インスタンスプロセスi1を作成し、インスタンスプロセスi1に、入力としてグラフ=G、起点節点=s、方向指示=“fwd”を与えて、後述される図11のグラフ辺探索処理の非同期実行を指示する(ステップS202)。また、グラフ探索部のインスタンスプロセスi1を作成し,インスタンスプロセスi1に、グラフ=G,起点節点=S、方向指示=“bwd”を与えて、グラフ辺探索の非同期実行を指示する(ステップS203)。これにより本処理を終了する。
なお、ステップS202の探索方向がfwd方向の場合の辺探索と、ステップS203の探索方向がbwd方向の場合の辺探索とは、別プロセスのインスタンスプロセスil毎に並行して行われる。
図9の辺探索指示処理が終了すると、図8のステップ103に戻り、探索指示部10は、カウンタを一加算する(ステップS103)。ステップS104〜S110では、インスタンスプロセスi1のそれぞれの経路探索状況が確認される。グラフ探索部11は、図9の辺探索指示処理において各起点節点及び中間地点節点のそれぞれに対応した探索を並列して行い、その探索報告を通知する。探索指示部10は、グラフ探索部11からの探索報告を受け付ける。
具体的には、探索指示部10は、起点集合Zの全節点から“fwd”、“bwd”の両方の完了報告を受けたかを判定する(ステップS104)。探索指示部10は、起点節点から進める方向がない場合にグラフ探索部11から完了報告を受ける。探索指示部10は、完了報告を受けたと判定した場合、ステップS118に進み、「経路なし」の通知を出力し、本処理を終了する(ステップS119)。
他方、探索指示部10は、起点集合Zの全節点のうち完了報告を受けていない節点があると判定した場合、起点集合Zの各要素s(各s∈Z)のすべてから方向指示“fwd”及び“bwd”両方の「指示待ち」が通知されたかを判定する(ステップS105)。グラフ探索部11は、例えば図3の各円で示す1ホップの“fwd”及び“bwd”のそれぞれの探索が終了したら「指示待ち」を通知する。グラフ探索部11は、探索指示部10から探索再開の指示を受けるまで、次ホップの経路探索に進まずに待ちの状態になる。
探索指示部10は、起点集合Zの各要素sの少なくともいずれかから“fwd”又は“bwd”の「指示待ち」が通知されていないと判定した場合、前進経路a→bの検知の報告を受けたかを判定する(ステップS106)。起点節点から例えば図10のグラフの矢印で示す経路(辺)が見つかった場合、探索指示部10は、前進経路a→b(fwd)の報告を受ける。この場合、検知結果辞書pのa→bの経路にfwdの要素を加え(ステップS107)、ステップS108に進む。これにより、検知結果辞書pはaの節点からbの節点までを繋ぐ辺がfwd方向にあったという検知結果を記憶する。一方、起点節点から前進経路の辺が見つからなかった場合、探索指示部10は、後進経路a→bの検知の報告を受けたかを判定する(ステップS108)。
ステップS108において探索指示部10は、後進経路a→b(bwd)の報告を受けた場合、検知結果辞書pのa→bの経路にbwdの要素を加え(ステップS109)、ステップS104に戻る。これにより、検知結果辞書pはaの節点からbの節点までを繋ぐ辺がbwd方向にあったという検知結果を記憶する。
ステップS108において探索指示部10は、後進経路a→b(bwd)の報告を受けなかった場合、直ちにステップS104に戻る。
ステップS104〜S109を繰り返し、探索指示部10は、起点集合Zの各要素sのすべてから“fwd”及び“bwd”両方の「指示待ち」が通知されたと判定した場合、ステップS110に進む。
ステップS110では、グラフ探索部11は、検知結果辞書pに記憶された検知結果を組み合わせることで、起点節点s1、s2間が到達可能かを判定する。また、グラフ探索部11は、到達経路を構成する経路群の集合Tを作成する。
起点節点s1、s2間が到達可能でない判定された場合(ステップS111)、探索指示部10は、カウンタが既定値以上であるかを判定する(ステップS120)。また、S105にてYesと判定されステップS110に続くステップS111にてNoと判定された場合、探索指示部10は、ステップS112にてカウンタが既定値以上であるかを判定する(ステップS120)。カウンタが既定値よりも小さいと判定された場合、ステップS103に戻り、カウンタの値に1を加算し、ステップS104〜S109を繰り返す。
カウンタが既定値以上であると判定された場合、探索指示部10は、ステップS121にて、中間地点節点選出部15に図13に示す中間地点選出処理の実行を指示し、グラフ辺探索部111に起点節点にiを指定して図9に示す辺探索指示処理の非同期実行を指示する。図13に示す中間地点選出処理については後述する。例えば、図10の呼出し関係のグラフ構造には、図13の中間地点選出処理にてV.gのメソッドが中間地点節点に選出された一例が示されている。
図8に戻り、ステップS122にてカウンタに0を設定し、ステップS103にてカウンタに1を加算し、ステップS104〜S109を繰り返し、ステップS110に進む。ここでは、起点集合Zには、中間地点が含まれるとする。図10の例では、メソッドQ.b、メソッドV.i、メソッドV.gのすべてが起点節点となる。メソッドQ.b、メソッドV.i、メソッドV.gの起点節点に対してステップS104〜S109の処理が行われる。その結果、図10の例では、検知結果辞書pに、P(Q.b→V.g)={“fwd”}が保存される。しかしながら、この時点では、起点節点メソッドQ.b、メソッドV.i間が到達可能でない。よって、ステップS111にてNoと判定され、ステップS120にてNoと判定されて、再びステップS104〜S109を繰り返し、ステップS110に進む。この時点で、図10の例では、検知結果辞書pに、P(Q.b→V.g)={“fwd”}に加えて、P(V.g→V.i)={“bwd”}が追加して保存されている。よって、集合Tには、{Q.b→V.g,V.g→V.i}が記憶される。この時点では、図10に示すように、起点節点メソッドQ.b、メソッドV.i間が到達可能である。よって、探索指示部10は、ステップS111にてYesと判定し、集合Tが空集合かを判定する(ステップS112)。
ステップS112において集合Tが空集合でないと判定された場合、探索指示部10は、集合Tの1要素tを取り出し、集合Tからtを削除し、tをa→bの辺と定義する(ステップS113)。次に、探索指示部10は、検知結果辞書pのa→bの経路にfwdの要素があるかを判定する(ステップS114)。
検知結果辞書pのa→bの経路にfwdの要素があると判定された場合、探索指示部10は、グラフ探索部11が作成する起点節点aを担当するインスタンスプロセスに到着節点b、探索方向“fwd”を入力して図12の経路出力処理の実行を指示する(ステップS115)。
検知結果辞書pのa→bの経路にfwdの要素がないと判定された場合、探索指示部10は、グラフ探索部11が作成する起点節点aを担当するインスタンスプロセスに到着節点b、探索方向“bwd”を入力して図12の経路出力処理の実行を指示する(ステップS116)。
(経路出力処理)
ステップS115、S116にて実行される経路出力処理について図12を参照して説明する。本出力処理の開始に当たって経路出力したい到着節点(ゴールとする節点)をgとし、方向“fwd”、“bwd”の一要素に探索方向dがあるとする。ここで、ゴールの節点gからの最良の戻り道は先行及び後続節点(prev・next)格納部114に格納されている。
本処理が開始されると、グラフ辺探索部111は、ゴールの節点gをtに設定し、空のリストを辺のリストPに設定する(ステップS401)。リストPは、起点節点から到着節点に至るまでの辺のリストである。
次に、グラフ辺探索部111は、この時点で探索のターゲットとしているtのprev(t)がnullでないかを判定する(ステップS402)。
グラフ辺探索部111は、prev(t)がnullでないと判定した場合、prev(t)→tの辺をリストPに追加し(ステップS403)、prev(t)をTに設定する(ステップS404)。例えば、図10の呼出し関係のグラフ構造の場合、ゴールgをメソッドV.gとしたとき、一つ前の節点はメソッドS.eである。この場合、リストPにはメソッドS.e→メソッドV.gの辺が要素として加えられ、tにメソッドS.eが設定される。
ステップS402に戻り、ステップS402〜S404を繰り返すと、図10の例では、メソッドN.b、メソッドQ.bと辿ることができる。tがN.bのときリストPにはS.e→V.g,N.b→S.eの辺が要素として加えられた状態となる。更にステップS402〜S404が繰り返され、tがQ.bのときリストPにはS.e→V.g,N.b→S.e,Q.b→N.bの辺が要素として加えられた状態となる。
次に実行されるステップS402において、グラフ辺探索部111は、prev(t)がnullであると判定し、リストPを探索指示部10に報告し(ステップS405)、本処理を終了する。
なお、上記説明では、方向dが“fwd”の場合においてステップS402にてprev(t)がnullでないかが判定され、探索結果の経路を後方に向かって辿った。方向dが“bwd”の場合においても同様の処理を行うが、ステップS402ではnext(t)がnullか否かが判定され、先行及び後続節点(prev・next)格納部114に基づき、探索結果の経路を前方に向かって辿る。
図8に戻り、ステップS112〜S116の処理が繰り返され、集合Tから要素tが一つずつ削除され、最終的に集合Tからすべての要素が取り出されると、ステップS112において探索指示部10は、集合Tが空集合であると判定し、ステップS117に進む。探索指示部10は、出力された経路群を接続してa→b(起点節点s1→s2、図10では、メソッドQ.b→V.i)の経路として出力し(ステップS117)、本処理を終了する。
なお、ステップS104において、探索指示部10は、起点集合Zの全節点から“fwd”、“bwd”の両方の完了報告を受けた場合、「経路なし」の通知を出力し(ステップS118)、本処理を終了する。
[中間地点選出処理/クラス類似度の算出処理]
(中間地点選出処理)
次に、中間地点選出処理について図13を参照して説明する。図13の中間地点選出処理では、中間地点節点選出部15が、呼出し関係のグラフ構造に含まれる起点節点間の中間地点の節点となるメソッドを選出する。
本処理は、図8のステップS121にて実行される。中間地点節点選出部15は、メソッド保持関係グラフデータ格納部132を参照して、リレーションタイプ132eが“impl”、かつディスティネーションタイプ132dが“interface”、かつソースタイプ132bが“class”のソース名132aを集合Cに格納する(ステップS501)。これにより、集合Cには、implという関係でインタフェースとつながっているメソッドが格納される。例えば、図6の例では、集合CにはクラスU,V,Wが格納される。
次に、中間地点節点選出部15は、K−Means法を用い集合Cの要素をクラスタリングする(ステップS502)。このとき、中間地点節点選出部15は、距離の近い要素を同一グループに分ける。要素間の距離は図14に示すクラス類似度の算出処理において算出可能である。よって、中間地点節点選出部15は、クラス類似度計算部14にクラス類似度の算出処理の実行を指示し、その結果得られたクラス類似度に基づき、集合Cの要素をクラスタリングする(ステップS502)。
次に、中間地点節点選出部15は、より多くの要素を持つクラスタLを選ぶ。中間地点節点選出部15は、選んだクラスタLからメソッド数の多いクラスDを選び、そのクラスDのメソッドのうちクラスタL内の他のクラスに最も少なく現れるメソッドMを選び(ステップS503)、本処理を終了する。ただし、ステップS503では、中間地点節点選出部15は、選んだクラスタLからメソッド数の少ないクラスDを選んでもよい。また、中間地点節点選出部15は、そのクラスDのメソッドのうちクラスタL内の他のクラスに最も多く現れるメソッドMを選んでもよい。
これによれば、中間地点節点は、ディスティネーションタイプがインタフェースのクラスに応じたメソッドであって、起点節点からなるべく遠いメソッドが決定される。
(クラス類似度の算出処理)
ステップS502にて実行されるクラス類似度の算出処理について図14を参照して説明する。まず、クラス類似度計算部14は、メソッド保持関係グラフデータ格納部132を参照して、リレーションタイプ132eが“has”、かつソースタイプ132bが“class”、かつソース名132aが“C”である行のディスティネーション名132cを集合Mに格納する(ステップS701)。本処理の入力値として集合CにクラスVが設定されている場合、図6に示すメソッド保持関係グラフデータ格納部132を参照すると、集合Mにはメソッドg、h、i、j、k、lが格納される。
クラス類似度計算部14は、メソッド保持関係グラフデータ格納部132からリレーションタイプ132eが“has”、かつソースタイプ132bが“class”、かつソース名132aが“D”のディスティネーション名132cを集合Nに格納する(ステップS702)。
図6では、クラスUのメソッド数は1、クラスVのメソッド数は6、クラスWのメソッド数は5である。よって、本処理の入力値として集合DにクラスWが設定されている場合、図6に示すメソッド保持関係グラフデータ格納部132を参照すると、集合Nにはメソッドh、i、j、k、lが格納される。
次に、クラス類似度計算部14は、集合Mのみに現れる名前の個数と集合Nのみに現れる名前の個数とを出力する。集合M={g、h、i、j、k、l}、集合N={h、i、j、k、l}の場合、集合Mのみに現れる名前は「g」であり、その個数は1である。集合Nのみに現れる名前の個数は0である。この場合、クラス類似度計算部14は、C(クラスV)とD(クラスW)とのクラス類似度に「1」を出力する。クラス類似度が示す数値は、クラスが持つメソッドがどれだけ類似しているかを示す。換言すれば、クラス類似度が示す数値は、クラス同士の距離を示す。
なお、クラス類似度の算出処理における名前の同一性の判定方法は、完全一致したら同一と判定する、全て小文字化して完全一致したら同一と判定する、文字列同士の編集距離が規定値以内なら同一と判定する等の方法を用いることができる。
図14のステップ703にて、クラス類似度(U,V)が7、クラス類似度(U,W)が6、クラス類似度(V,W)が1と算出されたとする。このとき、図13のステップ502で2つのクラスタに分類する場合、各クラス類似度に基づき、集合C={U,V,W}の要素は、{U}、{V,W}に分類される。図13のステップ503では、より多くの要素を持つクラスタL={V,W}が選ばれる。そして、クラスDには、クラスタLのクラスV及びクラスWからメソッド数が多いクラスVが選ばれる。そして、メソッドMには、クラスDに選ばれたクラスVのメソッドのうちクラスタ内の他のクラスWに最も少なく現れるメソッドV.gが選ばれる。
これによれば、クラスタ毎に一つ中間地点のメソッドを選ぶことで、クラス類似度の低いメソッドが中間地点の節点に選ばれることになる。これにより、図10に示すように、クラス類似度が低いメソッドV.gを選ぶことで既に起点節点となっているメソッドから経路探索上離れたメソッドを中間地点節点に選定することができる。これにより、起点節点との距離が近すぎない位置に中間地点節点を設定することができ、経路探索の効率を向上させることができる。
なお、中間地点節点は、Java(登録商標)のソースコードの場合、インタフェースを実装したクラスのメソッドから選出され、C++のソースコードの場合、純粋仮想クラスを実装したクラスとimplで繋がっているメソッドから選ばれる。
図8の経路抽出処理のステップS121において、中間地点設定が選出された後、図10に示すように、起点節点のメソッドQ.bと起点節点のメソッドV.iと中間地点節点V.gを起点として経路探索が行われる。
本実施形態では、各起点が1ホップ目の探索を終了してから,各起点が次の2ホップ目の探索を開始するように、各起点同士の経路探索を同期させる。これにより、中間地点を選出するタイミングを適正にとることができる。ただし、各起点の経路探索を同期させずに進行させてもよい。
[グラフ辺探索処理/優先探索節点選出処理]
(グラフ辺探索処理)
次に、グラフ辺探索処理について図11を参照して説明する。本処理は、図9の辺探索指示処理のステップS202、S203にて実行される。なお、“fwd”又は“bwd”のいずれかの方向が方向指示変数dirに予め保存されている。また、以下では呼出し関係のグラフ構造の節点の集合を節点集合Vとする。
グラフ辺探索部111は、呼出し関係のグラフ構造の各節点に対して、起点節点s(例えばs1,s2、中間地点節点等)からの距離を返す辞書dを、全節点に対して∞を返すよう設定する(ステップS301)。起点節点sからの距離は、起点節点と探索する節点との間の辺の数である。辞書dは、起点節点sから中間地点の節点又は他の起点節点sに辿りつくことができるのかできないのか、辿りつくことができるとしたら距離(辺の数)はいくつかの情報を示す。辞書dは、辿りつくことができない又は不明な場合、∞を返すよう設定される。
次に、グラフ辺探索部111は、節点集合Vの各節点vに対してvが起点節点(中間地点節点を含む)に対する経路上の節点なら入力辺u→vの端点uを返し、そうでなければnullを返す。グラフ辺探索部111は、先行節点辞書prevを、全節点に対してnullを返すように設定する。先行節点辞書prevは、現在の探索位置の一つ前の節点の情報を保持する辞書である。この時点では、先行節点辞書prevには、現在の探索位置の一つ前の節点が見つかっていないことを示すnullが設定される。
なお、上記は、方向指示変数dirが“fwd”の場合の説明である。方向指示変数dirが“bwd”の場合、ステップS302において、グラフ辺探索部111は、出力辺v→uの端点vを返し、そうでなければnullを返す。グラフ辺探索部111は、後続節点辞書nextを、全節点に対してnullを返すように設定する。
次に、グラフ辺探索部111は、要訪問節点集合openに起点節点s(例えば、図15の経路抽出対象のメソッドQ.b及びメソッドV.i、中間地点節点等)を設定する(ステップS303)。以下では、起点節点のうち、経路抽出対象の2点のメソッドを起点節点s1、S2ともいう。
また、グラフ辺探索部111は、距離を返す辞書d(s)に0(つまり、自分自身からの距離が0である)を設定する(ステップS303)。例えば、起点節点がS1,S2のみの場合(つまり、起点節点に中間地点を含まない場合)、起点節点s1の“fwd”及び“bwd”、起点節点s2の“fwd”及び“bwd”の4つの経路探索が並列的に処理されていることになる。例えば、n個の中間地点節点が選択されている場合、2(2+n)の経路探索が並列的に処理されていることになる。
次に、グラフ辺探索部111は、訪問済節点集合closeを空集合にする(ステップS304)。次に、グラフ辺探索部111は、次の訪問先の節点集合newopenを空集合にする(ステップS305)。次の訪問先の節点集合newopenは次の訪問先の節点が記憶される。また、グラフ辺探索部111は、起点集合格納部12に格納された起点節点をZLに転記する(ステップS305)。一例として、起点節点sがメソッドQ.bであり、方向指示変数dirが“fwd”である場合、ステップS305において要訪問節点集合openに{Q.b}が設定され、距離を返す辞書d(s)にd(Q.b)=0が追加される。また、訪問済節点集合close及び次の訪問先の節点集合newopenは空集合の状態となる。
次に、グラフ辺探索部111は、要訪問節点集合openが空集合でないかを判定する(ステップS306)。ここでは、要訪問節点集合openには起点節点s1、S2が格納されている。この時点では、グラフ辺探索部111は、要訪問節点集合openが空集合でない(Yes)と判定し、要訪問節点集合openに含まれる要素cのうち距離d(c)が最小であるcを1つ選び、その節点(メソッド)cを訪問するtとする(ステップS307)。また、グラフ辺探索部111は、除外節点集合X(優先度が高い節点S309にて選出済みの節点の集合)を空集合にする。除外節点集合Xには、優先度が高い節点を選出する際の除外節点が保持される。
次に、グラフ辺探索部111は、探索のターゲットt(現在訪問しているメソッドm)を要訪問節点集合openから除き、訪問済節点集合closeに加える(ステップS308)。この時点で、要訪問節点集合openの要素はない(以下、集合名={}とも表記する)。また、訪問済節点集合close={Q.b}、次の訪問先の節点集合newopen={}、除外節点集合X={}、t=Q.b、prev(N.b)=Q.bとなる。
次に、探索のターゲットt=メソッドm、方向指示変数dir∈{“fwd”、“bwd”}、除外節点集合X={}を入力して、優先探索節点選出処理の実行を指示する(ステップS309)。
(優先探索節点選出処理)
優先探索節点選出処理について、図16を参照しながら説明する。優先探索節点選出部16は、図5に一例を示す呼出し関係グラフデータ格納部131を参照する。優先探索節点選出部16は、呼出し関係グラフデータ格納部131からリレーションタイプ131e=“call”、かつソースタイプ131b=“method”、かつディスティネーションタイプ=“method”、かつソース名131a=mである行のディスティネーション名131cを集合Nに格納する(ステップS601)。
なお、上記は方向指示変数dirが“fwd”の場合について示した。方向指示変数dirが“bwd”の場合、呼出し関係グラフデータ格納部131からリレーションタイプ131e=“call”、かつソースタイプ131b=“method”、かつディスティネーションタイプ=“method”、かつディスティネーション名131c=mである行のソース名131aを集合Nに格納する。
次に、優先探索節点選出部16は、除外節点集合Xの要素を集合Nから除く(ステップS602)。次に、優先探索節点選出部16は、図6に一例を示すメソッド保持関係グラフデータ格納部132を参照して、リレーションタイプ132e=“has”、かつディスティネーション名132c=mである行のソース名132aをcに格納する(ステップS603)。
次に、優先探索節点選出部16は、集合N内の各要素nに対し,メソッド保持関係グラフデータ格納部132からリレーションタイプ132e=“has”、かつディスティネーション名132c=nである行のソース名132aをdに代入する(ステップS604)。
次に、クラス類似度計算部14は、図14のクラス類似度の算出処理を実行し、dとcの類似度を算出する。優先探索節点選出部16は、この結果、最も類似度が高い(つまり、最も類似度の数値の低い)クラスd’のメソッドm’を探索対象節点に選出し(ステップS604)、本処理を終了する。
これにより、メソッドに対応するクラスを記憶する記憶部13を参照して、前記経路で接続された2つのメソッドに対応する経路優先度が算出される。
例えば、本処理の入力値として、メソッドmがV.i、方向指示変数dirが“bwd”の場合、ステップS601において図5に一例を示す呼出し関係グラフデータ格納部131を参照して、集合N={X.i、Wd.i}となる。次のステップS602においても集合N={X.i、Wd.i}の状態は変わらない。次のステップS603においてc=V(クラス)となる。次のステップS604において集合N内の各要素n(=X.i,Wd.i)に対してd=X,Wdとなる。そして、c(=V)とd(=X,Wd)との類似度は、類似度(X,V)=5、類似度(Wd,V)=1となる。これにより、最も類似度が高い(つまり、最も類似度の数値の低い)クラスd’は「Wd」となり、そのメソッドm’は「Wd.i」となる。これにより、例えば、図15では、メソッドWd.iが、メソッドX.iよりも優先して経路探索されることになる。なお、優先探索節点選出処理において算出された類似度は、経路優先度の一例である。
図11に戻り、グラフ辺探索部111は、ステップS310において探索対象節点が選出されたかを判定する。グラフ辺探索部111は、探索対象節点が選出されなかったと判定した場合、ステップS306に戻り、ステップS306〜S310を繰り返す。グラフ辺探索部111は、探索対象節点が選出されたと判定した場合、ステップS311に進み、優先探索節点選出部16が選出した優先度が最も高い節点nをXに要素として追加する(ステップS311)。
次に、グラフ辺探索部111は、節点nが訪問済節点集合closeの要素に含まれない、かつd(n)>d(t)+1を満たすかを判定する(ステップS312)。グラフ辺探索部111は、節点nが訪問済節点集合closeの要素に含まれると判定した場合、ステップS314に進む。また、グラフ辺探索部111は、d(n)≦d(t)+1であると判定した場合、つまり、節点nの距離d(n)が、起点から最も短い距離であると判定した場合、ステップS314に進む。これに対して、グラフ辺探索部111は、節点nが訪問済節点でなく、かつ距離d(n)が起点から最も短い距離でないと判定した場合、ステップS313にてd(t)+1を距離d(n)に代入することで距離d(n)を書き替える。これにより、より短い経路で起点節点間を辿りつけるようにする。
また、グラフ辺探索部111は、先行及び後続節点(prev・next)格納部114の先行節点prev(n)にtの値を設定することで、節点nの一つ前が節点tであると書き替える。更に、グラフ辺探索部111は、次の訪問先の節点集合newopenに次の訪問先の節点nを追加する。この時点では、例えば図15のグラフの例ではprev(N.b)=Q.bが追加され、次の訪問先の節点集合newopenにはN.bが設定される。
ステップS314にて、グラフ辺探索部111は、nがZL(ZL:起点又は中間地点の節点)であるかを判定する。S305において起点集合格納部Zの内容をZLに転記している。よって、グラフ探索部11は、nがZLであると判定した場合、探索指示部10にs→nの前進経路を検知したことを報告し(ステップS315)、ステップS309に戻る。これにより、ある起点又は中間地点から他の起点又は中間地点に辿りついたということが探索指示部10に報告される。
他方、グラフ辺探索部111は、nがZLでないと判定した場合、直ちにステップS309に戻る。なお、ステップS315において、方向指示変数dirが“bwd”の場合、探索指示部10にn→sの前進経路を検知したことが報告される。
S309に戻ると、除外節点集合Xに要素が蓄積されて、S310にて節点が選出できないと判定されると、グラフ辺探索部111は、要訪問先集合openに要素があるかを判定する(ステップS306)。要訪問先集合openに要素があると判定された場合、グラフ辺探索部111は、ステップS307以降の処理を行う。要訪問先集合openに要素がないと判定された場合、グラフ辺探索部111は、ステップS316へ進み、探索指示部10に「実行再開の指示待ち」の通知を行う。グラフ辺探索部111は、探索指示部10から実行再開の指示を待つ(ステップS317)。
グラフ辺探索部111は、探索指示部10から実行再開の指示を受けたかを判定し(ステップS318)、実行再開の指示を受けるまで待つ。グラフ辺探索部111は、実行再開の指示を受けたと判定した場合、次の訪問先の節点集合newopenに要素がないかを判定する(ステップS319)。次の訪問先の節点集合newopenに要素がないと判定された場合、グラフ辺探索部111は、次の訪問先の節点集合newopenに次の訪問先の節点nがないため、ステップS321へ進み、探索指示部10に完了を報告する。次の訪問先の節点集合newopenに要素があると判定された場合、グラフ辺探索部111は、次の訪問先の節点集合newopenの値をopenに設定し(ステップS320)、ステップS305に戻る。
これにより、グラフ辺探索部111は、すべて起点節点の1ホップ目が終了し、次の2ホップ目の探索を開始することになる。要訪問先集合openには、2ホップ目の探索では、前回の経路探索で見つかった節点が入っている。図15の例では、1ホップ目ではopen={Q.b}、2ホップ目ではopen={N.b、Y.m}となる。
この状態で、グラフ辺探索部111は、ステップS305〜S316の処理を実行する。この時点では、図15のグラフの例ではprev(S.e)=N.bが追加され、次の訪問先の節点集合newopenにはS.eが追加される。
グラフ辺探索部111は、ステップS317にて探索指示部10から「実行再開」の指示を待ち、ステップS318にて指示を受けたと判定した場合、ステップS319にて次の訪問先の節点集合newopenが空でないかを判定する。この時点では、次の訪問先の節点集合newopenにS.eの要素がある。このため、グラフ辺探索部111は、newopenの値を訪問節点集合openに代入し、ステップS305〜S316の処理を繰り返す。この繰り返し処理により、図15のグラフの例ではprev(U.f)=S.eが追加され、次の訪問先の節点集合newopenにはU.fが追加される。次の繰り返しにおいてprev(V.g)=S.eが追加され、次の訪問先の節点集合newopenにはU.f、V.gが追加された状態となる。
ここで、図15のグラフの例では、次の訪問先の節点集合newopenのメソッドV.gは、中間地点節点であるため、前進経路Q.b→V.gの前進経路が見つかった状態となる。よって、グラフ辺探索部111は、ステップS315において探索指示部10にこの前進経路を検知したことを報告する。この結果、先行及び後続節点(prev・next)格納部114に、辺探索で得られた前進経路及び更新経路が蓄積される。これにより、例えば、図17の太線にて示す経路抽出対象である起点節点のメソッドQ.b及びメソッドV.i間の経路が抽出される。
以上に説明したように、一実施形態に係る探索方法によれば、以下の1〜4を行う。
1.経路抽出対象の起点節点となる2つのメソッドのほかに中間地点節点のメソッドを複数個(P個)用意し、P+2個のメソッド(に対応するグラフの節点)を起点に経路探索を並列に行う。有向辺を順方向(呼出し先に向かう方向fwd)に経路探索するだけでなく、逆方向(呼出し元に向かう方向bwd)にも経路探索する。起点以外の節点にたどり着くまで探索し、最後に経路探索の結果を結合する。
2.1において小さな数のP個の中間地点節点に絞って探索を始め、数ステップ実行後も対象2メソッド(節点)が経路でつながらなければ徐々に中間地点節点を増やして経路探索を行う。
3.2において探索を始める中間地点節点の優先順位付けに、節点に対応する(メソッドを保持する)クラスの(メソッド名リストに関する)類似度が低いことを用いる。
4.1において経路探索を進める辺が複数ある場合に先に調査する辺を決める優先順位付けとして、経路優先度を算出する。経路優先度の算出は、節点に対応するクラス類似度が高いことを用いる。経路優先度に基づき先に調査する辺を決めることで、呼出し関係にある複数のメソッドのうち経路探索の起点となる離れた2メソッド間の呼出し関係の経路抽出に要する時間を削減できる。
更に、(a)1.において中間地点メソッドは、経路上のメソッドである可能性の高いメソッドを次のように選ぶ。ソースコードを解析したメソッド保持関係を有する格納部に基づき、プログラム言語仕様で関心の分離・疎結合化に使われているクラスを選ぶ。例えばJavaならインタフェースを実装したクラス、C++なら純粋仮想クラスを実装したクラスを選ぶ。別法として、dependency injectionで指定されたクラスを選んでもよい。
(b)1.において並列に行う経路探索は、例えば1ホップ毎に各起点地点からの経路探索を同期させるbulk synchronous parallel方式で行うことが好ましい。
(c)2.において絞り込みは次のように行う。1.で選んだ中間地点メソッドを保持するクラスを、類似度でクラスタリングする。その際、K−Means法などを用いることができる。できたクラスタから1つクラスを選び、そのクラスの保持するメソッド群を中間地点節点に選ぶ。
(d)3.において優先順位付けは次のように行う。2.で絞り込んだ各クラスと経路抽出対象2メソッドがそれぞれ属するクラス類似度を比較し、いずれの経路抽出対象とも似ていない(つまり類似度が低い)クラスを順次選択する。そのクラスの保持するメソッド群を中間地点節点に選ぶ。
(e)4.において調査する辺の優先順位付けは次のように行う。現在訪問している節点をv、経路探索を進める辺をv→w、vとwをそれぞれ保持するクラスをcとdとする。cとdの類似度が高い順に、辺v→wを選ぶ。
3.、4.及び上記(c)、(d)、(e)でのクラス類似度は次のように計算する。クラス毎にクラスが持つメソッドの名前(文字列)のソート済みリストを作る。このリストの編集距離(Levenshtein 距離)をクラス類似度とする(小さい値ほど類似度が高いとする)。
以上、本実施形態にかかる探索装置1によれば、呼出し関係にある複数のメソッドのうち起点となるメソッドを結ぶ経路の抽出時間を短縮することができる。
図18に示すように、経路探索対象メソッド間の距離をrとし、経路上に中間地点メソッドがP個あるとする。各起点メソッドから隣の起点メソッドまでの距離fはr/(1+1P)となる。
各起点メソッドから隣の起点メソッドに至るまでに訪れる呼出し先(または元)側のメソッドの総数n(P)は最良で式(1)で算出される。
Figure 0006512050
全体で訪れるメソッドの総数N(P)は最良で式(2)で算出される。
Figure 0006512050
例えば以下の公知の手法であるDijkstra法[1]、およびA*法[2]で訪れるメソッドの総数NOMは、式(3)で算出される。
Dijkstra法[1] Dijkstra, E.W.(1959).A note on two problems in connexion with graphs. In Numerische Mathematik, 1 (1959), S. 269 〜 271.
A*法[2] Peter E. Hart; Nils J. Nilsson; Bertram Raphael(July 1968). "A Formal Basis for the Heuristic Determination of Minimal Cost Paths". IEEE Transactions on Systems Science and Cybernetics 4 (2): 100‐107. doi:10.1109/TSSC.1968.300136. ISSN0536-1567.
Figure 0006512050
よって、訪れるメソッドの総数比N(P)/NOMは、式(4)を用いて近似値1/dで算出される。つまり、本実施形態にかかる探索方法によれば、呼出し関係にある複数のメソッドのうち経路探索の起点となるメソッドを結ぶ経路の抽出時間を短縮できる。
Figure 0006512050
(ハードウェア構成例)
最後に、本実施形態に係る探索装置1のハードウェア構成について、図19を参照して説明する。図19は、本実施形態に係る探索装置1のハードウェア構成の一例を示す。探索装置1は、入力装置101、表示装置102、外部I/F103、RAM(Random Access Memory)104、ROM(Read Only
Memory)105、CPU(Central Processing Unit)106、通信I/F107、及びHDD(Hard Disk Drive)108などを備え、それぞれがバスBで相互に接続されている。
入力装置101は、キーボードやマウスなどを含み、探索装置1に各操作信号を入力するために用いられる。表示装置102は、ディスプレイなどを含み、各種の処理結果を表示する。通信I/F107は、探索装置1をネットワークに接続するインタフェースである。これにより、探索装置1は、通信I/F107を介して、他の機器とデータ通信を行うことができる。
HDD108は、プログラムやデータを格納している不揮発性の記録装置である。格納されるプログラムやデータには、探索装置1の全体を制御する基本ソフトウェア及びアプリケーションソフトウェアがある。例えば、HDD108には、各種のデータベースやプログラム等が格納されてもよい。
外部I/F103は、外部装置とのインタフェースである。外部装置には、記憶媒体103aなどがある。これにより、探索装置1は、外部I/F103を介して記憶媒体103aの読み取り及び/又は書き込みを行うことができる。記憶媒体103aには、CD(Compact Disk)、及びDVD(Digital Versatile Disk)、ならびに、SDメモリカード(SD Memory card)やUSBメモリ(Universal Serial Bus
memory)等がある。
ROM105は、電源を切っても内部データを保持することができる不揮発性の半導体メモリ(記録装置)である。ROM105には、ネットワーク設定等のプログラム及びデータが格納されている。RAM104は、プログラムやデータを一時保持する揮発性の半導体メモリ(記録装置)である。CPU106は、上記記録装置(例えば「HDD108」や「ROM105」など)から、プログラムやデータをRAM104上に読み出し、処理を実行することで、装置全体の制御や搭載機能を実現する演算装置である。
かかる構成により、本実施形態に係る探索装置1では、CPU106が、ROM105やHDD108内に格納されたデータ及びプログラムを用いてグラフ辺探索処理、経路出力処理、中間地点選出処理、クラス類似度の算出処理及優先探索節点選出処理を実行する。なお、メソッド保持関係グラフデータ格納部のに記憶された情報は、RAM104、HDD108、又はネットワークを介して探索装置1に接続されるクラウド上のサーバ等に格納され得る。
以上、探索方法、探索プログラム及び探索装置を上記実施形態により説明したが、本発明にかかる探索方法、探索プログラム及び探索装置は上記実施形態に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能である。また、上記実施形態及び変形例が複数存在する場合、矛盾しない範囲で組み合わせることができる。
以上の説明に関し、更に以下の項を開示する。
(付記1)
呼出し関係にある複数のメソッドのうち経路探索の起点となる複数のメソッドを結ぶ経路を前記起点となるメソッド毎に並行して経路探索を行う処理をコンピュータが実行する探索方法であって、
前記起点となる前記複数のメソッドからnホップ目の経路探索対象となる経路が複数ある場合、メソッドに対応するクラスを記憶する記憶部を参照して、前記経路で接続された2つのメソッドに対応する経路優先度を算出し、
前記経路優先度に基づき、前記経路探索対象となる複数の経路のうちから経路探索を行う経路を特定し、
特定した前記経路に基づき前記経路探索の起点となる複数のメソッドの経路探索を行う、
探索方法。
(付記2)
経路探索の起点となる中間地点のメソッドを特定し、前記複数のメソッド及び前記中間地点のメソッドを結ぶ経路を、前記中間地点のメソッドを含む前記経路探索の起点となる複数のメソッドのそれぞれから並行して経路探索を行う、
付記1に記載の探索方法。
(付記3)
前記複数のメソッド及び前記中間地点のメソッドに対応するクラス類似度に基づき、経路探索の起点となる前記中間地点のメソッドを増やす、
付記2に記載の探索方法。
(付記4)
複数の前記中間地点のメソッドが特定される場合、前記クラス類似度に基づき、前記複数の中間地点のメソッドの優先度を特定し、
特定した前記複数の中間地点のメソッドの優先度に従い、特定した前記複数の中間地点のメソッドのうちから前記経路探索の起点となる中間地点のメソッドを特定し、
特定した前記中間地点のメソッドを含む前記経路探索の起点となる複数のメソッドのそれぞれから並行して経路探索を行う、
付記3に記載の探索方法。
(付記5)
呼出し関係にある複数のメソッドのうち経路探索の起点となる複数のメソッドを結ぶ経路を前記起点のメソッド毎に並行して経路探索を行う処理をコンピュータに実行させる探索プログラムであって、
前記起点となる前記複数のメソッドからnホップ目の経路探索対象となる経路が複数ある場合、メソッドに対応するクラスを記憶する記憶部を参照して、前記経路で接続された2つのメソッドに対応する経路優先度を算出し、
前記経路優先度に基づき、前記経路探索対象となる複数の経路のうちから経路探索を行う経路を特定し、
特定した前記経路に基づき前記経路探索の起点となる複数のメソッドの経路探索を行う、
探索プログラム。
(付記6)
経路探索の起点となる中間地点のメソッドを特定し、前記複数のメソッド及び前記中間地点のメソッドを結ぶ経路を、前記中間地点のメソッドを含む前記経路探索の起点となる複数のメソッドのそれぞれから並行して経路探索を行う、
付記5に記載の探索プログラム。
(付記7)
前記複数のメソッド及び前記中間地点のメソッドに対応するクラス類似度に基づき、経路探索の起点となる前記中間地点のメソッドを増やす、
付記6に記載の探索プログラム。
(付記8)
複数の前記中間地点のメソッドが特定される場合、前記クラス類似度に基づき、前記複数の中間地点のメソッドの優先度を特定し、
特定した前記複数の中間地点のメソッドの優先度に従い、特定した前記複数の中間地点のメソッドのうちから前記経路探索の起点となる中間地点のメソッドを特定し、
特定した前記中間地点のメソッドを含む前記経路探索の起点となる複数のメソッドのそれぞれから並行して経路探索を行う、
付記7に記載の探索プログラム。
(付記9)
呼出し関係にある複数のメソッドのうち経路探索の起点となる複数のメソッドを結ぶ経路を前記起点のメソッド毎に並行して経路探索を行う探索装置であって、
前記起点となる前記複数のメソッドからnホップ目の経路探索対象となる経路が複数ある場合、メソッドに対応するクラスを記憶する記憶部を参照して、前記経路で接続された2つのメソッドに対応する経路優先度を算出する優先探索節点選出部と、
前記経路優先度に基づき、前記経路探索対象となる複数の経路のうちから経路探索を行う経路を特定し、特定した前記経路に基づき前記経路探索の起点となる複数のメソッドの経路探索を行う探索部と、
を有する探索装置。
(付記10)
経路探索の起点となる中間地点のメソッドを特定する中間地点節点選出部を有し、
前記探索部は、前記複数のメソッド及び前記中間地点のメソッドを結ぶ経路を、前記中間地点のメソッドを含む前記経路探索の起点となる複数のメソッドのそれぞれから並行して経路探索を行う、
付記9に記載の探索装置。
(付記11)
前記中間地点節点選出部は、前記複数のメソッド及び前記中間地点のメソッドに対応するクラス類似度に基づき、経路探索の起点となる前記中間地点のメソッドを増やす、
付記10に記載の探索装置。
(付記12)
前記中間地点節点選出部は、複数の前記中間地点のメソッドが特定される場合、前記クラス類似度に基づき、前記複数の中間地点のメソッドの優先度を特定し、特定した前記複数の中間地点のメソッドの優先度に従い、特定した前記複数の中間地点のメソッドのうちから前記経路探索の起点となる中間地点のメソッドを特定し、
前記探索部は、特定した前記中間地点のメソッドを含む前記経路探索の起点となる複数のメソッドのそれぞれから並行して経路探索を行う、
付記11に記載の探索装置。
1:探索装置
10:探索指示部
11:グラフ探索部
12:起点集合格納部
13:記憶部
14:クラス類似度計算部
15:中間地点節点選出部
16:優先探索節点選出部
111:グラフ辺探索部
112:要訪問節点集合格納部
113:訪問済節点集合格納部
114:先行及び後続節点格納部
131:呼出し関係グラフデータ格納部
132:メソッド保持関係グラフデータ格納部

Claims (6)

  1. 呼出し関係にある複数のメソッドのうち経路探索の起点となる複数のメソッドを結ぶ経路を前記起点となるメソッド毎に並行して経路探索を行う処理をコンピュータが実行する探索方法であって、
    前記起点となる前記複数のメソッドからnホップ目の経路探索対象となる経路が複数ある場合、メソッドに対応するクラスを記憶する記憶部を参照して、前記経路で接続された2つのメソッドに対応する経路優先度を算出し、
    前記経路優先度に基づき、前記経路探索対象となる複数の経路のうちから経路探索を行う経路を特定し、
    特定した前記経路に基づき前記経路探索の起点となる複数のメソッドの経路探索を行う、
    探索方法。
  2. 経路探索の起点となる中間地点のメソッドを特定し、前記複数のメソッド及び前記中間地点のメソッドを結ぶ経路を、前記中間地点のメソッドを含む前記経路探索の起点となる複数のメソッドのそれぞれから並行して経路探索を行う、
    請求項1に記載の探索方法。
  3. 前記複数のメソッド及び前記中間地点のメソッドに対応するクラス類似度に基づき、経路探索の起点となる前記中間地点のメソッドを増やす、
    請求項2に記載の探索方法。
  4. 複数の前記中間地点のメソッドが特定される場合、前記クラス類似度に基づき、前記複数の中間地点のメソッドの優先度を特定し、
    特定した前記複数の中間地点のメソッドの優先度に従い、特定した前記複数の中間地点のメソッドのうちから前記経路探索の起点となる中間地点のメソッドを特定し、
    特定した前記中間地点のメソッドを含む前記経路探索の起点となる複数のメソッドのそれぞれから並行して経路探索を行う、
    請求項3に記載の探索方法。
  5. 呼出し関係にある複数のメソッドのうち経路探索の起点となる複数のメソッドを結ぶ経路を前記起点のメソッド毎に並行して経路探索を行う処理をコンピュータに実行させる探索プログラムであって、
    前記起点となる前記複数のメソッドからnホップ目の経路探索対象となる経路が複数ある場合、メソッドに対応するクラスを記憶する記憶部を参照して、前記経路で接続された2つのメソッドに対応する経路優先度を算出し、
    前記経路優先度に基づき、前記経路探索対象となる複数の経路のうちから経路探索を行う経路を特定し、
    特定した前記経路に基づき前記経路探索の起点となる複数のメソッドの経路探索を行う、
    探索プログラム。
  6. 呼出し関係にある複数のメソッドのうち経路探索の起点となる複数のメソッドを結ぶ経路を前記起点のメソッド毎に並行して経路探索を行う探索装置であって、
    前記起点となる前記複数のメソッドからnホップ目の経路探索対象となる経路が複数ある場合、メソッドに対応するクラスを記憶する記憶部を参照して、前記経路で接続された2つのメソッドに対応する経路優先度を算出する優先探索節点選出部と、
    前記経路優先度に基づき、前記経路探索対象となる複数の経路のうちから経路探索を行う経路を特定し、特定した前記経路に基づき前記経路探索の起点となる複数のメソッドの経路探索を行う探索部と、
    を有する探索装置。
JP2015188352A 2015-09-25 2015-09-25 探索方法、探索プログラム及び探索装置 Expired - Fee Related JP6512050B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015188352A JP6512050B2 (ja) 2015-09-25 2015-09-25 探索方法、探索プログラム及び探索装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015188352A JP6512050B2 (ja) 2015-09-25 2015-09-25 探索方法、探索プログラム及び探索装置

Publications (2)

Publication Number Publication Date
JP2017062710A JP2017062710A (ja) 2017-03-30
JP6512050B2 true JP6512050B2 (ja) 2019-05-15

Family

ID=58428931

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015188352A Expired - Fee Related JP6512050B2 (ja) 2015-09-25 2015-09-25 探索方法、探索プログラム及び探索装置

Country Status (1)

Country Link
JP (1) JP6512050B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230222010A1 (en) * 2022-01-10 2023-07-13 Nvidia Corporation Application programming interface to indicate execution of graph nodes

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003233768A (ja) * 2002-02-12 2003-08-22 Univ Tokyo 複数経路探索のためのデュアルダイキストラ法
JP2013218637A (ja) * 2012-04-12 2013-10-24 Nippon Telegr & Teleph Corp <Ntt> 探索範囲限定装置及び方法及びプログラム

Also Published As

Publication number Publication date
JP2017062710A (ja) 2017-03-30

Similar Documents

Publication Publication Date Title
JP7394129B2 (ja) ナレッジグラフのパーティション分割
US9581454B2 (en) Route information processing apparatus and route information processing method
CN111460311A (zh) 基于字典树的搜索处理方法、装置、设备和存储介质
US10108401B2 (en) Dynamic suggestion of next task based on task navigation information
JP6719748B2 (ja) 探索システム、探索方法および物性データベース管理装置
US20200265044A1 (en) Path searching method, storage medium and path searching apparatus
US20110072352A1 (en) Method and application tool for dynamically navigating a user customizable representation of a network device configuration
JP6352958B2 (ja) グラフインデックス探索装置及びグラフインデックス探索装置の動作方法
JP2018531379A6 (ja) 経路照会方法、装置、デバイス及び不揮発性コンピューター記憶媒体
JP2018531379A (ja) 経路照会方法、装置、デバイス及び不揮発性コンピューター記憶媒体
CN110909015A (zh) 微服务的拆分方法、装置、设备及存储介质
Sharpe et al. Identifying mechanistically distinct pathways in kinetic transition networks
Farach-Colton et al. Tight approximations of degeneracy in large graphs
JPWO2010058785A1 (ja) 経路計算順決定方法、プログラムおよび計算装置
JP6512050B2 (ja) 探索方法、探索プログラム及び探索装置
KR20210031094A (ko) 트리 기반 이상치 탐지 장치 및 방법, 컴퓨터 프로그램
JP4491480B2 (ja) インデクス構築方法、文書検索装置及びインデクス構築プログラム
CN103324644B (zh) 一种查询结果多样化方法及装置
KR101914784B1 (ko) 쿼드 트리에 기반한 스카이라인 질의 방법
KR20190050575A (ko) 무인 항공기의 비행경로 탐색 방법
US20170122760A1 (en) Apparatus and method for online generation of an optimum route-graph
JP2016100002A (ja) 組み合わせ計算によるイベント駆動ソフトウェアのイベント・シーケンス構築
CN115510290A (zh) 一种数字孪生环境下的快速检索方法及终端
JP2019148859A (ja) フローダイアグラムを用いたモデル開発環境におけるデザインパターンの発見を支援する装置および方法
CN114279457A (zh) 路径规划方法、装置、设备及可读存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180608

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190228

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: 20190312

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190325

R150 Certificate of patent or registration of utility model

Ref document number: 6512050

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees