JP2006235970A - ソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体 - Google Patents
ソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体 Download PDFInfo
- Publication number
- JP2006235970A JP2006235970A JP2005049305A JP2005049305A JP2006235970A JP 2006235970 A JP2006235970 A JP 2006235970A JP 2005049305 A JP2005049305 A JP 2005049305A JP 2005049305 A JP2005049305 A JP 2005049305A JP 2006235970 A JP2006235970 A JP 2006235970A
- Authority
- JP
- Japan
- Prior art keywords
- sentence
- component
- source code
- word
- identifier
- 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.)
- Withdrawn
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】 効率良くかつ的確にソースコードを検索することのできるソースコード検索装置を提案する。
【解決手段】 ソースコード構文解析部5において、入力されたソースコードからクラス、メソッドが抽出されて、識別子単語分解部6において単語に分解される。文章構文解析部2において、入力された文章が単語に分解される。単語比較部9において、文章に含まれる単語とメソッドに含まれる単語とが比較される。その際、必要に応じて翻訳辞書部10において翻訳され、類義語辞書部11において類義語が取得されて単語比較部9において比較される。クラス・メソッド−文章比較部8において、比較結果に基づいて一致度が取得され、クラス・メソッド候補抽出部12において、一致度に基づいて検索結果となるメソッドの候補が抽出される。
【選択図】 図1
【解決手段】 ソースコード構文解析部5において、入力されたソースコードからクラス、メソッドが抽出されて、識別子単語分解部6において単語に分解される。文章構文解析部2において、入力された文章が単語に分解される。単語比較部9において、文章に含まれる単語とメソッドに含まれる単語とが比較される。その際、必要に応じて翻訳辞書部10において翻訳され、類義語辞書部11において類義語が取得されて単語比較部9において比較される。クラス・メソッド−文章比較部8において、比較結果に基づいて一致度が取得され、クラス・メソッド候補抽出部12において、一致度に基づいて検索結果となるメソッドの候補が抽出される。
【選択図】 図1
Description
この発明はソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体に関し、特に、効率よくかつ的確にソースコードを検索することのできるソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体に関する。
ソフトウェアの多機能化に伴い、必要となるソースコードも増大する傾向にある。少ない労力で多くのソースコードを作成するための方法の1つとして、既存のソフトウェア資産(以前の別の製品等のために作成したソースコード)を再利用するなどの方法がある。一般的に0からソースコードを作成するより、すでに存在する類似機能を有するソフトウェアを元に修正してソースコードを作成する方が労力が少なくて済む。
ただし、既存のソースコードを再利用する場合、設計者はそのソースコードの機能を理解していなければならない。また、既存のソースコードを修正する場合、ソースコードの構造を理解していなければならない。ソースコードのみを解読してその機能や構造を理解するのは、そのソースコードが複雑あるいは大規模になるほど困難な作業となるため、ソースコードを作成する際には、その機能を理解するに助けとなるドキュメントを添付したり(この行為をドキュメント化と呼ぶ)、ソースコードの構造を理解しやすいように、その構造を理解する助けとなる構造図等を添付したり(この行為をモデル化と呼ぶ)するのがよいとされている。
しかしながら、ソフトウェアは上記ドキュメントやモデルが存在していなくても、あるいはソースとドキュメントとの整合性がとれていなくても、動作することは可能である。そのため、短時間で動作するソフトウェアを作成することを優先させ、ドキュメント化やモデル化を十分に行なわないことも、実際の設計ではよく行なわれている。そのため、既存のソフトウェア資産を再利用するに際し、再利用の対象となりうるソフトウェア(ソースコード)が、モデル化もしくはドキュメント化されているとは限らない。また、ソフトウェアに対するモデルやドキュメントが存在したとしても、モデルもしくはドキュメントとソフトウェアとのソースコードの整合性が取れているとは限らない。
ゆえに、既存のソフトウェア資産の再利用の際に、それらのソフトウェアのモデルもしくはドキュメントではなく、直接ソースコードを調査して、再利用可能かどうかを判定し、再利用可能な部分の抽出を行なうことが必要な場合が生じる。
前記に説明した通り、既存のソフトウェアのソースコードの量は膨大であり、これらのソフトウェアのすべての内容を解析し、新たに作成するソフトウェアにおいて必要な機能を実現しているかどうかを確認するのは、莫大なコストを必要とする。
そのため、新たに開発するソフトウェアの機能と同様の機能をもつ部分を、膨大に存在する既存のソフトウェアのソースコードから効率良く検索するための技術が非常に重要となる。
効率良くソースコードを検索する技術として、ソフトウェアのソースコードを直接検索するのではなく、ソースコードの解析を事前に行ない、その解析結果に対して検索を行なうことにより、必要な部分のみを検索対象とした効率の良い検索を行なう技術がすでに存在する。
たとえば、特許文献1においては、ソフトウェアを解析した情報をデータベースとして記憶し、そのデータベースから関数や変数などを検索することが提案されている。
特開平5−289862号公報
特開平8−166873号公報
特開平1−121934号公報
しかしながら、特許文献1の提案する技術においては、検索における入力として関数名などを用いなければならないが、同義語に対する検索を行なうことができない。
新規ソフトウェアの設計において、既存のソフトウェアと同じ要素を持ったとしてもその要素が新規ソフトウェアと既存ソフトウェアとでまったく同じ用語が用いられるとは限らず類義語が用いられる可能性がある。そのため、類義語による検索が不可能であれば、検索において複数の検索文字列を入力しなければならず、手間がかかるばかりか類義語の種類が多ければいずれかの単語において検索漏れが生じるという問題がある。
また、ソースコードに記載される関数名などは複数の単語が組み合わさってできているものが多く、単語数が多くなってくると検索における入力時の語順と関数名などでの語順とが異なる場合があるという問題がある。しかし、特許文献1に提案される技術においては語順の違いを解決する手段は提供されていない。
上記の問題に対し、特許文献2において、複数の単語からなるクラス名およびメソッド名を単語に分解して比較することにより、抽象クラスを抽出する手法が提案されている。しかし、この手法において比較されるものは第1のプログラムコードと第2のプログラムコードとから抽出されたクラスの情報であり、特定の機能を有するプログラムコードを前記機能から連想される単語や文章を元に抽出することはできないという問題がある。
さらに、ソースコードに記載される関数名などは一般的に英語が用いられることが多く、要求仕様などのドキュメントについてはソフトウェア開発者の母国語、公用語が用いられることが多い。このため検索を行なう際にはソフトウェアドキュメントに記載されている言語をソースコードで用いられている言語に翻訳する必要がある。そのため、この翻訳作業が検索の負荷になるばかりか、翻訳時の訳語の選択によって、上記の類義語における検索漏れと同様に検索漏れが生じる場合があるという問題もある。
上記の問題に対し、特許文献3において、クラスの情報とメソッドの情報とを記憶するテーブルを設け、ユーザが入力した命令を辞書を用いて変換してテーブルの情報を検索することによって命令に対応したメソッドを実行する手法が提案されている。また、この手法では検索に失敗した場合、類義語辞書を用いて得られた類義語によって再度検索を試みるようになっている。
この手法によって、上記の言語の相違による問題を解決することができる。しかし、この手法では、事前にクラスおよびメソッドに関する情報を記憶したテーブルを用意する必要があるほか、メソッドを動詞に対応させているため、複数の単語からメソッド名を命名しているようなメソッドに対しては検索することができない。
また、既存のソースコードにおいては同等の機能を持つクラスおよびメソッドが複数存在する可能性が存在する。もし複数存在する場合、新規ソフトウェアの利用時においては、それらのクラスおよびメソッドの中からいずれを利用するかを選択しなければならない。しかし、特許文献3で提案された手法においては、上記選択のためのステップは存在せず、また利用者がいずれを選択するかの判断に利用可能な情報を提示するためのステップも存在しない。そのため、同等の機能を持つクラスおよびメソッドが複数存在する場合に対応できないという問題がある。
本発明はこれらの問題に鑑みてなされたものであって、効率良くかつ的確にソースコードを検索することのできるソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体を提供することを目的とする。
上記目的を達成するために、本発明のある局面に従うと、ソースコード検索装置は、プログラムを構成するソースコードを入力するソースコード入力部と、ソースコードの構文を解析し、構成要素を抽出するソースコード構文解析部と、プログラムの振る舞いを示す文章を入力する文章入力部と、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語とを比較して上記構成要素と上記文章との関連度を得る構成要素−文章比較部と、上記関連度に基づいて、上記文章が示すプログラムの振る舞いを実現する構成要素の候補を上記ソースコードから抽出する構成要素候補抽出部とを備える。
また、ソースコード検索装置は、2つの単語を比較して意味的に同じかどうかを判定する単語比較部と、構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書部、および構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書部の少なくとも一方とをさらに備え、構成要素−文章比較部は、単語比較部を用いて、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との比較、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも1つの比較を行なって関連度を得ることが好ましい。
また、ソースコード検索装置は、上記構成要素の識別子を解析して上記構成要素に含まれる単語を抽出する識別子単語分解部と、上記文章を文法的に解析して上記文章に含まれる単語を抽出する文章構文解析部と、上記候補の中から構成要素を選択する構成要素選択部とをさらに備えることが好ましい。
さらに、文章構文解析部は単語の品詞を特定し、構成要素−文章比較部は品詞を考慮して上記関連度を得ることがより好ましい。
また、構成要素にはクラスおよびメソッドが含まれ、構成要素の識別子はクラス名およびメソッド名であって、構成要素候補抽出部は、上記関連度に基づいて、上記ソースコードからクラスおよびメソッドの候補を抽出し、ソースコード検索装置は、構成要素候補抽出部によって抽出されたメソッドをクラス単位で集計するメソッド集計部と、メソッド集計部によって集計されたメソッドの数をもとにクラスを選択するクラス候補抽出部とをさらに備えることが好ましい。
本発明の他の局面に従うと、ソースコード検索方法は、プログラムを構成するソースコードの構文を解析し、構成要素を抽出するソースコード構文解析ステップと、プログラムの振る舞いを示す文章を入力する文章入力ステップと、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語とを比較して上記構成要素と上記文章との関連度を得る構成要素−文章比較ステップと、上記関連度に基づいて、上記文章が示すプログラムの振る舞いを実現する構成要素の候補を上記ソースコードから抽出する構成要素候補抽出ステップとを備える。
また、ソースコード検索方法は、2つの単語を比較して意味的に同じかどうかを判定する単語比較ステップと、構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書ステップ、および、構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書ステップの少なくとも一方をさらに備え、構成要素−文章比較ステップにおいては、単語比較ステップを実行させて、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との比較、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも1つの比較を行なって関連度を得ることが好ましい。
また、ソースコード検索方法は、上記構成要素の識別子を解析して上記構成要素に含まれる単語を抽出する識別子単語分解ステップと、上記文章を文法的に解析して上記文章に含まれる単語を抽出する文章構文解析ステップと、上記候補の中から構成要素を選択する構成要素選択ステップとをさらに備えることが好ましい。
さらに、文章構文解析ステップにおいては、単語の品詞を特定し、構成要素−文章比較ステップにおいては、品詞を考慮して上記関連度を得ることがより好ましい。
また、構成要素にはクラスおよびメソッドが含まれ、構成要素の識別子はクラス名およびメソッド名であって、構成要素候補抽出ステップにおいては、上記関連度に基づいて、上記ソースコードからクラスおよびメソッドの候補を抽出し、ソースコード検索方法は、構成要素候補抽出ステップにおいて抽出されたメソッドをクラス単位で集計するメソッド集計ステップと、メソッド集計部ステップにおいて集計されたメソッドの数をもとにクラスを選択するクラス候補抽出ステップとをさらに備えることが好ましい。
本発明のさらに他の局面に従うと、ソースコード検索プログラムは、コンピュータにソースコードの検索を実行させるプログラムであって、プログラムを構成するソースコードの構文を解析し、構成要素を抽出するソースコード構文解析ステップと、プログラムの振る舞いを示す文章を入力する文章入力ステップと、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語とを比較して上記構成要素と上記文章との関連度を得る構成要素−文章比較ステップと、上記関連度に基づいて、上記文章が示すプログラムの振る舞いを実現する構成要素の候補を上記ソースコードから抽出する構成要素候補抽出ステップとを実行させる。
また、ソースコード検索プログラムは、2つの単語を比較して意味的に同じかどうかを判定する単語比較ステップと、構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書ステップ、および、構成要素の識別子に含まれる単語と文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書ステップの少なくとも一方をさらに実行させ、構成要素−文章比較ステップにおいては、単語比較ステップを実行させて、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との比較、上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および上記構成要素の識別子に含まれる単語と上記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも1つの比較を行なって関連度を得ることが好ましい。
また、ソースコード検索プログラムは、上記構成要素の識別子を解析して上記構成要素に含まれる単語を抽出する識別子単語分解ステップと、上記文章を文法的に解析して上記文章に含まれる単語を抽出する文章構文解析ステップと、上記候補の中から構成要素を選択する構成要素選択ステップとをさらに実行させることが好ましい。
さらに、文章構文解析ステップにおいては、単語の品詞を特定し、構成要素−文章比較ステップにおいては、品詞を考慮して上記関連度を得ることがより好ましい。
また、構成要素にはクラスおよびメソッドが含まれ、構成要素の識別子はクラス名およびメソッド名であって、構成要素候補抽出ステップにおいては、上記関連度に基づいて、上記ソースコードからクラスおよびメソッドの候補を抽出し、ソースコード検索プログラムは、構成要素候補抽出ステップにおいて抽出されたメソッドをクラス単位で集計するメソッド集計ステップと、メソッド集計部ステップにおいて集計されたメソッドの数をもとにクラスを選択するクラス候補抽出ステップとをさらに実行させることが好ましい。
本発明のさらに他の局面に従うと、記録媒体は、上記いずれかに記載のソースコード検索プログラムを記録した、コンピュータ読取可能な記録媒体である。
以下に、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがってそれらについての詳細な説明は繰返さない。
以下の実施の形態においては、本発明にかかるソースコード検索装置を一般的なコンピュータである情報処理装置で実現する、または本発明にかかるソースコード検索装置がコンピュータに実装されている具体例を示しているが、本発明にかかるソースコード検索装置を実現あるいは実装する情報処理装置はコンピュータに限定されず、その他いずれの装置であってもよい。
[第1の実施の形態]
図1は、第1の実施の形態にかかる情報処理装置の構成の具体例を示す図である。
図1は、第1の実施の形態にかかる情報処理装置の構成の具体例を示す図である。
本実施の形態にかかる情報処理装置は、ソースコード検索装置に対して文章を入力する文章入力部1と、入力された文章を解析し、単語に分解する文章構文解析部2と、文章構文解析部2の解析の結果として分解された単語を記憶する文章解析情報記憶部3と、ソースコードを入力するソースコード入力部4と、入力されたソースコードを解析し、クラス、メソッドなどの構成要素を抽出するソースコード構文解析部5と、クラス名、メソッド名などの識別子(クラス、メソッドなどを識別するための一意な文字列)を単語に分解する識別子単語分解部6と、ソースコードから抽出されたクラス、メソッドなどの構成要素とその識別子とを単語に分解した結果を格納するクラス・メソッド記憶部7と、文章解析情報記憶部3に記憶された文章とクラス・メソッド記憶部7に記憶されたメソッドとを比較するクラス・メソッド−文章比較部8と、文章とメソッドに含まれる単語とを比較する単語比較部9と、文章に含まれる単語を文章が記述されている言語からソースコード中の識別子で用いられている言語に翻訳する翻訳辞書部10と、指定された単語の類義語を取得する類義語辞書部11と、文章とメソッドとの比較によって検索結果となるメソッドの候補を抽出するクラス・メソッド候補抽出部12と、抽出された候補からメソッドを選択するクラス・メソッド選択部13とを含んで構成される。
本実施の形態においては、例として、情報処理装置で以下のような処理を行なうためのネットワークセッションを実行するサーバを実現するためのクラスを検索する処理について説明する。
・接続を待つ
・接続を受け入れる
・セッションを開始する
この例においては、サーバクラスが実装すべき処理は次に述べる順序で実行される。サーバはクライアントからの接続を待ち、接続が行なわれれば、そのクライアントと接続してよいかを判定し、接続可能であれば接続を受け入れる。そして、サーバはネゴシエーションを行なって必要な事前情報をクライアントから取得する。ネゴシエーションが完了すれば、サーバ、クライアントで実際のやり取りを行なうセッションが開始される。必要なやりとりが終了すれば、セッションを終了する。
・接続を受け入れる
・セッションを開始する
この例においては、サーバクラスが実装すべき処理は次に述べる順序で実行される。サーバはクライアントからの接続を待ち、接続が行なわれれば、そのクライアントと接続してよいかを判定し、接続可能であれば接続を受け入れる。そして、サーバはネゴシエーションを行なって必要な事前情報をクライアントから取得する。ネゴシエーションが完了すれば、サーバ、クライアントで実際のやり取りを行なうセッションが開始される。必要なやりとりが終了すれば、セッションを終了する。
上記例において、情報処理装置は、「接続を受け入れる」処理を実現するメソッドを検索する。
図2は、本実施の形態にかかる情報処理装置において上記例の「接続を受け入れる」処理を実現するメソッドを検索する処理を示すフローチャートである。
図2を参照して、本実施の形態にかかる情報処理装置において「接続を受け入れる」処理を実現するためには、始めに、ユーザの入力した文章が解析され(ステップS1)、続いてソースコードが解析され(ステップS2)、この解析結果に基づいて、ユーザの入力した文章とソースコードと比較される(ステップS3)。比較の結果がユーザに提示され、ユーザの選択を受付ける(ステップS4)。
以下に、上記の各処理(ステップS1〜ステップS4)について、具体例を挙げながら説明する。
まず、はじめにユーザの入力した文章の解析が行なわれる。
図3は、ステップS1の、入力文章解析の手順を示すフローチャートである。入力文章解析の手順について図3を用いて説明する。
図3を参照して、ユーザが文章入力部1を介して振る舞いを示す文章を入力すると、入力した文章の読み込みが行なわれる(ステップS101)。ここで、「接続を受け入れる」という文が文章入力部1から読み込まれる。
文章構文解析部2は読み込まれた文章を解析し、文章に含まれる単語を抽出するとともに、その文法的要素を特定する(ステップS102)。
ステップS101で、ユーザが「接続を受け入れる」を入力した場合は、当該文章はステップS102で「接続」、「を」、「受け入れる」のように単語に分解され、それぞれ「名詞」、「助詞」、「動詞」のように品詞情報が付加される。そして、この内容が文章解析情報記憶部3に記憶される(ステップS103)。「接続を受け入れる」という文は、図4に示すように格納される。
以上でステップS1の処理を終了し、メインルーチンに処理を戻す。
入力した文章の解析に続いて、ソースコードの解析が行なわれる。図5は、ステップS2の、ソースコードの解析の手順を示すフローチャートである。図5を用いてソースコードを解析する手順について説明する。
ソースコード入力部4は、指定されたソースコードを読み込む(ステップS201)。既存のコードとして図6に示すソースコードが存在するものとし、ここでは、かかるソースコードがソースコード検索装置に対して読込まれるものとする。なお、図では単一のソースファイルからなるコードであるかのように表現されているが、入力されるコードは複数のソースファイルからなるものとする。
図6に示されたソースコードは、あるクライアント・サーバ方式のネットワークセッションを行なうサーバとクライアントとの実装におけるクラス宣言であり、クラスsession_serverがサーバクラスの宣言、session_clientがクライアントクラスの宣言である。
続いて、ソースコード構文解析部5は入力されたソースコードの解析を行なう。ソースコードの解析により、そのソースコードに含まれるクラス、メソッドなどを抽出する(ステップS202)。この例では図7のように抽出される。
続いて、識別子単語分解部6は抽出されたクラス、メソッドの識別子を単語に分解する(ステップS203)。
一般的なプログラミング言語の文法では、メソッド名、クラス名に対応する識別子は1つのトークン(字句)で構成されなければならない。そのため、メソッドの処理を端的に表わす表現が複数の単語からなる場合、それらの単語を一定の規則にしたがって連結して1つのトークンとし、それをメソッド名とする。単純に単語を連結すると判別しづらいメソッド名になるため、たとえば単語の間に、アンダースコア(_)を挿入し、「accept_connection」などとする。他にも単語の先頭を大文字で表わす「AcceptConnection」といったメソッド名の表記もある。これらの規則に基づいて識別子単語分解部6はメソッド名を単語に分解する。図8および図9に示すように、「accept_connection」というメソッド名から「accept」および「connection」の単語が、「AcceptConnection」からも同じく「accept」および「connection」の単語がそれぞれ抽出される。
続いて、クラス・メソッド記憶部7はソースコード構文解析部5が抽出したクラス、メソッド、属性についての情報を、識別子単語分解部6によって分解された単語とあわせて記憶する(ステップS204)。
以上でステップS2の処理を終了し、メインルーチンに処理を戻す。
入力した文章およびソースコードの解析が行なわれると、続いてこの解析結果に基づいて入力した文章と、ソースコードとの比較が行なわれる。図10は、ステップS3の、ユーザの入力した文章の内容とソースコードの内容とを比較する手順を示すフローチャートである。図10を用いて文章の内容とソースコードの内容との比較の手順について説明する。
クラス・メソッド−文章比較部8はクラス・メソッド記憶部7に記憶されたクラスからクラスを1つ選択する(ステップS301)。現在クラス・メソッド記憶部7にはsession_serverクラスおよびsession_clientクラスが記憶されている。ステップS301では、まずはじめにsession_serverクラスが選択されるものとする。
クラス・メソッド−文章比較部8は選択されたクラスに存在するメソッドから、メソッドを1つ選択する(ステップS302)。session_serverクラスには「wait_connection」,「accept_connection」,「start」の3つのメソッドが定義されている。ここで、wait_connectionメソッドが選択されるものとする。なお、すべてのメソッドに対して処理が適用されればよいため、ステップS302ではどのような基準で選択してもよく、3つのメソッドのうちいずれが選ばれてもよい。
クラス・メソッド−文章比較部8は、単語比較部9に対して、ステップS302で選択されたメソッドに含まれる単語と文章解析情報記憶部3に記憶されている文章に含まれる単語とを比較するよう要求する(ステップS303)。ここでは、メソッド名「wait_connection」に含まれる単語と、文章「接続を受け入れる」に含まれる単語との比較を要求する。
単語比較部9は要求にしたがって、クラス・メソッド記憶部7に記憶されているメソッドに含まれる単語と文章解析情報記憶部3に記憶された文章に含まれる単語との比較を行なう(ステップS304)。ここでは、文章「接続を受け入れる」とメソッド名「wait_connection」とにそれぞれ含まれる単語の比較を行なう。
ステップS304での単語比較部9における単語の比較の詳細について図11を用いて説明する。図11は単語比較部9における単語比較の手順を示すフローチャートである。以下このフローチャートに基づいて単語の比較手順について説明する。
単語比較部9は文章解析情報記憶部3に記憶されている文章の単語とクラス・メソッド記憶部7に記憶されているメソッドの単語との比較を行なう(ステップS401)。ここでは、「接続」,「受け入れる」という単語と、「wait」,「connection」という単語とを比較する。それぞれ2単語ずつ含まれているため、比較する組み合わせとして、2×2=4通りの組み合わせが存在するが、それらについてすべて比較を行なう。なお、この4通りの比較の組み合わせは日本語の単語と英単語との比較となるので、まったく一致することはないのであるが、比較の対象が英単語を含む文章であったり、英文そのものであったりする場合もあり、その可能性を含めて考えれば比較することに意味はある。
ステップS401での比較の結果、単語が一致したかどうかによって条件分岐を行なう。
一致していれば(ステップS4015でYES)、単語比較部9はその結果を「一致」としてクラス・メソッド−文章比較部8に返す(ステップS405)。
一致していなければ(ステップS4015でNO)、単語比較部9は翻訳辞書部10を用いて文章解析情報記憶部3に記憶されている単語を翻訳し、その結果とクラス・メソッド記憶部7に記憶されているメソッド名の単語とを比較する(ステップS402)。この翻訳結果は、さらに文章解析情報記憶部3に記憶される。なお、翻訳対象は必ずしも入力文章に含まれる単語に限定されず、必要に応じてはメソッド名に含まれている単語であってもよい。または、入力文章に含まれる単語およびメソッド名に含まれている単語の双方であってもよい。
この例では一致していないため、条件分岐によって一致しない場合の処理(ステップS402)が行なわれる。したがって、ステップS402で、「接続」が「connection」、「受け入れる」が「accept」と翻訳される。そして、「connection」,「accept」のグループと、「wait」,「connection」のグループとの比較が行なわれる。その結果、「connection」は両グループに一致しているが、「wait」,「accept」が一致しない。
比較が完了したら、単語が一致したかどうかで条件分岐を行なう。
一致していれば(ステップS4025でYES)、単語比較部9はその結果を「一致」としてクラス・メソッド−文章比較部8に返す。
一致していなければ(ステップS4025でNO)、単語比較部9は類義語辞書部11を用いて、文章解析情報記憶部3に記憶されている単語の翻訳結果の類義語を取得し、その類義語とクラス・メソッド記憶部7に記憶されているメソッド名の単語とを比較する(ステップS403)。なお、類義語を取得する対象は必ずしも入力文章に含まれる単語に限定されず、必要に応じてはメソッド名に含まれている単語であってもよい。または、入力文章に含まれる単語およびメソッド名に含まれている単語の双方であってもよい。
この例では、類義語辞書部11は、「accept」の類義語として「receive」、「connection」の類義語として「joint」をそれぞれ抽出する。この例では類義語がそれぞれ1つずつ選択されているが、類義語は複数存在してもよく、その場合は複数存在する類義語のすべてが比較対象となる。そして、選択された類義語のグループ「receive」,「joint」と、「wait」,「connection」との比較が行なわれる。なお、この例では類義語がそれぞれ1つずつ選択されているが、類義語は複数存在してもよく、その場合は複数存在する類義語のすべてが比較対象となる。比較を行なうと、単語に一致は見られない。
なお、ここでは、ステップS402で得られた翻訳結果の類義語を取得するものとしているが、文章解析情報記憶部3に記憶されている翻訳前の単語の類義語を取得してもよい。その場合、図11に示されたステップS402,S403の処理順を逆にし、類義語の比較を行なってから翻訳結果の比較を行なうことも考えられる。
比較が完了すると、条件分岐が行なわれる。
一致していれば(ステップS4035でYES)、単語比較部9はその結果を「一致」としてクラス・メソッド−文章比較部8に返す。
一致していなければ(ステップS4035でNO)、これまでの比較結果で最も多くの単語が一致していた結果を比較結果として、クラス・メソッド−文章比較部8に返す(ステップS404)。
この例では、ステップS402で比較した時の「connection」一語が一致した結果を比較結果として、クラス・メソッド−文章比較部8に返す。
なお、本実施の形態にかかる情報処理装置では、単語を文章中で使用されている言語からソースコード中の識別子などに使用されている言語に変換する辞書と、類義語を取得する辞書との2つの辞書が用いられているが、そのほかの辞書を追加して用いてもよい。たとえば、ソースコード中の識別子に使用されている言語は英語が主であるが、英語を得意としないソフトウェア開発者がソフトウェアを開発した場合に、ソースコードにスペルミスのある単語が含まれているケースが散見される。このような場合に対応するために、スペルミス修正候補辞書などを設けて、検索精度を向上させることが考えられる。
以上でステップS304での単語比較部9における単語の比較が終了し、クラス・メソッド−文章比較部8は、その結果に基づいて一致度を求める(ステップS305)。この例においては、一致した単語の数を一致度とする。なお、この例においては単語数で一致度としているが、単語の品詞情報を用いて重付けを行なった結果を一致度としてもよい。たとえば、メソッドは振舞いを表わすものであるため、振舞いを表わす動詞が一致した場合に重付けを大きくすることが考えられる。この場合に、動詞が一致すれば2点、名詞が一致した場合は1点とし、その合計を一致度として検索精度を向上させる仕組みを導入してもよい。この例においては、「connection」一語が一致しているので一致度は1とする。
メソッド名と文章解析情報記憶部3に記憶された文章とを比較して、当該クラスに存在するすべてのメソッドについて比較を実行したかの判定が行なわれ、その結果により条件分岐が行なわれる。すべてのメソッドを比較したならば(ステップS3051でYES)、次の処理が行なわれる。比較を行なっていないメソッドがまだ存在する場合(ステップS3051でNO)、ステップS302からの処理が繰返される。
この例では、再び処理がステップS302に戻り、残りのaccept_connectionメソッド,startメソッドのうち、accept_connectionメソッドが選択される。
ステップS304のうちのステップS401では、先に「wait_connection」が選択されたときと同様に、文章「接続を受け入れる」に含まれる単語と、メソッド名「accept_connection」に含まれる単語との比較が行なわれる。すなわち、単語比較部9は「接続」,「受け入れる」という単語と、「accept」「connection」との比較を行なう。先の比較と同様に4通りの組み合わせについて比較を行なう。ここでは一致しない。
続いてステップS402で単語比較部9は「接続」,「受け入れる」という単語を翻訳辞書部10を用いて翻訳し、それぞれ翻訳結果「connection」,「accept」を得る。得られた翻訳結果とメソッド内に含まれる単語「accept」「connection」との比較を行なう。その結果、双方とも「accept」「connection」で、単語が完全に一致する。2単語が一致しているので、ここでの一致度は2とする。
再度、ステップS3051で、当該クラスに存在するすべてのメソッドについて比較を実行したかの判定が行なわれ、この体例の場合、条件分岐によりステップS302に戻る。ステップS302で、最後に残ったstartメソッドが選択される。
ステップS304のうちのステップS401で、これまでと同様に、文章「接続を受け入れる」に含まれる単語と、メソッド名「start」に含まれる単語との比較が行なわれる。すなわち、単語比較部9は、「接続」,「受け入れる」という単語と、「start」との比較を行なう。ここでは一致しない。
続いて、ステップS402で単語比較部9は「接続」,「受け入れる」という単語を翻訳辞書部10を用いて翻訳し、それぞれ翻訳結果「connection」,「accept」を得る。得られた翻訳結果とメソッド内に含まれる単語「start」との比較を行なう。ここでは一致しない。
ステップS403で単語比較部9は、類義語辞書部11を用いて「start」の類義語「begin」を取得し、翻訳結果「connection」,「accept」とメソッド内に含まれる単語の類義語「begin」との比較を行なう。ここでも一致しないので、一致度は0とする。
ステップS3051で、当該クラスに存在するすべてのメソッドが処理されたどうかの判定が行なわれる。この例の場合、session_serverクラスに存在する3つのメソッドすべてに対して処理が行なわれたので(ステップS3051でYES)、続いて、ステップS3052で、すべてのクラスが処理されたかどうかの判定が行なわれる。処理を行なっていないクラスがまだ存在する場合(ステップS3052でNO)、ステップS301からの処理が繰返される。
この例の場合、まだsession_clientクラスは処理されていないので、ステップS301に戻り、残りのsession_clientクラスが選択される。session_clientクラスには、connectメソッドとsendメソッドとの2つのメソッドがある。ステップS302では、まずはconnectメソッドが選択される。
ステップS304のうちのステップS401では、単語比較部9は「接続」、「受け入れる」の2単語と、「connect」との比較を行なう。ここでは一致しない。
ステップS402で単語比較部9は「接続」、「受け入れる」の2単語を翻訳辞書部10を用いて翻訳してそれぞれ翻訳結果「connection」,「accept」を取得し、翻訳結果と「connect」との比較を行なう。ここで、「connection」は「connect」から派生した単語なので、ここでは単語「connection」と単語「connect」とを同じとする。
さらにステップS403で、単語比較部9は類義語辞書部11を用いて、文章解析情報記憶部3に記憶されている単語の翻訳結果の類義語を得る。そしてその類義語とクラス・メソッド記憶部7に記憶されているメソッド名の単語とを比較する。類義語は、それぞれ同様に「connection」に対して「joint」、「accept」に対して「receive」であり、「joint」,「receive」と、「connect」とを比較する。ここでは一致しない。
なお、図11に示される処理では、ステップS401〜S403のいずれかの比較処理において単語の一致があった場合にはその時点で比較処理を終了するものとしているが、さらに以降の比較処理を続け、最も一致した処理の結果を全体の比較結果とすることもできる。この例では、上記ステップS402で翻訳後の単語の一致を得ているがさらにステップS403で類義語の比較まで行ない、各比較の中で最も一致した結果を全体の比較結果とすることができる。すなわち、ステップS402で「connection」,「accept」と「connect」とを比較したときに一単語一致しているのが最も一致したケースなので、これを比較結果とする。一単語一致しているので一致度は1とする。
再び処理がステップS302に戻り、残りのsendメソッドが選択される。
ステップS304のうちのステップS401では、単語比較部9は「接続」,「受け入れる」の2単語と、「send」の1単語との比較を行なう。ここでは一致しない。
続いて、ステップS402で、単語比較部9は「接続」,「受け入れる」の2単語を翻訳辞書部10を用いて翻訳して得られた「connection」「accept」の2単語と、「send」との比較を行なう。ここでは一致しない。
最後に、ステップS403で、単語比較部9は「接続」,「受け入れる」の2単語を類義語辞書部11を用いて得られた類義語「joint」,「receive」の2単語と、「send」の1単語との比較を行なう。ここでは一致しない。これらの比較より、単語の一致はないことを比較結果とする。一致度は0とする。
ステップS3051で、この例の場合、session_clientクラスのすべてのメソッドを比較対象としたことが判断される(ステップS3051でYES)。
ステップS3052で、すべてのクラスが処理されたことが判断されると(ステップS3052でYES)、条件分岐によって、ステップS306で、クラス・メソッド候補抽出部12は、単語の一致が見られたメソッドを候補として抽出する。ここでは、一致度が2である、session_serverクラスのaccept_connectionメソッドと、一致度が1である、session_serverのwait_connectionメソッドと、session_clientクラスのconnectメソッドとが候補として抽出される。
以上でステップS3の処理を終了し、メインルーチンに処理を戻す。
なお、上述のステップS3の処理では、具体的に、単語をそのまま比較する、翻訳結果を比較する、および類義語を比較するという3種類の方法で単語の一致が見られるまで順に比較する、あるいはすべて行なって比較結果を得るものとしているが、その他の方法が採用されてもよい。また、採用される比較方法は多い方がより一致するメソッドの候補が得られるが、処理が複雑になったり処理時間がかかったりするため、必要に応じては3種類以下の方法での比較のみが行なわれてもよい。
ステップS4では、ステップS3で抽出された単語の一致が見られたメソッドの候補が図1には示されていない表示部等の提示手段によってユーザに提示され、クラス・メソッド選択部13によって、上記の候補の中からユーザが選択を行なう。ここでは抽出された上記の3つのメソッドが、一致の度合いの順に並べられて提示される。
また、クラス・メソッド選択部13では抽出された候補のメソッドの実装を参照することができ、ユーザは並べられた順に実装を確認し、文章で表記された機能を最もよく実現しているメソッドを選択することができる。多くの場合は、一致度が高かったクラスsession_serverのaccept_connectionメソッドが選択の対象となる。
[第2の実施の形態]
全体として異なる機能を提供するクラスであっても、その一部が同様である機能を提供しているということは比較的よくあることである。
全体として異なる機能を提供するクラスであっても、その一部が同様である機能を提供しているということは比較的よくあることである。
たとえば、ネットワークセッションの実装であるsession_sereverクラスと、ネットワークでのデータ送受信の実装であるnetwork_server_streamクラスとがソース内に存在するものとする。これらのクラスは、それぞれ上位にあるネットワークセッション、下位にあるネットワークデータ転送を実現するものであるが、上位・下位の差こそあれ、相手の接続を待つという共通した機能を有し、同じ名前のメソッドを持っている。
このように、同様の機能を提供する異なるクラスが複数存在する場合は、単一の機能を表わす文章だけではメソッドを完全に特定することは難しい。そのため、求められる機能が複数存在する場合は、そのすべてを検索に用い、その複数の機能のうちどれだけの機能に合致する機能を提供しているかで、目的のクラスを絞り込む方法が必要である。
図12は、第2の実施の形態にかかる情報処理装置の構成の具体例を示す図である。ここで第2の実施の形態にかかる情報処理装置の構成をこの図を用いて説明する。
図12を参照して、本実施の形態にかかる情報処理装置の構成は、図1に示された第1の実施の形態にかかる情報処理装置の構成とほぼ同一であるが、第2の実施の形態にかかる情報処理装置は、第1の実施の形態にかかるクラス・メソッド選択部13に替えて、メソッド集計部14およびクラス候補抽出部15を含んで構成される。
メソッド集計部14は、クラスに存在する複数のメソッドのうち、どれだけのメソッドがクラス・メソッド候補抽出部12によってメソッド候補として選択されたかを集計する。クラス候補抽出部15は、メソッド集計部14での集計結果に基づいて、入力された複数の文章から、それらの文章に該当する機能を備えたクラスの候補を抽出する。
本実施の形態においては、具体例として、情報処理装置で、3つの文章「接続を待つ」,「接続を受け入れる」,「セッションを開始する」について、これらの文章が示す機能をすべて提供しているクラスを検索する処理について説明する。
図13は、本実施の形態にかかる情報処理装置においてクラスを検索する手順を示すフローチャートである。なお、検索の対象となるソースコードは、図14に示されるクラスの宣言を含んでおり、session_serverクラスおよびnetwork_server_streamクラスが宣言されている。また、また、初期状態ではメソッド集計部14にはメソッドが記憶されていない状態である。この状態を表わす図が図15である。図15は、メソッド集計部14にクラスおよびメソッドが記録されていないことを示す記号「N/A」が記録されていることを示している。
まずは、情報処理装置に入力された文章から1つの文章が選択される(ステップS501)。ここでは「接続を待つ」,「接続を受け入れる」,「セッションを開始する」という3つの文章から1つを選択する。そして選択された「接続を待つ」という文章に対応するメソッドの候補を抽出する。
文章入力部1は、ステップS501で選択された「接続を待つ」という文章をソースコード検索装置に対して読込み、対応するメソッドの候補を抽出する(ステップS502)。ステップS502での抽出の詳細については、第1の実施の形態での処理と同一であるため、ここでの説明は繰り返さない。なお、ここでソースコード入力部4は図14に示されるソースコードを読み込むものとする。
ステップS502での処理の結果、クラス・メソッド候補抽出部12はsession_serverクラスのwait_connectionメソッド、およびnetwork_server_streamクラスのwait_connectionメソッドを候補として抽出する。ここでメソッド集計部14は、ステップS502で候補として抽出されたクラスおよびメソッドを記憶する(ステップS503)。図16に、ステップS503でのメソッド集計部14の記憶内容の具体例を示す。ここでは、上記2メソッドが記憶の対象となる。メソッド集計部14に記憶されているメソッドは図16に示すようにクラス単位で分類して記憶される。図の太線部分が新たに記憶されたメソッドである。現時点では初期状態でメソッドは一切記憶されていないので、新たに記憶されたメソッドのみが記憶されている状態である。
さらに、すべての文章について処理したかどうかが判定され、その結果によって条件分岐が行なわれる。ここではまだ「接続を受け入れる」「セッションを開始する」という2つの文章が残っているので(ステップS5035でNO)、ステップS501に戻る。
続いて、ステップS501において「接続を受け入れる」という文章が選択され、「接続を受け入れる」という文章に対応するメソッドの候補が抽出される。ステップS502において、これまでと同様の手順により、クラス・メソッド候補抽出部12は、session_serverクラスのaccpet_connectionメソッドとnetwork_server_sessionクラスのaccept_connectメソッドとを候補として抽出する。
ステップS503において、メソッド集計部14は、ステップS502で候補として抽出された2メソッドを記憶する。ここで記憶されているメソッドは図17に示すようになる。図の太線部分が新たに記憶されたメソッドを示している。
ステップS5035においてすべての文章について処理したかどうかが判定され、その結果によって条件分岐が行なわれる。ここではまだ「セッションを開始する」という文章が残っているので(ステップS5035でNO)、ステップS501に戻り、「セッションを開始する」という文章に対応するメソッドの抽出が行なわれる。ステップS502において、第1の実施の形態と同様の手順により、クラス・メソッド候補抽出部12はsession_serverクラスのstartメソッドを候補として抽出する。
ステップS503において、メソッド集計部14は、ステップS502で候補として抽出された上記メソッドを記憶する。ここで記憶されたメソッドは図18に示すようになる。図の太線部分が新たに記憶されたメソッドを示している。
ステップS5035においてすべての文章について処理したかどうかが判定され、その結果によって条件分岐が行なわれる。ここでは、すべての文章について処理が完了しているので(ステップS5035でYES)、次のステップに進む。
続いて、メソッド集計部14は、記憶されているメソッドが属するすべてのクラスに対して、記憶されたメソッド数を集計する(ステップS504)。図18に示される記憶内容を元に集計を行なうと、session_serverクラスは3メソッド、network_server_streamクラスは2メソッドとなる。
続いて、クラス候補抽出部15は、ステップS504でのメソッド集計部14の集計結果に基づいて、候補となるクラスを抽出する(ステップS505)。ここでは、集計されたメソッド数が多いクラスを候補とする。集計されたメソッド数が最大となるクラスが複数存在する場合は、集計されたメソッド数がそのクラスのもつメソッド数に近いものを候補にする。このこれらの条件を満たすクラスが複数存在する場合は、そのすべてを候補とする。この例においては、session_serverクラスが3メソッドで最大であるので、ステップS505において、クラス候補抽出部15はsession_serverクラスを候補として抽出する。
これにより、「接続を待つ」,「接続を受け入れる」,「セッションを開始する」という文章から、これらの機能を実現している既存のクラスとしてsession_serverクラスが存在することがわかり、ソースコードから当該クラスを検索することが可能である。これによって、単一の文章では複数の候補が存在し得るような文章においても、複数の文章で検索を行なうことによって的確にメソッドを検索することができるようになる。
本実施の形態にかかる情報処理装置が上述の処理を実行することによって、機能を表現する文章の入力を受付けて、既存ソフトウェアのソースコードが実現するさまざまな機能から入力された文章の表現する機能を持つソフトウェア部品のソースコードを検索することが可能になる。
また、入力した機能に類似した機能が実装されたソースコードが複数存在する場合には、検索によって候補一覧が順位付けられて得られるため、ソフトウェア技術者がその候補の中から上位のものを選択することにより、複数の候補からの選択も容易となる。
その結果、新規に作成されるソフトウェアについての要求分析・設計のドキュメントが作成された時点で、そのドキュメントに記載されている情報に基づいて自動的に既存のソフトウェアのソースコードの中から再利用できる可能性が高い部分を抽出することが可能になる。
さらに、上述のソースコード検索装置である情報処理装置で実行されるソースコード検索方法を、プログラムとして提供することもできる。このようなプログラムは、コンピュータに付属するフレキシブルディスク、CD−ROM(Compact Disc-Read Only Memory)、ROM(Read Only Memory)、RAM(Random Access Memory)およびメモリカードなどのコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。あるいは、コンピュータに内蔵するハードディスクなどの記録媒体にて記録させて、プログラムを提供することもできる。また、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
提供されるプログラム製品は、ハードディスクなどのプログラム格納部にインストールされて実行される。なお、プログラム製品は、プログラム自体と、プログラムが記録された記録媒体とを含む。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
1 文章入力部、2 文章構文解析部、3 文章解析情報記憶部、4 ソースコード入力部、5 ソースコード構文解析部、6 識別子単語分解部、7 クラス・メソッド記憶部、8 クラス・メソッド−文章比較部、9 単語比較部、10 翻訳辞書部、11 類義語辞書部、12 クラス・メソッド候補抽出部、13 クラス・メソッド選択部、14 メソッド集計部、15 クラス候補抽出部。
Claims (16)
- プログラムを構成するソースコードを入力するソースコード入力部と、
前記ソースコードの構文を解析し、構成要素を抽出するソースコード構文解析部と、
プログラムの振る舞いを示す文章を入力する文章入力部と、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語とを比較して前記構成要素と前記文章との関連度を得る構成要素−文章比較部と、
前記関連度に基づいて、前記文章が示すプログラムの振る舞いを実現する構成要素の候補を前記ソースコードから抽出する構成要素候補抽出部とを備えた、ソースコード検索装置。 - 2つの単語を比較して意味的に同じかどうかを判定する単語比較部と、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書部、および
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書部の少なくとも一方とをさらに備え、
前記構成要素−文章比較部は、前記単語比較部を用いて、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との比較、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも1つの比較を行なって前記関連度を得る、請求項1に記載のソースコード検索装置。 - 前記構成要素の識別子を解析して前記構成要素に含まれる単語を抽出する識別子単語分解部と、
前記文章を文法的に解析して前記文章に含まれる単語を抽出する文章構文解析部と、
前記候補の中から構成要素を選択する構成要素選択部とをさらに備えた、請求項1に記載のソースコード検索装置。 - 前記文章構文解析部は、前記単語の品詞を特定し、
前記構成要素−文章比較部は、前記品詞を考慮して前記関連度を得る、請求項3に記載のソースコード検索装置。 - 前記構成要素にはクラスおよびメソッドが含まれ、
前記構成要素の識別子はクラス名およびメソッド名であって、
前記構成要素候補抽出部は、前記関連度に基づいて、前記ソースコードからクラスおよびメソッドの候補を抽出し、
前記構成要素候補抽出部によって抽出されたメソッドをクラス単位で集計するメソッド集計部と、
前記メソッド集計部によって集計されたメソッドの数をもとにクラスを選択するクラス候補抽出部とをさらに備えた、請求項1に記載のソースコード検索装置。 - プログラムを構成するソースコードの構文を解析し、構成要素を抽出するソースコード構文解析ステップと、
プログラムの振る舞いを示す文章を入力する文章入力ステップと、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語とを比較して前記構成要素と前記文章との関連度を得る構成要素−文章比較ステップと、
前記関連度に基づいて、前記文章が示すプログラムの振る舞いを実現する構成要素の候補を前記ソースコードから抽出する構成要素候補抽出ステップとを備えた、ソースコード検索方法。 - 2つの単語を比較して意味的に同じかどうかを判定する単語比較ステップと、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書ステップ、および、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書ステップの少なくとも一方をさらに備え、
前記構成要素−文章比較ステップにおいては、前記単語比較ステップを実行させて、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との比較、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも1つの比較を行なって前記関連度を得る、請求項6に記載のソースコード検索方法。 - 前記構成要素の識別子を解析して前記構成要素に含まれる単語を抽出する識別子単語分解ステップと、
前記文章を文法的に解析して前記文章に含まれる単語を抽出する文章構文解析ステップと、
前記候補の中から構成要素を選択する構成要素選択ステップとをさらに備えた、請求項6に記載のソースコード検索方法。 - 前記文章構文解析ステップにおいては、前記単語の品詞を特定し、
前記構成要素−文章比較ステップにおいては、前記品詞を考慮して前記関連度を得る、請求項8に記載のソースコード検索方法。 - 前記構成要素にはクラスおよびメソッドが含まれ、
前記構成要素の識別子はクラス名およびメソッド名であって、
前記構成要素候補抽出ステップにおいては、前記関連度に基づいて、前記ソースコードからクラスおよびメソッドの候補を抽出し、
前記構成要素候補抽出ステップにおいて抽出されたメソッドをクラス単位で集計するメソッド集計ステップと、
前記メソッド集計部ステップにおいて集計されたメソッドの数をもとにクラスを選択するクラス候補抽出ステップとをさらに備えた、請求項6に記載のソースコード検索方法。 - コンピュータにソースコードの検索を実行させるプログラムであって、
プログラムを構成するソースコードの構文を解析し、構成要素を抽出するソースコード構文解析ステップと、
プログラムの振る舞いを示す文章を入力する文章入力ステップと、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語とを比較して前記構成要素と前記文章との関連度を得る構成要素−文章比較ステップと、
前記関連度に基づいて、前記文章が示すプログラムの振る舞いを実現する構成要素の候補を前記ソースコードから抽出する構成要素候補抽出ステップとを実行させる、ソースコード検索プログラム。 - 2つの単語を比較して意味的に同じかどうかを判定する単語比較ステップと、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の言語を翻訳する翻訳辞書ステップ、および、
前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方の類義語を取得する類義語辞書ステップの少なくとも一方をさらに実行させ、
前記構成要素−文章比較ステップにおいては、前記単語比較ステップを実行させて、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との比較、前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が翻訳された単語の比較、および前記構成要素の識別子に含まれる単語と前記文章に含まれる単語との少なくとも一方が類義語である単語の比較のうちの少なくとも1つの比較を行なって前記関連度を得る、請求項11に記載のソースコード検索プログラム。 - 前記構成要素の識別子を解析して前記構成要素に含まれる単語を抽出する識別子単語分解ステップと、
前記文章を文法的に解析して前記文章に含まれる単語を抽出する文章構文解析ステップと、
前記候補の中から構成要素を選択する構成要素選択ステップとをさらに実行させる、請求項11に記載のソースコード検索プログラム。 - 前記文章構文解析ステップにおいては、前記単語の品詞を特定し、
前記構成要素−文章比較ステップにおいては、前記品詞を考慮して前記関連度を得る、請求項13に記載のソースコード検索プログラム。 - 前記構成要素にはクラスおよびメソッドが含まれ、
前記構成要素の識別子はクラス名およびメソッド名であって、
前記構成要素候補抽出ステップにおいては、前記関連度に基づいて、前記ソースコードからクラスおよびメソッドの候補を抽出し、
前記構成要素候補抽出ステップにおいて抽出されたメソッドをクラス単位で集計するメソッド集計ステップと、
前記メソッド集計部ステップにおいて集計されたメソッドの数をもとにクラスを選択するクラス候補抽出ステップとをさらに実行させる、請求項11に記載のソースコード検索プログラム。 - 請求項11〜15のいずれかに記載のソースコード検索プログラムを記録した、コンピュータ読取可能な記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005049305A JP2006235970A (ja) | 2005-02-24 | 2005-02-24 | ソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005049305A JP2006235970A (ja) | 2005-02-24 | 2005-02-24 | ソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006235970A true JP2006235970A (ja) | 2006-09-07 |
Family
ID=37043555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005049305A Withdrawn JP2006235970A (ja) | 2005-02-24 | 2005-02-24 | ソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2006235970A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020194238A (ja) * | 2019-05-24 | 2020-12-03 | 株式会社日立製作所 | ソフトウェア開発文書検索装置及び方法 |
-
2005
- 2005-02-24 JP JP2005049305A patent/JP2006235970A/ja not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020194238A (ja) * | 2019-05-24 | 2020-12-03 | 株式会社日立製作所 | ソフトウェア開発文書検索装置及び方法 |
JP7240252B2 (ja) | 2019-05-24 | 2023-03-15 | 株式会社日立製作所 | ソフトウェア開発文書検索装置及び方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107209759B (zh) | 注解辅助装置及记录介质 | |
US8812301B2 (en) | Linguistically-adapted structural query annotation | |
US8484238B2 (en) | Automatically generating regular expressions for relaxed matching of text patterns | |
US6910004B2 (en) | Method and computer system for part-of-speech tagging of incomplete sentences | |
US8280721B2 (en) | Efficiently representing word sense probabilities | |
TW201314476A (zh) | 基於本體之自動自助式使用者支援 | |
JP2005535007A (ja) | 文書検索システム用の知識抽出のための自己学習システムの合成方法 | |
EP1542138A1 (en) | Learning and using generalized string patterns for information extraction | |
JP3372532B2 (ja) | 感情情報抽出方法および感情情報抽出プログラムの計算機読み取り可能な記録媒体 | |
Wax | Automated grammar engineering for verbal morphology | |
JP2004246440A (ja) | 形態素解析装置、自然言語処理装置、形態素解析方法及びプログラム | |
JP4431759B2 (ja) | 未登録語自動抽出装置及びプログラム、並びに未登録語自動登録装置及びプログラム | |
JP5228451B2 (ja) | 文書検索装置 | |
JP4401269B2 (ja) | 対訳判断装置及びプログラム | |
JP2006235970A (ja) | ソースコード検索装置、ソースコード検索方法、ソースコード検索プログラム、およびソースコード検索プログラムを記録する記録媒体 | |
Souter et al. | Using Parsed Corpora: A review of current practice | |
JP2006228242A (ja) | 翻訳装置、翻訳プログラム及び翻訳方法 | |
JP4059501B2 (ja) | 自然語辞書更新装置 | |
JP4588417B2 (ja) | 翻訳装置 | |
JP3353647B2 (ja) | 機械翻訳システム用辞書・ルール学習装置及び機械翻訳システム用辞書・ルール学習プログラムを格納した記憶媒体 | |
JPH0561902A (ja) | 機械翻訳システム | |
JP4087829B2 (ja) | 結合価辞書拡張装置、方法、およびプログラム | |
KR101450795B1 (ko) | 대용어 복원 장치 및 방법 | |
JP5176481B2 (ja) | 関係知識抽出装置 | |
JP2007226636A (ja) | 係り受け構造解析装置及びコンピュータプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20080513 |