"ソフトウェア部品を登録するとともに、登録済みのソフトウェア部品から所望のソフトウェア部品を検索可能なソフトウェア部品管理装置であって、前記ソフトウェア部品の登録の際に、前記登録済みのソフトウェア部品および登録対象のソフトウェア部品を解析し、前記登録対象のソフトウェア部品について、類似する前記登録済みのソフトウェア部品の機能名称を外部から選択可能に提示し、当該外部から選択された機能名称と前記登録対象のソフトウェア部品とを対応させた機能名称とソフトウェア部品との対応関係情報としてデータベースに保存する機能名称解析部と、前記所望のソフトウェア部品を検索する際に、前記データベースに保存された前記機能名称とソフトウェア部品との対応関係情報から、前記所望のソフトウェア部品に関連したソフトウェア部品を抽出して出力するソフトウェア部品検索部と、を備える、ソフトウェア部品管理装置。前記機能名称を外部から選択可能に提示する手段として、前記外部に対して前記機能名称をリストアップした機能名称候補一覧を提示する出力部と、前記機能名称候補一覧から、所望の機能名称を選択して入力する入力部と、を備える、請求項1記載のソフトウェア部品管理装置。前記機能名称解析部は、前記登録対象のソフトウェア部品のソースコードと、前記登録済みのソフトウェア部品のソースコードとに基づいて、前記登録対象のソフトウェア部品ついての前記登録済みのソフトウェア部品との類似度を算出して、前記登録対象のソフトウェア部品に類似する類似ソフトウェア部品について類似ソフトウェア部品情報として出力するソフトウェア部品類似解析部と、前記類似ソフトウェア部品情報と、前記機能名称とソフトウェア部品との対応関係情報とに基づいて、前記類似ソフトウェア部品に関連付けられる機能名称を抽出して前記外部に選択可能に提示し、前記外部から選択された機能名称を機能名称情報として出力するソフトウェア部品機能名称関連解析部と、を備える、請求項1記載のソフトウェア部品管理装置。入力されたドキュメント、関連ドキュメント、機能名称群および前記登録対象のソフトウェア部品のそれぞれに対して識別番号を付与して、ソフトウェア部品とドキュメントの対応情報、ドキュメントと関連ドキュメントの対応情報、ドキュメントと機能名称の対応情報として保存し、前記機能名称解析部は、前記登録対象のソフトウェア部品のソースコードと、前記登録済みのソフトウェア部品のソースコードとに基づいて、前記登録対象のソフトウェア部品ついての前記登録済みのソフトウェア部品との類似度を算出して、前記登録対象のソフトウェア部品に類似する類似ソフトウェア部品について類似ソフトウェア部品情報として出力するソフトウェア部品類似解析部と、前記類似ソフトウェア部品情報、前記ソフトウェア部品とドキュメントの対応情報、前記ドキュメントと関連ドキュメントの対応情報および前記ドキュメントと機能名称の対応情報に基づいて、前記類似ソフトウェア部品に関連付けられるドキュメント群に対応する機能名称を抽出して前記外部に選択可能に提示し、前記外部から選択された機能名称を機能名称情報として出力するソフトウェア部品機能名称関連解析部と、を備える、請求項1記載のソフトウェア部品管理装置。前記ソフトウェア部品類似解析部は、前記登録対象のソフトウェア部品のソースコードおよび前記登録済みのソフトウェア部品のソースコードから、前記登録対象のソフトウェア部品および前記登録済みのソフトウェア部品が公開する関数および変数と、使用する外部関数および外部変数を解析し、そのそれぞれについて類似度を算出し、算出した類似度の加算値により、前記登録対象のソフトウェア部品ついての前記登録済みのソフトウェア部品との類似度を算出する類似度算出部を有する、請求項3または請求項4記載のソフトウェア部品管理装置。前記類似度算出部は、引数の型および戻り値の型が一致するか否かと、引数の名前および関数の名前の類似度から2つの関数の間の類似度を算出する関数類似度算出部、および型が一致する否かと、変数名の類似度から2つの変数の間の類似度を算出する変数類似度算出部の少なくとも一方を有する、請求項5記載のソフトウェア部品管理装置。前記類似度算出部は、引数の型および戻り値の型が互換性を有するか否かと、引数の名前および関数の名前の類似度から2つの関数の間の類似度を算出する関数類似度算出部、型が互換性を有するか否かと、変数名の類似度から2つの変数の間の類似度を算出する変数類似度算出部の少なくとも一方を有する、請求項5記載のソフトウェア部品管理装置。コンピュータにインストールされて、前記コンピュータにソフトウェア部品を登録するとともに、登録済みのソフトウェア部品から所望のソフトウェア部品を検索する処理を行わせることが可能なソフトウェア部品管理プログラムであって、前記ソフトウェア部品の登録の際には、前記登録済みのソフトウェア部品および登録対象のソフトウェア部品を解析し、前記登録対象のソフトウェア部品について、類似する前記登録済みのソフトウェア部品の機能名称を外部から選択可能に提示し、当該外部から選択された機能名称と前記登録対象のソフトウェア部品とを対応させた機能名称とソフトウェア部品との対応関係情報として取得し、前記所望のソフトウェア部品を検索する際には、前記機能名称とソフトウェア部品との対応関係情報から、前記所望のソフトウェア部品に関連したソフトウェア部品を抽出する、機能を前記コンピュータに実行させる、ソフトウェア部品管理プログラム。しかしながら、特許文献1に記載の技術では、設計情報のタグを介して、機能とソフトウェア部品が関連付けられているため、同等のタグが付けられない場合は関連がないことになってしまう。特許文献2に記載の技術では、機能ツリーの変更に応じて、ソースコードの変更箇所を抽出しユーザに提示することが可能であるが、そもそも流用すべきソフトウェア部品を検索する方法は提供していない。また、特許文献3に記載の技術では、ソフトウェア部品を検索するための検索キーを整備しているが、検索対象となる設計書の語句に統一性がなければ、同様の機能を持つ部品が存在しても、同じ検索キーでは検索できない。ソフトウェア部品を管理する期間は長期に及ぶ場合、表記や部門における用語が変化してしまう。本発明は上記のような問題点を解消するためになされたもので、ソフトウェア部品を検索する際に、所望の機能を持つソフトウェア部品を容易に検索できるとともに、検索に際して有用な情報を作業者に大きな負担を与えずに抽出することが可能で、また、ソフトウェア部品の機能の表現に表記のゆれがある場合でも共通した機能名称を付加することができるソフトウェア部品管理装置を提供することを目的とする。本発明に係るソフトウェア部品管理装置の態様は、ソフトウェア部品を登録するとともに、登録済みのソフトウェア部品から所望のソフトウェア部品を検索可能なソフトウェア部品管理装置であって、前記ソフトウェア部品の登録の際に、前記登録済みのソフトウェア部品および登録対象のソフトウェア部品を解析し、前記登録対象のソフトウェア部品について、類似する前記登録済みのソフトウェア部品の機能名称を外部から選択可能に提示し、当該外部から選択された機能名称と前記登録対象のソフトウェア部品とを対応させた機能名称とソフトウェア部品との対応関係情報としてデータベースに保存する機能名称解析部と、前記所望のソフトウェア部品を検索する際に、前記データベースに保存された前記機能名称とソフトウェア部品との対応関係情報から、前記所望のソフトウェア部品に関連したソフトウェア部品を抽出して出力するソフトウェア部品検索部とを備えている。本発明に係るソフトウェア部品管理装置の態様によれば、登録対象のソフトウェア部品について、類似する前記登録済みのソフトウェア部品の機能名称を外部から選択可能に提示し、当該外部から選択された機能名称と前記登録対象のソフトウェア部品とを対応させた機能名称とソフトウェア部品との対応関係情報としてデータベースに保存することで、登録済みのソフトウェア部品と共通した機能名称を付けることができる。また、ソフトウェア部品の機能の表現の表記のゆれによって検索結果から漏れることを防ぐことが可能となる。また、所望のソフトウェア部品を検索する際には、所望のソフトウェア部品に関連したソフトウェア部品を抽出して出力するので、所望の機能を持つソフトウェア部品を容易に検索できるとともに、検索に際して有用な情報を作業者に大きな負担を与えずに抽出することが可能となる。<A.実施の形態1>以下、図1~図24を用いて、本発明に係るソフトウェア部品管理装置の実施の形態1について説明する。<A-1.ソフトウェア部品管理装置の概略>図1は、本発明に係るソフトウェア部品管理装置1の概略構成を示すブロック図である。図1に示すように、ソフトウェア部品管理装置1は、ソフトウェア部品の登録を行う登録者およびソフトウェア部品の検索を行う開発者によって使用されるパーソナルコンピュータなどの情報処理端末装置以下、端末装置と呼称2にLANLocalAreaNetworkなどのようなネットワーク3を介して接続されている。ソフトウェア部品管理装置1は、入力部11、出力部12、ソフトウェア部品登録部13、機能名称解析部14、ソフトウェア部品検索部15、成果物データベース16および関連情報データベース17を備えている。入力部11は、ネットワーク3を介して端末装置2からの入力を受け付ける。出力部12は、ネットワーク3を介して端末装置2への出力を送出する。ソフトウェア部品登録部13は、ソフトウェア部品管理装置1に入力された新規のソフトウェア部品を、成果物データベース16に登録する。機能名称解析部14は、成果物データベース16に登録されているソフトウェア部品および登録対象部品を解析し、登録対象部品について登録済みのソフトウェア部品との類似関係に基づいて機能名称を関連付けし、機能名称とソフトウェア部品との対応関係の情報として関連情報データベース17に登録する。ここで、機能名称とはソフトウェア部品が有する機能を表したキーワードであり、例えば、折れ線グラフを表示する機能を有するグラフ部品であれば、折れ線描画や線描画と言った名称となる。ソフトウェア部品検索部15は、ソフトウェア部品管理装置1に登録されているソフトウェア部品を検索する。図2は、ソフトウェア部品管理装置1を、コンピュータシステムのハードウェアにより実現する場合の構成を示すブロック図である。図2に示すコンピュータシステムは、キーボード101、マウス102、マイクロプロセッサ103、HDDハードディスク装置104、RAMRandomAccessMemory105、ROMReadOnlyMemory106、グラフィックチップ107、フレームバッファ108およびディスプレイモニタ109を備えている。このような構成において、ソフトウェア部品管理装置1の入力部11は、キーボード101およびマウス102で実現されている。ソフトウェア部品登録部13、機能名称解析部14、ソフトウェア部品検索部15、成果物データベース16および関連情報データベース17は、それぞれの機能に対応したプログラムが、HDD104またはRAM105、ROM106等の記憶領域に格納され、これらのプログラムをマイクロプロセッサ103が実行することで実現される。出力部12は、グラフィックチップ107、フレームバッファ108およびディスプレイモニタ109で実現される。次に、このようなソフトウェア部品管理装置1を用いたソフトウェア部品登録の手順について説明する。<A-2.ソフトウェア部品登録部の構成>図3は、ソフトウェア部品登録部13の概略構成を示すブロック図である。ソフトウェア部品登録部13は、登録対象のソフトウェア部品以下、登録対象部品と呼称21の情報を入力とし、登録対象部品21に対し、ソフトウェア部品管理装置1において一意に特定できる部品IDを与える。ここで部品IDとは、例えば、ソフトウェア部品管理装置1に登録の順に付与する連番数字や、アルファベット、あるいは数字とアルファベットの組み合わせなどが挙げられる。また、ソフトウェア部品登録部13は、ソースコード格納部22を備え、ソースコード格納部22は、登録対象部品21の部品IDと登録対象部品21から抽出したソースコードの組み合せを成果物データベース16のソースコードデータベース24に登録する。ここでソフトウェア部品の情報とは、ソフトウェア部品名称とソフトウェア部品本体へのパスを少なくとも含む情報を指す。<A-3.機能名称解析部の構成>図4は、機能名称解析部14の概略構成を示すブロック図である。図4に示すように、機能名称解析部14は、ソフトウェア部品類似解析部31、ソフトウェア部品-機能名称関連解析部32および機能名称ソフトウェア部品対応表更新部33を備えている。ソフトウェア部品類似解析部31は、登録対象部品と登録済みのソフトウェア部品以下、既存部品と呼称のソースコードを解析してソフトウェア部品の類似度を算出し、登録対象部品と類似度の高い既存部品を類似ソフトウェア部品一覧35類似ソフトウェア部品情報として出力する。ソフトウェア部品-機能名称関連解析部32は、類似ソフトウェア部品一覧35に含まれる、既存ソフトウェア部品に関連付けられた機能名称を、登録対象部品の機能名称候補一覧43として登録者に提示し、登録対象部品の機能名称としての適否の判定結果を受け付け、適切と判定された機能名称を、機能名称一覧36機能名称情報として出力する。機能名称ソフトウェア部品対応表更新部33は、ソフトウェア部品-機能名称関連解析部32から出力された機能名称一覧36と、ソフトウェア部品登録部13図1で付与された登録対象部品の部品ID34とを関連情報データベース17に出力し、両者を対応付けた機能名称-ソフトウェア部品対応表23機能名称とソフトウェア部品との対応関係の情報として記録する。機能名称一覧36と登録対象部品の部品ID34とを対応付けた機能名称-ソフトウェア部品対応表23を得ることで、ソフトウェア部品の登録の際に登録済みのソフトウェア部品と共通した機能名称を付けることができる。<A-4.機能名称解析部での処理>図5は、機能名称解析部14でのソフトウェア部品の登録処理を示すフローチャートである。以下、このフローチャートを参照して、機能名称解析部14での登録処理を説明する。機能名称解析部14は、ソフトウェア部品登録部13図1から登録対象部品の部品ID34を取得し、成果物データベース16のソースコードデータベース24から登録対象部品のソースコードを取得するステップS141。そして、取得した登録対象部品のソースコードと既存部品のソースコードとをソフトウェア部品類似解析部31で解析し、登録対象部品に類似する既存部品の有無を判定し、類似する既存部品の部品IDと類似度の値を記録した類似ソフトウェア部品一覧35を作成するステップS142。次に、類似ソフトウェア部品一覧35に含まれる既存部品の部品IDをキーとして、ソフトウェア部品-機能名称関連解析部32において、関連情報データベース17の機能名称-ソフトウェア対応表23から、キーとなる部品IDに対応する機能名称を取得することを、類似ソフトウェア部品一覧35に含まれる既存部品全てに対して行い、取得した機能名称群を機能名称候補一覧43とする。この機能名称候補一覧43を登録者に出力部12を介して提示し、機能名称候補一覧43に含まれる機能名称ごとに登録者が下した登録対象部品の機能名称としての適否の判定結果を入力部11より受け付ける。そして、登録対象部品の機能名称として適切と判定された機能名称を機能名称一覧36として出力するステップS143。この機能名称一覧36と登録対象部品の部品ID34の組を機能名称-ソフトウェア部品対応表更新部33で作成し、関連情報データベース17の機能名称-ソフトウェア部品対応表23に記録するステップS144。これにより、登録対象部品は既存部品となり、その機能名称が部品IDと関連付けられる。<A-5.機能名称解析部の構成および処理>次に、機能名称解析部14の各構成要素のそれぞれについて、処理内容を説明する。<A-5-1.ソフトウェア部品類似解析部の構成>図6は、ソフトウェア部品類似解析部31の構成を示すブロック図である。ソフトウェア部品類似解析部31では、登録対象部品のソースコードと、既存部品の部品IDおよびソースコードを入力として、登録対象部品との類似度の高い既存部品の部品IDと、算出した類似度の値を類似ソフトウェア部品一覧35として出力する。ソフトウェア部品類似解析部31は、登録対象部品のソースコードと、既存部品のソースコードとを解析して、解析結果を出力するソースコード解析部61と、この解析結果から登録対象部品と既存部品の類似度の値を算出する類似度算出部62と、算出した類似度に基づいて類似度を判定し、類似していると判定された既存部品を類似ソフトウェア部品一覧35に登録する類似度判定部63とを備えている。また、ソースコード解析部61は、ソフトウェア部品のソースコード中で部品外に公開されている関数および変数を解析する公開関数変数解析部71、ソースコード中で呼び出している外部関数を解析する外部関数解析部72、ソースコード中で使用している外部変数を解析する外部変数解析部73を備えている。そして、ソフトウェア部品類似解析部31内には、公開関数一覧74、外部関数一覧75、外部変数一覧76および公開変数一覧77を記憶する記憶部を有している。<A-5-2.ソフトウェア部品類似解析部での解析処理>次に、図7に示すフローチャートを用いて、ソフトウェア部品類似解析部31で登録対象部品に類似する既存部品を解析する解析処理について説明する。ソフトウェア部品類似解析部31は、登録対象部品のソースコードをソースコード解析部61で解析しステップS311、解析した結果を内部の記憶部図示せずに公開関数一覧74、外部関数一覧75、外部変数一覧76および公開変数一覧77として保持する。次に、既存部品の部品IDを成果物データデータベース16図6のソースコードデータベース24から取り出し、内部の記憶部にID一覧として全てコピーしておくステップS312。コピーしたID一覧から部品IDを1つ取得し、これを部品xとする。そして、部品xの部品IDをID一覧から削除するステップS313。次に、部品xのソースコードをソースコード解析部61で解析しステップS314、解析した結果を内部の記憶部に公開関数一覧74、外部関数一覧75、外部変数一覧76および公開変数一覧77として保持する。次に、ステップS311とステップS314で保持した解析結果に基づいて、類似度算出部62で類似度を算出するステップS315。そして、算出した類似度に基づいて類似度判定部63で登録対象部品と既存部品との類似関係の有無を判定するステップS316。この判定では、算出した類似度が予め定めた閾値以上である場合には類似関係があると判定し、閾値を越えない場合には類似関係がないと判定する。また、類似度の大きい方から順に10件を選択する。ステップS316で類似関係がある判定された場合は、部品xの部品IDと、算出された部品xについての類似度の値の組を類似ソフトウェア部品一覧35に登録するステップS317。次に、ID一覧に部品IDがあるか否かを判定しステップS318、部品IDが1つもなければ処理を終了し、部品IDがあればステップS313以下の処理を繰り返す。<A-5-3.ソースコード解析部での解析処理>ここで、ソースコード解析部61でのソースコードの解析処理について説明する。図8は、公開関数変数解析部71で、ソフトウェア部品のソースコード中で部品外に公開されている関数および変数を解析する処理を示すフローチャートである。公開関数変数解析部71は、まず、ソースコード中で定義されている関数および変数を全て抽出するステップS711。そして、抽出した関数および変数のうち、非公開関数と非公開変数を除外するステップS712。そして、残った関数の関数の名前と戻り値の型、引数の型および名前と、残った変数の変数名と変数の型を解析するステップS713。ここでの解析とは、関数の定義情報から関数の名前と戻り値の型、引数の型および名前を表す文字列を抽出する処理と、変数の定義情報から変数名と変数の型を表す文字列を抽出する処理を指す。例えば、C言語で、intstrcmpと定義されている関数の場合、関数の名前はstrcmpとなり、1つ目の引数の型はconstchar、1つ目の引数の名前はa、2つ目の引数の型はconstchar、2つ目の引数の名前はb、戻り値の型はintとなる。また、intlengthと定義されている変数の場合、変数名はlengthとなり、変数の型はintとなる。なお、C言語のint、doubleのような予め定義されている型だけでなく、プログラム中で新たに作成した型でも同様に解析可能である。その後、残った定義関数の関数の名前と戻り値の型と引数の型と引数の名前を公開関数一覧74に、残った定義変数の変数名と型を公開変数一覧77に登録するステップS714。図9は、外部関数解析部72で、ソフトウェア部品のソースコード中で呼び出している外部関数を解析する処理を示すフローチャートである。外部関数解析部72は、まず、ソースコード中で定義されている関数を全て抽出するステップS721。そして、抽出した定義関数の関数の名前、戻り値の型、引数の型および名前を抽出するステップS722。次に、ソースコード中で呼び出している関数以下、呼出関数と呼称を抽出するステップS723。そして、抽出した呼出関数の関数の名前、戻り値の型、引数の型および名前を静的解析するステップS724。ここでの静的解析とは、関数の名前などの文字列を抽出する処理と言う点では先に説明した解析と同じであるが、文字列を抽出する前に、呼出関数が定義されているプログラムを特定し、そのプログラムに記述された定義情報を取得する処理が含まれる。次に、呼出関数の中から、ステップS721で抽出した定義関数を除外するステップS725。最後に、呼出関数の関数の名前と戻り値の型と引数の型と引数の名前を外部関数一覧75に登録するステップS726。図10は、外部変数解析部73で、ソフトウェア部品のソースコード中で使用している外部変数を解析する処理を示すフローチャートである。外部変数解析部73は、まず、ソースコード中で使用されている変数を全て抽出するステップS731。次に、ソースコード中で定義されている変数を抽出するステップS732。次に、ステップS731で抽出した変数のうち、ステップS732で抽出した定義変数を除外するステップS733。そして、残った外部変数の型、名前を静的解析により抽出するステップS734。最後に、外部変数の型と名前を外部変数一覧76に登録するステップS735。<A-5-4.類似度算出部の構成および動作>図11は、類似度算出部62の概略構成を示すブロック図である。図11に示すように類似度算出部62は、関数類似度算出部81と変数類似度算出部82とを備えている。関数類似度算出部81は、引数の型および戻り値の型が一致するか否かと、引数の名前および関数の名前の類似度から2つの関数の間の類似度を算出し、変数類似度算出部82は、型が一致する否かと、変数名の類似度から2つの変数の間の類似度を算出する。なお、類似度算出部62は、関数類似度算出部81および変数類似度算出部82の少なくとも一方を備えていれば良い。類似度算出部62を有することで、類似するソフトウェア部品の機能名称を抽出できるので、ソフトウェア部品の機能名称を広く抽出することができる。図12は、類似度算出部62での、登録対象部品と既存部品の間の類似度を算出する処理を示すフローチャートであり、図7に示したステップS315での処理を説明するものである。類似度算出部62は、まず、公開関数一覧74図6から登録対象部品の公開関数一覧を取得し、その中から重複する関数を調べ、重複するものがあれば、一覧に格納されている順に1、2、3のように重複番号を振り当てる。重複する関数がない場合は、重複番号は1にする。そして、公開関数一覧の関数と重複番号とを組み合わせた拡張公開関数一覧を作成しソフトウェア部品類似解析部31内部の記憶部図示せずに保存するステップS621。登録対象部品の外部関数についても同様の処理を実行し、拡張外部関数一覧を作成しソフトウェア部品類似解析部31内部の記憶部図示せずに保存するステップS622。次に、成果物データベース16図6のソースコードデータベース24に登録された既存部品を全て取り出し、ソフトウェア部品類似解析部31内部の記憶部図示せずに既存部品群として全てコピーしておく。そして、既存部品群から1つの部品を取り出し、部品Pとし、部品Pを既存部品群から取り除くステップS623。次に、登録対象部品および部品Pにおける公開関数、公開変数、外部関数、外部変数を、公開関数一覧74、公開変数一覧77、外部関数一覧75および外部変数一覧76からそれぞれ読み出し、それぞれの類似度を算出するステップS624。次に、ステップ624で算出した類似度に基づいて登録対象部品と部品Pとの類似度を求めるステップS625。すなわち、ステップS624で算出した公開関数、公開変数、外部関数一覧および外部変数の類似度を加算することで、登録対象部品や部品Pの類似度を算出する。次に、部品Pの部品IDと類似度の値をソフトウェア部品類似解析部31内の記憶部に登録し、類似度一覧を作成するステップS626。この類似度一覧は、部品IDから類似度の値が特定できるように構成される。次に、既存部品群に既存部品があるか否かを判定しステップS627、既存部品があればステップ623以下の処理を繰り返し、既存部品が1つもなければステップS628に進み、作成した類似度一覧を出力する。次に、ステップS624における公開関数、公開変数、外部関数、外部変数の類似度の算出方法を説明する。まず、公開関数、公開変数、外部関数および外部変数の類似度の算出処理のそれぞれの流れを説明する。<A-5-4-1.公開関数の類似度の算出処理>図13は、図12に示したステップS624における、登録対象部品の公開関数と既存部品Pの公開関数の類似度を算出する処理を示すフローチャートである。類似度算出部62は、まず、図12に示したステップS621で作成した登録対象部品の拡張公開関数一覧を取得しコピーするステップS641。次に、コピーした拡張公開関数一覧より1つの関数を取り出し関数pxとし、関数pxを、コピーした拡張公開関数一覧から削除するステップS642。次に、類似度の最大値格納部maxの値を0で初期化するステップS643。次に、公開関数一覧74から部品Pの公開関数一覧を取得しコピーするステップ644。次に、コピーした公開関数一覧より1つ関数を取り出し関数pyとし、関数pyを、コピーした公開関数一覧から削除するステップS645。次に、関数類似度算出部81図11で関数pxと関数pyの類似度を算出し類似度格納部valueに格納するステップS646。そして、類似度格納部valueの値が最大値格納部maxに格納されている値よりも大きければ、最大値格納部maxの値を類似度格納部valueの値に更新するステップS647。次に、部品Pの公開関数一覧に関数があるか否かを判定しステップS648、関数があれば、ステップS645以下の処理を繰り返し、関数がなければ次のステップS649に進む。ステップS649では、関数pxの関数の名前と最大値格納部maxに格納された値を出力する。そして、登録対象部品の拡張公開関数一覧に関数があるか否かを判定しステップS650、関数があれば、ステップS642以下の処理を繰り返し、関数がなければ処理を終了する。以上の処理により、登録対象部品の拡張公開関数の全てと、既存部品Pの公開関数の全てとの類似度の比較が行われ、類似度の最も高い関数の関数の名前と類似度とを取得することができる。<A-5-4-2.公開変数の類似度の算出処理>図14は、図12に示したステップS624における、登録対象部品の公開変数と既存部品Pの公開変数の類似度を算出する処理を示すフローチャートである。類似度算出部62は、まず、公開変数一覧77から登録対象部品の公開変数一覧を取得しコピーするステップS671。次に、コピーした公開変数一覧より1つの変数を取り出し変数mxとし、変数mxを、コピーした公開変数一覧から削除するステップS672。次に、類似度の最大値格納部maxの値を0で初期化するステップS673。次に、公開変数一覧77から部品Pの公開変数一覧を取得しコピーするステップ674。次に、コピーした公開変数一覧より1つ変数を取り出し変数myとし、変数myを、コピーした公開変数一覧から削除するステップS675。次に、変数類似度算出部82図11で変数mxと変数myの類似度を算出し類似度格納部valueに格納するステップS676。そして、類似度格納部valueの値が最大値格納部maxに格納されている値よりも大きければ、最大値格納部maxの値を類似度格納部valueの値に更新するステップS677。次に、部品Pの公開変数一覧に変数があるか否かを判定しステップS678、変数があれば、ステップS675以下の処理を繰り返し、変数がなければ次のステップS679に進む。ステップS679では、変数mxの関数の名前と最大値格納部maxに格納された値を出力する。そして、登録対象部品の公開変数一覧に変数があるか否かを判定しステップS680、変数があれば、ステップS672以下の処理を繰り返し、変数がなければ処理を終了する。以上の処理により、登録対象部品の公開変数の全てと、既存部品Pの公開変数の全てとの類似度の比較が行われ、類似度の最も高い変数の変数名と類似度とを取得することができる。<A-5-4-3.外部関数の類似度の算出処理>図15は、図12に示したステップS624における、登録対象部品の外部関数と既存部品Pの外部関数の類似度を算出する処理を示すフローチャートである。類似度算出部62は、まず、図12に示したステップS622で作成した登録対象部品の拡張外部関数一覧を取得しコピーするステップS651。次に、コピーした拡張外部関数一覧より1つの関数を取り出し関数exとし、関数exを、コピーした拡張外部関数一覧から削除するステップS652。次に、類似度の最大値格納部maxの値を0で初期化するステップS653。次に、外部関数一覧75から部品Pの外部関数一覧を取得しコピーするステップ654。次に、コピーした外部関数一覧より1つ関数を取り出し関数eyとし、関数eyを、コピーした外部関数一覧から削除するステップS655。次に、関数類似度算出部81図11で関数exと関数eyの類似度を算出し類似度格納部valueに格納するステップS656。そして、類似度格納部valueの値が最大値格納部maxに格納されている値よりも大きければ、最大値格納部maxの値を類似度格納部valueの値に更新するステップS657。次に、部品Pの外部関数一覧に関数があるか否かを判定しステップS658、関数があれば、ステップS655以下の処理を繰り返し、関数がなければ次のステップS659に進む。ステップS659では、関数exの関数の名前と最大値格納部maxに格納された値を出力する。そして、登録対象部品の拡張公開関数一覧に関数があるか否かを判定しステップS650、関数があれば、ステップS652以下の処理を繰り返し、関数がなければ処理を終了する。以上の処理により、登録対象部品の外部関数の全てと、既存部品Pの外部関数の全てとの類似度の比較が行われ、類似度の最も高い関数の関数の名前と類似度とを取得することができる。<A-5-4-4.外部変数の類似度の算出処理>図16は、図12に示したステップS624における、登録対象部品の外部変数と既存部品Pの外部変数の類似度を算出する処理を示すフローチャートである。類似度算出部62は、まず、外部変数一覧76から登録対象部品の外部変数一覧を取得しコピーするステップS661。次に、コピーした外部変数一覧より1つの変数を取り出し変数vxとし、変数vxを、コピーした外部変数一覧から削除するステップS662。次に、類似度の最大値格納部maxの値を0で初期化するステップS663。次に、外部変数一覧76から部品Pの外部変数一覧を取得しコピーするステップ664。次に、コピーした外部変数一覧より1つ変数を取り出し変数vyとし、変数vyを、コピーした外部変数一覧から削除するステップS665。次に、変数類似度算出部82図11で変数vxと変数vyの類似度を算出し類似度格納部valueに格納するステップS666。そして、類似度格納部valueの値が最大値格納部maxに格納されている値よりも大きければ、最大値格納部maxの値を類似度格納部valueの値に更新するステップS667。次に、部品Pの外部変数一覧に変数があるか否かを判定しステップS668、変数があれば、ステップS665以下の処理を繰り返し、変数がなければ次のステップS669に進む。ステップS669では、変数vxの変数名と最大値格納部maxに格納された値を出力する。そして、登録対象部品の外部変数一覧に変数があるか否かを判定しステップS670、変数があれば、ステップS662以下の処理を繰り返し、変数がなければ処理を終了する。以上の処理により、登録対象部品の外部変数の全てと、既存部品Pの外部変数の全てとの類似度の比較が行われ、類似度の最も高い変数の変数名と類似度とを取得することができる。ここで、関数類似度算出部81は、ステップS646図13とステップS656図15で、2つの関数の間の類似度を算出し、変数類似度算出部82は、ステップS676図14とステップS666図16で、2つの変数の間の類似度を算出する。以下に類似度の算出例を示すが、類似度は類似している場合に高い点が与えられ、類似していない場合に低い点が与えられるように構成すれば良い。すなわち、関数類似度算出部81は、始めに10点を持ち、引数の型および戻り値の型が登録対象部品と既存部品Pとで一致するか否か、関数の名前および引数の名前の登録対象部品と既存部品Pとの間での類似度により減点法で採点を行う。例えば、引数の型、戻り値の型が異なれば、異なるごとに1点減点し、関数の名前および引数の名前の類似度が、予め定めた閾値よりも低ければ1点減点する。戻り値の型、関数の名前、引数の型、引数の名前の比較が終われば、その時点の点数を出力して終了する。変数類似度算出部82は、始めに10点を持ち、変数の型が登録対象部品と既存部品Pとで一致するか否か、変数の名前の登録対象部品と既存部品Pとの間での類似度により減点法で採点を行う。例えば、変数の型が異なれば、異なるごとに1点減点し、変数の名前の類似度が、予め定めた第1の閾値よりも低ければ1点減点し、第1の閾値より小さな第2の閾値よりも低ければ5点減点する。変数の型、変数の名前の比較が終われば、その時点の点数を出力して終了する。以上のような方法で類似度を算出することで、ソフトウェア部品間の類似度を求めることができる。なお、図10に示したステップS734で、外部変数の値の書き換えの有無を解析してステップS735で外部変数リストに登録しておき、外部変数の類似度の算出に利用しても良い。なお、関数の名前および引数の名前の類似度や、変数の名前の類似度を算出するには、例えば、レーベンシュタイン距離を利用して文字列の類似度を算出すれば良い。レーベンシュタイン距離は編集距離とも称され、情報理論で、2つの文字列がどの程度異なっているかを示す数値であり、文字列を構成する文字の挿入や削除、入れ替えにより1つの文字列を他の文字列に変えるのに必要な手順の回数で定義される。このレーベンシュタイン距離を利用して文字列の類似度を算出する方法としては、レーベンシュタイン距離を利用することで2つの文字列がどの程度異なるかが数値として求まるので、基準値を定め、基準値からレーベンシュタイン距離を引いた値を文字列の類似度とする方法が考えられる。なお、以上の説明では、引数の型および戻り値の型、変数の型については、完全に一致していなければ減点の対象としたが、完全に一致でなくても型が互換性を有していれば類似していると見なし、減点する点数を小さくしても良い。例えば、上記の方法によって求めた類似度に対して閾値を定めておき、閾値より得られた類似度が大きい場合は0.5点を減点する方法が考えられる。なお、減点する点数は、0~1点の間の数値とする。型が完全に一致していなくても類似に含めることができるため、型が継承関係にあり同様の機能を持つ場合を類似と判定することが可能になる。なお、最も単純に、関数の名前、引数の名前、変数の名前、引数の型、戻り値の型および変数の型について完全一致でなければ減点の対象とする方法を採っても良い。次に、以上説明したフローチャートで示した処理が完了した後の処理について説明する。まず、公開関数における類似度の算出について説明する。図13の処理が完了しているため、登録対象部品のi1番目の公開関数pxi1に対して、部品Pのj1番目の公開関数pyj1との類似度の値が全て得られている。ここで、登録対象部品の公開関数の個数がn1であった場合、i1は1からn1までの値をとる。同様に、部品Pの公開関数の個数がm1であった場合、j1は1からm1の値をとる。ここで、pxi1の関数ごとの類似度を類似度の大きい順にソートしておき、最も大きい類似度をpxi1が部品Pの公開関数との間で取りうる類似度の最大値として採用する。この類似度をSimPFi1,Pとする。登録対象部品をRとすると部品Pとの間の公開関数における類似度SimPFR,Pは以下の数式1で求める。次に、外部関数における類似度の算出について説明する。図15の処理が完了しているため、登録対象部品のi1番目の外部関数exi2に対して、部品Pのj2番目の外部関数eyj2との類似度の値が全て得られている。ここで、登録対象部品の外部関数の個数がn2であった場合、i2は1からn2までの値をとる。同様に、部品Pの外部関数の個数がm2であった場合、j2は1からm2の値をとる。ここで、exi2の関数ごとの類似度を類似度の大きい順にソートしておく。exi2の重複番号がkであれば、類似度の大きい順からk番目の類似度の値を、関数exi2が部品Pの外部関数との間で取りうる類似度の最大値として採用する。これにより、例えば、登録対象部品がprintAという外部関数をn箇所で呼び出しているとき、printAを1箇所だけで呼び出している既存部品Aよりも、nに近い回数呼び出している既存部品Bに高い類似度を与えることができる。なお、公開関数と同様に、重複番号を利用せずに最も大きい類似度をpxi1の類似度の最大値としてもよい。この類似度をSimEFi2,Pとする。登録対象部品Rと部品Pの外部関数における類似度は以下の数式2で求める。次に、公開変数における類似度の算出について説明する。図14の処理が完了しているため、登録対象部品のi3番目の公開変数vxi3に対して、部品Pのj3番目の公開変数vxj3との類似度の値が全て得られている。ここで、登録対象部品の公開変数の個数がn3n3>0であった場合、i3は1からn3までの値をとる。同様に、部品Pの公開変数の個数がm3m3>0であった場合、j3は1からm3の値をとる。ここで、vxi3の類似度として、m3個の公開変数との類似度のうち、最大のものを、変数vxi3が部品Pの公開変数との間で取りうる類似度の最大値として採用する。この類似度をSimPVi3,Pとする。このとき、登録対象部品Rと部品Pの公開変数における類似度は以下の数式3で求める。これと同様に、登録対象部品Rと既存部品Pの外部変数における類似度SimEVR,Pも求める。以上の説明を踏まえ、図12に示したステップS625における、登録対象部品と既存部品Pとの類似度の算出する方法を説明する。登録対象部品Rと既存部品Pの類似度SimR,Pは以下の数式4で求める。数式4では、公開関数、公開変数、外部関数、外部変数の類似度の和によって、類似度を求めているので、それぞれの類似度の値が大きければSimR,Pの値も大きくなる。なお、各変数、各関数に重み付けを行うことによって、公開関数、公開変数、外部関数、外部変数の類似度の最終的な部品間の類似度に寄与する割合を変化させても良い。<A-6.ソフトウェア部品-機能名称関連解析部の構成>図17は、ソフトウェア部品-機能名称関連解析部32の構成を示すブロック図である。ソフトウェア部品-機能名称関連解析部32は、ソフトウェア部品機能名称抽出部41と、機能名称判定入力部42とを備えている。ソフトウェア部品機能名称抽出部41は、ソフトウェア部品類似解析部31図4から出力される類似ソフトウェア部品一覧35に含まれる既存部品の部品IDに関連付けられている機能名称を抽出し、機能名称候補一覧43として出力する。機能名称判定入力部42は、出力部12を介して機能名称候補一覧43を登録者に提示し、機能名称候補一覧43に含まれる全ての機能名称について、登録対象部品の機能名称としての適否を入力部11を介して受け付け、登録対象部品の機能名称として適切と判定された機能名称一覧を作成する。さらに、機能名称判定入力部42では、登録対象部品の機能名称候補として提示したものの他に、適切な機能名称があれば入力部11を介して機能名称の入力を受け付け、登録対象部品の機能名称一覧に追加することもできる。<A-7.ソフトウェア部品-機能名称関連解析部での解析処理>次に、図18に示すフローチャートを用いて、ソフトウェア部品-機能名称関連解析部32で登録対象部品の機能名称を解析する処理を説明する。ソフトウェア部品-機能名称関連解析部32は、類似ソフトウェア部品一覧35図17に含まれる類似部品の類似部品IDに関連付けられている機能名称の機能名称IDをソフトウェア部品機能名称抽出部41より抽出し、機能名称IDリストを取得するステップS321。ここで、機能名称IDとは、機能名称がソフトウェア部品管理装置1に登録された順に付与する連番数字でも良いし、アルファベット、あるいは数字とアルファベットの組み合わせなどが挙げられる。また、機能名称をアルファベットで表現したものでも良い。例えば、選択機能であればSENTAKU1などが考えられる。次に、機能名称IDリストに含まれる機能名称IDに対応する機能名称を要素とする機能名称候補一覧43を作成するステップS322。この機能名称候補一覧43を登録者に出力部12を介して提示するステップS323。提示した機能名称候補一覧43に含まれる機能名称について、登録対象部品の機能名称としての適否を入力部11を介して受け付けるステップS324。また、機能名称候補一覧の他に、登録対象部品の機能名称として適切な機能名称があれば、入力部11より入力を受け付けるステップS325。次に、登録対象部品の機能名称として適切と判定された機能名称の機能名称IDの一覧を出力するステップS326。<A-8.機能名称-ソフトウェア部品対応表更新部の構成および動作>次に、図19および図20を用いて機能名称-ソフトウェア部品対応表更新部33の構成および更新動作について説明する。図19は、機能名称-ソフトウェア部品対応表更新部33の概略構成を示すブロック図である。機能名称-ソフトウェア部品対応表更新部33では、ソフトウェア部品-機能名称関連解析部32から出力された機能名称一覧36と、ソフトウェア部品登録部13図1で付与された登録対象部品の部品ID34との組み合わせを、機能名称-ソフトウェア部品対応表23として出力する。図20は、機能名称-ソフトウェア部品対応表更新部33の動作を説明するフローチャートである。機能名称-ソフトウェア部品対応表更新部33は、登録対象部品の部品ID34を取得しステップS331、また、機能名称一覧36を取得するステップS332。その後、登録対象部品の部品ID34と機能名称一覧36との組み合わせを、機能名称-ソフトウェア部品対応表23として関連情報データベース17に保存する。<A-9.ソフトウェア部品検索の手順>以上説明した、ソフトウェア部品管理装置1におけるソフトウェア部品検索の手順について説明する。図21は、ソフトウェア部品検索部15の概略構成を示すブロック図である。ソフトウェア部品検索部15は、入力部11を介して機能名称111を受け付け、ソフトウェア部品管理装置1の関連情報データベース17に機能名称-ソフトウェア部品対応表23として登録されているソフトウェア部品のうち、入力された機能名称111に関連付けられている部品を抽出し、ソフトウェア部品一覧112として、出力部12を介して出力する。図22は、ソフトウェア部品検索部15におけるソフトウェア部品の検索処理を示すフローチャートである。ソフトウェア部品検索部15は、入力部11を介して検索キーとなる機能名称を取得するステップS151。次に、ソフトウェア部品管理装置1の関連情報データベース17に登録されている機能名称-ソフトウェア部品対応表23に問い合わせて、検索キーに対応するソフトウェア部品一覧112図21を取得するステップS152。そして、取得したソフトウェア部品一覧112を出力部12を介して出力する。ソフトウェア部品検索部は、機能名称-ソフトウェア部品対応表23の内容を参照して動作するため、ソフトウェア部品管理装置1に登録されているソフトウェア部品を入力として同じ機能名称を持つソフトウェア部品を検索しても良い。この場合のソフトウェア部品検索部15の概略構成を図23に示す。図23において図21と異なるのは、既存のソフトウェア部品21を入力とする点である。図24は、図22に示すソフトウェア部品検索部15での、ソフトウェア部品の検索処理を示すフローチャートである。ソフトウェア部品検索部15は、入力部11を介して検索キーとなるソフトウェア部品を取得するステップS181。次に、ソフトウェア部品管理装置1の関連情報データベース17に登録されている機能名称-ソフトウェア部品対応表23に問い合わせて、検索キーに対応する機能名称一覧113を取得するステップS182。そして、取得した機能名称一覧を出力部12を介して出力する。そして、入力部11を介して、機能名称一覧の機能名称ごとに検索に用いる機能名称の選択を受け付け、検索に不要と判定された機能名称を一覧から削除するステップS183。次に、機能名称-ソフトウェア部品対応表23に問い合わせて、機能名称一覧に含まれる機能名称IDに関連付けのあるソフトウェア部品一覧112図23を取得しステップS184、取得したソフトウェア部品一覧112を出力部12を介して出力するステップS185。以上説明した実施の形態1のソフトウェア部品管理装置1によれば、ソフトウェア部品を登録する場合に、登録済みのソフトウェア部品に共通した機能名称を付加することができる。その結果、ソフトウェア部品を検索した際の検出漏れを少なくできるという効果を奏する。<B.実施の形態2>実施の形態2に係るソフトウェア部品管理装置では、機能名称解析部14におけるソフトウェア部品-機能名称関連解析部32の入力となるデータの種類が増えているが、その他の構成は、実施の形態1のソフトウェア部品管理装置1と同じであるので、同一の構成については同一の符号を付し、重複する説明は省略する。<B-1.ソフトウェア部品登録部の構成>図25は、ソフトウェア部品登録部13の概略構成を示すブロック図である。ソフトウェア部品登録部13は、図3に示したソースコード格納部22の他に、ドキュメント格納部92と関連情報格納部93とを備えている。ソフトウェア部品登録部13は、登録対象部品21の情報、ドキュメント39の情報、ドキュメント39に関連のある関連ドキュメント37の情報、ドキュメントから抽出した機能名称群38の情報を入力とし、登録対象部品21、ドキュメント39および機能名称群38のそれぞれに対して、ソフトウェア部品管理装置1において一意に特定できる部品ID、ドキュメントIDおよび機能名称IDを与える。ソースコード格納部22は、成果物データベース16のソースコードデータベース24にソースコードを格納する。ドキュメント格納部92は、成果物データベース16のドキュメントデータベース25にドキュメント39を登録する。また、関連情報格納部93は、登録対象部品21の部品IDとドキュメント39のドキュメントIDの組を、関連情報データベース17の部品IDドキュメント対応表26に登録し、ドキュメント39のドキュメントIDと関連ドキュメント37のドキュメントIDの組を関連情報データベース17のドキュメントID関連ドキュメントID対応表27に登録し、ドキュメント39のドキュメントIDと機能名称群38に含まれる機能名称の機能名称IDの関連情報を、関連情報データベース17のドキュメントID機能名称ID対応表28に登録する。<B-2.機能名称解析部の構成>図26は、機能名称解析部14の概略構成を示すブロック図である。図26に示すように、ソフトウェア部品-機能名称関連解析部32には、登録対象部品の部品ID34と、成果物データベース16のドキュメントデータベース25からの出力、関連情報データベース17の部品IDドキュメント対応表26、ドキュメントID関連ドキュメントID対応表27およびドキュメントID機能名称ID対応表28の出力が与えられる構成となっている点で、図4に示した機能名称解析部14とは異なっている。<B-2-1.ソフトウェア部品-機能名称関連解析部の構成>図27は、ソフトウェア部品-機能名称関連解析部32の構成を示すブロック図である。ソフトウェア部品-機能名称関連解析部32は、関連ドキュメント抽出部51、ドキュメント機能名称抽出部52および機能名称判定入力部53を備えている。関連ドキュメント抽出部51は、登録対象部品の部品ID34、類似ソフトウェア部品一覧35、成果物データベース16のドキュメントデータベース25の出力、関連情報データベース17の部品IDドキュメント対応表26、ドキュメントID関連ドキュメントID対応表27およびドキュメントID機能名称ID対応表28の出力を受け、登録対象部品の部品ID34と類似ソフトウェア部品一覧35に含まれる既存部品の部品IDに関連付けたドキュメントを抽出し、ドキュメント一覧44を作成する。ドキュメント機能名称抽出部52は、関連ドキュメント抽出部51が出力するドキュメント一覧44に含まれているドキュメントに関連付けられている機能名称を機能名称候補一覧43として出力する。機能名称判定入力部53は、出力部12を介して機能名称候補一覧43を登録者に提示し、機能名称候補一覧43に含まれる全ての機能名称について、登録対象部品の機能名称としての適否を入力部11を介して受け付け、登録対象部品の機能名称として適切と判定された機能名称一覧36を出力する。ここで、ドキュメントとは、ソフトウェア部品の機能に関して記述されている文書を指し、例えば、ソフトウェア部品の仕様を記述した、外部仕様書や詳細仕様書などの仕様書が挙げられる。実施の形態2では、機能に関して記述されているドキュメントから抽出した機能名称をソフトウェア部品を登録する際の機能名称に利用するものである。ドキュメントから機能名称を抽出するには、ドキュメントの冒頭部に機能に関するキーワードが羅列されているなどの構造化された文書を使用することが前提となる。また、関連ドキュメント抽出部51で抽出する既存部品の部品IDに関連付けられているドキュメントとは、例えば、既存部品Aを例に採れば、以下のようなドキュメントとなる。1ソフトウェア部品登録部13で部品Aと同時に登録されたドキュメントB。実施の形態2では、部品の登録時に、ソフトウェア部品の機能について書かれたドキュメントを同時に登録するので、そのドキュメントが既存部品の部品IDに関連付けられているドキュメントとなる。2ソフトウェア部品登録部13でドキュメントBと同時に登録されたドキュメントC。実施の形態2では、関連情報データベース17のドキュメントID関連ドキュメントID対応表27で、ドキュメントツリーを保持しており、部品Aと同時に登録されたドキュメントBだけでなく、ドキュメントBの上位文書ドキュメントCも部品Aに関連のあるドキュメントとして抽出する。従って、これらのドキュメントが既存部品の部品IDに関連付けられているドキュメントとなる。<B-2-2.ソフトウェア部品-機能名称関連解析部での処理>次に、図28に示すフローチャートを用いて、ソフトウェア部品-機能名称関連解析部32での登録対象部品の機能名称の解析処理について説明する。ソフトウェア部品-機能名称関連解析部32は、関連ドキュメント抽出部51を利用して、部品IDドキュメント対応表26、関連情報データベース17のドキュメントID関連ドキュメントID対応表27などから取得し、登録対象部品の部品ID34にドキュメントを関連付けたドキュメント一覧44を取得するステップS341。次に、関連ドキュメント抽出部51をさらに利用して、ステップS341で取得したドキュメント一覧44に含まれる、ドキュメントに関連付けられたドキュメントを、成果物データベース16のドキュメントデータベース25から順次取得し、ドキュメントIDリストを作成するステップS342。次に、ドキュメント機能名称抽出部52を用いて、ドキュメントIDリストに含まれる全てのドキュメントに、関連情報データベース17のドキュメントID機能名称ID対応表28より取得した機能名称IDを関連付けて機能名称候補一覧43を作成するステップS343。機能名称判定入力部53は、出力部12を介して機能名称候補一覧43を登録者に提示するステップS344。そして、提示した機能名称候補一覧43に含まれる機能名称について、登録対象部品の機能名称としての適否を入力部11を介して受け付けるステップS345。そして、登録対象部品の機能名称として適切と判定された機能名称について機能名称一覧36を出力するステップS346。以上説明した実施の形態2のソフトウェア部品管理装置1によれば、ドキュメント体系を辿って機能名称を抽出することができ、関連ドキュメントも機能名称の抽出元に含めるため、さらに広い範囲から機能名称を抽出することが可能となる。"