(57)【要約】【課題】複数のソフトウェア部品を組み合わせてアプリケーションを生成する際に、ソフトウェア部品の接続の可否を迅速かつ高精度で調査する。【解決手段】複数のソフトウェア部品の入力および出力が定められている値域を要素とする集合を格納したソフトウェア部品リポジトリ３０３と、ソフトウェア部品の出力値域集合の和集合と、入力値域と、前記ソフトウェア部品の識別子とを管理する高階グラフを含む値域集合高階グラフデータベース３０１と、高階グラフから抽出するソフトウェア部品の値域を受け付けて、受け付けた値域に基づいて、前記値域を出力とするソフトウェア部品の並列の組み合わせ、またはひとつを高階グラフの出力値域集合の和集合から検索するコンポ組合せ検索機能２３０３とを備える。【選択図】図１
2007304685.tif 000002
【特許請求の範囲】
【請求項１】
予め設定された複数のソフトウェア部品の中から、入力された条件に適合するソフトウェア部品を検索するソフトウェア部品の検索システムにおいて、
複数のソフトウェア部品の入力および出力が定められている値域を要素とする集合を格納したソフトウェア部品格納部と、
前記ソフトウェア部品の出力値域集合の和集合と、入力値域と、前記ソフトウェア部品の識別子とを管理する高階グラフと、
前記高階グラフから抽出するソフトウェア部品の値域を受け付ける検索条件受付部と、
前記受け付けた値域に基づいて、前記受け付けた値域を出力とするソフトウェア部品の並列の組み合わせ、またはひとつを前記高階グラフの出力値域集合の和集合から検索する検索部と、
を備えたことを特徴とするソフトウェア部品の検索システム。
【請求項２】
前記検索条件受付部は、検索を行うソフトウェア部品の出力値域と入力値域を受け付けて、
前記検索部は、前記高階グラフの出力値域集合の和集合のうち前記受け付けた出力値域を含むソフトウェア部品の入力値域が、前記受け付けた入力値域を含むソフトウェア部品を検索することを特徴とする請求項１に記載のソフトウェア部品の検索システム。
【請求項３】
前記検索部は、前記高階グラフの出力値域集合の和集合のうち前記受け付けた出力値域を含むソフトウェア部品の入力値域が、前記受け付けた入力値域となるまで連鎖的に検索を行うことを特徴とする請求項１に記載のソフトウェア部品の検索システム。
【請求項４】
前記検索部の検索結果から、遺伝的アルゴリズムを用いてアプリケーションを生成するアプリケーション生成部をさらに備え、
前記アプリケーション生成部は、
前記ソフトウェア部品をランダムに選択してアプリケーションを複数生成して解候補の集合に設定する初期化部と、
前記解候補の集合のアプリケーションについて評価を行う評価部と、
前記評価の結果に基づいて前記複数のアプリケーションから一つを選択する選択部と、
前記選択したアプリケーションの一部を他のソフトウェア部品に交換し、次の世代のアプリケーションの集合を生成する交叉部と、
前記選択したアプリケーションの一部をランダムに選択した他のソフトウェア部品に交換し、新たなアプリケーションの集合を生成する変異部と、を有し、
前記初期化部は、
前記検索条件受付部に予め設定した入力値域と、出力値域を入力し、前記検索部で検索されたソフトウェア部品を組み合わせて、前記アプリケーションを複数生成することを特徴とする請求項１ないし請求項３のいずれかひとつに記載のソフトウェア部品の検索システム。
【請求項５】
前記変異部は、
前記選択したアプリケーションの一部のソフトウェア部品を部分的に除去し、前記除去した部分の入力と出力を値域として前記検索条件受付部に入力し、前記検索部で検索されたソフトウェア部品を前記除去した部分へ挿入することを特徴とする請求項４に記載のソフトウェア部品の検索システム。
【請求項６】
前記交叉部は、
前記選択したアプリケーションの一部のソフトウェア部品を部分的に除去し、前記解候補から他のアプリケーションを選択し、前記除去した部分に前記選択した他のアプリケーションのソフトウェア部品を挿入することを特徴とする請求項４に記載のソフトウェア部品の検索システム。
【請求項７】
予め設定された複数のソフトウェア部品の中から、入力された条件に適合するソフトウェア部品を検索する処理を計算機に実行させるソフトウェア部品の検索プログラムにおいて、
複数のソフトウェア部品の入力および出力が定められている値域を要素とする集合をソフトウェア部品格納部へ格納する手順と、
前記ソフトウェア部品の出力値域集合の和集合と、入力値域と、前記ソフトウェア部品の識別子とを管理する高階グラフを設定する手順と、
前記高階グラフから抽出するソフトウェア部品の値域を受け付ける手順と、
前記受け付けた値域に基づいて、前記受け付けた値域を出力とするソフトウェア部品の並列の組み合わせ、またはひとつを前記高階グラフの出力値域集合の和集合から検索する手順と、
を前記計算機に実行させることを特徴とするソフトウェア部品の検索プログラム。
【請求項８】
前記値域を受け付ける手順は、検索を行うソフトウェア部品の出力値域と入力値域を受け付けて、
前記検索する手順は、前記高階グラフの出力値域集合の和集合のうち前記受け付けた出力値域を含むソフトウェア部品の入力値域が、前記受け付けた入力値域を含むソフトウェア部品を検索することを特徴とする請求項７に記載のソフトウェア部品の検索プログラム。
【請求項９】
前記検索する手順は、前記高階グラフの出力値域集合の和集合のうち前記受け付けた出力値域を含むソフトウェア部品の入力値域が、前記受け付けた入力値域となるまで連鎖的に検索を行うことを特徴とする請求項７に記載のソフトウェア部品の検索プログラム。
【請求項１０】
前記検索結果から、遺伝的アルゴリズムを用いてアプリケーションを生成する手順をさらに含み、
前記アプリケーションを生成する手順は、
前記ソフトウェア部品をランダムに選択してアプリケーションを複数生成して解候補の集合に設定して前記解集合の初期化を行う手順と、
前記解候補の集合のアプリケーションについて評価を行う手順と、
前記評価の結果に基づいて前記複数のアプリケーションから一つを選択する手順と、
前記選択したアプリケーションの一部を他のソフトウェア部品に交換し、次の世代のアプリケーションの集合を生成する手順と、
前記選択したアプリケーションの一部をランダムに選択した他のソフトウェア部品に交換し、前記解候補の集合を更新する手順と、を含み、
前記初期化を行う手順は、
前記予め設定した入力値域と、出力値域を値域として受け付けて、前記検索する手順で検索されたソフトウェア部品を組み合わせて、前記アプリケーションを複数生成することを特徴とする請求項７ないし請求項９のいずれかひとつに記載のソフトウェア部品の検索プログラム。
【請求項１１】
前記前記解候補の集合を更新する手順は、
前記選択したアプリケーションの一部のソフトウェア部品を部分的に除去する手順と、
前記除去した部分の入力と出力を値域として前記検索する手順で検索されたソフトウェア部品を前記除去した部分へ挿入する手順と、
を含むことを特徴とする請求項１０に記載のソフトウェア部品の検索プログラム。
【請求項１２】
前記次の世代のアプリケーションの集合を生成する手順は、
前記選択したアプリケーションの一部のソフトウェア部品を部分的に除去する手順と、
前記解候補から他のアプリケーションを選択し、前記除去した部分に前記選択した他のアプリケーションのソフトウェア部品を挿入する手順と、
を含むことを特徴とする請求項１０に記載のソフトウェア部品の検索プログラム。
【請求項１３】
クライアント計算機に接続されたサーバが、予め設定された複数のソフトウェア部品の中から、前記クライアント計算機から入力された条件に適合するソフトウェア部品を検索する計算機システムにおいて、
前記サーバは、
複数のソフトウェア部品の入力および出力が定められている値域を要素とする集合を格納したソフトウェア部品格納部と、
前記ソフトウェア部品の出力値域集合の和集合と、入力値域と、前記ソフトウェア部品の識別子とを管理する高階グラフと、
前記高階グラフから抽出するソフトウェア部品の値域を前記クライアント計算機から受け付ける検索条件受付部と、
前記受け付けた値域に基づいて、前記受け付けた値域を出力とするソフトウェア部品の並列の組み合わせ、またはひとつを前記高階グラフの出力値域集合の和集合から検索する検索部と、
を備えたことを特徴とする計算機システム。
【請求項１４】
前記サーバは、前記検索部の検索結果から、遺伝的アルゴリズムを用いてアプリケーションを生成するアプリケーション生成部をさらに備え、
前記アプリケーション生成部は、
前記ソフトウェア部品をランダムに選択してアプリケーションを複数生成して解候補の集合に設定する初期化部と、
前記解候補の集合のアプリケーションについて評価を行う評価部と、
前記評価の結果に基づいて前記複数のアプリケーションから一つを選択する選択部と、
前記選択したアプリケーションの一部を他のソフトウェア部品に交換し、次の世代のアプリケーションの集合を生成する交叉部と、
前記選択したアプリケーションの一部をランダムに選択した他のソフトウェア部品に交換し、新たなアプリケーションの集合を生成する変異部と、を有し、
前記初期化部は、
前記検索条件受付部に予め設定した入力値域と、出力値域を入力し、前記検索部で検索されたソフトウェア部品を組み合わせて、前記アプリケーションを複数生成することを特徴とする請求項１３に記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、本発明はソフトウェア部品を用いてアプリケーションを合成する手法及びシステムに関する。
【背景技術】
【０００２】
近年、ソフトウェアの生産効率を向上させるため、複数のソフトウェアコンポーネント（ソフトウェア部品）を組み合わせて、新たな機能を提供するアプリケーション（プログラム）を自動的に生成する手法が検討されている（例えば、特許文献１、非特許文献１）。
【０００３】
上記特許文献１の従来技術はソフトウェア部品を機能別に分類し、この分類を利用して遺伝的アルゴリズムによるアプリケーション合成の効率化を図るものである。また、上記非特許文献１の従来技術は、遺伝的アルゴリズムを用いて画像認識プログラムを自動的に合成する技術が開示されている。
【特許文献１】特開平１０−１４９２８０号
【非特許文献１】「認識機構学習システムMIRACLE-IVにおける画像処理戦略の学習」、坂上  勝彦  他共著、電子情報通信学会技術研究報告、１９８８年６月１６日、PRU88-16〜20,21〜29 Vol.88 No.77,78PRU-88-20、第３３頁〜第４０頁
【発明の開示】
【発明が解決しようとする課題】
【０００４】
複数のソフトウェア部品を組み合わせて結合し、新たなアプリケーションを構成する場合、接続するソフトウェア部品の入出力がマッチする必要がある。２つのソフトウェア部品の接続する場合は、ソフトウェア部品のうち一方の入力と他方の出力が一致するかを検証することが必要となる。そして、１つのソフトウェア部品が与えられたとき、複数のソフトウェア部品から、与えられたソフトウェア部品と接続可能な単一のソフトウェア部品を検索する場合は、それらの出力全て（値域）について接続の可否を調べる必要がある。
【０００５】
しかしながら、前記従来例では、単独のソフトウェア部品と単独のソフトウェア部品を結合する場合の入出力の値域の組み合せに関しては検討されているが、ソフトウェア部品の並列の組合せとソフトウェア部品の並列の組合せを結合する場合のソフトウェア部品の入出力の値域の組み合せに関しては検討されておらず、得られた組み合わせで生成したアプリケーション（プログラム）が正常に動作する保証がない、という問題があった。
【０００６】
さらに、与えられたソフトウェア部品に対して、複数のソフトウェア部品から、与えられたソフトウェア部品と接続可能なソフトウェア部品の組合せを検索する場合は、全てのソフトウェア部品の組合せについて、接続の可否を調べる必要がある。この接続の可否を調べる過程は計算負荷が大きくなるという問題がある。
【０００７】
また、上記遺伝的アルゴリズムは複数の解候補の集合を用いて、解候補を評価し、評価結果の良いもの優先的に選択し、交叉と呼ばれる過程で解候補を組み合わせ、変異と呼ばれる過程で解候補の一部を書き換え、新しい解候補を生成する過程を繰り返し、最適解を求めるアルゴリズムである。一般に遺伝的アルゴリズムでは、交叉や変異で生成した新しい解候補が評価不能になる場合、この解候補を致死遺伝子をもつ解候補と呼ぶ。遺伝的アルゴリズムを用いる場合は致死遺伝子の発生を防ぐ必要がある。
【０００８】
遺伝的アルゴリズムを用いてソフトウェア部品からアプリケーションを自動生成する場合は、交叉や変異の過程でソフトウェア部品が接続可能でないと、解候補としてのアプリケーションは実行することができない、という問題があった。
【０００９】
そこで本発明は、上記問題点に鑑みてなされたもので、複数のソフトウェア部品を組み合わせてアプリケーションを生成する際に、ソフトウェア部品の接続の可否を迅速かつ高精度で調査することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、予め設定された複数のソフトウェア部品の中から、入力された条件に適合するソフトウェア部品を検索する処理を計算機に実行させるソフトウェア部品の検索プログラムにおいて、複数のソフトウェア部品の入力および出力が定められている値域を要素とする集合をソフトウェア部品格納部へ格納する手順と、前記ソフトウェア部品の出力値域集合の和集合と、入力値域と、前記ソフトウェア部品の識別子とを管理する高階グラフを設定する手順と、前記高階グラフから抽出するソフトウェア部品の値域を受け付ける手順と、前記受け付けた値域に基づいて、前記受け付けた値域を出力とするソフトウェア部品の並列の組み合わせ、またはひとつを前記高階グラフの出力値域集合の和集合から検索する手順と、を含む。
【００１１】
また、前記検索結果から、遺伝的アルゴリズムを用いてアプリケーションを生成する手順をさらに含み、前記アプリケーションを生成する手順は、前記ソフトウェア部品をランダムに選択してアプリケーションを複数生成して解候補の集合に設定して前記解集合の初期化を行う手順と、前記解候補の集合のアプリケーションについて評価を行う手順と、前記評価の結果に基づいて前記複数のアプリケーションから一つを選択する手順と、前記選択したアプリケーションの一部を他のソフトウェア部品に交換し、次の世代のアプリケーションの集合を生成する手順と、前記選択したアプリケーションの一部をランダムに選択した他のソフトウェア部品に交換し、前記解候補の集合を更新する手順と、を含み、前記初期化を行う手順は、前記予め設定した入力値域と、出力値域を値域として受け付けて、前記検索する手順で検索されたソフトウェア部品を組み合わせて、前記アプリケーションを複数生成する。
【発明の効果】
【００１２】
本発明では値域の集合に対して、前記値域の集合を出力とするソフトウェア部品の組合せを検索する場合、すべてのソフトウェア部品の組合せについて接続の可否を判定するのでなく、高階グラフにおいて予め構造化された値域の全体集合の部分集合族（和集合）を利用して、接続可能なソフトウェア部品の組合せを検索するため、検索効率が向上する。これにより、ソフトウェア部品の接続の可否を高い精度で調査しながらも、迅速に調査を行うことができる。
【００１３】
また、遺伝的アルゴリズムを用いてアプリケーションの自動生成を行う場合は、初期化や交叉や変異過程において、ソフトウェア部品の接続の可否を直接判定するのではなく、ソフトウェア部品の入力の値域の集合から接続可能なソフトウェア部品の組合せを検索し、解候補の生成を行うため、評価不能な解候補を生成することがない。これにより、ソフトウェアの生産性を大きく向上させることができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１５】
図１は、第１の実施形態を示す計算機システムのブロック図である。本第１実施形態では、ソフトウェア部品の接続情報を管理する計算機システム（ソフトウェア部品管理システム）を示している。
【００１６】
図１において、後述する値域集合高階グラフを格納する値域集合高階グラフデータベース３０１を管理する値域集合高階グラフデータサーバ３０２と、ソフトウェア部品の機能仕様や入出力仕様を管理するソフトウェア部品リポジトリ３０３と、ユーザインターフェースやアプリケーションが実行されるクライアント（クライアント計算機）３０４がネットワーク３０５を介して接続される。なお、値域集合高階グラフデータサーバ３０２とクライアント３０４及び値域集合高階グラフデータサーバ３０２は、それぞれ図示しないＣＰＵとメモリ及びストレージ装置を備えている。また、値域集合高階グラフデータサーバ３０２が、本発明のソフトウェア部品管理システムの中心として機能する。
【００１７】
クライアント３０４では、ソフトウェア部品リポジトリ３０３に格納された複数のソフトウェア部品の組み合わせを値域高階グラフデータベース３０１で後述するように検索を行い、複数のソフトウェア部品（コンポーネント）を組み合わせて図２に示すアプリケーション２０１を構築する。なお、ソフトウェア部品リポジトリ３０３は、複数のソフトウェア部品の入力および出力が定められている値域を要素として格納している。そして、値域高階グラフデータベース３０１は、後述するようにソフトウェア部品リポジトリ３０３の各要素ついて、出力値域集合の和集合を管理する。
【００１８】
図２において、アプリケーション２０１は、複数のコンポ２０２で構成される。また、アプリの一部を部分アプリ２０３とよぶ。アプリケーション２０１及びコンポ２０２は予め設定された入出力を行う。この入出力の値域の集合を値域集合とよぶ。例えば、図中２０４はアプリ２０１の入力値域集合を示し、図中２０５はアプリ２０１の出力値域集合を示す。
【００１９】
ソフトウェア部品としてはコンポやＷｅｂサービスを想定している。このアプリケーション２０１は入力により起動して、所定の処理を行った結果を出力する。以下では、コンポという用語でソフトウェア部品（コンポーネント）を表すものとする。また、アプリケーションをアプリで表すものとする。
【００２０】
次に、図１において、値域集合高階グラフデータベース３０１を格納する値域集合高階グラフデータサーバ３０２は、ソフトウェア部品リポジトリ３０３に格納されたコンポ２０２の接続の可否を定めるための情報を値域集合高階グラフデータベース３０１に登録するコンポ登録機能２３０１と、クライアント３０４で実行される登録・検索ユーザインターフェース２３０２からの問い合わせに対してコンポ２０２の組合せの接続の可否に関する結果を検索し、コンポの検索結果をコンポ組合せリスト２３０５として出力するコンポ組合せ検索機能２３０３と、ソフトウェア部品リポジトリ３０３を自律的に検索し、接続の可否を定めるための情報を登録するクローラ２３０４から構成される。コンポ組合せ検索機能２３０３は、クライアント３０４からの問い合わせに応じて値域集合高階グラフデータベース３０１を検索し、検索条件に該当する値域集合があればコンポ組合せリスト生成機能２３０６を起動して、コンポ組合せリスト２３０５を生成し、クライアント３０４へ提供する。コンポ登録機能２３０１は、クローラ２３０４またはクライアント３０４の登録・検索ユーザインターフェース２３０２からの要求に基づいて、コンポ２０２の情報を値域集合高階グラフデータベース３０１に登録する。なお、上記各機能の詳細については後述する。また、上記各機能はソフトウェアのモジュールとして実装することができる。
【００２１】
次に、コンポ２０２の入出力は、例えば、次のようにＸＭＬで記述される場合が多い。
【００２２】
<Tag0>
<TagA>ValueA</TagA>
<TagB>ValueB</TagB>
<TagC>ValueC</TagC>
</Tag0>     ……… 式（１）
<Tag1>
<TagA>ValueA</TagA>
<Tag2>
<TagB>ValueB</TagB>
<TagC>ValueC</TagC>
</Tag2>
<Tag1>    ………式（２）
<Tag3>
<TagD>ValueD</TagD>
<TagE>ValueE</TagE>
</Tag3>   ……… 式（３）
本実施形態では上記式（１）〜（３）に示したＸＭＬを平滑化し、値の集合と見なした入出力を考える。例えば、式（２）と式（３）の２つを平滑化すると、上記式（１）〜（３）は以下のようになる。
【００２３】
<TagA>ValueA</TagA>
<TagB>ValueB</TagB>
<TagC>ValueC</TagC>
<TagD>ValueD</TagD>
<TagE>ValueE</TagE>    ……… 式（４）
これらの式（４）を値の集合と見なすと
[ValueA、ValueB、ValueC、ValueD、ValueE]    ………式（５）
となる。さらに、本発明で管理するのは値の値域であり、各値の値域が
ValueA∈RangeA、 ValueB∈RangeB、 ValueC∈RangeC、 ValueD∈RangeD、 ValueE∈RangeE    ………式（６）
である場合、管理対象は入力値域集合２０４
[RangeA、RangeB、RangeC、RangeD、RangeE]    ………式（７）
である。値の値域の例としては、「商品番号」、「色」、「サイズ」、「個数」などが挙げられ。それらが構成する値域集合は、
[商品番号、色、サイズ、個数]  ………式（８）
である。
【００２４】
次に、値域集合高階グラフ５０１を構成する高階グラフに関して述べる。
【００２５】
まず、グラフは二項関係の図式表現であり、集合Ｖの任意の２つの要素の関係Ｒ：Ｖ×Ｖ→｛０、１｝の有無を表す。グラフでは集合Ｖの要素は図３の頂点１５０１で表される。また、２つの要素ｕとｖに関係がある場合はそれらの間を辺１５０２で結合する。
【００２６】
有向グラフは非対称な二項関係の図式表現である。グラフにおいて、関係Ｒは対称律Ｒ（ｕ、ｖ）＝Ｒ（ｖ、ｕ）を満たすが、有向グラフでは対称律が満たされず関係に方向性がある。このため、有向グラフでは図４の矢印で示す有向辺１６０１を用いて方向性のある関係を表す。
【００２７】
二部グラフは互いに素な２つの集合Ｕ、Ｖの任意の要素の関係Ｒ：Ｕ×Ｖ→｛０、１｝の有無を表すグラフでは、互いに素な２つの集合Ｕ、Ｖのうち、集合Ｕの要素は図５の白い円で示す頂点１７０１で、集合Ｖの要素は黒い円で示す頂点１７０２で表される。
【００２８】
一般に図３のグラフからは辺１５０２に図６の四角で示す新たな頂点１８０１を対応させることにより二部グラフが誘導される。
【００２９】
高階グラフは多項関係の図式表現であり、集合Ｖの任意の個数の任意の要素の関係Ｒ：Ｖ×Ｖ×‥×Ｖ→｛０、１｝の有無を表す。高階グラフでは複数個の要素ｕ、ｖ、‥、ｗに関係があるＲ（ｕ、ｖ、‥、ｗ）＝１の場合、それらの要素の間を高階辺（コンポの  出力値域集合の集合と、コンポの出力値域集合の和集合の対）で結合する。
【００３０】
高階辺を図式で表すために、先に述べた辺に頂点を対応させ二部グラフを誘導する手法を用いる。図７に図６のグラフから誘導される二部グラフのグラフにおける１つの辺の二部グラフ表現を示す。また、有向グラフの場合は図８の有向グラフにおける有向辺の二部グラフ表現が与えられる。図７では辺に対応する頂点１９０１には２つの頂点１９０２、１９０３が結合していることにより、２項関係があることが表現されている。
【００３１】
これに対して高階グラフでは、図９に示すように高階辺に対応する頂点２１０１に複数の頂点２１０２〜２１０６を結合することにより、多項関係があることを表現する。また、有向高階グラフの場合は図１０のように有向の多項関係を表現する。高階グラフは頂点の集合と図９、図１０の高階辺の集合を用いて図式表現される。なお本実施形態では有向グラフあるいは有向高階グラフのみを扱うため、以下の説明においては単にグラフあるいは高階グラフという用語を用いる。
【００３２】
図１１Ａ、図１１Ｂに値域集合高階グラフの概念を示す。図１１Ａは１つの高階辺とそれと隣接関係にある頂点を示す。一般に高階グラフは図中「○」で示す頂点４０１〜４０３の集合と「◇」で示す高階辺４０６の集合で構成される。頂点４０１〜４０３には値域集合が対応する。高階辺４０６は２つの入力と１つの出力をもち、出力側には入力側の２つの値域集合Ａ、Ｂの和集合Ｃが対応する。また、頂点４０１〜４０３には入力コンポ４０４と出力コンポ４０５が付随する。図１１Ｂの値域集合高階グラフは、図１１Ａに示した高階辺とそれと隣接関係にある頂点、すなわち、図１１Ｂにおける矩形領域４０７で囲んだ部分を複数結合したものである。
【００３３】
図１２に値域集合高階辺グラフのデータ構造を示す。高階辺グラフ５０１は頂点の集合５０２と、高階辺の集合５０３で構成される。各々の頂点５０４（図１１Ａの４０１〜４０３）には頂点ＩＤ５０６と、値域集合５０７と、高階辺ＩＤ集合５０８と、入力コンポ集合５０９と、出力コンポ集合５１０と、組合せ数５１１と、制約フラグ５１２とが記録される。各々、頂点ＩＤ５０６は頂点に与えるインデックスが設定され、値域集合５０７は頂点５０４が表す値域の集合が設定され、高階辺ＩＤ集合５０８は頂点５０４と隣接する高階辺５０５のリストが設定され、入力コンポ集合５０９は値域集合５０７を出力するコンポの集合が設定され、出力コンポ集合５１０は値域集合５０７を入力とするコンポの集合が設定され、組合せ数５１１はその値域集合５０７がいくつのコンポの並列結合で実現されるかを示す値が設定され、制約フラグ５１２は当該頂点集合５０２の検索時に当該頂点５０４を利用するか否かを判定するフラグが設定される。なお、入力コンポ集合５０９や出力コンポ集合５１０の要素は、コンポの所在を示す識別子としてコンポＵＲＩとよぶコンポのＵＲＩ（Universal Resource Identifier）を使用するものとする。
【００３４】
また、各々の高階辺５０５には高階辺ＩＤ５１３と、第一入力頂点ＩＤ５１４と、第二入力頂点ＩＤ５１５と、出力頂点ＩＤ５１６とが記録される。各々高階辺ＩＤ５１３には高階辺に与えるインデックスが設定され、第一入力頂点ＩＤ５１４と第二入力頂点ＩＤ５１５は高階辺（図１１に示した４０６）の入力側の頂点のインデックスが設定され、出力頂点ＩＤ５１６は高階辺（図１１に示した４０６）の出力側の頂点のインデックスが設定される。
【００３５】
図１３に、上記図１に示した値域集合高階グラフ管理サーバ３０２のコンポ登録機能２３０１の処理過程の一例を示すＰＡＤ図（問題分析図）である。コンポ登録機能２３０１は、図１３に基づいて、ソフトウェア部品リポジトリ３０３に格納されたコンポ２０２を値域集合高階グラフデータベース３０１に登録する。
【００３６】
はじめに、コンポ登録機能２３０１は、図１に示したクライアント３０４の登録・検索ユーザインターフェース２３０２を介して、コンポＵＲＩを取得し、コンポ出力値域集合（値域集合５０７を入力する集合）をコンポＵＲＩが指すコンポの出力値域集合（出力コンポ集合５１０）に設定する（６０１）。この処理では、クライアント３０４の登録・検索ユーザインターフェース２３０２から登録を行うコンポをＵＲＩにより指定する。コンポ登録機能２３０１は、ＵＲＩにより指定されたコンポをソフトウェア部品リポジトリ３０３から読み込んで、このコンポの出力値域をコンポ出力値域集合に設定する。
【００３７】
続いて、図１２に示した頂点集合５０２の各頂点５０４に関して、入力されたコンポ出力値域集合と頂点５０４の値域集合５０７が等しいならば頂点５０４の入力コンポ集合５０９にコンポＵＲＩを追加し、処理を終了する（ステップ６０２〜６０５）。この過程では既に値域集合高階グラフデータベース３０１に値域集合５０７が存在する場合はその値域集合５０７にコンポを接続する。
【００３８】
一方、上記ステップ６０３で値域集合５０７が存在しない場合は、ステップ６０６、６０７で頂点集合５０２に次の追加頂点を追加し、頂点数を示す頂点ＩＤ上限を増加させる（ステップ６０６〜６０７）。つまり、これらの処理は、以下の設定を行う。
頂点ＩＤ＝頂点ＩＤ上限＋１、値域集合＝コンポ出力値域集合、高階辺ID集合＝Φ、入力コンポ集合＝｛コンポＵＲＩ｝、出力コンポ集合＝Φ、組合せ数＝１、制約フラグ＝０  ………  式（９）
続いて、上記ステップ６０６、６０７で追加した頂点５０４とそれ以外の頂点５０４を入力とし、それらの値域集合５０７の和集合を結合する高階辺５０５を作成する（ステップ６０８〜６１７）。
【００３９】
まず、ステップ６０８では、頂点集合５０２の各頂点５０４を参照し、第１参照頂点とする。ステップ６０９では、値域集合高階グラフデータベース３０１から第１参照頂点の組合せ数５１２と、予め設定した組合せ数上限値が等しいか否かを判定する。第１参照頂点の組合せ数５１２と組合せ数上限値が等しければ、ステップ６１０でこの処理を終了して次の頂点について調べる。一方、第１参照頂点の組合せ数５１２が、予め設定した組合せ数上限値に達していなければ、ステップ６１１で高階辺集合５０３に高階辺５０５を追加し、ステップ６１２で高階辺ＩＤ上限に１を加算する。ステップ６１３では、頂点集合５０２の第１参照頂点以外の各頂点（第２参照頂点）について、値域集合の比較を行い、追加した高階辺５０５について既に存在しているかを検索する。すなわち、ステップ６１４で、各第２参照頂点について以下の条件式を満たすか否かを判定する。
【００４０】
第２参照頂点の値域集合＝追加頂点の値域集合∪第１参照頂点の頂点集合
ステップ６１４では、第２参照頂点の頂点集合が追加した頂点５０４の値域集合と第１参照頂点の頂点集合の和集合であれば、ステップ６１５で第２参照頂点の高階辺ＩＤ集合に、追加した高階辺５０５の高階辺ＩＤ５１３を追加する。ステップ６１３では、上記ステップ６１４、６１５を各第２参照頂点にそれぞれ実行する。そして、ステップ６１６、６１７では追加した高階辺５０５に対する処理を行う。
【００４１】
このように、図１３に示す高階辺５０５の作成処理では、組み合わせるコンポの数が上限値に達している場合は高階辺を作成しない（６０９〜６１０）。そうでない場合は、高階辺集合５０３に次の追加高階辺を追加し、高階変数を示す高階辺ＩＤ上限値を増加させる（６１１〜６１２）。すなわち、次の式（１０）を処理する。
高階辺ＩＤ＝高階辺ＩＤ上限＋１、第一入力頂点ＩＤ＝追加頂点の頂点ＩＤ、第二入力頂点頂点ＩＤ＝第一参照頂点の頂点ＩＤ  ………式（１０）
続いて、追加した高階辺５０５の出力頂点５０４が既に存在するかを調べ（６１３〜６１４）、存在する場合は、第二参照頂点の高階辺ＩＤ集合５１３に追加高階辺の高階辺ＩＤを追加する（６１５）。
【００４２】
一方、そうでない場合は和集合を表す頂点に、
頂点ＩＤ＝頂点ＩＤ上限＋１、値域集合＝コンポ出力値域集合∪第一参照頂点の値域集合、高階辺ＩＤ集合＝｛追加高階辺の高階辺ＩＤ｝ａｎｄ  追加高階辺の出力頂点ＩＤ＝頂点ＩＤ、入力コンポ集合＝Φ、出力コンポ集合＝Φ、組合せ数＝第一参照頂点の組合せ数＋１、制約フラグ＝０  ………式（１１）
を作成し、頂点数を示す頂点ＩＤ上限を増加させる（６１６〜６１７）。
【００４３】
以上の処理により、コンポ登録機能２３０１は、値域高階グラフ５０１でソフトウェア部品リポジトリ３０３に格納されたコンポ２０２の値域の和集合を管理する値域集合高階グラフデータベース３０１へ、指定されたコンポ２０２について、値域集合５０７に対応付けて入力コンポ集合５０９や出力コンポ集合５１０の要素としてコンポの所在を示すコンポＵＲＩを登録していく。
【００４４】
図１３では値域集合５０７へ入力を与えるコンポーネント、つまり、コンポーネントからみるとコンポーネントの出力となる値域集合５０７に関する登録処理を示した。値域集合５０７から出力を受けるコンポーネントに関しては、処理するコンポーネントの出力をコンポーネントの入力に変更し、上記６０６における入力コンポ集合と出力コンポ集合の設定方法を入れ替えることにより登録処理を行う。
【００４５】
なお、上記ではクライアント３０４からコンポ２０２を指定した場合を示したが、クローラ２３０４がコンポ２０２の登録を要求した場合も、コンポ登録機能２３０１は図１３と同様の処理を実行する。
【００４６】
次に、図１４と図１５は、上記図１３で示した処理で値域集合高階グラフデータベース３０１に登録したコンポの接続情報を検索し、コンポ組合せリスト２３０５を出力する図１に示したコンポ組合せ検索機能２３０３及びコンポ組合せリスト２３０５生成機能２３０６の再帰処理過程を示す。この処理は値域集合５０７をキーとし、キーにマッチするコンポの組合せを全て出力する処理である。なお、図１４は、コンポ組合せ検索機能２３０３を示し、図１５は、コンポ組合せ検索機能２３０３から呼び出されるコンポ組合せリスト２３０５を示す。
【００４７】
つまり、クライアント３０４では登録・検索ユーザインターフェース２３０２から検索を行うコンポの値域集合（入力値域集合または出力値域集合）をクエリとして入力し、値域集合高階グラフ管理サーバ３０２へ問い合わせる。値域集合高階グラフ管理サーバ３０２のコンポ登録機能２３０１は、このクエリとして入力された値域集合（以下、クエリ値域集合）をキーとして、値域集合高階グラフデータベース３０１を検索し、クエリ値域集合にマッチ（一致乃至近似）するコンポ２０２の並列（あるいは単一）の組合せを、コンポ組合せリスト２３０５へ出力する。
【００４８】
図１４に示す、コンポ組合せ検索機能２３０３は、はじめに、ステップ７０１では、クエリ値域集合に対するマッチングレベル上限と下限を設定し、クエリとしてクエリ値域集合を入力し、コンポ組合せリスト２３０５＝Φとする。
【００４９】
ここでマッチングレベルを以下のように定義する。まず、マッチングレベルが正であるとは、クエリ値域集合が頂点５０４の値域集合５０７に含まれる場合である。なお、この場合をオーバースペックマッチングとよぶ。クエリ値域集合に対して余分な値域がＮ個存在する場合、マッチングレベルはＮである。
【００５０】
また、マッチングレベルが負であることは、クエリ値域集合が頂点５０４の値域集合５０７を含む場合である。クエリ値域集合に対して不足している値域がＮ個存在する場合、マッチングレベルは−Ｎである。なお、この場合をアンダースペックマッチングとよぶ。
【００５１】
また、マッチングレベルが０である場合は、クエリ値域集合と頂点５０４の値域集合５０７が一致する場合である。なお、この場合をイグザクトマッチングとよぶ。
【００５２】
上記のような正、０、負のマッチングレベルを、クライアント３０４から設定する。なお、マッチングレベルの設定は、予め設定した値とすることもできる。
【００５３】
続いて図１２に示した頂点集合５０２の各頂点５０４に関して、クエリ値域集合と頂点５０４の値域集合５０７がマッチするならば、その頂点５０４について、図１５に示すコンポ組合せリスト作成機能２３０６を起動し、コンポ組合せの結果を取得し、コンポ組合せリスト２３０５にコンポ組合せ結果を追加し（７０２〜７０５）、コンポ組合せリストを出力する（７０６）。
【００５４】
すなわち、ステップ７０３で、クエリ値域集合と頂点５０４の値域集合５０７がマッチすれば、ステップ７０４へ進んで、後述するコンポ組合せリスト２３０５生成機能２３０６を起動し、値域集合がマッチしたコンポの組合せ結果を取得する。さらに、ステップ７０５で、コンポ組合せリスト２３０５に頂点５０４のコンポ組合せ結果を追加する。
【００５５】
次に、図１４のコンポ組合せ検索機能２３０３から呼び出されるコンポ組合せリスト生成機能２３０６を図１５に示す。図１５に示した再帰的な頂点のコンポ組合せリスト作成機能では、はじめにコンポ組合せリスト２３０５を頂点５０４の入力コンポ集合の要素数１の集合族に設定する（８００）。ここで、集合｛ａ、ｂ、ｃ｝に対する要素数１の集合族とは、｛｛ａ｝、｛ｂ｝、｛ｃ｝｝のことである。
【００５６】
続いて、頂点５０４の高階辺ＩＤ集合の各高階辺ＩＤ５１３に関して、再帰的に、高階辺ＩＤ５１３の第一入力頂点ＩＤの指す頂点５０４のコンポ組合せリスト生成機能２３０６の起動とコンポ組合せ結果の取得と高階辺ＩＤ５１３の第二入力頂点ＩＤの指す頂点のコンポ組合せ作成機能の起動とコンポ組合せ結果の取得を行い、コンポ組合せリスト２３０５に第一入力頂点ＩＤの指す頂点５０４のコンポ組合せ結果と第二入力頂点ＩＤの指すコンポ組合せ結果の直積を追加する（８０１〜８０４）。
【００５７】
ここで２つの集合族｛｛ａ｝、｛ｂ｝｝と｛｛ｃ｝、｛ｄ｝｝の直積とは｛｛ａ、ｃ｝、｛ａ、ｄ｝、｛ｂ、ｃ｝、｛ｂ、ｄ｝｝のことである。
【００５８】
頂点５０４のコンポ組合せ作成機能は、図１４のステップ７０４に対して呼び出し側コンポ組合せリストを結果として出力する（ステップ８０５）。なお、コンポ組合せリスト２３０５は、例えば、入力された値域集合に対して、上記マッチングレベルの上限と下限の範囲に含まれる頂点集合５０７に対応する入力コンポ集合５０９と出力コンポ集合１０と、コンポのＵＲＩを含んだリストで構成すればよい。
【００５９】
以上の処理により、クライアント３０４が入力した値域集合（クエリ値域集合）に対して、値域集合高階グラフデータベース３０１で値域集合５０７が所定のマッチングレベルに含まれる入力コンポ集合５０９と出力コンポ集合５１０を得て、入力したクエリ値域集合を出力とするコンポの並列（または単一）の組合せをコンポ組合せリスト２３０５出力することができる。
【００６０】
前記従来例のように、すべてのコンポの全体集合に属する複数のコンポについて接続の可否を調べるのではなく、本発明では、値域の全体集合の部分集合族、つまり、コンポの入出力の属する値域の集合のコンポに関する全体集合を構造化し、値域の全体集合の部分集合族に含まれる値域の集合にコンポを対応させる。そして、値域の集合を出力とするソフトウェア部品（コンポ）の組合せを検索する際には、予め構造化された値域の全体集合の部分集合族（値域の部分集合を要素とする集合）を利用して、接続可能なコンポの並列（または単一）組合せを検索し、抽出するため、検索効率が向上し、前記従来例に比して演算処理の負荷を低減することができる。
【００６１】
さらに、上記の処理によって抽出されたコンポの組合せは、検索条件として入力したクエリ値域集合と所定のマッチングレベルで一致している。したがって、コンポ組合せリスト２３０５に出力されたコンポ（入力コンポ集合５０９と出力コンポ集合５１０）を組み合わせてアプリケーションを構築すれば、値域集合のマッチが保証されているので、複数のソフトウェア部品を組み合わせて生成したアプリケーションの動作を保証することが可能となる。これにより、ソフトウェアの生産性を向上させることが可能になる。
【００６２】
例えば、図２において、クエリ値域集合として、入力値域集合２０４と出力値域集合２０５を入力すると、コンポ組合せ検索機能２３０３は、検索する値域を出力値域２０５として検索する。コンポ組合せ検索機能２３０３は、まず、出力値域集合２０５を出力するコンポ２０２の並列な組合せ（あるいは一つのコンポ）を検索する。次に、これらのコンポの組合せの入力を出力とするコンポの組合せ（並列あるいは単一）を検索する。このような検索を、クエリ値域集合で受け付けた入力値域２０４に一致または含まれるまで、ループ繰り返すことで、与えられたクエリ値域集合に一致または近似するコンポの組合せを出力値域側から入力値域側へ向けて連鎖的に検索してコンポ組合せリスト２３０５へ出力する。クライアント３０４のユーザは、このコンポ組合せリスト２３０５の検索結果に基づいて、最適なコンポ２０２を組合せることで、入力値域と出力値域が一致するアプリケーションを容易に構築することができる。
【００６３】
なお、上記では値域集合高階グラフデータベース３０１と、ソフトウェア部品リポジトリ３０３を異なる計算機に格納したが、ソフトウェア部品リポジトリ３０３を値域集合高階グラフ管理サーバ３０２に格納しても良い。
【００６４】
＜第２実施形態＞
図１６は、第２の実施形態を示し、前記第１実施形態の値域集合高階グラフ管理サーバ３０２で検索した結果に、遺伝的アルゴリズムを適用してアプリケーションを自動的に生成する計算機システムを示すブロック図である。
【００６５】
図１６において、値域集合高階グラフ管理サーバ３０２には、前記第１実施形態の図１の図１に加えてコンポ組合せ検索機能２３０３を利用するコンポ組合せランダム生成機能２４０８を設け、クライアント３０４には、遺伝的アルゴリズムを適用してアプリケーションを自動的に生成するアプリ自動生成システム２４０６を加えたものであり、その他の構成は前記第１実施形態と同様である。
【００６６】
まず、遺伝的アルゴリズムについて図１７を参照しながら以下に説明する。
【００６７】
遺伝的アルゴリズムは複数の解候補の集合を用いて、解候補を評価し、評価結果の良いもの優先的に選択し、交叉と呼ばれる過程で解候補を組み合わせ、変異と呼ばれる過程で解候補の一部を書き換え、新しい解候補を生成する過程を繰り返し、最適解を求めるアルゴリズムである。
【００６８】
図１７の、初期化過程１０１では複数の解候補の集合をランダムに設定する。この解候補の集合に対して、評価、選択、交叉、変異の各過程を繰り返し回数や評価値の変化などの終了条件１０２を満たすまで繰り返す。評価過程１０３では解候補の評価値を計算する。選択過程１０４では評価結果に基づき高い評価の解候補を優先的に選択する。交叉過程１０５では選択した解候補を組み合わせ、次の世代の解候補の集合を生成する。変異過程１０６では解候補の一部をランダムに変更する。遺伝的アルゴリズムはこうした過程を繰り返し最適化を行うアルゴリズムである。
【００６９】
図１８は、上記図１７の遺伝的アルゴリズムをアプリケーション自動構成システム２４０６に適用した事例を示す。ここでは複数の入力と理想出力の対が与えられたとき、その入出力関係を充足するアプリケーションを生成する課題を扱う。
【００７０】
図１８の初期化過程９０１ではコンポをランダムに組み合わせてアプリを生成し、生成したアプリを解候補とし、複数の解候補の集合をランダムに設定する。この解候補の集合に対して、評価９０３、選択９０４、交叉９０５、変異９０６の各過程を、繰り返し回数や評価値の変化などの終了条件９０２を満たすまで繰り返す。
【００７１】
評価過程９０３では、複数の入力と理想出力に関して、解候補のアプリに入力を与え、実行結果と理想出力の差を計算し、その誤差に基づいて評価を行う。遺伝的アルゴリズムでは通例、評価結果は適合度と呼ばれるゼロ以上の数値で表現される。選択過程９０４では評価結果に基づき高い評価のアプリを優先的に選択する。優先的に選択されるとは、例えば前記適合度とよばれる数値に比例した割合で選択することである。この手法はルーレットホイール選択とよばれる。ルーレットホイール選択はアプリの集合について適合度の総和を求め、各アプリの適合度を総和で割り、総和が１となるようにし、区間［０、１］を適合度で分割し、各分割区間をアプリに割り当て、［０，１］を値域とする一様分布に従う乱数を発生させ、その値を含む分割区間に対応するアプリを選択つまり複写する過程をアプリの数だけ繰り返す。
【００７２】
交叉過程９０５では選択したアプリの対を作成し、後述するようにその一部を交換し、次の世代の解候補の集合を生成する。アプリの対の作成は、例えば、アプリの集合においてアプリがインデキシングされている場合は、１番目と２番目、３番目と４番目というようにインデックスが隣接するものというように構成される。変異過程９０６ではアプリ集合の各アプリについて［０，１］を値域とする一様分布にしたがう乱数を発生させ、その値が一定値以下であれば、後述するようにアプリの一部を変更する。遺伝的アルゴリズムはこうした過程を繰り返し最適化を行うアルゴリズムである。
【００７３】
図１８の各過程のうち、初期化９０１、交叉９０５、変異９０６において、アプリの生成、組合せ、変更を行う場合、コンポの接続の可否の判定が必要となるため、前記第１実施形態に示した値域集合高階グラフ管理サーバ３０２を利用する。
【００７４】
図１６において、クライアント３０４には、上述の遺伝的アルゴリズムを用いてアプリケーションの自動生成を行うアプリ自動生成システム２４０６が実行される。アプリ自動生成システム２４０６は、初期化２４０１、評価２４０２、選択２４０３、交叉２４０４、変異２４０５の各機能を用いて最適化を行う遺伝的アルゴリズムと、初期化２４０１、交叉２４０４、変異２４０５において使用され、本発明で本質的な役割を果たす部分アプリ構築機能２４０６を含む。
【００７５】
また、値域集合高階グラフ管理サーバ３０２には、クライアント３０４側の遺伝的アルゴリズムによるアプリ自動生成システム２４０７と、部分アプリ構築機能２４０６から呼び出されるコンポ組合せ検索機能２３０３の検索結果からソフトウェア部品（コンポ）の組合せ結果をランダムに選択するコンポ組合せランダム生成機能２４０８と、クライアント３０４のアプリ自動生成システム２４０６の交叉２４０４から呼び出され、設定・解除が行われる値域集合高階グラフ制約機能２４０９が設けられる。なお、その他の機能モジュールは前記第１実施形態と同様である。
【００７６】
図１９は、図１６に示した値域集合高階グラフ管理サーバ３０２のコンポ組合せランダム作成機能２４０８の処理過程を示す。この機能はクライアント３０４のアプリ自動生成システム２４０６の遺伝的アルゴリズムから利用するため、前記第１実施形態のコンポ組合せ結果検索機能２３０３の検索結果から、ランダムにコンポの検索結果を選択し（１００２〜１００６）、その選択結果と、コンポ組合せの出力の値域集合とクエリ検索として与えたクエリ値域集合の差分集合とマッチングレベルを計算する（１００７〜１０１４）。この差分集合はコンポの組合せで処理されていないクエリ値域集合の部分集合を示す。なお、クエリ値域集合は、前記第１実施形態と同じく、クライアント３０４の登録検索ユーザーインターフェース２３０２からクエリとして入力された値域集合である。
【００７７】
図１９において、ステップ１００１〜１００５は、前記第１実施形態の図１４に示したステップ７０１〜７０５と同一であり、入力された値域集合にマッチするコンポの組合せをコンポ組合せリスト２３０５に出力する。
【００７８】
ステップ１００６では、コンポ組合せリスト２３０５に出力されたコンポの組合せから、コンポの組合せとコンポの所在を示すコンポＵＲＩを要素としてランダムに選択する。なお、ランダムな選択は、疑似乱数あるいは乱数を生成して、適宜公知の手法により選択すればよい。
【００７９】
次に、ステップ１００７では、選択したコンポの組合せから、コンポ出力値域集合（５０７）の和集合を求める。次に、ステップ１００８では、入力されたクエリ値域集合とステップ１００７で求めた和集合が等しければ、ステップ１００９で差分集合を空集合Φとし、マッチングレベル＝０とする。
【００８０】
ステップ１０１０では、入力されたクエリ値域集合がステップ１００７で求めた和集合に含まれれば、ステップ１０１１で差分集合＝コンポ出力値域集合の和集合−クエリ値域集合とし、また、マッチングレベル＝差分集合の要素数とする。つまり、上述した正の値となる。
【００８１】
ステップ１０１２では、入力されたクエリ値域集合がステップ１００７で求めた和集合を含む場合は、ステップ１０１３で差分集合＝クエリ値域集合−コンポ出力値域集合の和集合とし、また、マッチングレベル＝−（差分集合の要素数）とする。
【００８２】
こうして、差分集合とマッチングレベルの演算を行った結果を、ステップ１０１４でランダムにコンポの組合せを選択した結果として出力する。
【００８３】
次に、図２０と図２１を用いて入力と出力の値域集合から図２に示したアプリ２０１や部分アプリ２０３を作成するための処理過程を説明する。図２０に示す処理では前述のコンポ組合せランダム作成機能２４０８を用いて図２１に示すソフトウェア部品（コンポ）２５０１の組合せを検索し、入力された値域集合２５０２をコンポ２５０１の組合せの入力で書き換えることを繰り返す。
【００８４】
図２０では、前記第１実施形態の図１４と同様に、はじめにマッチングレベル上限と下限を設定し、入力クエリ値域集合２５０４と出力クエリ値域集合２５０３を入力し、参照コンポ組合せ集合＝Φ、参照値域集合＝出力クエリ値域集合とする（ステップ１１０１）。
【００８５】
続いて、繰り返し回数が予め設定した上限に達するか（１１０２）、入力クエリ値域集合２５０４から出力クエリ値域集合２５０３が計算できるコンポの組合せが生成されるまで、すなわち、値域集合の書き換え繰り返しの結果得られる値域集合２５０９が入力値域集合２５０４と一致するまで（１１０８〜１１０９）、コンポ組合せランダム作成機能２４０８の起動（１１０３）と参照する値域集合をコンポの組合せで処理されていないクエリ値域集合の部分集合２３０７、２３０８とコンポの入力値域集合２３０２の和集合で書き換える処理（１１０４〜１１０７）を実行する。なお、図２１に示すようにオーバースペックマッチングでは使用されないソフトウェア部品（コンポ）２５０５、２５０６の出力が生成される。
【００８６】
この処理は入力と出力の値域集合から部分アプリを構成するコンポの組合せを集合として求めるためのものである。
【００８７】
図２２には、コンポの組合せではなく、アプリ自動生成システム２４０６の部分アプリ構築機能２４０７で行われる部分アプリの構造を求めるための部分アプリ構築処理を示す。ここでは部分アプリグラフと値域−コンポ二項組多重集合という２つのデータを使用する。はじめにこれら２つのデータについて説明する。
【００８８】
図２３に部分アプリグラフのデータ構成を示す。このグラフは部分アプリ２０３で使用されているコンポとそれらの接続方法を与えるグラフである。部分アプリグラフ１３０１は部分アプリ頂点集合１３０２と部分アプリ辺集合１３０３で構成される。部分アプリ頂点１３０４は頂点のインデックスである部分アプリ頂点ＩＤ１３０６とコンポＵＲＩ１３０７をもつ。部分アプリ頂点１３０４はコンポに対応する。また、部分アプリ辺１３０５は辺のインデックスである部分アプリ辺ＩＤ１３０８と入力部分アプリ頂点ＩＤ１３０９と出力部分アプリ頂点ＩＤ１３１０をもつ。部分アプリ辺は入力頂点ＩＤ１３０９が示す頂点のコンポと出力頂点ＩＤ１３１０が示す頂点のコンポが結合されていることを示す。なお、遺伝的アルゴリズムにおいてコンポの結合は、染色体に相当する。
【００８９】
図２４に値域−コンポ二項組多重集合のデータ構成を示す。この集合はコンポ１４０４と値域集合１４０３の対を記録するためのものである。ここで多重集合とは要素の重複を許す集合のことである。
【００９０】
部分アプリの構造は図２３で示したとおりであり、部分アプリグラフ１３０１で表される。このうち部分アプリ頂点集合１３０２は図２０のアルゴリズムで求めることができる。
【００９１】
部分アプリ辺集合１３０３を求めるため、図２２の処理を実行する。まず、ステップ１２０１では、前述したようにマッチングレベルの上限と下限を設定し、入力クエリ値域集合と出力クエリ値域集合を入力し、部分アプリ頂点集合１３０２＝Φ、部分アプリ辺集合＝Φ、参照コンポ組合せ＝Φとして初期化する。
【００９２】
次に、図２４に示した２つの値域−コンポ二項組集合を使用する。一方は参照値域−コンポ二項組多重集合であり、他方は処理済値域−コンポ二項組多重集合である。参照値域−コンポ二項組多重集合は出力クエリ集合の各要素を入力とする外部環境というコンポの存在を想定し、”Ｏｕｔ”という仮想コンポと二項組を作成し、初期化する（１２０２）。
【００９３】
コンポ組合せランダム検索機能２４０８は、参照−コンポ二項組多重集合から計算される値域集合に関して起動し、コンポの組合せを出力する（１２０４〜１２０６）。
【００９４】
ステップ１２０４では、参照値域・コンポ二項組多重集合の第一要素と、値域を集め、多重集合を作り重複を除去して集合とし、参照値域集合を生成する。
【００９５】
ステップ１２０５では、生成した参照値域集合に関するコンポの組合せを選択するためコンポ組合せランダム生成機能２４０８を起動する。
【００９６】
ステップ１２０６では、部分アプリ頂点集合１３０２にランダムに選択したコンポの組合せを追加する。
【００９７】
ステップ１２０７では、処理済集合＝参照値域集合−差分集合とし、処理済値域・コンポ二項組多重集合＝Φとする。処理済値域−コンポ多重集合はコンポの出力値域集合とコンポの対応を示す（１２０８〜１２０９）。これら２つの値域−コンポ多重集合の要素の値域を比較し、一致するものを接続し、部分アプリ辺を構成する（１２１０〜１２１４）。
【００９８】
つまり、ステップ１２０８、１２０９では、処理済値域・コンポ二項組多重集合に、コンポの出力の値域集合の各要素とコンポＵＩＤ（ＵＲＩ）の二項組からなる値域・コンポ二項組多重集合を追加する。この処理は、コンポの組合せの各コンポに関して繰り返して実行する。
【００９９】
次に、ステップ１２１０〜１２１３では、処理済値域・コンポ二項組多重集合の各要素に関して次のステップ１２１２及び１２１３を繰り返す。ステップ１２１２では、処理済値域・コンポ二項組の値域＝参照値域・コンポ二項組の値域であるかを判定し、これら２つが等しければ、ステップ１２１３で、部分アプリ辺集合に処理済値域・コンポ二項組のコンポＵＲＩと参照値域・コンポ二項組のコンポＵＲＩの二項組を追加する。そして、ステップ１２１４では、処理済集合の各要素と第一項が一致する参照値域・コンポ二項組多重集合の要素を削除する。
【０１００】
続いて、ステップ１２１５では、コンポ組合せの各コンポの入力値域集合の各要素に関して、値域とコンポＵＲＩから参照値域・コンポ二項組を作成し、参照値域−コンポ二項組多重集合に追加することにより参照値域−コンポ二項組多重集合が更新される。
【０１０１】
以上の処理により出力クエリ値域集合に対応する部分アプリ、つまり複数のコンポを結合した集合が生成される。
【０１０２】
以上のような部分アプリ構築処理を行うことにより、遺伝的アルゴリズムをアプリケーション自動構成における初期化、交叉、変異の過程が次のように構成できる。図２５に示すように初期化過程ではアプリ全体の入力値域集合と出力値域集合の設定を行い（２７０１）、部分アプリ構築処理を適用し（２７０３）、解候補としてのアプリを生成を繰り返し解候補の集合を生成する（２７０２）。
【０１０３】
図２６に示すように変異過程では、はじめに解候補としてのアプリに対して、その一部のコンポをランダムに選択し、これらの部分的に選択したコンポを除去する（２８０２）。これにより、図２８に示すように入力が充足されていないコンポと出力が使用されないコンポが発生する。次に入力が充足されていないコンポの入力値域集合の和集合をクエリ出力値域集合２６０１とし、出力が使用されないコンポの出力値域集合をクエリ入力値域集合２６０２と考える。これらに関して部分アプリ構築処理を適用する（２８０３）。この過程を全ての解候補としてのアプリに関して繰り返す（２８０１）。
【０１０４】
図２７に示すように交叉過程では、解候補としてのアプリに対して、その一部のコンポをランダムに選択し、それらを除去する（２９０２）。次に交叉の相手となる解候補としてのアプリを所定の条件に基づいてひとつ選択する（２９０３）。交叉は、図１６の値域集合高階グラフ制約機能２４０９を用いて交叉の相手となるアプリのコンポに関してのみ、図１２に示した制約フラグ５１２を設定し（２９０４）、このフラグに基づきコンポ検索を行うようにし、部分アプリ構築処理を適用する（２９０５）。適用後は制約フラグを解除する（２９０６）。この過程を全ての解候補としてのアプリに関して繰り返す（２９０１）。
【０１０５】
以上のように、遺伝的アルゴリズムを用いてアプリケーションの自動生成を行う場合は、初期化や交叉や変異過程において、ソフトウェア部品の接続の可否を直接判定するのではなく、ソフトウェア部品の入力の値域の集合から接続可能なソフトウェア部品の組合せを検索し、解候補の生成を行うため、評価不能な解候補を生成することがない。これにより、ソフトウェアの生産性を大きく向上させることができる。
【産業上の利用可能性】
【０１０６】
以上のように、本発明は、ソフトウェア部品のリポジトリなどから自動的にアプリケーションを生成するアプリケーション自動構築システムや、ソフトウェア部品のリポジトリを管理するソフトウェア部品管理システムなどに適用することができる。
に適用することができる。
【図面の簡単な説明】
【０１０７】
【図１】本発明のソフトウェア部品管理システムのブロック図。
【図２】アプリケーションの構成例の説明図。
【図３】グラフの説明図。
【図４】有向グラフの説明図。
【図５】二部グラフの説明図。
【図６】グラフから誘導される二部グラフの説明図。
【図７】グラフにおける辺の二部グラフ表現の説明図。
【図８】有向グラフにおける有向辺の二部グラフ表現の説明図。
【図９】高階グラフにおける高階辺の二部グラフ表現の説明図。
【図１０】有向高階グラフにおける有向高階辺の二部グラフ表現の説明図。
【図１１Ａ】値域集合高階グラフの説明図。
【図１１Ｂ】高階辺を結合した値域集合高階グラフの説明図。
【図１２】値域集合高階辺グラフのデータ構造を示す説明図。
【図１３】コンポ登録機能の処理過程を示すＰＡＤ図。
【図１４】コンポ組合せ検索機能の処理過程を示すＰＡＤ図。
【図１５】コンポ組合せ検索機能の再帰処理過程の処理過程を示すＰＡＤ図。
【図１６】第２の実施形態を示し、遺伝的アルゴリズムを用いたアプリケーションの自動生成システムのブロック図。
【図１７】同じく第２の実施形態を示し、遺伝的アルゴリズムの説明図。
【図１８】同じく第２の実施形態を示し、遺伝的アルゴリズムをアプリケーション自動構成に適用した例の処理過程を示すＰＡＤ図。
【図１９】同じく第２の実施形態を示し、コンポ組合せランダム作成機能の処理過程を示すＰＡＤ図。
【図２０】同じく第２の実施形態を示し、入力と出力の値域集合から部分アプリを作成するための処理過程を示すＰＡＤ図。
【図２１】同じく第２の実施形態を示し、部分アプリを作成するための処理過程の説明図。
【図２２】同じく第２の実施形態を示し、部分アプリ構築処理の処理過程を示すＰＡＤ図。
【図２３】同じく第２の実施形態を示し、部分アプリグラフのデータ構成図。
【図２４】同じく第２の実施形態を示し、値域−コンポ二項組多重集合のデータ構成図。
【図２５】同じく第２の実施形態を示し、遺伝的アルゴリズムにおける初期化過程のＰＡＤ図。
【図２６】同じく第２の実施形態を示し、遺伝的アルゴリズムにおける変異過程のＰＡＤ図。
【図２７】同じく第２の実施形態を示し、遺伝的アルゴリズムにおける交叉過程のＰＡＤ図。
【図２８】同じく第２の実施形態を示し、部分アプリの除去結果の説明図。
【符号の説明】
【０１０８】
３０１  値域集合高階グラフデータベース
３０２  値域集合高階グラフ管理サーバ
３０３  ソフトウェア部品リポジトリ
３０４  クライアント
２３０３  コンポ組合せ検索機能
２３０５  コンポ組合せリスト
２４０６  アプリ自動生成システム
２４０８  コンポ組合せランダム生成機能
２４０９  値域集合高階グラフ制約機能
【図１】
2007304685.tif 000003
【図２】
2007304685.tif 000004
【図３】
2007304685.tif 000005
【図４】
2007304685.tif 000006
【図５】
2007304685.tif 000007
【図６】
2007304685.tif 000008
【図７】
2007304685.tif 000009
【図８】
2007304685.tif 000010
【図９】
2007304685.tif 000011
【図１０】
2007304685.tif 000012
【図１１Ａ】
2007304685.tif 000013
【図１１Ｂ】
2007304685.tif 000014
【図１２】
2007304685.tif 000015
【図１３】
2007304685.tif 000016
【図１４】
2007304685.tif 000017
【図１５】
2007304685.tif 000018
【図１６】
2007304685.tif 000019
【図１７】
2007304685.tif 000020
【図１８】
2007304685.tif 000021
【図１９】
2007304685.tif 000022
【図２０】
2007304685.tif 000023
【図２１】
2007304685.tif 000024
【図２２】
2007304685.tif 000025
【図２３】
2007304685.tif 000026
【図２４】
2007304685.tif 000027
【図２５】
2007304685.tif 000028
【図２６】
2007304685.tif 000029
【図２７】
2007304685.tif 000030
【図２８】
2007304685.tif 000031