(57)【要約】【課題】  開発者が記述した業務仕様から必要なコンポーネントを選択して組み合わせ、アプリケーションソフトウェアを構築する方法を提供する。【解決手段】  処理内容を自然言語で記述し処理の流れをフローで表した業務仕様から(S101)、処理内容に含まれる単語を抽出し(S102)、予めオントロジに定義された単語間の類似関係を用いて関連するコンポーネントを検索する(S104)。また単語が意味的に順序関係を持つ複数の単語に分けられる場合にそれを用いて細分化したフローを構築することにより(S107、S108)、アプリケーションソフトウェアとして実行可能なコンポーネントフローを構築する。【選択図】        図１
2006350729.tif 000002
【特許請求の範囲】
【請求項１】
ある機能を実行するメソッドを１つまたは複数持つソフトウェア部品であるコンポーネントを１つまたは複数組み合わせてアプリケーションソフトウェアを構築するアプリケーションソフトウェア構築方法において、
実行する業務内容を記述した文から、前記コンポーネント情報データベースの機能記述文に含まれる２つ以上の単語間の意味上の類似関係および分割関係を表すリンクおよび前記分割関係において被分割単語間の意味上の順序関係を表すフローを保持するオントロジに存在する単語群を抽出して前記単語群を１要素として持つフローテンプレートを新たに生成し、
各フローテンプレートに含まれる各単語群ついて、前記単語群に含まれる単語をキーワードとして、前記コンポーネントのメソッドを一意に識別するID、および前記メソッドが実行する機能を記述した機能記述文の組を保持するコンポーネント情報データベースから機能記述文を検索し、前記機能記述文に対応するコンポーネントメソッドIDを発見し前記単語群への対応付けを行い、
前記機能記述文に対応するコンポーネントメソッドIDと前記単語群への対応付けができないとき、各フローテンプレートの各単語群について、前記単語群に含まれる単語を始点とする前記類似関係を表すリンクが存在する場合に、前記始点となる単語を終点となる単語に置き換えた単語群を生成し、前記フローテンプレートにおいて始点となる単語を含む単語群を前記生成した単語群に置き換えたフローテンプレートを新たに生成し、
各フローテンプレートの各単語群について、前記単語群に含まれる単語を分割元とする前記分割関係を表すリンクが存在する場合に、前記分割元となる単語を分割先となる単語群の各要素に置き換えた複数の単語群を生成し、前記分割関係を表すリンクに被分割単語間の順序関係を示すフローが付加されている場合は前記複数の単語群を前記フローに従って順序付けた上で、前記フローテンプレートにおいて分割元となる単語を含む単語群を前記生成した複数の単語群に置き換えたフローテンプレートを新たに生成し、
全ての単語群に対してコンポーネントのメソッド名が対応付けられたフローテンプレートが存在するようになったとき、前記全ての単語群に対してコンポーネントのメソッド名が対応付けられたフローテンプレートから、フローテンプレート内の各単語群をノードとし、前記フローテンプレート内の各単語群の順序付けから前記ノードの実行順序付けを行い、また前記ノードにおいて実行するコンポーネントのメソッドを前記各単語群に対応付けられたコンポーネントメソッドIDから導出することによりコンポーネントのメソッドの実行順序を規定したコンポーネントフローを生成する、
を有することを特徴とするアプリケーションソフトウェア構築方法。
【請求項２】
ある機能を実行するメソッドを１つまたは複数持つソフトウェア部品であるコンポーネントを１つまたは複数組み合わせてコンピュータを用いてアプリケーションソフトウェアを構築処理するアプリケーションソフトウェア構築処理プログラムにおいて、
前記コンポーネントのメソッドを一意に識別するID、および前記メソッドが実行する機能を記述した機能記述文の組を保持するコンポーネント情報データベースと、
前記コンポーネント情報データベースの機能記述文に含まれる2つ以上の単語間の意味上の類似関係および分割関係を表すリンクおよび前記分割関係において被分割単語間の意味上の順序関係を表すフローを保持するオントロジとを用いて、
前記コンピュータを、
実行する業務内容を記述した文からオントロジに存在する単語群を抽出し前記単語群を１要素として持つフローテンプレートを新たに生成するフローテンプレート生成手段と、
各フローテンプレートに含まれる各単語群について、前記単語群に含まれる単語をキーワードとして機能記述文をコンポーネント情報データベースから検索し、前記機能記述文に対応するコンポーネントメソッドIDを発見し前記単語群への対応付けを行う対応付け手段と、
各フローテンプレートの各単語群について、前記単語群に含まれる単語を始点とする前記類似関係を表すリンクが存在する場合に、前記始点となる単語を終点となる単語に置き換えた単語群を生成し、前記フローテンプレートにおいて始点となる単語を含む単語群を前記生成した単語群に置き換えたフローテンプレートを新たに生成するフローテンプレート細分化手段と、
各フローテンプレートの各単語群について、前記単語群に含まれる単語を分割元とする前記分割関係を表すリンクが存在する場合に、前記分割元となる単語を分割先となる単語群の各要素に置き換えた複数の単語群を生成し、前記分割関係を表すリンクに被分割単語間の順序関係を示すフローが付加されている場合は前記複数の単語群を前記フローに従って順序付けた上で、前記フローテンプレートにおいて分割元となる単語を含む単語群を前記生成した複数の単語群に置き換えたフローテンプレートを新たに生成するフローテンプレート分割手段と、
全ての単語群に対してコンポーネントのメソッド名が対応付けられたフローテンプレートが存在するようになったとき、前記全ての単語群に対してコンポーネントのメソッド名が対応付けられたフローテンプレートから、フローテンプレート内の各単語群をノードとし、前記フローテンプレート内の各単語群の順序付けから前記ノードの実行順序付けを行い、また前記ノードにおいて実行するコンポーネントのメソッドを前記各単語群に対応付けられたコンポーネントメソッドIDから導出することによりコンポーネントのメソッドの実行順序を規定したコンポーネントフローを生成するコンポーネントフローを生成手段と、
を有するように機能させることを特徴とするアプリケーションソフトウェア構築処理プログラム。
【請求項３】
前記コンピュータを、
処理内容を自然言語で記述した１つまたは複数のノードを有向フローで結んだ業務フローから、前記各ノードの処理内容文を抽出する抽出手段と、
前記抽出された処理内容文に対して前記コンポーネントフロー生成手段によりコンポーネントフローを生成した後に、前記業務フローの各ノードを前記生成したコンポーネントフローに置き換えることにより前記業務フロー全体の処理内容を表すコンポーネントフローを生成する全体コンポーネントフロー生成手段と、
を有するように機能させることを特徴とする請求項２に記載のアプリケーションソフトウェア構築処理プログラム。
【請求項４】
前記オントロジは、
複数の単語の集合である語彙と、
前記語彙の要素となる２つの単語間において意味上の類似関係が存在する場合に、前記２つの単語の組および類似関係を格納した類似関係リンクの集合と、
前記語彙の要素となる3つ以上の単語間において１つの単語の意味が他の複数の単語の意味の集合で構成される場合に、前記１つの単語および前記他の複数の単語、および前記他の複数の単語の間に意味上の順序関係が存在する場合に前記順序関係を単語および前記単語の次に遷移すべき単語の組の集合で表したフローを格納した分割関係リンクの集合と、
から構成されることを特徴とする請求項２に記載のアプリケーションソフトウェア構築処理プログラム。
【請求項５】
ある機能を実行するメソッドを１つまたは複数持つソフトウェア部品であるコンポーネントを１つまたは複数組み合わせてアプリケーションソフトウェアを構築するアプリケーションソフトウェア構築装置において、
アプリケーションソフトウェア構築処理プログラムを記憶する記憶部と、
前記アプリケーションソフトウェア構築処理プログラムによりアプリケーションソフトウェアの構築処理を行う処理部と、
前記コンポーネントのメソッドを一意に識別するID、および前記メソッドが実行する機能を記述した機能記述文の組を保持するコンポーネント情報データベースを有するデータベース提供装置と、前記コンポーネント情報データベースの機能記述文に含まれる２つ以上の単語間の意味上の類似関係および分割関係を表すリンクおよび前記分割関係において被分割単語間の意味上の順序関係を表すフローを保持するオントロジを有するオントロジ提供装置との間で通信を行う通信部とを備え、
前記処理部は、前記通信部にて前記オントロジ提供装置から、実行する業務内容を記述した文に対してオントロジに存在する単語群を抽出し前記単語群を１要素として持つフローテンプレートを新たに生成するために受信した単語から、
前記オントロジにて記憶された前記意味上の類似関係のリンクによって示される別の単語、
または前記意味上の分割関係のリンクによって示される別の複数の単語、
または前記意味上の分割関係のリンクにおいて被分割単語間の意味上の順序関係が存在する場合における前記順序関係を生成し、
各フローテンプレートに含まれる各単語群ついて、前記単語群に含まれる単語をキーワードとして機能記述文をコンポーネント情報データベースから検索し、前記機能記述文に対応するコンポーネントメソッドIDを発見し前記単語群への対応付けを行うために、前記別の単語、前記別の複数の単語及び前記順序関係を、前記通信部から前記データベース提供装置へ送信するアプリケーションソフトウェア構築装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、再利用を考慮して部品化されたソフトウェアまたはネットワークサービスを組み合わせてアプリケーションソフトウェアを構築する方法で、自然言語等を用いた簡便な仕様記述からアプリケーションソフトウェアを構築する方法、プログラム及び装置に関する。
【背景技術】
【０００２】
従来から、ソフトウェア開発効率を改善するために、多くのソフトウェアにて共通に利用される機能を対象物や対象業務等を単位として処理インタフェースをまとめたソフトウェア部品であるコンポーネントを単位とするソフトウェア開発方法が考えられてきた。コンポーネントとアプリケーションソフトウェアとのインタフェースは同一コンピュータで閉じる場合と、Webサービス等ネットワークサービスを介する場合の両方が存在する。通常両者は区別されるが、本発明においては両方を合わせてコンポーネントと呼ぶこととする。
【０００３】
従来、コンポーネントを組み合わせてアプリケーションソフトウェアを構築する場合は、コンポーネントの機能を開発者が確認した上で業務上の仕様からシステム上の仕様への対応付けを開発者が考え、Java等の通常のプログラミング言語、またはフロー言語等開発者にとって理解しやすい形式のプログラミング言語を用いてコンポーネントの組み合わせを行うことでアプリケーションソフトウェアを構築していた。しかしこの方法では、開発者がアプリケーションソフトウェアの仕様とコンポーネントの仕様の両方を把握し、双方の仕様の差異や仕様記述の同じ概念が異なる記載となる場合である揺れを吸収した上でコンポーネントを組み合わせる必要があり、開発者の負担となると共に工数がかかるという問題点がある。
【０００４】
そこで、業務上の仕様から実行可能なアプリケーションを構築する方法が提案されている。非特許文献１では、既存のWebサービスを組み合わせて新たなWebサービスを生成する方法として、既存のWebサービスを呼び出す一連の動作を状態遷移で表し、新規に生成するWebサービスの動作を業務仕様で記述した上で、新規Webサービスの業務仕様を状態遷移に変換し既存Webサービスの状態遷移とのマッチングを図ることによって動作仕様を決定する方法が提案されている。
【０００５】
また、コンポーネントの仕様記述の揺れが存在する場合でも必要なコンポーネントを開発者が的確に発見しやすくするために、特許文献１ではドメイン名称および入出力項目名等をキーワードにWebサービスの検索を行う時に、検索時に入力されたキーワードのみから検索を行うだけでなく、意味的に類似したキーワードを開発者に提示する方法を提案している。これは、単語間の類似関係等を単語をノードとするリンクで接続したグラフ構造で表したオントロジと呼ばれるデータを使用することによって実現している。
【特許文献１】特開2004-30428号広報
【非特許文献１】Automated Composition of Semantic Web Services into Executable Processes. Paolo Traverso and Marco Pistore, International Semantic Web Conference (ISWC) 2004, LNCS 3298, pp. 380-394
【発明の開示】
【発明が解決しようとする課題】
【０００６】
先に述べた通り、コンポーネントを組み合わせてアプリケーションソフトウェアを構築する時に開発者の負担を軽減する方法が提案されており、これらを用いることによって工数の削減やプログラムミスの混入を避けることが可能になると考えられる。
しかし非特許文献１の方法では、業務上の仕様記述からWebサービス(コンポーネント)を組み合わせてアプリケーションソフトウェアを構築することが可能となるが、当該アプリケーションソフトウェアに必要となるコンポーネントを開発者の側において予め選択しておく必要がある。
【０００７】
また特許文献１の方法では、単純なキーワード検索でなく元の機能要件に関連するコンポーネントも検索することが可能となるが、特許文献１の方法は検索方法の提供に留まるため実際のコンポーネントの組み合わせはアプリケーションソフトウェア開発者が考える必要がある。
本発明の課題は、開発者が記述した業務仕様を細分化しつつ必要なコンポーネントを選択し組み合わせることにより、アプリケーションソフトウェアを構築する方法、プログラム及び装置を提供することである。
【課題を解決するための手段】
【０００８】
上記課題を解決し、本発明の目的を達成するため、本発明は、以下の手段を採るようにしている。
アプリケーションソフトウェア開発のために開発者が記述するのは動作仕様の記述とし、これを業務用語を用いた自然言語で記述する形を採ることにより、アプリケーションソフトウェア開発者の負担を軽くする。ただし全面的に自然言語で記述するのは、解釈する時に曖昧さ等を伴うため正しくアプリケーションソフトウェアを構築するのは困難である。そこで、動作の流れを処理ノード(アクティビティ)や分岐ノード等で大まかに示し、各アクティビティにおいて処理内容を自然言語で簡単に短く記述することで、業務内容を簡潔に記述したフロー(業務フロー)を用いることとする。
【０００９】
業務フローからアプリケーションソフトウェアへの変換方法であるが、プログラムは、業務フローにおいて各アクティビティに記述した処理内容から語彙として登録されている単語を抽出しそれをキーワードとして当該処理を実現するコンポーネントメソッドを検索し、そのようなコンポーネントメソッドが発見できた場合はアクティビティを当該コンポーネントメソッドに置き換えることにより、業務フローをアプリケーションソフトウェアとして動作可能なコンポーネントフローに置き換えていく。
【００１０】
コンポーネントメソッドが発見できない場合は、抽出した単語から単語間の類似関係や部分関係等を表したグラフ構造データであるオントロジを用いて関連する単語を取り出し元の単語と置き換えて再度検索する処理を繰り返す。この時、元の単語の意味を分割する関係にあたる単語群を取り出す時は、アクティビティも同様に分割した上でコンポーネントメソッドに置き換える。さらに前記分割関係にあたる単語群が動作を意味するものであり、それら単語群の間に因果関係等によって動作する順序が規定される場合は、その順序に従ってコンポーネントメソッドを組み合わせるものとする。
【発明の効果】
【００１１】
本発明をアプリケーションソフトウェアの開発に適用することによって、以下の効果が期待できる。
アプリケーションソフトウェアの動作仕様を簡潔な業務フローで記述し、それを入力として本発明で示す処理を行うことによってアプリケーションソフトウェアとして動作可能なコンポーネントフローが生成されることによって、アプリケーションソフトウェアの開発者は求める処理に対するコンポーネントの組み合わせを考える必要がなくなるため、アプリケーションソフトウェアの開発が容易になる。
また、アプリケーションソフトウェアの改変が必要になった場合も、簡潔に記述されている業務フローを改変し再度本発明で示す処理を行うことにより、より少ない労力で改変が行えるようになる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明を実施する形態について説明する。
本発明のソフトウェア構成を図２に示す。
アプリケーション構築処理プログラム2000は、コンポーネント情報データベース6000およびオントロジ7000を参照情報とし、業務フロー4000を入力としてコンポーネントフロー5000を出力するプログラムである。アプリケーション構築処理プログラム2000の実行時には、これに加えて一時データとしてアクティビティ語彙8100、フローテンプレート集合8200および部分コンポーネントフロー集合8300を保持する。
【００１３】
業務フロー4000は、UML(Unified Modeling Language)のアクティビティ図等、アプリケーションソフトウェアの動作仕様について、単文程度の簡潔な自然言語で記述可能な処理を表すノードであるアクティビティを処理の前後関係を示す有向リンクで結んだフロー言語で記述したソースプログラムである。
【００１４】
本実施形態における業務フロー4000のデータ形式は図４に示す通り、アクティビティを一意に識別するアクティビティID4011、アクティビティの処理内容を簡潔な自然言語で記述した機能記述文4012、処理終了後の遷移先となるアクティビティのIDを記述した遷移先アクティビティID4013、当該アクティビティと等価な処理を行う部分コンポーネントフローのIDを格納する領域となる部分コンポーネントフローID4014からなるアクティビティレコード4010をアクティビティの個数分繰り返し記述したものである。
【００１５】
アクティビティID4011に「START」と記述したアクティビティレコード4010は業務フロー4000の開始時に最初に処理するアクティビティを示し、また遷移先アクティビティID4013に「END」と記述したアクティビティレコード4010は当該アクティビティの処理終了後にアプリケーションの実行を終了することを示す。
【００１６】
コンポーネントフロー5000は、アプリケーションソフトウェアの動作について、実行するコンポーネント名を記述したノードと、コンポーネント間の処理の前後関係を示すリンクから成るフロー言語で記述した実行プログラムである。業務フロー4000との違いは、業務フロー4000は人間が見て分かりやすい大まかな単位で記述されたフローであるのに対し、コンポーネントフロー5000はコンポーネントを単位とし、コンポーネントフロー5000を参照し当該コンポーネントを記述された順序に従って実行することが可能なプログラムがあればアプリケーションソフトウェアとして実行可能となるフローである。
【００１７】
本実施形態におけるコンポーネントフロー5000のデータ形式は図５に示す通り、ノードを一意に識別するIDであるノードID5011、使用するコンポーネントメソッドを指すコンポーネントメソッド名5012、当該ノードの処理終了後の遷移先ノードのノードIDを記述した遷移先ノードID5013からなるノードレコード5010をノードの個数分繰り返し記述したものである。ノードID5011に「START」と記述したノードレコード5010はコンポーネントフロー5000の開始時に最初に処理するノードを示し、また遷移先ノードID5013に「END」と記述したノードレコード5010は当該ノードの処理終了後にアプリケーションの実行を終了することを示す。
【００１８】
コンポーネント情報データベース6000は、各コンポーネントメソッドについて、メソッドが実行する機能の内容を単文程度の簡潔な自然言語で記述したものであり、１つ又はそれ以上の単語集合を入力すると、当該単語集合の要素となる単語を機能記述文に予め定めた数以上含むコンポーネントおよびメソッドの名称を返すデータベースである。
【００１９】
本実施形態におけるコンポーネント情報データベース6000のデータ形式は図６に示す通り、コンポーネントメソッド名6011、および前記メソッド名の機能を記述した機能記述文6012からなるレコード6010をコンポーネントメソッドの数だけ繰り返し記述したものである。
【００２０】
オントロジ7000は、単語間の類似・汎化・特化・分割といった意味上の関係を属性付きリンクを持つグラフ構造で表現したものであり、ノードとなる単語と単語間を結ぶリンクからなる。本実施形態では、オントロジ7000はオントロジ語彙7100、類似関係リンク集合7200、分割関係リンク集合7300、分割単語フロー集合7400から構成される。
【００２１】
オントロジ語彙7100は、オントロジにて使用される単語の集合である。本実施形態におけるオントロジ語彙7100のデータ形式は図７に示す通り、文字列で表された単語7111の配列で構成される。
【００２２】
類似関係リンク集合7200は、オントロジ語彙7100に含まれる単語7111のうち２つの要素の間に類似・汎化/特化といった意味上の関係が存在する場合に、当該単語間を結びつける類似関係リンク7210の集合である。本実施形態における類似関係リンク集合7200のデータ形式は図８に示す通り、リンク元単語7211、リンク先単語7212、リンクの種類を表す属性7213から成る類似関係リンク7210を、リンクの個数分だけ繰り返し記述したものである。属性7213の種類としては、類似・汎化・特化等がある。
【００２３】
分割関係リンク集合7300は、オントロジ語彙7100に含まれる単語7111のうち3つ以上の要素の間において、1つの単語の指す意味が別の2つ以上の単語の指す意味から構成される場合、即ちある単語の意味が複数の単語の意味に分割可能な場合に、分割前の単語と分割後の単語群とを結びつける分割関係リンク7310の集合である。本実施形態における分割関係リンク集合7300のデータ形式は図9に示す通り、分割元単語7311、分割先単語群7312、分割単語フローID7313から成る分割関係リンク7310を、リンクの個数分だけ繰り返し記述したものである。分割単語フローID7313は、分割先単語群の各要素の意味が動作に関するもの等であり、分割先単語群の各要素の間に順序等の制約が意味上生じる場合に対応する分割単語フロー7450の分割単語フローID7451を付加する。
【００２４】
分割単語フロー集合7400は、分割関係リンク7310について分割先単語群7312の各要素の間に順序等の制約が意味上生じる場合にその順序を定義した分割単語フロー7450の集合である。分割単語フロー7450は例えば、分割先単語群7312が動作を意味するものであり、かつ分割先単語群7312の要素となる1単語の意味する動作が別の1つ以上の単語の動作完了後でないと実行不可能な場合に実行可能な順序を定義するものである。
【００２５】
本実施形態における分割単語フロー7450のデータ形式は図１０に示す通り、ノードID7411、単語7412、および単語7412の示す動作の実行後遷移先となる遷移先ノードID7413の組を任意個数並べたものである。ノードID7411に「START」と記述したノードレコード7410は分割単語フロー7540にて先頭に来るノードを示す。また遷移先ノードID7413に「END」と記述したノードレコード7410は分割単語フロー7450の最後に来るノードを示す。個々の分割単語フロー7450にはそれぞれを一意に識別する分割単語フローID7451が付けられる。
【００２６】
アクティビティ語彙8100は、図１１に示す通り、アクティビティ4010の機能記述文401に含まれるオントロジ語彙7100の単語の集合を起点とし、前記単語の集合の要素が類似関係リンク7200のリンク元単語7211と等しい場合にリンク先単語7212を、また前記単語集合の要素が分割関係リンク8300の分割元単語7311と等しい場合に分割先単語群7312の個々の単語を繰り返し追加した、オントロジ語彙7100のサブセットである。１つのアクティビティに対する処理が終了する毎にアクティビティ語彙8100は破棄される。
【００２７】
フローテンプレート集合8200は、アクティビティ4010を置き換える部分コンポーネントフローの雛形となるフローテンプレート8250の集合である。フローテンプレート8250のデータ形式は図12に示す通り、フローテンプレート8250の構成要素となるノードを一意に識別するノードID8211、ノードに適合し得るコンポーネントメソッドを検索するキーワードの集合である単語列8212、当該ノードの処理終了後の遷移先ノードID8213、および当該ノードに適合し得るコンポーネントメソッド名の集合であるメソッド名集合8214からなるノードレコード8210を任意個数繰り返し並べたものである。個々のフローテンプレート8250にはそれぞれを一意に識別するフローテンプレートID8251が付けられる。
【００２８】
部分コンポーネントフロー集合8300は、アプリケーション構築処理プログラム201によって得られる、個々のアクティビティ4010を置き換える部分コンポーネントフロー8350の集合である。部分コンポーネントフロー8350のデータ形式は図１３に示す通り、部分コンポーネントフロー8350の構成要素となるノードを一意に識別するノードID8311、ノードに対応するコンポーネントメソッドの名称であるメソッド名8312、およびコンポーネントメソッドの実行後に遷移する遷移先ノードID8313からなるノードレコード8310を任意個数繰り返し記述したものである。
【００２９】
ノードID8311に「START」と記述したノードレコード8310は部分コンポーネントフロー8350にて先頭に来るノードを示し、また遷移先ノードID8313に「END」と記述したノードレコード8310は部分コンポーネントフロー8350の最後に来るノードを示す。個々の部分コンポーネントフロー8350にはそれぞれを一意に識別する部分コンポーネントフローID8351が付けられる。
【００３０】
なお、上述した実施の形態では、アクティビティの機能記述文の単語の検索のための中間データとしてフローテンプレート集合8200を用いたが、この機能及び構成をアクティビティ語彙8100に持たせるようにしてもよい。
【００３１】
本発明を実施するハードウェア構成の例を図３に示す。処理装置311、記憶装置312、通信装置313をバス314で接続したアプリケーションソフトウェア構築装置301、処理装置321、記憶装置322、通信装置323をバス324で接続したコンポーネント情報データベース提供装置302、処理装置331、記憶装置332、通信装置333をバス334で接続したオントロジ提供装置303が通信路304を介して相互に接続されている。
【００３２】
処理装置311は、例えばCPU、MPU等であり、命令群を記憶装置312から逐次読み込み、各命令に対応する演算や操作を行う装置である。本実施形態においては、アプリケーション構築処理プログラム2000を記憶装置312から読み込み実行する。処理装置321および331も311と同様の装置であり、321はコンポーネント情報提供プログラム325を、331はオントロジ提供プログラム335を、それぞれ実行する。
【００３３】
コンポーネント情報提供プログラム325は通信装置323にて受信した要求に従いコンポーネント情報データベース6000内の情報を通信装置323を介して送信するプログラムであり、オントロジ提供プログラム335は通信装置333にて受信した要求に従いオントロジ7000内の情報を通信装置333を介して送信するプログラムである。
【００３４】
記憶装置312は、例えばハードディスク装置やフラッシュメモリ、RAM(Random Access Memory)等といったデータを保持する装置である。本実施形態においては、アプリケーション構築処理プログラム2000、業務フロー4000、コンポーネントフロー5000を保持し、さらにアプリケーション構築処理プログラム2000の実行中に一時的にアクティビティ語彙8100、フローテンプレート集合8200、部分コンポーネントフロー集合8300を格納する。記憶装置322および332も312と同様の装置であり、322はコンポーネント情報提供プログラム325およびコンポーネント情報データベース6000を、332はオントロジ提供プログラム335およびオントロジ7000を、それぞれ格納する。
【００３５】
通信装置314、324および334は、通信路304を介して相互にデータ通信を行うための装置である。通信路304は、例えばインターネット、電話回線、LAN(Local Area Network)等、データ通信を行うための通信路である。
【００３６】
バス314は、処理装置311、記憶装置312、通信装置313を相互接続するためのデータ通信路である。バス324および334も314と同様の装置であり、324は処理装置321、記憶装置322、通信装置323を、334は処理装置331、記憶装置332、通信装置333を、それぞれ相互接続する。
【００３７】
なお、上記ハードウェア構成ではコンポーネント情報データベース6000およびオントロジ7000がアプリケーションソフトウェア構築装置301と別の装置によって提供されることになるが、コンポーネント情報データベース6000およびオントロジ7000の一方、または両方がアプリケーションソフトウェア構築装置301内の記憶装置312に格納されていてもよい。
【００３８】
以下、本実施形態の処理、即ちアプリケーション構築処理プログラム2000の処理手順について、図１を用いて述べる。
処理の概要は、基本的には業務フロー4000の図4に示す各アクティビティ4010を1つ以上のコンポーネントメソッドから成る図13に示す部分コンポーネントフロー8350に順次置き換えることにより、最終的に業務フロー4000全体をコンポーネントフロー5000に置き換える処理を行う。この置き換えは、図4に示すアクティビティ4010の機能記述文4012から図7に示すオントロジ語彙7100に含まれる単語の集合を取り出し、この単語集合の要素となる単語を図6に示す機能記述文6012の中に一定数以上含むコンポーネントメソッド名6011がある場合にアクティビティ4010の機能がコンポーネントメソッド名6011の指すコンポーネントメソッドの機能と等価であるとみなして行われる。
【００３９】
条件に合致するコンポーネントメソッド名6011が存在しない場合は、オントロジ7000を用いて、前記単語群の各要素を起点とする類似関係リンク7200で示される関連単語で置き換えた単語群を作成するか、または前記単語群の各要素を起点とする分割関係リンク7300に従い複数の単語群からなるコンポーネントフローのテンプレートを作成した上で前記コンポーネントメソッドの検索を繰り返し行う。
【００４０】
以下、詳細な処理手順について述べる。
まずステップS101にて、図4に示す業務フロー4000において部分コンポーネントフローID4014が付加されていないアクティビティレコード4010を読み出す。
次にステップS102にて、図11に示すアクティビティ語彙8100の初期設定を行う。これは読み出したアクティビティレコード4010の機能記述文4012から、オントロジ語彙7100に含まれる単語を全て抽出し、アクティビティ語彙8100に格納することで行う。以下、単語とはオントロジ語彙8100に登録されている全ての文字列を指すものとする。単語の抽出は、例えば機能記述文4012のi文字目からｊ文字目(機能記述文4012の文字数をnとした場合、iおよびjは1≦i≦j≦nとなる全ての数の組み合わせ)から成る部分文字列を取り出してオントロジ語彙7100の要素として存在するかどうか問い合わせを行い、問い合わせ結果にて存在が確認できた部分文字列を抽出することで行う。
【００４１】
次にステップS103にて、図12に示すフローテンプレート集合8200の初期設定を行う。これはステップS102にて得られたアクティビティ語彙8100の全要素を単語列8212として持つ、1つのノードレコード8210のみからなるフローテンプレート8250を作成し、一意に識別可能となるフローテンプレートID8251を付与した上でフローテンプレート集合8200に格納することで行う。
【００４２】
次にステップS104にて、フローテンプレート集合8200の要素であるフローテンプレート8250に含まれる全てのノードレコード8210のそれぞれに対して単語列8212と対応するコンポーネントメソッドが存在するか調べる。これは全てのノードレコード8210について、単語列8212を入力としてコンポーネント情報データベース6000に問い合わせを行い、前記単語列8212の単語を機能記述文6012に予め定めた一定数以上含んだレコード6010が存在する場合に、レコード6010のコンポーネントメソッド名6011を当該ノードレコード8210のメソッド名集合8214に追加することで行う。
【００４３】
次にステップS105にて、ステップS104の処理によって全てのノードレコード8210に対応するコンポーネントメソッドが存在するフローテンプレート8250が存在するか調べる。即ち、フローテンプレート集合8200の要素となる全てのフローテンプレート8250を調べ、全ノードレコード8210のメソッド名集合8214が空でない(記載済み)フローテンプレート8250が存在する場合はそれをアクティビティレコード4010を置き換える部分コンポーネントフローに採用することとしてステップS106に移る。そうでない場合はオントロジ7000を用いてフローテンプレート集合8200を展開するためにステップS107に移る。
【００４４】
ステップS106では、ステップS105にて存在を確認した、全ノードレコード8210のメソッド名集合8214が空でないフローテンプレート8250のフローテンプレートID8251を読み出し、ステップS111に移る。
【００４５】
ステップS107では、アクティビティ語彙8100の要素である全ての単語8111について、単語8111をリンク元単語7211として含む類似関係リンク7210をオントロジ7000から読み出し、リンク先単語7212をアクティビティ語彙8100に追加する。これと共に、フローテンプレート集合8200の要素となる全てのフローテンプレート8250について、各ノードレコード8210の単語列8212の要素にリンク元単語7211と等しい単語がある場合に前記単語をリンク先単語7212に置き換えたフローテンプレート8250をフローテンプレート集合8200に追加する。
【００４６】
ステップS108では、アクティビティ語彙8100の要素である全ての単語8111について、単語8111を分割元単語7311として含む分割関係リンク7310をオントロジ7000から読み出し、分割関係リンク7310の分割先単語群7312の各要素をオントロジ語彙7100に追加する。これと共に、フローテンプレート集合8200に含まれる全てのフローテンプレート8250について、各ノードレコード8210の単語列8212の要素に分割元単語7311と等しい単語がある場合に前記単語を含むノードレコード8210を新たな複数のノードレコード8210に置き換え、それをフローテンプレート集合8200に追加する。
【００４７】
前記ノードレコード8210を新たな複数のノードレコード8210に置き換える方法は以下の通りである。分割単語フローID7313が付加されていない分割関係リンク7310に対して処理を行う場合は、図12に示すノードレコード8210の単語列8212のうち分割元単語7311を除いたものに分割先単語群7312の各要素を1つずつ個別に付加したものを単語列8212として持つ複数のノードレコード8210を順序を付けずに追加する。例えば単語列8212が[A][B][C]となる時に、分割元単語7311が[B]、分割先単語群7312が[B1][B2]となる分割関係リンク7310が存在する場合、[A][B1][C]および[A][B2][C]を単語列8212として持つ2つのノードレコード8210を順序を付けずに、即ち同一のノードID8211を付加して追加する。
【００４８】
この時、遷移先ノードID8213は全て元のノードレコード8210の遷移先ノードID8213を格納し、並列なノードレコード8210を集約することを示すフラグ(例えば「＊」)を付加する。分割単語フローID7313が付加された分割関係リンク7310に対して処理を行う場合も分割単語フローID7313が付加されていない場合と同様に複数のノードレコード8210を生成するが、この場合ノードレコード8210間の順序は分割単語フローID7313が示す分割単語フロー7450に従う。つまり、ノードID7411が「START」であるノードレコード7410にある単語7412を付加した単語列8212を先頭のノードとし、遷移先ノードID7413の指すノードレコード7410にある単語7412を付加した単語列を次のノードとする処理を繰り返すことで設定する。
【００４９】
例えば、単語列8212が[A][B][C]となる時に、分割元単語7311が[B]、分割先単語群7312が[B1][B2]となる分割関係リンク7310が存在し、分割単語フロー7450にてノードID7411が「START」であるノードレコード7410の単語7412が[B1]、遷移先ノードID7413が「1」となる。またノードID7411が「1」であるノードレコード7410の単語7412が[B2]、遷移先ノードID7413が「END」となっている場合、最初に単語列8212が[A][B1][C]となるノードレコード8210、次に単語列8212が[A][B2][C]となるノードレコード8210の2ノードからなる部分コンポーネントフローテンプレートを追加する。
【００５０】
次にステップS109にて、フローテンプレート8250の生成処理を終了するかどうかの判断を行う。ステップS107およびステップS108にてアクティビティ語彙8100の要素数が増加したか、またはステップS104〜S109の処理回数が予め定めた一定値以下である場合は、ステップS104〜S109の処理を繰り返すためにステップS104に戻る。そうでない場合はステップS110に移る。
【００５１】
ステップS110では、フローテンプレート集合8200の要素のうち、メソッド名集合8214が空であるノードレコード8210が最も少ないフローテンプレート8250を読み出し、ステップS111に移る。
【００５２】
ステップS111では、ステップS106またはステップS110にて読み出したフローテンプレート8250を部分コンポーネントフロー8350に変換し部分コンポーネントフロー集合8300に格納する。変換は、フローテンプレート8250の各ノードレコード8210に対し、ノードID8211をノードID8311に、メソッド名集合8214の要素のうち任意の1つをメソッド名8312に、遷移先ノードID8213を遷移先ノードID8313に設定した部分コンポーネントフロー8350のノードレコード8310を生成し、部分コンポーネントフロー8350に対し一意に識別可能な部分コンポーネントフローID8351を付加することで行う。その後、アクティビティレコード4010の部分コンポーネントフローID4014に前記部分コンポーネントフローID8351を格納し、ステップS112に移る。
【００５３】
ステップS112では、業務フロー4000の全てのアクティビティレコード4010に部分コンポーネントフローID4014が付加されているか調べる。全てのアクティビティレコード4010に部分コンポーネントフローID4014が付加されている場合は部分コンポーネントフロー抽出処理を終了し、ステップS113に移る。部分コンポーネントフローID4014が付加されていないアクティビティレコード4010が存在する場合は、ステップS101に移りステップS101〜ステップS112の処理を繰り返す。
【００５４】
ステップS113では、アクティビティレコード4010に 部分コンポーネントフローID4014が付加された業務フロー4000からコンポーネントフロー5000を生成する。これは、各アクティビティレコード4010において、部分コンポーネントフローID4014によって対応付けられた部分コンポーネントフロー8350の各ノードレコード8310を出力し、遷移先ノードID8313が設定されていないレコードに対しては、遷移先IDを当該アクティビティの遷移先アクティビティに対応付けられた部分コンポーネントフローの先頭ノードレコードを指すように変更する。
【００５５】
この時、異なるアクティビティに対応する部分コンポーネントフローテンプレートのノードIDが重複しないように、全ノードレコードについて一意となるIDを振り直す。例えば、コンポーネントフローのノードIDを、アクティビティIDと部分コンポーネントフローテンプレートのノードIDを連結したものとする等して一意性を保つ。なおフローテンプレート8250内に同一のノードID8211を持つノードレコード8210が複数存在する場合は単語列8212の文字順・乱数・業務フロー4000の記述者への確認等の方法によって再選択又は任意選択による順序付けを行って部分コンポーネントフロー8350のノードレコード8310を出力する。またメソッド名集合8214が空のノードレコード8210が存在する場合は、単語列8212を業務フロー4000の記述者へ提示する等して単語列8212で表される機能を持つコンポーネントが存在しないことを示す。
【００５６】
ここで本発明のうち処理の中心となる、図１のステップS102からステップS111までの処理について、具体的な実施の形態例を示す。
例として使用する図4に示すアクティビティレコード4010は機能記述文4012を「旅行を手配する」としたアクティビティである。また、使用するコンポーネント情報データベース6000は図6、オントロジ語彙7100は図7、分割関係リンク集合7300は図9、分割単語フロー集合7400は図10に示す通りである。類似関係リンク集合7200は本実施の形態例では使用しない。なお、ステップS104においてコンポーネント情報データベース6000からコンポーネントメソッド名6011を取り出す時の条件である、機能記述文6012に含まれるべきアクティビティ語彙8100の単語数は2単語以上とし、ステップS109の終了条件における処理の繰り返し回数の制限は設けない。
【００５７】
まずステップS102にて、図4に示すアクティビティレコード4010の機能記述文4012から図7に示すオントロジ語彙7100に含まれる単語を取り出す。本実施の形態例においては、「旅行」「手配」がオントロジ語彙7100に含まれるため、この2単語を図14のレコード9101および9102に示すようにアクティビティ語彙8100に追加する。
【００５８】
次にステップS103にて、図12に示す「旅行・手配」の2単語を単語列8212として持つ図15に示す1つのノードレコード9211のみからなる(即ち、ノードID8211が「START」、遷移先ノードID8213が「END」となる)フローテンプレート9251を生成し、図15に示すようなフローテンプレート9251をフローテンプレート集合8200に格納する。
【００５９】
次にステップS104にてコンポーネントメソッドを検索する。ここではフローテンプレート集合8200内のノードレコード(9211のみ)に含まれる単語列8212は「旅行・手配」のみであるので、この2単語を用いて検索を行う。コンポーネント情報データベース6000に当該単語のうち2つ以上(即ち、全単語)を機能記述文6012に含むメソッドレコード6010がないため、ここではコンポーネントメソッドをノードレコード8210のメソッド名集合8214に追加することは行われない。
【００６０】
次にステップS105にて、全てのノードレコード4010に対応するコンポーネントメソッドが存在するフローテンプレートが存在するか調べるが、ステップS104にてコンポーネントメソッドが図12に示すメソッド名集合8214に追加されなかったため、ステップS107に移る。
【００６１】
次にステップS107にて、アクティビティ語彙8100の要素がリンク元単語7211となる類似関係リンクをオントロジ7000から読み出す。本実施の形態例では類似関係リンク集合7200が存在しないため、この処理は行われない。
【００６２】
次にステップS108にて、アクティビティ語彙8100の要素が分割元単語7311となる分割関係リンクをオントロジ7000から読み出す。図9に示す通り、ここではアクティビティ語彙8100の要素9101「旅行」および9102「手配」が分割元単語となる分割関係リンクが2つ存在するため、まず「旅行」について処理を行う。はじめに分割先単語群7312にある単語「交通」「宿泊」を図14のレコード9103および9104としてアクティビティ語彙8100に追加する。
【００６３】
その後、図15に示すノードレコード9211を新たな複数のノードレコードに置き換える処理を行う。分割元単語7311が「旅行」となる分割関係リンクには分割単語フローID7313が付加されていないため、ノードレコード9211の単語列8212のうち分割元単語「旅行」を除いた「手配」に対し、分割先単語群7312の要素「交通」「宿泊」を追加した「交通・手配」および「宿泊・手配」を単語列8212として持つ2つのノードレコード9212、9213を並列に、即ち同一のノードID「START」および遷移先ノードID「END＊」(「＊」は並列ノードレコードの集約を表す)を付与してフローテンプレート9252を生成し、図15に示すようなフローテンプレート9252をフローテンプレート集合8200に追加する。
【００６４】
続いて「手配」について処理を行う。「旅行」の場合と同様に、分割先単語群7312にある「照会」および「予約」を図14のレコード9105および9106としてアクティビティ語彙8100に追加する。その後、図15に示す「手配」を単語列に含むノードレコード9211、9212、9213についてフローテンプレートの展開を行うが、この分割関係リンク7310には分割単語フローテンプレートID7313が付加されているため、IDによって対応付けられる分割単語フロー7450に基づいてフローテンプレートを生成する。
【００６５】
まず図15に示すノードレコード9211に対しては、単語列8212から「手配」を省いた「旅行」を分割単語フロー7450の単語「照会」および「予約」を付加した単語列「旅行・照会」および「旅行・予約」を持つ2つのノードレコード9214および9215を生成し、図10に示す分割単語フロー7450において「照会」が先、「予約」が後となっているため、9214が先、9215が後となるようノードID8211を付与したフローテンプレート9253を生成し、図15に示すようなフローテンプレート9253をフローテンプレート集合8200に追加する。他、図15に示すノードレコード9212および9213についても同様の処理を行い、図15に示すノードレコード9126、9217、9218、9219からなるフローテンプレート9254をフローテンプレート集合8200に追加する。
【００６６】
次にステップS109にてステップS104〜S109の処理を終了するかどうかの判断を行うが、ステップS108においてアクティビティ語彙8100の要素数が増加したため、ステップS104からの処理を再び行う。
【００６７】
2度目のステップS104にて、コンポーネントメソッドを検索する。今回は、図15に示すノードレコード9216、9217、9218、9219の単語列8212の要素を2つ以上機能記述文に含むメソッドレコード6010が存在するため、図15に示すようにノードレコード9216にはコンポーネントメソッド名「宿泊施設B.空室照会」を、ノードレコード9217にはコンポーネントメソッド名「宿泊施設B.予約」を、ノードレコード9218にはコンポーネントメソッド名「交通機関A.空席照会」を、ノードレコード9219にはコンポーネントメソッド名「交通機関A.指定席予約」を追加する。
【００６８】
次に2度目のステップS105にて、図12に示す全ノードレコード8210のメソッド名集合8214が空でないフローテンプレートが存在するか調べる。ここでは図15に示すフローテンプレート9254の全ノードレコードのメソッド名集合8214が埋められているため、ステップS106に移る。
【００６９】
次にステップS106にて、2度目のステップS105にて全ノードレコードに対しコンポーネントメソッド名が付加されていることが確認された図15に示すフローテンプレート9254を読み出し、ステップS111に移る。
【００７０】
最後にステップS111にて、図15に示すフローテンプレート9254を図13に示す部分コンポーネントフロー8350に変換する。まずノードIDが「START」となるノードレコードを部分コンポーネントフロー8350の先頭ノードレコードとするが、ここではノードIDが「START」となるノードレコードが9216および9218の2つ存在するため、ノードレコード9216とノードレコード9218のどちらかを先頭とするかを任意に決定した上でノードIDを振り直し、部分コンポーネントフローを生成する。
【００７１】
ここではノードレコード9216からノードレコード9217を先に、ノードレコード9218からノードレコード9219を後に処理するものとし、ノードレコード9218のノードID8211を「3」と振り直し、ノードレコード9217の遷移先ノードID8213を9218を表す「3」とした上で部分コンポーネントフロー8350への変換を行う。まずノードレコード9216について、ノードID8211「START」を部分コンポーネントフロー8350のノードID8311に、メソッド名集合8212「交通機関A.空席照会」をメソッド名8312に、遷移先ノードID8213「1」を部分コンポーネントフローの遷移先ノードID8313に設定し、図16のノードレコード9311を生成する。これを他のノードレコードに対して行うことにより、ノードレコード9217からノードレコード9312、ノードレコード9218からノードレコード9313、ノードレコード9219からノードレコード9314が生成され、図13に示す部分コンポーネントフロー8350が得られる。
【００７２】
本発明のアプリケーションソフトウェア構築方法を用いることによって、アプリケーションソフトウェア開発者は業務フローの形式で記述した業務仕様を用意するだけでよく、アプリケーションソフトウェアを構築するために必要なコンポーネントの選択および組み合わせはアプリケーションソフトウェア構築方法によって行われる。そのため、開発者はシステム仕様やコンポーネントの組み合わせ方を考える必要がなくなり、より多くの人がアプリケーションソフトウェア開発に携われるようになることが期待される。
上述した本発明の実施の形態に限らず、本発明の範囲内であれば、適宜、変更しうることはいうまでもない。
【図面の簡単な説明】
【００７３】
【図１】本発明によるアプリケーション構築処理プログラムの手順を示したフローチャートである。
【図２】本発明によるアプリケーション構築処理プログラムを実行するためのソフトウェア構成図である。
【図３】本発明によるアプリケーション構築処理プログラムを実行するためのハードウェア構成図である。
【図４】業務フローのデータ形式の例を表す図である。
【図５】コンポーネントフローのデータ形式の例を表す図である。
【図６】コンポーネント情報データベースのデータ形式の例を表す図である。
【図７】オントロジ語彙のデータ形式の例を表す図である。
【図８】類似関係リンク集合のデータ形式の例を表す図である。
【図９】分割関係リンク集合のデータ形式の例を表す図である。
【図１０】分割単語フロー集合のデータ形式の例を表す図である。
【図１１】アクティビティ語彙のデータ形式の例を表す図である。
【図１２】フローテンプレート集合のデータ形式の例を表す図である。
【図１３】部分コンポーネントフロー集合のデータ形式の例を表す図である。
【図１４】本実施の形態例におけるアクティビティ語彙のデータ内容を表す図である。
【図１５】本実施の形態例におけるフローテンプレート集合のデータ内容を表す図である。
【図１６】本実施の形態例における部分コンポーネントフロー集合のデータ内容を表す図である。
【符号の説明】
【００７４】
2000…アプリケーション構築処理プログラム、6000…コンポーネント情報データベース、7000…オントロジ、4000…業務フロー、5000…コンポーネントフロー、8100…アクティビティ語彙、8200…フローテンプレート集合、8300…部分コンポーネントフロー集合
【図１】
2006350729.tif 000003
【図２】
2006350729.tif 000004
【図３】
2006350729.tif 000005
【図４】
2006350729.tif 000006
【図５】
2006350729.tif 000007
【図６】
2006350729.tif 000008
【図７】
2006350729.tif 000009
【図８】
2006350729.tif 000010
【図９】
2006350729.tif 000011
【図１０】
2006350729.tif 000012
【図１１】
2006350729.tif 000013
【図１２】
2006350729.tif 000014
【図１３】
2006350729.tif 000015
【図１４】
2006350729.tif 000016
【図１５】
2006350729.tif 000017
【図１６】
2006350729.tif 000018