(57)【要約】情報処理装置（１）は、所定の要素値を参照するために用いられる複数種類の要素情報（１１１１から１１１ｎ）と、当該要素値の概念を示す概念情報（１１１０）との対応関係を含む知識情報（１１１）を記憶する記憶部（１１）と、要素情報（１１１１から１１１ｎ）のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、知識情報（１１１）に基づき、当該グラフ内の各ノードに対応する要素情報から特定される概念情報（１１１０）を当該ノードに関連する属性情報として付与する付与部（１２）と、付与後の各グラフの間で、概念情報（１１１０）に基づき、共通する部分グラフを抽出する抽出部（１３）と、を備える。
2020049622.tif 000002
【特許請求の範囲】
【請求項１】
所定の要素値を参照するために用いられる複数種類の要素情報と、当該要素値の概念を示す概念情報との対応関係を含む知識情報を記憶する記憶部と、
前記要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する付与部と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する抽出部と、
を備える情報処理装置。
【請求項２】
前記付与部は、
各ノードに含まれる前記ソースコード内の記述を前記要素情報とした場合に、前記知識情報において当該要素情報に対応付けられた前記概念情報を特定し、当該特定した概念情報を当該ノード、当該ノードが属する親ノード、又は、当該ノード及び親ノードを含むノード群のいずれかの前記属性情報として付与する
請求項１に記載の情報処理装置。
【請求項３】
前記要素情報は、前記要素値を参照するために、所定のソースコード内で記述された属性名であり、
前記概念情報は、前記要素値の意味を示す文字列であり、
前記知識情報は、複数種類の前記属性名と前記意味とを含む学習データに基づいて予め機械学習された、前記属性名と前記意味との間の規則性を示す意味推論モデルであり、
前記付与部は、各ノードに対応する前記ソースコード内の前記属性名を前記意味推論モデルに入力して求められる前記意味を示す文字列を当該ノードに関連する属性情報として付与する
請求項１又は２に記載の情報処理装置。
【請求項４】
前記複数のソースコードのそれぞれは、前記要素情報を属性名として指定可能な構成要素として含む所定のデータ構造を用いて記述されており、
前記複数のソースコードのそれぞれから前記データ構造のデータ型を判別し、当該判別したデータ型を示す型情報を該当するノードに関連する前記属性情報に付与する型判別部をさらに備え、
前記抽出部は、前記型情報をさらに加味して、前記部分グラフを抽出する
請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記付与部は、前記型判別部により前記型情報が付与されたノードに基づいて前記概念情報を特定し、当該特定した概念情報を当該ノードに関連する属性情報として付与する
請求項４に記載の情報処理装置。
【請求項６】
前記抽出部は、
前記付与後の各グラフの間で、前記属性情報として付与された複数の前記概念情報の位置関係が共通するノードの集合を前記部分グラフとして抽出する
請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記抽出された部分グラフの中に含まれる複数の前記概念情報のうち、一部の概念情報を用いて残りの概念情報を導出できることを示す条件情報を生成する生成部をさらに備える
請求項６に記載の情報処理装置。
【請求項８】
前記抽出された部分グラフの中に含まれる複数の前記概念情報のうち、一部の概念情報を用いて残りの概念情報を導出するための処理コードを生成する生成部をさらに備える
請求項６に記載の情報処理装置。
【請求項９】
前記抽出部は、
前記複数のグラフ内での前記部分グラフの出現回数を計数する、
請求項１乃至８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記複数のグラフのそれぞれは、前記複数のソースコードのそれぞれから生成された抽象構文木である
請求項１乃至９のいずれか１項に記載の情報処理装置。
【請求項１１】
所定の要素値を参照するために用いられる複数種類の要素情報と、当該要素値の概念を示す概念情報との対応関係を含む知識情報を記憶する記憶装置と、
前記要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する付与部と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する抽出部と、
を備える分析システム。
【請求項１２】
前記付与部は、
各ノードに含まれる前記ソースコード内の記述を前記要素情報とした場合に、前記知識情報において当該要素情報に対応付けられた前記概念情報を特定し、当該特定した概念情報を当該ノード、当該ノードが属する親ノード、又は、当該ノード及び親ノードを含むノード群のいずれかの前記属性情報として付与する
請求項１１に記載の分析システム。
【請求項１３】
前記抽出部は、
前記付与後の各グラフの間で、前記属性情報として付与された複数の前記概念情報の位置関係が共通するノードの集合を前記部分グラフとして抽出する
請求項１１又は１２に記載の分析システム。
【請求項１４】
コンピュータが、
所定の要素値を参照するために用いられる複数種類の要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記複数種類の要素情報と前記要素値の概念を示す概念情報との対応関係を含む知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与し、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する
分析方法。
【請求項１５】
所定の要素値を参照するために用いられる複数種類の要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記複数種類の要素情報と前記要素値の概念を示す概念情報との対応関係を含む知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する処理と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する処理と、
をコンピュータに実行させる分析プログラムが格納された非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、分析システム、分析方法及び分析プログラムに関し、特に、複数のソースコードの間で共通する処理を抽出するための情報処理装置、分析システム、分析方法及び分析プログラムに関する。
【背景技術】
【０００２】
特許文献１には、グラフ構造により表現された複数のオブジェクトから、多頻度部分グラフの組を抽出する技術が開示されている。また、特許文献２には、プログラムのソースコードの構文解析により得られた構文木の関数について、引数の数やデータ型を推測する技術が開示されている。また、特許文献３には、テーブルのカラムの意味とテーブルの意味の間の規則性を示すモデルを生成し、入力テーブルのカラムの意味からモデルを用いて、入力テーブルの意味を推定する技術が開示されている。尚、非特許文献１には、頻出する部分グラフのマイニングに関する技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−０６３２７７号公報
【特許文献２】特開２００７−２４９２６４号公報
【特許文献３】特許第６３３８０３６号公報
【非特許文献】
【０００４】
【非特許文献１】Kuramochi, M. and Karypis, G.: Frequent Subgraph Discovery, in Proceedings of the 2001 IEEE International Conference on Data Mining, 29 November - 2 December 2001, San Jose, California, USA, pp. 313-320 (2001)
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、多数及び多種類のソフトウェアプログラムが開発され、そのソースコードが大量に蓄積されている。そして、新規案件のプログラム開発時に、過去の類似案件のソースコードの一部を再利用する必要性が高まっている。そのため、蓄積された大量のソースコードを解析し、共通処理を抽出して、再利用可能なコードを見出すことが考えられる。しかしながら、大量のソースコードの中から再利用可能な情報（知見やノウハウ等）を人手で抽出することが困難であるという問題点がある。その理由は、ソースコード内の記述は、論理的には同等の処理（演算式やアルゴリズム）であっても開発者や部門が異なれば、変数名や実装上の具体的な記述が異なってしまうためである。【０００６】
ここで、特許文献１にかかる技術は、対象とするオブジェクトが化学式や画面遷移であり、ソースコードを対象としたものではない。また、特許文献１にかかる技術は、グラフ形状のみで抽出しているため、精度が不十分である。また、特許文献２にかかる技術は、構文木が字句解析に基づくものであり、異なるソースコード間の記述上の違いは異なる処理として認識されてしまう。また、特許文献３にかかる技術は、ソースコードを対象としたものではない。尚、非特許文献１にかかる技術は、複数のソースコード間で同様の処理であっても変数名が異なる場合等に対応できない。【０００７】
本開示は、このような問題点を解決するためになされたものであり、複数のソースコードの中から再利用可能な情報を効率的に抽出するための情報処理装置、分析システム、分析方法及び分析プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本開示の第１の態様にかかる情報処理装置は、
所定の要素値を参照するために用いられる複数種類の要素情報と、当該要素値の概念を示す概念情報との対応関係を含む知識情報を記憶する記憶部と、
前記要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する付与部と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する抽出部と、
を備える。【０００９】
本開示の第２の態様にかかる分析システムは、
所定の要素値を参照するために用いられる複数種類の要素情報と、当該要素値の概念を示す概念情報との対応関係を含む知識情報を記憶する記憶装置と、
前記要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する付与部と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する抽出部と、
を備える。【００１０】
本開示の第３の態様にかかる分析方法は、
コンピュータが、
所定の要素値を参照するために用いられる複数種類の要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記複数種類の要素情報と前記要素値の概念を示す概念情報との対応関係を含む知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与し、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する。【００１１】
本開示の第４の態様にかかる分析プログラムは、
所定の要素値を参照するために用いられる複数種類の要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記複数種類の要素情報と前記要素値の概念を示す概念情報との対応関係を含む知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する処理と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する処理と、
をコンピュータに実行させる。
【発明の効果】
【００１２】
本発明により、複数のソースコードの中から再利用可能な情報を効率的に抽出するための情報処理装置、分析システム、分析方法及び分析プログラムを提供することができる。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態１にかかる情報処理装置の構成を示すブロック図である。
【図２】本実施の形態１にかかる分析方法の流れを示すフローチャートである。
【図３】本実施の形態２にかかる分析システムの構成を示すブロック図である。
【図４】本実施の形態２にかかる所定のデータ構造が用いられて記述されたソースコードの例を示す図である。
【図５】本実施の形態２にかかる所定のデータ構造が用いられて記述された他のソースコードの例を示す図である。
【図６】本実施の形態２にかかる構文木の抽出方法の流れを示すフローチャートである。
【図７】本実施の形態２にかかるソースコードから変換された抽象構文木の例を示す図である。
【図８】本実施の形態２にかかる抽象構文木に対して型情報が付与された例を示す図である。
【図９】本実施の形態２にかかる型情報が付与された抽象構文木に対して意味情報が付与された例を示す図である。
【図１０】本実施の形態２にかかる他のソースコードから変換された抽象構文木の例を示す図である。
【図１１】本実施の形態２にかかる他のソースコードから変換された抽象構文木に対して型情報及び意味情報が付与された例を示す図である。
【図１２】本実施の形態２にかかる型情報及び意味情報が付与された複数の抽象構文木の間で共通する部分木の例を示す図である。
【図１３】本実施の形態３にかかる分析システムの構成を示すブロック図である。
【図１４】本実施の形態３にかかる分析ルールの抽出方法の流れを示すフローチャートである。
【図１５】本実施の形態３にかかる抽出された分析ルールの例を示す図である。
【発明を実施するための形態】
【００１４】
以下では、本開示の実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一又は対応する要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００１５】
＜実施の形態１＞
図１は、本実施の形態１にかかる情報処理装置１の構成を示すブロック図である。情報処理装置１は、複数のソースコードの間で実質的に同等の処理が実装された部分を抽出するための分析を行うコンピュータである。尚、情報処理装置１は、２台以上のコンピュータにより構成されていてもよい。ここで、「実質的に同等の処理」とは、論理的には同等の処理（演算式やアルゴリズム）だが、変数名や実装上の具体的な記述が異なるプログラムコードの塊を指すものとする。
【００１６】
情報処理装置１は、記憶部１１と、付与部１２と、抽出部１３とを備える。記憶部１１は、ハードディスク、フラッシュメモリ等の記憶装置であり、少なくとも知識情報１１１を記憶する。ここで、知識情報１１１は、複数種類の要素情報１１１１から１１１ｎ（ｎは２以上の自然数。）と、概念情報１１１０との対応関係を含む情報である。要素情報１１１１等のそれぞれは、所定の要素値を参照するために用いられる情報である。要素情報１１１１等は、例えば、コンピュータプログラムのソースコードに記述される変数名、プロパティ（属性）名、構造体もしくはクラスのメンバ変数名等である。または、要素情報１１１１等は、配列、リストもしくは行列のインデクス情報、キー文字列、要素番号、要素名もしくはカラム名等である。よって、要素情報１１１１等は、文字列又は数値の情報である。そして、要素情報１１１１から１１１ｎは、異なる値であるものとする。また、概念情報１１１０は、要素値の概念を示す文字列又は数値の情報である。概念情報１１１０は、例えば、要素値の意味を示す文字列である。そして、要素情報１１１１から１１１ｎは、同一の概念情報１１１０と対応付けられている。例えば、要素情報１１１１が「Ｎａｍｅ」、要素情報１１１２が「顧客名」である場合、これらに対応付けられる概念情報１１１０が「氏名」となる。知識情報１１１は、上述した対応関係を含む、知識ベース、単語ネットワーク、辞書情報等の複数の単語の関係が定義された情報、データベースである。知識情報１１１は、人間の知識に基づき予め作成されたものであるか、所定の学習データに基づき機械学習により生成されたものであってもよい。
【００１７】
付与部１２は、複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、知識情報１１１に基づき、当該グラフ内の各ノードに対応する要素情報１１１１等から特定される概念情報１１１０を当該ノードに関連する属性情報として付与する。ここで、複数の「ソースコード」のそれぞれは、要素情報１１１１等のいずれかが記述されているものとする。また、「グラフ」とは、グラフ理論によるグラフの実装であり、複数のノードである「ノード群」とノード間の連結関係を表す「エッジ群」とにより構成されたものである。また、「ノード」は、１以上の属性情報を有する。特に、本実施形態にかかるグラフは、ソースコードにおける処理構造を表したものである。そして、本実施形態にかかるグラフには、例えば、抽象構文木等が挙げられるが、これに限定されない。また、「当該ノードに関連する属性情報」とは、当該「ノード」自体、当該ノードが属する「親ノード」、又は、当該ノード及び親ノードを含む「ノード群」のいずれかの属性情報を指すものとする。そして、「ノードに対応する要素情報」とは、当該ノード自体もしくは当該ノードが属する親ノード又は当該ノード及び親ノードを含むノード群のいずれかの属性情報として設定された要素情報を指すものとする。
【００１８】
抽出部１３は、付与部１２により属性情報に概念情報が付与された後の各グラフの間で、付与された概念情報１１１０に基づき、共通する部分グラフを抽出する。ここで、部分グラフとは、グラフ内の一部のノード又はノード群である。そして、共通する部分グラフとは、ノード群に含まれるノードの集合やノード間の連結関係が共通する部分グラフを示す。
【００１９】
図２は、本実施の形態１にかかる分析方法の流れを示すフローチャートである。まず、付与部１２は、複数のソースコードのそれぞれにおける処理構造を表す複数のグラフを入力する。そして、付与部１２は、記憶部１１内の知識情報１１１を参照し、各グラフに対して、各ノードに対応する要素情報１１１１等から特定される概念情報１１１０を当該ノードに関連する属性情報として付与する（Ｓ１）。例えば、付与部１２は、知識情報１１１内の対応関係から、ノードに属性情報として設定された要素情報と対応付けられた概念情報１１１０を特定する。そして、付与部１２は、特定された概念情報１１１０を、該当するノードに関連する属性情報として付与する。また、付与部１２は、複数のグラフのそれぞれについてこのような付与を行う。
【００２０】
次に、抽出部１３は、ステップＳ１により概念情報が付与された各グラフの間で、概念情報１１１０に基づき、共通する部分グラフを抽出する（Ｓ２）。
【００２１】
尚、情報処理装置１は、図示しない構成としてプロセッサ及びメモリを備えるものである。また、記憶部１１その他の記憶装置には、本実施の形態にかかる分析方法の処理が実装されたコンピュータプログラムが記憶されている。そして、当該プロセッサは、記憶部１１等からコンピュータプログラムを前記メモリへ読み込み、当該コンピュータプログラムを実行する。これにより、前記プロセッサは、付与部１２及び抽出部１３の機能を実現する。
【００２２】
または、付与部１２及び抽出部１３は、それぞれが専用のハードウェアで実現されていてもよい。また、各装置の各構成要素の一部又は全部は、汎用または専用の回路（circuitry）、プロセッサ等やこれらの組合せによって実現されもよい。これらは、単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。各装置の各構成要素の一部又は全部は、上述した回路等とプログラムとの組合せによって実現されてもよい。
【００２３】
また、情報処理装置１の各構成要素の一部又は全部が複数の情報処理装置や回路等により実現される場合には、複数の情報処理装置や回路等は、集中配置されてもよいし、分散配置されてもよい。例えば、情報処理装置や回路等は、クライアントサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
【００２４】
ここで、例えば、様々なデータ解析用のプログラムでは、異なるソースコードの間で実質的に同等の処理が実装されていることが多いと考えられる。例えば、演算式、処理ロジック、アルゴリズム等の処理内容が共通している場合がある。しかしながら、プログラムの開発者が異なっている場合や開発する部門が異なっている場合には、ソースコードレベルでは変数名や具体的な記述が異なること（表記のゆれ）が一般的である。そのため、異なるソースコードから生成されたグラフ同士を単純に比較したとしても、要素情報が異なるため、共通の部分グラフとしては抽出できない。
【００２５】
そこで、本実施の形態では、知識情報１１１を用いて、要素情報自体が異なるとしても同一の概念情報に対応付けられる場合には、概念情報を手掛かりに共通の部分グラフを抽出する。そして、共通する部分グラフに対応するコードは、実装された頻度が高いことを示すため、再利用される可能性が高い。また、概念情報を手掛かりにグラフ内のノードやエッジの構成を比較することで、共通する部分グラフを効率的かつ高精度に抽出できる。そのため、本実施の形態により、複数のソースコードの中から再利用可能な情報を効率的に抽出することができる。
【００２６】
＜実施の形態２＞
本実施の形態２は、上述した実施の形態１の応用例である。本実施の形態２にかかる分析システムは、複数のソースコードの間で実質的に同等の処理が実装された部分を抽出するための分析を行うコンピュータシステムである。当該分析システムは、記憶装置と、付与部と、抽出部とを少なくとも備える。ここで、記憶装置と、付与部と、抽出部とは、上述した実施の形態１の記憶部１１、付与部１２及び抽出部１３と同様の機能を有するものであればよい。
【００２７】
また、前記付与部は、各ノードに含まれる前記ソースコード内の記述を前記要素情報とした場合に、前記知識情報において当該要素情報に対応付けられた前記概念情報を特定し、当該特定した概念情報を当該ノード、当該ノードが属する親ノード、又は、当該ノード及び親ノードを含むノード群のいずれかの属性情報として付与することが望ましい。これにより、より適切な概念情報を付与できる。
【００２８】
また、前記要素情報は、前記要素値を参照するために、所定のソースコード内で記述された属性名であり、前記概念情報は、前記要素値の意味を示す文字列であるものとする。また、前記知識情報は、複数種類の前記属性名と前記意味とを含む学習データに基づいて予め機械学習された、前記属性名と前記意味との間の規則性を示す意味推論モデルであるものとする。この場合、前記付与部は、各ノードに対応する前記ソースコード内の前記属性名を前記意味推論モデルに入力して求められる前記意味を示す文字列を当該ノードに関連する属性情報として付与することが望ましい。これにより、ソースコード内の記述によらず、実質的な処理内容による共通性を抽出することができる。
【００２９】
さらに、前記複数のソースコードのそれぞれは、前記要素情報を属性名として指定可能な構成要素として含む所定のデータ構造を用いて記述されているものとする。この場合、前記複数のソースコードのそれぞれから前記データ構造のデータ型を判別し、当該判別したデータ型を示す型情報を該当するノードに関連する前記属性情報に付与する型判別部をさらに備えるとよい。そして、前記抽出部は、前記型情報をさらに加味して、前記部分グラフを抽出するとよい。これにより、ソースコードが型宣言不要であるプログラム言語で記述されている場合であっても、部分グラフの抽出精度が向上する。
【００３０】
さらに、前記付与部は、前記型判別部により前記型情報が付与されたノードに基づいて前記概念情報を特定し、当該特定した概念情報を当該ノードに関連する属性情報として付与するとよい。これにより、概念情報をより精度良く特定できる。
【００３１】
また、前記抽出部は、前記付与後の各グラフの間で、前記属性情報として付与された複数の前記概念情報の位置関係が共通するノードの集合を前記部分グラフとして抽出することが望ましい。これにより、部分グラフがある程度の大きさとなり、より具体的な処理を再利用することができる。
【００３２】
また、前記抽出部は、前記複数のグラフ内での前記部分グラフの出現回数を計数するとよい。これにより、複数の部分グラフが抽出された場合に、頻出の処理を容易に把握でき、再利用性が高まる。
【００３３】
さらに、前記複数のグラフのそれぞれは、前記複数のソースコードのそれぞれから生成された抽象構文木であることが望ましい。これにより、プログラミング上の形式的、記述的な差異を除外した上で、より有用な部分グラフを抽出できる。
【００３４】
図３は、本実施の形態２にかかる分析システム２の構成を示すブロック図である。分析システム２は、１又は複数台のコンピュータ装置により実現される。分析システム２は、記憶部２１と、制御部２２と、メモリ２３と、ＩＦ（InterFace）部２４とを備える。
【００３５】
記憶部２１は、ハードディスク、フラッシュメモリ等の記憶装置である。記憶部２１は、ソースコード２１１１から２１１ｍ（ｍは、２以上の自然数。）、ナレッジ２１２、対象型リスト２１３、ＡＳＴ（Abstract Syntax Tree）２１４１から２１４ｍ、部分木２１５１から２１５Ｌ（Ｌは、２以上の自然数。）、分析プログラム２１６を記憶する。
【００３６】
ソースコード２１１１等は、上述した実施形態１にかかる複数のソースコードの一例である。ソースコード２１１１等のそれぞれは、複数種類の要素情報のいずれかを構成要素とする所定のデータ構造を用いて記述されているものである。但し、少なくとも一部のソースコードの間では、要素情報の種類が異なるものとする。
【００３７】
図４は、本実施の形態２にかかる所定のデータ構造が用いられて記述されたソースコード２１１１の例を示す図である。ソースコード２１１１は、データ構造としてＤａｔａＦｒａｍｅ型が用いられていることを示す。そして、ＤａｔａＦｒａｍｅ型の変数ｄｆのｃｏｌｕｍｎｓには、要素情報として「社員番号」、「年齢」、「体重」、「身長」が定義されていることを示す。また、対象コードＣ１には、変数ｄｆの「体重」及び「身長」を用いて所定の演算を行い、演算結果を変数ｄｆのｃｏｌｕｍｎｓ「ｆｅａｔ＿ＢＭＩ」に代入する処理が記述されていることを示す。そのため、ソースコード２１１１の変数ｄｆは、「社員番号」、「年齢」、「体重」、「身長」、「ｆｅａｔ＿ＢＭＩ」を構成要素として含むデータ構造といえる。
【００３８】
図５は、本実施の形態２にかかる所定のデータ構造が用いられて記述された他のソースコード２１１２の例を示す図である。ソースコード２１１２は、データ構造としてソースコード２１１１と同じＤａｔａＦｒａｍｅ型を用いられていることを示す。そして、ＤａｔａＦｒａｍｅ型の変数ｄｆのｃｏｌｕｍｎｓには、要素情報として「ｕｓｅｒＩＤ」、「ａｇｅ」、「ｂｌｏｏｄｔｙｐｅ」、「ｗｅｉｇｈｔ」、「ｈｅｉｇｈｔ」が定義され、変数ｄｆはこれらを構成要素としていることを示す。尚、変数ｄｆの変数名は異なるものであっても良いことはもちろんである。また、対象コードＣ２には、変数ｄｆの「ｗｅｉｇｈｔ」及び「ｈｅｉｇｈｔ」を用いて、対象コードＣ１と同等の演算を行い、演算結果を変数ｄｆのｃｏｌｕｍｎｓ「ｂｍｉ」に代入する処理が記述されていることを示す。そのため、ソースコード２１１２の変数ｄｆは、「ｕｓｅｒＩＤ」、「ａｇｅ」、「ｂｌｏｏｄｔｙｐｅ」、「ｗｅｉｇｈｔ」、「ｈｅｉｇｈｔ」、「ｂｍｉ」を構成要素として含むデータ構造といえる。さらに、対象コードＣ２には、変数ｄｆの値を用いて機械学習する処理も記述されていることを示す。
【００３９】
このように、対象コードＣ１とＣ２とはいずれも、ＢＭＩを特徴量として算出する処理を含む。但し、対象コードＣ１とＣ２とは一部の処理が実質的に同等であるが、要素情報の文字列が異なっており、また、機械学習の処理自体は対象コードＣ２にしか存在しない。尚、要素情報２５１１及び２５１２以外については、これらと同等の構成であるため図示及び説明を省略する。
【００４０】
図３に戻り説明を続ける。ナレッジ２１２は、上述した知識情報１１１の一例であり、単語ネットワークや対応関係等が規定された情報である。ナレッジ２１２は、ＤａｔａＦｒａｍｅ型の変数に属性名として指定される複数種類のカラム名（要素情報）とその要素値の意味とを含む学習データに基づいて予め機械学習された、属性名と（要素値の）意味との間の規則性を示す意味推論モデルを含むものとする。ここで、「意味」とは、上述した概念情報１１１０の一例であり、要素値の意味又は概念を示す文字列である。
【００４１】
ここで、ナレッジ２１２には、要素情報「体重」及び「ｗｅｉｇｈｔ」が概念情報「Ｗｅｉｇｈｔ」に対応付けられているものとする。また、ナレッジ２１２には、要素情報「身長」及び「ｈｅｉｇｈｔ」が概念情報「Ｈｅｉｇｈｔ」に対応付けられているものとする。さらに、ナレッジ２１２には、要素情報「ｆｅａｔ＿ＢＭＩ」及び「ｂｍｉ」が概念情報「ＢＭＩ」に対応付けられているものとする。
【００４２】
対象型リスト２１３は、後述する意味推論処理において対象とするデータ型のリストを示す。対象型リスト２１３は、要素情報を属性名として指定可能な構成要素として含む所定のデータ構造を含む。ここで、所定のデータ構造とは、複数の要素を含むデータ列の集合であり、要素名やインデクスにより特定の要素に対応する要素値を参照可能なものであり、構造体やクラスも含むものとする。例えば、対象型リスト２１３は、ＤａｔａＦｒａｍｅ型、配列、行列、リスト等である。
【００４３】
ＡＳＴ２１４１から２１４ｍは、上述した「グラフ」の一例である、抽象構文木である。ＡＳＴ２１４１は、通常の構文木から、言語の意味に関係ない情報を取り除き、意味に関係ある情報のみを取り出した（抽象化した）木構造のデータ構造である。
【００４４】
ＡＳＴ２１４１は、複数のノード２５１から２５ｋ（ｋは、２以上の自然数。）を含む。ノード２５１は、要素情報２５１１、型情報２５１２及び意味情報２５１３の少なくとも一部を属性情報として付与されている。つまり、ノードによりこれらの属性情報のうち一部しか付与されていないものがあるものとする。尚、接続された複数のノードの集合であるノード群に対しても、属性情報が付与される場合があるものとする。要素情報２５１１は、上述した要素情報１１１１等の一例であり、対応するソースコードに記述された属性名である。型情報２５１２は、後述する型推論処理により推論されたデータ型を示す文字列である。意味情報２５１３は、後述する意味推論処理により推論された「意味」を示す文字列である。尚、ノード２５２から２５ｋは、ノード２５１と同等の構成であるため図示及び説明を省略する。また、ＡＳＴの数は、ｍ以上であっても構わない。例えば、１つのソースコードから２以上のＡＳＴに分割して変換された場合には、ＡＳＴの数はｍより多くなる。
【００４５】
部分木２１５１から２１５Ｌは、上述した共通する部分グラフの一例であり、後述する部分木抽出処理により抽出された部分木である。分析プログラム２１６は、本実施の形態にかかる上述した分析方法が少なくとも実装されたコンピュータプログラムである。
【００４６】
メモリ２３は、ＲＡＭ（Random Access Memory）等の揮発性記憶装置であり、制御部２２の動作時に一時的に情報を保持するための記憶領域である。ＩＦ部２４は、分析システム２の外部との入出力を行うインタフェースである。例えば、ＩＦ部２４は、キーボード、マウス、タッチパネル等の入力デバイス（不図示）を介して、ユーザの操作を受け付け、受け付けた操作内容を制御部２２へ出力する。また、ＩＦ部２４は、制御部２２からの指示に応じて、タッチパネル、表示装置、プリンタ等（不図示）へ出力を行う。
【００４７】
制御部２２は、ＣＰＵ（Central Processing Unit）等のプロセッサであり、分析システム２の各構成を制御する。制御部２２は、記憶部２１から分析プログラム２１６をメモリ２３へ読み込み、分析プログラム２１６を実行する。これにより、制御部２２は、入力部２２１、ＡＳＴ変換部２２２、型推論部２２３、意味推論部２２４及び部分木抽出部２２５の機能を実現する。尚、意味推論部２２４は、上述した付与部１２の一例である。また、部分木抽出部２２５は、上述した抽出部１３の一例である。
【００４８】
入力部２２１は、記憶部２１からソースコード２１１１から２１１ｍを入力として取得する。ＡＳＴ変換部２２２は、入力部２２１により入力されたソースコード２１１１から２１１ｍのそれぞれをＡＳＴ２１４１から２１４ｍに変換し、記憶部２１に格納する。型推論部２２３は、型判別部の一例であり、ソースコード２１１１から２１１ｍのそれぞれからデータ構造のデータ型を判別し、当該判別したデータ型を示す型情報を該当するノードの属性情報に付与する。すなわち、型推論部２２３は、所定の解析処理によりＡＳＴ２１４１等の中のノード２５１における型情報２５１２を推論し、ノード２５１に付与して記憶部２１に格納する。
【００４９】
意味推論部２２４は、各ノードに含まれるソースコード内の記述を要素情報とした場合に、ナレッジ２１２において当該要素情報に対応付けられた意味情報を特定し、当該特定した意味情報を当該ノードに関連する属性情報として付与する。尚、「ノードに関連する」とは、上述した通り、当該ノード、当該ノードが属する親ノード、又は、当該ノード及び親ノードを含むノード群のいずれかに相当する。特に、意味推論部２２４は、各ノードに対応するソースコード内の属性名をナレッジ２１２の意味推論モデルに入力して求められる意味情報を当該ノードに関連する属性情報として付与する。また、意味推論部２２４は、型推論部２２３により型情報２５１２が付与されたノード２５１に基づいて意味情報を特定し、当該特定した意味情報を当該ノードに関連する属性情報として付与する。
【００５０】
部分木抽出部２２５は、意味推論部２２４による意味情報の付与後の各ＡＳＴの間で、属性情報として付与された複数の意味情報の位置関係が共通するノードの集合を、部分木として抽出する。また、部分木抽出部２２５は、型推論部２２３により付与された型情報をさらに加味して、部分木を抽出するとよい。また、部分木抽出部２２５は、複数のグラフ内での前記部分グラフの出現回数を計数する。
【００５１】
図６は、本実施の形態２にかかる構文木の抽出方法の流れを示すフローチャートである。まず、入力部２２１は、分析対象のソースコードを入力する（Ｓ２１）。例えば、入力部２２１は、記憶部２１のソースコード２１１１から２１１ｍのうちＡＳＴに変換されていない一つのソースコード（例えば、ソースコード２１１１）を、記憶部２１からメモリ２３へロードする。
【００５２】
次に、ＡＳＴ変換部２２２は、入力されたソースコードをＡＳＴに変換する（Ｓ２２）。ここでは、ＡＳＴ変換部２２２は、ソースコード２１１１からＡＳＴ２１４１に変換し、ＡＳＴ２１４１を記憶部２１に格納する。例えば、ＡＳＴ変換部２２２は、Ｔｏｐ−ｄｏｗｎ  ｐａｒｓｅｒ等を利用してＡＳＴに変換することができる。図７は、本実施の形態２にかかるソースコード２１１１（図４）から変換された抽象構文木（ＡＳＴ２１４１）の例を示す図である。
【００５３】
図６に戻り説明を続ける。続いて、型推論部２２３は、ＡＳＴ内のノードに型情報を付与する（Ｓ２３）。ここでは、型推論部２２３は、記憶部２１からＡＳＴ２１４１をメモリ２３にロードし、ＡＳＴ２１４１の各ノード又はノード群に対して型情報２５１２を付与し、メモリ２３に格納する。例えば、型推論部２２３は、ｓｔａｔｉｃ  ｔｙｐｅ  ｉｎｆｅｒｅｎｃｅ技術等を利用してノード群に対して型情報を特定し、特定した型情報を付与する。
【００５４】
図８は、本実施の形態２にかかる抽象構文木（ＡＳＴ２１４１）に対して型情報が付与された例を示す図である。ここでは、型推論部２２３がノード群Ｎ１に含まれるノードＮ１２からデータ型が「ＤａｔａＦｒａｍｅ」であることを判別し、ノード群Ｎ１の属性情報としてデータ型ｄｔ１「ＤａｔａＦｒａｍｅ」を付与したことを示す。同様に、型推論部２２３がノード群Ｎ２に含まれるノードＮ２２及びノード群Ｎ３に含まれるノードＮ３２からデータ型「ＤａｔａＦｒａｍｅ」と判別し、ノード群Ｎ２及びＮ３のそれぞれの属性情報としてデータ型ｄｔ２及びｄｔ３「ＤａｔａＦｒａｍｅ」を付与したことを示す。尚、ノード群Ｎ１、Ｎ２及びＮ３の代わりに、ノードＮ１２、Ｎ２２及びＮ３２の親ノードであるノードＮ１１、Ｎ２１及びＮ３１の属性情報としてデータ型ｄｔ１、ｄｔ２及びｄｔ３が付与されたと表現してもよい。つまり、ＡＳＴ内の一部のノードに対して型情報が付与されることとなる。
【００５５】
図６に戻り説明を続ける。続いて、意味推論部２２４は、ＡＳＴ内のノードに意味情報を付与する（Ｓ２４）。ここでは、意味推論部２２４は、ステップＳ２３により更新され、メモリ２３に保持されているＡＳＴ２１４１について、対象型リスト２１３を参照して対象の型情報が付与されたノードであるか否かを判定する。そして、対象の型情報が付与されたノードである場合、意味推論部２２４は、ナレッジ２１２を参照して当該ノード、親ノード又はノード群に対して意味情報２５１３を付与し、メモリ２３に格納する。例えば、意味推論部２２４は特許文献３にかかる技術等を利用してノード群に対して意味情報を特定し、特定した意味情報を付与する。
【００５６】
図９は、本実施の形態２にかかる型情報２５１２が付与された抽象構文木（ＡＳＴ２１４１）に対して意味情報２５１３が付与された例を示す図である。ここでは、意味推論部２２４は、ノード群Ｎ１又はノードＮ１１に付与された型情報２５１２が、対象型リスト２１３に含まれる「ＤａｔａＦｒａｍｅ」であると判定する。そして、意味推論部２２４は、ノード群Ｎ１に含まれるノードＮ１３の要素情報ｅ１「ｆｅａｔ＿ＢＭＩ」を、ナレッジ２１２の意味推論モデルに入力して意味情報「ＢＭＩ」を求める。そして、意味推論部２２４は、ノード群Ｎ１又はノードＮ１１の属性情報に意味情報ｍ１「ＢＭＩ」を設定する。同様に、意味推論部２２４は、ノード群Ｎ２及びＮ３を対象のデータ型であると判定する。そして、意味推論部２２４は、ノード群Ｎ２に含まれるノードＮ２３の要素情報ｅ２「体重」を、ナレッジ２１２の意味推論モデルに入力して意味情報「Ｗｅｉｇｈｔ」を求める。そして、意味推論部２２４は、ノード群Ｎ２又はノードＮ２１の属性情報に意味情報ｍ２「Ｗｅｉｇｈｔ」を設定する。また、意味推論部２２４は、ノード群Ｎ３に含まれるノードＮ３３の要素情報ｅ３「身長」を、ナレッジ２１２の意味推論モデルに入力して意味情報「Ｈｅｉｇｈｔ」を求める。そして、意味推論部２２４は、ノード群Ｎ３又はノードＮ３１の属性情報に意味情報ｍ３「Ｈｅｉｇｈｔ」を設定する。
【００５７】
図６に戻り説明を続ける。意味推論部２２４は、メモリ２３に保持されたＡＳＴ２１４１を記憶部２１に保存する（Ｓ２５）。その後、入力部２２１は、全ソースコードがＡＳＴ変換済みか否かを判定する（Ｓ２６）。ＡＳＴに未変換のソースコードが残っている場合、ステップＳ２１からＳ２６を繰り返す。ここでは、ソースコード２１１１がＡＳＴ変換済みであり、他のソースコードが未変換であるものとする。
【００５８】
そのため、入力部２２１は、ＡＳＴに変換されていない一つのソースコード（例えば、ソースコード２１１２）を、記憶部２１からメモリ２３へロードする（Ｓ２１）。そして、ＡＳＴ変換部２２２は、ソースコード２１１２からＡＳＴ２１４２に変換し、ＡＳＴ２１４２を記憶部２１に格納する（Ｓ２２）。図１０は、本実施の形態２にかかる他のソースコード２１１２（図５）から変換された抽象構文木（ＡＳＴ２１４２）の例を示す図である。このように、ＡＳＴ２１４１（図７）及び２１４２（図１０）は、一部が実質的に同様の処理を含むが、要素名の文字列が異なるため、共通する部分木を単純には抽出できないといえる。
【００５９】
続いて、型推論部２２３は、記憶部２１からＡＳＴ２１４２をメモリ２３にロードし、ＡＳＴ２１４２の各ノード又はノード群に対して型情報２５１２を付与し、メモリ２３に格納する（Ｓ２３）。そして、意味推論部２２４は、上記同様に、ＡＳＴ２１４２について、意味情報を付与する（Ｓ２４）。
【００６０】
図１１は、本実施の形態２にかかる他のソースコード２１１２（図５）から変換された抽象構文木（ＡＳＴ２１４２）（図１０）に対して型情報２５１２及び意味情報２５１３が付与された例を示す図である。まず、上記と同様の処理により、ノード群Ｎ４、Ｎ５及びＮ６の属性情報にデータ型ｄｔ４、ｄｔ５及びｄｔ６「ＤａｔａＦｒａｍｅ」が付与されていることを示す。また、ノード群Ｎ４の属性情報に意味情報ｍ４「ＢＭＩ」、ノード群Ｎ５の属性情報に意味情報ｍ５「Ｗｅｉｇｈｔ」、ノード群Ｎ６の属性情報に意味情報ｍ６「Ｈｅｉｇｈｔ」が付与されていることを示す。尚、ノード群Ｎ４、Ｎ５及びＮ６の代わりに、ノードＮ４１、Ｎ５１及びＮ６１の属性情報に意味情報ｍ４、ｍ５及びｍ６がそれぞれ付与されてもよい。
【００６１】
図６に戻り説明を続ける。そして、意味推論部２２４は、メモリ２３に保持されたＡＳＴ２１４２を記憶部２１に保存する（Ｓ２５）。その後、入力部２２１は、全ソースコードがＡＳＴ変換済みか否かを判定する（Ｓ２６）。同様に、残りのソースコードについてもステップＳ２１からＳ２５が行われたものとする。その後、全ソースコードがＡＳＴ変換済みと判定され、ステップＳ２７へ進む。
【００６２】
部分木抽出部２２５は、ＡＳＴ群の中で頻出する部分木を抽出する（Ｓ２７）。すなわち、部分木抽出部２２５は、記憶部２１からＡＳＴ２１４１から２１４ｍをメモリ２３へロードし、全ＡＳＴの中で共通する部分木を抽出し、その出現回数を計数する。例えば、部分木抽出部２２５は、非特許文献１にかかる技術を用いて、ＡＳＴ内の意味情報２５１３を比較して、共通する部分木を抽出する。特に、部分木抽出部２２５は、複数の意味情報の位置関係が共通するノードの集合を、部分木として抽出する。尚、部分木抽出部２２５は、複数の部分木を抽出してもよい。
【００６３】
図１２は、本実施の形態２にかかる型情報及び意味情報が付与された複数の抽象構文木の間で共通する部分木の例を示す図である。例えば図９のＡＳＴ２１４１と図１１のＡＳＴ２１４２とを比較し、意味情報ｍ１、ｍ２及びｍ３の組合せと、意味情報ｍ４、ｍ５及びｍ６の組合せとが共通するため、部分木２１５１が抽出されたことを示す。特に、この場合、ノード「Ａｓｓｉｇｎ」の左辺の意味情報ｍ１とｍ４とが「ＢＭＩ」で一致し、右辺の意味情報ｍ２及びｍ３と意味情報ｍ５及びｍ６とが「Ｗｅｉｇｈｔ」及び「Ｈｅｉｇｈｔ」で一致することを示す。さらに、意味情報ｍ３とｍ６の「Ｈｅｉｇｈｔ」がべき乗（Ｐｏｗ）されている点で一致することを示す。
【００６４】
図６に戻り説明を続ける。部分木抽出部２２５は、抽出した部分木を出力する（Ｓ２８）。例えば、部分木抽出部２２５は、抽出した部分木２１５１から２１５Ｌのそれぞれに、出現回数を対応付けて出力する。これにより、ユーザは、複数のソースコードの間で共通する部分グラフについて、出願頻度ごとに把握することができる。そのため、より出現頻度の高い部分グラフを容易に特定でき、再利用の効率がより高まる。
【００６５】
このように、本実施の形態では、複数のソースコードの間で似たような情報を処理している場合に、処理を抽象化し、変数名等の要素情報の記述を要素の意味を示す文字列に置き換えた上で比較を行うため、実質的に同等な処理を精度良く抽出することができる。つまり、記述が異なる変数名（要素情報）を「意味」という概念に包摂することで、記述上の差異を除外することで、大量のソースコードであっても効率的に抽出できる。
【００６６】
＜実施の形態３＞
本実施の形態３は、上述した実施の形態２の改良例である。本実施の形態３にかかる情報処理装置又は分析システムは、前記抽出された部分グラフから、再利用するための情報、ノウハウに相当する分析ルールを生成する生成部をさらに備えるものである。ここで、生成部は、前記抽出された部分グラフの中に含まれる複数の前記概念情報のうち、一部の概念情報を用いて残りの概念情報を導出できることを示す条件情報を分析ルールとして生成してもよい。また、生成部は、前記抽出された部分グラフの中に含まれる複数の前記概念情報のうち、一部の概念情報を用いて残りの概念情報を導出するための処理コードを分析ルールとして生成してもよい。これにより、部分グラフに対応する個別のソースコードの実装を確認する前に、部分グラフが参考となる条件や、抽象的な表記を用いた処理ロジックを容易に把握することができる。
【００６７】
図１３は、本実施の形態３にかかる分析システム２ａの構成を示すブロック図である。分析システム２ａは、上述した分析システム２を改良したものであり、分析プログラム２１６が分析プログラム２１６ａに置き換わり、記憶部２１内に分析ルール２１７、制御部２２ａ内に生成部２２６が追加されたものである。それ以外の構成は、図３と同等であるため、詳細な説明を省略する。
【００６８】
分析プログラム２１６ａは、分析プログラム２１６の機能に加え、後述する生成部２２６の処理が実装されたコンピュータプログラムである。分析ルール２１７は、条件情報２１７ａ及び処理コード２１７ｂを含む。条件情報２１７ａは、部分木抽出部２２５により抽出された部分木２１５１等の中に含まれる複数の意味情報２５１３のうち、一部の意味情報を用いて残りの意味情報を導出できることを示す条件情報である。処理コード２１７ｂは、部分木抽出部２２５により抽出された部分木２１５１等の中に含まれる複数の意味情報２５１３のうち、一部の意味情報を用いて残りの意味情報を導出するための処理コードである。
【００６９】
図１４は、本実施の形態３にかかる分析ルールの抽出方法の流れを示すフローチャートである。ここで、ステップＳ２１からＳ２７は、上述した図６と同様であるため、説明を省略する。そこで、生成部２２６は、ステップＳ２７により抽出された部分木に含まれる複数の意味情報を用いて、条件情報２１７ａ及び処理コード２１７ｂ（分析ルール）を生成する（Ｓ２９）。そして、部分木抽出部２２５及び生成部２２６は、抽出した部分木２１５１等、生成した条件情報２１７ａ及び処理コード２１７ｂを出力する（Ｓ２８ａ）。
【００７０】
図１５は、本実施の形態３にかかる抽出された分析ルール２１７の例を示す図である。条件情報２１７ａは、一部の意味情報である「Ｗｅｉｇｈｔ」及び「Ｈｅｉｇｈｔ」の組合せを有する場合に、残りの意味情報である「ＢＭＩ」を導出できることを示す条件式である。処理コード２１７ｂは、一部の意味情報である「Ｗｅｉｇｈｔ」及び「Ｈｅｉｇｈｔ」を用いて、残りの意味情報である「ＢＭＩ」を導出するための演算式のコードを示す。
【００７１】
このように、本実施の形態では、実施の形態１及び２の効果に加えて、部分グラフに含まれる複数の概念情報の関係から導かれる情報をユーザに提示することができる。例えば、解析対象のデータに体重や身長が含まれている場合には、過去の類似の処理コードを参酌することで、ＢＭＩという値を導出できることをユーザは知得することができる。また、解析対象のデータに含まれる体重や身長を用いてＢＭＩという値を導出するための処理コードの概要をユーザは把握することができる。これにより、既存のソースコードの再利用をさらに促進することができる。
【００７２】
＜その他の実施の形態＞
尚、上述の実施の形態では、ハードウェアの構成として説明したが、これに限定されるものではない。本開示は、任意の処理を、ＣＰＵ（Central Processing Unit）にコンピュータプログラムを実行させることにより実現することも可能である。
【００７３】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、ＤＶＤ（Digital Versatile Disc）、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００７４】
なお、本開示は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。また、本開示は、それぞれの実施の形態を適宜組み合わせて実施されてもよい。
【００７５】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
（付記１）
所定の要素値を参照するために用いられる複数種類の要素情報と、当該要素値の概念を示す概念情報との対応関係を含む知識情報を記憶する記憶部と、
前記要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する付与部と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する抽出部と、
を備える情報処理装置。
（付記２）
前記付与部は、
各ノードに含まれる前記ソースコード内の記述を前記要素情報とした場合に、前記知識情報において当該要素情報に対応付けられた前記概念情報を特定し、当該特定した概念情報を当該ノード、当該ノードが属する親ノード、又は、当該ノード及び親ノードを含むノード群のいずれかの前記属性情報として付与する
付記１に記載の情報処理装置。
（付記３）
前記要素情報は、前記要素値を参照するために、所定のソースコード内で記述された属性名であり、
前記概念情報は、前記要素値の意味を示す文字列であり、
前記知識情報は、複数種類の前記属性名と前記意味とを含む学習データに基づいて予め機械学習された、前記属性名と前記意味との間の規則性を示す意味推論モデルであり、
前記付与部は、各ノードに対応する前記ソースコード内の前記属性名を前記意味推論モデルに入力して求められる前記意味を示す文字列を当該ノードに関連する属性情報として付与する
付記１又は２に記載の情報処理装置。
（付記４）
前記複数のソースコードのそれぞれは、前記要素情報を属性名として指定可能な構成要素として含む所定のデータ構造を用いて記述されており、
前記複数のソースコードのそれぞれから前記データ構造のデータ型を判別し、当該判別したデータ型を示す型情報を該当するノードに関連する前記属性情報に付与する型判別部をさらに備え、
前記抽出部は、前記型情報をさらに加味して、前記部分グラフを抽出する
付記１乃至３のいずれか１項に記載の情報処理装置。
（付記５）
前記付与部は、前記型判別部により前記型情報が付与されたノードに基づいて前記概念情報を特定し、当該特定した概念情報を当該ノードに関連する属性情報として付与する
付記４に記載の情報処理装置。
（付記６）
前記抽出部は、
前記付与後の各グラフの間で、前記属性情報として付与された複数の前記概念情報の位置関係が共通するノードの集合を前記部分グラフとして抽出する
付記１乃至５のいずれか１項に記載の情報処理装置。
（付記７）
前記抽出された部分グラフの中に含まれる複数の前記概念情報のうち、一部の概念情報を用いて残りの概念情報を導出できることを示す条件情報を生成する生成部をさらに備える
付記６に記載の情報処理装置。
（付記８）
前記抽出された部分グラフの中に含まれる複数の前記概念情報のうち、一部の概念情報を用いて残りの概念情報を導出するための処理コードを生成する生成部をさらに備える
付記６に記載の情報処理装置。
（付記９）
前記抽出部は、
前記複数のグラフ内での前記部分グラフの出現回数を計数する、
付記１乃至８のいずれか１項に記載の情報処理装置。
（付記１０）
前記複数のグラフのそれぞれは、前記複数のソースコードのそれぞれから生成された抽象構文木である
付記１乃至９のいずれか１項に記載の情報処理装置。
（付記１１）
所定の要素値を参照するために用いられる複数種類の要素情報と、当該要素値の概念を示す概念情報との対応関係を含む知識情報を記憶する記憶装置と、
前記要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する付与部と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する抽出部と、
を備える分析システム。
（付記１２）
前記付与部は、
各ノードに含まれる前記ソースコード内の記述を前記要素情報とした場合に、前記知識情報において当該要素情報に対応付けられた前記概念情報を特定し、当該特定した概念情報を当該ノード、当該ノードが属する親ノード、又は、当該ノード及び親ノードを含むノード群のいずれかの前記属性情報として付与する
付記１１に記載の分析システム。
（付記１３）
前記抽出部は、
前記付与後の各グラフの間で、前記属性情報として付与された複数の前記概念情報の位置関係が共通するノードの集合を前記部分グラフとして抽出する
付記１１又は１２に記載の分析システム。
（付記１４）
コンピュータが、
所定の要素値を参照するために用いられる複数種類の要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記複数種類の要素情報と前記要素値の概念を示す概念情報との対応関係を含む知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与し、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する
分析方法。
（付記１５）
所定の要素値を参照するために用いられる複数種類の要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記複数種類の要素情報と前記要素値の概念を示す概念情報との対応関係を含む知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する処理と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する処理と、
をコンピュータに実行させる分析プログラムが格納された非一時的なコンピュータ可読媒体。
【符号の説明】
【００７６】
１  情報処理装置
１１  記憶部
１１１  知識情報
１１１１  要素情報
１１１ｎ  要素情報
１１１０  概念情報
１２  付与部
１３  抽出部
２  分析システム
２ａ  分析システム
２１  記憶部
２１１１  ソースコード
２１１２  ソースコード
２１１ｍ  ソースコード
２１２  ナレッジ
２１３  対象型リスト
２１４１  ＡＳＴ
２５１  ノード
２５１１  要素情報
２５１２  型情報
２５１３  意味情報
２５ｋ  ノード
２１４２  ＡＳＴ
２１４ｍ  ＡＳＴ
２１５１  部分木
２１５Ｌ  部分木
２１６  分析プログラム
２１６ａ  分析プログラム
２１７  分析ルール
２１７ａ  条件情報
２１７ｂ  処理コード
２２  制御部
２２ａ  制御部
２２１  入力部
２２２  ＡＳＴ変換部
２２３  型推論部
２２４  意味推論部
２２５  部分木抽出部
２２６  生成部
２３  メモリ
２４  ＩＦ部
Ｃ１  対象コード
Ｃ２  対象コード
Ｎ１  ノード群
Ｎ１１  ノード
Ｎ１２  ノード
Ｎ１３  ノード
ｄｔ１  データ型
ｍ１  意味情報
ｅ１  要素情報
Ｎ２  ノード群
Ｎ２１  ノード
Ｎ２２  ノード
Ｎ２３  ノード
ｄｔ２  データ型
ｍ２  意味情報
ｅ２  要素情報
Ｎ３  ノード群
Ｎ３１  ノード
Ｎ３２  ノード
Ｎ３３  ノード
ｄｔ３  データ型
ｍ３  意味情報
ｅ３  要素情報
Ｎ４  ノード群
Ｎ４１  ノード
ｄｔ４  データ型
ｍ４  意味情報
Ｎ５  ノード群
Ｎ５１  ノード
ｄｔ５  データ型
ｍ５  意味情報
Ｎ６  ノード群
Ｎ６１  ノード
ｄｔ６  データ型
ｍ６  意味情報
【図１】
2020049622.tif 000003
【図２】
2020049622.tif 000004
【図３】
2020049622.tif 000005
【図４】
2020049622.tif 000006
【図５】
2020049622.tif 000007
【図６】
2020049622.tif 000008
【図７】
2020049622.tif 000009
【図８】
2020049622.tif 000010
【図９】
2020049622.tif 000011
【図１０】
2020049622.tif 000012
【図１１】
2020049622.tif 000013
【図１２】
2020049622.tif 000014
【図１３】
2020049622.tif 000015
【図１４】
2020049622.tif 000016
【図１５】
2020049622.tif 000017
【手続補正書】
【提出日】令和3年2月17日(2021.2.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
所定の要素値を参照するために用いられる複数種類の要素情報と、当該要素値の概念を示す概念情報との対応関係を含む知識情報を記憶する記憶部と、
前記要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する付与部と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する抽出部と、
を備える情報処理装置。
【請求項２】
前記付与部は、
各ノードに含まれる前記ソースコード内の記述を前記要素情報とした場合に、前記知識情報において当該要素情報に対応付けられた前記概念情報を特定し、当該特定した概念情報を当該ノード、当該ノードが属する親ノード、又は、当該ノード及び親ノードを含むノード群のいずれかの前記属性情報として付与する
請求項１に記載の情報処理装置。
【請求項３】
前記要素情報は、前記要素値を参照するために、所定のソースコード内で記述された属性名であり、
前記概念情報は、前記要素値の意味を示す文字列であり、
前記知識情報は、複数種類の前記属性名と前記意味とを含む学習データに基づいて予め機械学習された、前記属性名と前記意味との間の規則性を示す意味推論モデルであり、
前記付与部は、各ノードに対応する前記ソースコード内の前記属性名を前記意味推論モデルに入力して求められる前記意味を示す文字列を当該ノードに関連する属性情報として付与する
請求項１又は２に記載の情報処理装置。
【請求項４】
前記複数のソースコードのそれぞれは、前記要素情報を属性名として指定可能な構成要素として含む所定のデータ構造を用いて記述されており、
前記複数のソースコードのそれぞれから前記データ構造のデータ型を判別し、当該判別したデータ型を示す型情報を該当するノードに関連する前記属性情報に付与する型判別部をさらに備え、
前記抽出部は、前記型情報をさらに加味して、前記部分グラフを抽出する
請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記付与部は、前記型判別部により前記型情報が付与されたノードに基づいて前記概念情報を特定し、当該特定した概念情報を当該ノードに関連する属性情報として付与する
請求項４に記載の情報処理装置。
【請求項６】
前記抽出部は、
前記付与後の各グラフの間で、前記属性情報として付与された複数の前記概念情報の位置関係が共通するノードの集合を前記部分グラフとして抽出する
請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記抽出された部分グラフの中に含まれる複数の前記概念情報のうち、一部の概念情報を用いて残りの概念情報を導出できることを示す条件情報を生成する生成部をさらに備える
請求項６に記載の情報処理装置。
【請求項８】
所定の要素値を参照するために用いられる複数種類の要素情報と、当該要素値の概念を示す概念情報との対応関係を含む知識情報を記憶する記憶装置と、
前記要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する付与部と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する抽出部と、
を備える分析システム。
【請求項９】
コンピュータが、
所定の要素値を参照するために用いられる複数種類の要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記複数種類の要素情報と前記要素値の概念を示す概念情報との対応関係を含む知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与し、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する
分析方法。
【請求項１０】
所定の要素値を参照するために用いられる複数種類の要素情報のいずれかが記述された複数のソースコードのそれぞれにおける処理構造を表す複数のグラフのそれぞれに対して、前記複数種類の要素情報と前記要素値の概念を示す概念情報との対応関係を含む知識情報に基づき、当該グラフ内の各ノードに対応する前記要素情報から特定される前記概念情報を当該ノードに関連する属性情報として付与する処理と、
前記付与後の各グラフの間で、前記概念情報に基づき、共通する部分グラフを抽出する処理と、
をコンピュータに実行させる分析プログラム。
【国際調査報告】
2020049622.tif 000018
2020049622.tif 000019