(57)【要約】【課題】利用者によって定義された処理フローに基づき、外部入出力処理を並列的に処理する効率の良いプログラムコードを自動的に生成する。並列処理プログラムを作成するための熟練プログラマを必要としない。【解決手段】コンピュータに実行させる処理の処理フローの情報と、処理フロー内において外部入出力を伴う処理を示す情報とを含んだ処理フロー定義情報を記憶する処理フロー定義情報記憶部と、処理フロー定義情報記憶部から読み出した処理フロー定義情報に基づき、処理フロー内における外部入出力を伴う処理のうち並列実行可能な処理を検出し、検出された前記並列実行可能な処理を並列的にコンピュータに実行させるとともに且つ処理フローの情報に基づく処理をコンピュータに実行させるプログラムを生成するプログラム生成部とを具備する。【選択図】      図１
2004178301.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに実行させる処理の処理フローの情報と、前記処理フロー内において外部入出力を伴う処理を示す情報とを含んだ処理フロー定義情報を記憶する処理フロー定義情報記憶部と、
前記処理フロー定義情報記憶部から読み出した前記処理フロー定義情報に基づき、前記処理フロー内における外部入出力を伴う処理のうち並列実行可能な処理を検出し、検出された前記並列実行可能な処理を並列的にコンピュータに実行させるとともに且つ前記処理フローの情報に基づく処理をコンピュータに実行させるプログラムを生成するプログラム生成部と
を具備することを特徴とするプログラム生成装置。
【請求項２】
請求項１に記載のプログラム生成装置であって、
前記プログラム生成部は、前記処理フローの情報に基づき、この処理フロー内に含まれる各処理のデータの定義引用関係を解析し、この定義引用関係に基づく処理の順序制約に応じて、前記プログラムを生成することを特徴とするプログラム生成装置。
【請求項３】
請求項１又は請求項２に記載のプログラム生成装置であって、
前記処理フロー定義情報記憶部に記憶されている前記処理フロー定義情報は、処理フロー内における処理種別情報を含んでおり、
前記プログラム生成部は、前記処理フロー定義情報に含まれる前記処理種別情報に基づいて並列実行可能な処理を検出する
ことを特徴とするプログラム生成装置。
【請求項４】
請求項３に記載のプログラム生成装置であって、
前記処理種別情報は、フローチャート内で処理種別を表わす図形情報であり、前記プログラム生成部は、前記処理フロー定義情報に含まれる前記図形情報に基づいて並列実行可能な処理の候補を検出する
ことを特徴とするプログラム生成装置。
【請求項５】
請求項４に記載のプログラム生成装置であって、
前記図形情報は、その処理種別に応じて当該処理に係るＣＰＵ待ち時間の程度を表わすＣＰＵ待ち時間程度情報を持っており、
前記プログラム生成部は、前記図形情報に含まれる前記ＣＰＵ待ち時間程度情報を参照することによって、その程度が所定レベル以上の場合に当該図形情報に係る処理を並列実行可能な処理の候補として検出する
ことを特徴とするプログラム生成装置。
【請求項６】
コンピュータに実行させる処理の処理フローの情報と、前記処理フロー内において外部入出力を伴う処理を示す情報とを含んだ処理フロー定義情報を記憶する処理フロー定義情報記憶部を具備するプログラム生成装置においてプログラムを生成するプログラム生成方法であって、
前記処理フロー定義情報記憶部から読み出した前記処理フロー定義情報に基づき、前記処理フロー内における外部入出力を伴う処理のうち並列実行可能な処理を検出し、検出された前記並列実行可能な処理を並列的にコンピュータに実行させるとともに且つ前記処理フローの情報に基づく処理をコンピュータに実行させるプログラムを生成するプログラム生成過程を有することを特徴とするプログラム生成方法。
【請求項７】
コンピュータに実行させる処理の処理フローの情報と、前記処理フロー内において外部入出力を伴う処理を示す情報とを含んだ処理フロー定義情報を記憶する処理フロー定義情報記憶部を具備するプログラム生成装置において業務処理プログラムを生成するためのプログラム生成プログラムであって、前記処理フロー定義情報記憶部から読み出した前記処理フロー定義情報に基づき、前記処理フロー内における外部入出力を伴う処理のうち並列実行可能な処理を検出し、検出された前記並列実行可能な処理を並列的にコンピュータに実行させるとともに且つ前記処理フローの情報に基づく処理をコンピュータに実行させる業務処理プログラムを生成するプログラム生成過程をコンピュータに実行させるプログラム生成プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、コンピュータのプログラム作成を必要とせずに業務処理システムを実現するための、いわゆるノンプログラミングツールを用いたプログラム生成装置およびその方法に関する。
【０００２】
【従来の技術】
従来、コンピュータプログラムの自動生成あるいは半自動生成のための研究・開発は数多く為されている。それらの成果の一部としては、プログラマの個性に依存せずに一定の品質のプログラムを生成することを目的として、利用者との対話形式により情報を取得し、この情報に基づいて、プログラムスケルトンを用いてアプリケーションプログラムを生成出力する装置が考案されている（例えば、特許文献１参照）。
【０００３】
また、近年インターネットの普及により、企業間取引をインターネットを通じて行うことをサポートするＢ２Ｂｉ（Ｂｕｓｉｎｅｓｓ−ｔｏ−Ｂｕｓｉｎｅｓｓ  Ｉｎｔｅｇｒａｔｉｏｎ；企業対企業統合）製品が市場に出回ってきている。企業内では部門毎に独自に構築を行ってきたシステムの連携を図り、業務連携による業務の効率化をサポートするＥＡＩ（Ｅｎｔｅｒｐｒｉｓｅ  Ａｐｐｌｉｃａｔｉｏｎ  Ｉｎｔｅｇｒａｔｉｏｎ；企業内アプリケーション統合）製品も市場に出回り、これら２つの機能を統合した製品も出荷され始めている。これらの製品には、ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ；グラフィカルユーザインタフェース）を通じて、プログラム作成なしで、つまりノンプログラミングで、業務処理を実現するためのデータ構造定義ツールや処理フローを定義する各種ダイアグラムが用意されている。
【０００４】
一例として、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）によって記述された注文メッセージを受信し、そのＸＭＬメッセージの構文解析を行い、その結果をＪａｖａ（登録商標）言語で取扱可能なオブジェクトに変換して、そのオブジェクトをメモリ上に展開し、このメモリ展開された注文情報に基づき、注文に含まれる複数の注文品各々について、その注文品を納入する納入業者のコンピュータに対して在庫状況を照会し、照会の結果得られた情報を反映した注文情報をデータベースに書き込むという一連の業務処理を考える。
この場合、利用者（システム開発者）は、上記のようなノンプログラミングツールを用いて、処理手順をフローチャート等で定義するとともに、ＸＭＬメッセージにおけるデータ定義とメモリ展開されたオブジェクトのデータ定義とデータベースに書き込まれるレコードのデータ定義とそれら各定義間の関係とを、ＧＵＩツールを用いて定義する。
【０００５】
【特許文献１】
特開平８−２０２５３９号公報
【０００６】
【発明が解決しようとする課題】
前述の例において１件の注文情報に複数件の注文品のデータが含まれている場合、従来のツールでは、複数件の注文品各々について、順次処理により、納入業者のコンピュータに対して在庫状況を照会するような方式をとる。このような方式で処理した場合、１件の注文情報に含まれる注文品の件数が多い（例えば、数十件）ときには、すべての注文品の在庫照会が終了するまでに時間がかかり、オンラインで注文を入力した注文者を、注文端末の前で長時間待たせることになってしまう。
【０００７】
仮に熟練プログラマが上記のような処理を行うプログラムを作成する場合には、納入業者のコンピュータへの照会を順次行うのではなく、すべての納入業者のコンピュータに対してまず照会のメッセージを送信してしまってから、各照会先からの応答メッセージを待つようなプログラムコードを記述することにより、全体の処理時間を削減する。つまり、並列処理プログラムを記述する。しかしながら、このようなプログラムコードを記述するためには、プログラマが、コンピュータアーキテクチャを良く理解しており、メモリの物理的なイメージを持っているとともに、並列処理の概念を理解していてそれを具体的に実現するだけのスキルを持っている必要がある。
【０００８】
ところが、そのような熟練プログラマの数は限られており、特に安価で調達することは困難である。また、そもそもノンプログラミングツールを利用する背景には、コンピュータアーキテクチャなどについて深い理解をしているプログラマがいなくても、業務処理（ビジネスロジックなど）を理解している者が効率的にシステムを開発しようという目的がある。従って、並列処理などを記述することのできる熟練プログラマがいなくても、データ構造や業務内容さえ正しく記述しさえすれば、処理時間の短い業務処理を実現できるようにすることが望ましい。
【０００９】
例えば、注文品の件数が２０件で、１件分の照会にかかる時間が３秒の場合、順次処理を行うと、照会だけで１分（３秒×２０件）の待ち時間が発生することになってしまう。
しかし、１件の照会にかかる３秒のうち、内部処理に要する時間が０．１秒で残りの２．９秒が外部の納入業者のコンピュータからの待ち時間であると仮定すると、並列処理にすることによって全体の待ち時間を４．９秒（内部処理０．１秒×２０件＋待ち時間２．９秒）に短縮できる。
このように、並列化などによる処理の効率化の効果は非常に大きい。
【００１０】
本発明は、上記のような事情を考慮して為されたものであり、利用者によって定義された処理フローに基づき、外部入出力を伴う処理を並列的に実行することのできる効率の良いプログラムコードを生成するプログラム生成装置および生成方法を提供することを目的とする。
【００１１】
【課題を解決するための手段】
上記の課題を解決するために、本発明は、コンピュータに実行させる処理の処理フローの情報と、前記処理フロー内において外部入出力を伴う処理を示す情報とを含んだ処理フロー定義情報を記憶する処理フロー定義情報記憶部と、前記処理フロー定義情報記憶部から読み出した前記処理フロー定義情報に基づき、前記処理フロー内における外部入出力を伴う処理のうち並列実行可能な処理を検出し、検出された前記並列実行可能な処理を並列的にコンピュータに実行させるとともに且つ前記処理フローの情報に基づく処理をコンピュータに実行させるプログラムを生成するプログラム生成部とを具備することを特徴とするプログラム生成装置を要旨とする。
また、本発明は、上記のプログラム生成装置において、前記プログラム生成部は、前記処理フローの情報に基づき、この処理フロー内に含まれる各処理のデータの定義引用関係を解析し、この定義引用関係に基づく処理の順序制約に応じて、前記プログラムを生成することを特徴とする。
また、本発明は、上記のプログラム生成装置において、前記処理フロー定義情報記憶部に記憶されている前記処理フロー定義情報は、処理フロー内における処理種別情報を含んでおり、前記プログラム生成部は、前記処理フロー定義情報に含まれる前記処理種別情報に基づいて並列実行可能な処理を検出することを特徴とするものである。
また、本発明は、上記のプログラム生成装置において、前記処理種別情報は、フローチャート内で処理種別を表わす図形情報であり、前記プログラム生成部は、前記処理フロー定義情報に含まれる前記図形情報に基づいて並列実行可能な処理の候補を検出することを特徴とするものである。
また、本発明は、上記のプログラム生成装置において、前記図形情報は、その処理種別に応じて当該処理に係るＣＰＵ待ち時間の程度を表わすＣＰＵ待ち時間程度情報を持っており、前記プログラム生成部は、前記図形情報に含まれる前記ＣＰＵ待ち時間程度情報を参照することによって、その程度が所定レベル以上の場合に当該図形情報に係る処理を並列実行可能な処理の候補として検出することを特徴とするものである。
【００１２】
また、本発明のプログラム生成方法は、コンピュータに実行させる処理の処理フローの情報と、前記処理フロー内において外部入出力を伴う処理を示す情報とを含んだ処理フロー定義情報を記憶する処理フロー定義情報記憶部を具備するプログラム生成装置においてプログラムを生成するためのプログラム生成方法であって、前記処理フロー定義情報記憶部から読み出した前記処理フロー定義情報に基づき、前記処理フロー内における外部入出力を伴う処理のうち並列実行可能な処理を検出し、検出された前記並列実行可能な処理を並列的にコンピュータに実行させるとともに且つ前記処理フローの情報に基づく処理をコンピュータに実行させるプログラムを生成するプログラム生成過程を有することを特徴とする。
【００１３】
コンピュータに実行させる処理の処理フローの情報と、前記処理フロー内において外部入出力を伴う処理を示す情報とを含んだ処理フロー定義情報を記憶する処理フロー定義情報記憶部を具備するプログラム生成装置において業務処理プログラムを生成するためのプログラム生成プログラムであって、前記処理フロー定義情報記憶部から読み出した前記処理フロー定義情報に基づき、前記処理フロー内における外部入出力を伴う処理のうち並列実行可能な処理を検出し、検出された前記並列実行可能な処理を並列的にコンピュータに実行させるとともに且つ前記処理フローの情報に基づく処理をコンピュータに実行させる業務処理プログラムを生成するプログラム生成過程をコンピュータに実行させるプログラム生成プログラムである。
【００１４】
【発明の実施の形態】
以下、図面を参照しこの発明の一実施形態について説明する。図１は、本実施形態によるプログラム生成装置の構成を示すブロック図である。この図において、符号１はプログラム生成装置、９１はプログラム生成装置１が出力する情報を利用者に対して表示する表示装置、９２は利用者からプログラム生成装置１への入力を受け付ける入力装置である。表示装置９１の具体例は、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ；陰極線管）や液晶やＰＤＰ（Ｐｌａｓｍａ  Ｄｉｓｐｌａｙ  Ｐａｎｅｌ；プラズマディスプレイパネル）などを利用したディスプレイ装置である。また、入力装置９２の具体例は、マウスなどのポインティングデバイスやキーボード、あるいはそれらを組み合わせたものである。
【００１５】
プログラム生成装置１の内部には、利用者から入力される情報などに応じて処理フローを定義する処理を行う処理フロー定義部１２と、処理フロー定義部１２によって定義された処理フロー定義情報を記憶する処理フロー定義情報記憶部２２とが存在している。また、プログラム生成装置１に設けられたプログラム生成部１０は、処理フロー定義情報記憶部２２から読み出した情報に基づいて、業務処理を実現するためのプログラム（業務処理プログラム）を生成し、このプログラムをプログラム記憶部３１に書き込む。
なお、プログラム記憶部３１に書き込まれたプログラムは、実行環境において実行可能な形式に変換し、実行することができる。
【００１６】
次に、プログラムを生成する元となる処理フロー定義情報について説明する。ここでは、処理フロー定義情報は、業務処理の流れを表すフローチャート情報と、より詳細な処理の内容を表す処理詳細情報とからなる。
図２は、処理フロー定義情報記憶部２２に記憶される処理フロー定義情報の一部であるフローチャート情報の例を示す概略図である。図示するように、本例では、まずＸＭＬオーダー情報（ＸＭＬで記述された注文情報データ）が入力される。次に、入力されたＸＭＬオーダー情報に基づいて、ＸＭＬオーダー情報構文解析処理が行われる。この構文解析処理の結果を用いてオーダー情報（注文情報データ）がメモリに展開される。そして、このメモリ展開されたオーダー情報に基づいて、
【００１７】
次に、在庫照会処理が行われる。この在庫照会処理では、通信を用いて外部のコンピュータに対して在庫の照会を行う。照会先の外部のコンピュータは、例えば、納入業者によって運営されているものであり、このコンピュータ上で在庫情報が管理されており、このコンピュータ上で実行される納入業者在庫照会プログラムが上記在庫情報に基づいて在庫状況のデータを照会元に返送する。なお、注文品によって納入業者が異なる場合には、各納入業者のコンピュータに対して在庫を照会する処理が行われる。そして、このような在庫照会処理の結果に基づいてメモリ展開されているオーダー情報に在庫情報が追記される。
そして、この照会結果の情報を含んだオーダー情報に基づいて、オーダー受付処理が行われる。オーダー受付処理においては、オーダーデータベースへの書き込みと、オーダー結果の出力とが行われる。
【００１８】
図３は、図２に含まれる在庫照会処理に対応する詳細処理情報を示す概略図である。図示するように、詳細処理情報は、入力データ（Ｉｎｐｕｔ  ）の定義と、処理内容そのものの定義と、出力データ（Ｏｕｔｐｕｔ）の定義とから成る。図４の例では、入力データおよび出力データとしては、メモリ展開されているオーダー情報（注文情報データ）が含まれる。また、外部のコンピュータに対して在庫照会を行う際には「納入業者在庫照会」のデータが外部のコンピュータに対して出力され、その在庫照会の結果として「在庫照会結果」のデータが入力される。
【００１９】
オーダー情報は構造体であり、そのメンバーとしては、注文番号を表す「ｏｒｄｅｒ＿ｎｏ」と、顧客識別情報を表わす「ｃｕｓｔ＿ｉｄ  」と、注文品に関する情報である「ｉｔｅｍ［］」が含まれる。なお、１件の注文に複数の注文品が含まれることがあり、それら各々の注文品に関する情報を格納するために上記の「ｉｔｅｍ［］」は配列の構造を有している。また、この配列「ｉｔｅｍ［］」の要素もまた構造体であり、その構造体のメンバーとしては、注文枝番を表わす「ｎｏ」と、品番を表わす「ｈｉｎｂａｎ」と、品名を表わす「ｈｉｎｍｅｉ」と、単価を表わす「ｔａｎｋａ」と、数量を表わす「ｓｕｕｒｙｏｕ  」と、在庫を表わす「ｚａｉｋｏ  」とが含まれる。
在庫照会の際に外部のコンピュータに対して渡される「納入業者在庫照会」のデータには、品番を表わす「ＨＩＮＢＡＮ」と、品名を表わす「ＨＩＮＭＥＩ」と、数量を表わす「ＳＵＵＲＹＯＵ  」とが含まれる。
在庫照会の結果として外部のコンピュータから返される「在庫照会結果」のデータには、在庫を表わす「ＺＡＩＫＯ  」が含まれる。このデータ「ＺＡＩＫＯ  」は、例えば注文品が在庫引当できたか否かを表わす値を保持する。あるいは、データ「ＺＡＩＫＯ  」は、注文の数量のうちの在庫引当済みの数量を表わす値を保持するようにしても良い。
【００２０】
そして、処理内容としては、入力のオーダー情報を基に、配列「ｉｔｅｍ［］」の各要素について、以下の繰り返し（ｌｏｏｐ）処理を行う。即ち、オーダー情報の各要素について、データ「ｈｉｎｂａｎ」の値を納入業者在庫照会の「ＨＩＮＢＡＮ」に格納し、データ「ｈｉｎｍｅｉ」の値を納入業者在庫照会の「ＨＩＮＭＥＩ」に格納し、データ「ｓｕｕｒｙｏｕ  」の値を納入業者在庫照会の「ＳＵＵＲＹＯＵ  」に格納する。
なお、図示していないが、品番と納入業者のコンピュータとの関係が、メモリ上の別のテーブルに記憶されており、このテーブルを参照することによって、品番を元に納入業者のコンピュータのアドレス情報（ホスト名やＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  ）アドレスなど）を取得する。
そして、「納入業者在庫照会」のデータをパラメータとして外部のコンピュータ上の納入業者在庫照会プログラムを呼び出す。
そして、その結果得られた「在庫照会結果」のデータに含まれるデータ「ＺＡＩＫＯ  」をオーダー情報内の配列「ｉｔｅｍ［］」の当該要素のメンバーである「ｚａｉｋｏ  」に格納する。
【００２１】
なお、「ＣＡＬＬ（納入業者在庫照会プログラム）」の行には「★」印が付されているが、これは、当該処理が外部への入出力を伴う処理であることを表わすものである。ここでは、プログラム生成装置の利用者が、処理フローを定義する際に該当する処理の部分に「★」印を付ける。この「★」印に関する情報、即ち処理全体の中のどの部分が外部入出力を伴う処理であるかを表す情報も、処理フロー定義情報の一部として、処理フロー定義情報記憶部に書き込まれる。
【００２２】
次に、プログラム生成部（図１の符号１０）がプログラムを生成する処理について説明する。プログラム生成部は、処理フロー定義情報記憶部から読み出した処理フロー定義情報に基づいて、まず、定義された一連の処理の中で外部入出力を伴う処理の部分を特定する。この特定には、上記の「★」印に対応する情報が用いられる。次に、上記の外部入出力を伴う処理の部分同士が、並列に処理可能であるかどうかをチェックする。そして、このチェックの結果、外部入出力を伴っており且つ並列処理可能な部分を並列に処理するようなプログラムコードを生成する。そして、生成されたプログラムがプログラム記憶部（図１の符号３１）に書き込まれる。
【００２３】
ここで、並列処理可能かどうかのチェックの方法について、図４〜図６を参照しながら、いくつかの例を説明する。
図４は、処理フロー定義情報に含まれる詳細処理情報の例を示す概略図である。この図に示す処理では、ｋ＝１，２，３，…，１００の各ｋについて、順次、次の処理を行う。即ち、配列要素ｂ［ｋ］の値を引数として遠隔手続ｒｐｃ１の呼び出しを行い、その結果の値を配列要素ｂ［ｋ］に格納し、次に、配列要素ｄ［ｋ］の値を引数として遠隔手続ｒｐｃ２の呼び出しを行い、その結果の値を配列要素ｃ［ｋ］に格納する。なお、これらの遠隔手続呼び出しｒｐｃ１とｒｐｃ２とは、それぞれ外部入出力を伴うものであるので、これらに対応してそれぞれ「★」印が付されている。
この図４に示す処理では、遠隔手続ｒｐｃ１の１００回（１≦ｋ≦１００）呼び出しの処理と連続手続ｒｐｃ２の１００回の呼び出しの処理の合計２００個の処理の中での相互間の依存関係は全く無い。つまり、この２００個の処理をどのような順序で行っても、同じ結果が得られるため、従って、論理的にこの２００個の処理を並列的に実行することが可能である。
【００２４】
図５は他の例を示す概略図であり、図５（ａ）は処理フロー定義情報に含まれる詳細処理情報を示し、図５（ｂ）はこの詳細処理情報を解析した結果得られる依存関係グラフを示している。
図５（ａ）のように定義されている処理では、１≦ｋ≦１００なる任意のｋに関して、遠隔手続ｒｐｃ１の呼び出しの結果得られるデータを配列要素ａ［ｋ］に格納し、そのａ［ｋ］の値を引数として遠隔手続ｒｐｃ２が呼び出される。また、これらの遠隔手続呼び出しｒｐｃ１とｒｐｃ２とは、それぞれ外部入出力を伴う。このように、あるｋに関して、遠隔手続ｒｐｃ１の処理が完了して結果が返された後でしか、遠隔手続ｒｐｃ２を呼び出すことはできない。図５（ｂ）の有向グラフは、そのような依存関係、即ち処理の実行の前後関係の制約を表わしており、例えば、ｋ＝１のときの「ｒｐｃ２」の処理はｋ＝１の「ｒｐｃ１」の処理の後にしか実行できない。図５（ｂ）の有向グラフにおいて連結されてないノード同士には、順序的な依存関係が無いため、これらを並列的に実行することが可能である。
【００２５】
図６はさらに他の例を示す概略図であり、図６（ａ）は処理フロー定義情報に含まれる詳細処理情報を示し、図６（ｂ）はこの詳細処理情報を解析した結果得られる依存関係グラフを示している。
図６（ａ）のように定義されている処理では、１≦ｋ≦１００なる任意のｋに関して、遠隔手続ｒｐｃ１の呼び出しの結果得られるデータを配列要素ａ［ｋ］に格納し、そのａ［ｋ］の値を引数として遠隔手続ｒｐｃ２が呼び出される。また、この遠隔手続ｒｐｃ２の呼び出しの結果得られるデータを配列要素ｂ［ｋ］に格納している。そして、このｂ［ｋ］の値が、次回のｒｐｃ１の引数として用いられる。
つまり、この処理全体において、ｋ＝１のときの「ｒｐｃ１」の処理の後にしかｋ＝１のときの「ｒｐｃ２」の処理を行えない。また、ｋ＝１のときの「ｒｐｃ２」の処理の後にしかｋ＝２のときの「ｒｐｃ１」の処理を行えない。以下同様に続き、結局合計２００回の遠隔手続の呼び出しの一部を並列的に実行することはできず、すべてを順次的に行う必要がある。
【００２６】
なお、プログラム生成部が上記のような解析を行うときに用いる、処理の順序関係の有向グラフをメモリ上で表現する方法は次に説明する通りである。図７は、プログラム生成部が処理の並列実行可能性の解析の際に一時的に書き込むテーブルの構成およびテーブルエントリの例を示す概略図である。図示するように、このテーブルは、有向グラフのノードを識別するための「ＩＤ」と、そのノードに対応する処理内容を表わす「外部入出力処理」と、当該ノードが依存するノードのＩＤを表わす「依存先」の各項目を有している。
図示するエントリ例は、図６（ｂ）の有向グラフに対応しており、ＩＤ＝１のノードの外部入出力処理は「ｒｐｃ１（ｋ＝１）」であり、このノードの依存先ノードは無い（φ：空集合。）また、ＩＤ＝２のノードの外部入出力処理は「ｒｐｃ２（ｋ＝１）」であり、このノードの依存先ノードはＩＤ＝１のノードである。また、ＩＤ＝３のノードの外部入出力処理は「ｒｐｃ１（ｋ＝２）」であり、このノードの依存先ノードはＩＤ＝２のノードである。以下、同様に続く。なお、例えば、「ＩＤ＝２のノードがＩＤ＝１のノードに依存する」とは、ＩＤ＝１のノードの処理が終わってからでないと、ＩＤ＝２のノードの処理を開始できないという意味である。
【００２７】
以上まとめると、ある記憶領域のデータに基づいて所定の処理を行いその処理結果を他の（または同一の）記憶領域に格納する場合、つまり、あるデータを引用してそれに基づくデータを定義する場合、この定義引用関係に基づいて、処理の順序制約を認識し、この処理の順序制約に基づいて、プログラム生成部がプログラムを生成する。そしてそのとき、順序制約が無い処理同士は、並列的に実行するようなプログラムを生成することができる。
なお、より一般的には、処理の流れを定義した情報において並列実行可能な部分を検出する方法としては、例えば、与えられたソースプログラムを基にベクトル演算可能なオブジェクトプログラムを生成する自動ベクトル化コンパイラにおける各種技術を援用できる。
【００２８】
以上のように、処理フロー定義情報に含まれる処理の流れの中で、外部入出力を伴う部分の処理のうちの並列実行可能な部分を検出した後、プログラム生成部はそのような並列処理をコンピュータに実行させるプログラムを生成する。
図３の例に戻って説明すると、プログラム生成部は、処理フロー定義情報記憶部から読み出した処理フロー定義情報に基づき、在庫照会処理の中の並列実行可能部分を検出する。つまり、在庫照会処理の中の繰り返し処理（ｌｏｏｐ）において、配列「ｉｔｅｍ［］」の要素毎に実行される納入業者在庫照会プログラムの呼び出しを相互に並列に実行できることを検出する。この検出結果に従って、プログラム生成部は、定義された当該処理フローを効率的に実行できるプログラムを生成する。
【００２９】
図８は、図３の詳細処理情報に基づいてプログラム生成部が生成したプログラムの処理手順を示すフローチャートである。以下、このフローチャートに沿って説明する。
生成されたプログラムは、まず、ステップＳ５１において、変数ｋに０を代入する。この変数ｋは、配列ｉｔｅｍ［］の添え字として用いるためのものである。
次に、ステップＳ５２において、配列ｉｔｅｍ［］のｋ番目（ｋ＝０，１，２，…）の要素、即ちｉｔｅｍ［ｋ］のデータ（品番、品名、数量を含む）を、ｉｔｅｍ［ｋ］用の「納入業者在庫照会」データに格納し、この「納入業者在庫照会」データを用いて外部のコンピュータ上の納入業者在庫照会プログラムを呼び出す。なお、このステップＳ５２においては、外部のコンピュータにおける納入業者在庫照会プログラムの実行の完了を待たずに、次のステップに進む。
次に、ステップＳ５３において、配列ｉｔｅｍ［］のすべての配列要素について外部の納入業者在庫照会プログラムの呼び出しが完了したかどうかを判断する。未完了の場合には、ステップＳ５４において変数ｋの値を１だけ増分してから、ステップＳ５２の処理に戻る、即ち、次の配列要素の処理に移る。完了していた場合には、そのままステップＳ６１へ進む。
このようにして、オーダー情報に含まれる配列ｉｔｅｍ［］の各要素について、外部のコンピュータに対する呼び出しを行う。
【００３０】
次に、ステップＳ６１において、外部の納入業者在庫照会プログラムの完了を待つ。実行していたプログラムのいずれかが完了することにより、この待ちが解除され、次のステップに進む。
次に、ステップＳ６２において、外部のコンピュータから返される「在庫照会結果」データ内のデータ「ＺＡＩＫＯ  」を用いて、配列ｉｔｅｍ［］内の該当する要素のメンバーであるｉｔｅｍ［］．ｚａｉｋｏ  への書き込みを行う。
そして、ステップＳ６３において、呼び出した納入業者在庫照会プログラムの全ての処理が完了したかどうかを判断する。「ＹＥＳ」の場合にはそのまま全体の処理を終了し、「ＮＯ」の場合にはステップＳ６１に戻る。
【００３１】
上述のプログラム生成装置はコンピュータシステムを用いて実現されている。そして、上述した処理フロー定義やプログラム生成の各処理の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをコンピュータが読み出して実行することによって、上記処理が行われる。ここでコンピュータ読み取り可能な記録媒体とは、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、半導体メモリ等をいう。また、このコンピュータプログラムを通信回線によってコンピュータに配信し、この配信を受けたコンピュータが当該プログラムを実行するようにしても良い。
【００３２】
以上、図面を参照してこの発明の実施形態を詳述してきたが、具体的な構成はこれらの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【００３３】
例えば、上記実施形態では、利用者が処理フロー定義の際に外部入出力処理を伴う部分に「★」印を付することとしていたが、他の方法で、外部入出力処理を伴う部分を指示するようにしても良い。例えば、外部入出力等を伴い、並列化の対象となり得る関数（あるいは手続、ルーチンなど）の一覧をテーブル上で管理しておき、この一覧に基づいて、プログラム生成部が外部入出力処理を伴う処理を行う部分を認識するようにしても良い。
また、処理フロー定義情報の中の処理内容を表わす図形の情報に基づいて、並列化の対象とする部分を決定するようにしても良い。図９は、図２に示したフローチャート情報のうち、フローチャートの図形情報のみを抽出した概略図である。図９において、符号Ａ１で示す図形（長方形）はプログラムによる処理（プロセス）を表わす。同じく、Ａ２で示す図形（横に倒したドラム状の図形）はオンライン記憶（半導体メモリなどによる記憶）を表わす。同じく、Ａ３で示す図形（立っている円柱形）は磁気ディスクによる記憶（データベースなど）を表わす。同じく、Ａ４で示す図形（平行四辺形）は入出力（送受信を含む）を表わす。同じく、Ａ５で示す図形（両端に矢印を有する折れ線）はオンライン通信（遠隔処理）を表わす。よって、フローチャート情報から抽出された図形情報を用いて、例えば、通常は最も長いＣＰＵ待ち時間を発生させるオンライン通信を伴う処理を並列化の対象の候補として決定することができる。図２で示したフローチャートからは、在庫照会処理がオンライン通信を伴う処理であることがわかる。そして、この在庫照会処理の詳細を定義した詳細処理情報（図３を参照）の中で「ＣＡＬＬ（納入業者在庫照会プログラム）」の部分が実際にオンライン通信を行う部分であることが特定できるので、この部分を並列化の対象とすることができる。
なお、並列化の対象をオンライン通信に限定する必要はない。オンライン通信に限らず、一般に図形情報に基づいて並列化の対象とする候補を検出するようにしても良い。
【００３４】
つまり、処理フロー定義情報記憶部に記憶されている前記処理フロー定義情報は処理フロー内における処理種別情報を含んでおり、プログラム生成部は処理フロー定義情報に含まれる前記処理種別情報に基づいて並列実行可能な処理を検出する。より具体的には、この処理種別情報とはフローチャート内で処理種別を表わす図形情報であり、プログラム生成部はこの図形情報に基づいてオンライン通信を伴う処理などを並列実行可能な処理の候補として検出する。これによって、利用者は「★」印を付けるなどといった方法で明示的に並列化の対象の候補を定義しなくて済む。
【００３５】
さらに、次にような方法で、フローチャート内の図形情報に基づいて並列化の対象となる処理を決定するようにしても良い。すなわち、フローチャート内に含まれる各図形記号毎に、当該記号の処理におけるＣＰＵ待ち時間に関する情報をその記号の属性情報として予め持っておき、この属性情報に応じて、どの処理を並列化の対象とするかを決定する。
【００３６】
具体的には、例えば、オンライン通信を伴う処理においては数秒の単位のＣＰＵ待ち時間が生じる。また、磁気ディスク装置への入出力（データベースの入出力など）を伴う処理においては、数百ミリ秒単位のＣＰＵ待ち時間が生じる。このようなＣＰＵ待ち時間の程度を、例えば、待ち時間の秒数に関する１０を底とする対数で表わす。つまり、オンライン通信を伴う処理を伴う処理は１０の１乗のオーダーのＣＰＵ待ち時間が生じるので、図９のＡ５で示した図形記号（両端矢印の折れ線）には「１」という属性情報を予め持たせておく。同様に、磁気ディスク装置への入出力を伴う処理は１０の（−１）乗のオーダーのＣＰＵ待ち時間が生じるので、図９のＡ３で示した図形記号には「−１」という属性情報を予め持たせておく。そして、プログラム生成部は、フローチャート内の図形情報が有する属性情報を参照することにより、所定の程度以上のＣＰＵ待ち時間が生じる処理のみを並列化の対象の候補とする。
【００３７】
上記のような方法で並列化の対象を決定することにより、真に処理時間の短縮につながる並列化を行うことが可能となる。その理由としては、仮に、ＣＰＵの待ち時間の程度によらず、少しでもＣＰＵ待ち時間の生じる可能性のある処理をすべて並列化してしまうと、並列処理を行うために必要なタスクディスパッチング処理のためのオーバーヘッド（オペレーティングシステムがプロセス管理情報を書き換えたり、ディスパッチされるためのメモリの割り付けを行ったりするための処理時間など）が生じて、却って全体としての処理時間が長くなってしまい、非効率な状況が生じることにつながるからである。
【００３８】
つまり、前記図形情報はその処理種別に応じて当該処理に係るＣＰＵ待ち時間の程度を表わすＣＰＵ待ち時間程度情報を持っており、プログラム生成部は、この図形情報に含まれるＣＰＵ待ち時間程度情報を参照することによって、その程度が所定レベル以上の場合に当該図形情報に係る処理を並列実行可能な処理の候補として検出するようにする。
【００３９】
また、上記実施形態では、繰り返し処理（ｌｏｏｐ）として定義された処理において並列実行可能な処理を検出する例を説明したが、繰り返し処理に限らず、例えば図４に示すような遠隔手続ｒｐｃ１とｒｐｃ２との間の関係のように、単に並べて定義された処理同士を並列化するようにしても良い。
また、上記実施形態では、外部入出力処理として、外部コンピュータへの手続呼び出しの例を挙げて説明したが、これに限らず、ＣＰＵにおける内部処理に比べて桁違いに時間のかかる処理一般（外部との通信待ち、外部記録媒体などの入出力待ち、利用者の応答待ちなど）について、並列化により全体の処理時間の短縮を図ることができる。
【００４０】
【発明の効果】
以上説明したように、この発明によれば、コンピュータに実行させる処理の処理フローの情報と、前記処理フロー内において外部入出力を伴う処理を示す情報とを含んだ処理フロー定義情報を処理フロー定義情報記憶部に記憶させる。そして、プログラム生成部は、処理フロー定義情報記憶部から読み出した処理フロー定義情報に基づき、前記処理フロー内における外部入出力を伴う処理のうち並列実行可能な処理を検出し、検出された前記並列実行可能な処理を並列的にコンピュータに実行させるプログラムを生成する。これにより、利用者が定義した処理フローに基づいて、自動的に並列化処理を行うプログラムを生成できる。従って、利用者が処理を定義する際にその並列性を意識する必要が無く、かつ処理時間を短縮することができる。これにより、熟練プログラマが、効率の良い並列処理プログラムをわざわざ作成する必要が無い。
【図面の簡単な説明】
【図１】この発明の一実施形態によるプログラム生成装置の構成を示すブロック図である。
【図２】同実施形態により、処理フロー定義情報記憶部に記憶される処理フロー定義情報の一部であるフローチャート情報の例を示す概略図である。
【図３】図２に含まれる在庫照会処理に対応する詳細処理情報を示す概略図である。
【図４】同実施形態における処理フロー定義情報に含まれる詳細処理情報の例を示す概略図である。
【図５】同実施形態における処理フロー定義情報に含まれる詳細処理情報の例であり、図５（ａ）は処理フロー定義情報に含まれる詳細処理情報を示し、図５（ｂ）は詳細処理情報を解析した結果得られる依存関係グラフを示す。
【図６】同実施形態における処理フロー定義情報に含まれる詳細処理情報の例であり、図６（ａ）は処理フロー定義情報に含まれる詳細処理情報を示し、図６（ｂ）は詳細処理情報を解析した結果得られる依存関係グラフを示す。
【図７】同実施形態において、処理の並列実行可能性の解析の際に一時的に書き込むテーブルの構成およびテーブルエントリの例を示す概略図である。
【図８】同実施形態において、プログラム生成部が生成したプログラムの処理手順を示すフローチャートの例である。
【図９】図２に示したフローチャート情報のうち、フローチャートの図形情報のみを抽出した概略図である。
【符号の説明】
１  プログラム生成装置
１０  プログラム生成部
１２  処理フロー定義部
２２  処理フロー定義情報記憶部
３１  プログラム記憶部
９１  表示装置
９２  入力装置
【図１】
2004178301.tif 000003
【図２】
2004178301.tif 000004
【図３】
2004178301.tif 000005
【図４】
2004178301.tif 000006
【図５】
2004178301.tif 000007
【図６】
2004178301.tif 000008
【図７】
2004178301.tif 000009
【図８】
2004178301.tif 000010
【図９】
2004178301.tif 000011