(57)【要約】【課題】コンポーネントを用いたプログラム開発において、コンポーネントを利用するための修正コストも考慮した開発全体の効率を向上できるコンポーネントを検索する。【解決手段】上記課題を解決するために、既存のプログラムにおけるコンポーネントの利用の有無を調査するコンポーネント利用調査部と、前記プログラムにおけるコンポーネントの利用形態を判定し適合度を算出する利用形態判定部と、前記プログラムの適用分野と前記適合度を合わせて記録する利用情報リポジトリと、前記適合度を用いて有用なコンポーネントを検索する検索部を具備することを特徴とするコンポーネント検索装置によって、コンポーネントの適合度に着目し、利用のコストも考慮して有用なコンポーネントを検索できるようにする。【選択図】  図１
2004252512.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの部品であるコンポーネントをコンポーネントリポジトリとして記憶し、前記プログラムのモデル情報を読み込み、前記プログラムへの当該コンポーネントの利用の有無を記憶し、適合度を算出するために前記プログラムに含まれる前記コンポーネントの利用形態を判定し、前記プログラムの適用分野と前記適合度を対応付けて利用情報リポジトリとして記憶し、前記適合度を用いて前記蓄積されたコンポーネントを検索することを特徴とするプログラムコンポーネント検索方法。
【請求項２】
請求項１記載のコンポーネント検索方法において、コンポーネントの利用形態毎の利用回数を記録する前記利用情報リポジトリと、前記利用回数を用いて有用なコンポーネントを検索することを特徴とするプログラムコンポーネント検索方法。
【請求項３】
請求項１記載のコンポーネント検索方法において、ソースコードまたはオブジェクトコードとして存在するプログラムを読み込むことによりモデル情報を取得することを特徴とするプログラムコンポーネント検索方法。
【請求項４】
プログラムの部品であるコンポーネントを蓄積するコンポーネントリポジトリと、前記プログラムのモデル情報を読込むプログラム読込み手段と、前記プログラムへの当該コンポーネントの利用の有無を調査するコンポーネント利用調査手段と、適合度を算出するために前記プログラムに含まれる前記コンポーネントの利用形態を判定する利用形態判定手段と、前記プログラムの適用分野と前記適合度を合わせて記録する利用情報リポジトリと、前記適合度を用いて前記蓄積されたコンポーネントを検索する検索手段とを備えたことを特徴とするプログラムコンポーネント検索検索装置。
【請求項５】
請求項４記載のコンポーネント検索装置において、コンポーネントの利用形態毎の利用回数を記録する前記利用情報リポジトリと、前記利用回数を用いてコンポーネントを検索する手段を備えたことを特徴とするプログラムコンポーネント検索装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムの部品である複数のコンポーネントから使用するコンポーネントを検索する技術に関し、特に適合度を利用することによりコンポーネントの選択を容易にするコンポーネント検索技術に関する。
【０００２】
【従来の技術】
プログラム開発の効率を向上するためには、コンポーネントを利用することで、新規開発部分を削減する手法が有効である。しかし、コンポーネントが数多く存在する場合は、開発するプログラムに利用可能なコンポーネントを発見することが困難になるため、検索装置が必要になる。
【０００３】
従来は、特開平６−３４８４７１号に開示されているような、コンポーネントに付属するドキュメントや、コンポーネントの適用分野・出現頻度によって有用なコンポーネントを検索するような技術が利用されていた。
【０００４】
【特許文献１】
特開平６−３４８４７１号
【０００５】
【発明が解決しようとする課題】
上記従来技術は、コンポーネントを利用する際に、開発対象のプログラムにコンポーネントを適合させるための修正が必要となる場合について配慮がされておらず、修正作業も含めた開発全体の効率を向上するために有用なコンポーネントを検索できないという問題があった。
【０００６】
本発明の目的は、プログラム開発の効率を向上するために有用なコンポーネントを検索するプログラムコンポーネント検索方法および装置を提供することにある。
【０００７】
【課題を解決するための手段】
本発明は、以下の処理を行い、前記課題を改善する。プログラムの部品であるコンポーネントをコンポーネントリポジトリとして記憶しておく。前記プログラムのモデル情報を読み込み、前記プログラムへの当該コンポーネントの利用の有無を記憶しておく、さらに、適合度を算出するために前記プログラムに含まれる前記コンポーネントの利用形態を判定し、前記プログラムの適用分野と前記適合度を対応付けて利用情報リポジトリとして記憶しておく。前記適合度を用いて前記蓄積されたコンポーネントを検索する。以上により、プログラム開発の効率を向上するために有用なコンポーネントを検索することが可能となる。
【０００８】
【発明の実施の形態】
本発明の原理を以下説明する。
【０００９】
オブジェクト指向コンポーネントは、継承の有無と、利用元からの利用方法により、利用形態を、追加コーディングが無い形態  （以後利用形態１と呼ぶ）、追加コーディングがあるがインタフェースの変更が無い形態  （以後利用形態２と呼ぶ）、および追加コーディングがありインタフェースも変更する形態  （以後利用形態３と呼ぶ）  の３つに分類することができる。
【００１０】
利用形態１を図１０、利用形態２を図１１、利用形態３を図１２を用いて説明する。ここで、オリジナルコンポーネント１００１、１１０１、１２０１はコンポーネントリポジトリに登録されているコンポーネント、特化コンポーネント１１０２、１２０２はオリジナルコンポーネントを利用する際に修正を加えて作成したコンポーネント、利用元１０００、１１００、１２００はこれらのコンポーネントの呼出し元である。利用形態１では、利用元１０００はオリジナルコンポーネント１００１をそのまま利用する。そのため修正作業は発生しない。オリジナルコンポーネント１００１は開発対象のプログラムに対して高い適合度を持っている。利用形態２では、開発者はオリジナルコンポーネント１１０１を継承して特化コンポーネント１１０２を作成するが、利用元１１００からはオリジナルコンポーネント１１０１として利用し、ポリモーフィズムにより動的に特化コンポーネント１１０２の操作を呼出す。特化コンポーネントを作成するための修正作業が発生するが、オリジナルコンポーネント１１０１が持つインタフェースは修正しない。オリジナルコンポーネント１１０１の開発対象のプログラムに対する適合度は利用形態１よりも低い。利用形態３では、開発者はオリジナルコンポーネント１２０１を継承して特化コンポーネント１２０２を作成し、利用元１２００は特化コンポーネント１２０２の操作を直接呼出す。利用形態２の修正作業に加えて、インタフェースにも変更が及ぶ。オリジナルコンポーネント１２０１の開発対象のプログラムに対する適合度は利用形態２よりもさらに低い。
【００１１】
以上の３つの利用形態における適合度の違いをコンポーネントの有用性の判断基準に用いることによって、上記課題を解決する。
【００１２】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【００１３】
図１は、本発明における一実施形態であるコンポーネント検索装置の構成図である。コンポーネント検索装置１００は、本発明を適用した装置である。プログラム読込み部１１０は、プログラム１３０を入力として受取り、コンポーネント検索装置１００の動作に必要な情報を取得するプログラムである。コンポーネント利用調査部１１１は、コンポーネントリポジトリ１２０に登録されているコンポーネントが、プログラム１３０で利用されているかどうかを検出するプログラムである。利用形態判定部１１２は、コンポーネントがプログラム１３０で利用されている場合に、どのような利用形態で利用されているかを判定するプログラムである。検索部１１３は、コンポーネントリポジトリ１２０から、与えられた条件に合致するコンポーネントを検索するプログラムである。コンポーネントリポジトリは１２０は、コンポーネントが蓄積されているリポジトリである。利用情報リポジトリ１２１は、コンポーネントの利用のされ方に関する情報を蓄積するリポジトリである。プログラム１３０は、コンポーネントの利用情報の調査対象となるプログラムである。更新操作端末１３１は、コンポーネント検索装置１００の利用者が、利用情報の更新操作を指示するための端末である。検索操作端末１３２は、コンポーネント検索装置１００の利用者が、コンポーネントの検索操作を指示するための端末である。
【００１４】
図２は、コンポーネントリポジトリ１２０の構成図である。コンポーネント  ＩＤ２００は、コンポーネントを一意に識別する  ＩＤ  である。実行インタフェース２１０は、コンポーネントの構成要素のうち、外部から利用する際に使用するインタフェースである。構成クラス２１１は、コンポーネントの構成要素のうち、コンポーネントが内部で使用して、外部からは直接利用しないクラスである。
【００１５】
図３は、利用情報リポジトリ１２１の構成図である。コンポーネント  ＩＤ３００は、コンポーネントを一意に識別する  ＩＤ  である。適用分野３１０は、コンポーネントが使用されたプログラム１３０が適用されている分野である。利用形態１  ３１１、利用形態２  ３１２、および利用形態３  ３１３は、それぞれ利用形態１、２、および３でコンポーネントが利用されているプログラムの数である。ここで、利用形態１は追加コーディングが無い形態、利用形態２は追加コーディングがあるがインタフェースの変更が無い形態、利用形態３は追加コーディングがありインタフェースも変更する形態である。合計数３１４は、利用形態１  ３１１、利用形態２  ３１２、および利用形態３  ３１３の合計である。適合度３１５は、適用分野３１０に対するコンポーネントの適合度である。重み１  ３２０、重み２  ３２１、および重み３  ３２２は、それぞれ利用形態１  ３１１、利用形態２  ３１２、および利用形態３  ３１３から適合度３１５を算出するための重みである。
【００１６】
図４は、更新操作端末１３１の画面例である。プログラム指定４００は、コンポーネントの利用情報を調査する対象のプログラム１３０を指定する入力領域である。適用分野４０１は、プログラム指定４００が指定するプログラム１３０が適用されている適用分野を複数の項目から選択する選択肢である。更新開始ボタン４１０は、利用情報の更新動作の開始を指示するボタンである。
【００１７】
図５は、検索操作端末１３２の画面例である。適用分野５００は、検索するコンポーネントの適用分野を複数の項目から選択する選択肢である。検索方法５０１は検索方法を選択する選択肢である。検索開始ボタン５１０は、コンポーネントの検索動作の開始を指示するボタンである。
【００１８】
次に、本装置の動作の概要を示す。前提として、コンポーネントリポジトリ１２０は、あらかじめコンポーネントが蓄積された状態であるとする。蓄積する手段や装置は、コンポーネントリポジトリ１２０に対してコンポーネントを蓄積できるものであれば、特に制約は無い。
【００１９】
利用者が更新操作端末１３１により更新動作を開始した場合のコンポーネント検索装置１００の動作を、図６を用いて説明する。コンポーネント検索装置１００は、まず、プログラム１３０を読込む（６００）。次に、コンポーネントリポジトリ１２０に蓄積されているコンポーネントが、読込んだプログラム１３０で利用されているかを調査する（６０１）。次に、利用されているコンポーネントについて利用形態の判定を行う（６０２）。次に、利用情報リポジトリ１２１を更新する（６０３）。
【００２０】
利用者が検索操作端末１３２により検索動作を開始した場合コンポーネント検索装置１００の動作を、図９を用いて説明する。コンポーネント検索装置１００は、まず、利用者が指定した検索条件に従って利用情報リポジトリ１２１を検索する（９００）。次に、検索条件に該当したコンポーネントを利用者に提示する（９０１）。
【００２１】
まず、利用情報更新動作の詳細を以下で説明する。
【００２２】
利用者が、図４の画面において、プログラム指定４００に調査対象のプログラムを入力し、適用分野４０１を選択して、更新開始ボタン４１０を押すと、コンポーネント検索装置１００は、利用情報更新動作を開始する。
【００２３】
まず、プログラム読込み部１１０が、プログラム指定４００で指定された既存プログラム１３０を読込む。プログラム１３０の形式は、ここではクラス図のモデル情報とするが、プログラム１３０にモデル情報を取得するための解析機能を付加して、ソースコード、オブジェクトコード等を読込み可能にしてもよい。また、オブジェクト指向のプログラムのモデル情報の形式には、ＵＭＬ  （Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）  のメタモデル等、様々なものがあるが、本発明では、オブジェクト指向の基本要素である、クラス、インタフェース、継承、関連、および依存を表現でるものであれば任意の形式を用いてよい。
【００２４】
次に、コンポーネント利用調査部１１１が、コンポーネントリポジトリ１２０に蓄積されたコンポーネントが該プログラムで利用されているかどうかを調査する。コンポーネント利用調査部１１１の動作を、図７を用いて説明する。まず、コンポーネントリポジトリ１２０に蓄積されているコンポーネントの中で、利用されているかどうかが未チェックのものを探す（７００）。無ければ終了する。次に、コンポーネントリポジトリから１つコンポーネントを取得する（７０１）。次に、該プログラムで該コンポーネントが利用されているかどうかを判定する（７０２）。利用されている場合は、利用形態判定部１１２の動作に用いるために、利用個所を特定する（７０３）。以上の動作を繰り返す。
【００２５】
次に、利用形態判定部１１２が、該プログラムで利用されていたコンポーネントの利用形態を判定する。利用形態判定部１１２の動作を、図８を用いて説明する。まず、コンポーネント利用調査部１１１が利用個所を特定したコンポーネントの中で、利用情報の更新を行っていないものを探す（８００）。無ければ終了する。次に、コンポーネント中のクラスのサブクラスが存在するかどうかを判定する（８０１）。無ければ利用形態１として判定する（８０５）。サブクラスが存在する場合は、コンポーネント外からポリモーフィズムを用いずに直接該サブクラスを利用しているかどうかを判定する。直接利用している部分が１個所でも存在すれば利用形態３、全く存在しなければ利用形態２として判定する（８０３、８０４）。次に、以下の手順で利用情報リポジトリ１２１を更新する（８０６）。該コンポーネントのコンポーネント  ＩＤ２００に一致する  コンポーネント  ＩＤ３００を検索する。無ければ作成する。該プログラムの適用分野４０１に一致する適用分野３１０を検索する。無ければ利用形態１  ３１１、利用形態２  ３１２、および利用形態３  ３１３の初期値を０として該適用分野の行を作成する。判定した利用形態の値を１増加させる。合計数３１４を算出する。適合度３１５を、利用形態１  ３１１、利用形態２  ３１２、および利用形態３  ３１３に対してそれぞれ重み１  ３２０、重み２  ３２１、および重み３  ３２２を掛けた値の総和として算出する。図３の例では、コンポーネントＡ  は、金融分野のプログラムにおいて、これまでに利用形態１で３０個、利用形態２で２０個、利用形態３で１０個の合計６０個のプログラムで利用されており、金融分野への適合度が４１０と算出されている。
【００２６】
なお、あるクラスを直接利用しているかどうかは、他クラスを始点とし、該クラスを終点とする関連または依存（ただしインスタンスの生成に関する依存を除く）が存在するかどうかで判定する。以上の基準で利用形態を判定することにより、利用形態１は追加コーディングが無い形態、利用形態２は追加コーディングがあるがインタフェースの変更が無い形態、利用形態３は追加コーディングがありインタフェースも変更する形態となる。後のものほどコンポーネントの利用コストが大きいので、適合度３１５の算出に用いる重みを小さくする。本実施形態では重み１  ３２０を１０、重み２  ３２１を５、重み３  ３２２を１としたが、この値は変更してよい。
【００２７】
本実施形態では、プログラム１３０ごとに利用形態の値を増加させたが、１つのプログラム１３０の中にコンポーネントを利用している個所が複数存在する場合に、個々の利用個所ごとに利用形態の値を増加させてもよい。この場合は、出現頻度が適合度３１５に与える影響が大きくなる。
【００２８】
次に、コンポーネント検索動作の詳細を以下で説明する。
【００２９】
利用者が、図５の画面において、適用分野５００を選択し、検索方法５０１を選択し、検索開始ボタン５１０を押すと、コンポーネント検索装置１００は、コンポーネント検索動作を開始する。本実施形態では「適合度の高いコンポーネント」と「利用回数に対して適合度が低いコンポーネント」の２つの検索方法を示すが、利用情報リポジトリの情報を用いた任意の検索を実行できるようにしても良い。
【００３０】
検索部１１３が検索動作を実行する。検索動作１１３の動作を、図９を用いて説明する。まず、検索方法５０１に従って利用情報リポジトリ１２１を検索する。適用分野３１０が、適用分野５００で選択したものと一致する行に着目し、検索方法５０１で「適合度の高いコンポーネント」を選択した場合は、適合度３１５が大きいもの、「利用回数に対して適合度が低いコンポーネント」を選択した場合は、合計数３１４が着目した行の平均値以上で、かつ適合度３１５を合計数３１４で割った値が小さいものを順に選択し、そのコンポーネント  ＩＤ３００を検索結果とする（９００）。次に、検索で該当したコンポーネント  ＩＤ３００に一致するコンポーネント  ＩＤ２００のコンポーネントをコンポーネントリポジトリ１２０より取得して、利用者に提示する（９０１）。
【００３１】
適用分野５００で金融を選択し、検索方法５０１で「適合度の高いコンポーネント」を選択した場合の検索結果の例を図１３を用いて説明する。検索結果１３００として、コンポーネントリポジトリ１２０から前記検索動作により抽出したコンポーネント  ＩＤ２００を、コンポーネント  ＩＤ１３１０に、金融分野における適合度１３１１の大きい順に整列して提示している。利用者は、コンポーネントリポジトリ１２０に蓄積されている多くのコンポーネントの中から、適合度が高く利用コストの小さい利用形態１で利用できることが期待できるコンポーネント  Ｈ  を取得することができる。
【００３２】
以上の動作により、検索方法５０１で「適合度の高いコンポーネント」を選択した場合は、適用分野５００で選択した適用分野に適用するプログラムの開発の効率を向上するために有用なコンポーネントが提示される。これにより、プログラムの開発者は、本装置を用いることで、開発対象のプログラムに適したコンポーネントを探すことができる。
【００３３】
また、検索方法５０１で「利用回数に対して適合度が低いコンポーネント」を選択した場合は、広く利用されているが利用コストがかかるコンポーネントが提示されるので、該コンポーネントを集中的に改良して利用コストを下げることで、効果的にプログラム開発全体の効率を向上することができる。これにより、プログラムの開発者の中で、コンポーネントの開発を担当する者が本装置を用いることで、改良するべきコンポーネントを探すことができる。
【００３４】
【発明の効果】
本発明によれば、プログラムの開発者は、コンポーネントを利用するために必要な開発コストも考慮した、開発の効率を向上するために有用なコンポーネントを検索することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態であるコンポーネント検索装置１００の全体構成図である。
【図２】図１のコンポーネントリポジトリ１２０の構成図である。
【図３】図１の利用情報リポジトリ１２１の構成図である。
【図４】図１の更新操作端末１３１の画面例である。
【図５】図１の検索操作端末１３２の画面例である。
【図６】コンポーネント検索装置１００の利用情報更新動作の概要を表す図である。
【図７】コンポーネント利用調査部１１１の動作を表す図である。
【図８】利用形態判定部１１２の動作を表す図である。
【図９】検索部１１３の動作を表す図である。
【図１０】利用形態１の概念図である。
【図１１】利用形態２の概念図である。
【図１２】利用形態３の概念図である。
【図１３】検索結果の例である。
【符号の説明】
１００  コンポーネント検索装置
１１０  プログラム読込み部
１１１  コンポーネント利用調査部
１１２  利用形態判定部
１１３  検索部
１２０  コンポーネントリポジトリ
１２１  利用情報リポジトリ
１３０  プログラム
１３１  更新操作端末
１３２  検索操作端末
【図１】
2004252512.tif 000003
【図２】
2004252512.tif 000004
【図３】
2004252512.tif 000005
【図４】
2004252512.tif 000006
【図５】
2004252512.tif 000007
【図６】
2004252512.tif 000008
【図７】
2004252512.tif 000009
【図８】
2004252512.tif 000010
【図９】
2004252512.tif 000011
【図１０】
2004252512.tif 000012
【図１１】
2004252512.tif 000013
【図１２】
2004252512.tif 000014
【図１３】
2004252512.tif 000015