(57)【要約】      （修正有）【課題】相互に前後関係を有する複数の処理のそれぞれに利用する処理エンジンの選択を効率化すること。【解決手段】相互に前後関係を有する複数の処理のそれぞれについて、複数の処理エンジンの中から当該処理に利用する処理エンジンを選択する処理エンジン選択装置１０は、複数の処理のそれぞれについて、処理エンジンごとに、当該処理より前の各処理に関して選択された処理エンジンの１以上の組み合わせの中から、当該処理エンジンが最後段に追加された場合のコストが最小となる組み合わせを選択する選択部１１を有する。前記コストは、前記組み合わせに属する各処理エンジンの処理に要される第一のコスト（処理コスト記憶部１１２に記憶）と、前記組み合わせに属する処理エンジンのうち前後関係において隣接する処理に係る処理エンジンの接続に要される第二のコスト（接続コスト記憶部１１３に記憶）とを含む。【選択図】図２
2015212911.tif 000002
【特許請求の範囲】
【請求項１】
相互に前後関係を有する複数の処理のそれぞれについて、複数のソフトウェアの中から当該処理に利用するソフトウェアを選択するソフトウェア選択装置であって、
前記複数の処理のそれぞれについて、前記ソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された場合のコストが最小となる組み合わせを選択する選択部を有し、
前記コストは、前記組み合わせに属する各ソフトウェアの処理に要される第一のコストと、前記組み合わせに属するソフトウェアのうち前記前後関係において隣接する処理に係るソフトウェアの接続に要される第二のコストとを含む、
ことを特徴とするソフトウェア選択装置。
【請求項２】
前記選択部は、一つ後に複数の後段処理を有する処理については、前記ソフトウェアごとに選択される組み合わせの中から、コストが最小となる組み合わせを選択する、
ことを特徴とする請求項１記載のソフトウェア選択装置。
【請求項３】
前記選択部は、前記複数の処理のそれぞれについて、前記複数のソフトウェアのうち、当該処理に関して選択候補であることが記憶部に記憶されているソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された後のコストが最小となる組み合わせを選択する、
ことを特徴とする請求項１又は２記載のソフトウェア選択装置。
【請求項４】
前記選択部は、前記複数の処理のそれぞれについて、前記複数のソフトウェアのうち、データの入力後の処理の開始時期が一つ前の処理に関して選択されたソフトウェアと同じ型のソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された場合のコストが最小となる組み合わせを選択する、
ことを特徴とする請求項１乃至３いずれか一項記載のソフトウェア選択装置。
【請求項５】
相互に前後関係を有する複数の処理のそれぞれについて、複数のソフトウェアの中から当該処理に利用するソフトウェアを選択するソフトウェア選択装置が、
前記複数の処理のそれぞれについて、前記ソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された場合のコストが最小となる組み合わせを選択する処理を実行し、
前記コストは、前記組み合わせに属する各ソフトウェアの処理に要される第一のコストと、前記組み合わせに属するソフトウェアのうち前記前後関係において隣接する処理に係るソフトウェアの接続に要される第二のコストとを含む、
ことを特徴とするソフトウェア選択方法。
【請求項６】
相互に前後関係を有する複数の処理のそれぞれについて、複数のソフトウェアの中から当該処理に利用するソフトウェアを選択するソフトウェア選択装置に、
前記複数の処理のそれぞれについて、前記ソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された場合のコストが最小となる組み合わせを選択する処理を実行させ、
前記コストは、前記組み合わせに属する各ソフトウェアの処理に要される第一のコストと、前記組み合わせに属するソフトウェアのうち前記前後関係において隣接する処理に係るソフトウェアの接続に要される第二のコストとを含む、
ことを特徴とするソフトウェア選択プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア選択装置、ソフトウェア選択方法、及びソフトウェア選択プログラムに関する。
【背景技術】
【０００２】
アプリケーション実行基盤、ソフトウェアプラットフォーム、アプリケーションサーバ、又はミドルウェア等といった、ソフトウェアの基盤となる部分（以下、「処理エンジン」という。）について、様々なものが利用可能となっている。各処理エンジンは、処理内容に関して得手不得手が存在するため、或る処理エンジンの不得手な部分を補うために、複数の処理エンジンが組み合わされて利用されることが考えられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平８−２０２５４１号公報
【特許文献２】特開昭６２−１０６５４２号公報
【特許文献３】特開２００６−１０７４７７号公報
【特許文献４】特開２０１２−２４７９５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
例えば、ソフトウェアに関して定義されたＤＦＤ（Data Flow Diagram）を構成する処理（プロセス）ごとに、当該処理に利用する処理エンジンを選択することで、当該ソフトウェアが利用する処理エンジンの組み合わせを決定することができる。各処理に対して割り当てる処理エンジンの選択基準として、当該処理に対する処理コストの低さが挙げられる。すなわち、各処理の処理コストを低くすることができれば、当該ソフトウェア全体の処理コストを低くすることができる。
【０００５】
しかしながら、各処理エンジン間においては、データの伝送に関するコストが発生する。また、各処理エンジンが処理可能なデータ構造は異なるため、隣接する処理に対して、相互に異なる処理エンジンが割り当てられた場合、当該処理エンジン間において、データ変換等の処理が必要とされる。したがって、処理毎に最適化が図られたとしても、処理の組み合わせ全体としては最適化が図られているとは限らない。
【０００６】
全ての組み合わせに関して、各処理の処理エンジンの処理コスト及び各処理エンジン間のコストを算出すれば、最もコストが低くなる処理エンジンの組み合わせを選択することができる。しかしながら、この場合、計算量は指数オーダとなり、効率的ではない。例えば、ＤＦＤを構成する処理数をＮ、処理エンジンの種類の数をＭとすると、計算量は、Ｏ（ＭＮ）となってしまう。
【０００７】
なお、上記のような課題は、処理エンジン等、特定のソフトウェアに限られたものではなく、相互に前後関係を有する複数の処理のそれぞれについて利用可能なソフトウェアが複数有る場合に、共通に生じうるものであると考えられる。
【０００８】
そこで、一側面では、相互に前後関係を有する複数の処理のそれぞれに利用するソフトウェアの選択を効率化することを目的とする。
【課題を解決するための手段】
【０００９】
一つの案では、相互に前後関係を有する複数の処理のそれぞれについて、複数のソフトウェアの中から当該処理に利用するソフトウェアを選択するソフトウェア選択装置は、前記複数の処理のそれぞれについて、前記ソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された場合のコストが最小となる組み合わせを選択する選択部を有し、前記コストは、前記組み合わせに属する各ソフトウェアの処理に要される第一のコストと、前記組み合わせに属するソフトウェアのうち前記前後関係において隣接する処理に係るソフトウェアの接続に要される第二のコストとを含む。
【発明の効果】
【００１０】
一態様によれば、相互に前後関係を有する複数の処理のそれぞれに利用するソフトウェアの選択を効率化することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態における処理エンジン選択装置のハードウェア構成例を示す図である。
【図２】本発明の実施の形態における処理エンジン選択装置の機能構成例を示す図である。
【図３】処理エンジン選択装置が実行する処理手順の一例を説明するためのフローチャートである。
【図４】ＤＦＤの一例を示す図である。
【図５】作業用テーブルの構成例を示す図である。
【図６】複数の最後段処理を含むＤＦＤの一例を示す図である。
【図７】各処理までの処理エンジン型の組み合わせの選択処理の処理手順の一例を説明するためのフローチャートである。
【図８】処理コスト記憶部の構成例を示す図である。
【図９】ユーザ要求記憶部の構成例を示す図である。
【図１０】処理１に関する作業用レコードの第一の例を示す図である。
【図１１】処理１に関する作業用レコードの第二の例を示す図である。
【図１２】接続コスト記憶部の構成例を示す図である。
【図１３】処理２に関する作業用レコードの例を示す図である。
【図１４】本実施の形態における処理エンジン型の選択結果の例を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面に基づいて本発明の実施の形態を説明する。図１は、本発明の実施の形態における処理エンジン選択装置のハードウェア構成例を示す図である。図１の処理エンジン選択装置１０は、それぞれバスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、及びインタフェース装置１０５等を有する。
【００１３】
処理エンジン選択装置１０での処理を実現するプログラムは、記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００１４】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従って処理エンジン選択装置１０に係る機能を実行する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。
【００１５】
なお、記録媒体１０１の一例としては、ＣＤ−ＲＯＭ、ＤＶＤディスク、又はＵＳＢメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置１０２の一例としては、ＨＤＤ（Hard Disk Drive）又はフラッシュメモリ等が挙げられる。記録媒体１０１及び補助記憶装置１０２のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
【００１６】
本実施の形態において、処理エンジン選択装置１０は、例えば、ＤＦＤ（Data Flow Diagram）を構成する各処理（プロセス）に割り当てる処理エンジン型を選択するために用いられる。処理に割り当てる処理エンジン型とは、当該処理において利用される処理エンジン型をいう。本実施の形態において、処理エンジンとは、アプリケーション実行基盤、ソフトウェアプラットフォーム、アプリケーションサーバ、又はミドルウェア等といった、ソフトウェアの基盤となる部分をいう。例えば、並列分散処理ソフトウェアである、「Ｉｎｔｅｒｓｔａｇｅ  Ｂｉｇ  Ｄａｔａ  Ｐａｒａｌｌｅｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｅｒｖｅｒ」、基幹オンラインシステム基盤である、「Ｉｎｔｅｒｓｔａｇｅ  Ｂｕｓｉｎｅｓｓ  Ａｐｐｌｉｃａｔｉｏｎ  Ｓｅｒｖｅｒ」、複合イベント処理ソフトウェアである、「Ｉｎｔｅｒｓｔａｇｅ  Ｂｉｇ  Ｄａｔａ  Ｃｏｍｐｌｅｘ  Ｅｖｅｎｔ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｅｒｖｅｒ」は、処理エンジンの具体的な一例である。また、Ｈａｄｏｏｐ、データマイニング系のＲシステム、Ｅｓｐｅｒ  ＣＥＰ（Complex Event Processing）等も、処理エンジンの具体的な一例である。具体的な各処理エンジンの製品等、処理エンジンの種類に対する概念を、「処理エンジン型」という。例えば、上記では、６つの処理エンジン型が例示されている。
【００１７】
図２は、本発明の実施の形態における処理エンジン選択装置の機能構成例を示す図である。図２において、処理エンジン選択装置１０は、選択部１１を有する。選択部１１は、ＤＦＤを構成する各処理に利用する処理エンジン型を選択する。なお、選択部１１は、処理エンジン選択装置１０にインストールされたプログラムがＣＰＵ１０４に実行させる処理により実現される。
【００１８】
処理エンジン選択装置１０は、また、ＤＦＤ記憶部１１１、処理コスト記憶部１１２、接続コスト記憶部１１３、ユーザ要求記憶部１１４、及び作業用テーブル１１５等を利用する。これら各記憶部は、補助記憶装置１０２、又は処理エンジン選択装置１０にネットワークを介して接続される記憶装置等を用いて実現可能である。作業用テーブル１１５は、メモリ装置１０３を用いて実現されてもよい。
【００１９】
ＤＦＤ記憶部１１１は、ＤＦＤの定義情報を記憶する。処理コスト記憶部１１２は、ＤＦＤを構成する処理ごとに、当該処理に利用可能な各処理エンジン型の処理コストを記憶する。処理コストとは、処理エンジンによる処理自体に要されるコストである。
【００２０】
接続コスト記憶部１１３は、二つの処理エンジン型の組ごとに、当該処理エンジン型間における接続コストを記憶する。接続コストとは、処理の前後関係において隣接する処理のそれぞれに対する処理エンジン型の接続に要されるコストをいう。例えば、接続コストは、前段の処理に係る処理エンジンから後段の処理に係る処理エンジンへのデータの伝送や、データの変換等に要されるコストである。すなわち、各処理エンジン型において解釈可能なデータ構造は異なる。したがって、処理エンジン型間においてデータ形式の変換が必要とされる。
【００２１】
なお、処理コストや接続コストにおける「コスト」の具体的な内容は、例えば、所要時間であってもよい。又は、コストは、処理エンジンの利用等によって生じる費用（金額）であってもよいし、他の概念によって表現されてもよい。また、コストは、絶対値であってもよいし、相対値であってもよい。更に、処理コスト記憶部１１２又は接続コスト記憶部１１３に記憶される処理コスト又は接続コストは、推定値又は予測値でもよい。
【００２２】
ユーザ要求記憶部１１４は、ＤＦＤを構成する各処理に適用される処理型又は処理エンジン型について、ユーザによる要求を記憶する。すなわち、ユーザは、予め、一部又は全部の処理について、処理型又は処理エンジン型を指定することができる。各処理に対する処理エンジン型の選択において、ユーザによる要求は、最優先される。なお、処理型とは、処理エンジンに対するデータの入力後の処理の開始時期（開始タイミング）に関する型（種別）をいう。本実施の形態において、処理型には、バッチ処理及びリアルタイム処理が有る。
【００２３】
作業用テーブル１１５は、ＤＦＤを構成する各処理に理押する処理エンジン型を選択する過程において利用される作業用のテーブルである。
【００２４】
以下、処理エンジン選択装置１０が実行する処理手順について説明する。図３は、処理エンジン選択装置が実行する処理手順の一例を説明するためのフローチャートである。
【００２５】
ステップＳ１０１において、選択部１１は、ＤＦＤ記憶部１１１に記憶されているＤＦＤを構成する処理群を、処理の実行順に応じて整列する。例えば、各処理が、当該処理の後段の処理よりも順番が前になるようにソートされる。
【００２６】
図４は、ＤＦＤの一例を示す図である。図４において、楕円は、処理を示す。楕円の中の数値は、各処理を識別する識別子（以下、「処理番号」という。）を示す。処理番号がＮである処理を、処理Ｎという。また、楕円の間の円筒形は、データストア（記憶部）を示す。
【００２７】
図４では、処理１〜処理６を含むＤＦＤが示されている。処理１の後は、処理２及び処理３に分岐する。また、処理３及び処理５の後は、処理６に合流する。図４に示されるＤＦＤの場合、ステップＳ１０１では、例えば、処理１、処理２、処理３、処理４、処理５、処理６といった順に、各処理が整列される。
【００２８】
続いて、選択部１１は、変数ｉに１を代入する。変数ｉは、処理対象の処理番号を格納する変数である。続いて、選択部１１は、処理ｉまでの処理エンジン型の組み合わせの選択処理を実行する（Ｓ１０３）。ステップＳ１０３では、処理ｉに対して選択可能な処理エンジン型ごとに、処理ｉの一つ前の各処理について選択された処理エンジン型の組み合わせの中から、当該処理エンジン型を最後段に追加した場合のコストが最小となる組み合わせが選択される。選択された組み合わせに対して、当該処理エンジン型が追加される。
【００２９】
続いて、選択部１１は、変数ｉの値が、全処理数以上であるか否かを判定する（Ｓ１０４）。すなわち、ステップＳ１０３が、ＤＦＤを構成する全ての処理に関して実行されたか否かが判定される。なお、本実施の形態では、全処理数は「６」である。
【００３０】
変数ｉの値が、全処理数未満である場合（Ｓ１０４でＮｏ）、選択部１１は、変数ｉに１を加算して、ステップＳ１０３以降を繰り返す。
【００３１】
ステップＳ１０３が、全ての処理に関して実行されることにより、作業用テーブル１１５は、例えば、図５に示されるような状態となる。
【００３２】
図５は、作業用テーブルの構成例を示す図である。図５に示される作業用テーブル１１５には、行方向に処理が配置され、列方向に、処理エンジン型が配置されている。すなわち、Ａ〜Ｄは、それぞれ処理エンジン型を示す。
【００３３】
図５に示されるように、作業用テーブル１１５には、処理１〜処理６のそれぞれについて、当該処理に選択可能な処理エンジン型ごとに、当該処理エンジン型を最後段に含む処理エンジン型の組み合わせの内容及び当該組み合わせのコストが記憶される。すなわち、各処理のレコード（以下、「作業用レコード」という。）において、当該処理に対して選択可能な処理エンジン型の列の下段の行には、当該処理エンジン型を最後段とする処理エンジン型の組み合わせを示す情報（以下、「組み合わせ情報」という。）が記憶される。上段の行には当該組み合わせのコストが記憶される。組み合わせ情報は、当該組み合わせを構成する処理エンジン型ごとに「＜処理番号＞：＜処理エンジン型＞」の表記を含む。各表記は、処理順に配列され、「，」によって区切られる。
【００３４】
なお、各処理に関して選択可能な処理型及び処理エンジン型には、後述されるような制限が有る。例えば、処理１については、処理エンジン型Ｃに関してのみ、コストとして「３５」が計算されている。後述されるように、処理１については、処理エンジン型Ｃを利用することが、ユーザにより指定されているからである。
【００３５】
一方、処理２については、処理エンジン型Ｃと処理エンジン型Ｄとが選択可能である。したがって、処理２については、処理エンジン型Ｃが選択された場合のコスト及び組み合わせ情報と、処理エンジン型Ｄが選択された場合のコスト及び組み合わせ情報とが記憶される。例えば、処理２に関して、処理エンジン型Ｃが選択された場の処理エンジンの組み合わせの選択結果は、「１：Ｃ，２：Ｃ」である。これは、処理１について処理エンジン型Ｃが選択され、処理２について処理エンジン型Ｃが選択されたことを示す。
【００３６】
続いて、選択部１１は、ＤＦＤにおいて最後段処理が、複数有るか否かを判定する（Ｓ１０６）。最後段処理とは、ＤＦＤによって定義されるフローにおいて末端となる処理をいう。図４に示されるＤＦＤにおいて、最後段処理は、処理６の一つである。一方、例えば、図６に示されるＤＦＤについては、最後段処理は、複数存在する。
【００３７】
図６は、複数の最後段処理を含むＤＦＤの一例を示す図である。図６に示されるＤＦＤでは、処理５及び処理８の二つの処理が最後段処理である。
【００３８】
最後段処理が一つである場合（Ｓ１０６でＮｏ）、選択部１１は、当該最後段処理に関する作業用レコードの内容を出力する（Ｓ１０７）。図５の例では、処理６について、処理エンジン型Ｃの列に記憶されている内容が出力される。
【００３９】
一方、最後段処理が複数である場合（Ｓ１０６でＹｅｓ）、選択部１１は、各最後段処理までの処理エンジン型の組み合わせのコストをマージする（Ｓ１０８）。この際、各組み合わせにおいて同じ処理に関するコストの重複は排除される。例えば、図６の例では、処理５について、「処理１→処理２→処理３→処理４→処理５」の各処理について選択された処理エンジン型の組み合わせが作業用テーブル１１５に記憶される。また、処理８について、「処理１→処理２→処理３→処理６→処理７→処理８」の各処理について選択された処理エンジン型の組み合わせが作業用テーブル１１５に記憶される。二つの組み合わせにおいて、「処理１→処理２→処理３」は、重複している。したがって、当該重複部分についてのコストについては、２重に計算されないように、二つの組み合わせのコストが合算される。具体的には、二つの組み合わせのコストの和から、「処理１→処理２→処理３」に係るコストが減算される。
【００４０】
続いて、選択部１１は、マージ結果を出力する（Ｓ１０９）。
【００４１】
続いて、ステップＳ１０３の詳細について説明する。図７は、各処理までの処理エンジン型の組み合わせの選択処理の処理手順の一例を説明するためのフローチャートである。
【００４２】
ステップＳ２０１において、選択部１１は、処理ｉに対して利用可能な処理エンジン型のうち、未処理の処理エンジン型の一つを代入する。変数ｊは、処理対象とする処理エンジン型を格納するための変数である。以下、変数ｊに係る処理エンジン型を、「処理エンジン型ｊ」という。未処理の処理エンジン型とは、ステップＳ２０２以降に関して処理対象とされていない処理エンジン型をいう。
【００４３】
処理ｉに対して利用可能な処理エンジン型は、処理コスト記憶部１１２を参照して特定可能である。
【００４４】
図８は、処理コスト記憶部の構成例を示す図である。図８において、処理コスト記憶部１１２には、ＤＦＤを構成する処理１〜処理６について、当該処理に利用可能な処理エンジン型ごとに、当該処理エンジン型による当該処理の処理コストが記憶されている。各処理について値が記憶されていない処理エンジン型については、当該処理に対して利用可能でないことを示す。なお、図８において、列方向の「Ａ」〜「Ｄ」は、処理エンジン型を示す。
【００４５】
例えば、処理１であれば、処理エンジン型Ｃ及びＤを利用可能であり、それぞれの処理コストは、「３５」、「６０」であることが示されている。処理６であれば、処理エンジン型Ａ、Ｃ、又はＤを利用可能であり、それぞれの処理コストは、「４００」、「１００」、「１０５」であることが示されている。
【００４６】
なお、処理コスト記憶部１１２には、各処理エンジン型の処理型についても記憶されている。図８では、処理エンジン型Ａ及びＢの処理型は、バッチ処理であり、処理エンジン型Ｃ及びＤの処理型は、リアルタイム処理であることが示されている。
【００４７】
続いて、選択部１１は、ユーザ要求記憶部１１４から、処理ｉに関するレコード（以下、「ユーザ要求レコード」という。）を取得する（Ｓ２０２）。
【００４８】
図９は、ユーザ要求記憶部の構成例を示す図である。図９において、ユーザ要求記憶部１１４には、処理１〜処理６のうち、処理型又は処理エンジン型について予めユーザによる指定が有る処理について、指定された処理型又は処理エンジン型が記憶されている。図９には、処理１及び処理６の処理エンジン型が「Ｃ」であり、処理４の処理型がバッチ処理であることが指定された例が示されている。
【００４９】
取得されたユーザ要求レコードに、処理型又は処理エンジン型が指定されている場合（Ｓ２０３でＹｅｓ）、選択部１１は、処理エンジン型ｊが、当該ユーザ要求レコードにおける指定に適合するか否かを判定する（Ｓ２０４）。具体的には、処理エンジン型ｊの処理型が、当該ユーザ要求レコードに指定された処理型であるか、又は処理エンジン型ｊが、当該ユーザ要求レコードに指定された処理エンジン型であるか否かが判定される。処理エンジン型ｊが、当該ユーザ要求レコードの指定に適合しない場合（Ｓ２０４でＮｏ）、ステップＳ２０１以降が実行される。すなわち、処理ｉに対して利用可能な処理エンジン型のうち、他の処理エンジン型についてステップＳ２０２以降が実行される。処理エンジン型ｊが、当該ユーザ要求レコードの指定に適合する場合（Ｓ２０４でＹｅｓ）、ステップＳ２０７に進む。
【００５０】
一方、ステップＳ２０２において取得されたユーザ要求レコードに、処理型及び処理エンジン型のいずれについても指定が無い場合（Ｓ２０３でＮｏ）、選択部１１は、処理ｉに前段処理が有るか否かをＤＦＤに基づいて判定する（Ｓ２０５）。処理ｉの前段処理とは、処理ｉと直列的な関係を有し、処理ｉの一つ前に実行される処理をいう。
【００５１】
処理ｉに前段処理が無い場合（Ｓ２０５でＮｏ）、ステップＳ２０７に進む。処理ｉに前段処理が有る場合（Ｓ２０５でＹｅｓ）、選択部１１は、処理エンジン型ｊの処理型が、いずれかの前段処理に対して選択されている処理型と同じであるか否かを判定する（Ｓ２０６）。処理エンジン型ｊの処理型が、いずれの前段処理に対して選択されている処理型とも異なる場合（Ｓ２０６でＮｏ）、ステップＳ２０１以降が実行される。処理エンジン型ｊの処理型が、いずれかの前段処理に対して選択されている処理型と同じである場合（Ｓ２０６でＹｅｓ）、ステップＳ２０７に進む。
【００５２】
すなわち、処理ｉに、処理エンジン型の指定がある場合、処理ｉについては、当該処理エンジン型のみが選択可能（選択候補）となる。また、処理ｉに処理型の指定がある場合、処理ｉについては、当該処理型に対応した処理エンジン型のみが選択可能（選択候補）となる。また、処理ｉに処理型及び処理エンジン型のいずれの指定も無い場合、処理ｉについては、いずれかの前段処理の処理型に対応した処理エンジン型が、選択可能（選択候補）となる。ユーザによる指定がない場合に、前段処理における処理型に合わせられるのは、ユーザの意図しないタイミングで、処理型が変更されるのを回避するためのである。すなわち、本実施の形態では、或る処理について処理型が指定された場合、ユーザは、当該処理以降に関して、同じ処理型で処理が実行されることを予測又は期待することができる。
【００５３】
ステップＳ２０７において、選択部１１は、処理ｉに前段処理が有るか否かをＤＦＤに基づいて判定する。処理ｉに前段処理がない場合（Ｓ２０７でＹｅｓ）、選択部１１は、処理ｉに関する処理エンジン型ｊの処理コストを、処理コスト記憶部１１２から取得する（Ｓ２０８）。続いて、選択部１１は、処理ｉに対して処理エンジン型ｊが選択されたことを示す組み合わせ情報（「ｉ：ｊ」）と、取得された処理コストとを、処理ｉの作業用レコードの処理エンジン型ｊの列に記憶する（Ｓ２１２）。
【００５４】
続いて、選択部１１は、処理ｉに利用可能な処理エンジン型のうち、ユーザ要求記憶部１１４に記憶されている要求を満たす全ての処理エンジン型について、ステップＳ２０１以降の処理が実行されたか否かを判定する（Ｓ２１３）。未処理の処理エンジン型が有る場合（Ｓ２１３でＮｏ）、当該処理エンジン型についてステップＳ２０１以降が実行される。
【００５５】
未処理の処理エンジン型が無い場合（Ｓ２１３でＹｅｓ）、ステップＳ２１４に進む。例えば、処理ｉが処理１である場合、この時点において、作業用テーブル１１５には、図１０に示されるような作業用レコードが記憶されている。
【００５６】
図１０は、処理１に関する作業用レコードの第一の例を示す図である。図１０では、処理エンジン型Ｃの列に、コストと組み合わせ情報とが記憶されている。図８より、処理１については、処理エンジン型Ｃ及び処理エンジン型Ｄが利用可能であり、それぞれの処理エンジン型による処理コストは「３５」、「６０」である。但し、図９より、処理１については、処理エンジン型Ｃを利用することが、ユーザによって指定されている。したがって、処理１については、処理エンジン型Ｃに関する処理コストと、処理１に対して処理エンジン型Ｃが選択されたことを示す組み合わせ情報（「１：Ｃ」）とが記憶される。仮に、処理１に関する処理型及び処理エンジン型について、ユーザによる指定が無い場合、処理１に関しては、図１１に示されるような作業用レコードが、作業用テーブル１１５に記憶される。
【００５７】
図１１は、処理１に関する作業用レコードの第二の例を示す図である。図１１では、処理エンジン型Ｃに対する処理コスト及び組み合わせ情報に加え、処理エンジン型Ｄに対する処理コスト及び組み合わせ情報が記憶された例が示されている。図１１に示されるように、複数の処理エンジン型に関してコスト及び組み合わせ情報が記憶されている状態は、当該処理までの処理エンジン型の組み合わせが一意に確定されていないことを示す。
【００５８】
ステップＳ２１４において、選択部１１は、処理ｉには後段処理が複数有るか否かを判定する。処理ｉの後段処理とは、処理ｉと直列的な関係を有し、処理ｉの一つ後に実行される処理をいう。処理ｉの後段処理が複数有る場合とは、処理ｉの後で分岐が発生する場合である。図４の例では、処理１には、後段処理として処理２及び処理４が存在する。
【００５９】
処理ｉに後段処理が複数有る場合（Ｓ２１４でＹｅｓ）、選択部１１は、処理ｉの作業用レコードのうち、コストが最小でない組み合わせを削除する（Ｓ２１５）。例えば、処理１の作業用レコードが、図１１に示されるような場合、コストが「６０」である組み合わせに係る列は削除される。その結果、処理１の作業用レコードは、図１０に示されるようになる。
【００６０】
すなわち、本実施の形態では、処理ｉに後段処理が複数ある場合、処理ｉまでの処理エンジン型の組み合わせのうち、コストが最小である組み合わせによって、処理ｉまでの処理エンジン型の組み合わせが確定される。そうすることにより、処理ｉより後の分岐先の各処理に関してコストが最小となる処理エンジン型の組み合わせを探索するための計算量を削減することができる。すなわち、処理ｉと各後段処理における処理エンジン型との接続コストを考慮すれば、処理ｉまでの処理エンジン型の組み合わせのうち、コストが最小である組み合わせは、必ずしも全体の組み合わせに対して最適な組み合わせであるとは限らない。しかし、本実施の形態は、このような可能性を無視することで、現実的な計算量の範囲内において、最適な解に近似した解を得ようとする。
【００６１】
一方、ステップＳ２０７において、処理ｉに前段処理が有る場合（Ｓ２０７でＹｅｓ）、選択部１１は、処理ｉの全ての前段処理の作業用レコードを取得する（Ｓ２０９）。すなわち、処理ｉが、図４に示される処理２、処理３、処理４、又は処理５のように前段処理を一つだけ有する場合は、当該一つの前段処理の作業用レコードが取得される。一方、処理ｉが、処理６のように前段処理を複数有する場合は、当該複数の前段処理のそれぞれの作業用レコードが取得される。
【００６２】
続いて、選択部１１は、取得された作業用レコードに記憶されている組み合わせごとに、当該組み合わせに対して処理エンジン型ｊを最後段に追加（又は接続）した場合の、処理コスト及び接続コストの総和を算出する（Ｓ２１０）。
【００６３】
ここでは、処理ｉは処理２であり、処理エンジン型ｊは、処理エンジン型Ｃであるとする。また、便宜上、前段処理である処理１の作業用レコードは、図１１に示される通りであるとする。この場合、図１１に示される、「１：Ｃ」の組み合わせに対して、「２：Ｃ」を追加した「１：Ｃ，２：Ｃ」の組み合わせに対するコスト１と、「１：Ｄ」の組み合わせに対して「２：Ｃ」を追加した「１：Ｄ，２：Ｃ」の組み合わせに対するコスト２とが算出される。
【００６４】
コスト１は、「処理エンジン型Ｃによる処理１の処理コスト＋処理エンジン型Ｃ同士の接続コスト＋処理エンジン型Ｃによる処理２の処理コスト」によって算出される。コスト２は、「処理エンジン型Ｄによる処理１の処理コスト＋処理エンジン型Ｄと処理エンジン型Ｃとの接続コスト＋処理エンジン型Ｃによる処理２の処理コスト」によって算出される。
【００６５】
図８より、処理エンジン型Ｃによる処理１の処理コストは、「３５」である。処理エンジン型Ｃによる処理２の処理コストは、「４０」である。処理エンジン型Ｄによる処理１の処理コストは、「６０」である。
【００６６】
一方、接続コストは、接続コスト記憶部１１３を参照して特定することができる。図１２は、接続コスト記憶部の構成例を示す図である。図１２において、接続コスト記憶部１１３は、行方向の処理エンジン型と、列方向の処理エンジン型との組ごとに、当該組に係る処理エンジン型間の接続コストを記憶する。
【００６７】
図１２によれば、処理エンジン型Ｃ同士の接続コストは、「５」である。処理エンジン型Ｄと処理エンジン型Ｃとの接続コストは、「２０」である。
【００６８】
上記より、
コスト１＝３５＋５＋４０＝８０
コスト２＝６０＋２０＋４０＝１２０
となる。
【００６９】
続いて、選択部１１は、コストが最小である組み合わせを、処理ｉの処理エンジン型ｊに対する組み合わせとして選択する（Ｓ２１１）。ここでは、コスト１に係る組み合わせである、「１：Ｃ，２：Ｃ」が選択される。
【００７０】
このように、本実施の形態では、ＤＦＤを構成する処理ごとに、当該処理において選択可能な処理エンジン型について、コストが最小となる組み合わせが選択される。換言すれば、コストが最小でない組み合わせは、以降の処理に関して計算の対象から除外される。したがって、全ての組み合わせについてコストが計算される場合に比べて、計算量を削減することができる。
【００７１】
続いて、ステップＳ２１２以降が実行される。ここでは、ステップＳ２１２において、処理２の作業用レコードの処理エンジン型Ｃの列のコストに８０が記憶され、組み合わせ情報に「１：Ｃ，２：Ｃ」が記憶される。
【００７２】
なお、本実施の形態において、処理１に関する本来のレコードは、図１０に示される通りである。したがって、処理２の処理エンジン型Ｃについては、コスト１のみが算出される。また、図８より、処理２には、処理エンジン型Ａ、Ｃ、及びＤを利用可能であるが、ステップＳ２０６の作用により、処理エンジン型Ａは、除外される。したがって、処理２については、処理エンジン型Ｃと処理エンジン型Ｄとのそれぞれについて、ステップＳ２０９以降が実行される。その結果、処理２については、図１３に示されるような、作業用レコードが記憶される。
【００７３】
図１３は、処理２に関する作業用レコードの例を示す図である。図１３に示される処理２の作業用レコードには、処理エンジン型Ｃに関して「１：Ｃ，２：Ｃ」の組み合わせ情報が記憶され、処理エンジン型Ｄに関して「１：Ｃ，２：Ｄ」が記憶されている。処理ｉが処理２の時点では、処理２までの処理エンジン型の組み合わせについて、「１：Ｃ，２Ｃ」と「１：Ｃ，２：Ｄ」とのいずれが最適であるかは確定されていない。したがって、処理２の作業用レコードには二つの組み合わせ情報が記憶されている。
【００７４】
図４における処理３以降について具体的に説明する。処理３については、図８によれば、処理エンジン型Ａ、Ｃ、及びＤを利用可能である。但し、処理エンジン型Ａについては、処理３の前段処理である処理２における処理エンジン型Ｃ及びＤのいずれとも処理型が異なる。したがって、処理エンジン型Ａは、組み合わせの対象から除外され、処理エンジン型Ｃ及びＤのそれぞれに関して、処理２における二つの組み合わせに追加された場合のコストが計算される。
【００７５】
処理エンジン型Ｃが、「１：Ｃ，２：Ｃ」の組み合わせに追加された場合のコスト３と、「１：Ｃ，２：Ｄ」の組み合わせに追加された場合のコスト４とのそれぞれは、以下の通りである。
【００７６】
コスト３＝８０＋５＋９０＝１７５
コスト４＝１０５＋２０＋９０＝２１５
コスト３＜コスト４であるから、処理３の作業用レコードにおいて、処理エンジン型Ｃに関するコストには「１７５」が記憶され、組み合わせ情報には「１：Ｃ，２：Ｃ，３：Ｃ」が記憶される（図５参照）。
【００７７】
一方、処理エンジン型Ｄが、「１：Ｃ，２：Ｃ」の組み合わせに追加された場合のコスト５と、「１：Ｃ，２：Ｄ」の組み合わせに追加された場合のコスト６とのそれぞれは、以下の通りである。
【００７８】
コスト５＝８０＋２０＋４０＝１４０
コスト６＝１０５＋１０＋４０＝１５５
コスト５＜コスト６であるから、処理３の作業用レコードにおいて、処理エンジン型Ｄに関するコストには「１４０」が記憶され、組み合わせ情報には「１：Ｃ，２：Ｃ，３：Ｄ」が記憶される（図５参照）。
【００７９】
処理４については、図８によれば、処理エンジン型Ａ〜Ｄを利用可能である。但し、処理４のユーザ要求レコード（図９）において、処理４の処理型はバッチ型であることが指定されている。したがて、処理４については、処理エンジン型Ａ及びＢのそれぞれに関して、処理３における二つの組み合わせに追加された場合のコストが計算される。
【００８０】
処理エンジン型Ａが、処理４の前段処理である処理１における「１：Ｃ」の組み合わせに追加された場合のコスト７は、以下の通りである。
【００８１】
コスト７＝３５＋９０＋２００＝３２５
また、処理エンジン型Ｂが、処処理１における「１：Ｃ」の組み合わせに追加された場合のコスト８は、以下の通りである。
【００８２】
コスト８＝３５＋８０＋３００＝４１５
したがって、処理４の作業用レコードには、処理エンジン型Ａに対して、コスト「３２５」が記憶され、組み合わせ情報「１：Ｃ，４：Ａ」が記憶される。また、処理エンジン型Ｂに対して、コスト「４１５」が記憶され、組み合わせ情報「１：Ｃ，４：Ｂ」が記憶される。
【００８３】
処理５については、図８によれば、処理エンジン型Ｂ及び処理エンジン型Ｃを利用可能である。但し、処理５の前段処理である処理４における処理エンジン型Ａ及びＢの処理型は、いずれもバッチ処理である。したがって、処理エンジン型Ｂに関して、処理４における二つの組み合わせに追加された場合のコストが計算される。
【００８４】
処理エンジン型Ｂが、処理４における「１：Ｃ，４：Ａ」に追加された場合のコスト９と、処理４における「１：Ｃ，４：Ｂ」に追加された場合のコスト１０とのそれぞれは、以下の通りである。
【００８５】
コスト９＝３２５＋５５＋３５０＝７３０
コスト１０＝４１５＋３０＋３５０＝７９５
コスト９＜コスト１０であるから、処理５の作業用レコードには、処理エンジン型Ｂに対して、コスト「７３０」が記憶され、組み合わせ情報「１：Ｃ，４：Ａ，５：Ｂ」が記憶される。
【００８６】
処理６については、図８によれば、処理エンジン型Ａ、Ｃ、及びＤを利用可能である。但し、処理６のユーザ要求レコード（図９）において、処理６には処理エンジン型Ｃを利用することが指定されている。したがって、処理６については、処理エンジン型Ｃに関して、処理６の前段処理である処理３の組み合わせと処理５の組み合わせとの組み合わせに、処理エンジン型Ｃが追加された場合のコストが計算される。ここで、処理３の組み合わせと処理５の組み合わせとの組み合わせとは、処理３における二つの組み合わせのそれぞれについて、処理５の一つの組み合わせが適用された２通りの組み合わせをいう。仮に、処理５に二つの組み合わせが有った場合、処理３の組み合わせと処理５の組み合わせとの組み合わせは、４通りとなる。
【００８７】
処理３における「１：Ｃ，２：Ｃ，３：Ｃ」の組み合わせと、処理５における「１：Ｃ，４：Ａ，５：Ｂ」の組み合わせとの組み合わせに対して処理エンジン型Ｃが追加された場合のコスト１１は、以下の通りである。
【００８８】
コスト１１＝７３０−３５＋８０＋１７５＋５＋１００＝１０５５
ここで、７３０は、処理５の組み合わせのコストであり、１７５は、処理３の組み合わせのコストであり、８０は、処理５の処理エンジン型Ｂと処理６の処理エンジン型Ｃとの接続コストであり、５は、処理３の処理エンジン型Ｃと、処理６の処理エンジン型Ｃとの接続コストである。また、−３５は、「１：Ｃ，２：Ｃ，３：Ｃ」と「１：Ｃ，４：Ａ，５：Ｂ」との重複部分である「１：Ｃ」に関する処理コストの２重の加算を回避するための項である。なお、２重の加算の回避は、図３のステップＳ１０８においても同様に行われる。
【００８９】
一方、処理３における「１：Ｃ，２：Ｃ，３：Ｄ」の組み合わせと、処理５における「１：Ｃ，４：Ａ，５：Ｂ」の組み合わせとの組み合わせに対して処理エンジン型Ｃが追加された場合のコスト１２は、以下の通りである。
コスト１２＝７３０−３５＋８０＋１４０＋２０＋１００＝１０３５
コスト１１＞コスト１２であるから、コスト１２に係る組み合わせに対して、処理６の処理エンジン型Ｃが追加される。その結果、処理６の作業用テーブル１１５には、処理エンジン型Ｃに対して、コスト「１０３５」が記憶され、組み合わせ情報「１：Ｃ，２：Ｃ，３：Ｄ，４Ａ，５Ｂ，６：Ｃ」が記憶される（図５参照）。
【００９０】
最後段処理に記憶された組み合わせ情報が、各処理に対して選択された処理エンジン型の組み合わせを示す情報である。
【００９１】
図１４は、本実施の形態における処理エンジン型の選択結果の例を示す図である。図１４に示されるように、本実施の形態では、処理１〜６について、処理エンジン型Ｃ、処理エンジン型Ｃ、処理エンジン型Ｄ、処理エンジン型Ａ、処理エンジン型Ｂ、及び処理エンジン型Ｃの組み合わせが選択された例が示されている。当該組み合わせが、コストにおいて最適な解に近似した解である。
【００９２】
上述したように、本実施の形態によれば、分岐及び合流や複数の入出力を含む任意の大きさのＤＦＤ構成する各処理について、複数の処理エンジン型の中から，ユーザの要求を反映しつつ、処理エンジン間のデータ伝送又は変換を含めてコストが最小に近くなるような処理エンジン型を、現実的な時間（Ｏ（Ｍ×Ｎ））で選択することができる。
【００９３】
よって、相互に前後関係を有する複数の処理のそれぞれに利用するソフトウェアの選択を効率化することができる。
【００９４】
なお、本実施の形態では、各処理に対して選択されるソフトウェアが処理エンジンである例について説明したが、他のソフトウェアの選択に関して、本実施の形態が適用されてもよい。例えば、ライブラリ又はコンポーネント等と呼ばれるソフトウェアを組み合わせてアプリケーションを作成する場合に、アプリケーションを構成する各処理について、複数の選択肢の中からいずれかのソフトウェアを選択する必要が有る場合に、本実施の形態が適用されてもよい。
【００９５】
なお、本実施の形態において、処理エンジン選択装置１０は、ソフトウェア選択装置の一例である。
【００９６】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【００９７】
以上の説明に関し、更に以下の項を開示する。
（付記１）
相互に前後関係を有する複数の処理のそれぞれについて、複数のソフトウェアの中から当該処理に利用するソフトウェアを選択するソフトウェア選択装置であって、
前記複数の処理のそれぞれについて、前記ソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された場合のコストが最小となる組み合わせを選択する選択部を有し、
前記コストは、前記組み合わせに属する各ソフトウェアの処理に要される第一のコストと、前記組み合わせに属するソフトウェアのうち前記前後関係において隣接する処理に係るソフトウェアの接続に要される第二のコストとを含む、
ことを特徴とするソフトウェア選択装置。
（付記２）
前記選択部は、一つ後に複数の後段処理を有する処理については、前記ソフトウェアごとに選択される組み合わせの中から、コストが最小となる組み合わせを選択する、
ことを特徴とする付記１記載のソフトウェア選択装置。
（付記３）
前記選択部は、前記複数の処理のそれぞれについて、前記複数のソフトウェアのうち、当該処理に関して選択候補であることが記憶部に記憶されているソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された後のコストが最小となる組み合わせを選択する、
ことを特徴とする付記１又は２記載のソフトウェア選択装置。
（付記４）
前記選択部は、前記複数の処理のそれぞれについて、前記複数のソフトウェアのうち、データの入力後の処理の開始時期が一つ前の処理に関して選択されたソフトウェアと同じ型のソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された場合のコストが最小となる組み合わせを選択する、
ことを特徴とする付記１乃至３いずれか一項記載のソフトウェア選択装置。
（付記５）
相互に前後関係を有する複数の処理のそれぞれについて、複数のソフトウェアの中から当該処理に利用するソフトウェアを選択するソフトウェア選択装置が、
前記複数の処理のそれぞれについて、前記ソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された場合のコストが最小となる組み合わせを選択する処理を実行し、
前記コストは、前記組み合わせに属する各ソフトウェアの処理に要される第一のコストと、前記組み合わせに属するソフトウェアのうち前記前後関係において隣接する処理に係るソフトウェアの接続に要される第二のコストとを含む、
ことを特徴とするソフトウェア選択方法。
（付記６）
前記選択する処理は、一つ後に複数の後段処理を有する処理については、前記ソフトウェアごとに選択される組み合わせの中から、コストが最小となる組み合わせを選択する、
ことを特徴とする付記５記載のソフトウェア選択方法。
（付記７）
前記選択する処理は、前記複数の処理のそれぞれについて、前記複数のソフトウェアのうち、当該処理に関して選択候補であることが記憶部に記憶されているソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された後のコストが最小となる組み合わせを選択する、
ことを特徴とする付記５又は６記載のソフトウェア選択方法。
（付記８）
前記選択する処理は、前記複数の処理のそれぞれについて、前記複数のソフトウェアのうち、データの入力後の処理の開始時期が一つ前の処理に関して選択されたソフトウェアと同じ型のソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された場合のコストが最小となる組み合わせを選択する、
ことを特徴とする付記５乃至７いずれか一項記載のソフトウェア選択方法。
（付記９）
相互に前後関係を有する複数の処理のそれぞれについて、複数のソフトウェアの中から当該処理に利用するソフトウェアを選択するソフトウェア選択装置に、
前記複数の処理のそれぞれについて、前記ソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された場合のコストが最小となる組み合わせを選択する処理を実行させ、
前記コストは、前記組み合わせに属する各ソフトウェアの処理に要される第一のコストと、前記組み合わせに属するソフトウェアのうち前記前後関係において隣接する処理に係るソフトウェアの接続に要される第二のコストとを含む、
ことを特徴とするソフトウェア選択プログラム。
（付記１０）
前記選択する処理は、一つ後に複数の後段処理を有する処理については、前記ソフトウェアごとに選択される組み合わせの中から、コストが最小となる組み合わせを選択する、
ことを特徴とする付記９記載のソフトウェア選択プログラム。
（付記１１）
前記選択する処理は、前記複数の処理のそれぞれについて、前記複数のソフトウェアのうち、当該処理に関して選択候補であることが記憶部に記憶されているソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された後のコストが最小となる組み合わせを選択する、
ことを特徴とする付記９又は１０記載のソフトウェア選択プログラム。
（付記１２）
前記選択する処理は、前記複数の処理のそれぞれについて、前記複数のソフトウェアのうち、データの入力後の処理の開始時期が一つ前の処理に関して選択されたソフトウェアと同じ型のソフトウェアごとに、当該処理より前の各処理に関して選択されたソフトウェアの１以上の組み合わせの中から、当該ソフトウェアが最後段に追加された場合のコストが最小となる組み合わせを選択する、
ことを特徴とする付記９乃至１１いずれか一項記載のソフトウェア選択プログラム。
【符号の説明】
【００９８】
１０          処理エンジン選択装置
１１          選択部
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１１１        ＤＦＤ記憶部
１１２        処理コスト記憶部
１１３        接続コスト記憶部
１１４        ユーザ要求記憶部
１１５        作業用テーブル
Ｂ            バス
【図１】
2015212911.tif 000003
【図２】
2015212911.tif 000004
【図３】
2015212911.tif 000005
【図４】
2015212911.tif 000006
【図５】
2015212911.tif 000007
【図６】
2015212911.tif 000008
【図７】
2015212911.tif 000009
【図８】
2015212911.tif 000010
【図９】
2015212911.tif 000011
【図１０】
2015212911.tif 000012
【図１１】
2015212911.tif 000013
【図１２】
2015212911.tif 000014
【図１３】
2015212911.tif 000015
【図１４】
2015212911.tif 000016