(57)【要約】【課題】  効率良くかつ的確にソースコードを検索することのできるソースコード検索装置を提案する。【解決手段】  ソースコード構文解析部５において、入力されたソースコードからクラス、メソッドが抽出されて、識別子単語分解部６において単語に分解される。文章構文解析部２において、入力された文章が単語に分解される。単語比較部９において、文章に含まれる単語とメソッドに含まれる単語とが比較される。その際、必要に応じて翻訳辞書部１０において翻訳され、類義語辞書部１１において類義語が取得されて単語比較部９において比較される。クラス・メソッド−文章比較部８において、比較結果に基づいて一致度が取得され、クラス・メソッド候補抽出部１２において、一致度に基づいて検索結果となるメソッドの候補が抽出される。【選択図】        図１
2006235970.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを構成するソースコードを入力するソースコード入力部と、
前記ソースコードの構文を解析し、構成要素を抽出するソースコード構文解析部と、
プログラムの振る舞いを示す文章を入力する文章入力部と、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語とを比較して前記構成要素と前記文章との関連度を得る構成要素−文章比較部と、
前記関連度に基づいて、前記文章が示すプログラムの振る舞いを実現する構成要素の候補を前記ソースコードから抽出する構成要素候補抽出部とを備えた、ソースコード検索装置。
【請求項２】
２つの単語を比較して意味的に同じかどうかを判定する単語比較部と、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書部、および
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書部の少なくとも一方とをさらに備え、
前記構成要素−文章比較部は、前記単語比較部を用いて、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との比較、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも１つの比較を行なって前記関連度を得る、請求項１に記載のソースコード検索装置。
【請求項３】
前記構成要素の識別子を解析して前記構成要素に含まれる単語を抽出する識別子単語分解部と、
前記文章を文法的に解析して前記文章に含まれる単語を抽出する文章構文解析部と、
前記候補の中から構成要素を選択する構成要素選択部とをさらに備えた、請求項１に記載のソースコード検索装置。
【請求項４】
前記文章構文解析部は、前記単語の品詞を特定し、
前記構成要素−文章比較部は、前記品詞を考慮して前記関連度を得る、請求項３に記載のソースコード検索装置。
【請求項５】
前記構成要素にはクラスおよびメソッドが含まれ、
前記構成要素の識別子はクラス名およびメソッド名であって、
前記構成要素候補抽出部は、前記関連度に基づいて、前記ソースコードからクラスおよびメソッドの候補を抽出し、
前記構成要素候補抽出部によって抽出されたメソッドをクラス単位で集計するメソッド集計部と、
前記メソッド集計部によって集計されたメソッドの数をもとにクラスを選択するクラス候補抽出部とをさらに備えた、請求項１に記載のソースコード検索装置。
【請求項６】
プログラムを構成するソースコードの構文を解析し、構成要素を抽出するソースコード構文解析ステップと、
プログラムの振る舞いを示す文章を入力する文章入力ステップと、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語とを比較して前記構成要素と前記文章との関連度を得る構成要素−文章比較ステップと、
前記関連度に基づいて、前記文章が示すプログラムの振る舞いを実現する構成要素の候補を前記ソースコードから抽出する構成要素候補抽出ステップとを備えた、ソースコード検索方法。
【請求項７】
２つの単語を比較して意味的に同じかどうかを判定する単語比較ステップと、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書ステップ、および、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書ステップの少なくとも一方をさらに備え、
前記構成要素−文章比較ステップにおいては、前記単語比較ステップを実行させて、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との比較、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも１つの比較を行なって前記関連度を得る、請求項６に記載のソースコード検索方法。
【請求項８】
前記構成要素の識別子を解析して前記構成要素に含まれる単語を抽出する識別子単語分解ステップと、
前記文章を文法的に解析して前記文章に含まれる単語を抽出する文章構文解析ステップと、
前記候補の中から構成要素を選択する構成要素選択ステップとをさらに備えた、請求項６に記載のソースコード検索方法。
【請求項９】
前記文章構文解析ステップにおいては、前記単語の品詞を特定し、
前記構成要素−文章比較ステップにおいては、前記品詞を考慮して前記関連度を得る、請求項８に記載のソースコード検索方法。
【請求項１０】
前記構成要素にはクラスおよびメソッドが含まれ、
前記構成要素の識別子はクラス名およびメソッド名であって、
前記構成要素候補抽出ステップにおいては、前記関連度に基づいて、前記ソースコードからクラスおよびメソッドの候補を抽出し、
前記構成要素候補抽出ステップにおいて抽出されたメソッドをクラス単位で集計するメソッド集計ステップと、
前記メソッド集計部ステップにおいて集計されたメソッドの数をもとにクラスを選択するクラス候補抽出ステップとをさらに備えた、請求項６に記載のソースコード検索方法。
【請求項１１】
コンピュータにソースコードの検索を実行させるプログラムであって、
プログラムを構成するソースコードの構文を解析し、構成要素を抽出するソースコード構文解析ステップと、
プログラムの振る舞いを示す文章を入力する文章入力ステップと、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語とを比較して前記構成要素と前記文章との関連度を得る構成要素−文章比較ステップと、
前記関連度に基づいて、前記文章が示すプログラムの振る舞いを実現する構成要素の候補を前記ソースコードから抽出する構成要素候補抽出ステップとを実行させる、ソースコード検索プログラム。
【請求項１２】
２つの単語を比較して意味的に同じかどうかを判定する単語比較ステップと、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書ステップ、および、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書ステップの少なくとも一方をさらに実行させ、
前記構成要素−文章比較ステップにおいては、前記単語比較ステップを実行させて、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との比較、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも１つの比較を行なって前記関連度を得る、請求項１１に記載のソースコード検索プログラム。
【請求項１３】
前記構成要素の識別子を解析して前記構成要素に含まれる単語を抽出する識別子単語分解ステップと、
前記文章を文法的に解析して前記文章に含まれる単語を抽出する文章構文解析ステップと、
前記候補の中から構成要素を選択する構成要素選択ステップとをさらに実行させる、請求項１１に記載のソースコード検索プログラム。
【請求項１４】
前記文章構文解析ステップにおいては、前記単語の品詞を特定し、
前記構成要素−文章比較ステップにおいては、前記品詞を考慮して前記関連度を得る、請求項１３に記載のソースコード検索プログラム。
【請求項１５】
前記構成要素にはクラスおよびメソッドが含まれ、
前記構成要素の識別子はクラス名およびメソッド名であって、
前記構成要素候補抽出ステップにおいては、前記関連度に基づいて、前記ソースコードからクラスおよびメソッドの候補を抽出し、
前記構成要素候補抽出ステップにおいて抽出されたメソッドをクラス単位で集計するメソッド集計ステップと、
前記メソッド集計部ステップにおいて集計されたメソッドの数をもとにクラスを選択するクラス候補抽出ステップとをさらに実行させる、請求項１１に記載のソースコード検索プログラム。
【請求項１６】
請求項１１〜１５のいずれかに記載のソースコード検索プログラムを記録した、コンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体に関し、特に、効率よくかつ的確にソースコードを検索することのできるソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体に関する。
【背景技術】
【０００２】
ソフトウェアの多機能化に伴い、必要となるソースコードも増大する傾向にある。少ない労力で多くのソースコードを作成するための方法の１つとして、既存のソフトウェア資産（以前の別の製品等のために作成したソースコード）を再利用するなどの方法がある。一般的に０からソースコードを作成するより、すでに存在する類似機能を有するソフトウェアを元に修正してソースコードを作成する方が労力が少なくて済む。
【０００３】
ただし、既存のソースコードを再利用する場合、設計者はそのソースコードの機能を理解していなければならない。また、既存のソースコードを修正する場合、ソースコードの構造を理解していなければならない。ソースコードのみを解読してその機能や構造を理解するのは、そのソースコードが複雑あるいは大規模になるほど困難な作業となるため、ソースコードを作成する際には、その機能を理解するに助けとなるドキュメントを添付したり（この行為をドキュメント化と呼ぶ）、ソースコードの構造を理解しやすいように、その構造を理解する助けとなる構造図等を添付したり（この行為をモデル化と呼ぶ）するのがよいとされている。
【０００４】
しかしながら、ソフトウェアは上記ドキュメントやモデルが存在していなくても、あるいはソースとドキュメントとの整合性がとれていなくても、動作することは可能である。そのため、短時間で動作するソフトウェアを作成することを優先させ、ドキュメント化やモデル化を十分に行なわないことも、実際の設計ではよく行なわれている。そのため、既存のソフトウェア資産を再利用するに際し、再利用の対象となりうるソフトウェア（ソースコード）が、モデル化もしくはドキュメント化されているとは限らない。また、ソフトウェアに対するモデルやドキュメントが存在したとしても、モデルもしくはドキュメントとソフトウェアとのソースコードの整合性が取れているとは限らない。
【０００５】
ゆえに、既存のソフトウェア資産の再利用の際に、それらのソフトウェアのモデルもしくはドキュメントではなく、直接ソースコードを調査して、再利用可能かどうかを判定し、再利用可能な部分の抽出を行なうことが必要な場合が生じる。
【０００６】
前記に説明した通り、既存のソフトウェアのソースコードの量は膨大であり、これらのソフトウェアのすべての内容を解析し、新たに作成するソフトウェアにおいて必要な機能を実現しているかどうかを確認するのは、莫大なコストを必要とする。
【０００７】
そのため、新たに開発するソフトウェアの機能と同様の機能をもつ部分を、膨大に存在する既存のソフトウェアのソースコードから効率良く検索するための技術が非常に重要となる。
【０００８】
効率良くソースコードを検索する技術として、ソフトウェアのソースコードを直接検索するのではなく、ソースコードの解析を事前に行ない、その解析結果に対して検索を行なうことにより、必要な部分のみを検索対象とした効率の良い検索を行なう技術がすでに存在する。
【０００９】
たとえば、特許文献１においては、ソフトウェアを解析した情報をデータベースとして記憶し、そのデータベースから関数や変数などを検索することが提案されている。
【特許文献１】特開平５−２８９８６２号公報
【特許文献２】特開平８−１６６８７３号公報
【特許文献３】特開平１−１２１９３４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、特許文献１の提案する技術においては、検索における入力として関数名などを用いなければならないが、同義語に対する検索を行なうことができない。
【００１１】
新規ソフトウェアの設計において、既存のソフトウェアと同じ要素を持ったとしてもその要素が新規ソフトウェアと既存ソフトウェアとでまったく同じ用語が用いられるとは限らず類義語が用いられる可能性がある。そのため、類義語による検索が不可能であれば、検索において複数の検索文字列を入力しなければならず、手間がかかるばかりか類義語の種類が多ければいずれかの単語において検索漏れが生じるという問題がある。
【００１２】
また、ソースコードに記載される関数名などは複数の単語が組み合わさってできているものが多く、単語数が多くなってくると検索における入力時の語順と関数名などでの語順とが異なる場合があるという問題がある。しかし、特許文献１に提案される技術においては語順の違いを解決する手段は提供されていない。
【００１３】
上記の問題に対し、特許文献２において、複数の単語からなるクラス名およびメソッド名を単語に分解して比較することにより、抽象クラスを抽出する手法が提案されている。しかし、この手法において比較されるものは第１のプログラムコードと第２のプログラムコードとから抽出されたクラスの情報であり、特定の機能を有するプログラムコードを前記機能から連想される単語や文章を元に抽出することはできないという問題がある。
【００１４】
さらに、ソースコードに記載される関数名などは一般的に英語が用いられることが多く、要求仕様などのドキュメントについてはソフトウェア開発者の母国語、公用語が用いられることが多い。このため検索を行なう際にはソフトウェアドキュメントに記載されている言語をソースコードで用いられている言語に翻訳する必要がある。そのため、この翻訳作業が検索の負荷になるばかりか、翻訳時の訳語の選択によって、上記の類義語における検索漏れと同様に検索漏れが生じる場合があるという問題もある。
【００１５】
上記の問題に対し、特許文献３において、クラスの情報とメソッドの情報とを記憶するテーブルを設け、ユーザが入力した命令を辞書を用いて変換してテーブルの情報を検索することによって命令に対応したメソッドを実行する手法が提案されている。また、この手法では検索に失敗した場合、類義語辞書を用いて得られた類義語によって再度検索を試みるようになっている。
【００１６】
この手法によって、上記の言語の相違による問題を解決することができる。しかし、この手法では、事前にクラスおよびメソッドに関する情報を記憶したテーブルを用意する必要があるほか、メソッドを動詞に対応させているため、複数の単語からメソッド名を命名しているようなメソッドに対しては検索することができない。
【００１７】
また、既存のソースコードにおいては同等の機能を持つクラスおよびメソッドが複数存在する可能性が存在する。もし複数存在する場合、新規ソフトウェアの利用時においては、それらのクラスおよびメソッドの中からいずれを利用するかを選択しなければならない。しかし、特許文献３で提案された手法においては、上記選択のためのステップは存在せず、また利用者がいずれを選択するかの判断に利用可能な情報を提示するためのステップも存在しない。そのため、同等の機能を持つクラスおよびメソッドが複数存在する場合に対応できないという問題がある。
【００１８】
本発明はこれらの問題に鑑みてなされたものであって、効率良くかつ的確にソースコードを検索することのできるソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１９】
上記目的を達成するために、本発明のある局面に従うと、ソースコード検索装置は、プログラムを構成するソースコードを入力するソースコード入力部と、ソースコードの構文を解析し、構成要素を抽出するソースコード構文解析部と、プログラムの振る舞いを示す文章を入力する文章入力部と、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語とを比較して上記構成要素と上記文章との関連度を得る構成要素−文章比較部と、上記関連度に基づいて、上記文章が示すプログラムの振る舞いを実現する構成要素の候補を上記ソースコードから抽出する構成要素候補抽出部とを備える。
【００２０】
また、ソースコード検索装置は、２つの単語を比較して意味的に同じかどうかを判定する単語比較部と、構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書部、および構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書部の少なくとも一方とをさらに備え、構成要素−文章比較部は、単語比較部を用いて、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との比較、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも１つの比較を行なって関連度を得ることが好ましい。
【００２１】
また、ソースコード検索装置は、上記構成要素の識別子を解析して上記構成要素に含まれる単語を抽出する識別子単語分解部と、上記文章を文法的に解析して上記文章に含まれる単語を抽出する文章構文解析部と、上記候補の中から構成要素を選択する構成要素選択部とをさらに備えることが好ましい。
【００２２】
さらに、文章構文解析部は単語の品詞を特定し、構成要素−文章比較部は品詞を考慮して上記関連度を得ることがより好ましい。
【００２３】
また、構成要素にはクラスおよびメソッドが含まれ、構成要素の識別子はクラス名およびメソッド名であって、構成要素候補抽出部は、上記関連度に基づいて、上記ソースコードからクラスおよびメソッドの候補を抽出し、ソースコード検索装置は、構成要素候補抽出部によって抽出されたメソッドをクラス単位で集計するメソッド集計部と、メソッド集計部によって集計されたメソッドの数をもとにクラスを選択するクラス候補抽出部とをさらに備えることが好ましい。
【００２４】
本発明の他の局面に従うと、ソースコード検索方法は、プログラムを構成するソースコードの構文を解析し、構成要素を抽出するソースコード構文解析ステップと、プログラムの振る舞いを示す文章を入力する文章入力ステップと、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語とを比較して上記構成要素と上記文章との関連度を得る構成要素−文章比較ステップと、上記関連度に基づいて、上記文章が示すプログラムの振る舞いを実現する構成要素の候補を上記ソースコードから抽出する構成要素候補抽出ステップとを備える。
【００２５】
また、ソースコード検索方法は、２つの単語を比較して意味的に同じかどうかを判定する単語比較ステップと、構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書ステップ、および、構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書ステップの少なくとも一方をさらに備え、構成要素−文章比較ステップにおいては、単語比較ステップを実行させて、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との比較、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも１つの比較を行なって関連度を得ることが好ましい。
【００２６】
また、ソースコード検索方法は、上記構成要素の識別子を解析して上記構成要素に含まれる単語を抽出する識別子単語分解ステップと、上記文章を文法的に解析して上記文章に含まれる単語を抽出する文章構文解析ステップと、上記候補の中から構成要素を選択する構成要素選択ステップとをさらに備えることが好ましい。
【００２７】
さらに、文章構文解析ステップにおいては、単語の品詞を特定し、構成要素−文章比較ステップにおいては、品詞を考慮して上記関連度を得ることがより好ましい。
【００２８】
また、構成要素にはクラスおよびメソッドが含まれ、構成要素の識別子はクラス名およびメソッド名であって、構成要素候補抽出ステップにおいては、上記関連度に基づいて、上記ソースコードからクラスおよびメソッドの候補を抽出し、ソースコード検索方法は、構成要素候補抽出ステップにおいて抽出されたメソッドをクラス単位で集計するメソッド集計ステップと、メソッド集計部ステップにおいて集計されたメソッドの数をもとにクラスを選択するクラス候補抽出ステップとをさらに備えることが好ましい。
【００２９】
本発明のさらに他の局面に従うと、ソースコード検索プログラムは、コンピュータにソースコードの検索を実行させるプログラムであって、プログラムを構成するソースコードの構文を解析し、構成要素を抽出するソースコード構文解析ステップと、プログラムの振る舞いを示す文章を入力する文章入力ステップと、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語とを比較して上記構成要素と上記文章との関連度を得る構成要素−文章比較ステップと、上記関連度に基づいて、上記文章が示すプログラムの振る舞いを実現する構成要素の候補を上記ソースコードから抽出する構成要素候補抽出ステップとを実行させる。
【００３０】
また、ソースコード検索プログラムは、２つの単語を比較して意味的に同じかどうかを判定する単語比較ステップと、構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書ステップ、および、構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書ステップの少なくとも一方をさらに実行させ、構成要素−文章比較ステップにおいては、単語比較ステップを実行させて、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との比較、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも１つの比較を行なって関連度を得ることが好ましい。
【００３１】
また、ソースコード検索プログラムは、上記構成要素の識別子を解析して上記構成要素に含まれる単語を抽出する識別子単語分解ステップと、上記文章を文法的に解析して上記文章に含まれる単語を抽出する文章構文解析ステップと、上記候補の中から構成要素を選択する構成要素選択ステップとをさらに実行させることが好ましい。
【００３２】
さらに、文章構文解析ステップにおいては、単語の品詞を特定し、構成要素−文章比較ステップにおいては、品詞を考慮して上記関連度を得ることがより好ましい。
【００３３】
また、構成要素にはクラスおよびメソッドが含まれ、構成要素の識別子はクラス名およびメソッド名であって、構成要素候補抽出ステップにおいては、上記関連度に基づいて、上記ソースコードからクラスおよびメソッドの候補を抽出し、ソースコード検索プログラムは、構成要素候補抽出ステップにおいて抽出されたメソッドをクラス単位で集計するメソッド集計ステップと、メソッド集計部ステップにおいて集計されたメソッドの数をもとにクラスを選択するクラス候補抽出ステップとをさらに実行させることが好ましい。
【００３４】
本発明のさらに他の局面に従うと、記録媒体は、上記いずれかに記載のソースコード検索プログラムを記録した、コンピュータ読取可能な記録媒体である。
【発明を実施するための最良の形態】
【００３５】
以下に、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがってそれらについての詳細な説明は繰返さない。
【００３６】
以下の実施の形態においては、本発明にかかるソースコード検索装置を一般的なコンピュータである情報処理装置で実現する、または本発明にかかるソースコード検索装置がコンピュータに実装されている具体例を示しているが、本発明にかかるソースコード検索装置を実現あるいは実装する情報処理装置はコンピュータに限定されず、その他いずれの装置であってもよい。
【００３７】
［第１の実施の形態］
図１は、第１の実施の形態にかかる情報処理装置の構成の具体例を示す図である。
【００３８】
本実施の形態にかかる情報処理装置は、ソースコード検索装置に対して文章を入力する文章入力部１と、入力された文章を解析し、単語に分解する文章構文解析部２と、文章構文解析部２の解析の結果として分解された単語を記憶する文章解析情報記憶部３と、ソースコードを入力するソースコード入力部４と、入力されたソースコードを解析し、クラス、メソッドなどの構成要素を抽出するソースコード構文解析部５と、クラス名、メソッド名などの識別子（クラス、メソッドなどを識別するための一意な文字列）を単語に分解する識別子単語分解部６と、ソースコードから抽出されたクラス、メソッドなどの構成要素とその識別子とを単語に分解した結果を格納するクラス・メソッド記憶部７と、文章解析情報記憶部３に記憶された文章とクラス・メソッド記憶部７に記憶されたメソッドとを比較するクラス・メソッド−文章比較部８と、文章とメソッドに含まれる単語とを比較する単語比較部９と、文章に含まれる単語を文章が記述されている言語からソースコード中の識別子で用いられている言語に翻訳する翻訳辞書部１０と、指定された単語の類義語を取得する類義語辞書部１１と、文章とメソッドとの比較によって検索結果となるメソッドの候補を抽出するクラス・メソッド候補抽出部１２と、抽出された候補からメソッドを選択するクラス・メソッド選択部１３とを含んで構成される。
【００３９】
本実施の形態においては、例として、情報処理装置で以下のような処理を行なうためのネットワークセッションを実行するサーバを実現するためのクラスを検索する処理について説明する。
【００４０】
・接続を待つ
・接続を受け入れる
・セッションを開始する
この例においては、サーバクラスが実装すべき処理は次に述べる順序で実行される。サーバはクライアントからの接続を待ち、接続が行なわれれば、そのクライアントと接続してよいかを判定し、接続可能であれば接続を受け入れる。そして、サーバはネゴシエーションを行なって必要な事前情報をクライアントから取得する。ネゴシエーションが完了すれば、サーバ、クライアントで実際のやり取りを行なうセッションが開始される。必要なやりとりが終了すれば、セッションを終了する。
【００４１】
上記例において、情報処理装置は、「接続を受け入れる」処理を実現するメソッドを検索する。
【００４２】
図２は、本実施の形態にかかる情報処理装置において上記例の「接続を受け入れる」処理を実現するメソッドを検索する処理を示すフローチャートである。
【００４３】
図２を参照して、本実施の形態にかかる情報処理装置において「接続を受け入れる」処理を実現するためには、始めに、ユーザの入力した文章が解析され（ステップＳ１）、続いてソースコードが解析され（ステップＳ２）、この解析結果に基づいて、ユーザの入力した文章とソースコードと比較される（ステップＳ３）。比較の結果がユーザに提示され、ユーザの選択を受付ける（ステップＳ４）。
【００４４】
以下に、上記の各処理（ステップＳ１〜ステップＳ４）について、具体例を挙げながら説明する。
【００４５】
まず、はじめにユーザの入力した文章の解析が行なわれる。
【００４６】
図３は、ステップＳ１の、入力文章解析の手順を示すフローチャートである。入力文章解析の手順について図３を用いて説明する。
【００４７】
図３を参照して、ユーザが文章入力部１を介して振る舞いを示す文章を入力すると、入力した文章の読み込みが行なわれる（ステップＳ１０１）。ここで、「接続を受け入れる」という文が文章入力部１から読み込まれる。
【００４８】
文章構文解析部２は読み込まれた文章を解析し、文章に含まれる単語を抽出するとともに、その文法的要素を特定する（ステップＳ１０２）。
【００４９】
ステップＳ１０１で、ユーザが「接続を受け入れる」を入力した場合は、当該文章はステップＳ１０２で「接続」、「を」、「受け入れる」のように単語に分解され、それぞれ「名詞」、「助詞」、「動詞」のように品詞情報が付加される。そして、この内容が文章解析情報記憶部３に記憶される（ステップＳ１０３）。「接続を受け入れる」という文は、図４に示すように格納される。
【００５０】
以上でステップＳ１の処理を終了し、メインルーチンに処理を戻す。
【００５１】
入力した文章の解析に続いて、ソースコードの解析が行なわれる。図５は、ステップＳ２の、ソースコードの解析の手順を示すフローチャートである。図５を用いてソースコードを解析する手順について説明する。
【００５２】
ソースコード入力部４は、指定されたソースコードを読み込む（ステップＳ２０１）。既存のコードとして図６に示すソースコードが存在するものとし、ここでは、かかるソースコードがソースコード検索装置に対して読込まれるものとする。なお、図では単一のソースファイルからなるコードであるかのように表現されているが、入力されるコードは複数のソースファイルからなるものとする。
【００５３】
図６に示されたソースコードは、あるクライアント・サーバ方式のネットワークセッションを行なうサーバとクライアントとの実装におけるクラス宣言であり、クラスsession_serverがサーバクラスの宣言、session_clientがクライアントクラスの宣言である。
【００５４】
続いて、ソースコード構文解析部５は入力されたソースコードの解析を行なう。ソースコードの解析により、そのソースコードに含まれるクラス、メソッドなどを抽出する（ステップＳ２０２）。この例では図７のように抽出される。
【００５５】
続いて、識別子単語分解部６は抽出されたクラス、メソッドの識別子を単語に分解する（ステップＳ２０３）。
【００５６】
一般的なプログラミング言語の文法では、メソッド名、クラス名に対応する識別子は１つのトークン（字句）で構成されなければならない。そのため、メソッドの処理を端的に表わす表現が複数の単語からなる場合、それらの単語を一定の規則にしたがって連結して１つのトークンとし、それをメソッド名とする。単純に単語を連結すると判別しづらいメソッド名になるため、たとえば単語の間に、アンダースコア（＿）を挿入し、「accept_connection」などとする。他にも単語の先頭を大文字で表わす「AcceptConnection」といったメソッド名の表記もある。これらの規則に基づいて識別子単語分解部６はメソッド名を単語に分解する。図８および図９に示すように、「accept_connection」というメソッド名から「accept」および「connection」の単語が、「AcceptConnection」からも同じく「accept」および「connection」の単語がそれぞれ抽出される。
【００５７】
続いて、クラス・メソッド記憶部７はソースコード構文解析部５が抽出したクラス、メソッド、属性についての情報を、識別子単語分解部６によって分解された単語とあわせて記憶する（ステップＳ２０４）。
【００５８】
以上でステップＳ２の処理を終了し、メインルーチンに処理を戻す。
【００５９】
入力した文章およびソースコードの解析が行なわれると、続いてこの解析結果に基づいて入力した文章と、ソースコードとの比較が行なわれる。図１０は、ステップＳ３の、ユーザの入力した文章の内容とソースコードの内容とを比較する手順を示すフローチャートである。図１０を用いて文章の内容とソースコードの内容との比較の手順について説明する。
【００６０】
クラス・メソッド−文章比較部８はクラス・メソッド記憶部７に記憶されたクラスからクラスを１つ選択する（ステップＳ３０１）。現在クラス・メソッド記憶部７にはsession_serverクラスおよびsession_clientクラスが記憶されている。ステップＳ３０１では、まずはじめにsession_serverクラスが選択されるものとする。
【００６１】
クラス・メソッド−文章比較部８は選択されたクラスに存在するメソッドから、メソッドを１つ選択する（ステップＳ３０２）。session_serverクラスには「wait_connection」，「accept_connection」，「start」の３つのメソッドが定義されている。ここで、wait_connectionメソッドが選択されるものとする。なお、すべてのメソッドに対して処理が適用されればよいため、ステップＳ３０２ではどのような基準で選択してもよく、３つのメソッドのうちいずれが選ばれてもよい。
【００６２】
クラス・メソッド−文章比較部８は、単語比較部９に対して、ステップＳ３０２で選択されたメソッドに含まれる単語と文章解析情報記憶部３に記憶されている文章に含まれる単語とを比較するよう要求する（ステップＳ３０３）。ここでは、メソッド名「wait_connection」に含まれる単語と、文章「接続を受け入れる」に含まれる単語との比較を要求する。
【００６３】
単語比較部９は要求にしたがって、クラス・メソッド記憶部７に記憶されているメソッドに含まれる単語と文章解析情報記憶部３に記憶された文章に含まれる単語との比較を行なう（ステップＳ３０４）。ここでは、文章「接続を受け入れる」とメソッド名「wait_connection」とにそれぞれ含まれる単語の比較を行なう。
【００６４】
ステップＳ３０４での単語比較部９における単語の比較の詳細について図１１を用いて説明する。図１１は単語比較部９における単語比較の手順を示すフローチャートである。以下このフローチャートに基づいて単語の比較手順について説明する。
【００６５】
単語比較部９は文章解析情報記憶部３に記憶されている文章の単語とクラス・メソッド記憶部７に記憶されているメソッドの単語との比較を行なう（ステップＳ４０１）。ここでは、「接続」，「受け入れる」という単語と、「wait」，「connection」という単語とを比較する。それぞれ２単語ずつ含まれているため、比較する組み合わせとして、２×２＝４通りの組み合わせが存在するが、それらについてすべて比較を行なう。なお、この４通りの比較の組み合わせは日本語の単語と英単語との比較となるので、まったく一致することはないのであるが、比較の対象が英単語を含む文章であったり、英文そのものであったりする場合もあり、その可能性を含めて考えれば比較することに意味はある。
【００６６】
ステップＳ４０１での比較の結果、単語が一致したかどうかによって条件分岐を行なう。
【００６７】
一致していれば（ステップＳ４０１５でＹＥＳ）、単語比較部９はその結果を「一致」としてクラス・メソッド−文章比較部８に返す(ステップＳ４０５)。
【００６８】
一致していなければ（ステップＳ４０１５でＮＯ）、単語比較部９は翻訳辞書部１０を用いて文章解析情報記憶部３に記憶されている単語を翻訳し、その結果とクラス・メソッド記憶部７に記憶されているメソッド名の単語とを比較する（ステップＳ４０２）。この翻訳結果は、さらに文章解析情報記憶部３に記憶される。なお、翻訳対象は必ずしも入力文章に含まれる単語に限定されず、必要に応じてはメソッド名に含まれている単語であってもよい。または、入力文章に含まれる単語およびメソッド名に含まれている単語の双方であってもよい。
【００６９】
この例では一致していないため、条件分岐によって一致しない場合の処理（ステップＳ４０２）が行なわれる。したがって、ステップＳ４０２で、「接続」が「connection」、「受け入れる」が「accept」と翻訳される。そして、「connection」，「accept」のグループと、「wait」，「connection」のグループとの比較が行なわれる。その結果、「connection」は両グループに一致しているが、「wait」，「accept」が一致しない。
【００７０】
比較が完了したら、単語が一致したかどうかで条件分岐を行なう。
【００７１】
一致していれば（ステップＳ４０２５でＹＥＳ）、単語比較部９はその結果を「一致」としてクラス・メソッド−文章比較部８に返す。
【００７２】
一致していなければ（ステップＳ４０２５でＮＯ）、単語比較部９は類義語辞書部１１を用いて、文章解析情報記憶部３に記憶されている単語の翻訳結果の類義語を取得し、その類義語とクラス・メソッド記憶部７に記憶されているメソッド名の単語とを比較する（ステップＳ４０３）。なお、類義語を取得する対象は必ずしも入力文章に含まれる単語に限定されず、必要に応じてはメソッド名に含まれている単語であってもよい。または、入力文章に含まれる単語およびメソッド名に含まれている単語の双方であってもよい。
【００７３】
この例では、類義語辞書部１１は、「accept」の類義語として「receive」、「connection」の類義語として「joint」をそれぞれ抽出する。この例では類義語がそれぞれ１つずつ選択されているが、類義語は複数存在してもよく、その場合は複数存在する類義語のすべてが比較対象となる。そして、選択された類義語のグループ「receive」，「joint」と、「wait」，「connection」との比較が行なわれる。なお、この例では類義語がそれぞれ１つずつ選択されているが、類義語は複数存在してもよく、その場合は複数存在する類義語のすべてが比較対象となる。比較を行なうと、単語に一致は見られない。
【００７４】
なお、ここでは、ステップＳ４０２で得られた翻訳結果の類義語を取得するものとしているが、文章解析情報記憶部３に記憶されている翻訳前の単語の類義語を取得してもよい。その場合、図１１に示されたステップＳ４０２，Ｓ４０３の処理順を逆にし、類義語の比較を行なってから翻訳結果の比較を行なうことも考えられる。
【００７５】
比較が完了すると、条件分岐が行なわれる。
【００７６】
一致していれば（ステップＳ４０３５でＹＥＳ）、単語比較部９はその結果を「一致」としてクラス・メソッド−文章比較部８に返す。
【００７７】
一致していなければ（ステップＳ４０３５でＮＯ）、これまでの比較結果で最も多くの単語が一致していた結果を比較結果として、クラス・メソッド−文章比較部８に返す（ステップＳ４０４）。
【００７８】
この例では、ステップＳ４０２で比較した時の「connection」一語が一致した結果を比較結果として、クラス・メソッド−文章比較部８に返す。
【００７９】
なお、本実施の形態にかかる情報処理装置では、単語を文章中で使用されている言語からソースコード中の識別子などに使用されている言語に変換する辞書と、類義語を取得する辞書との２つの辞書が用いられているが、そのほかの辞書を追加して用いてもよい。たとえば、ソースコード中の識別子に使用されている言語は英語が主であるが、英語を得意としないソフトウェア開発者がソフトウェアを開発した場合に、ソースコードにスペルミスのある単語が含まれているケースが散見される。このような場合に対応するために、スペルミス修正候補辞書などを設けて、検索精度を向上させることが考えられる。
【００８０】
以上でステップＳ３０４での単語比較部９における単語の比較が終了し、クラス・メソッド−文章比較部８は、その結果に基づいて一致度を求める（ステップＳ３０５）。この例においては、一致した単語の数を一致度とする。なお、この例においては単語数で一致度としているが、単語の品詞情報を用いて重付けを行なった結果を一致度としてもよい。たとえば、メソッドは振舞いを表わすものであるため、振舞いを表わす動詞が一致した場合に重付けを大きくすることが考えられる。この場合に、動詞が一致すれば２点、名詞が一致した場合は１点とし、その合計を一致度として検索精度を向上させる仕組みを導入してもよい。この例においては、「connection」一語が一致しているので一致度は１とする。
【００８１】
メソッド名と文章解析情報記憶部３に記憶された文章とを比較して、当該クラスに存在するすべてのメソッドについて比較を実行したかの判定が行なわれ、その結果により条件分岐が行なわれる。すべてのメソッドを比較したならば（ステップＳ３０５１でＹＥＳ）、次の処理が行なわれる。比較を行なっていないメソッドがまだ存在する場合（ステップＳ３０５１でＮＯ）、ステップＳ３０２からの処理が繰返される。
【００８２】
この例では、再び処理がステップＳ３０２に戻り、残りのaccept_connectionメソッド，startメソッドのうち、accept_connectionメソッドが選択される。
【００８３】
ステップＳ３０４のうちのステップＳ４０１では、先に「wait_connection」が選択されたときと同様に、文章「接続を受け入れる」に含まれる単語と、メソッド名「accept_connection」に含まれる単語との比較が行なわれる。すなわち、単語比較部９は「接続」，「受け入れる」という単語と、「accept」「connection」との比較を行なう。先の比較と同様に４通りの組み合わせについて比較を行なう。ここでは一致しない。
【００８４】
続いてステップＳ４０２で単語比較部９は「接続」，「受け入れる」という単語を翻訳辞書部１０を用いて翻訳し、それぞれ翻訳結果「connection」，「accept」を得る。得られた翻訳結果とメソッド内に含まれる単語「accept」「connection」との比較を行なう。その結果、双方とも「accept」「connection」で、単語が完全に一致する。２単語が一致しているので、ここでの一致度は２とする。
【００８５】
再度、ステップＳ３０５１で、当該クラスに存在するすべてのメソッドについて比較を実行したかの判定が行なわれ、この体例の場合、条件分岐によりステップＳ３０２に戻る。ステップＳ３０２で、最後に残ったstartメソッドが選択される。
【００８６】
ステップＳ３０４のうちのステップＳ４０１で、これまでと同様に、文章「接続を受け入れる」に含まれる単語と、メソッド名「start」に含まれる単語との比較が行なわれる。すなわち、単語比較部９は、「接続」，「受け入れる」という単語と、「start」との比較を行なう。ここでは一致しない。
【００８７】
続いて、ステップＳ４０２で単語比較部９は「接続」，「受け入れる」という単語を翻訳辞書部１０を用いて翻訳し、それぞれ翻訳結果「connection」，「accept」を得る。得られた翻訳結果とメソッド内に含まれる単語「start」との比較を行なう。ここでは一致しない。
【００８８】
ステップＳ４０３で単語比較部９は、類義語辞書部１１を用いて「start」の類義語「begin」を取得し、翻訳結果「connection」，「accept」とメソッド内に含まれる単語の類義語「begin」との比較を行なう。ここでも一致しないので、一致度は０とする。
【００８９】
ステップＳ３０５１で、当該クラスに存在するすべてのメソッドが処理されたどうかの判定が行なわれる。この例の場合、session_serverクラスに存在する３つのメソッドすべてに対して処理が行なわれたので（ステップＳ３０５１でＹＥＳ）、続いて、ステップＳ３０５２で、すべてのクラスが処理されたかどうかの判定が行なわれる。処理を行なっていないクラスがまだ存在する場合（ステップＳ３０５２でＮＯ）、ステップＳ３０１からの処理が繰返される。
【００９０】
この例の場合、まだsession_clientクラスは処理されていないので、ステップＳ３０１に戻り、残りのsession_clientクラスが選択される。session_clientクラスには、connectメソッドとsendメソッドとの２つのメソッドがある。ステップＳ３０２では、まずはconnectメソッドが選択される。
【００９１】
ステップＳ３０４のうちのステップＳ４０１では、単語比較部９は「接続」、「受け入れる」の２単語と、「connect」との比較を行なう。ここでは一致しない。
【００９２】
ステップＳ４０２で単語比較部９は「接続」、「受け入れる」の２単語を翻訳辞書部１０を用いて翻訳してそれぞれ翻訳結果「connection」，「accept」を取得し、翻訳結果と「connect」との比較を行なう。ここで、「connection」は「connect」から派生した単語なので、ここでは単語「connection」と単語「connect」とを同じとする。
【００９３】
さらにステップＳ４０３で、単語比較部９は類義語辞書部１１を用いて、文章解析情報記憶部３に記憶されている単語の翻訳結果の類義語を得る。そしてその類義語とクラス・メソッド記憶部７に記憶されているメソッド名の単語とを比較する。類義語は、それぞれ同様に「connection」に対して「joint」、「accept」に対して「receive」であり、「joint」，「receive」と、「connect」とを比較する。ここでは一致しない。
【００９４】
なお、図１１に示される処理では、ステップＳ４０１〜Ｓ４０３のいずれかの比較処理において単語の一致があった場合にはその時点で比較処理を終了するものとしているが、さらに以降の比較処理を続け、最も一致した処理の結果を全体の比較結果とすることもできる。この例では、上記ステップＳ４０２で翻訳後の単語の一致を得ているがさらにステップＳ４０３で類義語の比較まで行ない、各比較の中で最も一致した結果を全体の比較結果とすることができる。すなわち、ステップＳ４０２で「connection」，「accept」と「connect」とを比較したときに一単語一致しているのが最も一致したケースなので、これを比較結果とする。一単語一致しているので一致度は１とする。
【００９５】
再び処理がステップＳ３０２に戻り、残りのsendメソッドが選択される。
【００９６】
ステップＳ３０４のうちのステップＳ４０１では、単語比較部９は「接続」，「受け入れる」の２単語と、「send」の１単語との比較を行なう。ここでは一致しない。
【００９７】
続いて、ステップＳ４０２で、単語比較部９は「接続」，「受け入れる」の２単語を翻訳辞書部１０を用いて翻訳して得られた「connection」「accept」の２単語と、「send」との比較を行なう。ここでは一致しない。
【００９８】
最後に、ステップＳ４０３で、単語比較部９は「接続」，「受け入れる」の２単語を類義語辞書部１１を用いて得られた類義語「joint」，「receive」の２単語と、「send」の１単語との比較を行なう。ここでは一致しない。これらの比較より、単語の一致はないことを比較結果とする。一致度は０とする。
【００９９】
ステップＳ３０５１で、この例の場合、session_clientクラスのすべてのメソッドを比較対象としたことが判断される（ステップＳ３０５１でＹＥＳ）。
【０１００】
ステップＳ３０５２で、すべてのクラスが処理されたことが判断されると（ステップＳ３０５２でＹＥＳ）、条件分岐によって、ステップＳ３０６で、クラス・メソッド候補抽出部１２は、単語の一致が見られたメソッドを候補として抽出する。ここでは、一致度が２である、session_serverクラスのaccept_connectionメソッドと、一致度が１である、session_serverのwait_connectionメソッドと、session_clientクラスのconnectメソッドとが候補として抽出される。
【０１０１】
以上でステップＳ３の処理を終了し、メインルーチンに処理を戻す。
【０１０２】
なお、上述のステップＳ３の処理では、具体的に、単語をそのまま比較する、翻訳結果を比較する、および類義語を比較するという３種類の方法で単語の一致が見られるまで順に比較する、あるいはすべて行なって比較結果を得るものとしているが、その他の方法が採用されてもよい。また、採用される比較方法は多い方がより一致するメソッドの候補が得られるが、処理が複雑になったり処理時間がかかったりするため、必要に応じては３種類以下の方法での比較のみが行なわれてもよい。
【０１０３】
ステップＳ４では、ステップＳ３で抽出された単語の一致が見られたメソッドの候補が図１には示されていない表示部等の提示手段によってユーザに提示され、クラス・メソッド選択部１３によって、上記の候補の中からユーザが選択を行なう。ここでは抽出された上記の３つのメソッドが、一致の度合いの順に並べられて提示される。
【０１０４】
また、クラス・メソッド選択部１３では抽出された候補のメソッドの実装を参照することができ、ユーザは並べられた順に実装を確認し、文章で表記された機能を最もよく実現しているメソッドを選択することができる。多くの場合は、一致度が高かったクラスsession_serverのaccept_connectionメソッドが選択の対象となる。
【０１０５】
［第２の実施の形態］
全体として異なる機能を提供するクラスであっても、その一部が同様である機能を提供しているということは比較的よくあることである。
【０１０６】
たとえば、ネットワークセッションの実装であるsession_sereverクラスと、ネットワークでのデータ送受信の実装であるnetwork_server_streamクラスとがソース内に存在するものとする。これらのクラスは、それぞれ上位にあるネットワークセッション、下位にあるネットワークデータ転送を実現するものであるが、上位・下位の差こそあれ、相手の接続を待つという共通した機能を有し、同じ名前のメソッドを持っている。
【０１０７】
このように、同様の機能を提供する異なるクラスが複数存在する場合は、単一の機能を表わす文章だけではメソッドを完全に特定することは難しい。そのため、求められる機能が複数存在する場合は、そのすべてを検索に用い、その複数の機能のうちどれだけの機能に合致する機能を提供しているかで、目的のクラスを絞り込む方法が必要である。
【０１０８】
図１２は、第２の実施の形態にかかる情報処理装置の構成の具体例を示す図である。ここで第２の実施の形態にかかる情報処理装置の構成をこの図を用いて説明する。
【０１０９】
図１２を参照して、本実施の形態にかかる情報処理装置の構成は、図１に示された第１の実施の形態にかかる情報処理装置の構成とほぼ同一であるが、第２の実施の形態にかかる情報処理装置は、第１の実施の形態にかかるクラス・メソッド選択部１３に替えて、メソッド集計部１４およびクラス候補抽出部１５を含んで構成される。
【０１１０】
メソッド集計部１４は、クラスに存在する複数のメソッドのうち、どれだけのメソッドがクラス・メソッド候補抽出部１２によってメソッド候補として選択されたかを集計する。クラス候補抽出部１５は、メソッド集計部１４での集計結果に基づいて、入力された複数の文章から、それらの文章に該当する機能を備えたクラスの候補を抽出する。
【０１１１】
本実施の形態においては、具体例として、情報処理装置で、３つの文章「接続を待つ」，「接続を受け入れる」，「セッションを開始する」について、これらの文章が示す機能をすべて提供しているクラスを検索する処理について説明する。
【０１１２】
図１３は、本実施の形態にかかる情報処理装置においてクラスを検索する手順を示すフローチャートである。なお、検索の対象となるソースコードは、図１４に示されるクラスの宣言を含んでおり、session_serverクラスおよびnetwork_server_streamクラスが宣言されている。また、また、初期状態ではメソッド集計部１４にはメソッドが記憶されていない状態である。この状態を表わす図が図１５である。図１５は、メソッド集計部１４にクラスおよびメソッドが記録されていないことを示す記号「Ｎ／Ａ」が記録されていることを示している。
【０１１３】
まずは、情報処理装置に入力された文章から１つの文章が選択される（ステップＳ５０１）。ここでは「接続を待つ」，「接続を受け入れる」，「セッションを開始する」という３つの文章から１つを選択する。そして選択された「接続を待つ」という文章に対応するメソッドの候補を抽出する。
【０１１４】
文章入力部１は、ステップＳ５０１で選択された「接続を待つ」という文章をソースコード検索装置に対して読込み、対応するメソッドの候補を抽出する（ステップＳ５０２）。ステップＳ５０２での抽出の詳細については、第１の実施の形態での処理と同一であるため、ここでの説明は繰り返さない。なお、ここでソースコード入力部４は図１４に示されるソースコードを読み込むものとする。
【０１１５】
ステップＳ５０２での処理の結果、クラス・メソッド候補抽出部１２はsession_serverクラスのwait_connectionメソッド、およびnetwork_server_streamクラスのwait_connectionメソッドを候補として抽出する。ここでメソッド集計部１４は、ステップＳ５０２で候補として抽出されたクラスおよびメソッドを記憶する（ステップＳ５０３）。図１６に、ステップＳ５０３でのメソッド集計部１４の記憶内容の具体例を示す。ここでは、上記２メソッドが記憶の対象となる。メソッド集計部１４に記憶されているメソッドは図１６に示すようにクラス単位で分類して記憶される。図の太線部分が新たに記憶されたメソッドである。現時点では初期状態でメソッドは一切記憶されていないので、新たに記憶されたメソッドのみが記憶されている状態である。
【０１１６】
さらに、すべての文章について処理したかどうかが判定され、その結果によって条件分岐が行なわれる。ここではまだ「接続を受け入れる」「セッションを開始する」という２つの文章が残っているので（ステップＳ５０３５でＮＯ）、ステップＳ５０１に戻る。
【０１１７】
続いて、ステップＳ５０１において「接続を受け入れる」という文章が選択され、「接続を受け入れる」という文章に対応するメソッドの候補が抽出される。ステップＳ５０２において、これまでと同様の手順により、クラス・メソッド候補抽出部１２は、session_serverクラスのaccpet_connectionメソッドとnetwork_server_sessionクラスのaccept_connectメソッドとを候補として抽出する。
【０１１８】
ステップＳ５０３において、メソッド集計部１４は、ステップＳ５０２で候補として抽出された２メソッドを記憶する。ここで記憶されているメソッドは図１７に示すようになる。図の太線部分が新たに記憶されたメソッドを示している。
【０１１９】
ステップＳ５０３５においてすべての文章について処理したかどうかが判定され、その結果によって条件分岐が行なわれる。ここではまだ「セッションを開始する」という文章が残っているので（ステップＳ５０３５でＮＯ）、ステップＳ５０１に戻り、「セッションを開始する」という文章に対応するメソッドの抽出が行なわれる。ステップＳ５０２において、第１の実施の形態と同様の手順により、クラス・メソッド候補抽出部１２はsession_serverクラスのstartメソッドを候補として抽出する。
【０１２０】
ステップＳ５０３において、メソッド集計部１４は、ステップＳ５０２で候補として抽出された上記メソッドを記憶する。ここで記憶されたメソッドは図１８に示すようになる。図の太線部分が新たに記憶されたメソッドを示している。
【０１２１】
ステップＳ５０３５においてすべての文章について処理したかどうかが判定され、その結果によって条件分岐が行なわれる。ここでは、すべての文章について処理が完了しているので（ステップＳ５０３５でＹＥＳ）、次のステップに進む。
【０１２２】
続いて、メソッド集計部１４は、記憶されているメソッドが属するすべてのクラスに対して、記憶されたメソッド数を集計する（ステップＳ５０４）。図１８に示される記憶内容を元に集計を行なうと、session_serverクラスは３メソッド、network_server_streamクラスは２メソッドとなる。
【０１２３】
続いて、クラス候補抽出部１５は、ステップＳ５０４でのメソッド集計部１４の集計結果に基づいて、候補となるクラスを抽出する（ステップＳ５０５）。ここでは、集計されたメソッド数が多いクラスを候補とする。集計されたメソッド数が最大となるクラスが複数存在する場合は、集計されたメソッド数がそのクラスのもつメソッド数に近いものを候補にする。このこれらの条件を満たすクラスが複数存在する場合は、そのすべてを候補とする。この例においては、session_serverクラスが３メソッドで最大であるので、ステップＳ５０５において、クラス候補抽出部１５はsession_serverクラスを候補として抽出する。
【０１２４】
これにより、「接続を待つ」，「接続を受け入れる」，「セッションを開始する」という文章から、これらの機能を実現している既存のクラスとしてsession_serverクラスが存在することがわかり、ソースコードから当該クラスを検索することが可能である。これによって、単一の文章では複数の候補が存在し得るような文章においても、複数の文章で検索を行なうことによって的確にメソッドを検索することができるようになる。
【０１２５】
本実施の形態にかかる情報処理装置が上述の処理を実行することによって、機能を表現する文章の入力を受付けて、既存ソフトウェアのソースコードが実現するさまざまな機能から入力された文章の表現する機能を持つソフトウェア部品のソースコードを検索することが可能になる。
【０１２６】
また、入力した機能に類似した機能が実装されたソースコードが複数存在する場合には、検索によって候補一覧が順位付けられて得られるため、ソフトウェア技術者がその候補の中から上位のものを選択することにより、複数の候補からの選択も容易となる。
【０１２７】
その結果、新規に作成されるソフトウェアについての要求分析・設計のドキュメントが作成された時点で、そのドキュメントに記載されている情報に基づいて自動的に既存のソフトウェアのソースコードの中から再利用できる可能性が高い部分を抽出することが可能になる。
【０１２８】
さらに、上述のソースコード検索装置である情報処理装置で実行されるソースコード検索方法を、プログラムとして提供することもできる。このようなプログラムは、コンピュータに付属するフレキシブルディスク、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）およびメモリカードなどのコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。あるいは、コンピュータに内蔵するハードディスクなどの記録媒体にて記録させて、プログラムを提供することもできる。また、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
【０１２９】
提供されるプログラム製品は、ハードディスクなどのプログラム格納部にインストールされて実行される。なお、プログラム製品は、プログラム自体と、プログラムが記録された記録媒体とを含む。
【０１３０】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１３１】
【図１】本発明の第１の実施の形態にかかる情報処理装置の構成の具体例を示す図である。
【図２】第１の実施の形態にかかる情報処理装置において処理「接続を受け入れる」を実現するメソッドを検索する処理を示すフローチャートである。
【図３】ステップＳ１の、入力文章解析の手順を示すフローチャートである。
【図４】文章解析情報記憶部３に記憶された文章の解析結果の内容の一例を示す図である。
【図５】ステップＳ２の、入力ソースコードの解析の手順を示すフローチャートである。
【図６】第１の実施の形態において入力されるソースコードの例の一部を表わす図である。
【図７】クラス・メソッド記憶部７に記憶されているソースコードの解析結果の一例を示す図である。
【図８】識別子から識別子に含まれる単語を抽出する処理の一例を示す図である。
【図９】識別子から識別子に含まれる単語を抽出する処理の別の一例を示す図である。
【図１０】ステップＳ３の、入力文章の内容とソースコードの内容とを比較する手順を示すフローチャートである。
【図１１】ステップＳ３０４での単語比較部９における単語比較の手順を示すフローチャートである。
【図１２】本発明の第２の実施の形態にかかる情報処理装置の構成の具体例を示す図である。
【図１３】第２の実施の形態にかかる情報処理装置における処理を示すフローチャートである。
【図１４】第２の実施の形態において入力されるソースコードの例の一部を表わす図である。
【図１５】メソッド集計部１４に記憶されているメソッドの初期状態を示す図である。
【図１６】メソッド集計部１４に記憶されているメソッドの一例を示す図である。
【図１７】メソッド集計部１４に記憶されているメソッドの別の一例を示す図である。
【図１８】メソッド集計部１４に記憶されているメソッドのさらに別の一例を示す図である。
【符号の説明】
【０１３２】
１  文章入力部、２  文章構文解析部、３  文章解析情報記憶部、４  ソースコード入力部、５  ソースコード構文解析部、６  識別子単語分解部、７  クラス・メソッド記憶部、８  クラス・メソッド−文章比較部、９  単語比較部、１０  翻訳辞書部、１１  類義語辞書部、１２  クラス・メソッド候補抽出部、１３  クラス・メソッド選択部、１４  メソッド集計部、１５  クラス候補抽出部。
【図１】
2006235970.tif 000003
【図２】
2006235970.tif 000004
【図３】
2006235970.tif 000005
【図４】
2006235970.tif 000006
【図５】
2006235970.tif 000007
【図６】
2006235970.tif 000008
【図７】
2006235970.tif 000009
【図８】
2006235970.tif 000010
【図９】
2006235970.tif 000011
【図１０】
2006235970.tif 000012
【図１１】
2006235970.tif 000013
【図１２】
2006235970.tif 000014
【図１３】
2006235970.tif 000015
【図１４】
2006235970.tif 000016
【図１５】
2006235970.tif 000017
【図１６】
2006235970.tif 000018
【図１７】
2006235970.tif 000019
【図１８】
2006235970.tif 000020