(57)【特許請求の範囲】
【請求項１】
ソフトウェア仕様変換の方法であって、
第１のプログラミング言語で指定された第１のソフトウェア仕様を受け取るステップと、
第２のプログラミング言語で指定された第２のソフトウェア仕様を受け取るステップと、
前記第１及び第２のプログラミング言語とは異なる第３のプログラミング言語で指定された第３のソフトウェア仕様を受け取るステップであって、前記第３のソフトウェア仕様が前記第１のソフトウェア仕様と前記第２のソフトウェア仕様との間の１又は２以上のデータ関係を定義する、ステップと、
前記第１のソフトウェア仕様の表現を、前記第１、第２、及び第３のプログラミング言語とは異なる第４のプログラミング言語で形成するステップと、
前記第２のソフトウェア仕様の表現を前記第４のプログラミング言語で形成するステップと、
前記第３のソフトウェア仕様を分析して前記１又は２以上のデータ関係を識別するステップと、
前記第１のソフトウェア仕様と前記第２のソフトウェア仕様との結合された表現を前記第４のプログラミング言語で形成するステップであって、前記識別された１又は２以上のデータ関係に従って、前記第４のプログラミング言語による前記第１のソフトウェア仕様の前記表現と、前記第４のプログラミング言語による前記第２のソフトウェア仕様の前記表現との間の接続を、前記第４のプログラミング言語で形成することを含むステップと、を含む方法。
【請求項２】
第１のプログラミング言語が手続き型プログラミング言語である、請求項１に記載の方法。
【請求項３】
第４のプログラミング言語が、ソフトウェア仕様の異なる部分間の並列性を可能にする、請求項２に記載の方法。
【請求項４】
第４のプログラミング言語が複数のタイプの並列性を可能にし、前記複数のタイプの並列性が、
ソフトウェア仕様のある部分の複数のインスタンスが入力データストリームの異なる複数の部分に作用するのを可能にする、第１のタイプの並列性と、
ソフトウェア仕様の異なる複数の部分が前記入力データストリームの異なる複数の部分に対して同時に実行されるのを可能にする、第２のタイプの並列性とを含む、請求項３に記載の方法。
【請求項５】
第２のプログラミング言語が手続き型プログラミング言語である、請求項２に記載の方法。
【請求項６】
第２のプログラミング言語が第１のプログラミング言語と同じである、請求項２に記載の方法。
【請求項７】
第１のソフトウェア仕様と第２のソフトウェア仕様との間の１又は２以上のデータ関係が、前記第１のソフトウェア仕様が第１のデータセットからデータを受け取り、前記第２のソフトウェア仕様が前記第１のデータセットにデータを提供することに対応する少なくとも１つのデータ関係を含む、請求項１に記載の方法。
【請求項８】
第４のプログラミング言語がデータフローグラフベースのプログラミング言語である、請求項１に記載の方法。
【請求項９】
第４のプログラミング言語による接続が、データのフローを表す有向リンクに対応する、請求項８に記載の方法。
【請求項１０】
第１のソフトウェア仕様が、１又は２以上のデータセットと対話するように構成され、各データセットが、前記第１のソフトウェア仕様において複数のデータセットタイプのうちの関連するデータセットタイプを有し、第２のソフトウェア仕様が、１又は２以上のデータセットと対話するように構成され、各データセットが、前記第２のソフトウェア仕様において前記複数のデータセットタイプのうちの関連するタイプを有し、方法がさらに、
前記第１のソフトウェア仕様を処理するステップを含み、前記処理するステップが、
前記第１のソフトウェア仕様の前記１又は２以上のデータセットを識別し、前記識別された１又は２以上のデータセットのそれぞれにつき、前記第１のソフトウェア仕様における前記データセットの前記関連するタイプを決定するステップと、
前記第１のソフトウェア仕様の表現を第４のプログラミング言語で形成するステップであって、前記識別された１又は２以上のデータセットのそれぞれにつき、前記データセットの仕様を前記第４のプログラミング言語で形成するステップを含み、前記第４のプログラミング言語による前記データセットの前記仕様が、第１のプログラミング言語による前記データセットの前記関連するタイプに対応するタイプを有する、ステップとを含み、
前記第４のプログラミング言語による前記１又は２以上のデータセットの前記仕様の少なくとも１つが、入力データセットタイプ又は出力データセットタイプを有し、前記方法がさらに、
前記第２のソフトウェア仕様を処理するステップを含み、前記処理するステップが、
前記第２のソフトウェア仕様の前記１又は２以上のデータセットを識別し、前記識別された１又は２以上のデータセットのそれぞれにつき、前記第２のソフトウェア仕様における前記データセットの前記関連するタイプを決定するステップと、
前記第２のソフトウェア仕様の表現を前記第４のプログラミング言語で形成するステップであって、前記識別された１又は２以上のデータセットのそれぞれにつき、前記データセットの仕様を前記第４のプログラミング言語で形成するステップを含み、前記第４のプログラミング言語による前記データセットの前記仕様が、前記第１のプログラミング言語による前記データセットの前記関連するタイプに対応するタイプを有する、ステップとを含み、
前記第４のプログラミング言語による前記１又は２以上のデータセットの前記仕様の少なくとも１つが、入力機能又は出力機能を可能にする、請求項１に記載の方法。
【請求項１１】
結合された表現を形成するステップが、
入力機能を可能にする第４のプログラミング言語による第２のソフトウェア仕様の１又は２以上のデータセットの仕様と、前記第４のプログラミング言語による前記第２のソフトウェア仕様の表現との間の接続を、前記第４のプログラミング言語による第１のソフトウェア仕様の表現と、前記第４のプログラミング言語による前記第２のソフトウェア仕様の前記表現との間の接続で置き換えるために、１又は２以上の接続を形成するステップと、
入力機能を可能にする前記第４のプログラミング言語による前記第１のソフトウェア仕様の１又は２以上のデータセットの仕様と、前記第４のプログラミング言語による前記第１のソフトウェア仕様の前記表現との間の接続を、前記第４のプログラミング言語による前記第２のソフトウェア仕様の前記表現と、前記第４のプログラミング言語による前記第１のソフトウェア仕様の前記表現との間の接続で置き換えるために、１又は２以上の接続を形成するステップと、のうちの少なくとも一方を含む、請求項１０に記載の方法。
【請求項１２】
第４のプログラミング言語による第１のソフトウェア仕様の表現中で出力機能を可能にする、前記第４のプログラミング言語による前記第１のソフトウェア仕様の１若しくは２以上のデータセットを保存するステップ、又は、
前記第４のプログラミング言語による第２のソフトウェア仕様の表現中で出力機能を可能にする、前記第４のプログラミング言語による前記第２のソフトウェア仕様の１若しくは２以上のデータセットを保存するステップをさらに含む、請求項１１に記載の方法。
【請求項１３】
第１のソフトウェア仕様が１又は２以上のデータ変形操作を含み、前記第１のソフトウェア仕様を分析するステップが、前記１又は２以上のデータ変形操作のうちの少なくともいくつかを識別して、前記識別されたデータ変形操作を、第４のプログラミング言語の対応するデータ変形タイプに分類するステップを含み、
前記第１のソフトウェア仕様の表現を前記第４のプログラミング言語で形成するステップが、前記識別されたデータ変形操作のそれぞれにつき、前記データ変形操作の仕様を前記第４のプログラミング言語で形成するステップを含み、前記第４のプログラミング言語による前記データ変形操作の前記仕様が、第１のプログラミング言語による前記識別されたデータ変形操作の前記データ変形タイプに対応するデータ変形操作を可能にする、請求項１０に記載の方法。
【請求項１４】
第４のプログラミング言語による１又は２以上のデータセットの仕様の少なくとも１つが、読取専用ランダムアクセスデータセットタイプを有する、請求項１０に記載の方法。
【請求項１５】
第１のソフトウェア仕様におけるデータセットの関連するタイプを決定するステップが、データセット定義と前記データセットにアクセスするコマンドとのパラメータを分析するステップを含む、請求項１０に記載の方法。
【請求項１６】
パラメータが、データセットに関連するファイル編成、前記データセットに関連するアクセスモード、前記データセットを開くのに使用されるモード、及び入出力操作、のうちの１又は２以上を含む、請求項１５に記載の方法。
【請求項１７】
第１のソフトウェア仕様と第２のソフトウェア仕様との結合された表現をストレージ媒体に記憶するステップをさらに含む、請求項１に記載の方法。
【請求項１８】
第１のソフトウェア仕様が、１又は２以上のデータセットと対話する１又は２以上のデータ処理操作を定義し、第２のソフトウェア仕様が、１又は２以上のデータセットと対話する１又は２以上のデータ処理操作を定義する、請求項１に記載の方法。
【請求項１９】
第３のソフトウェア仕様が、第１のソフトウェア仕様の１又は２以上のデータセットと、第２のソフトウェア仕様の１又は２以上のデータセットとの間の、１又は２以上のデータ関係を定義する、請求項１８に記載の方法。
【請求項２０】
ソフトウェア仕様変換のための、コンピュータ可読媒体に非一時的な形で記憶されたソフトウェアであって、
第１のプログラミング言語で指定された第１のソフトウェア仕様を受け取ること、
第２のプログラミング言語で指定された第２のソフトウェア仕様を受け取ること、
前記第１及び第２のプログラミング言語とは異なる第３のプログラミング言語で指定された第３のソフトウェア仕様を受け取ることであって、前記第３のソフトウェア仕様が、前記第１のソフトウェア仕様と前記第２のソフトウェア仕様との間の１又は２以上のデータ関係を定義する、受け取ること、
前記第１のソフトウェア仕様の表現を、前記第１、第２、及び第３のプログラミング言語とは異なる第４のプログラミング言語で形成すること、
前記第２のソフトウェア仕様の表現を前記第４のプログラミング言語で形成すること、
前記第３のソフトウェア仕様を分析して前記１又は２以上のデータ関係を識別すること、並びに、
前記第１のソフトウェア仕様と前記第２のソフトウェア仕様との結合された表現を前記第４のプログラミング言語で形成することであって、前記識別された１又は２以上のデータ関係に従って、前記第４のプログラミング言語による前記第１のソフトウェア仕様の前記表現と、前記第４のプログラミング言語による前記第２のソフトウェア仕様の前記表現との間の接続を、前記第４のプログラミング言語で形成することを含む、形成すること、をコンピューティングシステムに行わせるための命令を含むソフトウェア。
【請求項２１】
ソフトウェア仕様変換のためのコンピューティングシステムであって、
ソフトウェア仕様を受け取るように構成された入力デバイス又はポートを備え、前記ソフトウェア仕様が、
第１のプログラミング言語で指定された第１のソフトウェア仕様と、
第２のプログラミング言語で指定された第２のソフトウェア仕様と、
前記第１及び第２のプログラミング言語とは異なる第３のプログラミング言語で指定された第３のソフトウェア仕様とを含み、前記第３のソフトウェア仕様が、前記第１のソフトウェア仕様と前記第２のソフトウェア仕様との間の１又は２以上のデータ関係を定義し、前記コンピューティングシステムが、
前記受け取られたソフトウェア仕様を処理するように構成された少なくとも１つのプロセッサを備え、前記処理することが、
前記第１のソフトウェア仕様の表現を、前記第１、第２、及び第３のプログラミング言語とは異なる第４のプログラミング言語で形成すること、
前記第２のソフトウェア仕様の表現を前記第４のプログラミング言語で形成すること、
前記第３のソフトウェア仕様を分析して前記１又は２以上のデータ関係を識別すること、並びに、
前記第１のソフトウェア仕様と前記第２のソフトウェア仕様との結合された表現を前記第４のプログラミング言語で形成することであって、前記識別された１又は２以上のデータ関係に従って、前記第４のプログラミング言語による前記第１のソフトウェア仕様の前記表現と、前記第４のプログラミング言語による前記第２のソフトウェア仕様の前記表現との間の接続を、前記第４のプログラミング言語で形成することを含む、形成すること、を含む、コンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１３年１２月６日に出願された米国特許出願第６１／９１２，５９４号明細書に対する優先権を主張するものである。
【０００２】
本記述は、ソースコード変換に関し、詳細には、１又は２以上の元のソフトウェアプログラミング言語で指定されたソースコードを、１又は２以上の他の異なるソフトウェアプログラミング言語に変換することに関する。
【背景技術】
【０００３】
ソフトウェア開発の分野では、ソフトウェア技術者は、いくつかの異なるプログラミング言語のうちの１又は２以上でソフトウェアを開発することを選ぶことができる。本記述の執筆時点で、開発者によって従来使用されている現代のプログラミング言語のいくつかの例は、Ｊａｖａ、Ｃ＃、及びＣ＋＋である。一般に、各プログラミング言語にはその利点と欠点があり、所与のアプリケーションのための適切なプログラミング言語を選ぶときにこれらの利点と欠点を考慮に入れることは、ソフトウェア技術者の仕事である。
【０００４】
長年にわたり、プログラミング言語の最新技術は進歩してきており、それにより、いくつかの初期のプログラミング言語は、より使用されなくなり、もはやサポートされなくなり、及び／又は時代遅れになった。このような初期のプログラミング言語のいくつかの例は、Ｂａｓｉｃ及びＦｏｒｔｒａｎである。それでもなお、「レガシー」コードとしばしば呼ばれるこれらの初期のプログラミング言語で書かれたソースコードは、その十分な性能により、何年も生産され続けることが一般的にある。しかし、このようなレガシーコードが十分に機能しなくなり、コードへの変更が必要になったとき、レガシーコードを更新するための必要なスキルを有するソフトウェア技術者を見つけるのが困難である可能性がある。
【０００５】
この理由で、ソース間（source-to-source）コンパイラが開発された。ソース間コンパイラは、第１のプログラミング言語で指定された第１のソフトウェア仕様を入力として受け取り、第２の異なるプログラミング言語で指定された第２のソフトウェア仕様を出力として生成する。このようなソース間コンパイラを使用して、レガシーコードは現代のプログラミング言語に変換され、これらの現代のプログラミング言語は、現代のプログラミング言語の使用に熟練したソフトウェア技術者によってより容易に編集される。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
解決される技術的問題は、手続き型言語によるソースコードを含むソフトウェア仕様と、手続き型プログラミング構成体に制限される言語ではなく異なるモダリティを使用して動作する言語によるソースコードを含むソフトウェア仕様と、の間で変換することに関係する。例えば、言語は、異なる手続き間で明示的に行われる制御のみによって実行が駆動されるのではなく、データが単独で又は明示的な制御フローとの組合せで異なるプログラミングエンティティ間を流れて実行を駆動することを伴うモダリティで動作する場合がある。このような根本的な違いを有する言語間でソースコードを変換することは、異なるスタイルの言語間での単なる文字変換以上のものを必要とする。複数の言語によるソースコードを伴うシステムの場合、解決される別の技術的問題は、これらの複数の言語の特徴を異なる言語に組み込んだ、新しいシステムのためのソースコードを提供することに関係する。
【課題を解決するための手段】
【０００７】
一態様では、一般に、ソフトウェア仕様変換の方法は：第１のプログラミング言語（例えばＣＯＢＯＬ）で指定された第１のソフトウェア仕様を受け取るステップと；第２のプログラミング言語（例えばＣＯＢＯＬ）で指定された第２のソフトウェア仕様を受け取るステップと；第３のプログラミング言語（いくつかの実施形態では、第３のプログラミング言語は、第１及び第２のプログラミング言語とは異なり、例えばＪＣＬである）で指定された第３のソフトウェア仕様を受け取るステップであって、第３のソフトウェア仕様が第１のソフトウェア仕様と第２のソフトウェア仕様との間の１又は２以上のデータ関係を定義する、ステップと；第１のソフトウェア仕様の表現を、第１、第２、及び第３のプログラミング言語とは異なる第４のプログラミング言語（例えばデータフローグラフ）で形成するステップと；第２のソフトウェア仕様の表現を第４のプログラミング言語で形成するステップと；第３のソフトウェア仕様を分析して１又は２以上のデータ関係を識別するステップと；第１のソフトウェア仕様と第２のソフトウェア仕様との結合された表現を第４のプログラミング言語で形成するステップであって、識別された１又は２以上のデータ関係に従って、第４のプログラミング言語による第１のソフトウェア仕様の表現と、第４のプログラミング言語による第２のソフトウェア仕様の表現との間の接続を、第４のプログラミング言語で形成することを含むステップと、を含む。
【０００８】
態様は、以下の特徴のうちの１又は２以上を含むことができる。
【０００９】
第１のプログラミング言語は、手続き型プログラミング言語である。
【００１０】
第４のプログラミング言語は、ソフトウェア仕様の異なる部分間の並列性を可能にする。
【００１１】
第４のプログラミング言語は、複数のタイプの並列性を可能にする。これらの複数のタイプの並列性は：ソフトウェア仕様のある部分の複数のインスタンスが入力データストリームの異なる複数の部分に作用するのを可能にする、第１のタイプの並列性と；ソフトウェア仕様の異なる複数の部分が入力データストリームの異なる複数の部分に対して同時に実行されるのを可能にする、第２のタイプの並列性と、を含む。
【００１２】
第２のプログラミング言語は、手続き型プログラミング言語である。
【００１３】
第２のプログラミング言語は、第１のプログラミング言語と同じである。
【００１４】
第１のソフトウェア仕様と第２のソフトウェア仕様との間の１又は２以上のデータ関係は、第１のソフトウェア仕様が第１のデータセットからデータを受け取り、第２のソフトウェア仕様が第１のデータセットにデータを提供することに対応する、少なくとも１つのデータ関係を含む。
【００１５】
第４のプログラミング言語は、データフローグラフベースのプログラミング言語である。
【００１６】
第４のプログラミング言語による接続は、データのフローを表す有向リンクに対応する。
【００１７】
第１のソフトウェア仕様は、１又は２以上のデータセットと対話するように構成され、各データセットは、第１のソフトウェア仕様において複数のデータセットタイプのうちの関連するデータセットタイプを有する。第２のソフトウェア仕様は、１又は２以上のデータセットと対話するように構成され、各データセットは、第２のソフトウェア仕様において複数のデータセットタイプのうちの関連するタイプを有する。この方法はさらに、第１のソフトウェア仕様を処理するステップを含み、処理するステップは：第１のソフトウェア仕様の１又は２以上のデータセットを識別し、識別された１又は２以上のデータセットのそれぞれにつき、第１のソフトウェア仕様におけるデータセットの関連するタイプを決定するステップと；第１のソフトウェア仕様の表現を第４のプログラミング言語で形成するステップであって、識別された１又は２以上のデータセットのそれぞれにつき、データセットの仕様を第４のプログラミング言語で形成することを含み、第４のプログラミング言語によるデータセットの仕様が、第１のプログラミング言語によるデータセットの関連するタイプに対応するタイプを有する、ステップとを含み、第４のプログラミング言語による１又は２以上のデータセットの仕様の少なくとも１つは、入力データセットタイプ又は出力データセットタイプを有する。この方法はさらに、第２のソフトウェア仕様を処理するステップを含み、処理するステップは：第２のソフトウェア仕様の１又は２以上のデータセットを識別し、識別された１又は２以上のデータセットのそれぞれにつき、第２のソフトウェア仕様におけるデータセットの関連するタイプを決定するステップと；第２のソフトウェア仕様の表現を第４のプログラミング言語で形成するステップであって、識別された１又は２以上のデータセットのそれぞれにつき、データセットの仕様を第４のプログラミング言語で形成することを含み、第４のプログラミング言語によるデータセットの仕様が、第１のプログラミング言語によるデータセットの関連するタイプに対応するタイプを有する、ステップとを含み、第４のプログラミング言語による１又は２以上のデータセットの仕様の少なくとも１つは、入力機能又は出力機能を可能にする。
【００１８】
結合された表現を形成するステップは：入力機能を可能にする第４のプログラミング言語による第２のソフトウェア仕様の１又は２以上のデータセットの仕様と、第４のプログラミング言語による第２のソフトウェア仕様の表現との間の接続を、第４のプログラミング言語による第１のソフトウェア仕様の表現と、第４のプログラミング言語による第２のソフトウェア仕様の表現との間の接続で置き換えるために、１又は２以上の接続を形成するステップと；入力機能を可能にする第４のプログラミング言語による第１のソフトウェア仕様の１又は２以上のデータセットの仕様と、第４のプログラミング言語による第１のソフトウェア仕様の表現との間の接続を、第４のプログラミング言語による第２のソフトウェア仕様の表現と、第４のプログラミング言語による第１のソフトウェア仕様の表現との間の接続で置き換えるために、１又は２以上の接続を形成するステップと、のうちの少なくとも一方を含む。
【００１９】
この方法はさらに：第４のプログラミング言語による第１のソフトウェア仕様の表現中で出力機能を可能にする、第４のプログラミング言語による第１のソフトウェア仕様の１若しくは２以上のデータセットを保存するステップ；又は、第４のプログラミング言語による第２のソフトウェア仕様の表現中で出力機能を可能にする、第４のプログラミング言語による第２のソフトウェア仕様の１若しくは２以上のデータセットを保存するステップを含む。
【００２０】
第１のソフトウェア仕様は１又は２以上のデータ変形操作を含み、第１のソフトウェア仕様を分析するステップは、１又は２以上のデータ変形操作のうちの少なくともいくつかを識別して、識別されたデータ変形操作を、第４のプログラミング言語の対応するデータ変形タイプに分類するステップを含む。第１のソフトウェア仕様の表現を第４のプログラミング言語で形成するステップは、識別されたデータ変形操作のそれぞれにつき、データ変形操作の仕様を第４のプログラミング言語で形成するステップを含み、第４のプログラミング言語によるデータ変形操作の仕様は、第１のプログラミング言語による識別されたデータ変形操作のデータ変形タイプに対応するデータ変形操作を可能にする。
【００２１】
第４のプログラミング言語による１又は２以上のデータセットの仕様の少なくとも１つは、読取専用ランダムアクセスデータセットタイプを有する。
【００２２】
第１のソフトウェア仕様におけるデータセットの関連するタイプを決定するステップは、データセット定義とデータセットにアクセスするコマンドとのパラメータを分析するステップを含む。
【００２３】
パラメータは、データセットに関連するファイル編成、データセットに関連するアクセスモード、データセットを開くのに使用されるモード、及び入出力操作、のうちの１又は２以上を含む。
【００２４】
この方法はさらに、第１のソフトウェア仕様と第２のソフトウェア仕様との結合された表現をストレージ媒体に記憶するステップを含む。
【００２５】
第１のソフトウェア仕様は、１又は２以上のデータセットと対話する１又は２以上のデータ処理操作を定義し、第２のソフトウェア仕様は、１又は２以上のデータセットと対話する１又は２以上のデータ処理操作を定義する。
【００２６】
第３のソフトウェア仕様は、第１のソフトウェア仕様の１又は２以上のデータセットと、第２のソフトウェアの１又は２以上のデータセットとの間の、１又は２以上のデータ関係を定義する。
【００２７】
別の態様では、一般に、ソフトウェア仕様変換のために、ソフトウェアがコンピュータ可読媒体に非一時的な形で記憶される。このソフトウェアは：第１のプログラミング言語で指定された第１のソフトウェア仕様を受け取ること；第２のプログラミング言語で指定された第２のソフトウェア仕様を受け取ること；第１及び第２のプログラミング言語とは異なる第３のプログラミング言語で指定された第３のソフトウェア仕様を受け取ることであって、第３のソフトウェア仕様が、第１のソフトウェア仕様と第２のソフトウェア仕様との間の１又は２以上のデータ関係を定義する、受け取ること；第１のソフトウェア仕様の表現を、第１、第２、及び第３のプログラミング言語とは異なる第４のプログラミング言語で形成すること；第２のソフトウェア仕様の表現を第４のプログラミング言語で形成すること；第３のソフトウェア仕様を分析して１又は２以上のデータ関係を識別すること；並びに、第１のソフトウェア仕様と第２のソフトウェア仕様との結合された表現を第４のプログラミング言語で形成することであって、識別された１又は２以上のデータ関係に従って、第４のプログラミング言語による第１のソフトウェア仕様の表現と、第４のプログラミング言語による第２のソフトウェア仕様の表現との間の接続を、第４のプログラミング言語で形成することを含む、形成すること、をコンピューティングシステムに行わせるための命令を含む。
【００２８】
別の態様では、一般に、ソフトウェア仕様変換のためのコンピューティングシステムは、ソフトウェア仕様を受け取るように構成された入力デバイス又はポートを備え、ソフトウェア仕様は：第１のプログラミング言語で指定された第１のソフトウェア仕様と；第２のプログラミング言語で指定された第２のソフトウェア仕様と；第１及び第２のプログラミング言語とは異なる第３のプログラミング言語で指定された第３のソフトウェア仕様とを含み、第３のソフトウェア仕様は、第１のソフトウェア仕様と第２のソフトウェア仕様との間の１又は２以上のデータ関係を定義する。コンピューティングシステムはまた、受け取られたソフトウェア仕様を処理するように構成された少なくとも１つのプロセッサを備え、処理することは：第１のソフトウェア仕様の表現を、第１、第２、及び第３のプログラミング言語とは異なる第４のプログラミング言語で形成すること；第２のソフトウェア仕様の表現を第４のプログラミング言語で形成すること；第３のソフトウェア仕様を分析して１又は２以上のデータ関係を識別すること；並びに、第１のソフトウェア仕様と第２のソフトウェア仕様との結合された表現を第４のプログラミング言語で形成することであって、識別された１又は２以上のデータ関係に従って、第４のプログラミング言語による第１のソフトウェア仕様の表現と、第４のプログラミング言語による第２のソフトウェア仕様の表現との間の接続を、第４のプログラミング言語で形成することを含む、形成すること、を含む。
【発明の効果】
【００２９】
態様は、以下の利点のうちの１又は２以上を含むことができる。
【００３０】
異なるプログラム仕様間のいくつかのデータ関係を識別することに基づいてプログラムを変換することで、データ処理システム中などの様々なコンテキストでより効率的に実行され得る結合された仕様の形成が可能になる。例えば、１又は２以上の手続き型プログラミング言語で書かれたプログラムをデータフローグラフ表現に変換することによって、コンポーネント並列性、データ並列性、及びパイプライン並列性が可能になる。コンポーネント並列性については、データフローグラフは、コンポーネント間のデータのフロー（又は「データフロー」）を表す有向リンクによって相互接続された複数のコンポーネントを含み、データフローグラフの異なる複数の部分におけるコンポーネントが、別々のデータフロー上で同時に稼働することができる。データ並列性については、データフローグラフは、セグメント（又は「パーティション」）に分割されたデータを処理し、コンポーネントの複数のインスタンスが、各セグメント上で同時に動作することができる。パイプライン並列性については、データフローリンクによって接続されたデータフローグラフ中のコンポーネントは、上流コンポーネントがそのデータフロー上にデータを追加し下流コンポーネントがそのデータフローからデータを受け取るのに伴って、同時に稼働することができる。
【００３１】
手続き型プログラミング言語で書かれたプログラム（又は、プログラムの少なくともいくつかの部分の仕様）を、プログラムのデータフローグラフ表現に変換することで、データフローグラフ表現の異なるコンポーネントを異なるサーバ上で実行するのを可能にすることができる。
【００３２】
手続き型プログラミング言語で書かれたプログラムによって必要とされる（その非並列性質のせいで）場合のある中間データセットを、データフローグラフから除去することができる。これは、プログラムのデータフローグラフ表現に変換し、中間データセットをデータのフローで置き換えることによって行うことができる。いくつかの例では、中間データセットは、データフローグラフの中を流れるデータのパスから外に出され、保存されて、それにより、データセットを使用する他のどのようなプログラムも、データセットに含まれるデータに引き続きアクセスできることが保証される。いくつかの例では、中間データセットを除去することで、ストレージ及びＩ−Ｏトラフィックの要件を低減することができる。
【００３３】
１又は２以上の手続き型プログラミング言語で書かれたプログラムをデータフローグラフ表現に変換することで、プログラムを通したデータ系統の視覚化が可能になる。
【００３４】
データフロープログラミング言語は、データベースタイプにとらわれない。したがって、手続き型プログラミング言語で書かれたプログラムをプログラムのデータフローグラフ表現に変換することで、手続き型プログラミング言語で書かれたプログラムによって元々サポートされていなかったタイプのデータベースを用いてプログラムを使用することを可能にすることができる。すなわち、手法は、コード（例えばＪＣＬ／ＣＯＢＯＬコード）中の入力及び出力を、多くの異なるタイプのソース及びシンク（例えば、キュー、データベーステーブル、ファイルなど）に接続され得るフローに抽象化することができる。
【００３５】
手続き型プログラミング言語で書かれたプログラムをプログラムのデータフローグラフ表現に変換することで、再使用可能なユーザ定義データタイプの使用を可能にすることができる。これは、データタイプ（すなわちメタデータ）とストレージ割振りとの間を明確に区別せず、その代りにこの２つをデータ部において結合する、ＣＯＢＯＬなどのいくつかの手続き型プログラミング言語と比較したときに有利である。本明細書に記載の手法は、ＣＯＢＯＬソースコードからメタデータを抽出し、再使用可能なデータタイプ（例えばＤＭＬデータタイプ）及びタイプ定義ファイルを作成する。再使用可能なデータタイプ及びタイプ定義ファイルは、手続き型変形の最初におけるストレージ割振りに使用することができ、また、ポート及びルックアップファイルレコード定義に使用することができる。いくつかの例では、抽出されたデータタイプ（例えば、ＣＯＢＯＬからのデータタイプメタデータ）を、抽出されたデータセット（例えば、ＪＣＬからのデータセットメタデータ）と共に使用して、同じデータセットにアクセスする複数のプログラムからのデータの部分的な記述（すなわち部分的なメタデータ）を、データの包括的な記述に統合することもできる。
【００３６】
１又は２以上の手続き型プログラミング言語で書かれたプログラムをデータフローグラフ表現に変換することで、データフローグラフベースのグラフィカル開発環境を通した単純化されたプログラム編集が可能になる。
【００３７】
本発明の他の特徴及び利点は、後続の記述及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００３８】
【図１】ソフトウェア変換モジュールを含むシステムのブロック図である。
【図２】ソフトウェア仕様の概略的な例を示す図である。
【図３】最上レベルのソフトウェア変換モジュールのブロック図である。
【図４】ソフトウェア変換モジュールのブロック図である。
【図５】データセット機能と、それらに関連するデータセット編成タイプ、アクセスモード、及びオープンモードの組合せとのテーブルを示す図である。
【図６】第１の手続き型変形を示す図である。
【図７】第２の手続き型変形を示す図である。
【図８】第３の手続き型変形を示す図である。
【図９】プログラムのデータフローグラフ表現を示す図である。
【図１０】複合データフローグラフの作成を示す図である。
【図１１】図３の最上レベルのソフトウェア変換モジュールの動作例を示す図である。
【図１２】図４のソフトウェア変換モジュールの動作例を示す図である。
【図１３】複合データフローグラフを示す図である。
【発明を実施するための形態】
【００３９】
図１に、本明細書に記載のソースコード変換技法を使用してプログラムが変換され得る、データ処理システム１００の例を示す。変換されたプログラムを実行して、データ処理システム１００のデータソース１０２からのデータを処理することができる。変換モジュール１２０が、１又は２以上の手続き型プログラミング言語による第１のソフトウェア仕様１２２を入力として受け入れ、ソフトウェア仕様１２２を処理して、第１のソフトウェア仕様１２２の複合データフローグラフ表現３３２を、データフローベースのプログラミング言語で生成する。第１のソフトウェア仕様１２２のデータフローグラフ表現３３２はデータストレージシステム１１６に記憶され、データストレージシステム１１６から、開発環境１１８内で視覚的に提示されることが可能である。開発者１２０が、開発環境１１８を使用して、第１のソフトウェア仕様１２２のデータフローグラフ表現３３２を検証及び／又は修正することができる。
【００４０】
システム１００は、データソース１０２を含む。データソース１０２は、ストレージデバイスや、オンラインデータストリームへの接続など、データの１又は２以上のソースを含むことがあり、これらの各ソースは、様々なフォーマット（例えば、データベーステーブル、表計算ファイル、フラットテキストファイル、又は、メインフレームによって使用されるネイティブフォーマット）のいずれかで、データを記憶又は提供することができる。実行環境１０４が、ローディングモジュール１０６及び実行モジュール１１２を含む。実行環境１０４は、例えば、ＵＮＩＸオペレーティングシステムのバージョンなど適切なオペレーティングシステムの制御下にある１又は２以上の汎用コンピュータ上でホストされてよい。例えば、実行環境１０４は、複数の中央処理装置（ＣＰＵ，central processing unit）又はプロセッサコアを使用するコンピュータシステムの構成を含めた、複数ノード並列コンピューティング環境を含むことができ、この構成は、ローカル（例えば、対称型マルチプロセッシング（ＳＭＰ，symmetric multi-processing）コンピュータなどのマルチプロセッサシステム）又はローカル分散型（例えば、クラスタとして結合された複数のプロセッサ、若しくは超並列処理（ＭＰＰ，massively parallel processing）システムであるか、或いは、リモート又はリモート分散型（例えば、ローカルエリアネットワーク（ＬＡＮ，local area network）及び／又はワイドエリアネットワーク（ＷＡＮ，wide-area network）を介して結合された複数のプロセッサ）であるか、或いはこれらの任意の組合せであってよい。
【００４１】
ローディングモジュール１０６は、データフローグラフ表現３３２を実行モジュール１１２にロードし、実行モジュール１１２から、データフローグラフ表現３３２は、データソース１０２からのデータを処理するために実行される。データソース１０２を提供するストレージデバイスは、実行環境１０４に対してローカルである場合があり、例えば、実行環境１０４をホストするコンピュータに接続されたストレージ媒体（例えばハードディスクドライブ１０８）に記憶され、又は、実行環境１０４に対してリモートである場合があり、例えば、実行環境１０４をホストするコンピュータとリモート接続（例えばクラウドコンピューティングインフラストラクチャによって提供される）を介して通信するリモートシステム（例えばメインフレーム１１０）上でホストされる。実行モジュール１０４によって実行されているデータフローグラフ表現３３２は、異なる複数の形のデータベースシステムを含めた、データソース１０２を具現化できる様々なタイプのシステムから、データを受け取ることができる。データは、それぞれのフィールド（「属性」又は「列」とも呼ばれる）についての値を有するレコード（「行」とも呼ばれる）として編成されたものであってよく、値はヌル値を含む可能性もある。データソースからのデータを最初に読み取るとき、データフローグラフ表現３３２は通常、このデータソース中のレコードに関する何らかの初期フォーマット情報から開始する。状況によっては、データソースのレコード構造は、最初はわかっておらず、その代り、データソース又はデータの分析後に決定されることがある。レコードに関する初期情報は、例えば、別個の値を表すビットの数、レコード内のフィールドの順序、及び、ビットによって表される値のタイプ（例えば、文字列、符号付き／符号なし整数）を含むことができる。
【００４２】
データフローグラフ表現３３２は、出力データを生成するように構成されてよく、この出力データは、データソース１０２に再び記憶されるか、若しくは実行環境１０４からアクセス可能なデータストレージシステム１１６に記憶されるか、又は他の方法で使用される場合がある。データストレージシステム１１６はまた、開発環境１１８からもアクセス可能である。開発環境１１８は、いくつかの実装形態では、頂点（データ処理コンポーネント又はデータセットを表す）間の有向リンク（「フロー」とも呼ばれ、作業要素すなわちデータの流れを表す）によって接続された頂点を含むデータフローグラフとして、アプリケーションを開発するためのシステムである。例えば、このような環境は、参照により本明細書に組み込まれる「Managing Parameters for Graph-Based Applications」という名称の米国特許出願公開第２００７／００１１６６８号明細書に、より詳細に記載されている。このようなグラフベースの計算を実行するためのシステムが、参照により本明細書に組み込まれる「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」という名称の米国特許第５，９６６，０７２号明細書に記載されている。このシステムに従って作成されたデータフローグラフは、グラフコンポーネントによって表される個々のプロセスに対して情報を出し入れする方法、プロセス間で情報を移動させる方法、及びプロセスの実行順序を定義する方法を提供する。このシステムは、任意の利用可能な方法からプロセス間通信方法を選ぶアルゴリズムを含む（例えば、グラフのリンクに従った通信パスが、ＴＣＰ／ＩＰ若しくはＵＮＩＸドメインソケットを使用するか、又は共有メモリを使用して、プロセス間でデータを渡すことができる）。
【００４３】
１  ソフトウェア仕様
いくつかの例では、第１のソフトウェア仕様１２２は、Ｃ、Ｃ＋＋、Ｊａｖａ、Ｃ＃、ＩＢＭのジョブ制御言語（ＪＣＬ，Job Control Language）、ＣＯＢＯＬ、Ｆｏｒｔｒａｎ、アセンブリなど、１又は２以上の手続き型テキストベースプログラミング言語を使用して指定される。以下の例のいくつかでは、ソフトウェア仕様１２２は、ＪＣＬスクリプティング言語を使用して書かれたバッチ処理スクリプトと、ＣＯＢＯＬプログラミング言語を使用して書かれたいくつかのプログラムとを含む。ＪＣＬスクリプトは、ＣＯＢＯＬプログラムを参照し、決定ベースの制御される実行フローを課す。第１のソフトウェア仕様１２２は、ＪＣＬプログラミング言語とＣＯＢＯＬプログラミング言語との組合せに限定されず、このプログラミング言語の組合せは、単に変換モジュール１２０の例示的な一実施形態を説明するのに使用されるに過ぎないことを理解されたい。
【００４４】
図２を参照すると、図１のソフトウェア仕様１２２の一例の概略図が、ＪＣＬスクリプト２２６を含む。ＪＣＬスクリプト２２６はいくつかのステップ２３０を含み、これらのステップのいくつかはＣＯＢＯＬプログラム２２８を実行する。ＪＣＬスクリプト２２６の、可能性のある他のステップは、この記述を簡単にするために省略されている。ＣＯＢＯＬプログラムを実行するＪＣＬスクリプト中の各ステップは、ＣＯＢＯＬプログラムの名前（例えばＣＯＢＯＬ１）と、ＣＯＢＯＬプログラムが作用するデータセットとを指定する。例えば、ＪＣＬスクリプトのステップ３は、「ＣＯＢＯＬ１」と呼ばれるＣＯＢＯＬプログラムを、「ＤＳ１．ｄａｔａ」及び「ＤＳ２．ｄａｔａ」データセットに対して実行する。ＪＣＬスクリプト２２６中では、所与のＣＯＢＯＬプログラムに関連する各データセットに、ファイルハンドル（「ＤＤ名」とも呼ばれる）が割り当てられる。例えば、図２では、「ＤＳ１．ｄａｔａ」にはファイルハンドル「Ａ」が割り当てられ、「ＤＳ２．ｄａｔａ」にはファイルハンドル「Ｂ」が割り当てられる。各ＣＯＢＯＬプログラム２２８は、ＪＣＬスクリプト２２６によって指定されたデータセットに作用するためのソースコード（ＣＯＢＯＬプログラミング言語で書かれた）を含む。所与のデータセットのファイルハンドル（すなわちＤＤ名）は、データセットを識別するためにＪＣＬスクリプト２２６とＣＯＢＯＬプログラムのコードとの両方によって使用される識別子である。
【００４５】
動作時、ＩＢＭメインフレームコンピュータ上で例えば稼働する従来のジョブスケジューラは、ＪＣＬスクリプト２２６にアクセスし、ＪＣＬスクリプト２２６によって定義された制御フローに従ってスクリプトのステップ２３０を逐次的に（すなわち１つずつ）実行する。一般に、入力又は出力データセットにアクセスするＣＯＢＯＬプログラムはどれも、データセットを記憶したストレージ媒体（例えば、ハードディスクドライブなど、データソース１０２又はデータストレージシステム１１６のストレージ媒体。単に「ディスク」と呼ぶ）に対して読取り又は書込みを行うことによって、そのようにアクセスする。一般に、ＪＣＬスクリプト２２６によって実行される各ＣＯＢＯＬプログラムは、そのすべての入力データをディスクから読み取り、そのすべての出力データをディスクに書き込んだ後で、制御をＪＣＬスクリプト２２６に返す。したがって、入力データに対して前のステップの出力に依拠するどのようなステップも、一般に、入力データをディスクから読み取らなければならない。
【００４６】
２  変換モジュール
図３を参照すると、図１の変換モジュール１２０の一例が、ＪＣＬスクリプト２２６と、ＪＣＬスクリプト２２６によって参照されるＣＯＢＯＬプログラム２２８とを含むソフトウェア仕様１２２を入力として受け取り、ソフトウェア仕様１２２を処理して複合データフローグラフ３３２を生成する。複合データフローグラフ３３２は、第１のソフトウェア仕様１２２と同じ機能を実装し、図１の実行環境１０４によって使用可能である。変換モジュール１２０は、ＣＯＢＯＬ−データフローグラフ変換器３３４、及び複合グラフ合成器３３６を備える。
【００４７】
ごく一般には、ＣＯＢＯＬ−データフローグラフ変換器３３４は、ＣＯＢＯＬプログラム２２８を入力として受け取り、各ＣＯＢＯＬプログラムを、ＣＯＢＯＬプログラムの別個のデータフローグラフ表現３３８に変換する。後でより詳細に述べるように、ＣＯＢＯＬプログラムの各データフローグラフ表現３３８は、「手続き型変形」コンポーネントと呼ばれるデータフローグラフコンポーネントと、０又は１以上のデータセット及び／又は他のデータフローグラフコンポーネントとを含む。手続き型変形コンポーネントは、手続き型変形コンポーネントをＣＯＢＯＬプログラムのデータフローグラフ表現３３８のデータセット及び他のコンポーネントに接続するための、入力ポート及び出力ポートなどのポートを含み、ＣＯＢＯＬプログラムの機能のいくつか又はすべてを実施する。いくつかの例では、ＣＯＢＯＬプログラムのデータフローグラフ表現は、ＣＯＢＯＬプログラム中に存在するコマンドに似たデータフローグラフコンポーネントを含む。いくつかの例では、ＣＯＢＯＬプログラムのデータフローグラフ表現３３８は、「サブグラフ」として実装されてよく、これらのサブグラフは、ＣＯＢＯＬプログラムのデータフローグラフ表現３３８インスタンスと、他のデータフローグラフコンポーネント（例えば、図３の複合データフローグラフ３３２の、他のデータフローグラフコンポーネント）との間のフローを形成するための、入力ポート及び出力ポートを有する。
【００４８】
ＪＣＬスクリプト２２６、及びＣＯＢＯＬプログラムのデータフローグラフ表現３３８は、複合グラフ合成器３３６に提供され、複合グラフ合成器３３６は、ＪＣＬスクリプト２２６を分析して、ＣＯＢＯＬプログラムと、他の任意のコンポーネントとの間のデータフロー相互接続を決定する。次いで、複合グラフ合成器３３６は、決定されたデータフロー相互接続に従ったフローを使用してＣＯＢＯＬプログラムのデータフローグラフ表現３３８の入力／出力ポートを連結することによって、複合データフローグラフ３３２を合成する。複合グラフ合成器３３６は、ＪＣＬのより前のステップによって書き込まれ、ＪＣＬのより後のステップによって読み取られる「中間」データセットを識別することによって、ＣＯＢＯＬプログラム間のデータフロー相互接続を決定する。いくつかの例では、中間データセットは、除去されて、複合データフローグラフ３３２中のコンポーネント間のデータフローで置き換えられてよい。パイプライン並列性により、ディスクに書き込んでディスクから読み取る中間ステップを実施せずにデータがコンポーネント間を直接に流れることができるようにすることによって著しい性能改善を達成することができる。上で使用された「除去される」という用語は、必ずしも中間データセットが削除されることを意味するとは限らないことに留意されたい。いくつかの例では、中間データセットは、データフローグラフの中を流れるデータのパスから外に出されるが、依然としてディスクに書き込まれており、それにより、中間データセットに依存する他のプログラム（例えば、他のＪＣＬスクリプトから実行されるプログラム）が引き続きそのデータにアクセスできることが保証される。中間ファイルを完全に削除できる（ＪＣＬがそれらを使用後に削除するので）場合、データフローグラフ表現はまた、ストレージ容量要件を下げることになる。
【００４９】
いくつかの例では、ＪＣＬコード中のいくつかのステップの遂次的な性質を無視することができ、複合データフローグラフ３３２中のコンポーネント並列性がもたらされる。他の例では、あるステップの出力が別のステップへの入力として提供されるようなステップの場合、ステップの逐次的な性質は、フローを使用してステップのそれぞれのコンポーネントを接続することによって保存され、その結果、パイプライン並列性がもたらされる。
【００５０】
２．１  ＣＯＢＯＬ−データフローグラフ変換器
図４を参照すると、ＣＯＢＯＬ−データフローグラフ変換器３３４の一実装形態の詳細なブロック図が、いくつかのＣＯＢＯＬプログラム２２８を入力として受け取り、ＣＯＢＯＬプログラム２２８を処理して、ＣＯＢＯＬプログラムのいくつかのデータフローグラフ表現３３８を生成する。ＣＯＢＯＬ−データフローグラフ変換器３３４は、ＣＯＢＯＬパーサ４４０、内部コンポーネントアナライザ４４４、データセット機能アナライザ４４２、メタデータアナライザ４４１、ＳＱＬアナライザ４４３、手続き部変換器４４５、及びサブグラフ合成器４４６を備える。
【００５１】
各ＣＯＢＯＬプログラム２２８は、最初にＣＯＢＯＬパーサ４４０に提供され、ＣＯＢＯＬパーサ４４０は、ＣＯＢＯＬプログラム２２８を解析して解析木を生成する。ＣＯＢＯＬパーサ４４０によって生成された解析木は、次いで、内部コンポーネントアナライザ４４４、データセット機能アナライザ４４２、メタデータアナライザ４４１、及びＳＱＬアナライザ４４３に渡される。
【００５２】
内部コンポーネントアナライザ４４４は、解析木を分析して、データフローグラフプログラミング言語による類似するデータフローグラフコンポーネント（例えば内部ソート）を有するプログラムプロセスを識別する。データフローグラフコンポーネントに変換できるＣＯＢＯＬ操作のいくつかの例は、「内部ソート」及び「内部再循環」（一時記憶）操作である。内部ソート操作は、後でより詳細に述べるように、ソートされていないデータのフローを受け取る入力ポートと、ソートされたデータのフローを提供する出力ポートとを有するコンポーネントに対応し、入力ポート及び出力ポートは主コンポーネントにリンクされる。内部再循環操作は、ＣＯＢＯＬプログラム内で最初に全体が逐次的に書き込まれ、次いで全体が読み取られる、中間ファイルに対応する。データセット機能アナライザ４４４の出力は、識別された操作とそれらに対応するＣＯＢＯＬ解析木内での場所とのリストを含む、内部コンポーネント結果４４８である。
【００５３】
上記は、ステートメント、又はステートメント及び／又は操作のシーケンスが識別され得る任意の手続き型言語であって、これらのステートメント及び／又は操作がフロー中の一連のレコードに対して特定の変形を実施し、この変形が、入力ポートにおいてフローを受け取り、出力ポートから変形済みレコードを提供するコンポーネント又はサブグラフに対応する、任意の手続き型言語に適用可能である。
【００５４】
データセット機能アナライザ４４２は、解析木を分析して、ＣＯＢＯＬプログラム２２８によってアクセスされる（例えば、開かれる、作成される、書き込まれる、又は読み取られる）すべてのデータソース及びシンク（例えばデータセット）を識別し、ＣＯＢＯＬプログラムに対するデータセットに関連するタイプを決定する。こうするために、データセット機能アナライザ４４２は、データセットにアクセスするＣＯＢＯＬステートメント（例えば、ＯＰＥＮ、ＲＥＡＤ、ＷＲＩＴＥ、ＤＥＬＥＴＥなど）を識別し分析する。いくつかの例では、データセットに関連し得る可能なタイプは、ＩＮＰＵＴ、ＯＵＴＰＵＴ、ＬＯＯＫＵＰ、及びＵＰＤＡＴＡＢＬＥ  ＬＯＯＫＵＰを含む。ＣＯＢＯＬ定義が、データセットへのハンドル若しくはデータセットのパス、データセットのファイル編成、及びデータセットに対するアクセスモードを指定し、この場合、Ｉｎｐｕｔ−Ｏｕｔｐｕｔステートメントから決定されるファイルオープンモードなどの追加情報を伴う。
【００５５】
可能なデータセットファイル編成は、ＳＥＱＵＥＮＴＩＡＬ、ＩＮＤＥＸＥＤ、及びＲＥＬＡＴＩＶＥを含む。ＳＥＱＵＥＮＴＩＡＬ編成のデータセットは、逐次的に（すなわち、データセットに元々書き込まれた順序で）のみアクセスできるレコードを含む。ＩＮＤＥＸＥＤ編成のデータセットは、１又は２以上の索引付きキーにそれぞれが関連付けられたレコードを含む。ＩＮＤＥＸＥＤデータセットのレコードには、キーを使用してランダムに、又はファイル内のいずれか所与の位置から逐次的に、アクセスすることができる。ＲＥＬＡＴＩＶＥ編成のデータセットは、正の整数で番号が付けられたレコードスロットを有し、各スロットは、空としてマークされるかレコードを含むかのいずれかである。ＲＥＬＡＴＩＶＥ編成のファイルが逐次的に読み取られるとき、空のスロットはスキップされる。ＲＥＬＡＴＩＶＥファイルのレコードには、スロット番号をキーとして使用して直接にアクセスすることができる。「ファイル位置」という概念は、この３つのファイル編成に共通である。
【００５６】
可能なアクセスモードは、ＳＥＱＵＥＮＴＩＡＬ、ＲＡＮＤＯＭ、及びＤＹＮＡＭＩＣを含む。ＳＥＱＵＥＮＴＩＡＬアクセスモードは、データセット中のレコードが、入力順、昇順、又は降順のキー順序で、逐次的にアクセスされることを示す。ＲＡＮＤＯＭアクセスモードは、データセット中のレコードが、レコード識別キーを使用してアクセスされることを示す。ＤＹＮＡＭＩＣアクセスモードは、データセット中のレコードが、レコード識別キーを使用して直接に、又は任意の選択されたファイル位置から逐次的に、アクセスされ得ることを示す。
【００５７】
可能なオープンモードは、ＩＮＰＵＴ、ＯＵＴＰＵＴ、ＥＸＴＥＮＤ、及びＩ−Ｏを含む。ＩＮＰＵＴオープンモードは、データセットが入力データセットとして開かれることを示す。ＯＵＴＰＵＴオープンモードは、空のデータセットが出力データセットとして開かれることを示す。ＥＸＴＥＮＤオープンモードは、既存のレコードを含むデータセットが、新しいレコードが付加される対象である出力データセットとして開かれることを示す。Ｉ−Ｏオープンモードは、データセットオープンモードが、入力データセット操作と出力データセット操作の両方をサポートすることを示す（そのような操作がプログラム中に存在するかどうかにかかわらず）。
【００５８】
データセット機能アナライザ４４２は、以下の規則セットをＣＯＢＯＬデータセットアクセスコマンドのファイル編成、アクセスモード、及びオープンモードに適用して、ＣＯＢＯＬプログラムに対するデータセットに関連する機能を決定する。
・  ＯＵＴＰＵＴデータセットは、ＳＥＱＵＥＮＴＩＡＬ、ＩＮＤＥＸＥＤ、又はＲＥＬＡＴＩＶＥ編成、ＳＥＱＵＥＮＴＩＡＬ、ＲＡＮＤＯＭ、又はＤＹＮＡＭＩＣアクセスモード、及びＯＵＴＰＵＴ又はＥＸＴＥＮＤオープンモードのデータセットである。
・  ＩＮＰＵＴデータセットは、ＩＮＤＥＸＥＤ、ＲＥＬＡＴＩＶＥ、又はＳＥＱＵＥＮＴＩＡＬ編成、ＳＥＱＵＥＮＴＩＡＬアクセスモード、及びＩＮＰＵＴオープンモードのデータセットである。
・  ＬＯＯＫＵＰデータセットは、ＩＮＤＥＸＥＤ又はＲＥＬＡＴＩＶＥ編成、ＲＡＮＤＯＭ又はＤＹＮＡＭＩＣアクセスモード、及びＩＮＰＵＴオープンモードのデータセットである。
・  ＵＰＤＡＴＥＡＢＬＥ  ＬＯＯＫＵＰデータセットは、ＩＮＤＥＸＥＤ又はＲＥＬＡＴＩＶＥ編成、ＲＡＮＤＯＭ又はＤＹＮＡＭＩＣアクセスモード、及びＩ−Ｏオープンモードのデータセットである。
【００５９】
いくつかの例では、ファイルに対する実際の入出力操作をカウントすることによって、ファイルの「効果的なオープンモード」が決定されてよい。例えば、ファイルがＩ−Ｏモードで開かれるが、ＷＲＩＴＥ操作のみを有し、ＲＥＡＤ操作もＳＴＡＲＴ操作も有しない場合、「効果的なオープンモード」はＥＸＴＥＮＤに縮小されてよい。
【００６０】
図５を参照すると、テーブル５０１が、データセット編成とアクセスモードとオープンモードとの異なる複数の組合せを、各組合せに関連するデータセット機能と共にリストしている。
【００６１】
再び図４を参照すると、データセット機能アナライザ４４２の出力は、ＣＯＢＯＬプログラムによってアクセスされるすべてのデータセットを、ＣＯＢＯＬプログラム中でのそれらに関連する機能と共に挙げたリストを含む、データセット機能結果４５０である。
【００６２】
メタデータアナライザ４４１は、解析木を分析して、メタデータを抽出し、再使用可能なデータタイプ（例えばＤＭＬデータタイプ）及びタイプ定義ファイルを作成する。再使用可能なデータタイプは、ＣＯＢＯＬプログラム中のストレージ割振りとは別個である。メタデータアナライザ４４１の出力は、データタイプ結果４４７である。
【００６３】
ＳＱＬアナライザ４４３は、解析木を分析して、ＣＯＢＯＬプログラム中の埋め込まれた構造化照会言語（ＳＱＬ，structured query language）コード（又は単に「埋め込みＳＱＬ」）を識別する。識別されたどのような埋め込みＳＱＬも、処理されてデータベースインタフェース情報４４９にされる。データベースにアクセスするためのデータベースアプリケーションプログラミングインタフェース（ＡＰＩ，database application programming interface）が、データベースインタフェース情報４４９内で使用できるプリミティブを提供することができる。いくつかの例では、これらのプリミティブを含めることで、埋め込みＳＱＬの一部を（例えばバイナリ操作を使用して作用されるバイナリ形式に）コンパイルするために特定のスキーマを使用して特定のデータベースにアクセスする必要が回避される。その代り、このようなコンパイルによって提供されるであろう効率のいくらかは、データベースインタフェース情報４４９内に配置された適切なＡＰＩプリミティブを使用して、場合によっては異なるデータベース及び／又はスキーマを必要に応じて使用して、埋め込みＳＱＬを実行時に解釈できるフレキシビリティと、トレードオフされることが可能である。
【００６４】
次いで、ＣＯＢＯＬプログラムの解析木は、内部コンポーネント結果４４８、データセット機能結果４５０、データタイプ結果４４７、及びデータベースインタフェース情報結果４４９と共に、手続き部変換器４４５に提供される。手続き部変換器４４５は、解析木を分析して、ＣＯＢＯＬロジックを「手続き型変形」データフローグラフコンポーネント４５２に変換する。一般に、手続き型変形データフローグラフコンポーネント４５２は、ＣＯＢＯＬプログラムに関連するＣＯＢＯＬロジックのいくらか又はすべてを含むと共に、入力データの受け入れ及びコンポーネントからの出力データの提供をそれぞれ行うための入力ポート及び出力ポートを有する、コンテナタイプのコンポーネントである。ＣＯＢＯＬコードが、異なるプログラミング言語からのコードを含む（例えば、ＳＱＬコードがＳＱＬアナライザ４４３によって識別されてデータベースインタフェース情報結果４４９中で提供される）場合、手続き部変換器４４５は、データベースインタフェース情報結果４４９を使用して、この埋め込みコードの適切な表現を手続き型変形データフローグラフコンポーネント４５２内で生成する。いくつかの例では、手続き部変換器４４５は、データベースＡＰＩを使用して、埋め込みコードの適切な表現を生成する。他の例では、埋め込みＳＱＬのＴａｂｌｅ及びＣｕｒｓｏｒが、Ｉｎｐｕｔ  Ｔａｂｌｅコンポーネントで置き換えられ、それにより、ＦＥＴＣＨ操作が、ファイルに対して行われるようなｒｅａｄ＿ｒｅｃｏｒｄ（ｐｏｒｔ＿ｎｕｍｂｅｒ）への呼出しで置き換えられる。
【００６５】
いくつかの例では、手続き部変換器４４５は、ＣＯＢＯＬプログラムの手続き型ロジックを表すデータ操作言語（ＤＭＬ，Data Manipulation Language）コードを含むファイルを生成するだけである。サブグラフ合成器４４６が、手続き部変換器４４５によって生成されたファイルを使用する手続き型変形データフローコンポーネントを生成する。
【００６６】
図４及び上の記述は、内部コンポーネントアナライザ４４４、データセット機能アナライザ４４２、メタデータアナライザ４４１、及びＳＱＬアナライザ４４３の、可能な１つの動作順序に関係することに留意されたい。しかし、アナライザの動作順序は、前述の順序に限定されず、アナライザの他の動作順序も可能である。
【００６７】
図６を参照すると、「ＣＯＢＯＬ２」のタイトルが付いた手続き型変形コンポーネントの単純な一例５５４（すなわち、図２のＪＣＬスクリプト２２６のステップ５で実行されるＣＯＢＯＬプログラムを変換した結果）が、「ｉｎ０」のラベルが付いた入力ポート５５６と、「ｏｕｔ０」のラベルが付いた出力ポート５６０と、「ｌｕ０」のラベルが付いたルックアップポート５６２とを有する。ルックアップデータセットは、必ずしもコンポーネント上のポートを介してアクセスされるとは限らず、その代りにルックアップデータセットＡＰＩを使用してアクセスされる場合もあることに留意されたい。しかし、記述を簡単にするために、ルックアップデータセットはルックアップポートを介してアクセスされるものとして述べる。
【００６８】
各ポートは、フローを介してそれぞれのデータセット（ＪＣＬスクリプト２２６によって識別される）に接続されるように構成される。いくつかの例では、開発者は、手続き型変形コンポーネント５５４の基礎をなすＣＯＢＯＬコードのＤＭＬ変換を閲覧及び編集することができ、これは例えば、コンポーネントをシフトダブルクリックすることによって、又は、情報バブルが現れるまでコンポーネントの上でホバーして情報バブル中の「変形」リンクをクリックすることによって、行うことができる。
【００６９】
図７を参照すると、手続き型変形コンポーネントの別の例６６４は、「ＣＯＢＯＬ１」のタイトルが付いたＣＯＢＯＬプログラム（すなわち、図２のＪＣＬスクリプト２２６のステップ３で実行されるＣＯＢＯＬプログラム）が、そのコード中にソートコマンドを含む状況を示す。この状況では、内部コンポーネントアナライザ４４８は、ソートコマンドを識別し、ソートコマンドに関係する情報を手続き部変換器４４５に渡す。手続き部変換器４４５は、内部コンポーネントアナライザ４４８からの情報を使用して、手続き型変形６６４に関連するコード中のソートコマンドを、特化された内部ソートサブグラフへのインタフェースで置き換える。サブグラフ合成器４４６は、４４８によって作成されたソート情報を使用し、ソートされるべきデータを内部ソートデータフローサブグラフコンポーネント６６６に提供するための手続き型変形６６４からの出力ポートｏｕｔ１と、ソートされたデータを内部ソートデータフローサブグラフコンポーネント６６６から受け取るための入力ｉｎ１とを作成する。
【００７０】
図８を参照すると、ソートコマンドを含む手続き型変形の別の類似例が示されている。この例では、ソートされるべきデータを提供するための出力とソートされたデータを受け取るための入力とを有する単一の手続き型変形を作成するのではなく、２つの手続き型変形が作成される。２つの手続き型変形のうちの第１の手続き型変形７６８は、ソートされるべきデータを提供するための出力を有し、２つの手続き型変形のうちの第２の手続き型変形７７０は、ソートされたデータを受け取るための入力を有する。図示のように、いくつかの例では、ソートデータフローコンポーネント７６６が、サブグラフ合成器４４６によって、２つの手続き型変形７６８、７７０間で自動的に接続されてよい。他の例では、ソートデータフローコンポーネント７６６は、２つの手続き型変形７６８、７７０間で、手作業で接続されてもよい。
【００７１】
２．２  サブグラフ合成器
再び図４を参照すると、ＣＯＢＯＬプログラムの手続き型変形４５２は、内部コンポーネント結果４４８、データセット機能結果４５０、データタイプ結果４４７、及びデータベースインタフェース情報結果４４９と共に、サブグラフ合成器４４６に渡される。サブグラフ合成器４４６は、入力を使用して、ＣＯＢＯＬプログラム２２８に対するデータフローグラフ表現３３８を生成する。ごく一般には、各ＣＯＢＯＬプログラム２２８につき、サブグラフ合成器４４６は、ＣＯＢＯＬプログラム２２８の手続き型変形と、ＣＯＢＯＬプログラム２２８に関連するデータセットと、内部コンポーネントアナライザ４４４によって識別された内部コンポーネントがあればそれらと、を含むデータフローグラフを作成する。次いで、サブグラフ合成器４４６は、内部コンポーネント結果４４８及びデータセット機能結果４５０を使用して、データセット、内部コンポーネント、及び手続き型変形４５２の間のフローを適切に接続する。サブグラフ合成器４４６は、データタイプ結果４４７を使用して、コンポーネントポートの中を流れるデータを記述する。図９を参照すると、ＣＯＢＯＬ１のタイトルが付いた例示的なＣＯＢＯＬプログラムに対するデータフローグラフ表現の一例８３８が、手続き型変形８６４を含み、手続き型変形８６４は、データセットＤＳ１．ｄａｔａに関連するファイルハンドル「Ａ」を有する入力ファイルにフローによって接続されたｉｎ０のラベルが付いた入力ポートと、データセットＤＳ２．ｄａｔａに関連するファイルハンドル「Ｂ」を有する出力ファイルにフローによって接続されたｏｕｔ０のラベルが付いた出力ポートと、内部ソートコンポーネント８６６にフローによって接続された出力ポート及び入力ポートｏｕｔ１及びｉｎ１と、を有する。
【００７２】
２．３  複合グラフ合成器
図３に戻って参照すると、次いで、ＣＯＢＯＬプログラムのデータフローグラフ表現３３８は、ＪＣＬスクリプト２２６と共に、複合グラフ合成器３３６に渡される。ＣＯＢＯＬプログラムに関連するデータセットの機能と共に、ＪＣＬスクリプト２２６中のＣＯＢＯＬプログラムの実行の順序を分析することによって、複合グラフ合成器３３６は、ＣＯＢＯＬコードのデータフローグラフ表現を接続して単一の複合データフローグラフ３３２にする。
【００７３】
例えば、図１０を参照すると、ＣＯＢＯＬ２のタイトルが付いたＣＯＢＯＬプログラムのデータフローグラフ表現は、ｉｎ０のラベルが付いた入力ポートにおけるデータセットＤＳ２．ｄａｔａに関連する入力ファイル「Ｃ」から読み取り、ルックアップポートｌｕ０におけるＤＳ３．ｄａｔａに関連するルックアップファイル「Ｄ」にアクセスすることによってデータを充実化し、ｏｕｔ０のラベルが付いた出力ポートにおけるデータセットＤＳ４．ｄａｔａに関連する出力ファイル「Ｅ」に書き込む。ＣＯＢＯＬ３のタイトルが付いたＣＯＢＯＬプログラムのデータフローグラフ表現は、２つの入力データセット、すなわち、ｉｎ０のラベルが付いた入力ポートにおけるＤＳ４．ｄａｔａに関連する「Ｆ」と、ｉｎ１のラベルが付いた入力ポートにおけるＤＳ５．ｄａｔａに関連する「Ｇ」とから読み取り、ｏｕｔ０のラベルが付いた出力ポートにおけるＤＳ６．ｄａｔａに関連する出力データセット「Ｈ」に書き込む。複合グラフ合成器３３６は、ＪＣＬスクリプト２２６情報を、ＣＯＢＯＬプログラムの変換によって導出された情報と併合して、ＣＯＢＯＬ２がＣＯＢＯＬ３の前に実行されること、及びＤＳ４．ｄａｔａがＣＯＢＯＬ２によって出力されてＣＯＢＯＬ３によって入力されることを決定し、したがって、ＣＯＢＯＬ２のｏｕｔ０のラベルが付いた出力ポートは、フローによってＣＯＢＯＬ３のｉｎ０のラベルが付いた入力ポートに接続されることが可能であり、それにより、ＣＯＢＯＬ３がデータセットＤＳ４．ｄａｔａをディスクから読み取る必要をなくすことができる。図１０に例示的な複合データフローグラフ９３２を示すが、この複合データフローグラフ９３２は、ｏｕｔ０のラベルが付いたＣＯＢＯＬ２の出力ポートと、ｉｎ０のラベルが付いたＣＯＢＯＬ３の入力ポートとを、複製コンポーネント９３３を介して接続するフローを含む。複製コンポーネント９３３は、ディスク上のＤＳ４．ｄａｔａにデータを書き込むが、フローを介して、ｉｎ０のラベルが付いたＣＯＢＯＬ３の入力ポートにもデータを直接渡す。このようにして、ＣＯＢＯＬ３は、データセットＤＳ４．ｄａｔａがディスクに書き込まれるのを待機する必要なしに、ＣＯＢＯＬ２から流れるデータを読み取ることができ、ＪＣＬスクリプト２２６によって削除されないＤＳ４．ｄａｔａに記憶されたデータは、他のプロセスによって利用可能である。
【００７４】
いくつかの例では、中間データセット（例えばファイル）が作成された後でＪＣＬ手続きがそれを削除しない場合、このデータセットは、実行環境で稼働している他の何らかのプロセスによって使用される可能性がある。これが当てはまる例では、中間データセットは、ＪＣＬ手続きのデータフローグラフ表現中で保存される（例えば、前述のように複製コンポーネントを使用して）。いくつかの例では、中間データセットが作成された後でＪＣＬ手続きがそれを削除する場合、中間データセットは、ＪＣＬ手続きのデータフローグラフ表現中で完全に除去され、それに対する複製コンポーネントは必要ない。
【００７５】
いくつかの例では、ＣＯＢＯＬ２及びＣＯＢＯＬ３データフローグラフについて上述したようにフローによって接続されるポートのメタデータが、同一ではない場合があり、これは、第１のソフトウェア仕様が、同じデータセットについて代替定義を使用したからである。この場合、複合グラフ合成器３３６は、接続フロー上でＲｅｄｅｆｉｎｅ  Ｆｏｒｍａｔコンポーネントを挿入することができる。このようなＲｅｄｅｆｉｎｅ  Ｆｏｒｍａｔコンポーネントの存在を後で使用して、データセットメタデータを統合することができる。メタデータ情報は、各データフローグラフ３３８についてメタデータアナライザ４４１によって導出される。
【００７６】
３  例示的な動作
図１１を参照すると、変換モジュール１２０の単純な動作例が、ＪＣＬスクリプト２２６と、図２の４つのＣＯＢＯＬプログラム２２８とを入力として受け取り、入力を処理して複合データフローグラフ３３２を生成する。
【００７７】
変換プロセスの第１の段階では、ＣＯＢＯＬプログラム２２８がＣＯＢＯＬ−データフローグラフ変換器３３４に提供され、ＣＯＢＯＬ−データフローグラフ変換器３３４は、各ＣＯＢＯＬプログラムを処理して、ＣＯＢＯＬプログラムのデータフローグラフ表現３３８ａ〜ｄを生成する。第２の段階では、ＪＣＬスクリプト２２６と、ＣＯＢＯＬプログラムのデータフローグラフ表現３３８ａ〜ｄとが、複合グラフ合成器３３６に提供され、複合グラフ合成器３３６は、ＪＣＬスクリプト２２６と、ＣＯＢＯＬプログラムのデータフローグラフ表現３３８ａ〜ｄとを処理して、複合データフローグラフ３３２を生成する。
【００７８】
図１２を参照すると、ＣＯＢＯＬ−データフローグラフ変換器３３４は、ＣＯＢＯＬパーサ４４０、内部コンポーネントアナライザ４４４、データセット機能アナライザ４４２、メタデータアナライザ４４１、及びＳＱＬアナライザ４４３を使用して、各ＣＯＢＯＬプログラム２２８を処理する。ＣＯＢＯＬパーサ４４０、内部コンポーネントアナライザ４４４、データセット機能アナライザ４４２、メタデータアナライザ４４１、及びＳＱＬアナライザ４４３によって生成された出力は、手続き部変換器４４５に提供され、その出力と共にサブグラフ合成器４４６に提供され、サブグラフ合成器４４６は、各ＣＯＢＯＬプログラムに対するデータフローグラフ表現３３８ａ〜ｄを生成する。
【００７９】
ＪＣＬスクリプト２２６のステップ３で実行されるＣＯＢＯＬ１プログラムについては、内部コンポーネントアナライザ４４４は、プログラムが内部ソートコンポーネントを含むことを識別した。データセット機能アナライザ４４２は、ＣＯＢＯＬ１プログラムが１つの入力データセット「Ａ」及び１つの出力データセット「Ｂ」にアクセスすることを識別した。識別された内部ソートコンポーネントと、データセットと、ＣＯＢＯＬ１プログラムの手続き型変形に対するそれらの関係とは、ＣＯＢＯＬ１プログラムのデータフローグラフ表現３３８ａに反映される。
【００８０】
ＪＣＬスクリプト２２６のステップ５で実行されるＣＯＢＯＬ２プログラムについては、内部コンポーネントアナライザ４４４はどのような内部コンポーネントも識別せず、ＳＱＬアナライザ４４３はどのような埋め込みＳＱＬコードも識別しなかった。データセット機能アナライザ４４２は、ＣＯＢＯＬ２プログラムが、入力データセットとしての１つのデータセット「Ｃ」と、出力データセットとしての別のデータセット「Ｅ」と、ルックアップデータセットとしての別のデータセット「Ｄ」とにアクセスすることを識別した。識別されたデータセットと、ＣＯＢＯＬ２プログラムの手続き型変形に対するそれらの関係とは、ＣＯＢＯＬ２プログラムのデータフローグラフ表現３３８ｂに反映される。
【００８１】
ＪＣＬスクリプト２２６のステップ６で実行されるＣＯＢＯＬ３プログラムについては、内部コンポーネントアナライザ４４４はどのような内部コンポーネントも識別せず、ＳＱＬアナライザ４４３はどのような埋め込みＳＱＬコードも識別しなかった。データセット機能アナライザ４４２は、ＣＯＢＯＬ３プログラムが、入力データセットとしての２つのデータセット「Ｆ」及び「Ｇ」と、出力データセットとしての１つのデータセット及び「Ｈ」とにアクセスすることを識別した。識別されたデータセットと、ＣＯＢＯＬ３プログラムの手続き型変形に対するそれらの関係とは、ＣＯＢＯＬ３プログラムのデータフローグラフ表現３３８ｃに反映される。
【００８２】
ＪＣＬスクリプト２２６のステップ１０で実行されるＣＯＢＯＬ４プログラムについては、内部コンポーネントアナライザ４４４はどのような内部コンポーネントも識別せず、ＳＱＬアナライザ４４３はどのような埋め込みＳＱＬコードも識別しなかった。データセット機能アナライザ４４２は、ＣＯＢＯＬ４プログラムが、入力データセットとしての１つのデータセット「Ｉ」と、出力データセットとしての別のデータセット「Ｊ」とにアクセスすることを識別した。識別されたデータセットと、ＣＯＢＯＬ４プログラムの手続き型変形に対するそれらの関係とは、ＣＯＢＯＬ４プログラムのデータフローグラフ表現３３８ｄに反映される。
【００８３】
再び図１１を参照すると、ＪＣＬスクリプト２２６と、４つのＣＯＢＯＬプログラムのデータフローグラフ表現３３８ａ〜ｄとは、複合グラフ合成器３３６に提供され、複合グラフ合成器３３６は、ＪＣＬスクリプト２２６及びデータフローグラフ表現３３８ａ〜ｄを分析して、データフローグラフ表現３３８ａ〜ｄを接続して単一の複合グラフ３３２にする。図１３を参照すると、ＪＣＬスクリプト２２６と図２の４つのＣＯＢＯＬプログラム２２８との複合グラフは、フローによって相互接続された４つの手続き型変形ＣＯＢＯＬ１  ４５２ａ、ＣＯＢＯＬ２  ４５２ｂ、ＣＯＢＯＬ３  ４５２ｃ、及びＣＯＢＯＬ４  ４５２ｄを含む。複製コンポーネント９３３を使用して、複合データフローグラフ３３２中のいくつかの中間データセット（すなわちＤＳ２．ｄａｔａ、ＤＳ４．ｄａｔａ、及びＤＳ５．ｄａｔａ）が取り置かれ（すなわち出力データセットとして書き込まれ）、フローを使用してコンポーネントが直接に接続される。
【００８４】
４  代替形態
上の記述では、手続き型プログラミング言語で書かれたプログラムの、限られた数の操作及び要素のみがデータフローグラフコンポーネントに変換されることについて述べているが、いくつかの例では、元のプログラム（例えばＣＯＢＯＬプログラム）のソースコードのすべてがデータフローグラフ表現に変換される。
【００８５】
前述のシステムを使用して、１又は２以上の手続き型プログラミング言語の任意の組合せを含むソフトウェア仕様を、ソフトウェア仕様のデータフローグラフ表現に変換することができる。
【００８６】
いくつかの例では、前述の変換モジュールは、変換モジュールが処理する準備ができていない変換タスクに遭遇することがある。このような例では、変換モジュールは不完全な変換タスクのリストを出力し、開発者は、このリストを読み使用して、変換を手作業で修復することができる。
【００８７】
上の記述では、ＣＯＢＯＬ−データフローグラフ変換器３３４のいくつかのモジュールが並列で稼働するものとして述べているが、これは必ずしも当てはまるとは限らない。いくつかの例では、まずメタデータアナライザ４４１が解析木をＣＯＢＯＬパーサ４４０から受け取る。メタデータアナライザ４４１は、解析木を充実化及び／又は単純化し、これをデータセット機能アナライザ４４２に提供する。データセット機能アナライザ４４２は、解析木を充実化及び／又は単純化し、これをＳＱＬアナライザ４４３に提供する。ＳＱＬアナライザ４４３は、解析木を充実化及び／又は単純化し、これを内部コンポーネントアナライザ４４４に提供する。内部コンポーネントアナライザ４４４は、解析木を充実化及び／又は単純化し、これを手続き部変換器４４５に提供する。すなわち、これらのコンポーネントは直列で解析木に作用する。
【００８８】
５  実装形態
前述のソースコード変換手法は、例えば、適切なソフトウェア命令を実行するプログラム可能なコンピューティングシステムを使用して実装されてもよく、又は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ，field-programmable gate array）などの適切なハードウェアにおいて、若しくは何らかのハイブリッド形式で実装されてもよい。例えば、プログラムされる手法では、ソフトウェアは、１又は２以上のプログラムされた又はプログラム可能なコンピューティングシステム（分散型、クライアント／サーバ、又はグリッドなど、様々なアーキテクチャのものであり得る）上で実行される１又は２以上のコンピュータプログラム中のプロシージャを含むことができ、各コンピューティングシステムは、少なくとも１つのプロセッサと、少なくとも１つのデータストレージシステム（揮発性及び／又は不揮発性の、メモリ及び／又はストレージ要素を含む）と、少なくとも１つのユーザインタフェース（少なくとも１つの入力デバイス又はポートを使用して入力を受け取るため、及び少なくとも１つの出力デバイス又はポートを使用して出力を提供するための）とを備える。ソフトウェアは、データフローグラフの設計、構成、及び実行に関係するサービスを例えば提供するより大きいプログラムの、１又は２以上のモジュールを含むことができる。プログラムのモジュール（例えば、データフローグラフの要素）は、データリポジトリに記憶されたデータモデルに従う、データ構造又は他の編成されたデータとして実装されてよい。
【００８９】
ソフトウェアは、ＣＤ−ＲＯＭ又は他のコンピュータ可読媒体（例えば、汎用若しくは専用のコンピューティングシステム若しくはデバイスによって読取り可能な）など、有形の非一時的な媒体上で提供されてもよく、或いは、ネットワークの通信媒体を介してコンピューティングシステムの有形の非一時的な媒体に送達されて（例えば、伝搬信号中で符号化されて）、コンピューティングシステムにおいて実行されてもよい。処理のいくらか又はすべては、専用コンピュータ上で実施されてもよく、又は、コプロセッサ若しくはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）若しくは専用の特定用途向け集積回路（ＡＳＩＣ，application-specific integrated circuit）など、専用ハードウェアを使用して実施されてもよい。処理は、分散方式で実装されてもよく、その場合、ソフトウェアによって指定される計算の異なる部分が、異なるコンピューティング要素によって実施される。このような各コンピュータプログラムは、ストレージデバイス媒体がコンピュータによって読み取られたときにコンピュータを構成及び操作して本明細書に記載の処理を実施するために、汎用又は専用のプログラム可能コンピュータによってアクセス可能なストレージデバイスのコンピュータ可読ストレージ媒体（例えば、固体メモリ若しくは媒体、又は磁気若しくは光学媒体）に記憶されるか又はダウンロードされることが好ましい。本発明のシステムはまた、コンピュータプログラムで構成された有形の非一時的な媒体として実装されるものと考えることもでき、その場合、そのように構成された媒体は、特定の事前定義された方式でコンピュータを動作させて、本明細書に記載の処理ステップの１又は２以上を実施させる。
【００９０】
本発明のいくつかの実施形態について述べた。しかし、以上の記述は、本発明の範囲を例示するものとし、限定するものとはしないことを理解されたい。本発明の範囲は、後続の特許請求の範囲によって定義される。したがって、他の実施形態もまた、後続の特許請求の範囲内である。例えば、本発明の範囲を逸脱することなく、様々な修正を加えることができる。加えて、前述のステップのいくつかは、順序に依存しない場合もあり、したがって、述べた順序とは異なる順序で実施されてもよい。
【図１】
0006454706.tif 000002
【図２】
0006454706.tif 000003
【図３】
0006454706.tif 000004
【図４】
0006454706.tif 000005
【図５】
0006454706.tif 000006
【図６】
0006454706.tif 000007
【図７】
0006454706.tif 000008
【図８】
0006454706.tif 000009
【図９】
0006454706.tif 000010
【図１０】
0006454706.tif 000011
【図１１】
0006454706.tif 000012
【図１２】
0006454706.tif 000013
【図１３】
0006454706.tif 000014