(57)【特許請求の範囲】
【請求項１】
ソフトウェア部品を登録するとともに、登録済みのソフトウェア部品から所望のソフトウェア部品を検索可能なソフトウェア部品管理装置であって、
前記ソフトウェア部品の登録の際に、前記登録済みのソフトウェア部品および登録対象のソフトウェア部品を解析し、前記登録対象のソフトウェア部品について、類似する前記登録済みのソフトウェア部品の機能名称を外部から選択可能に提示し、当該外部から選択された機能名称と前記登録対象のソフトウェア部品とを対応させた機能名称とソフトウェア部品との対応関係情報としてデータベースに保存する機能名称解析部と、
前記所望のソフトウェア部品を検索する際に、前記データベースに保存された前記機能名称とソフトウェア部品との対応関係情報から、前記所望のソフトウェア部品に関連したソフトウェア部品を抽出して出力するソフトウェア部品検索部と、を備える、ソフトウェア部品管理装置。
【請求項２】
前記機能名称を外部から選択可能に提示する手段として、
前記外部に対して前記機能名称をリストアップした機能名称候補一覧を提示する出力部と、
前記機能名称候補一覧から、所望の機能名称を選択して入力する入力部と、を備える、請求項１記載のソフトウェア部品管理装置。
【請求項３】
前記機能名称解析部は、
前記登録対象のソフトウェア部品のソースコードと、前記登録済みのソフトウェア部品のソースコードとに基づいて、前記登録対象のソフトウェア部品ついての前記登録済みのソフトウェア部品との類似度を算出して、前記登録対象のソフトウェア部品に類似する類似ソフトウェア部品について類似ソフトウェア部品情報として出力するソフトウェア部品類似解析部と、
前記類似ソフトウェア部品情報と、前記機能名称とソフトウェア部品との対応関係情報とに基づいて、前記類似ソフトウェア部品に関連付けられる機能名称を抽出して前記外部に選択可能に提示し、前記外部から選択された機能名称を機能名称情報として出力するソフトウェア部品-機能名称関連解析部と、を備える、請求項１記載のソフトウェア部品管理装置。
【請求項４】
入力されたドキュメント、関連ドキュメント、機能名称群および前記登録対象のソフトウェア部品のそれぞれに対して識別番号を付与して、ソフトウェア部品とドキュメントの対応情報、ドキュメントと関連ドキュメントの対応情報、ドキュメントと機能名称の対応情報として保存し、
前記機能名称解析部は、
前記登録対象のソフトウェア部品のソースコードと、前記登録済みのソフトウェア部品のソースコードとに基づいて、前記登録対象のソフトウェア部品ついての前記登録済みのソフトウェア部品との類似度を算出して、前記登録対象のソフトウェア部品に類似する類似ソフトウェア部品について類似ソフトウェア部品情報として出力するソフトウェア部品類似解析部と、
前記類似ソフトウェア部品情報、前記ソフトウェア部品とドキュメントの対応情報、前記ドキュメントと関連ドキュメントの対応情報および前記ドキュメントと機能名称の対応情報に基づいて、前記類似ソフトウェア部品に関連付けられるドキュメント群に対応する機能名称を抽出して前記外部に選択可能に提示し、前記外部から選択された機能名称を機能名称情報として出力するソフトウェア部品-機能名称関連解析部と、を備える、請求項１記載のソフトウェア部品管理装置。
【請求項５】
前記ソフトウェア部品類似解析部は、
前記登録対象のソフトウェア部品のソースコードおよび前記登録済みのソフトウェア部品のソースコードから、前記登録対象のソフトウェア部品および前記登録済みのソフトウェア部品が公開する関数および変数と、使用する外部関数および外部変数を解析し、そのそれぞれについて類似度を算出し、算出した類似度の加算値により、前記登録対象のソフトウェア部品ついての前記登録済みのソフトウェア部品との類似度を算出する類似度算出部を有する、請求項３または請求項４記載のソフトウェア部品管理装置。
【請求項６】
前記類似度算出部は、
引数の型および戻り値の型が一致するか否かと、引数の名前および関数の名前の類似度から２つの関数の間の類似度を算出する関数類似度算出部、および
型が一致する否かと、変数名の類似度から２つの変数の間の類似度を算出する変数類似度算出部の少なくとも一方を有する、請求項５記載のソフトウェア部品管理装置。
【請求項７】
前記類似度算出部は、
引数の型および戻り値の型が互換性を有するか否かと、引数の名前および関数の名前の類似度から２つの関数の間の類似度を算出する関数類似度算出部、
型が互換性を有するか否かと、変数名の類似度から２つの変数の間の類似度を算出する変数類似度算出部の少なくとも一方を有する、請求項５記載のソフトウェア部品管理装置。
【請求項８】
コンピュータにインストールされて、前記コンピュータにソフトウェア部品を登録するとともに、登録済みのソフトウェア部品から所望のソフトウェア部品を検索する処理を行わせることが可能なソフトウェア部品管理プログラムであって、
前記ソフトウェア部品の登録の際には、
前記登録済みのソフトウェア部品および登録対象のソフトウェア部品を解析し、前記登録対象のソフトウェア部品について、類似する前記登録済みのソフトウェア部品の機能名称を外部から選択可能に提示し、当該外部から選択された機能名称と前記登録対象のソフトウェア部品とを対応させた機能名称とソフトウェア部品との対応関係情報として取得し、
前記所望のソフトウェア部品を検索する際には、
前記機能名称とソフトウェア部品との対応関係情報から、前記所望のソフトウェア部品に関連したソフトウェア部品を抽出する、機能を前記コンピュータに実行させる、ソフトウェア部品管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアを再利用可能な部品の単位として管理するソフトウェア部品管理装置に関する。
【背景技術】
【０００２】
ソフトウェアの開発コストを低減する効率的なソフトウェア開発技術が求められているが、その中にソフトウェアの再利用という考えがある。ソフトウェアの再利用はソフトウェア開発における成果物を新規の開発の際に再度活用しようとする思想であり、再利用可能なソフトウェアを部品化したもの（以下、ソフトウェア部品という）を予め管理しておき、ソフトウェア部品単位で流用する。
【０００３】
ここで、管理しているソフトウェア部品を流用するためには、管理している数々のソフトウェア部品の中から、流用したいソフトウェア部品を検索する必要がある。そのためには、ソフトウェア部品と、ソフトウェア部品が有する機能を示した説明文や語句とを対応付けて、その説明文や語句を対象として検索を行うと言った方法が採られる。しかし、ソフトウェア部品が有する機能を過不足なく表現した説明文や語句を対応付けることは容易ではない。
【０００４】
例えば、特許文献１で開示されている方式では、ソフトウェア部品と仕様書を管理し、設計情報の関連を示すタグ情報を付加することにより、成果物間の関連を記録している。
【０００５】
部品や仕様書に変更があれば、タグを介した関連を見ることにより、変更の影響を受ける成果物を抽出することができる。
【０００６】
また、特許文献２で開示されている方式では、仕様書から作成した機能ツリーとソースとを対応付けたリンク情報を記録している。機能ツリーに変更があった場合に、ソースの変更箇所を抽出することもできる。
【０００７】
さらに、設計情報や機能情報との対応を関連付けるだけでなく、検索自体を容易にすることを目的とした技術も存在する。特許文献３で開示されている方式では、ソフトウェア部品を検索する際の検索キーを、予めソフトウェア部品に対応付けられている設計書から自動抽出する構成を採っている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−１２３４３２号公報
【特許文献２】特許第４３６０９４２号公報
【特許文献３】特開平８−２９７５７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１に記載の技術では、設計情報のタグを介して、機能とソフトウェア部品が関連付けられているため、同等のタグが付けられない場合は関連がないことになってしまう。
【００１０】
特許文献２に記載の技術では、機能ツリーの変更に応じて、ソースコードの変更箇所を抽出しユーザに提示することが可能であるが、そもそも流用すべきソフトウェア部品を検索する方法は提供していない。
【００１１】
また、特許文献３に記載の技術では、ソフトウェア部品を検索するための検索キーを整備しているが、検索対象となる設計書の語句に統一性がなければ、同様の機能を持つ部品が存在しても、同じ検索キーでは検索できない。ソフトウェア部品を管理する期間は長期に及ぶ場合、表記や部門における用語が変化してしまう。
【００１２】
本発明は上記のような問題点を解消するためになされたもので、ソフトウェア部品を検索する際に、所望の機能を持つソフトウェア部品を容易に検索できるとともに、検索に際して有用な情報を作業者に大きな負担を与えずに抽出することが可能で、また、ソフトウェア部品の機能の表現に表記のゆれがある場合でも共通した機能名称を付加することができるソフトウェア部品管理装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明に係るソフトウェア部品管理装置の態様は、ソフトウェア部品を登録するとともに、登録済みのソフトウェア部品から所望のソフトウェア部品を検索可能なソフトウェア部品管理装置であって、前記ソフトウェア部品の登録の際に、前記登録済みのソフトウェア部品および登録対象のソフトウェア部品を解析し、前記登録対象のソフトウェア部品について、類似する前記登録済みのソフトウェア部品の機能名称を外部から選択可能に提示し、当該外部から選択された機能名称と前記登録対象のソフトウェア部品とを対応させた機能名称とソフトウェア部品との対応関係情報としてデータベースに保存する機能名称解析部と、前記所望のソフトウェア部品を検索する際に、前記データベースに保存された前記機能名称とソフトウェア部品との対応関係情報から、前記所望のソフトウェア部品に関連したソフトウェア部品を抽出して出力するソフトウェア部品検索部とを備えている。
【発明の効果】
【００１４】
本発明に係るソフトウェア部品管理装置の態様によれば、登録対象のソフトウェア部品について、類似する前記登録済みのソフトウェア部品の機能名称を外部から選択可能に提示し、当該外部から選択された機能名称と前記登録対象のソフトウェア部品とを対応させた機能名称とソフトウェア部品との対応関係情報としてデータベースに保存することで、登録済みのソフトウェア部品と共通した機能名称を付けることができる。また、ソフトウェア部品の機能の表現の表記のゆれによって検索結果から漏れることを防ぐことが可能となる。また、所望のソフトウェア部品を検索する際には、所望のソフトウェア部品に関連したソフトウェア部品を抽出して出力するので、所望の機能を持つソフトウェア部品を容易に検索できるとともに、検索に際して有用な情報を作業者に大きな負担を与えずに抽出することが可能となる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施の形態１に係るソフトウェア部品管理装置の概略構成を示すブロック図である。
【図２】本発明の実施の形態１に係るソフトウェア部品管理装置のハードウェア構成を示すブロック図である。
【図３】本発明の実施の形態１に係るソフトウェア部品登録部の概略構成を示すブロック図である。
【図４】本発明の実施の形態１に係る機能名称解析部の概略構成を示すブロック図である。
【図５】本発明の実施の形態１に係る機能名称解析部でソフトウェア部品を登録する処理を示すフローチャートである。
【図６】本発明の実施の形態１に係るソフトウェア部品類似解析部を示すブロック図である。
【図７】本発明の実施の形態１に係るソフトウェア部品類似解析部での解析処理を示すフローチャートである。
【図８】本発明の実施の形態１に係る公開関数変数解析部で、ソフトウェア部品のソースコード中で部品外に公開されている関数および変数を解析する処理を示すフローチャートである。
【図９】本発明の実施の形態１に係る外部変数解析部で、ソフトウェア部品のソースコード中で使用している外部変数を解析する処理を示すフローチャートである。
【図１０】本発明の実施の形態１に係る外部関数解析部で、ソフトウェア部品のソースコード中で呼び出している外部関数を解析する処理を示すフローチャートである。
【図１１】本発明の実施の形態１に係る類似度算出部の構成を示すブロック図である。
【図１２】本発明の実施の形態１に係る類似度算出部での類似度を算出処理を示すフローチャートである。
【図１３】本発明の実施の形態１に係る類似度算出部で登録対象部品の公開関数と既存部品の公開関数の類似度を算出する処理を示すフローチャートである。
【図１４】本発明の実施の形態１に係る類似度算出部で登録対象部品の公開変数と既存部品の公開変数の類似度を算出する処理を示すフローチャートである。
【図１５】本発明の実施の形態１に係る類似度算出部で登録対象部品の外部関数と既存部品の外部関数の類似度を算出する処理を示すフローチャートである。
【図１６】本発明の実施の形態１に係る類似度算出部で登録対象部品の外部変数と既存部品の外部変数の類似度を算出する処理を示すフローチャートである。
【図１７】本発明の実施の形態１に係るソフトウェア部品−機能名称関連解析部の構成を示すブロック図である。
【図１８】本発明の実施の形態１に係るソフトウェア部品−機能名称関連解析部で登録対象部品の機能名称を解析する処理を示すフローチャートである。
【図１９】本発明の実施の形態１に係る機能名称−ソフトウェア部品対応表更新部の構成を示すブロック図である。
【図２０】機能名称−ソフトウェア部品対応表更新部の動作を説明するフローチャートである。
【図２１】本発明の実施の形態１に係るソフトウェア部品検索部の概略構成を示すブロック図である。
【図２２】本発明の実施の形態１に係るソフトウェア部品検索部で機能名称を入力としてソフトウェア部品を検索する処理を示すフローチャートである。
【図２３】本発明の実施の形態１に係るソフトウェア部品検索部の概略構成を示すブロック図である。
【図２４】本発明の実施の形態１に係るソフトウェア部品検索部で、既存部品を入力としてソフトウェア部品を検索する処理を示すフローチャートである。
【図２５】本発明の実施の形態２に係るソフトウェア部品登録部の概略構成を示すブロック図である。
【図２６】本発明の実施の形態２に係る機能名称解析部の概略構成を示すブロック図である。
【図２７】本発明の実施の形態２に係るソフトウェア部品−機能名称関連解析部の構成を示すブロック図である。
【図２８】本発明の実施の形態２に係るソフトウェア部品−機能名称関連解析部で登録対象部品の機能名称を解析する処理を示すフローチャートである。
【発明を実施するための形態】
【００１６】
＜Ａ．実施の形態１＞
以下、図１〜図２４を用いて、本発明に係るソフトウェア部品管理装置の実施の形態１について説明する。
【００１７】
＜Ａ−１．ソフトウェア部品管理装置の概略＞  
図１は、本発明に係るソフトウェア部品管理装置１の概略構成を示すブロック図である。図１に示すように、ソフトウェア部品管理装置１は、ソフトウェア部品の登録を行う登録者およびソフトウェア部品の検索を行う開発者によって使用されるパーソナルコンピュータなどの情報処理端末装置（以下、端末装置と呼称）２にＬＡＮ（Local Area Network）などのようなネットワーク３を介して接続されている。
【００１８】
ソフトウェア部品管理装置１は、入力部１１、出力部１２、ソフトウェア部品登録部１３、機能名称解析部１４、ソフトウェア部品検索部１５、成果物データベース１６および関連情報データベース１７を備えている。
【００１９】
入力部１１は、ネットワーク３を介して端末装置２からの入力を受け付ける。出力部１２は、ネットワーク３を介して端末装置２への出力を送出する。
【００２０】
ソフトウェア部品登録部１３は、ソフトウェア部品管理装置１に入力された新規のソフトウェア部品を、成果物データベース１６に登録する。
【００２１】
機能名称解析部１４は、成果物データベース１６に登録されているソフトウェア部品および登録対象部品を解析し、登録対象部品について登録済みのソフトウェア部品との類似関係に基づいて機能名称を関連付けし、機能名称とソフトウェア部品との対応関係の情報として関連情報データベース１７に登録する。ここで、機能名称とはソフトウェア部品が有する機能を表したキーワードであり、例えば、折れ線グラフを表示する機能を有するグラフ部品であれば、「折れ線描画」や「線描画」と言った名称となる。
【００２２】
ソフトウェア部品検索部１５は、ソフトウェア部品管理装置１に登録されているソフトウェア部品を検索する。
【００２３】
図２は、ソフトウェア部品管理装置１を、コンピュータシステムのハードウェアにより実現する場合の構成を示すブロック図である。
【００２４】
図２に示すコンピュータシステムは、キーボード１０１、マウス１０２、マイクロプロセッサ１０３、ＨＤＤ（ハードディスク装置）１０４、ＲＡＭ（Random Access Memory）１０５、ＲＯＭ（Read Only Memory）１０６、グラフィックチップ１０７、フレームバッファ１０８およびディスプレイモニタ１０９を備えている。
【００２５】
このような構成において、ソフトウェア部品管理装置１の入力部１１は、キーボード１０１およびマウス１０２で実現されている。ソフトウェア部品登録部１３、機能名称解析部１４、ソフトウェア部品検索部１５、成果物データベース１６および関連情報データベース１７は、それぞれの機能に対応したプログラムが、ＨＤＤ１０４またはＲＡＭ１０５、ＲＯＭ１０６等の記憶領域に格納され、これらのプログラムをマイクロプロセッサ１０３が実行することで実現される。出力部１２は、グラフィックチップ１０７、フレームバッファ１０８およびディスプレイモニタ１０９で実現される。
【００２６】
次に、このようなソフトウェア部品管理装置１を用いたソフトウェア部品登録の手順について説明する。
【００２７】
＜Ａ−２．ソフトウェア部品登録部の構成＞
図３は、ソフトウェア部品登録部１３の概略構成を示すブロック図である。ソフトウェア部品登録部１３は、登録対象のソフトウェア部品（以下、登録対象部品と呼称）２１の情報を入力とし、登録対象部品２１に対し、ソフトウェア部品管理装置１において一意に特定できる部品ＩＤを与える。
【００２８】
ここで部品ＩＤとは、例えば、ソフトウェア部品管理装置１に登録の順に付与する連番数字や、アルファベット、あるいは数字とアルファベットの組み合わせなどが挙げられる。
【００２９】
また、ソフトウェア部品登録部１３は、ソースコード格納部２２を備え、ソースコード格納部２２は、登録対象部品２１の部品ＩＤと登録対象部品２１から抽出したソースコードの組み合せを成果物データベース１６のソースコードデータベース２４に登録する。ここでソフトウェア部品の情報とは、ソフトウェア部品名称とソフトウェア部品本体へのパスを少なくとも含む情報を指す。
【００３０】
＜Ａ−３．機能名称解析部の構成＞
図４は、機能名称解析部１４の概略構成を示すブロック図である。図４に示すように、機能名称解析部１４は、ソフトウェア部品類似解析部３１、ソフトウェア部品−機能名称関連解析部３２および機能名称ソフトウェア部品対応表更新部３３を備えている。
【００３１】
ソフトウェア部品類似解析部３１は、登録対象部品と登録済みのソフトウェア部品（以下、既存部品と呼称）のソースコードを解析してソフトウェア部品の類似度を算出し、登録対象部品と類似度の高い既存部品を類似ソフトウェア部品一覧３５（類似ソフトウェア部品情報）として出力する。
【００３２】
ソフトウェア部品−機能名称関連解析部３２は、類似ソフトウェア部品一覧３５に含まれる、既存ソフトウェア部品に関連付けられた機能名称を、登録対象部品の機能名称候補一覧４３として登録者に提示し、登録対象部品の機能名称としての適否の判定結果を受け付け、適切と判定された機能名称を、機能名称一覧３６（機能名称情報）として出力する。
【００３３】
機能名称ソフトウェア部品対応表更新部３３は、ソフトウェア部品−機能名称関連解析部３２から出力された機能名称一覧３６と、ソフトウェア部品登録部１３（図１）で付与された登録対象部品の部品ＩＤ３４とを関連情報データベース１７に出力し、両者を対応付けた機能名称−ソフトウェア部品対応表２３（機能名称とソフトウェア部品との対応関係の情報）として記録する。
【００３４】
機能名称一覧３６と登録対象部品の部品ＩＤ３４とを対応付けた機能名称−ソフトウェア部品対応表２３を得ることで、ソフトウェア部品の登録の際に登録済みのソフトウェア部品と共通した機能名称を付けることができる。
【００３５】
＜Ａ−４．機能名称解析部での処理＞
図５は、機能名称解析部１４でのソフトウェア部品の登録処理を示すフローチャートである。以下、このフローチャートを参照して、機能名称解析部１４での登録処理を説明する。
【００３６】
機能名称解析部１４は、ソフトウェア部品登録部１３（図１）から登録対象部品の部品ＩＤ３４を取得し、成果物データベース１６のソースコードデータベース２４から登録対象部品のソースコードを取得する（ステップＳ１４１）。
【００３７】
そして、取得した登録対象部品のソースコードと既存部品のソースコードとをソフトウェア部品類似解析部３１で解析し、登録対象部品に類似する既存部品の有無を判定し、類似する既存部品の部品ＩＤと類似度の値を記録した類似ソフトウェア部品一覧３５を作成する（ステップＳ１４２）。
【００３８】
次に、類似ソフトウェア部品一覧３５に含まれる既存部品の部品ＩＤをキーとして、ソフトウェア部品−機能名称関連解析部３２において、関連情報データベース１７の機能名称−ソフトウェア対応表２３から、キーとなる部品ＩＤに対応する機能名称を取得することを、類似ソフトウェア部品一覧３５に含まれる既存部品全てに対して行い、取得した機能名称群を機能名称候補一覧４３とする。この機能名称候補一覧４３を登録者に出力部１２を介して提示し、機能名称候補一覧４３に含まれる機能名称ごとに登録者が下した登録対象部品の機能名称としての適否の判定結果を入力部１１より受け付ける。
【００３９】
そして、登録対象部品の機能名称として適切と判定された機能名称を機能名称一覧３６として出力する（ステップＳ１４３）。この機能名称一覧３６と登録対象部品の部品ＩＤ３４の組を機能名称−ソフトウェア部品対応表更新部３３で作成し、関連情報データベース１７の機能名称−ソフトウェア部品対応表２３に記録する（ステップＳ１４４）。これにより、登録対象部品は既存部品となり、その機能名称が部品ＩＤと関連付けられる。
【００４０】
＜Ａ−５．機能名称解析部の構成および処理＞
次に、機能名称解析部１４の各構成要素のそれぞれについて、処理内容を説明する。
【００４１】
＜Ａ−５−１．ソフトウェア部品類似解析部の構成＞
図６は、ソフトウェア部品類似解析部３１の構成を示すブロック図である。ソフトウェア部品類似解析部３１では、登録対象部品のソースコードと、既存部品の部品ＩＤおよびソースコードを入力として、登録対象部品との類似度の高い既存部品の部品ＩＤと、算出した類似度の値を類似ソフトウェア部品一覧３５として出力する。
【００４２】
ソフトウェア部品類似解析部３１は、登録対象部品のソースコードと、既存部品のソースコードとを解析して、解析結果を出力するソースコード解析部６１と、この解析結果から登録対象部品と既存部品の類似度の値を算出する類似度算出部６２と、算出した類似度に基づいて類似度を判定し、類似していると判定された既存部品を類似ソフトウェア部品一覧３５に登録する類似度判定部６３とを備えている。
【００４３】
また、ソースコード解析部６１は、ソフトウェア部品のソースコード中で部品外に公開されている関数および変数を解析する公開関数変数解析部７１、ソースコード中で呼び出している外部関数を解析する外部関数解析部７２、ソースコード中で使用している外部変数を解析する外部変数解析部７３を備えている。
【００４４】
そして、ソフトウェア部品類似解析部３１内には、公開関数一覧７４、外部関数一覧７５、外部変数一覧７６および公開変数一覧７７を記憶する記憶部を有している。
【００４５】
＜Ａ−５−２．ソフトウェア部品類似解析部での解析処理＞
次に、図７に示すフローチャートを用いて、ソフトウェア部品類似解析部３１で登録対象部品に類似する既存部品を解析する解析処理について説明する。
【００４６】
ソフトウェア部品類似解析部３１は、登録対象部品のソースコードをソースコード解析部６１で解析し（ステップＳ３１１）、解析した結果を内部の記憶部（図示せず）に公開関数一覧７４、外部関数一覧７５、外部変数一覧７６および公開変数一覧７７として保持する。
【００４７】
次に、既存部品の部品ＩＤを成果物データデータベース１６（図６）のソースコードデータベース２４から取り出し、内部の記憶部にＩＤ一覧として全てコピーしておく（ステップＳ３１２）。
【００４８】
コピーしたＩＤ一覧から部品ＩＤを１つ取得し、これを部品ｘとする。そして、部品ｘの部品ＩＤをＩＤ一覧から削除する（ステップＳ３１３）。
【００４９】
次に、部品ｘのソースコードをソースコード解析部６１で解析し（ステップＳ３１４）、解析した結果を内部の記憶部に公開関数一覧７４、外部関数一覧７５、外部変数一覧７６および公開変数一覧７７として保持する。
【００５０】
次に、ステップＳ３１１とステップＳ３１４で保持した解析結果に基づいて、類似度算出部６２で類似度を算出する（ステップＳ３１５）。
【００５１】
そして、算出した類似度に基づいて類似度判定部６３で登録対象部品と既存部品との類似関係の有無を判定する（ステップＳ３１６）。この判定では、算出した類似度が予め定めた閾値以上である場合には類似関係があると判定し、閾値を越えない場合には類似関係がないと判定する。また、類似度の大きい方から順に１０件を選択する。
【００５２】
ステップＳ３１６で類似関係がある判定された場合は、部品ｘの部品ＩＤと、算出された部品ｘについての類似度の値の組を類似ソフトウェア部品一覧３５に登録する（ステップＳ３１７）。
【００５３】
次に、ＩＤ一覧に部品ＩＤがあるか否かを判定し（ステップＳ３１８）、部品ＩＤが１つもなければ処理を終了し、部品ＩＤがあればステップＳ３１３以下の処理を繰り返す。
【００５４】
＜Ａ−５−３．ソースコード解析部での解析処理＞
ここで、ソースコード解析部６１でのソースコードの解析処理について説明する。
【００５５】
図８は、公開関数変数解析部７１で、ソフトウェア部品のソースコード中で部品外に公開されている関数および変数を解析する処理を示すフローチャートである。
【００５６】
公開関数変数解析部７１は、まず、ソースコード中で定義されている関数および変数を全て抽出する（ステップＳ７１1）。
【００５７】
そして、抽出した関数および変数のうち、非公開関数と非公開変数を除外する（ステップＳ７１２）。
【００５８】
そして、残った関数の関数の名前と戻り値の型、引数の型および名前と、残った変数の変数名と変数の型を解析する（ステップＳ７１３）。
【００５９】
ここでの解析とは、関数の定義情報から関数の名前と戻り値の型、引数の型および名前を表す文字列を抽出する処理と、変数の定義情報から変数名と変数の型を表す文字列を抽出する処理を指す。
【００６０】
例えば、Ｃ言語で、「int strcmp(const char* a, const char* b);」と定義されている関数の場合、 関数の名前は「strcmp」となり、１つ目の引数の型は「const char*」、１つ目の引数の名前は「a」、２つ目の引数の型は「const char*」、２つ目の引数の名前は「b」、戻り値の型は「int」となる。
【００６１】
また、「int length;」と定義されている変数の場合、変数名は「length」となり、変数の型は「int」となる。
【００６２】
なお、Ｃ言語の「int」、「double」のような予め定義されている型だけでなく、プログラム中で新たに作成した型でも同様に解析可能である。
【００６３】
その後、残った定義関数の関数の名前と戻り値の型と引数の型と引数の名前を公開関数一覧７４に、残った定義変数の変数名と型を公開変数一覧７７に登録する（ステップＳ７１４）。
【００６４】
図９は、外部関数解析部７２で、ソフトウェア部品のソースコード中で呼び出している外部関数を解析する処理を示すフローチャートである。
【００６５】
外部関数解析部７２は、まず、ソースコード中で定義されている関数を全て抽出する（ステップＳ７２１）。
【００６６】
そして、抽出した定義関数の関数の名前、戻り値の型、引数の型および名前を抽出する（ステップＳ７２２）。
【００６７】
次に、ソースコード中で呼び出している関数（以下、呼出関数と呼称）を抽出する（ステップＳ７２３）。
【００６８】
そして、抽出した呼出関数の関数の名前、戻り値の型、引数の型および名前を静的解析する（ステップＳ７２４）。ここでの静的解析とは、関数の名前などの文字列を抽出する処理と言う点では先に説明した解析と同じであるが、文字列を抽出する前に、呼出関数が定義されているプログラムを特定し、そのプログラムに記述された定義情報を取得する処理が含まれる。
【００６９】
次に、呼出関数の中から、ステップＳ７２１で抽出した定義関数を除外する（ステップＳ７２５）。
【００７０】
最後に、呼出関数の関数の名前と戻り値の型と引数の型と引数の名前を外部関数一覧７５に登録する（ステップＳ７２６）。
【００７１】
図１０は、外部変数解析部７３で、ソフトウェア部品のソースコード中で使用している外部変数を解析する処理を示すフローチャートである。
【００７２】
外部変数解析部７３は、まず、ソースコード中で使用されている変数を全て抽出する（ステップＳ７３１）。
【００７３】
次に、ソースコード中で定義されている変数を抽出する（ステップＳ７３２）。
【００７４】
次に、ステップＳ７３１で抽出した変数のうち、ステップＳ７３２で抽出した定義変数を除外する（ステップＳ７３３）。
【００７５】
そして、残った外部変数の型、名前を静的解析により抽出する（ステップＳ７３４）。
【００７６】
最後に、外部変数の型と名前を外部変数一覧７６に登録する（ステップＳ７３５）。
【００７７】
＜Ａ−５−４．類似度算出部の構成および動作＞
図１１は、類似度算出部６２の概略構成を示すブロック図である。図１１に示すように類似度算出部６２は、関数類似度算出部８１と変数類似度算出部８２とを備えている。
【００７８】
関数類似度算出部８１は、引数の型および戻り値の型が一致するか否かと、引数の名前および関数の名前の類似度から２つの関数の間の類似度を算出し、変数類似度算出部８２は、型が一致する否かと、変数名の類似度から２つの変数の間の類似度を算出する。なお、類似度算出部６２は、関数類似度算出部８１および変数類似度算出部８２の少なくとも一方を備えていれば良い。
【００７９】
類似度算出部６２を有することで、類似するソフトウェア部品の機能名称を抽出できるので、ソフトウェア部品の機能名称を広く抽出することができる。
【００８０】
図１２は、類似度算出部６２での、登録対象部品と既存部品の間の類似度を算出する処理を示すフローチャートであり、図７に示したステップＳ３１５での処理を説明するものである。
【００８１】
類似度算出部６２は、まず、公開関数一覧７４（図６）から登録対象部品の公開関数一覧を取得し、その中から重複する関数を調べ、重複するものがあれば、一覧に格納されている順に１、２、３・・・・のように重複番号を振り当てる。重複する関数がない場合は、重複番号は１にする。そして、公開関数一覧の関数と重複番号とを組み合わせた拡張公開関数一覧を作成しソフトウェア部品類似解析部３１内部の記憶部（図示せず）に保存する（ステップＳ６２１）。
【００８２】
登録対象部品の外部関数についても同様の処理を実行し、拡張外部関数一覧を作成しソフトウェア部品類似解析部３１内部の記憶部（図示せず）に保存する（ステップＳ６２２）。
【００８３】
次に、成果物データベース１６（図６）のソースコードデータベース２４に登録された既存部品を全て取り出し、ソフトウェア部品類似解析部３１内部の記憶部（図示せず）に既存部品群として全てコピーしておく。そして、既存部品群から１つの部品を取り出し、部品Ｐとし、部品Ｐを既存部品群から取り除く（ステップＳ６２３）。
【００８４】
次に、登録対象部品および部品Ｐにおける公開関数、公開変数、外部関数、外部変数を、公開関数一覧７４、公開変数一覧７７、外部関数一覧７５および外部変数一覧７６からそれぞれ読み出し、それぞれの類似度を算出する（ステップＳ６２４）。
【００８５】
次に、ステップ６２４で算出した類似度に基づいて登録対象部品と部品Ｐとの類似度を求める（ステップＳ６２５）。すなわち、ステップＳ６２４で算出した公開関数、公開変数、外部関数一覧および外部変数の類似度を加算することで、登録対象部品や部品Ｐの類似度を算出する。
【００８６】
次に、部品Ｐの部品ＩＤと類似度の値をソフトウェア部品類似解析部３１内の記憶部に登録し、類似度一覧を作成する（ステップＳ６２６）。この類似度一覧は、部品ＩＤから類似度の値が特定できるように構成される。
【００８７】
次に、既存部品群に既存部品があるか否かを判定し（ステップＳ６２７）、既存部品があればステップ６２３以下の処理を繰り返し、既存部品が１つもなければステップＳ６２８に進み、作成した類似度一覧を出力する。
【００８８】
次に、ステップＳ６２４における公開関数、公開変数、外部関数、外部変数の類似度の算出方法を説明する。まず、公開関数、公開変数、外部関数および外部変数の類似度の算出処理のそれぞれの流れを説明する。
【００８９】
＜Ａ−５−４−１．公開関数の類似度の算出処理＞
図１３は、図１２に示したステップＳ６２４における、登録対象部品の公開関数と既存部品Ｐの公開関数の類似度を算出する処理を示すフローチャートである。
【００９０】
類似度算出部６２は、まず、図１２に示したステップＳ６２１で作成した登録対象部品の拡張公開関数一覧を取得しコピーする（ステップＳ６４１）。
【００９１】
次に、コピーした拡張公開関数一覧より１つの関数を取り出し関数ｐｘとし、関数ｐｘを、コピーした拡張公開関数一覧から削除する（ステップＳ６４２）。
【００９２】
次に、類似度の最大値格納部ｍａｘの値を０で初期化する（ステップＳ６４３）。
【００９３】
次に、公開関数一覧７４から部品Ｐの公開関数一覧を取得しコピーする（ステップ６４４）。
【００９４】
次に、コピーした公開関数一覧より１つ関数を取り出し関数ｐｙとし、関数ｐｙを、コピーした公開関数一覧から削除する（ステップＳ６４５）。
【００９５】
次に、関数類似度算出部８１（図１１）で関数ｐｘと関数ｐｙの類似度を算出し類似度格納部ｖａｌｕｅに格納する（ステップＳ６４６）。
【００９６】
そして、類似度格納部ｖａｌｕｅの値が最大値格納部ｍａｘに格納されている値よりも大きければ、最大値格納部ｍａｘの値を類似度格納部ｖａｌｕｅの値に更新する（ステップＳ６４７）。
【００９７】
次に、部品Ｐの公開関数一覧に関数があるか否かを判定し（ステップＳ６４８）、関数があれば、ステップＳ６４５以下の処理を繰り返し、関数がなければ次のステップＳ６４９に進む。
【００９８】
ステップＳ６４９では、関数ｐｘの関数の名前と最大値格納部ｍａｘに格納された値を出力する。
【００９９】
そして、登録対象部品の拡張公開関数一覧に関数があるか否かを判定し（ステップＳ６５０）、関数があれば、ステップＳ６４２以下の処理を繰り返し、関数がなければ処理を終了する。
【０１００】
以上の処理により、登録対象部品の拡張公開関数の全てと、既存部品Ｐの公開関数の全てとの類似度の比較が行われ、類似度の最も高い関数の関数の名前と類似度とを取得することができる。
【０１０１】
＜Ａ−５−４−２．公開変数の類似度の算出処理＞
図１４は、図１２に示したステップＳ６２４における、登録対象部品の公開変数と既存部品Ｐの公開変数の類似度を算出する処理を示すフローチャートである。
【０１０２】
類似度算出部６２は、まず、公開変数一覧７７から登録対象部品の公開変数一覧を取得しコピーする（ステップＳ６７１）。
【０１０３】
次に、コピーした公開変数一覧より１つの変数を取り出し変数ｍｘとし、変数ｍｘを、コピーした公開変数一覧から削除する（ステップＳ６７２）。
【０１０４】
次に、類似度の最大値格納部ｍａｘの値を０で初期化する（ステップＳ６７３）。
【０１０５】
次に、公開変数一覧７７から部品Ｐの公開変数一覧を取得しコピーする（ステップ６７４）。
【０１０６】
次に、コピーした公開変数一覧より１つ変数を取り出し変数ｍｙとし、変数ｍｙを、コピーした公開変数一覧から削除する（ステップＳ６７５）。
【０１０７】
次に、変数類似度算出部８２（図１１）で変数ｍｘと変数ｍｙの類似度を算出し類似度格納部ｖａｌｕｅに格納する（ステップＳ６７６）。
【０１０８】
そして、類似度格納部ｖａｌｕｅの値が最大値格納部ｍａｘに格納されている値よりも大きければ、最大値格納部ｍａｘの値を類似度格納部ｖａｌｕｅの値に更新する（ステップＳ６７７）。
【０１０９】
次に、部品Ｐの公開変数一覧に変数があるか否かを判定し（ステップＳ６７８）、変数があれば、ステップＳ６７５以下の処理を繰り返し、変数がなければ次のステップＳ６７９に進む。
【０１１０】
ステップＳ６７９では、変数ｍｘの関数の名前と最大値格納部ｍａｘに格納された値を出力する。
【０１１１】
そして、登録対象部品の公開変数一覧に変数があるか否かを判定し（ステップＳ６８０）、変数があれば、ステップＳ６７２以下の処理を繰り返し、変数がなければ処理を終了する。
【０１１２】
以上の処理により、登録対象部品の公開変数の全てと、既存部品Ｐの公開変数の全てとの類似度の比較が行われ、類似度の最も高い変数の変数名と類似度とを取得することができる。
【０１１３】
＜Ａ−５−４−３．外部関数の類似度の算出処理＞
図１５は、図１２に示したステップＳ６２４における、登録対象部品の外部関数と既存部品Ｐの外部関数の類似度を算出する処理を示すフローチャートである。
【０１１４】
類似度算出部６２は、まず、図１２に示したステップＳ６２２で作成した登録対象部品の拡張外部関数一覧を取得しコピーする（ステップＳ６５１）。
【０１１５】
次に、コピーした拡張外部関数一覧より１つの関数を取り出し関数ｅｘとし、関数ｅｘを、コピーした拡張外部関数一覧から削除する（ステップＳ６５２）。
【０１１６】
次に、類似度の最大値格納部ｍａｘの値を０で初期化する（ステップＳ６５３）。
【０１１７】
次に、外部関数一覧７５から部品Ｐの外部関数一覧を取得しコピーする（ステップ６５４）。
【０１１８】
次に、コピーした外部関数一覧より１つ関数を取り出し関数ｅｙとし、関数ｅｙを、コピーした外部関数一覧から削除する（ステップＳ６５５）。
【０１１９】
次に、関数類似度算出部８１（図１１）で関数ｅｘと関数ｅｙの類似度を算出し類似度格納部ｖａｌｕｅに格納する（ステップＳ６５６）。
【０１２０】
そして、類似度格納部ｖａｌｕｅの値が最大値格納部ｍａｘに格納されている値よりも大きければ、最大値格納部ｍａｘの値を類似度格納部ｖａｌｕｅの値に更新する（ステップＳ６５７）。
【０１２１】
次に、部品Ｐの外部関数一覧に関数があるか否かを判定し（ステップＳ６５８）、関数があれば、ステップＳ６５５以下の処理を繰り返し、関数がなければ次のステップＳ６５９に進む。
【０１２２】
ステップＳ６５９では、関数ｅｘの関数の名前と最大値格納部ｍａｘに格納された値を出力する。
【０１２３】
そして、登録対象部品の拡張公開関数一覧に関数があるか否かを判定し（ステップＳ６５０）、関数があれば、ステップＳ６５２以下の処理を繰り返し、関数がなければ処理を終了する。
【０１２４】
以上の処理により、登録対象部品の外部関数の全てと、既存部品Ｐの外部関数の全てとの類似度の比較が行われ、類似度の最も高い関数の関数の名前と類似度とを取得することができる。
【０１２５】
＜Ａ−５−４−４．外部変数の類似度の算出処理＞
図１６は、図１２に示したステップＳ６２４における、登録対象部品の外部変数と既存部品Ｐの外部変数の類似度を算出する処理を示すフローチャートである。
【０１２６】
類似度算出部６２は、まず、外部変数一覧７６から登録対象部品の外部変数一覧を取得しコピーする（ステップＳ６６１）。
【０１２７】
次に、コピーした外部変数一覧より１つの変数を取り出し変数ｖｘとし、変数ｖｘを、コピーした外部変数一覧から削除する（ステップＳ６６２）。
【０１２８】
次に、類似度の最大値格納部ｍａｘの値を０で初期化する（ステップＳ６６３）。
【０１２９】
次に、外部変数一覧７６から部品Ｐの外部変数一覧を取得しコピーする（ステップ６６４）。
【０１３０】
次に、コピーした外部変数一覧より１つ変数を取り出し変数ｖｙとし、変数ｖｙを、コピーした外部変数一覧から削除する（ステップＳ６６５）。
【０１３１】
次に、変数類似度算出部８２（図１１）で変数ｖｘと変数ｖｙの類似度を算出し類似度格納部ｖａｌｕｅに格納する（ステップＳ６６６）。
【０１３２】
そして、類似度格納部ｖａｌｕｅの値が最大値格納部ｍａｘに格納されている値よりも大きければ、最大値格納部ｍａｘの値を類似度格納部ｖａｌｕｅの値に更新する（ステップＳ６６７）。
【０１３３】
次に、部品Ｐの外部変数一覧に変数があるか否かを判定し（ステップＳ６６８）、変数があれば、ステップＳ６６５以下の処理を繰り返し、変数がなければ次のステップＳ６６９に進む。
【０１３４】
ステップＳ６６９では、変数ｖｘの変数名と最大値格納部ｍａｘに格納された値を出力する。
【０１３５】
そして、登録対象部品の外部変数一覧に変数があるか否かを判定し（ステップＳ６７０）、変数があれば、ステップＳ６６２以下の処理を繰り返し、変数がなければ処理を終了する。
【０１３６】
以上の処理により、登録対象部品の外部変数の全てと、既存部品Ｐの外部変数の全てとの類似度の比較が行われ、類似度の最も高い変数の変数名と類似度とを取得することができる。
【０１３７】
ここで、関数類似度算出部８１は、ステップＳ６４６（図１３）とステップＳ６５６（図１５）で、２つの関数の間の類似度を算出し、変数類似度算出部８２は、ステップＳ６７６（図１４）とステップＳ６６６（図１６）で、２つの変数の間の類似度を算出する。
【０１３８】
以下に類似度の算出例を示すが、類似度は類似している場合に高い点が与えられ、類似していない場合に低い点が与えられるように構成すれば良い。
【０１３９】
すなわち、関数類似度算出部８１は、始めに１０点を持ち、引数の型および戻り値の型が登録対象部品と既存部品Ｐとで一致するか否か、関数の名前および引数の名前の登録対象部品と既存部品Ｐとの間での類似度により減点法で採点を行う。例えば、引数の型、戻り値の型が異なれば、異なるごとに１点減点し、関数の名前および引数の名前の類似度が、予め定めた閾値よりも低ければ１点減点する。戻り値の型、関数の名前、引数の型、引数の名前の比較が終われば、その時点の点数を出力して終了する。
【０１４０】
変数類似度算出部８２は、始めに１０点を持ち、変数の型が登録対象部品と既存部品Ｐとで一致するか否か、変数の名前の登録対象部品と既存部品Ｐとの間での類似度により減点法で採点を行う。例えば、変数の型が異なれば、異なるごとに１点減点し、変数の名前の類似度が、予め定めた第１の閾値よりも低ければ１点減点し、第１の閾値より小さな第２の閾値よりも低ければ５点減点する。変数の型、変数の名前の比較が終われば、その時点の点数を出力して終了する。
【０１４１】
以上のような方法で類似度を算出することで、ソフトウェア部品間の類似度を求めることができる。
【０１４２】
なお、図１０に示したステップＳ７３４で、外部変数の値の書き換えの有無を解析してステップＳ７３５で外部変数リストに登録しておき、外部変数の類似度の算出に利用しても良い。
【０１４３】
なお、関数の名前および引数の名前の類似度や、変数の名前の類似度を算出するには、例えば、レーベンシュタイン距離を利用して文字列の類似度を算出すれば良い。
【０１４４】
レーベンシュタイン距離は編集距離とも称され、情報理論で、２つの文字列がどの程度異なっているかを示す数値であり、文字列を構成する文字の挿入や削除、入れ替えにより１つの文字列を他の文字列に変えるのに必要な手順の回数で定義される。
【０１４５】
このレーベンシュタイン距離を利用して文字列の類似度を算出する方法としては、レーベンシュタイン距離を利用することで２つの文字列がどの程度異なるかが数値として求まるので、基準値を定め、基準値からレーベンシュタイン距離を引いた値を文字列の類似度とする方法が考えられる。
【０１４６】
なお、以上の説明では、引数の型および戻り値の型、変数の型については、完全に一致していなければ減点の対象としたが、完全に一致でなくても型が互換性を有していれば類似していると見なし、減点する点数を小さくしても良い。
【０１４７】
例えば、上記の方法によって求めた類似度に対して閾値を定めておき、閾値より得られた類似度が大きい場合は０．５点を減点する方法が考えられる。なお、減点する点数は、０〜１点の間の数値とする。
【０１４８】
型が完全に一致していなくても類似に含めることができるため、型が継承関係にあり同様の機能を持つ場合を類似と判定することが可能になる。
【０１４９】
なお、最も単純に、関数の名前、引数の名前、変数の名前、引数の型、戻り値の型および変数の型について完全一致でなければ減点の対象とする方法を採っても良い。
【０１５０】
次に、以上説明したフローチャートで示した処理が完了した後の処理について説明する。まず、公開関数における類似度の算出について説明する。図１３の処理が完了しているため、登録対象部品のｉ１番目の公開関数ｐｘ（ｉ１）に対して、部品Ｐのｊ１番目の公開関数ｐｙ（ｊ１）との類似度の値が全て得られている。ここで、登録対象部品の公開関数の個数がｎ１であった場合、ｉ１は１からｎ１までの値をとる。同様に、部品Ｐの公開関数の個数がｍ１であった場合、ｊ１は１からｍ１の値をとる。
【０１５１】
ここで、ｐｘ（ｉ１）の関数ごとの類似度を類似度の大きい順にソートしておき、最も大きい類似度をｐｘ（ｉ１）が部品Ｐの公開関数との間で取りうる類似度の最大値として採用する。
【０１５２】
この類似度をＳｉｍＰＦ（ｉ１，Ｐ）とする。登録対象部品をＲとすると部品Ｐとの間の公開関数における類似度ＳｉｍＰＦ（Ｒ，Ｐ）は以下の数式（１）で求める。
【０１５３】
【数１】
0005323107.tif 000002
【０１５４】
次に、外部関数における類似度の算出について説明する。図１５の処理が完了しているため、登録対象部品のｉ１番目の外部関数ｅｘ（ｉ２）に対して、部品Ｐのｊ２番目の外部関数ｅｙ（ｊ２）との類似度の値が全て得られている。ここで、登録対象部品の外部関数の個数がｎ２であった場合、ｉ２は１からｎ２までの値をとる。同様に、部品Ｐの外部関数の個数がｍ２であった場合、ｊ２は１からｍ２の値をとる。
【０１５５】
ここで、ｅｘ（ｉ２）の関数ごとの類似度を類似度の大きい順にソートしておく。ｅｘ（ｉ２）の重複番号がｋであれば、類似度の大きい順からｋ番目の類似度の値を、関数ｅｘ（ｉ２）が部品Ｐの外部関数との間で取りうる類似度の最大値として採用する。これにより、例えば、登録対象部品がｐｒｉｎｔＡという外部関数をｎ箇所で呼び出しているとき、ｐｒｉｎｔＡを１箇所だけで呼び出している既存部品Ａよりも、ｎに近い回数呼び出している既存部品Ｂに高い類似度を与えることができる。なお、公開関数と同様に、重複番号を利用せずに最も大きい類似度をｐｘ（ｉ１）の類似度の最大値としてもよい。
【０１５６】
この類似度をＳｉｍＥＦ（ｉ２，Ｐ）とする。登録対象部品Ｒと部品Ｐの外部関数における類似度は以下の数式（２）で求める。
【０１５７】
【数２】
0005323107.tif 000003
【０１５８】
次に、公開変数における類似度の算出について説明する。図１４の処理が完了しているため、登録対象部品のｉ３番目の公開変数ｖｘ（ｉ３）に対して、部品Ｐのｊ３番目の公開変数ｖｘ（ｊ３）との類似度の値が全て得られている。ここで、登録対象部品の公開変数の個数がｎ３（ｎ３＞０）であった場合、ｉ３は１からｎ３までの値をとる。同様に、部品Ｐの公開変数の個数がｍ３（ｍ３＞０）であった場合、ｊ３は１からｍ３の値をとる。
【０１５９】
ここで、ｖｘ（ｉ３）の類似度として、ｍ３個の公開変数との類似度のうち、最大のものを、変数ｖｘ（ｉ３）が部品Ｐの公開変数との間で取りうる類似度の最大値として採用する。この類似度をＳｉｍＰＶ（ｉ３，  Ｐ）とする。このとき、登録対象部品Ｒと部品Ｐの公開変数における類似度は以下の数式（３）で求める。
【０１６０】
【数３】
0005323107.tif 000004
【０１６１】
これと同様に、登録対象部品Ｒと既存部品Ｐの外部変数における類似度ＳｉｍＥＶ（Ｒ，Ｐ）も求める。
【０１６２】
以上の説明を踏まえ、図１２に示したステップＳ６２５における、登録対象部品と既存部品Ｐとの類似度の算出する方法を説明する。
【０１６３】
登録対象部品Ｒと既存部品Ｐの類似度Ｓｉｍ（Ｒ，Ｐ）は以下の数式（４）で求める。
【０１６４】
【数４】
0005323107.tif 000005
【０１６５】
数式（４）では、公開関数、公開変数、外部関数、外部変数の類似度の和によって、類似度を求めているので、それぞれの類似度の値が大きければＳｉｍ（Ｒ，Ｐ）の値も大きくなる。
【０１６６】
なお、各変数、各関数に重み付けを行うことによって、公開関数、公開変数、外部関数、外部変数の類似度の最終的な部品間の類似度に寄与する割合を変化させても良い。
【０１６７】
＜Ａ−６．ソフトウェア部品−機能名称関連解析部の構成＞
図１７は、ソフトウェア部品−機能名称関連解析部３２の構成を示すブロック図である。ソフトウェア部品−機能名称関連解析部３２は、ソフトウェア部品機能名称抽出部４１と、機能名称判定入力部４２とを備えている。
【０１６８】
ソフトウェア部品機能名称抽出部４１は、ソフトウェア部品類似解析部３１（図４）から出力される類似ソフトウェア部品一覧３５に含まれる既存部品の部品ＩＤに関連付けられている機能名称を抽出し、機能名称候補一覧４３として出力する。
【０１６９】
機能名称判定入力部４２は、出力部１２を介して機能名称候補一覧４３を登録者に提示し、機能名称候補一覧４３に含まれる全ての機能名称について、登録対象部品の機能名称としての適否を入力部１１を介して受け付け、登録対象部品の機能名称として適切と判定された機能名称一覧を作成する。さらに、機能名称判定入力部４２では、登録対象部品の機能名称候補として提示したものの他に、適切な機能名称があれば入力部１１を介して機能名称の入力を受け付け、登録対象部品の機能名称一覧に追加することもできる。
【０１７０】
＜Ａ−７．ソフトウェア部品−機能名称関連解析部での解析処理＞
次に、図１８に示すフローチャートを用いて、ソフトウェア部品−機能名称関連解析部３２で登録対象部品の機能名称を解析する処理を説明する。
【０１７１】
ソフトウェア部品−機能名称関連解析部３２は、類似ソフトウェア部品一覧３５（図１７）に含まれる類似部品の類似部品ＩＤに関連付けられている機能名称の機能名称ＩＤをソフトウェア部品機能名称抽出部４１より抽出し、機能名称ＩＤリストを取得する（ステップＳ３２１）。
【０１７２】
ここで、機能名称ＩＤとは、機能名称がソフトウェア部品管理装置１に登録された順に付与する連番数字でも良いし、アルファベット、あるいは数字とアルファベットの組み合わせなどが挙げられる。また、機能名称をアルファベットで表現したものでも良い。例えば、選択機能であれば「ＳＥＮＴＡＫＵ１」などが考えられる。
【０１７３】
次に、機能名称ＩＤリストに含まれる機能名称ＩＤに対応する機能名称を要素とする機能名称候補一覧４３を作成する（ステップＳ３２２）。
【０１７４】
この機能名称候補一覧４３を登録者に出力部１２を介して提示する（ステップＳ３２３）。
【０１７５】
提示した機能名称候補一覧４３に含まれる機能名称について、登録対象部品の機能名称としての適否を入力部１１を介して受け付ける（ステップＳ３２４）。
【０１７６】
また、機能名称候補一覧の他に、登録対象部品の機能名称として適切な機能名称があれば、入力部１１より入力を受け付ける（ステップＳ３２５）。
【０１７７】
次に、登録対象部品の機能名称として適切と判定された機能名称の機能名称ＩＤの一覧を出力する（ステップＳ３２６）。
【０１７８】
＜Ａ−８．機能名称−ソフトウェア部品対応表更新部の構成および動作＞
次に、図１９および図２０を用いて機能名称−ソフトウェア部品対応表更新部３３の構成および更新動作について説明する。
【０１７９】
図１９は、機能名称−ソフトウェア部品対応表更新部３３の概略構成を示すブロック図である。
【０１８０】
機能名称−ソフトウェア部品対応表更新部３３では、ソフトウェア部品−機能名称関連解析部３２から出力された機能名称一覧３６と、ソフトウェア部品登録部１３（図１）で付与された登録対象部品の部品ＩＤ３４との組み合わせを、機能名称−ソフトウェア部品対応表２３として出力する。
【０１８１】
図２０は、機能名称−ソフトウェア部品対応表更新部３３の動作を説明するフローチャートである。
【０１８２】
機能名称−ソフトウェア部品対応表更新部３３は、登録対象部品の部品ＩＤ３４を取得し（ステップＳ３３１）、また、機能名称一覧３６を取得する（ステップＳ３３２）。
【０１８３】
その後、登録対象部品の部品ＩＤ３４と機能名称一覧３６との組み合わせを、機能名称−ソフトウェア部品対応表２３として関連情報データベース１７に保存する。
【０１８４】
＜Ａ−９．ソフトウェア部品検索の手順＞
以上説明した、ソフトウェア部品管理装置１におけるソフトウェア部品検索の手順について説明する。
【０１８５】
図２１は、ソフトウェア部品検索部１５の概略構成を示すブロック図である。ソフトウェア部品検索部１５は、入力部１１を介して機能名称１１１を受け付け、ソフトウェア部品管理装置１の関連情報データベース１７に機能名称−ソフトウェア部品対応表２３として登録されているソフトウェア部品のうち、入力された機能名称１１１に関連付けられている部品を抽出し、ソフトウェア部品一覧１１２として、出力部１２を介して出力する。
【０１８６】
図２２は、ソフトウェア部品検索部１５におけるソフトウェア部品の検索処理を示すフローチャートである。
【０１８７】
ソフトウェア部品検索部１５は、入力部１１を介して検索キーとなる機能名称を取得する（ステップＳ１５１）。
【０１８８】
次に、ソフトウェア部品管理装置１の関連情報データベース１７に登録されている機能名称−ソフトウェア部品対応表２３に問い合わせて、検索キーに対応するソフトウェア部品一覧１１２（図２１）を取得する（ステップＳ１５２）。そして、取得したソフトウェア部品一覧１１２を出力部１２を介して出力する。
【０１８９】
ソフトウェア部品検索部は、機能名称−ソフトウェア部品対応表２３の内容を参照して動作するため、ソフトウェア部品管理装置１に登録されているソフトウェア部品を入力として同じ機能名称を持つソフトウェア部品を検索しても良い。この場合のソフトウェア部品検索部１５の概略構成を図２３に示す。
【０１９０】
図２３において図２１と異なるのは、既存のソフトウェア部品２１を入力とする点である。
【０１９１】
図２４は、図２２に示すソフトウェア部品検索部１５での、ソフトウェア部品の検索処理を示すフローチャートである。
【０１９２】
ソフトウェア部品検索部１５は、入力部１１を介して検索キーとなるソフトウェア部品を取得する（ステップＳ１８１）。
【０１９３】
次に、ソフトウェア部品管理装置１の関連情報データベース１７に登録されている機能名称−ソフトウェア部品対応表２３に問い合わせて、検索キーに対応する機能名称一覧１１３を取得する（ステップＳ１８２）。そして、取得した機能名称一覧を出力部１２を介して出力する。
【０１９４】
そして、入力部１１を介して、機能名称一覧の機能名称ごとに検索に用いる機能名称の選択を受け付け、検索に不要と判定された機能名称を一覧から削除する（ステップＳ１８３）。
【０１９５】
次に、機能名称−ソフトウェア部品対応表２３に問い合わせて、機能名称一覧に含まれる機能名称ＩＤに関連付けのあるソフトウェア部品一覧１１２（図２３）を取得し（ステップＳ１８４）、取得したソフトウェア部品一覧１１２を出力部１２を介して出力する（ステップＳ１８５）。
【０１９６】
以上説明した実施の形態１のソフトウェア部品管理装置１によれば、ソフトウェア部品を登録する場合に、登録済みのソフトウェア部品に共通した機能名称を付加することができる。その結果、ソフトウェア部品を検索した際の検出漏れを少なくできるという効果を奏する。
【０１９７】
＜Ｂ．実施の形態２＞
実施の形態２に係るソフトウェア部品管理装置では、機能名称解析部１４におけるソフトウェア部品−機能名称関連解析部３２の入力となるデータの種類が増えているが、その他の構成は、実施の形態１のソフトウェア部品管理装置１と同じであるので、同一の構成については同一の符号を付し、重複する説明は省略する。
【０１９８】
＜Ｂ−１．ソフトウェア部品登録部の構成＞
図２５は、ソフトウェア部品登録部１３の概略構成を示すブロック図である。ソフトウェア部品登録部１３は、図３に示したソースコード格納部２２の他に、ドキュメント格納部９２と関連情報格納部９３とを備えている。
【０１９９】
ソフトウェア部品登録部１３は、登録対象部品２１の情報、ドキュメント３９の情報、ドキュメント３９に関連のある関連ドキュメント３７の情報、ドキュメントから抽出した機能名称群３８の情報を入力とし、登録対象部品２１、ドキュメント３９および機能名称群３８のそれぞれに対して、ソフトウェア部品管理装置１において一意に特定できる部品ＩＤ、ドキュメントＩＤおよび機能名称ＩＤを与える。
【０２００】
ソースコード格納部２２は、成果物データベース１６のソースコードデータベース２４にソースコードを格納する。ドキュメント格納部９２は、成果物データベース１６のドキュメントデータベース２５にドキュメント３９を登録する。
【０２０１】
また、関連情報格納部９３は、登録対象部品２１の部品ＩＤとドキュメント３９のドキュメントＩＤの組を、関連情報データベース１７の部品ＩＤドキュメント対応表２６に登録し、ドキュメント３９のドキュメントＩＤと関連ドキュメント３７のドキュメントＩＤの組を関連情報データベース１７のドキュメントＩＤ関連ドキュメントＩＤ対応表２７に登録し、ドキュメント３９のドキュメントＩＤと機能名称群３８に含まれる機能名称の機能名称ＩＤの関連情報を、関連情報データベース１７のドキュメントＩＤ機能名称ＩＤ対応表２８に登録する。
【０２０２】
＜Ｂ−２．機能名称解析部の構成＞
図２６は、機能名称解析部１４の概略構成を示すブロック図である。図２６に示すように、ソフトウェア部品−機能名称関連解析部３２には、登録対象部品の部品ＩＤ３４と、成果物データベース１６のドキュメントデータベース２５からの出力、関連情報データベース１７の部品ＩＤドキュメント対応表２６、ドキュメントＩＤ関連ドキュメントＩＤ対応表２７およびドキュメントＩＤ機能名称ＩＤ対応表２８の出力が与えられる構成となっている点で、図４に示した機能名称解析部１４とは異なっている。
【０２０３】
＜Ｂ−２−１．ソフトウェア部品−機能名称関連解析部の構成＞
図２７は、ソフトウェア部品−機能名称関連解析部３２の構成を示すブロック図である。ソフトウェア部品−機能名称関連解析部３２は、関連ドキュメント抽出部５１、ドキュメント機能名称抽出部５２および機能名称判定入力部５３を備えている。
【０２０４】
関連ドキュメント抽出部５１は、登録対象部品の部品ＩＤ３４、類似ソフトウェア部品一覧３５、成果物データベース１６のドキュメントデータベース２５の出力、関連情報データベース１７の部品ＩＤドキュメント対応表２６、ドキュメントＩＤ関連ドキュメントＩＤ対応表２７およびドキュメントＩＤ機能名称ＩＤ対応表２８の出力を受け、登録対象部品の部品ＩＤ３４と類似ソフトウェア部品一覧３５に含まれる既存部品の部品ＩＤに関連付けたドキュメントを抽出し、ドキュメント一覧４４を作成する。
【０２０５】
ドキュメント機能名称抽出部５２は、関連ドキュメント抽出部５１が出力するドキュメント一覧４４に含まれているドキュメントに関連付けられている機能名称を機能名称候補一覧４３として出力する。
【０２０６】
機能名称判定入力部５３は、出力部１２を介して機能名称候補一覧４３を登録者に提示し、機能名称候補一覧４３に含まれる全ての機能名称について、登録対象部品の機能名称としての適否を入力部１１を介して受け付け、登録対象部品の機能名称として適切と判定された機能名称一覧３６を出力する。
【０２０７】
ここで、ドキュメントとは、ソフトウェア部品の機能に関して記述されている文書を指し、例えば、ソフトウェア部品の仕様を記述した、外部仕様書や詳細仕様書などの仕様書が挙げられる。実施の形態２では、機能に関して記述されているドキュメントから抽出した機能名称をソフトウェア部品を登録する際の機能名称に利用するものである。
【０２０８】
ドキュメントから機能名称を抽出するには、ドキュメントの冒頭部に機能に関するキーワードが羅列されているなどの構造化された文書を使用することが前提となる。
【０２０９】
また、関連ドキュメント抽出部５１で抽出する既存部品の部品ＩＤに関連付けられているドキュメントとは、例えば、既存部品Ａを例に採れば、以下のようなドキュメントとなる。
【０２１０】
（１）ソフトウェア部品登録部１３で部品Ａと同時に登録されたドキュメントＢ。実施の形態２では、部品の登録時に、ソフトウェア部品の機能について書かれたドキュメントを同時に登録するので、そのドキュメントが既存部品の部品ＩＤに関連付けられているドキュメントとなる。
【０２１１】
（２）ソフトウェア部品登録部１３でドキュメントＢと同時に登録されたドキュメントＣ。実施の形態２では、関連情報データベース１７のドキュメントＩＤ関連ドキュメントＩＤ対応表２７で、ドキュメントツリーを保持しており、部品Ａと同時に登録されたドキュメントＢだけでなく、ドキュメントＢの上位文書（ドキュメントＣ）も部品Ａに関連のあるドキュメントとして抽出する。従って、これらのドキュメントが既存部品の部品ＩＤに関連付けられているドキュメントとなる。
【０２１２】
＜Ｂ−２−２．ソフトウェア部品−機能名称関連解析部での処理＞
次に、図２８に示すフローチャートを用いて、ソフトウェア部品−機能名称関連解析部３２での登録対象部品の機能名称の解析処理について説明する。
【０２１３】
ソフトウェア部品−機能名称関連解析部３２は、関連ドキュメント抽出部５１を利用して、部品ＩＤドキュメント対応表２６、関連情報データベース１７のドキュメントＩＤ関連ドキュメントＩＤ対応表２７などから取得し、登録対象部品の部品ＩＤ３４にドキュメントを関連付けたドキュメント一覧４４を取得する（ステップＳ３４１）。
【０２１４】
次に、関連ドキュメント抽出部５１をさらに利用して、ステップＳ３４１で取得したドキュメント一覧４４に含まれる、ドキュメントに関連付けられたドキュメントを、成果物データベース１６のドキュメントデータベース２５から順次取得し、ドキュメントＩＤリストを作成する（ステップＳ３４２）。
【０２１５】
次に、ドキュメント機能名称抽出部５２を用いて、ドキュメントＩＤリストに含まれる全てのドキュメントに、関連情報データベース１７のドキュメントＩＤ機能名称ＩＤ対応表２８より取得した機能名称ＩＤを関連付けて機能名称候補一覧４３を作成する（ステップＳ３４３）。
【０２１６】
機能名称判定入力部５３は、出力部１２を介して機能名称候補一覧４３を登録者に提示する（ステップＳ３４４）。そして、提示した機能名称候補一覧４３に含まれる機能名称について、登録対象部品の機能名称としての適否を入力部１１を介して受け付ける（ステップＳ３４５）。そして、登録対象部品の機能名称として適切と判定された機能名称について機能名称一覧３６を出力する（ステップＳ３４６）。
【０２１７】
以上説明した実施の形態２のソフトウェア部品管理装置１によれば、ドキュメント体系を辿って機能名称を抽出することができ、関連ドキュメントも機能名称の抽出元に含めるため、さらに広い範囲から機能名称を抽出することが可能となる。
【符号の説明】
【０２１８】
１４  機能名称解析部、１５  ソフトウェア部品検索部、２１  登録対象部品、３１  ソフトウェア部品類似解析部、３２  ソフトウェア部品-機能名称関連解析部、３７  関連ドキュメント、３８  機能名称群、３９  ドキュメント、６２  類似度算出部、８１  関数類似度算出部、８２  変数類似度算出部。
【図１】
0005323107.tif 000006
【図２】
0005323107.tif 000007
【図３】
0005323107.tif 000008
【図４】
0005323107.tif 000009
【図５】
0005323107.tif 000010
【図６】
0005323107.tif 000011
【図７】
0005323107.tif 000012
【図８】
0005323107.tif 000013
【図９】
0005323107.tif 000014
【図１０】
0005323107.tif 000015
【図１１】
0005323107.tif 000016
【図１２】
0005323107.tif 000017
【図１３】
0005323107.tif 000018
【図１４】
0005323107.tif 000019
【図１５】
0005323107.tif 000020
【図１６】
0005323107.tif 000021
【図１７】
0005323107.tif 000022
【図１８】
0005323107.tif 000023
【図１９】
0005323107.tif 000024
【図２０】
0005323107.tif 000025
【図２１】
0005323107.tif 000026
【図２２】
0005323107.tif 000027
【図２３】
0005323107.tif 000028
【図２４】
0005323107.tif 000029
【図２５】
0005323107.tif 000030
【図２６】
0005323107.tif 000031
【図２７】
0005323107.tif 000032
【図２８】
0005323107.tif 000033