(57)【要約】入力、値の生成、出力、値の領域の初期化、経路決定を行う定型構造を持った部品プログラムによって構成されているプログラム作成方法において、部品プログラムが処理する対象の論理レコード間の参照の多重度情報と、出力データ項目の値を生成するための生成式と生成式実行条件が示すデータ項目間の参照関係情報に基づいて、仕様ごとに異なる部品プログラムのループを含む実行順序を決定する。【特許請求の範囲】
【請求項１】
定型構造を持った部品プログラムによって構成されているプログラム作成方法において、仕様によって異なる部品プログラムのループを含む実行順序を決定する方法であって、部品プログラムは、少なくとも、論理レコードの入力を実行する入力要素と、出力データ項目の値生成を実行する論理要素と、論理レコードの出力を実行する出力要素と、データ記録領域の初期化を実行する初期化要素と、プログラム内の実行経路を決定する経路要素を含み、１つまたは複数の入力要素、１つまたは複数の論理要素、１つまたは複数の出力要素、１つまたは複数の初期化要素、１つまたは複数の経路要素の実行順序を、論理レコード間の参照の多重度情報と、出力データ項目の値を生成するための生成式と生成式実行条件が示すデータ項目間の参照関係情報に基づいて決定することを特徴とする，プログラ厶実施順序決定方法。
【請求項２】
仕様によって異なる入力要素、論理要素、出力要素、初期化要素、経路要素のループを含む実行順序を決定する装置であって、論理レコード間の参照の多重度情報と、出力データ項目の値を生成するための生成式と生成式実行条件が示すデータ項目間の参照関係に基づいて、ループ範囲を明示した入力要素および出力要素の第１実行順序を決定する手段、
第１実行順序に対して初期化要素の配置を決定して第２実行順序を決定する手段、
第２実行順序に対して論理要素の配置を決定して第３実行順序を決定する手段、
ならびに第３実行順序に対して経路要素の配置を決定して第４実行順序を決定する手段を備えることを特徴とする，
プログラム実行順序決定装置。
【請求項３】
仕様によって異なる入力要素、論理要素、出力要素、初期化要素、経路要素のループを含む実行順序を決定する装置を制御するプログラムであって、
論理レコード間の参照の多重度情報と、出力データ項目の値を生成するための生成式と生成式実行条件が示すデータ項目間の参照関係に基づいて、ループ範囲を明示した入力要素および出力要素の第１実行順序を決定し，
第１実行順序に対して初期化要素の配置を決定して第２実行順序を決定し，
第２実行順序に対して論理要素の配置を決定して第３実行順序を決定し，
第３実行順序に対して経路要素の配置を決定して第４実行順序を決定するように制御する，プログラム。
【請求項４】
請求の範囲第３項に記載のプログラムが記録された，コンピュータ読み取り可能な記録媒体。
【請求項５】
一または複数のデータ項目を含む一または複数の参照元論理レコードと，一または複数のデータ項目を含む一または複数の参照先論理レコードのそれぞれとの間のデータ項目参照関係に基づいて，一または複数の参照元論理レコードのそれぞれと一または複数の参照先論理レコードのそれぞれとの組合せが，１：１，１：Ｎ，またはＮ：１のいずれの参照多重度の関係にあるかを表す参照多重度情報の入力を受付け，
受付けられた参照多重度情報が１：１であれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは同一のループ単位に属すると判定し，
受付けられた参照多重度情報が１：Ｎであれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは異なる２つのループ単位のそれぞれに属し，かつその参照元論理レコードを処理する要素モジュールが外側ループに位置づけられ，その参照先論理レコードを処理するための要素モジュールが内側ループに位置づけられると判定し，
受付けられた参照多重度情報がＮ：１であれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは異なる２つのループ単位のそれぞれに属し，かつその参照元論理レコードを処理する要素モジュールが内側ループに位置づけられ，その参照先論理レコードを処理する要素モジュールが外側ループに位置づけられると判定し，
上記参照多重度情報に基づく上記判定の結果に基づいて，一または複数の参照元論理レコードを処理する一または複数の要素モジュールおよび一または複数の参照先論理レコードを処理する一または複数の要素モジュールのそれぞれの処理順序を決定する，
処理順序決定方法。
【請求項６】
一または複数のデータ項目を含む一または複数の参照元論理レコードと，一または複数のデータ項目を含む一または複数の参照先論理レコードのそれぞれとの間のデータ項目参照関係に基づいて，一または複数の参照元論理レコードのそれぞれと一または複数の参照先論理レコードのそれぞれとの組合せが，１：１，１：Ｎ，またはＮ：１のいずれの参照多重度の関係にあるかを表す参照多重度情報の入力を受付ける参照多重度情報受付手段，
受付けられた参照多重度情報が１：１であれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは同一のループ単位に属すると判定する第１の判定手段，
受付けられた参照多重度情報が１：Ｎであれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは異なる２つのループ単位のそれぞれに属し，かつその参照元論理レコードを処理する要素モジュールが外側ループに位置づけられ，その参照先論理レコードを処理するための要素モジュールが内側ループに位置づけられると判定する第２の判定手段，
受付けられた参照多重度情報がＮ：１であれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは異なる２つのループ単位のそれぞれに属し，かつその参照元論理レコードを処理する要素モジュールが内側ループに位置づけられ，その参照先論理レコードを処理する要素モジュールが外側ループに位置づけられると判定する第３の判定手段，ならびに
上記参照多重度情報に基づく上記判定の結果に基づいて，一または複数の参照元論理レコードを処理する一または複数の要素モジュールおよび一または複数の参照先論理レコードを処理する一または複数の要素モジュールのそれぞれの処理順序を決定する決定手段，
を備えた処理順序決定装置。
【請求項７】
一または複数のデータ項目を含む一または複数の参照元論理レコードと，一または複数のデータ項目を含む一または複数の参照先論理レコードのそれぞれとの間のデータ項目参照関係に基づいて，一または複数の参照元論理レコードのそれぞれと一または複数の参照先論理レコードのそれぞれとの組合せが，１：１，１：Ｎ，またはＮ：１のいずれの参照多重度の関係にあるかを表す参照多重度情報の入力を受付ける処理，
受付けられた参照多重度情報が１：１であれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは同一のループ単位に属すると判定する第１の判定処理，
受付けられた参照多重度情報が１：Ｎであれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは異なる２つのループ単位のそれぞれに属し，かつその参照元論理レコードを処理する要素モジュールが外側ループに位置づけられ，その参照先論理レコードを処理するための要素モジュールが内側ループに位置づけられると判定する第２の判定処理，
受付けられた参照多重度情報がＮ：１であれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは異なる２つのループ単位のそれぞれに属し，かつその参照元論理レコードを処理する要素モジュールが内側ループに位置づけられ，その参照先論理レコードを処理する要素モジュールが外側ループに位置づけられると判定する第３の判定処理，ならびに
上記参照多重度情報に基づく上記判定の結果に基づいて，一または複数の参照元論理レコードを処理する一または複数の要素モジュールおよび一または複数の参照先論理レコードを処理する一または複数の要素モジュールのそれぞれの処理順序を決定する決定処理，
をコンピュータに実行させる処理順序決定処理プログラム。
【請求項８】
請求の範囲第７項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は，プログラム実行順序決定装置および方法に関する。
【背景技術】
【０００２】
Ｉ．ソフトウェア開発の課題について
高い品質を持つソフトウェアを容易に迅速に製造することは、ソフトウェア開発研究分野の基本的な関心事である。ソフトウェア開発の生産性、保守性、品質を向上するための種々の方法論（ソフトウェア開発手法）および技術が考案され提案されてきたが、いまだにこれらの課題（ソフトウェア開発の生産性，保守性，品質の向上）を本質的に解決できたものはない。
理由の１つは、ソフトウェア自身が複雑なものであり、捕らえにくいものであるからである。
理由の他の１つは、現在のソフトウェア開発方法論（開発手法）に限界があるからである。実際、現在までに提案されたほとんどすべての方法論は、明快に理解でき、かつ修正可能なシステム（ソフトウェア・システム）の製造に失敗しているのみならず、非常に広範囲の能力、技術および知識を持つ専門家にしか利用できないものと，いまだに考えられている。その結果，人件費や維持費が高いものになっているし，現在のソフトウェア開発の方法論にしたがって作成されるソフトウェアをコンピュータ上で実行させるためには広範なチェックが必要になる。
従来のソフトウェア開発手法には，（１）手続き型プログラミング，（２）宣言型プログラミングおよび（３）オブジェクト指向プログラミングがある。これらの開発手法の概要と課題をまとめると以下のようになる。
（１）手続き型プログラミング
手続型プログラミングは、制御手順などの手続きを明示的に指定するプログラミングである。手続型プログラミングは，その記述の扱いやすさから、業務システム開発とその実装において効果を発揮してきた。しかし、いまだ要件（開発すべきソフトウェアの発注者であるユーザのもつ要求）を正確にソフトウェア上に実装することの困難性、生産性や保守性の困難性という重大な課題が残されている。
（２）宣言型プログラミング
要件定義そのものである宣言によってプログラミングを行う宣言型のプログラミングは、人工知能、エキスパートシステムをはじめ論理的証明（ｌｏｇｉｃａｌ  ｒｅａｓｏｎｉｎｇ）、推論（ｉｎｆｅｒｅｎｃｅ）、ユーザ情報収集（ｕｓｅｒ  ｉｎｔｅｌｌｉｇｅｎｃｅ  ｇａｔｈｅｒｉｎｇ）など、非計算系のアプリケーション分野で使用されている。宣言型プログラミングでは、上述した手続型プログラミングで用いられる制御手順は用いられず，要件定義されているデータ間の関係を宣言し、その宣言に基づいてプログラミングが行われる。そのメリットは、上述の手続き型プログラミングと異なり、要件を正確に実装できるということである。
しかしながら、従来の宣言型プログラミングにも、実行制御の構造上、実行時の効率が良くないという問題がある。また、宣言型プログラミングを行うための言語は使いこなすのが難しいという欠点がある。宣言型プログラミングを行うための言語には、論理式を用いる論理型言語（たとえばＰＲＯＬＯＧ）や対象の状態を数学的な関数として記述する関数型言語（たとえばＬＩＳＰ）がある。宣言しただけでは値は生成されないから、値を生成するために、宣言型言語は、宣言を実行するための手続きの論理メカニズムを持っている。この手続きの論理メカニズムには、あらゆる宣言を実行できるようにするために多くの条件があり、数学や論理学の知識も必要で、使いこなすのが難しい。このために、プログラミング言語として普及していない。人間の自然言語に近い構造を持つ手続型言語による手続き型プログラミングの方が普及しているゆえんである。
（３）オブジェクト指向プログラミング
オブジェクト指向プログラミングは，データとそれを操作する手続き（メソッドと呼ぶ）をオブジェクトと呼ばれるひとまとまりの単位（モジュール）として一体化し、このオブジェクトを組み合わせることによってプログラムを記述するプログラミングである。オブジェクトという独立性の高いオブジェクト（モジュール）によってプログラムが構成されるため、変更および修正の影響の範囲が限定され、またオブジェクトの単位の再利用がしやすくなるなどのメリットがある。
しかしながら、要件を、どのような単位のオブジェクトに実装するのか、さらに、構成要素をどのように組み立てるかについては厳格な規則はなく、また、構造化設計アプローチのような実行順序についての規制もない。実際の開発の場においては、オブジェクト間の関係が完全に一貫性を持っていず、多くの場合、開発成果物に大量のオブジェクトが生成されていても、作成者自身を除けば誰もそれを理解していないのが現状である。すなわち、完成したソフトウェアは規則性のない機能のかたまりとなり、解体したり、再使用したりするのが困難になる傾向が強い。
ＩＩ．Ｌｙｅｅ開発方法論について
上述のようなソフトウェア開発の課題を解決する手段として、Ｌｙｅｅ（ｇｏｖｅｒｎｍｅｎｔａＬ  ｍｅｔｈｏｄｏｌｏｇＹ  ｆｏｒ  ｓｏｆｔｗａｒＥ  ｐｒｏｖｉｄｅｎｃＥの語尾をとったもの。「リー」と読む。発明者は根来文生。）と呼ばれるソフトウェア開発方法論が提案されている。Ｌｙｅｅは、要件からプログラムのコードを自動的に生成することが可能な新しいソフトウェア開発方法である。
Ｌｙｅｅでは、要件を、変数であるデータ項目（Ｌｙｅｅでは単語とも呼ばれる）ごとに宣言（定義）し、データ項目ごとの宣言を実行するための定型構造のモジュールに、その宣言を代入することによってプログラムを作成する。
Ｌｙｅｅによるプログラム全体は、データ項目単位の宣言を実行する定型構造のモジュールの集合で構成されている。したがって、この定型構造のモジュールにデータ項目ごとの要件の宣言を代入することによって、自動的にプログラムを生成（ソースコードを生成）することも可能である。
Ｌｙｅｅによるプログラムの自動生成は、たとえば「ＬｙｅｅＡＬＬ」と呼ばれるツール（プログラム）によって実現されている。ＬｙｅｅＡＬＬは、データ項目の宣言を実行する定型構造モジュールのコード（「テンプレート」と呼ぶ。テンプレートはひな形の意。）の所定の場所に、要件の宣言を自動的に代入し、Ｌｙｅｅにおけるプログラム設計方法に従って定型構造モジュールを配置し、プログラム全体のソースコードを自動的に生成する。Ｌｙｅｅにおけるプログラミングでは、要件を実行する手順（手続き）を記述する（ソースコードを記述する）必要がなく、要件をデータ項目単位に宣言すればよい。この意味で，Ｌｙｅｅに基づくプログラミングは，宣言型プログラミングと言える。以下に、Ｌｙｅｅによるソフトウェアの開発方法論（以下，Ｌｙｅｅ方法論という）の概要を述べる。
１．データ項目ごとの要件の宣言
上述したように，Ｌｙｅｅ方法論では、データ項目ごとに要件を宣言する。要件の宣言を構成する要素の主なものを挙げると、（１）データ項目名、（２）その値の生成式、（３）その値の生成条件（生成式の実行条件）、（４）入出力属性、（５）値の属性がある。次に示す表１は、データ項目（単語）の要件の宣言の一例である。
【表１】
2007018295.tif 000002
「データ項目名」はデータ項目を識別するための識別子、「生成式」はデータ項目の値を生成するための計算式、「生成条件」は「生成式」を実行するかどうかを示す実行条件である。なお，１つのデータ項目が２つ以上の生成式を持つ場合があり、その場合にそのどちらが実行されるかも「生成条件」によって決定されることになる。「入出力属性」はデータ項目の値が、入力される値であるか，またはプログラムによって生成されて出力される値であるかの区別を示す。表１では、「Ｉ」は入力される値であること、「０」はプログラムによって生成されて出力される値であることをそれぞれ表わしている。「属性」は、データ項目の値の属性であり、たとえば、入力される値またはプログラムによって生成されて出力される値が，整数であるか、浮動小数点数であるか、ブール値（真偽値）であるかなどを区別するものである。表１では、ｉｎｔは整数（ｉｎｔｅｇｅｒ）、ｆｌｏａｔは不動小数点数を表す。
以下，生成式および生成条件に用いられるデータ項目を「始点」と呼び、生成されて出力されるデータ項目を「端点」と呼ぶことにする。
表１に示したデータ項目の要件の宣言は、従来のプログラミング言語のコードで表すと表２のようになる。ここで，「Ｓａ」は、データ項目ａの宣言を意味する。同様に，「Ｓｂ」，「Ｓｃ」，「Ｓｄ」，「Ｓｅ」は，それぞれデータ項目ｂ，ｃ，ｄ，ｅの宣言をそれぞれ意味する。
【表２】
2007018295.tif 000003
たとえば、データ項目ａの宣言Ｓａのコードは「もし、ｂ＊ｅ＞２が真ならば、データ項目ａにｂ＋ｃの計算結果を代入し、データ項目ａの値を出力」することを意味している。宣言Ｓｃのコードは「データ項目ｃに値を入力」することを意味している。
Ｌｙｅｅ方法論においては、開発者は、データ項目ごとの要件の宣言（定義）が実行される順序（制御ロジック）を指定する必要はないことを，特徴の一つとしている。表２に示すように、データ項目ａの宣言Ｓａは、データ項目ｂを使用しているにもかかわらず、宣言Ｓｂは、宣言Ｓａの後に位置している。後述するように，Ｌｙｅｅ方法論では、表１に示したように要件をデータ項目ごとに宣言すれば、データ項目の宣言を実行する順序を指定することなく、すべてのデータ項目の計算が完了するコードを生成することができる。
なお，従来の手続型プログラミングの場合，プログラムが要件通りに成立するためには、開発者が，Ｓｃ→Ｓｅ（またはＳｅ→Ｓｃ）→Ｓｂ→Ｓａのように，実行順序を記述しなければならない。このような実行順序を決定するためには、要件があらかじめ全て決定済みである必要があり、全ての要件が決定しなければプログラミングをスタートできなかった。しかしながら、Ｌｙｅｅでは、開発者はデータ項目の値の生成の実行順序（制御ロジック）の問題を扱う必要がないので、要件が不完全であっても、プログラミング（Ｌｙｅｅにおいては要件をデータ項目ごとに宣言していく作業）をスタートすることができる。
データ項目の値の生成の実行順序（制御ロジック）は、Ｌｙｅｅ方法論においては、すべての要件に対応できる普遍的ロジックとして、定型構造のテンプレートとして提供される。その結果、プログラミングにおける制御ロジック上のミスを無くすことができる。さらに，テンプレートが用られてソースが自動生成されるので、プログラミング時間が大幅に短縮される。柔軟性も、Ｌｙｅｅ方法論の主要な利点である。何故なら、保守業務（すなわち、要件の修正または変更）は、データ項目の宣言の追加、削除および／または修正という作業にまで軽減できるからである。
２．実行順序の指定を不要にする実行制御ロジック
Ｌｙｅｅにおいては、なぜデータ項目の宣言の実行順序を指定する必要がないのか（Ｌｙｅｅにおいて、どのような制御ロジックによって、出力データ項目の値の生成が要件どおりに成立することを保証しているのか）。Ｌｙｅｅでは、この順序（実行手続き）の問題を、２通りの方法で解決している。第１の方法は「繰り返し法」、第２の方法は「最適順序化法」である。以下，繰り返し法と最適順序化法について説明する。
（１）繰り返し法
第１の方法「繰り返し法」について、表１の要件を例にとって説明する。第１図は、データ項目ごとの宣言を実行する実行制御ロジックを簡易に示したものである。この制御ロジックでは、実行範囲内のコードの実行結果が、不動点（ｆｉｘｅｄ  ｐｏｉｎｔ）に達するまで、コードの実行を繰り返す。ここで「不動点」とは、実行範囲のコードの実行をこれ以上繰り返しても，いかなるデータ項目の値も新たに生成されなくなった状態（変化が起こらなくなった状態）である。不動点に達した状態を「状態変化なし」とも言う。直前の一巡実行の結果と、今回の一巡結果を比較したとき、値の決定状態に変化がない、という意味である。「繰り返し法」の制御ロジックは、不動点に達するまで、実行範囲のコードの実行を単純に反復する。したがって、どのような順序によって，データ項目の生成を実行しても、全ての出力データ項目の値を生成することができることになる。
不動点に達する原因には、次の２つのケースがある。第１のケースは、繰り返し範囲内のデータ項目の値が，全て生成済み（決定済み）となることである。第１図の場合の値の成立過程を表３に示す。○印は値が成立済みであることを示す。×印は値が未決定であることを示す。
【表３】
2007018295.tif 000004
2007018295.tif 000005
第１図および表３を参照して，１回目（１巡目）の実行で入力データ項目ｃとｅの値が決定される。２回目（２巡目）の実行でデータ項目ｂの値が新たに決定される。３回目（３巡目）の実行でデータ項目ａの値が決定される。全てのデータ項目ａ，ｂ，ｃおよびｅの値が決定する（すなわち，不動点に達する）ので、４回目（４巡目）の実行で新たに生成される値はない。この過程を「状態変化」で言い換えれば、１回目終了後の状態は初期状態と比較して「状態変化あり」、２回目は１回目と比較して「あり」、３回目は２回目と比較して「あり」、４回目は３回目と比較して「なし」、となる。
第２のケースは、いくら繰り返し処理をしても値が生成できないデータ項目が残る場合である。すなわち，データ項目の生成式を構成する始点の値が，繰り返し実行範囲内では決定されない場合である。たとえば、第１図において、データ項目ａの生成式（第２行目）が，「ｂ＋ｃ」ではなく，「ｂ＋ｃ＋ｄ」であるとする。データ項目ｄは、第１図の実行範囲で入力されるデータ項目でもなく、生成される出力データ項目でもない。この場合の、繰り返し実行による各データ項目の値の成立過程は，表４の通りである。
【表４】
2007018295.tif 000006
2007018295.tif 000007
１回目（１巡目）の実行で入力データ項目ｃとｅの値が決定される。２回目（２巡目）の実行でデータ項目ｂの値が新たに決定される。３回目（３巡目）の実行では、データ項目ａの生成条件（（ｂ＊ｃ）＞２）（１行目）は判定可能であるが、生成式（上述した，「ｂ＋ｃ＋ｄ」）は始点ｄの値が未決定であるので，値が決まらない。３回目（３巡目）の実行では、新たに値が決定するデータ項目がなく、従って、データ項目ａは、これ以降は何回実行を繰り返しても、値が成立する可能性が全く無く、未決定のままである。この過程を「状態変化」で言い換えれば、１回目終了後の状態は初期状態と比較して「状態変化あり」、２回目は１回目と比較して「あり」、３回目は２回目と比較して「なし」となる。この２つの事例でわかるように、状態変化が「なし」の判断は、不動点に達した後、もう１回実行した後でなければ判定できない（逆に言えば，不動点に達したかどうかは，不動点に達した後にもう１回実行されることによって明らかになる）。
繰り返し法では、いつ繰り返しを停止するかが重要である。繰り返しを制御するためには、要件に依存せずに、不動点に達したことを判定するロジックが必要である。このような制御ロジック（不動点判定制御ロジック）については、処理速度やプログラムサイズの点からみて，効率のよい技術がこれまでには開示されていない。
（２）最適順序化法
最適順序化法は、順不同に並べられたデータ項目ごとの宣言を、一巡処理で成立するように、自動的に最適順序に並べかえて実行コードを生成する方法である。並べ替えの方法に関する技術は、国際公開第２００４／６８３４２号パンフレット、国際公開第２００４／８１７８８号パンフレット、国際公開第２００５／４３２７１号パンフレットにおいて開示されている。繰り返し法と最適順序化法は一見対極にあるようであるが、この２つの方法が可能になっているのは、Ｌｙｅｅにおいては、データ項目単位に要件をとらえ、プログラムを構成するモジュールをデータ項目単位の処理を基本にしていることにある。繰り返し法では、最適順序の順に値が成立するので、プログラムの実行の都度順序を探しているといってもよい。最適順序化法は、実装する前に最適順序化して、プログラムの実行時に最適順序で実行される方法である。
３．システム、プログラムの構造
（１）システムの分割
１つのシステム（システム・プログラム）は、通常，いくつかの単位に分割された構造になっている。それは、複雑な仕様の大きなシステムを分割せずに作るのは非常に困難だからである。分割は、階層的に行われる。ここでは、システム（あるいはサブシステム）を分割したものをプログラム、プログラムを分割したものをモジュールと呼ぶことにする。一般的なソフトウェア開発では、ユーザから見たシステム（画面，帳票，外部インタフェースなど）の設計（基本設計）が終わると、次に、それを実現するためのシステムの内部構造を設計し、システムをどのように分割するかを設計する（詳細設計およびプログラム設計）。次のプログラミングの段階では、まず分割した単位の構造設計（モジュール設計）を行い、最後にプログラム言語によってソースコードの記述を行う。
（１−１）従来の開発手法の場合
システムの分割設計手法にはいくつかの方法がある。以下，構造化手法およびオブジェクト指向を例に，従来のシステムの分割設計手法を説明する。
構造化手法では、システムの機能単位に，プログラム、そしてモジュールへの分割が行われる。分割されたプログラムおよびモジュールの独立性が高い（他のプログラムおよびモジュールとの係わり度合いが少ない）ほど、システムの品質が高いといえる。しかしながら、構造化手法の設計方法には厳密な設計規則がないので、独立性の高さは設計者のスキルに依存し、一般には独立性は高くない。独立性が低い場合、１つのプログラムおよびモジュールを設計するとき、その他のプログラムおよびモジュールとの関連を理解しなければならい。モジュールを修正するときも、他のプログラム、またはモジュールに与える影響を考慮しなければならない。また、機能単位に分割する方法では、プログラムやモジュールが行う処理は仕様に依存するので、再利用性も低い。
オブジェクト指向は、モジュールの独立性、再利用性の問題を解決するために生まれた手法である。モジュールは完全な独立性があり、再利用性が高い。しかしながら、モジュール（すなわち，オブジェクト）の単位の定義は観念的なところがあり、モジュール（オブジェクト）の設計の良し悪しは技術者のスキルに大きく依存する。また、モジュール（オブジェクト）の内部構造の設計方法は規定されていないので、その設計の良し悪しはやはり技術者のスキルに依存する。
（１−２）Ｌｙｅｅの場合
Ｌｙｅｅでは、プログラムの分割の単位を、「イベント」ごとの出力に着目して決定する。「イベント」とは，プログラミングの分野では，ユーザがコンピュータに対して行った操作という事象（マウスのクリックやキー押下など）やコンピュータが発するなんからの事象（エラーメッセージなど）などのことを指す。プログラムは、何らかのイベントを開始の合図として、発生したイベントに対応した一連の処理を行い、処理の結果を表示したり、記録したりした後、プログラムはアイドリング状態となる。たとえば、Ｗｉｎｄｏｗｓ（商標）などの操作画面で、コンボボックスの右端のボタンをクリックすると、項目選択リスト（リストボックス）が表示される。この場合、ユーザが行った「コンボボックスの右端のボタンをクリック」がイベントで、「項目選択リスト（リストボックス）を表示」するまでの一連の処理がイベントに対応した一連の処理である。イベントは、ユーザが直接行う操作に限定されない。プログラム内部に予め設定されたタイマーもイベントである。
システムの役割は、ユーザの求め（直接であれ間接であれ）に応じて、求められた処理結果を出力することである。従って、プログラムは、何らかのイベント（ユーザによる画面上のボタン押下など。イベントの定義は後述箇所参照。）によって、イベントに対応した一連の処理（入力、演算、出力）を開始し、最終の出力（画面への結果の表示など）を完了したとき、処理を終了する。
Ｌｙｅｅ方法論では，システムを分割したプログラムの単位を，「イベントに対応した一連の処理」とする。このことによって、プログラムは，相互依存のない独立性を持ち、ソフトウェアの開発および保守における品質維持が容易になる。また，分割基準が明快で理解しやすくなり、プログラム設計の良し悪しが技術者のスキルに依存することがない。
この発明における「プログラム」（イベントに対応した一連の処理）は、定型の制御構造を持ったモジュールで構成されている。このモジュールを「単位モジュール」と呼ぶことにする。この単位モジュールは、さらに、データ項目ごとの宣言を実行するための何種類かのモジュール群によって構成されている。これらの宣言を実行するモジュールを「要素モジュール」と呼ぶことにする。
第２図は、上述したＬｙｅｅによるシステムの分割構造を図示したものである。
単位モジュールは、出力に着目して要素モジュールをグループ化した単位である。コンピュータの入出力処理は、データ項目単位ではなく、データ項目の集合単位に行われるが、同一の媒体（画面、ファイル、帳票など、データ項目を記録または表示する手段）に対して入力または出力処理されるデータ項目の集合を、本願では論理レコードと呼ぶ。１つの出力論理レコードの生成および出力に関与する要素モジュールの集合をとらえ、この集合を１つ又は複数処理するのが単位モジュールである。
４．従来のＬｙｅｅの構造
「繰り返し法」制御ロジックを採用した場合の、単位モジュールの構造や、各要素モジュールの処理内容や構造は、いくつかの実施例があり、国際公開第０１／９３０２６号パンフレット、国際公開第２００４／８１７８８号パンフレット、国際公開第２００５／２９３２２号パンフレットに開示されている。これらの従来のＬｙｅｅでは、単位モジュールは、さらにパレットと呼ばれる単位に３分割されている。単位モジュールが３分割されている従来Ｌｙｅｅの実施例の１つについて、単位モジュールおよび要素モジュールの概要を説明する。
（１）単位モジュール
第３図は，単位モジュールの構造の一例を図示したもので，表１に示した要件の場合の要素モジュールの構造を示したものである。単位モジュールにはＷ０４パレット，Ｗ０２パレットおよびＷ０３パレットを含み，これらのパレットは、その処理の内容ごとに要素モジュールを集合させたものである。ここでいう「処理の内容」とは、仕様に依存する機能的処理ではなく、コンピュータの基本処理である入力、出力、演算というハードウェアの視点から見た処理ある。Ｌｙｅｅの特長は、モジュール化を機能依存でなく、普遍性をもったコンピュータの基本処理ごとに行ったところにある。これによって、汎用的に適用可能なモジュールのひな型化に成功している。
Ｗ０２パレットは、入力データ項目の入力にかかわる要素モジュールの集合である。
Ｗ０３パレットは出力データ項目の生成式の実行条件の判定にかかわる要素モジュールの集合である。
Ｗ０４パレットは出力データ項目の値の生成（生成式の実行による）と、値の出力にかかわる要素モジュールの集合である。
各パレットには、パレット内の複数の要素モジュールを起動するためのパレット制御モジュールを含む。そして，パレット制御モジュールは、第２図に示す全体制御モジュールによって起動される。全体制御モジュールはプログラムに１つ、またはシステム全体で１つでもよい。
（２）要素モジュール
要素モジュールは、処理の種類別にいくつかの種類があり、要件に依存しない定型構造を持っている。ここで説明する一例では９種類の要素モジュールがある。以下に、パレットごとに、要素モジュールの概要を説明する。
＜Ｗ０４パレットの要素モジュール＞
Ｗ０４パレットは、初期化モジュールＳ４（第３図においては，単に「Ｓ４」で示す。他の種類のモジュールも同様）、データ項目モジュールＬ４（Ｌ４）、出力モジュール０４（０４）、経路判定モジュールＲ４（Ｒ４）の４種類のモジュールで構成されている。
Ｗ０４パレットに含まれるデータ項目モジュールＬ４は、出力データ項目の生成式を実行し、値を決定するモジュールである。このデータ項目モジュールＬ４は出力データ項目の生成式ごとに作成される。上述した表１において，生成式は２つあるので，第３図に示すＷ０４パレットに含まれるデータ項目モジュールＬ４は２つ存在する。データ項目モジュールＬ４＿ａが、出力データ項目ａの生成式ｂ＋ｃを実行するモジュールを，データ項目モジュールＬ４＿ｂが出力データ項目ｂの生成式２＊ｃ＋５を実行するモジュールをそれぞれ表す。
出力モジュール０４は、出力データ項目の値の集合（出力論理レコード）を媒体へ出力する処理を行うモジュールである。
経路判定モジュールＲ４は、Ｗ０４パレットが不動点に達した後、次に実行するＷ０２パレットを指定するモジュールである。
初期化モジュールＳ４は、単位モジュール内の値やフラグの領域の初期化を行う。
＜Ｗ０２パレットの要素モジュール＞
Ｗ０２パレットは、入力モジュールＩ２（Ｉ２）、データ項目モジュールＬ２（Ｌ２）および経路判定モジュールＲ２（Ｒ２）の３種類のモジュールを含む。
入力モジュールＩ２は、入力データ項目の値の集合（入力論理レコード）を、媒体から読出してメモリ領域へ入力する処理を行うモジュールである。
Ｗ０２パレットに含まれるデータ項目モジュールＬ２は、入力された値の属性が要件に合致するかどうかのチェックを行うモジュールである。Ｗ０２パレットに含まれるデータ項目モジュールＬ２は，入力データ項目ごとに１つ作成される。上述した表１において，入力データ項目はデータ項目ｃおよびデータ項目ｅの２つであるから，第３図において，Ｗ０２パレットに含まれるデータ項目モジュールは，２つ存在する。
経路判定モジュールＲ２は、Ｗ０２パレットが不動点に達した後、次に実行するＷ０３パレットを指定するモジュールである。
＜Ｗ０３パレットの要素モジュール＞
Ｗ０３パレットは、データ項目モジュールＬ３（Ｌ３）および経路判定モジュールＲ３（Ｒ３）の２種類のモジュールを含む。
Ｗ０３パレットに含まれるデータ項目モジュールＬ３は、生成条件判定を実行するモジュールであり，出力データ項目の生成式の実行条件（生成条件）ごとに作成される。第３図において，データ項目モジュールＬ３は２つ存在する。データ項目モジュールＬ３＿ａは、出力データ項目ａの生成条件ｂ＊ｅ＞２であるかどうかの判定を実行するモジュールであり，データ項目モジュールＬ３＿ｂは，出力データ項目ｂの生成条件ｃ＞０であるかどうかの判定を実行するモジュールである。
経路判定モジュールＲ３は、Ｗ０３パレット内が不動点に達した後、次に実行するパレットを，単位モジュール内のＷ０４パレットか、または他の単位モジュールのパレットに指定する。
（３）要素モジュールの構造
要素モジュールのそれぞれはひな型化されており、処理の対象データ項目、生成式および生成条件、入出力対象の媒体など、要件によって変化する情報を代入することによって、モジュールが完成する。
第４図は，データ項目モジュールについてのひな形化された処理の流れを示している。データ項目モジュールは、第４図に示すような共通の処理フロー構造を持っている。
各要素モジュールはそれぞれ単一の処理を担当しているが、その目的処理が未完了かつ実行条件が整っているなら目的処理を実行し、実行条件が整わない、または処理が完了済みであれば実行しない、という判定ステップを持っている（ステップ４１）。繰り返し法では、繰り返し時の無駄な処理を除くため、処理すべきモジュールのみを実行したい。この制御が、ステップ４１の要素モジュールの自律的自己制御によって、実現されている。
データ項目要素モジュールＬ４＿ａ（目的処理が，出力データ項目ａの値生成であるモジュール）を具体例にとって，第４図に示すフローチャートを説明する。以下に示す表５は、第４図に示すフローチャートにおける各ステップと，データ項目要素モジュールＬ４＿ａの処理内容の対応関係を示している。
【表５】
2007018295.tif 000008
ステップ４１は、目的処理を実行するか否かを判定するステップである。ステップ４１では「目的処理未完了？」および「実行条件成立？」の２つの判定が行われる。
第一の判定「目的処理未完了？」は、データ項目ａの値の記録領域に値があるか否かの判断を行う。Ｌｙｅｅでは値の記録領域を適切なタイミングで初期化し，データ項目の値が成立したときの１度だけ領域に値を記録するので、このような判定が可能になる。
第二の判定「実行条件成立？」は、Ｌ４の場合、生成条件（実行する生成式の実行条件）が成立しているか否かの判断を行う。すなわち、ｂ＊ｅ＞２が成立か否かを判定する。
これら第一および第二の２つの判定が共に真であれば、目的処理の実行に進む（ステップ４２）。目的処理は生成式ｂ＋ｃの実行である。実行結果の値は仮領域ａ＿ｔｍｐに記録される。
次のステップは、要件に適合した結果が得られたか否か判定するステップである（ステップ４３）。具体的には、仮領域ａ＿ｔｍｐに値があるか否かを判定する。たとえば、データ項目ｃの値が成立していなかったとすると、生成式ｂ＋ｃの実行は成功せず、ａ＿ｔｍｐに値は記録されない。この場合，ステップ４３の判定の結果はＮｏとなる。
要件に適合した結果が得られていない場合（ステップ４３でＮｏ），ステップ４５へ進み、再実行するかどうかが判定される。具体的には，再実行するかどうかの判定は，自パレット内で状態変化があったか否かの判定である。自パレット内の状態変化を調べて結果を制御領域に記録し、状態変化があったのであれば、再実行すべきなので，ステップ４７に進む（ステップ４５でＹｅｓ）。ステップ４７では、自パレットのＬ４群を再度一巡実行させる旨の情報を制御領域に記録する。
他方，状態変化がなかったのであれば（ステップ４５でＮｏ）、ステップ４６に進み、目的処理の結果が不成立であったことを制御領域に記録する。
ステップ４３で、要件に適合した結果が得られた（目的処理の成功）と判定された場合（ステップ４３でＹｅｓ）、処理結果を確定させるために、仮領域ａ＿ｔｍｐの値が領域ａにコピーされる（ステップ４４）。
（４）パレット関数の処理内容
以下に示す表６は，単位モジュール内の要素モジュールの実行を制御するパレット関数のコードの一例を示す。表６は、表１の要件の単位モジュールの場合であり、第３図に対応する。コメントはコードの意味を示している。
【表６】
2007018295.tif 000009
５．従来のＬｙｅｅ構造の改良
Ｌｙｅｅは、要件の正確な実装、プログラム設計の簡易化、コーディングの自動化を実現する手段を提供することによって、新規開発および保守開発の生産性、品質の向上を達成した。しかし、実行速度が遅く、プログラムサイズが大きいという課題があった。Ｌｙｅｅによるプログラムの構造を、その宣言的プログラミングの利点をそのままに、要件的意味を変更せずに維持しながら、不要な反復がなく、よりサイズが小さく、より効率的な処理速度のプログラムにするために、以下のような改善がなされてきた（この点について，ＰＣＴ／ＪＰ２００６／３０８４７５）。
（ｉ）パレット分割を排除して繰り返し回数を削減し、処理速度を向上する。
（ｉｉ）要素モジュールの簡素化と種類の削減によって、処理速度を向上し、プログラムサイズを小さくする。
（ｉｉｉ）要件に依存しない、効率の良い繰り返し制御方法により、繰り返しを最小限にして処理速度を向上する。また、開発者の設計の負担を軽減し、品質を向上する。
（ｉｖ）要件に依存しない初期化の実行条件に改善し、開発者の要件定義の負担を軽減し、品質を向上する。
（ｖ）経路判定条件の簡素化・定型化によって、開発者の要件定義の負担を軽減し、品質を向上する。
（ｖｉ）複数レコードの入力および出力処理制御を明確化にし、開発者の設計の負担を軽減し、品質を向上する。
（ｖｉｉ）プログラム設計方法の明確化により、開発者の設計の負担を軽減し、品質を向上する。
これまでのＬｙｅｅの開発の経緯をまとめると，次のように言える。
従来法では、設計もコーディングも人に依存する作業で、また人による作業を規定しよう試みた各種の方法論は仕様に依存するので、方法論をうまく適用できるか否か自体が人のスキルに依存してしまう。このために、ソフトウェアの品質、保守性、開発期間が、携わる人のスキルに依存してしまう、という課題があった。
Ｌｙｅｅ開発方法論は、次の３つを確立したことで、この課題を解決してきた。
１つ目は、仕様に依存せず、汎用的に用いることができるプログラム構造を確立したこと。
２つ目は、要件の定型的な定義方法を確定したこと。これは、汎用的な定型のプログラム構造が確立したことと相関関係にある。
３つ目は、モジュール設計についても、仕様に依存しない設計ルールを確立したこと。
上記３つの方法を確立したことよって、「ＬｙｅｅＡＬＬ」と呼ばれるプログラムソースコード自動生成ツールが実現した。すなわち、ひな型である定型のプログラム構造に、Ｌｙｅｅ方法論による、要件定義情報とモジュール設計情報を入力することによって、プログラムソースコードが自動生成される。従来のＬｙｅｅ方法論は、プログラム設計からコーディングまでの開発工程に対する改善を行って、ソフトウェア開発の課題を解決してきた。この改善の効果は、新規開発のプログラ厶設計からコーディング、単体テストおよび結合テスト，ならびに保守の工程の生産性と質の向上現れている。
ＬｙｅｅＡＬＬによるプログラム製造を、より生産性が高く、かつ、より高品質のプログラムを生成可能な方法するためには、「人が行う設計作業の人為依存度の問題」および「プログラムの処理速度、サイズの問題」という２つの課題がある。
１．人が行う設計作業の人為依存度の課題
ソフトウェア開発では、内部設計の後に、プログラム設計、モジュール設計、という過程を経るが、Ｌｙｅｅではプログラムの構造が決まっているのでモジュール設計は不要である。内部設計情報から簡易なプログラム設計を行い（プログラムの定形構造が決まっているので，Ｌｙｅｅ以外の従来の開発方法に比べると非常に簡易である），内部設計情報とプログラム設計情報をＬｙｅｅＡＬＬに入力することによって、プログラムが自動生成できる。Ｌｙｅｅでは、プログラム設計図を「処理経路図」と呼ぶ。Ｌｙｅｅは、内部設計情報の仕様に依存しない定型的な定義方法、プログラム設計の仕様に依存しない設計方法を確立した。内部設計を行うのは人間であるが、内部設計情報の定型化は、ツールへの入力項目を規定することによって達成できている。
一方、プログラム設計方法は、規則はあるものの、設計方法をツール側が規定する部分が少ないので、設計方法について設計者に自由度を与える部分が大きかった。処理経路図の設計方法は改善をかさねて進歩して現在に至っている。後述するＬｙｅｅＡＬＬ３以前のＬｙｅｅＡＬＬ２において、多重度の情報を用いて処理経路図を設計するルールが確立されたが、そのルールに従わない処理経路図の設計情報であっても、ＬｙｅｅＡＬＬ２に入力することが可能であった。そのため、処理経路図の設計がルールどおりに正しく設計されたかどうかは、各人のスキルに依存してしまう結果となっていた。また、Ｌｙｅｅ以外の従来のいずれかの設計方法に慣れた人が、それらと異なるＬｙｅｅの設計法を習得し、正しく設計が行えるようになるためには、ある程度の学習時間がかかる。開発未経験者であれ、開発経験者であれ、ツール側に正しい設計をサポートするような機能がないと、プログラムの品質に大きく影響する。正しい設計法を規定することができる、また、人に依存する設計作業量を軽減してより少ない設計情報のみでプログラムの生成することができる（すなわち、内部設計情報から自動的に設計する部分を拡大すること）ツールの実現が課題である。
２．プログラムの処理速度およびサイズの課題
繰り返し型のプログラム構造は、最適順序化された構造に改善することで、処理速度やサイズの点で一層の改善が見込める。そこで、要素モジュールを自動的に最適順序化する技術が提案されてきた。しかし、従来技術では、最適処理順序構造を自動的に生成するために必要十分な最小限の要件情報を特定できていなかった。また、ループを含むプログラムにおける最適順序化のアルゴリズムが、明確になっていなかった。最適順序化においても、最適順序化するため人間が設計しなければならない情報量を減らし、仕様ごとに決定しなければならない必要十分な内部設計情報から自動的に最適順序化できるようにすることが課題であった。
【発明の開示】
【０００３】
この発明は，上述した「人が行う設計作業の人為依存度の課題」および「プログラムの処理速度およびサイズの課題」を解消する，または低減することを目的とする。
この発明によるプログラム実施順序決定方法は、定型構造を持った部品プログラムによって構成されているプログラム作成方法において、仕様によって異なる部品プログラムのループを含む実行順序を決定する方法であって、部品プログラムは、少なくとも、論理レコードの入力を実行する入力要素と、出力データ項目の値生成を実行する論理要素と、論理レコードの出力を実行する出力要素と、データ記録領域の初期化を実行する初期化要素と、プログラム内の実行経路を決定する経路要素を含み、１つまたは複数の入力要素、１つまたは複数の論理要素、１つまたは複数の出力要素、１つまたは複数の初期化要素、１つまたは複数の経路要素の実行順序を、論理レコード間の参照の多重度情報と、出力データ項目の値を生成するための生成式と生成式実行条件が示すデータ項目間の参照関係情報に基づいて決定することを特徴とする。
この発明によるプログラム実行順序決定装置は、仕様によって異なる入力要素、論理要素、出力要素、初期化要素、経路要素のループを含む実行順序を決定する装置であって、論理レコード間の参照の多重度情報と、出力データ項目の値を生成するための生成式と生成式実行条件が示すデータ項目間の参照関係に基づいて、ループ範囲を明示した入力要素および出力要素の第１実行順序を決定する手段と、第１実行順序に対して初期化要素の配置を決定して第２実行順序を決定する手段と、第２実行順序に対して論理要素の配置を決定して第３実行順序を決定する手段と、第３実行順序に対して経路要素の配置を決定して第４実行順序を決定する手段を備えることを特徴とする。
この発明は，上述のプログラム実行順序決定装置の制御に適したプログラムおよびそのプログラムを記録した記録媒体（フレキシブル・ディスク，ＣＤ−ＲＯＭなど）も提供する。
この発明によると、任意の入力要素、論理要素または出力要素の処理対象の論理レコードまたはデータ項目の処理（参照元処理）に対して必要な論理レコードまたはデータ項目が、いずれの入力要素、論理要素または出力要素によって処理されるか（参照先処理）が判定される。参照先処理が参照元処理よりも後に実行される、あるいは参照先処理の対象の初期化が参照元処理が完了する前に実行されると、参照元処理による処理結果を得ることができない。参照元処理の結果を得るためには、参照先処理が参照元処理の前に実行され、かつ、参照先処理の対処が参照元処理が完了した後に初期化される必要がある。
これに対して、参照先処理が先に実行され、かつ、参照先処理の対象が参照元処理が完了した後に初期化されると、参照元処理による処理結果を得ることができる。
この発明は，次のように規定することもできる。すなわち，この発明による処理順序決定方法は，一または複数のデータ項目を含む一または複数の参照元論理レコードと，一または複数のデータ項目を含む一または複数の参照先論理レコードのそれぞれとの間のデータ項目参照関係に基づいて，一または複数の参照元論理レコードのそれぞれと一または複数の参照先論理レコードのそれぞれとの組合せが，１：１，１：Ｎ，またはＮ：１のいずれの参照多重度の関係にあるかを表す参照多重度情報の入力を受付け，受付けられた参照多重度情報が１：１であれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは同一のループ単位に属すると判定し，受付けられた参照多重度情報が１：Ｎであれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは異なる２つのループ単位のそれぞれに属し，かつその参照元論理レコードを処理する要素モジュールが外側ループに位置づけられ，その参照先論理レコードを処理するための要素モジュールが内側ループに位置づけられると判定し，受付けられた参照多重度情報がＮ：１であれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは異なる２つのループ単位のそれぞれに属し，かつその参照元論理レコードを処理する要素モジュールが内側ループに位置づけられ，その参照先論理レコードを処理する要素モジュールが外側ループに位置づけられると判定し，上記参照多重度情報に基づく上記判定の結果に基づいて，一または複数の参照元論理レコードを処理する一または複数の要素モジュールおよび一または複数の参照先論理レコードを処理する一または複数の要素モジュールのそれぞれの処理順序を決定することを特徴とする。
この発明による処理順序決定装置は，一または複数のデータ項目を含む一または複数の参照元論理レコードと，一または複数のデータ項目を含む一または複数の参照先論理レコードのそれぞれとの間のデータ項目参照関係に基づいて，一または複数の参照元論理レコードのそれぞれと一または複数の参照先論理レコードのそれぞれとの組合せが，１：１，１：Ｎ，またはＮ：１のいずれの参照多重度の関係にあるかを表す参照多重度情報の入力を受付ける参照多重度情報受付手段，受付けられた参照多重度情報が１：１であれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは同一のループ単位に属すると判定する第１の判定手段，受付けられた参照多重度情報が１：Ｎであれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは異なる２つのループ単位のそれぞれに属し，かつその参照元論理レコードを処理する要素モジュールが外側ループに位置づけられ，その参照先論理レコードを処理するための要素モジュールが内側ループに位置づけられると判定する第２の判定手段，受付けられた参照多重度情報がＮ：１であれば，その参照元論理レコードを処理する要素モジュールと，その参照先論理レコードを処理する要素モジュールは異なる２つのループ単位のそれぞれに属し，かつその参照元論理レコードを処理する要素モジュールが内側ループに位置づけられ，その参照先論理レコードを処理する要素モジュールが外側ループに位置づけられると判定する第３の判定手段，および上記参照多重度情報に基づく上記判定の結果に基づいて，一または複数の参照元論理レコードを処理する一または複数の要素モジュールおよび一または複数の参照先論理レコードを処理する一または複数の要素モジュールのそれぞれの処理順序を決定する決定手段を備えたことを特徴とする。
この発明において，参照多重度情報は，参照関係を持つ２つの論理レコードについて，参照元論理レコードの入力または出力回数（参照元論理レコードが処理されるべき回数）と，参照元論理レコードが参照先論理レコードを参照する回数（参照元論理レコードの処理において，参照先論理レコードが参照される回数）を相対的に表すものである。参照多重度情報は，「：」の左側の数字または符号Ｎ（Ｎは２回以上であることを示す）が参照元論理レコード（参照する側）の相対的処理回数を，「：」の右側の数字または符号Ｎが，参照先論理レコード（参照される側）の相対的処理回数を示す。
参照多重度情報は，ユーザが入力するものであってもよいし，作成されるべき（または作成されている）プログラム中に規定される出力データの生成式または生成条件に基づいて，コンピュータを用いて入力するようにしてもよい。
この発明によると，入力される参照多重度情報に基づいて，入力論理レコードおよび出力論理レコードをそれぞれ処理する要素モジュール（プログラム）の順序を決定することできる。決定される順序は処理結果を得ることができない状況において，要素モジュールが実行されてしまうことが防止される順序である（詳細は，実施例において明らかになるであろう）。効率的な順序によって複数の要素モジュールよる処理が実行されるので，複数の要素モジュールを含む包括的な処理の処理速度を高めることができる。要素モジュールの処理順序をコンピュータに実行させることができるので，人が行う設計作業の人為依存度を軽減することができる。
一実施態様では，参照元論理レコードまたは参照先論理レコードを処理する要素モジュールによって作成されて，データエリアに一時的に記憶されている値が不要になったかどうかを判断し，不要になったと判断されたときに上記データエリアに一時的に記憶されている値をクリアする初期化要素モジュールの処理の順序（タイミング）も決定される。この順序（タイミング）は，ループ処理を終えた（参照が完了した）タイミングとされる。不要なデータがデータエリアからクリアされるので，メモリの効率的な利用を実現することができる。
この発明によるさらなる特徴は，以下に説明において明らかになるであろう。
【図面の簡単な説明】
【０００４】
第１図は，データ項目ごとの宣言を実行する実行制御ロジックと，繰返し法の考え方を概略的に示す。
第２図は，Ｌｙｅｅによるシステムの分割構造を示す。
第３図は，従来のＬｙｅｅにおける単位モジュールの構造を示す。
第４図は，従来のＬｙｅｅにおけるＷ０４パレットの要素モジュールの処理を示すフローチャートである。
第５図は，参照関係を示す有向グラフである。
第６図は，入力論理レコードＬＡ，入力論理レコードＬＢおよび出力論理レコードＬＢの参照関係を示す有向グラフである。
第７図は，入力論理レコードＬＸおよび出力論理レコードＬＤの参照関係を示す有向グラフである。
第８図は，出力論理レコードに着目した時に決定できる要素モジュールの処理順序を示す。
第９図は，順序関係がない場合のループＷおよびＸの処理順序を示す。
第１０図は，入れ子配列を持つループＹおよびＺの処理順序を示す。
第１１図は，画面と処理との関係を示すブロック図である。
第１２図は，処理とＩＯユニットとの関係を示すブロック図である。
第１３図は，３種類の多重度を，有向グラフを用いて示すものである。
第１４図は，参照の多重度が１：１である場合の参照元論理レコードと参照先論理レコードの順序関係を示す。
第１５図は，参照の多重度１：Ｎである場合の参照元論理レコードと参照先論理レコードの順序関係およびループ階層関係を示す。
第１６図は，参照の多重度がＮ：１である場合の参照元論理レコードと参照先論理レコードの順序関係およびループ階層関係を示す。
第１７図は，第１４図，第１５図および第１６図の参照元論理レコードと参照先論理レコードの順序関係およびループ階層関係の統合結果を示す。
第１８図は，第１７図に示す出力論理レコードＸと，入力論理レコードＡ，ＢおよびＣのそれぞれの順序関係およびループ階層関係を，入れ子構造を用いることによって表現したものである。
第１９図は，出力論理レコードＹと入力論理レコードＢの順序関係（相対関係）およびループ階層関係を示す。
第２０図は，第１７図および第１９図の参照元論理レコードと参照先論理レコードの順序関係およびループ階層関係の統合結果を示す。
第２１図は，第２０図に示す出力論理レコードＸおよびＹ，ならびに入力論理レコードＡ，ＢおよびＣの順序関係およびループ階層関係を，入れ子構造を用いることによって表現したものである。
第２２図は，論理レコードの配置位置決定処理を示すフローチャートである。
第２３図は，ＬｙｅｅＡＬＬ３のシステム構成（ハードウエア構成）を示すブロック図である。
第２４図は，ＬｙｅｅＡＬＬ３の処理を示すフローチャートである。
第２５図は，初期化要素配列決定の処理を示すフローチャートである。
第２６図は，論理要素配列決定処理を示すフローチャートである。
第２７図は，経路要素配列決定処理のフローチャートである。
第２８図は，有向グラフを示す。
第２９図は，有向グラフを示す。
第３０図は，有向グラフを示す。
第３１図は，有向グラフを示す。
第３２図は，有向グラフを示す。
第３３図は，有向グラフを示す。
第３４図は，有向グラフを示す。
第３５図は，有向グラフを示す。
第３６図は，有向グラフを示す。
【発明を実施するための最良の形態】
【０００５】
はじめに，Ｌｙｅｅ開発方法（以下，Ｌｙｅｅと呼ぶ）を概略的に説明する。
１．Ｌｙｅｅが情報システム開発にもたらしたこと
Ｌｙｅｅが情報システム開発にもたらしたことは、以下の（１）と（２）にまとめることができる。
（１）Ｌｙｅｅはプログラムを各要素に分解し定型化できることを示した。Ｌｙｅｅは、プログラムを各要素に分解し，部品プログラムとして定型化できることを示した（本願では定型化された要素となる部品プログラムを要素モジュールと呼ぶ）。要素モジュールをテンプレートとして提供し、各要素モジュールのテンプレート（ひな型）に、定型化された必要情報を与えて配置すると、１００％稼動可能で修正不要なプログラム・ソースを作成することができる。要素モジュールの種類は，この実施例では，出力要素モジュール（以下，出力要素という），入力要素モジュール（以下，入力要素という），論理要素モジュール（以下，論理要素という），経路要素モジュール（以下，経路要素という）および初期化要素モジュール（以下，初期化要素という）の５種類ある。経路要素を除く要素モジュール（出力要素，入力要素，論理要素および初期化要素）は，処理するデータ対象が決まっている。
以下に示す表７は，上述の５種類の要素モジュールのそれぞれの処理内容，作成単位，および処理するデータ対象の関係をまとめたものである。
【表７】
2007018295.tif 000010
2007018295.tif 000011
入力データ項目の属性チェック、出力データ項目の編集などの入力や出力に付随する処理は、入力要素または出力要素が処理するように作成してもよいし、独立したモジュールとして作成してもよい。説明を簡単にするために、以下の説明では、入出力に付随する処理は、それぞれ入力要素および出力要素が行う処理とする。
出力論理レコード，入力論理レコードおよび出力データ項目エリアを特定するための定型化された必要情報（データの定義情報），ならびに各要素モジュールに与えるべき定型化された必要情報（実行命令の定義情報）は、以下の表８のとおりである。
【表８】
2007018295.tif 000012
2007018295.tif 000013
（２）情報システム開発を、定型化された必要情報を明確にする作業に変えた。
情報システム開発の最終成果物はプログラムであり、プログラム構造が定型化され、その定型化されたプログラム構造のひな型に与えるべき必要情報も定型化されている。したがって、構造と必要情報が定型化できたのであれば、情報システム開発作業とは、定型化された必要情報を明確にしていく作業であると言える。
２．Ｌｙｅｅの開発作業内容
Ｌｙｅｅの開発と、従来の開発手法の１つであるＤＯＡ（Ｄａｔａ  Ｏｒｉｅｎｔｅｄ  Ａｐｐｒｏａｃｈ）の開発とを、開発工程ごとの作業とその成果物で対比してみると以下の表９のようになる。
【表９】
2007018295.tif 000014
2007018295.tif 000015
表９において対比して示すように，「外部設計」の開発工程の内容はＬｙｅｅもＤＯＡも同じであることがわかる。「内部設計」および「プログラミング」の開発工程において，ＬｙｅｅおよびＤＯＡは相違する。
Ｌｙｅｅでは、開発プログラムの処理内容が画面を介する処理でも、帳票処理でも、あるいは、バッチ処理でも、全てが同じ内部設計作業、同じ定義方法によって行える。明確にする情報は、いずれの場合も、入出力ファイルとその入出力方法、出力データ項目の生成条件および生成式である。コーディングを行うための詳細なプログラム設計やモジュール構造設計は不要である。定型化されたプログラムのひな型に内部設計で定義した情報を与えることによって、プログラム・ソースは自動生成される。
ＤＯＡはデータ指向の設計方法を取る開発手法であるという点は、一見Ｌｙｅｅと似ているが、「データ指向」のあり方自体が異なる。すなわち、Ｌｙｅｅのデータ指向は、要件に依存しない「入力」「出力」「生成」あるいは「クリア」という、コンピュータの処理という視点からデータやデータに対する処理を分類する。しかし、ＤＯＡは他の従来法と同じく、仕様に依存した人間からみたデータの意味によってデータを分類する。したがって、ＤＯＡの開発では、内部設計以降はデータ指向ではなく、構造化手法のプログラミングとなり，仕様に依存した（すなわち開発対象のプログラムの機能に依存した）設計方法になる。業務ロジック仕様以外に制御ロジックとしてモジュール構造設計書、プログラム論理構造設計書を作り、構造設計書に従ってプログラミングする必要がある。仕様に依存するかぎり、普遍的に通用するプログラム構造や設計方法を見出すことは不可能である。
他方、Ｌｙｅｅによる開発では，外部設計から内部設計に至るまで、仕様に依存しないデータ指向設計になっている。
３．Ｌｙｅｅ開発方法における前提知識
ここで、本願の説明で用いる言葉や概念を明らかにしておく。
（１）論理レコード
論理レコードとは、同一条件で入力される入力データ項目の集合、あるいは同一条件で出力される出力データ項目の集合である。同一条件で、とは、同一の入力元媒体から同じタイミングに入力されること、あるいは、同一の出力先媒体へ同じタイミングに出力されること、である。Ｌｙｅｅでは、論理レコードの入力は入力要素、出力は出力要素と呼ぶモジュールが行う。１つの入力要素または出力要素が処理する論理レコードは１つである。
（２）参照関係
参照とは、ある処理を行うために何かのデータ項目の値を用いるとき、参照する、という。１つの例は、出力データ項目の値生成のための参照である。たとえば、出力データ項目Ａ、入力データ項目Ｂ、出力データ項目Ｃがあったとする。Ａの値を生成するための生成式がＢ＋Ｃであったとする。Ａの値を生成する論理要素Ａは、Ｂの値とＣの値を参照して演算を行い、その演算結果をＡのデータエリアに記録する。このことを、「データ項目Ａが，データ項目ＢとＣを参照している」と表現する。そして、ＡとＢ、ＡとＣには「参照関係がある」と言い、Ａを「参照元」、ＢおよびＣを「参照先」と呼ぶ。
第５図は，参照関係を有向グラフ（ｄｉｒｅｃｔｅｄ  ｇｒａｐｈ）を用いて示した者である。第５図において，有向グラフのノード（ｎｏｄｅ）（円）はデータ項目を表し，有向辺（矢印、ａｒｒｏｗ）はデータ項目間の参照関係を表している。矢印の起点が参照元、終点が参照先である。生成式実行条件の判定実行についても、同様に参照が行われる。
データ項目に参照関係がある場合、参照関係にあるデータ項目が属する論理レコード間にも参照関係があると言える。すなわち，データ項目Ａが属する出力論理レコードをＬＡ、データ項目Ｂが属する入力論理レコードをＬＢ、データ項目Ｃが属する出力論理レコードをＬＣとすると、ＬＡはＬＢとＬＣを参照している、と言える。第６図は，入力論理レコードＬＡ，入力論理レコードＬＢおよび出力論理レコードＬＢの参照関係を有向グラフで示したものである。
もう１つの参照の例は、入力要素がデータベースからデータ入力を行う（データベースからデータを読出してメモリに出力する）場合に一般に必要な「検索キー」のデータを得るための参照である。第７図を参照して，たとえば、入力論理レコードＬＸを処理する入力要素ＬＸが，出力データ項目Ｄを検索キーとして，入力論理レコードＬＸを入力する（データベースから読出す）のであれば、入力要素ＬＸはＤの値を参照し、Ｄの値を検索キーとして入力論理レコードＬＸを入力する（データベースから読出す）。この場合、入力論理レコードＬＸはデータ項目Ｄを参照している、とも言える。なぜなら、入力論理レコードＬＸが成立する（入力完了となる）（データベースからの読出しが完了する）ためには、Ｄの値が必要だからである。さらに、上述したように、データ項目Ｄが出力論理レコードＬＤに属しているとすると、入力論理レコードＬＸは出力論理レコードＬＤを参照している、と表現することができる。
（３）処理順序
プログラムが行っている処理は、入力データの入力（メモリ上のデータエリアへの入力など）と、入力データに基づく出力データの生成と、出力データの出力（画面表示など）である。要件には、どのようなデータ項目がどこから、入力されるか、どのようなデータ項目がどこへ出力されるか、出力されるデータ項目はどのように生成されるか（生成式と生成式実行条件）が定義されている。入力、生成、出力が要件を満たすように実行されるためには、この３つの処理の他に、データエリアの初期化処理と、プログラム内の経路の分岐点で経路判定を行う処理の２つが必要である。
Ｌｙｅｅでは、プログラムは、入力、生成、出力、初期化、プログラム内の処理の経路の判定という５種類の処理によって構成できると考え、その種類別に定型構造のモジュールのひな型を用意し、これらのモジュールの組み合わせでプログラムを作成する、という方法をとっている。それぞれの処理を担当するモジュールの名称が、上述した入力要素、論理要素、出力要素、初期化要素および経路要素である。
これらの要素モジュールを作成する単位は決まっており、たとえば、本願のＬｙｅｅでは、入力要素は入力論理レコード１つに対して１つ作成する。出力要素は出力論理レコード１つに対して１つ、論理要素は出力データ項目の生成式１つに対して１つ、初期化要素は論理レコード１つに対して１つ、経路要素は経路を選択する条件ごとに１つ作成する。要件に定義されたプログラムに必要な要素モジュールの作成は、ＬｙｅｅＡＬＬに要件を入力すれば、ＬｙｅｅＡＬＬが自動的に行う。
プログラムの処理順序（処理の実行順序）と言うとき、Ｌｙｅｅにおいては、それは上述の要素モジュールのあるべき実行順序、すなわち要素モジュールのあるべき配置順序のことをさす。「あるべき」とは、コンピュータに，要件に定義された入力を実行させ、要件に定義された出力を実行させるようなプログラムの処理順序として「あるべき」、ということである。要件から必然的に導き出せる処理順序に要素モジュールを配置する本願のＬｙｅｅでは、その処理順序は最適な処理順序となる。最適とは、要件によるループ以外の繰返しがなく、むだな冗長性がなく、プログラムの処理が最短で実行されるような処理順序である。
処理順序の中には要件に依存しない順序と、要件に依存する順序がある。任意の出力論理レコードＬＸに着目した時、その出力論理レコードＬＸを出力する出力要素Ｘが実行される前には、出力論理レコードＬＸに属する出力データ項目の値を生成する論理要素全てが実行されていなければならない。それらの論理要素群Ｙが実行される前には、論理要素群Ｙが参照する入力論理レコードＬＺ（複数の場合もある）を入力する入力要素Ｚ（入力論理レコードが複数であれば複数）が入力されていなければならない。入力論理レコードが複数ある場合、入力論理レコード間に参照関係があれば、参照先を入力する入力要素を前に配置する。参照関係がなければ、どのような順序でもよい。出力論理レコードＬＸに着目すると、この出力論理レコードＬＸに直接または間接的にかかりを持つ入力要素Ｚ、論理要素群Ｙの順序は自明的に決まる。論理要素群Ｙ内の順序は、各論理要素が実行する生成式実行条件と生成式の参照関係に自動的に決定することができる。これらの一連の入力要素Ｚ、論理要素群Ｙ、出力要素Ｘにかかわる論理レコードの初期化要素は、ＺＹＸの後に配置されるべきであることは自明であるが、他の論理レコードが論理レコードＬＸやＬＺを参照している場合もあるので、出力要素Ｘの直後におくとは決定できない。初期化要素の配置順序については後述する。経路要素が経路を判定すべき場合は、プログラムの全ての処理を終了した後に別のプログラムに処理を移す場合か、プログラムが複数のＩＯユニット（後述する）で構成されている場合に、１つのＩＯユニットから別のＩＯユニットに処理が移る場合である。従って、経路要素を配置するべき位置は、プログラムの最後かＩＯユニットの最後と決定できる。第８図は，出力論理レコードに着目した時に決定できる要素モジュールの処理順序を示す。
＜Ｌｙｅｅ開発方法のプログラム構造設計の考え方＞
Ｌｙｅｅは、要件を決定すれば、その要件情報から自動的にプログラムを生成できる方法を追及してきたわけであるが、その実現手段として、仕様に依存しないプログラムの定型構造と、要件に依存しない要件情報の形式化方法を明らかにした。要件情報の形式化のうち、プログラム設計に必要な情報の形式化方法は、最も新しいＬｙｅｅの改良技術の１つである。プログラム設計に必要な主要情報は以下にまとめることができる。
（１）プログラムを作成する単位が何か
（２）プログラムを構成する単位が何か
（３）プログラムを構成する単位の構造
（１）のプログラム作成の単位については、前述のようにイベント単位処理ごとに作成することを明らかにした。
（２）については、プログラムを構成する最小の単位が要素モジュールで、それらが一定のルールにしたがって，所定の単位（以降、ループ単位と呼ぶ）を構成することを明らかにした。
（３）については、前述のように、要素モジュールの種類ごとの定型構造として明らかにした。
以下、ループ単位について説明する。
１．プログラムの処理の流れの構造
プログラムを，処理の流れの観点から分類すれば，（１）逐次処理，（２）ループ処理および（３）分岐処理（ＩＦ文）の３つに分類することができる。
（１）逐次処理
逐次処理とはある一連の処理を１つ１つ順次処理することである。
（２）ループ処理
ループ処理とは、ある一連の逐次処理を一定の条件を満たすまで複数回（ｎ回とも記す）繰り返す処理である。たとえば，ある入力論理レコードまたは出力論理レコードを，ｎ回入力または出力（必然的に生成もｎ回）する場合の処理である。
たとえば、カテゴリＡに属する複数種類の商品について、２００６年７月１日の購入履歴を表示する、という処理を考える。この場合には，検索条件として「カテゴリＡ」および「２００６／７／１」が入力される。
プログラムは，コンピュータに，次のような処理を実行させることになる。
ループ処理（ｉ）
まず、「カテゴリＡ」をキーにして，たとえば，商品マスタからカテゴリＡに属する一または複数の商品（商品コード）を検索する処理が実行される。「商品マスタからのカテゴリＡに属する商品の１件分の商品コードの読出し」と，「読み出した商品コードのメモリへ一時記憶」という一連の処理（ループ処理（ｉ））が実行され、１件目のカテゴリＡに属する商品コードが得られる。
ループ処理（ｉｉ）
次に、検索された「商品コード」および「２００６／７／１」をキーにして，その両方のキーを有するデータ（レコード）を検索する処理が実行される。たとえば，「購入履歴テーブルからの検索された「商品コード」および「２００６／７／１」の両方を有するデータの読出し」と，「読出したデータのメモリへの一次記憶」という一連の処理（ループ処理（ｉｉ））が実行される。購入履歴テーブルに，検索された「商品コード」および「２００６／７／１」を持つデータが１０件あれば、ループ処理（ｉｉ）は１０回繰り返される。
ループ処理（ｉｉ）が終了すると，再びループ処理（ｉ）に戻る。ループ処理（ｉ）が終了するまで（該当データがなくなるまで）、ループ処理（ｉ）およびループ処理（ｉｉ）の処理が繰り返される。
ループ処理において重要なのは、１つのループする単位の中の処理は、同一の条件のループ条件（ループを終了する条件と言い換えてもよい）を持っているということである。
（３）分岐処理
（３）分岐処理
分岐処理は、ある一連の処理が複数存在し，その複数の一連の処理の中から、分岐の条件にしたがって，いずれか一の一連の処理を選択する処理である。分岐処理において重要なのは、どのようなケースであっても，いずれか一の一連の処理が特定されるように，分岐条件を設定することである。すなわち、分岐条件の総和が全体を構成し、かつ、分岐条件に重なりがないことである。
分岐処理は、その分岐条件が設定される目的によって、以下のように分類できる。
（ａ）イベントによる分岐
イベントごとにプログラムを作らない場合（たとえば画面単位にプログラムを作成するような場合）、プログラム内にイベントが分岐条件となる分岐が存在する。たとえば、「ボタンＡが押される」、「コンボボックスＢがクリックされる」などのイベントが条件となる。この実施例におけるＬｙｅｅでは、イベントごとにプログラムを作成するので、このような分岐はない。イベントによる分岐がないので、１つのプログラムの構造が単純になり保守が容易になる。
（ｂ）出力データ項目の生成式の実行条件による分岐
１つの出力データ項目に複数の生成式が定義される場合がある。たとえば、値引き率が顧客の購入金額によって変わるような業務要件の場合である。このような場合、以下の表１０に示すように、「値引き率」という出力データ項目の生成式ごとに，実行条件が定義される。
【表１０】
2007018295.tif 000016
Ｌｙｅｅ開発方法では、生成式実行条件は、定型構造の要素モジュール（論理要素）が実行する処理対象であり、プログラムの構造設計に必要なプログラムの経路に関する情報ではない。生成式実行条件判定と生成式実行を１つの要素モジュールとして作るにしても，別の要素モジュールにするにしても，生成式実行条件判定および生成式を実行する論理要素の順序は、それぞれの論理要素が実行する条件式および生成式に含まれるデータ項目の参照関係から自動的に導き出すことができる。
（ｃ）その他の分岐条件
その他の分岐条件の１つは、ループ処理の終了条件である。たとえば、上述の例で言えば、「Ａに該当する商品がなくなった（ｅｎｄ  ｏｆ  ｆｉｌｅ）」がループ処理の終了条件である。終了条件として位置づけられる分岐条件では，次の処理に進むのか、同じ処理を再度実行するのかが判定される。この実施例では，ループ終了条件は、出力の条件の１つとして、出力要素の中に取り込まれている。
その他の分岐条件の他の１つは、他の処理の固まり（プログラムや、後述するＩＯユニット）へ処理を移す条件である。この実施例（本願におけるＬｙｅｅ）では、他の処理の固まりへ処理を移す条件だけが、プログラム内の処理経路を決定する条件になっている。
２．ループ単位とループ単位間の順序関係
上記のプログラム構造の考察からわかることは、同一のループの条件を持つ一連の逐次処理の固まりをとらえ（単なる逐次処理は、ループ条件が「１巡したら終了」だと考えることができる）、その処理の固まり（「ループ単位」と呼ぶ）の順序関係をとらえれば、プログラムの構造を決定することができる、ということである。順序関係は、順序関係がない（どちらが先でもいい）か、順序関係がある、のどちらかである。この観点からプログラム構造を設計するのが、改良されたＬｙｅｅ開発方法における処理経路図の作成方法であった。従来のＬｙｅｅでは、設計者がループ単位をとらえて、複数存在するループ単位間の順序関係を判断して、処理経路図に表していた。以下に説明するように，本願の発明者は，設計者が行っていた複数存在するループ単位間の順序関係を判断を，コンピュータに実行させることに成功し，これにより人が行う設計作業の人為依存度を軽減し，かつプログラムの処理速度およびサイズの課題を軽減することに成功した。詳細は後述するが，このループ単位間の順序関係を判断処理では，与えられた要件情報が解析され、あるべきループ単位と、ループ単位間のあるべき順序関係を自動的に決定される。ループ単位およびその順序関係の解析方法は後述することとし、ここでは、あるべきループ単位の順序関係を決定するための基本的な考え方を述べる。
（１）逐次配列
２つのループ単位に参照関係がない場合，その２つのループ単位の相互に順序関係がないので、２つのループ単位の処理順序は逐次配列になる。順序関係が無いのであるから、２通りの逐次配列が考えられ、どちらであっても処理の結果は同じである。
第９図は，２つのループＷおよびＸに順序関係がない場合の，ループＷおよびＸの処理順序（２つの処理順序）を示している。第９図の左に示す逐次配列では、ループＷのループ終了条件が満たされたときに、ループＸの処理に移り、ループＸのループ終了条件が満たされたときにループＸの処理が終了する。第９図の右側に示す逐次配列では、ループＸの処理が先に実行され，次にループＷの処理が実行される。
（２）入れ子配列
２つのループ単位に参照関係がある場合，その２つのループ単位には順序関係があることになる。この場合，２つのループ単位は，第１０図に示すような入れ子配列になる。第１０図において，ループＹとＺは、ループＹの処理の途中でループＺに処理が移り、ループＺのループ終了条件が満たされた時に処理がループＹに戻る。ループＹの残りの処理が完了してループＹの処理の１巡が終了すると、ループＹのループ終了条件が判断され，ループＹのループ終了条件が満たされていなければ、ループＹの最初の処理にもどる。このような処理が繰り返され、ループＹのループ終了条件が満たされた時に、ループＹが終了する。
ループ単位が入れ子配列のとき、配列状態を示す表現として、「上位階層（あるいは外側のループ）」および「下位階層（あるいは内側のループ）」という言葉を用いる。第１０図は，ループＹおよびループＺのの２階層の例であり，ループＹが上位階層，ループＺが下位階層と位置づけられる。なお，入れ子配置の階層は，２階層に限られず，論理上の上限はない。
２階層となる場合を，論理レコードに着目して考えると，次の２通りの場合である。その一は、内側のループ単位内で入力または出力される論理レコードが、外側のループ単位内で入力または出力される論理レコードを参照して処理される場合である。他の一は、外側のループ単位内で入力または出力される論理レコードが、内側のループ単位内で入力または出力される論理レコードを参照して処理される場合である。外側のループから内側のループに処理が移るタイミングは、内側ループが外側ループを参照しているのであれば、外側ループで参照先データが参照可能状態になった以降であればよい。外側ループが内側ループを参照しているのであれば、外側ループの参照元データの処理開始の直前までであればよい。
上述のＬｙｅｅ開発方法を基礎にした、ＬｙｅｅＡＬＬ３によるソフトウェア開発について詳しく述べる。
＜ＬｙｅｅＡＬＬ３の特徴＞
上述のＬｙｅｅ開発方法を基本にした、本発明を用いたＬｙｅｅＡＬＬ３によるソフトウェア開発の特徴をまとめると以下のとおりである。
１．人間によるプログラム設計作業の簡易化
ＬｙｅｅＡＬＬ３においても、改良されたＬｙｅｅと同じく、プログラムの作成単位はイベント毎の一連の処理の単位である。イベント毎の処理とは、例えば、オンラインプログラムの場合でいえば、画面のボタンをクリックしたときに実施し画面に処理結果を表示した時に終わるまでの一連の処理のことである。以下、これを「処理」または「イベント単位処理」と呼ぶことにする。
第１１図は、本願における「処理」（または「イベント単位処理」とも呼ぶ）を概念的に示すブロック図を，第１２図は本願発明における「ＩＯユニット」を概念的に示すブロック図をそれぞれ示している。
イベント毎の処理内容の基本は、ファイル（画面、データベース）のデータを（メモリに）入力し、出力すべきデータ項目に値をセットし、セットされた値をファイル（画面、帳票、データベース）に出力することと捉えることができる。
ファイル中のデータを入力し（読出して）、データを出力するまでの処理を「同期範囲」と定義し、この同期範囲をプログラムとして具体化したものをＩＯユニットと定義する。例えば、１つの処理内容が、ＡとＢという２個のファイルのデータを入力し（読出し）、Ｃファイルに出力（Ｃファイルに記録）した後、ＤファイルのデータとＣファイルのデータを入力し（読出し），Ｅファイルを出力する（Ｅファイルに記録する）とする。このとき、「Ａ、Ｂの２個のファイルを入力し、Ｃファイルを出力する」処理が１個目のＩＯユニットとなり、「ＤファイルとＣファイルからＥファイルを出力する」処理が２個目のＩＯユニットになる（第１２図を参照）。
ＩＯユニットは、従来の改良されたＬｙｅｅにおける処理経路図１つにあたる。プログラムは１つのＩＯユニット、すなわち１つの同期範囲で構成される場合が多い。１イベントの処理が別の画面に表示されるような処理の場合は、２つのＩＯユニットで構成させた方がよい。従来のＬｙｅｅの処理経路図でも同様で、このような場合は複数の処理経路図に分けて実装する。
ＩＯユニット内のプログラム・ソースはデータ定義部分と実行命令部分に分かれ、実行命令部分は、単に要素モジュールを一定の法則に従って並べた形になっている（実際には、要素モジュールをコールする）。要素モジュールの配置法則には、仕様に依存するようなパターンはない。
データ定義部分とそれらを処理の対象とする主要要素モジュールの関係を，表１１に示す。論理レコードごと、データ項目ごとのこれらの要素モジュールが実行順に並んだものがＬｙｅｅＡＬＬ３により生成されるプログラムである。
【表１１】
2007018295.tif 000017
2007018295.tif 000018
２．処理の最適順序の自動解析
定型化した情報に「参照の多重度」という情報を加えると、処理順序を考慮したプログラム・ソースを自動的に作成することができる。処理順序考慮型のプログラム・ソースを作成するために、ＩＯユニット内の処理の最適順序を自動解析する手順には、次の４つのステップがある。
［１］「参照の多重度」を用いて出力論理レコード（出力要素）、入力論理レコード（入力要素）の相対位置と処理ループを明確にする。
［２］初期化処理の位置を明確にする。
［３］論理要素の生成条件および生成式に記述されているデータ項目間の参照関係を用いて論理要素の処理順序を明確にする。
［４］上記１〜３の順序情報を統合して、ＩＯユニット全体の処理順序を確定する。
１つのプログラム内のＩＯユニットの順序関係は人間が指定するので、上記の４つのステップを踏むことで、と処理順序考慮型のプログラム・ソースが完成する。以下，上記の４つのステップのそれぞれを説明する。
（１）「参照の多重度」を用いて出力論理レコード（出力要素）、入力論理レコード（入力要素）の相対位置と所属するループ単位の階層の相対関係を明確にする。
前述したように、要素モジュール間の順序関係は、その要素モジュールの処理対象である論理レコードあるいはデータ項目の参照関係から導き出すことができる。出力要素および入力要素の順序関係を導き出すために、参照の多重度から、まず論理レコード間の参照関係を明らかにし、その参照関係から、それらの入力または出力を行う入力要素または出力要素の相対的順序関係と所属するループ単位の階層の相対関係を導き出すこととする。
「参照の多重度」とは、参照関係を持つ２つの論理レコードがあったとき、参照元の論理レコードの入力または出力回数（入力または出力レコード件数）に対して、参照元が参照先を参照する回数（参照先論理レコードの入力または出力回数）の相対比率を表したものである。多重度（ｍｕｌｔｉｐｌｉｃｉｔｙ）の度合いを表す値は１かＮ（多重（ｍｕｌｔｉｐｌｅ）を示す）である。入力または出力回数が１回は「１」、回数が２回以上の場合は「Ｎ」で表す。参照元（参照する側）の多重度を左に、参照先（参照される側）の多重度を右におき、「１：Ｎ」のように表す。参照の多重度は絶対値ではなく、参照元を基準にした時の、参照元と参照先の多重度の相対的値、比率である。たとえば、Ａ：Ｂ＝１：Ｎであって、ＢがＣを参照している場合、その多重度がＢ：Ｃ＝１：Ｎとなりえる。
参照の多重度は３通りある。「参照関係なし」も含めれば、「参照の多重度」は４通りあることになる。この実施例では，以降、「参照の多重度」には「参照関係なし」も含めることとする。以下に、参照関係がある３種類の「参照の多重度」について、例を上げて説明する。
＜例１＞
出力論理レコードＸと入力論理レコードＡがある。出力論理レコードＸが入力論理レコードＡを参照している場合、出力論理レコードＸと入力論理レコードＡの多重度情報を，３種類のケースについて表すと、以下の表１２のようになる。
【表１２】
2007018295.tif 000019
第１３図は，表１２に示す３通りの多重度を、有向グラフ（ｄｉｒｅｃｔｅｄ  ｇｒａｐｈ）を用いて表したものである。ここでは、有向グラフの点（ノード、ｎｏｄｅ）（円）は論理レコードを、有向辺（矢印、ａｒｒｏｗ）は論理レコード間の参照関係を表わす。
矢印の起点は参照元論理レコード側におかれ、終点は参照先論理レコード側に置かれている。２つの論理レコードの参照関係は、その２つの論理レコードの入力または出力が行われるべき相対的順序関係を示す。すなわち，参照先論理レコードは，参照元論理レコードより先に入力（または出力）されなければならない。したがって，２つの論理レコードの参照関係がわかれば、それぞれの論理レコードの入力（または出力）処理を担当する入力要素（または出力要素）の相対的位置関係を決定することができる。
複数の論理レコードの相対的順序関係を，図面において，ノード（円）の上下位置で表すことにする。表１２の例を図示する場合，第１３図のように，参照先論理レコードＡのノードは、参照元論理レコードＸのノードより上側に描かれる。
参照の多重度が示すもう１つの順序関係は、２つの論理レコードが入力または出力処理されるのが、同じループ単位の中なのか、異なるループ単位の中なのか、ということと、異なるループ単位である場合のループ単位の階層位置関係である。
第１４図は，参照の多重度が１：１である場合の参照元論理レコードと参照先論理レコードの順序関係を示している。参照の多重度が１：１であるとき，参照元論理レコードＸと参照先論理レコードＡは同じループ単位に属する。参照多重度が１：１であるということは，相対的なループ度合いが両方とも同じであることを示しているからである。
第１５図は，参照の多重度１：Ｎである場合の参照元論理レコードと参照先論理レコードの順序関係を示す。参照の多重度が１：Ｎである場合，参照元論理レコードＸと参照先論理レコードＢが異なるループ単位に属し，かつ、参照先論理レコードＢは参照元論理レコードＸの下位の（内側の）ループ単位に所属する。
第１６図は，参照の多重度がＮ：１である場合の参照元論理レコードと参照先論理レコードの順序関係を示す。参照の多重度がＮ：１である場合，参照元論理レコードＸと参照先論理レコードＣは異なるループ単位に属し，参照先論理レコードＣは参照元論理レコードＸの上位の（外側の）ループ単位に属する。
参照の多重度から得られるループ単位の階層構造に関する情報をまとめると、次の表１３のようになる。
【表１３】
2007018295.tif 000020
上述のように、「参照の多重度」を用いると次の２つを明確にする事ができる。
（ｉ）２つの出力要素または入力要素の相対位置。
（ｉｉ）２つの出力要素または入力要素の所属するループ単位の階層の相対関係。
＜例２＞
次に，複数の出力論理レコードおよび複数の入力論理レコード間における論理レコードの順序関係（階層関係）を説明する。
出力論理レコードＸ（出力要素Ｘ），出力論理レコードＹ（出力要素Ｙ）、入力論理レコードＡ（入力要素Ａ），入力論理レコードＢ（入力要素Ｂ）、および入力論理レコードＣ（入力要素Ｃ）があるとする。このとき、出力論理レコードが参照する論理レコードに対する参照の多重度は、以下の表１４のようになっているとする。
【表１４】
2007018295.tif 000021
多重度情報（参照の多重度）に基づけば，２つの出力要素または入力要素のペアの相対位置を明らかにすることができる。
同一のＩＯユニット内に所属する参照関係にある論理レコードのペアの全ての参照関係が明らかになると、ＩＯユニット間の全ての入力論理レコードと出力論理レコード間の相対的順序と所属するループ単位と、ループ単位の階層構造が決定する。その手順は次のとおりである。
［１］参照関係の２つの論理レコードペアの多重度情報から、それぞれの出力要素または入力要素の相対位置と，所属するループ単位の階層の相対関係を明らかにする。これを同一ＩＯユニット内の全ての論理レコードペアについて行う。
［２］上記［１］の個々の結果を統合する。
上述の例２についてその手順を具体的に説明する。まず、多重度情報（参照の多重度）に基づいて，出力論理レコードＸと，入力論理レコーＡ，Ｂ，Ｃのそれぞれの順序関係（相対位置）と階層関係（処理ループの階層関係）を明らかにする。
表１４にしたがうと，出力論理レコードＸおよび入力論理レコードＡの順序関係およびループ階層関係は第１４図に示すものと，出力論理レコードＸおよび入力論理レコードＢの順序関係およびループ階層関係は第１５図に示すものと，出力論理レコードＸおよび入力論理レコードＣの順序関係およびループ階層関係は第１６図に示すものと，それぞれ同じになる。
第１７図は，第１４図，第１５図および第１６図に図示されている出力論理レコードＸと，入力論理レコードＡ，ＢおよびＣのそれぞれの順序関係およびループ階層関係を総合したもの（一つにまとめたもの）を示している。
第１８図は，第１７図に示す出力論理レコードＸと，入力論理レコードＡ，ＢおよびＣのそれぞれの順序関係およびループ階層関係を，入れ子構造を用いることによって表現したものである。ループ単位の階層構造と，出力論理レコードＸ、入力論理レコードＡ，Ｂ，Ｃの相対順序と所属するループ単位が明らかになっている。
表１４を参照して，出力論理レコードＹと入力論理レコードＢは，出力論理レコードＹが参照元，入力論理レコードＢが参照先であって，参照の多重度は１：１である。出力論理レコードＹと入力論理レコードＢの順序関係（相対関係）およびループ階層関係は，第１９図に示す関係である。
第２０図は，第１７図に図示されている出力論理レコードＸと，入力論理レコードＡ，ＢおよびＣのそれぞれの順序関係およびループ階層構造を総合結果（一つにまとめたもの）と，第１９図に図示されている出力論理レコードＹと入力論理レコードＢの順序関係およびループ階層構造を総合したものである。
第２１図は，第２０図に示す出力論理レコードＸおよびＹ，ならびに入力論理レコードＡ，ＢおよびＣの順序関係およびループ階層関係を，入れ子構造を用いることによって表現したものである。出力論理レコードＸおよびＹ，ならびに入力論理レコードＡ、ＢおよびＣの処理順序とループ階層構造が明らかになっている。
ここで、第１７図に示すような一次情報（入力要素および出力要素の順序関係と、その所属ループ階層と、ループ階層間の関係の情報）に基づいて、第１８図に示すような２次情報（ループ範囲の入れ子構造が示された、入力要素および出力要素の縦一列配置順序の情報）に変換する手順の一例について説明しておく。第２０図に示す一次情報に基づいて、第２１図に示す二次情報に変換する手順も、同様の手順を用いている。以下の説明では、入力論理レコードまたは出力論理レコードを「ノード」、入力論理レコードおよび出力論理レコードの集合を「ノードグループ」と表現する。
（ｉ）参照関係に途切れがないノードのグループを１つ選択する。
（ｉｉ）選択したノードグループについて、ループ単位の一番外側の階層内のノードの中で、階層が同じか異なるかにかかわらず他のノードを参照している参照元ノードの配列位置を、当該ループ単位内の後ろ側に決定する。これらのノードには参照関係がないので、配列順序は任意のルールを決めて、ルールに従って配列位置を決定する。ここまでの配列を配列１とする。次に、階層が同じか異なるかにかかわらず他のノードから参照のみされている参照先ノードの配列位置を、配列１の前に決定する。これらのノードにも参照関係がないので、配列順序は任意のルールを決めてルールに従って決定する。ここで決定した配列を配列２とする。これで、一番外側のループ単位の中のノードの配列が決定した。
（ｉｉｉ）一番外側のループ単位内の配列１と配列２の間に、下位の階層のループ単位全体の配置位置を決定する。
（ｉｖ）次に、入れ子にした下位階層のループ単位内のノードについても、上記（ｉｉ）に記載した手順でノードの配置位置を決定する。ノードの配置が完了したら、上記（ｉｉｉ）と同じ手順でさらに下位の階層のループ単位全体を入れ子にする配置位置を決定する。
（ｖ）上記の（ｉｉ）から（ｉｖ）の手順を、ループ単位の全ての入れ子位置が決定し、ループ単位内のノードの順序が決定するまで繰り返す。
（ｖｉ）１つのノードグループについて（ｉｉ）から（ｖ）の処理が完了したら、未処理のノードグループがなくなるまで、同様の処理を繰り返す。
（ｖｉｉ）参照関係に途切れがないノードグループの入れ子階層構造とノードの配置位置が決定したら、ノードグループを任意の配列ルールに従って一列に配列する順序を決定する。ノードグループ間には参照関係がないので、順序は任意でよいからである。
以上で、全体のループ構造と出力論理レコードと入力論理レコードの処理順序が決定する。上記の処理ステップを処理フローに記述すると、第２２図のようになる。上記の方法以外の別の処理順序の決定方法についてもあるが，これについては後述する。
（２）初期化処理の位置を決定する。
データエリアの値が不要になったとき，データエリアの初期化（クリア）が行われる。これは、主にはループ処理の場合に、プログラムとデータエリアを再利用するためである。データエリアの値が不要になったときとは、すなわち、そのデータエリアが他の処理に参照される必要がなくなった時点である。ＬｙｅｅＡＬＬ３では、論理レコード単位に初期化をおこない、その初期化条件は論理レコードの「参照完了の条件」で判断する。論理要素は、該当の出力データ項目エリアに値をセットする為に，生成条件および生成式で他のデータ項目の値を参照している。すなわち，出力データ項目の集まりである出力論理レコードが他の論理レコードの値を参照していると、考える事ができる。
任意の出力論理レコードが、すべての値を参照し終える条件を「（論理）参照完了の条件」と呼ぶ。たとえば、以下の例３を用いて説明する。
＜例３＞
ＡファイルとＢファイルを商品コードの昇順にマージ（ソート）し、Ｃファイルを作成するとする。以下，Ａファイルの商品コードをＡ．ｋｅｙで表し、Ｂファイルの商品コードをＢ．ｋｅｙで表す。
Ｃファイルの出力論理レコードのデータ項目には、Ａ．ｋｅｙ＞Ｂ．Ｋｅｙのとき、Ｂファイルの入力論理レコードの値がセットされ、（Ａ．ｋｅｙ＜Ｂ．Ｋｅｙ）または（Ａ．ｋｅｙ＝Ｂ．Ｋｅｙ）のとき、Ａファイルの入力論理レコードの値がセットされるとする。
このような場合，Ｃファイルの出力論理レコードの「論理レコードの参照完了の条件」は，次の表１５のようになる。
【表１５】
2007018295.tif 000022
Ａファイルの入力論理レコードの値をクリアする条件は、Ａファイルの入力論理レコードを参照するＣファイルの出力論理レコードが参照を完了する条件（すなわちＡ．ｋｅｙ＜Ｂ．ＫｅｙまたはＡ．ｋｅｙ＝Ｂ．Ｋｅｙ）に等しい。
Ｂファイルの入力論理レコードの値をクリアする条件は、Ｂファイルの入力論理レコードを参照するＣファイルの出力論理レコードが参照を完了する条件（すなわちＡ．ｋｅｙ＞Ｂ．Ｋｅｙ）に等しい。
参照される論理レコードの値をクリアする条件は、該当の論理レコードを参照する出力論理レコードの「参照完了の条件」を集めたものになる。
＜例４＞
たとえば，出力論理レコードＸおよびＹ、入力論理レコードＡ，ＢおよびＣがあるとする。出力論理レコードが参照する論理レコードに対する「参照完了の条件」を「Ｘ→Ａ」のようにあらわすと、出力論理レコードの「参照完了の条件」は，一例として，以下の表１６のように示される。
【表１６】
2007018295.tif 000023
表１６に示すような参照完了の条件がある場合，参照される論理レコードの値を初期化してよい条件は，以下の表１７のようになる。
【表１７】
2007018295.tif 000024
論理レコードＹは出力論理レコードであるので、「Ｙ自身の出力後」も初期化条件である。
以上のようにして確定される、論理レコード単位の初期化条件から、初期化要素と，入力要素および出力要素の相対位置を確定することができる。
（３）出力データ項目の生成条件および生成式に記述されているデータ項目間の参照関係を用いて論理要素の処理順序を明確にする。
＜例５＞
たとえば，出力データ項目ｆの要件として記述されている生成条件および生成式が次のようになっていたとする。
生成条件    ｊ＞ｋ
生成式      ｆ＝ｇ＋ｈ
このとき、出力データ項目ｆが参照しているデータ項目ｇ、ｈ、ｊおよびｋのそれぞれの論理要素は，出力データ項目ｆの論理要素より先に実行するように順序付ける。このように、データ項目間の参照関係によって、全ての論理要素の実行順序を明らかにすることができる。論理要素の実行順序を確定する方法は、国際公開第２００４／６８３４２号パンフレットおよび国際公開第２００４／８１７８８号パンフレットに詳しく述べられている。
（４）上記（１）〜（３）の順序情報を統合して、ＩＯユニット全体の処理順序を確定する。
上述の（１）から、ループ単位の階層構造が決定し、出力論理レコード（出力要素）と入力論理レコード（入力要素）の相対順序と所属するループ単位階層が決定する。（２）からは、出力要素および入力要素に対する初期化要素の位置が決定する。（３）からは、同一論理体に属す出力データ項目の値を生成する論理要素群の最適処理順序が決定する。従って、次の手順で前記情報を統合すれば、ＩＯユニット内の全ての要素モジュールの順序が決定する。
（１）で決定した出力要素と入力要素が配置されたループ単位階層構造に対して、（２）の結果を用いて初期化要素を配置し、（３）の結果を用いて最適処理順序化された論理要素群を、それらが生成した出力論理データ群（出力論理レコード）を出力する出力要素の直前に配置し、（１）（２）（３）で配置した要素モジュールの一番最後の要素モジュールの後に、経路要素を配置する。
＜ＬｙｅｅＡＬＬ３によるプログラム製造手順＞
ＬｙｅｅＡＬＬ３によるプログラム製造手順の概要は以下のようになる。詳細な手順の一部は一般に公開されるている技術資料「使ってみようＬｙｅｅＡＬＬ３  その１Ｖ１．０（カテナ（株）作成２００５年１１月版）」に紹介されている。
１．ＬｙｅｅＡＬＬ３に要件情報および設計情報を入力する。
（１）入出力の基本情報の入力
プログラムを作成するための素材を登録することである。
（ｉ）画面情報の入力では，作成すべき画面ごとの画面ＩＤが登録され，画面ＩＤによって識別される画面ごとにその画面に属する入力データ項目および出力データ項目が登録され，かつ画面に所属する論理レコードのひな型を登録する。
（ｉｉ）ファイル情報の入力では，作成されるデータベースのデータベース名およびそこに所属するテーブルのテーブルＩＤが登録され，テーブルＩＤによって識別されるテーブルごとに，テーブルに属する入力データ項目および出力データ項目を登録し，かつテーブルに属する論理レコードのひな型を登録する。
（２）プログラム設計情報の入力
（ｉ）プログラムＩＤの登録
イベント単位の処理を１つのプログラムの単位としてプログラムＩＤを登録する。
（ｉｉ）ＩＯユニットフローの登録
プログラムごとに、そこに含まれるＩＯユニットごとの要件情報を入力（登録）する。
（３）プログラムごとおよびＩＯユニットごとの要件情報の入力
（ｉ）プログラムが使用する論理レコードのひな型を登録し，参照関係のある論理レコード間の「参照の多重度」を入力する。そして，登録した出力論理レコードに属する出力データ項目の生成式と生成式実行条件を入力する。
２．プログラム・ソースコードを生成する。
ＬｙｅｅＡＬＬ３の生成開始ボタンがクリックされると，ＬｙｅｅＡＬＬ３が指定した言語のソースコードが生成、コンパイルされ、オブジェクトコードが作成される。プログラムの構造は、最適処理順序の構造となっている。
ＬｙｅｅＡＬＬ３は画面の作成は行わないで、画面は一般的な画面開発法によって作成する。
３．プログラムの稼動確認
ＬｙｅｅＡＬＬ３で作成したプログラムと別途作成した画面を一緒に動かし、プログラムの稼動を確認する。
なお，参照の多重度は，ＬｙｅｅＡＬＬ３のユーザに入力させる方法もあるし、他の要件情報からＬｙｅｅＡＬＬ３が自動的に解析することもできる。
他の要件情報とは、１つは出力データ項目の生成式と生成式実行条件である。生成式と生成式実行条件に基づいて，出力および入力データ項目間の参照関係が決定でき、出力および入力データ項目間の参照関係から、それぞれの出力および入力データ項目が所属する論理レコード間の参照関係が決定できる。論理レコード間の多重度比率については、参照の条件などの情報からも得ることができる。
＜ＬｙｅｅＡＬＬ３が行う処理の概要＞
以上、開発者側から述べたＬｙｅｅＡＬＬ３によるプログラム製造手順であった。ＬｙｅｅＡＬＬ３が行う処理に焦点をあててプログラム生成手順をみると、以下のように手順となる。
（１）入力手段が中間言語で入力された要件情報（参照の多重度情報を含む）と、プログラム設計情報入力する。
（２）記憶手段が、入力された要件情報とプログラム設計情報を要件ＤＢに保持する。
（３）作成要素モジュール決定手段が、入力された要件情報とプログラム設計情報から、作成すべき要素モジュールと要素モジュールひな型に代入すべき要件情報を決定し、作成要素モジュール情報として記憶手段に記憶する。
（４）入出力要素配列およびループ階層構造決定手段が、記憶手段に記憶された作成要素モジュール情報（参照の多重度情報を含む）に基づいて、ループ単位階層構造と、入出力要素の相対的配置順序および所属するループ単位階層を決定し、順序情報１として記憶する。
（５）初期化要素配列決定手段が、記憶手段に記憶された作成要素モジュール情報（参照の多重度情報を含む）に基づいて、順序情報１を参照して、出力論理要素に対する初期化要素の配置位置を決定し、順序情報１を拡張して順序情報２として記憶する。
（６）論理要素配列決定手段が、作成要素モジュール情報（生成式および生成式実行条件を含む）に基づいて、同一論理レコードに属する出力データ項目の論理要素集合内における論理要素の配置順序を決定し、順序情報２を参照して、出力要素に対する論理要素群の配置位置を決定し、順序情報２を拡張して順序情報３として記憶する。
（７）経路要素配列決定手段が、作成要素モジュール情報に基づいて、順序情報３を参照して、各ＩＯユニット内の要素モジュール群の最後に経路要素を配置するよう決定し、順序情報３を拡張して、順序情報４として記憶する。
（８）言語変換手段は、中間言語で入力された要件情報を、入力され記憶された指定言語情報に基づいて、記憶された言語変換テーブルに従って、指定言語に変換し、変換要件情報として記憶する。
（９）コード生成手段は、記憶手段に記憶された作成要素モジュール情報に基づいて、記憶手段に記憶された要素モジュールひな型に対して変換要件情報を代入して要素モジュールを生成し、生成した要素モジュールを順序情報４に基づいて配置し、完成ソースコードとして記憶する。
（１０）完成ソースコードを、コンパイル手段がコンパイルし、オブジェクトコードとして記憶する。
第２３図は，上記の処理を行うＬｙｅｅＡＬＬ３のシステム構成（ハードウエア構成）を示している。また，第２４図は，上述したＬｙｅｅＡＬＬ３の処理のフローチャートである。第２５図は，上述した初期化要素配列決定の処理を示すフローチャート，第２６図は論理要素配列決定処理のフローチャートである。第２７図は経路要素配列決定処理のフローチャートである。
他の実施例
「参照の多重度」を用いて出力要素、入力要素の相対位置と所属するループ単位の階層の相対関係を決定する他の方法について、上述した方法とは別の方法を，以下説明する。
１つのＩＯユニットとするべきある同期範囲に、７つの論理レコードＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇがあるとする。これらの論理レコードの参照の多重度は次の表１８のように指定されている。
【表１８】
2007018295.tif 000025
表１８から得られる情報を、有向グラフを用いて表すと第２８図、第２９図、第３０図のようになる。参照の多重度情報からは、全てのノード間の関係が直接得られないので、これだけでは１つの有向グラフを記述することができない。たとえば、多重度からはＡとＣの順序関係がわからない。そこで、表されていないノード間の順序関係を補足する必要がある。多重度から直接把握できるループ単位とその順序関係（階層）を元に、不足する情報を補完してループ単位の順序関係を完成させる。ループ単位の順序関係を有向グラフに表したものをノードフローと呼ぶ。たとえば、多重度情報からはＡとＢ、ＡとＣの関係しかわからない場合、ＢとＣの関係を決定しなければ完全な順序関係を決定することができない。そこで、ＢとＣの関係を補完し、補完された情報から階層を導き出し、矛盾をチェックし、ループ単位の順序関係を完成させる。上述の表１８に不足するノードの順序関係を補完してノードフローを完成させると第３１図のようになる。以下にその過程を説明する。
ステップ１：不足情報の補完
ＡとＢの２つのノードがあったとき、ＡとＢについての、可能性があるノード間順序関係の全候補は表１９に示すとおりである。
【表１９】
2007018295.tif 000026
2007018295.tif 000027
【表２０】
2007018295.tif 000028
2007018295.tif 000029
ステップ２
次に、２つノードのペアの順序関係から、不明な３つ目のノードペアの順序関係を補完する。たとえば、ノードＡ、Ｂ、Ｃがあったとき、ＡとＢ、ＡとＣの参照の多重度が決定しており、ＢとＣには参照関係がないために順序関係が未決の場合、全体の処理順序を決定するためには、ＢとＣの順序を決定する必要がある。そこで、順序関係が決定済みの２つのノードペアの関係を利用して、不明な２つ目のノードペアの順序関係を解析する。
前述の表２０の任意の２項間補完表をもとにして、不明なノードペア全てについて、３項間補完表を作成する。前述のＡ、Ｂ、Ｃの場合でいえば、３項間補完表は下記の表２１のようになる。表２１中の記号の意味は表２２の通りである。これらの記号は、可能性候補表とチェックした結果、可能性候補に当てはまるか否か、候補としての優先度を表したものである。
【表２１】
2007018295.tif 000030
2007018295.tif 000031
【表２２】
2007018295.tif 000032
ステップ３
作成した３項間補完表と、参照の多重度情報を照合し、候補のなかから、未決定ノードペアの順序関係を決定する。表２１の例では、Ａ：Ｂの多重度が１：Ｎ、Ａ：Ｃの多重度が１：１だとすれば、ＡとＢの関係はＡが「上位」、ＡとＣの関係はＡが「同  後」であるから、４行目の候補が選択される。次に４行目の優先度が最も高い「下位」が選択され、ＢとＣの関係はＢが「下位」であることが決定する。全ての未決定のノードペアに対して、同様の３項間補完表を作成し、多重度情報と照合して順序関係を決定する。候補の優先度が同じで順序間決定が決定しない場合は、保留とし、他の順序関係が決定した後に、新たな決定情報を利用して３項間補完表の作成と照合を試みる。この解析を、未決定のノードペアがなくなるまで繰り返す。この結果決定した順序関係情報を補完済み多重度情報と呼ぶ。
ステップ４
全てのノードの順序関係が決定したら、補完済み多重度情報から、階層（ループ単位）の抽出を行う。同階層に属するノードが１つのループ単位になる。上位となっているノードの階層位置は、出来るだけ子階層に配置する。
（ｉ）まず、全てのノードの順序関係ステータスを未確定とする。
（ｉｉ）未確定のノード集合内で最下階層のノードになり得るノード（最下層ノード候補）と、それらと同階層にあるものを集め、１つの階層とする。最下層ノード候補とは、未確定のノードのうち、未確定ないずれのノードに対しても上位にならないノード群のことである。この例を第３２図に示す。
また、補完された多重度情報において同階層にはないが、確定済みノードから見て上位階層のノード群は同一階層に属する（順序無しの同階層になる）。この例を第３３図に示す。
（ｉｉｉ）階層に属するノードを確定とする。（ノードの所属階層の決定）
（ｉｖ）全てのノードが確定したら終了とする。未確定ノードがある場合は、（ｉｉ）へ戻って同様の処理を繰り返す。
ステップ５
階層間の多重度関係作成を行う。抽出された階層をノードと見なして、階層間の多重度関係を作成する。これを階層間多重度情報と呼ぶ。これは、補完された多重度情報とノードの所属情報から作成する。ノードの関係を同一階層に属するノード集合（階層）の関係に置き換えたものである。第３４図にイメージ図を示す。
第３４図の階層間多重度情報をまとめると表２３のようになる。
【表２３】
2007018295.tif 000033
ステップ６
単階層化多重度関係の作成を行う。多重度情報と補完された多重度情報と階層間多重度情報から、単階層化多重度情報を導き出す。単階層化多重度関係とは、ノードの階層関係を省いて、前後の順序関係のみを取り出したものである。第３４図の階層構造を単階層化したものを第３５図に示す。
ステップ７
ノードの階層所属情報と単階層化多重度情報を使用して、ループ階層化ノードフローを作成する。単階層化多重度情報でとらえたノードフローに、ノードが所属する階層情報を追加することによって作成する。
第３６図は，第３５図のノードフローをループ階層化したものを示している。
【図１】
2007018295.tif 000034
【図２】
2007018295.tif 000035
【図３】
2007018295.tif 000036
【図４】
2007018295.tif 000037
【図５】
2007018295.tif 000038
【図６】
2007018295.tif 000039
【図７】
2007018295.tif 000040
【図８】
2007018295.tif 000041
【図９】
2007018295.tif 000042
【図１０】
2007018295.tif 000043
【図１１】
2007018295.tif 000044
【図１２】
2007018295.tif 000045
【図１３】
2007018295.tif 000046
【図１４】
2007018295.tif 000047
【図１５】
2007018295.tif 000048
【図１６】
2007018295.tif 000049
【図１７】
2007018295.tif 000050
【図１８】
2007018295.tif 000051
【図１９】
2007018295.tif 000052
【図２０】
2007018295.tif 000053
【図２１】
2007018295.tif 000054
【図２２】
2007018295.tif 000055
【図２３】
2007018295.tif 000056
【図２４】
2007018295.tif 000057
【図２５】
2007018295.tif 000058
【図２６】
2007018295.tif 000059
【図２７】
2007018295.tif 000060
【図２８】
2007018295.tif 000061
【図２９】
2007018295.tif 000062
【図３０】
2007018295.tif 000063
【図３１】
2007018295.tif 000064
【図３２】
2007018295.tif 000065
【図３３】
2007018295.tif 000066
【図３４】
2007018295.tif 000067
【図３５】
2007018295.tif 000068
【図３６】
2007018295.tif 000069
【国際調査報告】
2007018295.tif 000070
2007018295.tif 000071