(57)【要約】【課題】類似する変数名を広域に渡るスコープから検索可能とし、変数名のマージ作業などを効率的にかつ適正に行う【解決手段】検索対象変数名が変数名入力部１から与えられると、検索部８では、変数データベース６に蓄えられた変数データに基づいて、当該検索対象変数名の属するスコープと継承関係のあるスコープ間で検索用の双方向リンク構造を生成し、当該検索対象変数名の属するスコープから検索用の双方向リンク構造で辿れるすべてのスコープに属する変数名を類似度計算対象変数名として列挙し、その列挙された変数について、同義語辞書７を用いて検索対象変数名に対する類似度を求め、それぞれの類似度計算対象変数名とその類似度、スコープ名を検索結果として検索結果表示部９で表示する。【選択図】      図１
2004326312.tif 000002
【特許請求の範囲】
【請求項１】
入力された変数名がどのスコープに属するかを検出するとともに、どのスコープを上位スコープとして持つかを検出するスコープ検出手段と、
前記入力された変数名を単語分解規則データベースの内容に基づいて当該変数名を構成する単語に分解する単語分解手段と、
この単語分解手段によって得られた単語群、前記スコープ検出手段から渡された変数名、その変数名の属するスコープ、そのスコープの上位スコープを変数データとして蓄える変数データベースと、
検索対象となる変数名に類似する変数名を検索する機能を有し、その機能を実行する際は、前記変数データベースに蓄えられた変数データに基づいて、当該検索対象となる変数名の属するスコープと継承関係にあるスコープ間で検索用の双方向リンク構造を生成し、前記検索対象となる変数の属するスコープからその検索用の双方向リンク構造で辿ることのできるそれぞれのスコープに属する変数名を類似度計算対象変数名として列挙し、その列挙された類似度計算対象変数名について前記検索対象となる変数名に対する類似度を求める検索手段と、
この検索手段による検索結果を表示する表示手段と、
を有することを特徴とするソースコード編集装置。
【請求項２】
請求項１に記載のソースコード編集装置において、前記それぞれの変数名に対する同義語が記述された同義語辞書を設け、前記検索手段は、その同義語辞書を用いて、省略された変数名に対してはそれを元の単語に戻し、かつ、その元の単語がより一般的な同義の単語に変換可能な場合には、そのより一般的な同義の単語に変換した上で、前記した検索処理を行うことを特徴とするソースコード編集装置。
【請求項３】
請求項１または２記載のソースコード編集装置において、前記単語分解規則データベースに蓄えられる単語分解規則は、それぞれの変数名についてその変数名に存在する規則的な区切り箇所で区切ることを設定した規則であって、この規則を入力する単語分解規則入力手段を有することを特徴とするソースコード編集装置。
【請求項４】
請求項３に記載のソースコード編集装置において、前記変数名に存在する規則的な区切り箇所は、その変数名がアルファベットの組み合わせまたはアルファベットと数字の組み合わせを用いてなる場合にはその変数名における小文字と大文字との間の部分、または、アルファベットや数字の間に挿入されるアルファベットや数字以外の文字や記号部分であることを特徴とするソースコード編集装置。
【請求項５】
請求項１から４のいずれかに記載のソースコード編集装置において、前記類似度計算対象変数名について前記検索対象となる変数名に対する類似度を求める際、当該検索対象となる変数名の属するスコープから見たときのスコープの近さに応じた重みを継承関係重みとして設定し、その継承関係重みを反映した類似度を求めることを特徴とするソースコード編集装置。
【請求項６】
請求項１から５のいずれかに記載のソースコード編集装置において、前記表示手段に表示される検索結果は、前記それぞれの類似度計算対象変数名と、その変数名に対して求められた類似度と、その変数名の属するスコープを含むことを特徴とするソースコード編集装置。
【請求項７】
ソースコードの編集とともに編集されたソースコードから類似する変数名を検索するソースコード編集処理方法において、
ソースコード編集時における処理手順としては、入力された変数名がどのスコープに属するかを検出するとともに、どのスコープを上位スコープとして持つかを検出するスコープ検出ステップと、前記入力された変数名を単語分解規則データベースの内容に基づいて当該変数名を構成する単語に分解する単語分解ステップと、この単語分解ステップによって得られた単語群、前記スコープ検出手段から渡された変数名、その変数名の属するスコープ、そのスコープの上位スコープを変数データとして変数データベースに蓄えるステップとを含み、
検索対象となる変数名に類似する変数名を検索する検索処理手順としては、前記変数データベースに蓄えられた変数データに基づいて、当該検索対象となる変数名の属するスコープと継承関係にあるスコープ間で検索用の双方向リンク構造を生成するステップと、前記検索対象となる変数の属するスコープからその検索用の双方向リンク構造で辿ることのできるそれぞれのスコープに属する変数名を類似度計算対象変数名として列挙し、その列挙された類似度計算対象変数名について前記検索対象となる変数名に対する類似度を求めるステップとを含む、
ことを特徴とするソースコード編集処理方法。
【請求項８】
ソースコードの編集とともに編集されたソースコードから類似する変数名を検索するソースコード編集処理プログラムにおいて、
ソースコード編集時における処理手順としては、入力された変数名がどのスコープに属するかを検出するとともに、どのスコープを上位スコープとして持つかを検出するスコープ検出ステップと、前記入力された変数名を単語分解規則データベースの内容に基づいて当該変数名を構成する単語に分解する単語分解ステップと、この単語分解ステップによって得られた単語群、前記スコープ検出手段から渡された変数名、その変数名の属するスコープ、そのスコープの上位スコープを変数データとして変数データベースに蓄えるステップとを含み、
検索対象となる変数名に類似する変数名を検索する検索処理手順としては、前記変数データベースに蓄えられた変数データに基づいて、当該検索対象となる変数名の属するスコープと継承関係にあるスコープ間で検索用の双方向リンク構造を生成するステップと、前記検索対象となる変数の属するスコープからその検索用の双方向リンク構造で辿ることのできるそれぞれのスコープに属する変数名を類似度計算対象変数名として列挙し、その列挙された類似度計算対象変数名について前記検索対象となる変数名に対する類似度を求めるステップとを含む、
ことを特徴とするソースコード編集処理プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムソースコードを編集するソースコード編集装置およびソースコード編集処理方法ならびにそのソースコード編集処理をコンピュータ上で実行可能なソースコード編集処理プログラムに関する。
【０００２】
【従来の技術】
プログラムで使われる変数がその有効範囲（スコープ）を持つ代表的なプログラミング言語として、Ｃ、Ｃ＋＋、Ｊａｖａ言語（但し、Ｊａｖａは登録商標）がある。これらの言語では、スコープが違えば同じ名前の変数を定義することができる。このことは便利な反面、プログラムの保守を行う上で、編集作業などを非効率にするという問題もある。たとえば、異なるスコープで同じ名前の変数を定義してしまうことがあり、これは、エディタで複数のファイルを開きながら有効な変数を探すという手間のかかる作業を伴い、プログラムの理解を難しくする結果につながる。
【０００３】
この問題点を解決するために、スコープを利用しながら、同じ名前の変数を見つけるものとして、たとえば、特開平５−２３３２６０号公報に記載の技術や、特開平５−２５７６６８号公報に記載の技術がある。また、スコープを利用して同じ意味の変数名を同時に変更する技術として、特開平１０−２５４６８８号公報に記載の従来がある。
【０００４】
【特許文献１】
特開平５−２３３２６０号公報
【特許文献２】
特開平５−２５７６６８号公報
【特許文献３】
特開平１０−２５４６８８号公報
【０００５】
【発明が解決しようとする課題】
プログラムの保守を続けて行くと、すべてのコードを理解することが困難になるため、同じ名前でなくても、似たような名前の変数をいくつも作ってしまうことがよくある。このことは、プログラム実行に必要なメモリの増大、実行速度の低下を招くばかりでなく、プログラムの理解の難しさを招く結果にもなる。
【０００６】
そこで、同じ名前の変数をできるだけまとめる作業が必要となるが、上述の各特許文献に記載の技術では、同一の変数名だけを見つけることはできるものの、下位のスコープの検索は行われないので、類似する変数を広域に渡って見つけることは難しい。
【０００７】
本発明はこのような問題点を解決するためになされたもので、類似する変数名を広域に渡って検索可能とし、変数名のマージ作業を効率よく、かつ、適正に行うことのできるソースコード編集装置およびソースコード編集処理方法ならびにソースコード編集処理プログラムを提供することを目的としている。
【０００８】
【課題を解決するための手段】
上述した目的を達成するために、本発明のソースコード編集装置は、入力された変数名がどのスコープに属するかを検出するとともに、どのスコープを上位スコープとして持つかを検出するスコープ検出手段と、前記入力された変数名を単語分解規則データベースの内容に基づいて当該変数名を構成する単語に分解する単語分解手段と、この単語分解手段によって得られた単語群、前記スコープ検出手段から渡された変数名、その変数名の属するスコープ、そのスコープの上位スコープを変数データとして蓄える変数データベースと、検索対象となる変数名に類似する変数名を検索する機能を有し、その機能を実行する際は、前記変数データベースに蓄えられた変数データに基づいて、当該検索対象となる変数名の属するスコープと継承関係にあるスコープ間で検索用の双方向リンク構造を生成し、前記検索対象となる変数の属するスコープからその検索用の双方向リンク構造で辿ることのできるそれぞれのスコープに属する変数名を類似度計算対象変数名として列挙し、その列挙された類似度計算対象変数名について前記検索対象となる変数名に対する類似度を求める検索手段と、この検索手段による検索結果を表示する表示手段とを有することを特徴としている。
【０００９】
このようなソースコード編集装置において、前記それぞれの変数名に対する同義語が記述された同義語辞書を設け、前記検索手段は、その同義語辞書を用いて、省略された変数名に対してはそれを元の単語に戻し、かつ、その元の単語がより一般的な同義の単語に変換可能な場合には、そのより一般的な同義の単語に変換した上で、前記した検索処理を行うことが好ましい。
【００１０】
また、このソースコード編集装置において、前記単語分解規則データベースに蓄えられる単語分解規則は、それぞれの変数名についてその変数名に存在する規則的な区切り箇所で区切ることを設定した規則であって、この規則を入力する単語分解規則入力手段を有することが好ましい。
【００１１】
そして、前記変数名に存在する規則的な区切り箇所は、その変数名がアルファベットの組み合わせまたはアルファベットと数字の組み合わせを用いてなる場合にはその変数名における小文字と大文字との間の部分、または、アルファベットや数字の間に挿入されるアルファベットや数字以外の文字や記号部分とすることが好ましい。
【００１２】
また、このソースコード編集装置において、前記類似度計算対象変数名について前記検索対象となる変数名に対する類似度を求める際、当該検索対象となる変数名の属するスコープから見たときのスコープの近さに応じた重みを継承関係重みとして設定し、その継承関係重みを反映した類似度を求めることが好ましい。
【００１３】
また、このソースコード編集装置において、前記表示手段に表示される検索結果は、前記それぞれの類似度計算対象変数名と、その変数名に対して求められた類似度と、その変数名の属するスコープを含むことが好ましい。
【００１４】
また、本発明のソースコード編集処理方法は、ソースコードの編集とともに編集されたソースコードから類似する変数名を検索するソースコード編集処理方法において、ソースコード編集時における処理手順としては、入力された変数名がどのスコープに属するかを検出するとともに、どのスコープを上位スコープとして持つかを検出するスコープ検出ステップと、前記入力された変数名を単語分解規則データベースの内容に基づいて当該変数名を構成する単語に分解する単語分解ステップと、この単語分解ステップによって得られた単語群、前記スコープ検出手段から渡された変数名、その変数名の属するスコープ、そのスコープの上位スコープを変数データとして変数データベースに蓄えるステップとを含み、検索対象となる変数名に類似する変数名を検索する検索処理手順としては、前記変数データベースに蓄えられた変数データに基づいて、当該検索対象となる変数名の属するスコープと継承関係にあるスコープ間で検索用の双方向リンク構造を生成するステップと、前記検索対象となる変数の属するスコープからその検索用の双方向リンク構造で辿ることのできるそれぞれのスコープに属する変数名を類似度計算対象変数名として列挙し、その列挙された類似度計算対象変数名について前記検索対象となる変数名に対する類似度を求めるステップとを含むことを特徴としている。
【００１５】
また、本発明のソースコード編集処理プログラムは、ソースコードの編集とともに編集されたソースコードから類似する変数名を検索するソースコード編集処理プログラムにおいて、ソースコード編集時における処理手順としては、入力された変数名がどのスコープに属するかを検出するとともに、どのスコープを上位スコープとして持つかを検出するスコープ検出ステップと、前記入力された変数名を単語分解規則データベースの内容に基づいて当該変数名を構成する単語に分解する単語分解ステップと、この単語分解ステップによって得られた単語群、前記スコープ検出手段から渡された変数名、その変数名の属するスコープ、そのスコープの上位スコープを変数データとして変数データベースに蓄えるステップとを含み、検索対象となる変数名に類似する変数名を検索する検索処理手順としては、前記変数データベースに蓄えられた変数データに基づいて、当該検索対象となる変数名の属するスコープと継承関係にあるスコープ間で検索用の双方向リンク構造を生成するステップと、前記検索対象となる変数の属するスコープからその検索用の双方向リンク構造で辿ることのできるそれぞれのスコープに属する変数名を類似度計算対象変数名として列挙し、その列挙された類似度計算対象変数名について前記検索対象となる変数名に対する類似度を求めるステップとを含むことを特徴としている。
【００１６】
このように本発明は、検索対象となる変数名に対する類似変数名を検索する際は、変数データベースに蓄えられている変数データに基づいて、当該検索対象となる変数名の属するスコープと継承関係にあるすべてのスコープ間で検索用の双方向リンク構造を生成し、当該検索対象となる変数名の属するスコープから前記検索用の双方向リンク構造で辿れるすべてのスコープに属する変数名を類似度計算対象変数名として列挙し、その列挙された変数名について検索対象となる変数名に対する類似度を求めるようにしている。
【００１７】
これによって、たとえば、プログラムの保守を続けて行く段階で、似たような名前の変数をいくつも作ってしまい、同じ名前の変数をできるだけまとめる作業などを行うような場合、類似する変数を基底クラスや派生クラスだけでなく兄弟クラスなど広域に渡るクラスの変数も検索することができる。また、このような広域に渡る検索を行う際、その検索用の双方向リンク構造から外れるスコープに属する変数は検索範囲外となるので、無駄な範囲までの検索をしなくても済む。これによって、変数名のマージ作業などを効率よく、かつ、的確に行うことができる。
【００１８】
また、前記単語分解規則データベースに蓄えられる単語分解規則は、それぞれの変数名についてその変数名に存在する規則的な区切り箇所で区切る規則を設けることによって、効率よく的確に区切ることができる。
【００１９】
一般に、変数名は、わかり易さの助けとするため、変数名として意味のわかる名前がある規則を持って付けられることが多く、また、変数名を入力する際のキー入力数を減らすため、規則的な省略名が使われることが多い。
【００２０】
このため、たとえば、ＩｓＣｒｃｌＭｏｄというようなアルファベットの組み合わせでなる変数名が用いられた場合、小文字と大文字との間の部分で区切るというような規則を与えることで、上述の変数名ＩｓＣｒｃｌＭｏｄは、Ｉｓ  Ｃｒｃｌ  Ｍｏｄというように区切ることができる。また、小文字と大文字との間の部分以外に、アルファベットや数字の間に付されるアルファベットや数字以外の文字や記号部分でも区切ることができる。たとえば、ｉｓ＿ｃｒｃｌ＿ｍｏｄのように、アンダスコアが存在する場合には、そのアンダスコアで区切ったりするというような規則を与えることで、変数名を効率よく的確に区切ることができる。なお、これは、変数名の中に使用することが許される記号であれば、アンダスコア以外の他の記号であってもよい。
【００２１】
そして、このように、単語分解されて生成された単語群を用いて検索処理としての類似度計算を行うことで、類似度計算を容易なものとし、かつ、高精度な類似度を得ることができる。
【００２２】
また、検索手段が検索処理としての類似度計算を行う際は、省略された変数名に対してはそれを元の単語に戻し、かつ、その元の単語をより一般的な同義の単語に変換可能な場合は、その同義の単語に変換した上で、検索処理としての類似度計算を行うようにしているので、信頼性の高い類似度を得ることができる。
【００２３】
また、類似度を求める際、検索用の双方向リンク構造におけるスコープの近さに応じた重みを継承関係重みとして設定し、その継承関係重みを反映した類似度を求めるようにしているので、検索対象として入力された変数名に対する類似度は、変数名そのものの近さからだけではなくスコープの近さも考慮した類似度が得られるので、類似度の信頼性をより一層高めることができる。それによって、より信頼性の高い検索結果を得ることができ、変数名のマージ作業を適切に行うことができる。
【００２４】
また、検索結果を表示手段に表示させる際、その表示内容としては、それぞれの変数名と、その変数に対して求められた類似度と、その変数名の属するスコープを表示するようにしている。これによって、その表示結果を見ることによって、変数名のマージ作業を効率よく行うことができる。
【００２５】
【発明の実施の形態】
以下、本発明の実施の形態について説明する。なお、この実施の形態で説明する内容は、本発明のソースコード編集装置、ソースコード編集処理方法、ソースコード編集処理プログラムの説明を含むものである。
【００２６】
図１は本発明のソースコード編集装置の構成図であり、変数の定義が終わるときと類似する変数名を検索するときにその変数名の入力がなされる変数名入力部１、この変数名入力部１により渡された変数がどのスコープに属するか、また、どのスコープを上位スコープとして持つかを検出するスコープ検出部２、変数名を単語に分解するための規則を入力する単語分解規則入力部３、この単語分解規則入力部３から入力された単語分解規則を蓄える単語分解規則データベース４、この単語分解規則データベース４に蓄えられている単語分解規則に基づいて上述の変数名入力部１から入力された変数名を単語に分解する単語分解部５、この単語分解部５の分解処理によって得られた単語群、上述のスコープ検出部２により渡される変数名とその変数の属するスコープ、変数の属するスコープの上位スコープなどのデータを変数データとして蓄える変数データベース６、省略名を元の単語に戻したり、ある単語を同義の単語に変換したりするための同義語辞書７、検索対象となる変数名が入力されると、単語分解部５によって生成された単語群や同義語辞書７に蓄えられたデータさらには変数データベース６に蓄えられた変数データに基づいて、当該検索対象となる変数名とソースコードに存在する変数名との類似度を計算する検索部８、この検索部８により検索された変数名やその変数名が属するスコープ、求められた類似度を表示する検索結果表示部９を有した構成となっている。
【００２７】
なお、この図１において、ある構成要素からある構成要素に向かうデータの流れを示す矢印の線において、一点鎖線で示す矢印は編集を行う際のデータの流れを示し、破線で示す矢印は類似変数名の検索を行う際のデータの流れを示し、実線で示す矢印は編集を行う際と類似変数名の検索を行う際の共通のデータの流れを示している。
【００２８】
このような構成において、まず、ソースコード編集処理について説明する。なお、ここで説明する実施の形態では、プログラミング言語としてＣ＋＋言語を用いた例について説明する。
【００２９】
Ｃ＋＋言語では、主に、クラスの継承関係により変数のスコープが決定される。ここで、上位スコープとは、基底クラスのスコープであり、下位スコープとは派生クラスのスコープである。これら基底クラス、派生クラスの継承関係を図２に示す。図２において、矢印の行き先に当たるクラスは基底クラスである。
【００３０】
この図２において、クラスＤｒａｗＤａｔａに注目すると、クラスＢａｓｅＤａｔａは基底クラスであり、基底クラスのスコープは派生クラスに引き継がれるため、基底クラスＢａｓｅＤａｔａの変数ＩｓＵｐｄａｔｅｄは、クラスＤｒａｗＤａｔａで有効となる。
【００３１】
また、クラスＲｅｃＤａｔａやクラスＣｉｒｃｌｅＤａｔａはクラスＤｒａｗＤａｔａから見れば派生クラスであるので、クラスＲｅｃＤａｔａの変数ＩｓＲｃＣｈｎｇｅｄやクラスＣｉｒｃｌｅＤａｔａの変数ＩｓＣｒｃｌＭｏｄはクラスＤｒａｗＤａｔａでは有効とならない。
【００３２】
また、クラスＤＢＤａｔａは、クラスＢａｓｅＤａｔａから派生したクラスＤｒａｗＤａｔａと兄弟クラスであるが、クラスＤｒａｗＤａｔａの基底クラスではないため、その変数ＩｓＤＢＣｈｎｇｅｄはクラスＤｒａｗＤａｔａでは有効とならない。
【００３３】
なお、図２からもわかるように、変数名には英語などのアルファベットの組み合わせが一般的であり、わかり易さの助けとするため、その変数名が何を意味しているのかをその変数名を見ればわかるような名前が用いられ、しかも、その名前には、ある規則性を持たせるのが普通である。また、変数名は入力時におけるキー入力数を減らすため、規則的な省略名が使われることが多い。
【００３４】
たとえば、変数名ＩｓＣｒｃｌＭｏｄのＣｒｃｌはＣｉｒｃｌｅから母音を除去したものであり、ＭｏｄはＭｏｄｉｆｉｅｄの省略である。また、変数名ＩｓＲｃＣｈｎｇｅｄのＲｃはＲｅｃｔａｎｇｌｅの省略、ＣｈｎｇｅｄはＣｈａｎｇｅｄの省略である。また、変数名を構成する単語は、ここでの例のように変数名がアルファベットの組み合わせを用いてなる場合は、小文字と大文字との間の部分で区切ったり（例：Ｉｓ  Ｒｃ  Ｃｈｎｇｅｄ）、あるいは、アンダスコアなどの記号が用いられている場合には、アンダスコアで区切ったりするのが一般的である（例：ｉｓ＿ｃｒｃｌ＿ｍｏｄ）。
【００３５】
次に、変数データベース６の生成手順について説明する。ここでは、図２で示したクラスの定義がソースコードに書き込まれて行くとする。Ｃ＋＋言語における文の末尾は；であるから、この；が入力された時点でコンパイラなどが行う構文解析を行い、その文が変数の定義であるか判定する。もし、変数の定義であれば、その上位スコープが変数定義位置に基づいて決定される。同時に、その変数名は変数名入力部１から単語分解部５に渡され、単語分解規則データベース４に蓄えられた単語分解規則を適用し、その変数名は単語群に分解され、その分解された単語群によって単語配列に変換される。そして、変数名、その変数名の単語配列、その変数名が属するスコープ、その上位スコープが変数データとして変数データベース６に格納される。
【００３６】
なお、変数名を単語分解するために必要な規則は単語分解規則入力部３によって、変数名をどのような単語に分解するかの規則が与えられる。この単語分解規則は、それぞれの変数名についてその変数名に存在する規則的な区切り箇所で区切ることを設定した規則であって、変数名に存在する規則的な区切り箇所は、その変数名がアルファベットの組み合わせまたはアルファベットと数字の組み合わせを用いてなる場合には、その変数名における小文字と大文字との間の部分、または、アルファベットや数字の間に挿入されるアルファベットや数字以外の文字や記号部分（たとえば、アンダスコアなど）とする。
【００３７】
たとえば、単語分解規則として、小文字と大文字との間の部分で区切るというような規則が与えられているとすれば、図２の例で示された変数名を単語に分解するには、小文字と大文字との間の部分で区切ることによって、変数名を単語に分解する。単語分解規則データベース４には、このような単語分解規則が蓄えられている。これによって、たとえば、変数名ＩｓＤｒａｗＭｏｄは、ＩｓとＤｒａｗとＭｏｄの単語群に分解され、Ｉｓ，Ｄｒａｗ，Ｍｏｄ  という単語配列が生成される。
【００３８】
このようにして作成された変数データベースの一例を図３に示す。この変数データベースは、変数名、その単語配列、その変数が属するスコープ、その上位スコープからなり、たとえば、変数ＩｓＤｒａｗＭｏｄは、その単語配列としてはＩｓ，Ｄｒａｗ，Ｍｏｄ、属するスコープとしてはＤｒａｗＤａｔａ、その上位スコープとしてはＢａｓｅＤａｔａというようなデータが変数データとして書き込まれている。
【００３９】
次に、類似変数名を検索する処理について説明する。類似変数名を検索するときは、検索対象となる変数名（検索対象変数名という）を図１で示した変数名入力部１に入力する。
【００４０】
変数名入力部１に入力された検索対象変数名は、単語分解部５に渡され、単語分解規則データベース４に記述内容に基づいた単語分解処理がなされる。たとえば、検索対象変数名としてＩｓＤｒａｗＭｏｄが入力されたとし、また、単語分解規則として、小文字と大文字との間の部分で区切るというような規則が与えられているとすれば、変数名ＩｓＤｒａｗＭｏｄは、上述したように、ＩｓとＤｒａｗとＭｏｄ  の３つの単語に分解され、それによって、単語配列Ｉｓ，Ｄｒａｗ，Ｍｏｄ  が生成される。
【００４１】
一方、検索部８は単語分解部５によって得られた単語配列と変数データベース６に蓄えられた変数データと同義語辞書７の内容に基づいて、検索対象変数名に類似する変数名を検索する処理を行う。
【００４２】
この検索処理は、まず、変数データベース６に蓄えられている変数データに基づいて、その検索対象変数名の属するスコープと継承関係にあるスコープ、すなわち、その検索対象変数名の属するスコープから見て、スコープの上位および下位の関係で辿れるスコープに属する全ての変数を類似度計算対象変数として列挙する。
【００４３】
これは、変数データベース６に蓄えられている変数データに基づき、検索用の双方向リンク構造を作成することによって行う。その検索用の双方向リンク構造は、まず、図４（ａ）に示すような検索用の双方向リンク構造作成用の構成要素データを作成する。
【００４４】
この図４（ａ）に示す個々の変数に関する構成要素データは、変数名（ｖａｌ）、その変数名が属するスコープ名（ｓｃｏｐｅ）、その上位スコープリスト（ｓｕｐ＿ｓｃｏｐｅ＿ｌｉｓｔ）および下位スコープリスト（ｓｕｂ＿ｓｃｏｐｅ＿ｌｉｓｔ）からなる。
【００４５】
そして、このような検索用リンク構造作成用の構成要素データを用いて、検索対象変数名の属するスコープと継承関係のあるすべてのスコープ間で図４（ｂ）に示すような検索用の双方向リンク構造を生成する。
【００４６】
この図４（ｂ）に示す検索用の双方向リンク構造は、図２に示すクラスＢａｓｅＤａｔａ、クラスＤＢＤａｔａ、クラスＤｒａｗＤａｔａ、クラスＲｅｃＤａｔａ、クラスＣｉｒｃｌｅＤａｔａで構成された検索用の双方向リンク構造である。
【００４７】
この図４（ｂ）に示す検索用の双方向リンク構造において、変数名ＩｓＵｐｄａｔｅｄはスコープＢａｓｅＤａｔａに属し、その上位スコープは無し、その下位スコープはＤＢＤａｔａとＤｒａｗＤａｔａであることを示している。また、変数名ＩｓＤＢＣｈｎｇｅｄはスコープＤＢＤａｔａに属し、その上位スコープはＢａｓｅＤａｔａ、その下位スコープは無しであることを示している。
【００４８】
また、変数名ＩｓＤｒａｗＭｏｄはスコープＤｒａｗＤａｔａに属し、その上位スコープはＢａｓｅＤａｔａ、その下位スコープはＲｅｃＤａｔａとＣｉｒｃｌｅＤａｔａであることを示している。また、変数名ＩＲｃＣｈｎｇｅｄはスコープＲｅｃＤａｔａに属し、その上位スコープはＤｒａｗＤａｔａ、その下位スコープは無しであることを示し、変数名ＩｓＣｒｃｌＭｏｄはスコープＣｉｒｃｌｅＤａｔａに属し、その上位スコープはＤｒａｗＤａｔａ、その下位スコープは無しであることを示している。
【００４９】
このような検索用の双方向リンク構造において、たとえば、クラスＤｒａｗＤａｔａの変数名ＩｓＤｒａｗＭｏｄを検索対象変数名とすると、その上位スコープである基底クラスＢａｓｅＤａｔａの変数名ＩｓＵｐｄａｔｅｄ、下位スコープである派生クラスＲｅｃＤａｔａの変数名ＩｓＲｃＣｈｎｇｅｄ、同じく派生クラスＣｉｒｃｌｅＤａｔｅの変数名ＩｓＣｒｃｌＭｏｄ、さらに、兄弟クラスＤＢＤａｔａの変数名ＩｓＤＢＣｈｎｇｅｄがそれぞれ類似度計算対象変数名として列挙される。
【００５０】
なお、図２で示したクラスＦｌｏｗｅｒの変数名Ｃｏｌｏｒや、クラスＲｏｓｅの変数名ＮｕｍＳｐｉｋｅｓは、図４（ｂ）のように作成された検索用の双方向リンク構造からは外れるので、類似度計算対象変数名として列挙されない。
【００５１】
次に、このようにして列挙された類似度計算対象変数名に対し、同義語辞書７を用いて、まず、省略されている変数名に対しては、その省略された変数名を元の単語に戻し、必要であれば、その元の単語をより一般的な単語に変換する。
【００５２】
図５は同義語辞書７の内容の一例を示すもので、変数名の主な構成要素である省略された単語から元の単語への変換、さらには、その元の単語からより一般的な単語へと変換される例が示されている。
【００５３】
この図５に示す同義語辞書７によれば、たとえば、変数名の主な構成要素であるＭｏｄという省略された単語に対しては、元の単語としてＭｏｄｉｆｉｅｄが記述され、そのＭｏｄｉｆｉｅｄに対するより一般的な単語としてはＣｈａｎｇｅｄが記述されている。また、同様に、変数名の主な構成要素であるＣｈｎｄｅｄという省略された単語に対しては、元の単語としてＣｈａｎｇｅｄが記述され、そのＣｈａｎｇｅｄ  に対するより一般的な単語として、この場合は、そのままＣｈａｎｇｅｄが記述されている。
【００５４】
このような同義語辞書７を参照して変換を行うことにより、Ｍｏｄｉｆｉｅｄはより一般的な単語として、この場合、Ｃｈａｎｇｅｄ  に変換され、ＣｈａｎｇｅｄはそのままＣｈａｎｇｅｄとなり、この場合、それぞれ同義語であるＣｈａｎｇｅｄに統一させることができる。
【００５５】
このように、この実施の形態において用いる同義語辞書７は、省略名を元の単語に戻すための辞書と、その元に戻った単語をより一般的な単語とするための辞書の２つを有し、まずは省略名を元の単語に戻し、それをより一般的な単語にするという２つの段階を経て、より一般的な統一した単語を得るようにしている。ただし、このような手法に限られるものではなく、省略された単語から最終的なより一般的な単語に直接変換するようなデータ構造としてもよい。
【００５６】
このように、図４（ｂ）で示した検索用の双方向リンク構造を辿ることによって列挙された類似度計算対象変数名に対し、同義語辞書７を用いることによって、互いに同様な意味を有する変数名は、その同義語としてより一般的な単語で統一させることができる。
【００５７】
そして、検索対象として入力された変数名（検索対象変数名）に対し、同義語辞書７による変換結果を用いて、類似文検索で広く用いられているＴＦ＊ＩＤＦを計算し、その結果としてＴＦ＊ＩＤＦ重み表を作成する。
【００５８】
すなわち、前述したように、クラスＤｒａｗＤａｔａの変数ＩｓＤｒａｗＭｏｄを検索対象変数名として入力した例で考えれば、この検索対象変数名を同義語辞書７によって変換することによって得られた統一的な単語名であるＣｈａｎｇｅｄを用いて、図４（ｂ）で示した検索用の双方向リンク構造を辿ることによって列挙されたそれぞれの類似度計算対象変数名に対するＴＦ＊ＩＤＦ重み表を作成する。
【００５９】
ここで、変数名ＩｓＤＢＣｈｎｇｅｄに対して求められたＴＦ＊ＩＤＦ重みは０．７５、変数名ＩｓＲｃＣｈｎｇｅｄに対して求められたＴＦ＊ＩＤＦ重みも０．７５、また、変数名ＩｓＣｒｃｌＭｏｄに対して求められたＴＦ＊ＩＤＦ重みは０．７８、変数名ＩｓＵｐｄａｔｅｄに対して求められたＴＦ＊ＩＤＦ重みは０．３２であったとする。
【００６０】
このようにして、検索対象変数名変数ＩｓＤｒａｗＭｏｄに対するそれぞれの類似度計算対象変数名についてＴＦ＊ＩＤＦ重みがそれぞれ計算されると、次に、これらのＴＦ＊ＩＤＦ重みに対し、検索対象変数名変数ＩｓＤｒａｗＭｏｄの属するスコープから見たスコープの近さに応じた継承関係の重み付けを行う。
【００６１】
この継承関係の重み付けは、いわば、検索対象変数名の属するスコープから見たスコープの近さを表すものであり、たとえば、図６に示す模式的な検索用の双方向リンク構造を例にとれば、検索対象変数名の属するスコープ（クラスＣ２とする）から見て、その上位スコープである基底クラスＣ１に対しては０．９を継承関係重みとし、その下位スコープである派生クラスＣ３，Ｃ４に対しては０．３をそれぞれ継承関係重みとするというような設定とする。また、その検索対象変数名が属するスコープ（クラスＣ２）から見た基底クラスＣ１の派生クラス（兄弟クラス）Ｃ５の変数名に対しては、０．９×０．３を継承関係重みとし、さらに、その派生クラス（兄弟クラスの派生クラス）Ｃ６に対しては、０．９×０．３×０．３を継承関係重みとする。また、自分（検索対象変数名が属するスコープ）の派生クラスのさらに下位のクラスがあれば、そのクラス（この図６ではクラスＣ７）に対しては、０．３×０．３を継承関係重みとするというように、検索対象変数名が属するスコープに対するスコープの近さに応じた重みが設定されている。
【００６２】
このような継承関係重みをそれぞれの類似度計算対象変数に対して得られたＴＦ＊ＩＤＦ重みに乗算する。たとえば、図２で示される継承関係において、クラスＤｒａｗＤａｔａの変数ＩｓＤｒａｗＭｏｄが検索対象変数名であるとすると、自分から見た基底クラスＢａｓｅＤａｔａに対しては、図６の例からもわかるように、継承関係重みとして０．９が設定されるので、その変数名ＩｓＵｐｄａｔｅｄに対して得られたＴＦ＊ＩＤＦ重みに０．９を乗算する。また、自分に対する派生クラスＲｅｃＤａｔａに対しては、同じく図６の例からもわかるように、継承関係重みとして０．３が設定されるので、その変数名ＩｓＲｃＣｈｎｇｅｄに対して得られたＴＦ＊ＩＤＦ重みには０．３を乗算し、同様に、自分に対するもう一つの派生クラスＣｉｒｃｌｅＤａｔａに対しては、同じく図６の例からもわかるように、継承関係重みとして０．３が設定されるので、その変数名ＩｓＣｒｃｌＭｏｄに対して得られたＴＦ＊ＩＤＦ重みには０．３を乗算する。
【００６３】
また、自分から見た基底クラスＢａｓｅＤａｔａの派生クラス（兄弟クラス）ＤＢＤａｔａに対しては、同じく図６の例からもわかるように、継承関係重みとして０．９×０．３＝０．２７が設定されるので、その変数名ＩｓＤＢＣｈｎｇｅｄに対して得られたＴＦ＊ＩＤＦ重みには０．２７が乗算される。
【００６４】
図７はクラスＤｒａｗＤａｔｅの変数ＩｓＤｒａｗＭｏｄを検索対象変数名としたとき、そこから辿れるすべてのスコープの変数名に対して得られたＴＦ＊ＩＤＦ重みとそのＴＦ＊ＩＤＦ重みに反映すべき継承関係重みを示すものである。
【００６５】
この図７に示される例では、変数名ＩｓＤＢＣｈｎｇｅｄに対して求められたＴＦ＊ＩＤＦ重みは０．７５であって、その継承関係重みは上述のように０．２７に設定されている。また、変数名ＩｓＲｃＣｈｎｇｅｄに対して求められたＴＦ＊ＩＤＦ重みは０．７５であって、その継承関係重みは上述のように０．３に設定されている。また、変数名ＩｓＣｒｃｌＭｏｄに対して求められたＴＦ＊ＩＤＦ重みは０．７８であって、その継承関係重みは上述のように０．３に設定されている。また、変数名ＩｓＵｐｄａｔｅｄに対して求められたＴＦ＊ＩＤＦ重みは０．３２であって、その継承関係重みは上述のように０．９に設定されている。
【００６６】
このようにして、検索対象変数名に対するそれぞれの類似度計算対象変数名のＴＦ＊ＩＤＦ重みと、その継承関係重みが得られると、これらから最終的な類似度を求める。
【００６７】
図８は図７で示したぞれぞれの変数名に対する最終的な類似度とそのスコープを示すもので、この最終的な類似度は、図７において、ＴＦ＊ＩＤＦ重み×継承関係重みによって得られた値であり、継承関係重みを反映した類似度としては、この例の場合、変数名ＩｓＵｐｄａｔｅｄが０．２８８と高く、以降、変数名ＩｓＣｒｃｌＭｏｄが０．２３４、変数名ＩｓＲｃＣｈｎｇｅｄが０．２２５と続き、兄弟クラスの変数名ＩｓＤＢＣｈｎｇｅｄが０．２０２５とこの中では一番低くなっている。
【００６８】
この図８に示す内容が図１で示した検索結果表示部９に表示される。これによって、たとえば、似たような名前の変数をいくつも作ってしまい、同じ名前の変数をできるだけまとめる作業などを行うような場合、類似する変数を基底クラスや派生クラスだけでなく兄弟クラスなど広域に渡るクラスの変数も検索することができる。
【００６９】
また、このような広域に渡る検索を行う際、図４（ｂ）に示すように作成された検索用の双方向リンク構造から外れるスコープに属する変数は検索範囲外となるので、無駄な範囲までの検索をしなくても済む。これによって、変数名のマージ作業などを効率よく、かつ、的確に行うことができ、変数名のマージがなされることにより、プログラムの実行速度の向上が図れるとともに、ソースコードの理解、保守が容易なものとなる。
【００７０】
なお、本発明は上述の実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲で種々変形実施可能となるものである。たとえば、前述の実施の形態では、類似変数検索を行う際、ＴＦ＊ＩＤＦによる重み付け手法を用いたが、これに代わる他の重み付け手法を用いてもよい。また、継承関係重みとして、前述の実施の形態では、基底クラスに対しては０．９、派生クラスに対しては０．３としたが、これに限られるものではない。また、この継承関係重みは必ずしも必要ではなく、変数名そのものの一致の度合いを求めて、それを類似度として用いるようにしてもよい。
【００７１】
また、図７に示した検索結果では、それぞれの変数に対して求められた類似度とその変数が属するスコープとが示されているが、これ以外に、そのクラスが記述されているファイル名やそのファイル内の行番号なども示すようにしてもよい。
【００７２】
また、前述の実施の形態では、プログラム言語としてＣ＋＋言語を用いたが、スコープを持つ言語であれば、どのような言語を用いてもよい。
【００７３】
また、本発明は以上説明した本発明を実現するための処理手順が記述された処理プログラムを作成し、その処理プログラムをフロッピィディスク、光ディスク、ハードディスクなどの記録媒体に記録させておくこともでき、本発明は、その処理プログラムの記録された記録媒体をも含むものである。また、ネットワークから当該処理プログラムを得るようにしてもよい。
【図面の簡単な説明】
【図１】本発明の実施形態に係るソースコード編集装置の構成図である。
【図２】本発明の実施形態において用いるクラスの継承関係を説明する図である。
【図３】図１で示した変数データベースに格納されるデータの一例を示す図である。
【図４】検索用の双方向リンク構造を説明する図である。
【図５】図１で示した同義語辞書の内容の一例を示す図である。
【図６】継承関係重みの設定例を説明する図である。
【図７】各変数名に対して求められたＴＦ＊ＩＤＦ重みと継承関係重みの一例を示す図である。
【図８】図１で示した検索結果表示部に表示される内容の一例を示す図である。
【符号の説明】
１  変数名入力部
２  スコープ検出部
３  単語分解規則入力部
４  単語分解規則データベース
５  単語分解部
６  変数データベース
７  同義語辞書
８  検索部
９  検索結果表示部
【図１】
2004326312.tif 000003
【図２】
2004326312.tif 000004
【図３】
2004326312.tif 000005
【図４】
2004326312.tif 000006
【図５】
2004326312.tif 000007
【図６】
2004326312.tif 000008
【図７】
2004326312.tif 000009
【図８】
2004326312.tif 000010