(57)【要約】【課題】プログラムの分割作業を行う際の、構造のあるデータ項目の整理を支援し、自動的なプログラム分割処理を支援することにある。【解決手段】分割対象プログラムのデータ構造モデルの各データ項目の内の利用者が指定したデータ項目の使用区分の欄（各データ項目の使用区分の欄には初期値として‘使用されていない’ことを示す値（Ｃ）が予め設定されている）に、分割生成されるプログラムで‘使用、直接使用されている’ことを示す値（Ａ）を設定し、値（Ａ）を設定しデータ項目に親データ項目がある場合には、このデータ項目に‘部分使用、子項目が使用されている’ことを示す値（Ｂ）を設定し、使用区分の欄に値が設定されたデータ構造モデルをデータ構造図として表示し、利用者がデータ構造図から選択したデータ項目により分割プログラムのデータ定義部を生成する。【選択図】                図１
2004178132.tif 000002
【特許請求の範囲】
【請求項１】
メモリに格納されている、分割対象プログラムのデータ構造モデルを該メモリから読み出す手順と、
入力されたデータ項目の名称により、読み出したデータ構造モデルを検索し、該データ構造モデルの前記データ項目に対応する対象行を取得する手順と、
該取得したデータ構造モデルの対象行の初期値の設定された使用区分の欄に、分割生成されるプログラムで使用されていることを示す値を設定する手順と、
前記データ項目に対応する対象行に親ＩＤが設定されているか判定する手順と、
親ＩＤが設定されていると判定されたとき、該親ＩＤにより前記データ構造モデルを検索し、該データ構造モデルの該親ＩＤを有するデータ項目に対応する対象行を取得する手順と、
該取得したデータ項目に対応する対象行の使用区分の欄に、分割生成されるプログラムで子項目が使用されていることを示す値を設定する手順を実行させるためのプログラム。
【請求項２】
既存のプログラムの一部を独立したプログラムとして分割するためのプログラム分割支援方法であって、
メモリに格納されている、分割対象プログラムのデータ構造モデルを該メモリから読み出し、利用者から入力されたデータ項目の名称により、読み出したデータ構造モデルを検索し、該データ構造モデルの前記データ項目に対応する対象行を取得し、
該取得したデータ構造モデルの対象行の初期値の設定された使用区分の欄に、分割生成されるプログラムで使用されていることを示す値（この値をＡと記す）を設定し、
前記データ項目に対応する対象行に親ＩＤが設定されている場合、該親ＩＤにより前記データ構造モデルを検索し、該データ構造モデルの該親ＩＤを有するデータ項目に対応する対象行を取得し、
該取得したデータ項目に対応する対象行の使用区分の欄に、分割生成されるプログラムで子項目が使用されていることを示す値（この値をＢと記す）を設定し、
該取得したデータ項目に対応する対象行にさらに上位の親ＩＤが設定されている場合、該上位の親ＩＤにより前記データ構造モデルを検索し、該データ構造モデルの該上位の親ＩＤを有するデータ項目に対応する対象行を取得し、該対象行の使用区分の欄に、前記値Ｂを設定し、
前記初期値は使用されていないことを示す値（この値をＣと記す）とすることを特徴とするプログラム分割支援方法。
【請求項３】
請求項２記載のプログラム分割支援方法において、
前記使用区分の欄に前記の値Ａ、Ｂ、Ｃが設定されたデータ構造モデルをデータ構造図として表示装置に表示し、値Ａのデータ項目と値Ｂのデータ項目と値Ｃのデータ項目をそれぞれ視覚的効果を変えて表示することを特徴とするプログラム分割支援方法。
【請求項４】
請求項２記載のプログラム分割支援方法において、
前記使用区分の欄に前記の値Ａ、Ｂ、Ｃが設定されたデータ構造モデルから前記使用区分の欄に前記値Ａが設定されているデータ項目と、前記値Ｂが設定されているデータ項目を抽出し、該抽出したデータ項目により分割プログラムのデータ定義部を生成することを特徴とするプログラム分割支援方法。
【請求項５】
請求項３記載のプログラム分割支援方法において、
前記表示装置に表示されたデータ構造図から利用者により選択されたデータ項目により分割プログラムのデータ定義部を生成することを特徴とするプログラム分割支援方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
プログラムソースを生成するプログラム生成システムに係り、特に既存のプログラムの一部を、独立したプログラムとして分割するためのプログラム分割支援技術に関する。
【０００２】
【従来の技術】
プログラムが複数の機能を提供する場合、特定の機能だけを、独立した実装単位として切り出すことができる場合がある。
プログラムの実装単位を見直し、適切なまとまりにすることは、プログラムの柔軟性、保守性を高める上で重要であり、この作業の支援の為に多くのシステムが考案されている。
例えば、特開２００２−４１２８７「再利用部品抽出装置」の如き、システムである。
このシステムで、ユーザが指定したプログラムのブロックで使用されている変数の集合を計算し、指定した部分で必要な変数だけを、生成する関数が使用する変数として切り出すことにより、機能分割の際に、不用なデータを整理することができる。
【０００３】
【発明が解決しようとする課題】
しかしながら、構造のあるデータを整理の対象にした場合、このような機能では、不十分な場合がある。
例として、ＣＯＢＯＬ言語のプログラムの一部を、新たにプログラムとして切り出す場合を考える。
ＣＯＢＯＬのデータ項目では、項目の持つ親子関係により、プログラムが使用しているデータ項目を単純に切り出すことはできない。
第一に、データ項目は、その親項目によって限定されて始めて、プログラム中で一意の名前を持つことがあり、単にその項目のみ切り出したのでは、名前の多義性の為に正しいプログラムにならない場合がある。
第二に、そうでない場合でも、データ項目を単独で切り出すと、データ構造が失われることによって、生成されたプログラムでは、データの持つ意味が分かりにくくなる。
このように、プログラムの分割の際、構造のあるデータの整理を考える為には、直接使用されているデータ項目だけでなく、この項目に関連したデータ構造を考慮する必要がある。
本発明の解決しようとする課題は、プログラムの該当部分から参照されているデータ項目と共にこの項目に関連したデータ構造を、ユーザに対して分かり易く示し、プログラムの分割作業を行う際の、構造のあるデータ項目の整理を支援することである。
本発明の解決しようとする他の課題は、構造のあるデータ項目を利用しているプログラムの分割作業の際、データ構造を参照して、必要なデータを不要なデータがなるべく入らないような方法で切り出してデータ定義部を生成し、自動的なプログラム分割を行うことである。
【０００４】
【課題を解決するための手段】
上記目的を達成するため、本発明のプログラム分割支援方法は、メモリに格納されている、分割対象プログラムのデータ構造モデルを該メモリから読み出し、利用者から入力されたデータ項目の名称により、読み出したデータ構造モデルを検索し、該データ構造モデルの前記データ項目に対応する対象行を取得し、
該取得したデータ構造モデルの対象行の初期値の設定された使用区分の欄に、分割生成されるプログラムで使用されていることを示す値（この値をＡとする）を設定し、
前記データ項目に対応する対象行に親ＩＤが設定されている場合、該親ＩＤにより前記データ構造モデルを検索し、該データ構造モデルの該親ＩＤを有するデータ項目に対応する対象行を取得し、
該取得したデータ項目に対応する対象行の使用区分の欄に、分割生成されるプログラムで子項目が使用されていることを示す値（この値をＢとする）を設定し、
該取得したデータ項目に対応する対象行にさらに上位の親ＩＤが設定されている場合、該上位の親ＩＤにより前記データ構造モデルを検索し、該データ構造モデルの該上位の親ＩＤを有するデータ項目に対応する対象行を取得し、該対象行の使用区分の欄に、前記値Ｂを設定する。
前記初期値は使用されていないことを示す値（この値をＣとする）とする。
【０００５】
【発明の実施の形態】
本発明の実施の形態を以下に説明する。
図１に本発明を適用したシステムの構成図の一例を示す。
システムはバス等の接続手段で接続されたＣＰＵ（３１）、ディスプレイ装置（３２）、キーボード（３３）、マウス等の指示装置（３４）、ディスク装置（２０）、メモリ（１０）及び、メモリ上に置かれたプログラムからなる。
１１〜１５は、メモリ（１０）上におかれたプログラムであり、それぞれ、構文解析（１１）、データ構造解析（１２）、データ使用解析（１３）、データ構造表示（１４）、ソース生成（１５）の為のプログラムである。
また、２１〜２４は、ディスク装置上におかれたデータであり、それぞれ、対象プログラムソース（２１）、構文モデル（２２）、データ構造モデル（２３）、生成プログラムソース（２４）である。
【０００６】
本発明を適用したシステムの動作を、以下に説明する。
以下の説明では、対象の言語としてＣＯＢＯＬ言語を用いる。
図２に、以下の説明で用いるＣＯＢＯＬプログラムソースを示す。４１がデータを定義したデータ部、４２が手続きを定義した手続き部を表す。
まず、構文解析（１１）が、対象プログラムソース（２１）を読み込んでソースプログラムの解析を行い、構文モデル（２２）を出力する。
構文モデル（２２）は、例えば、構文木のようなデータ構造で表現され、これは、プログラムのコンパイル／解釈時に行われているような構文解析技術によって生成することができる。
構文解析技術については、例えば、Ｃｏｍｐｉｌｅｒｓ  −  Ｐｒｉｎｃｉｐｌｅｓ，  Ｔｅｃｈｎｉｑｕｅｓ  ａｎｄ
Ｔｏｏｌｓ（Ａｈｏ、Ｓｅｔｈｉ＆Ｕｌｌｍａｎ、Ａｄｄｉｓｏｎ  Ｗｅｓｌｅｙ）等に解説されている。
次に、構文モデル（２２）を入力としてデータ構造解析（１２）を動作させ、データ構造モデル（２３）を生成する。
データ構造モデルは、プログラムの使用するデータのデータ構造を表現したものである。
【０００７】
図３にデータ構造モデルの例を示す。
図３は、図２のＣＯＢＯＬプログラムのデータ構造を表現したものである。
モデルの一行が、プログラムで定義されている一つのデータ項目に対応している。
データ項目ＩＤ（５１）は、データ構造モデルで一意になるようにデータ項目に付けた通番である。
また、項目名（５２）は、プログラム中で定義されたデータ項目の識別子である。
親ＩＤ（５３）は、データ項目の親項目をＩＤで示したものであり、項目間の階層関係を表現する。親項目の無い最上位項目に対しては、ＮＵＬＬ（図では、‘−’で示している）が設定される。
データ型（５４）は、該データ項目のデータ型である。
使用区分（５６）は、後述のデータ使用解析で設定される欄であり、「Ａ（使用、直接使用されている）」「Ｂ（部分使用、子項目が使用されている）」「Ｃ（使用されていない）」の三種類の値を取り得るものとする。使用区分は、「Ｃ」に初期化され、データ構造解析では設定しない。
【０００８】
図３に示すデータ構造モデルを生成するデータ構造解析処理は、以下のように行われる。
構文モデルをプログラムの先頭から順に読み、データ定義を見出すと、新たにレコードを１つ生成して、データ構造モデルに追加する。
このレコードに対し、
・プログラムの先頭からの通番により、データ項目ＩＤ（５１）を生成する。
・ソース中の記述から、データ項目名がわかるので、項目名（５２）に設定する。
・他のデータ項目の属性（５４、５５）をそれぞれ言語の規則に従って設定する。
・親項目のＩＤ（５３）を設定する。
例えば、ＣＯＢＯＬ言語の規則によると、自項目の前にある自項目より小さいレベル番号を持つ項目の内で、もっとも近いものが親項目になるので、これに対応する項目を、データ構造モデル（構文モデル）で検索してＩＤを求め、親ＩＤ（５３）に設定する。
また、ＣＯＢＯＬの場合、０１レベルの項目は最上位の親となり、それ自体は、親を持たないので、ＮＵＬＬを親ＩＤに設定する。
【０００９】
次に、構文モデル（２２）及び、データ構造モデル（２３）を入力としてデータ使用解析（１３）を行う。
データ使用解析では、キーボード又は指示装置より、プログラムとして切り出したい手続きの部分を入力し、構文モデルを解釈することにより、指定した手続き部分で使用されているデータ項目の各々に対し、図４に示す処理を行う。
ここでは、「使用」は、単にデータ項目の修飾の為に用いる使用を除く。例えば、ＣＯＢＯＬの文中の「Ａ  ＯＦ  ＡＡＡ  ＯＦ  ＸＸＸ」という表現は、項目「Ａ」の使用であるが、「ＡＡＡ」や「ＸＸＸ」の使用では無いと考える。
【００１０】
各データ項目に対して行われる処理を、図４のフローチャートに従って説明する。
まず、キーボード又は指示装置より、データ構造モデルを使用されているデータ項目の名称を入力する。
この入力されたデータ項目の名称により、データ構造モデルを検索し、データ構造モデルの対象行を得る（１０１）。
ここで実際には、項目名だけで、一意にならない項目の場合、親項目名での絞り込が必要になる。
次に、この項目に該当する行の使用区分の欄が、Ａに設定されているかどうかを判定する（１０２）。
Ａに設定されている場合、この項目に対する処理は終了する。
Ａに設定されていない場合、Ａを設定し（１０３）、次に親ＩＤが設定されているかどうかを判定する（１０４）。
設定されていない場合、この項目に対する処理は終了する。
親ＩＤが設定されている場合は、親項目に対し処理を継続する。
データ構造モデルを上記設定されている親ＩＤで検索し（１０５）、該当行を得る。
使用区分の欄が、Ｃであるかどうかを判定する（１０６）。
Ｃでなければ、この項目に対する処理は終了する。
Ｃであれば、使用区分にＢを設定し（１０７）、さらに処理を継続する。
使用区分に設定をした例を図３のデータ構造モデルに示す。
【００１１】
次に、データ構造表示（１４）により、ディスプレイ装置等の表示装置に使用区分の欄への設定が行われたデータ構造モデルをデータ構造図として表示を行う。
表示するデータ構造図では、データ使用解析において使用区分に設定した設定情報の種類に応じて、表示するデータ項目の視覚的効果を変えて表示する。
図５に、本発明のシステムによって表示されたデータ構造図の例を示した。この例は、図３に示すデータ構造モデルのケースに対するものである。
データ構造図の例では、Ａに区分された項目（７１，７２，７４，７５）を、太枠線で、Ｂに区分された項目（７０，７３）を、細枠線で、Ｃを枠線無しで示した。
図５の表示例により、例えば、項目  「ＹＹＹ」、「ＣＣＣ」、「Ｃ」は、指示した手続き部では、直接或いは間接的にも使用されていないことが分かる。
Ａに区分された項目（７１，７２，７４，７５）は、プログラム中で直接使用されている為、プログラム分割の際に残す必要がある項目であり、Ｂに区分された項目（７０，７３）や、その下位の項目はプログラム分割の際に残す項目の候補である。
【００１２】
最後にソース生成（１５）を行う。
ソース生成に関しては、２とおりの実施例が考えられる。
第１の方法は、データ構造モデルをディスプレイ装置上に表示したデータ構造図より、ユーザに対して、部品に移行するデータ項目を指示装置によって選択させ、これを元に分割したプログラムを生成するものであり、第２の方法は、使用区分の欄への設定が行われたデータ構造モデルからデータ項目を自動的に選択することで、自動的なプログラム分割を実現するものである。
第１の方法は、データ構造図から選択されたデータ項目に対してデータ定義を生成し、データ定義部を生成する。
第２の方法に関して、その処理を以下に説明する。
この方法では、データ構造モデル（２３）を使用しながら、使用区分が、Ａ又はＢのデータ項目を選択し、選択したデータ項目に対してデータ定義を生成する。
この方法により生成したデータ定義部の例を、図６に示す。
生成されたデータ定義部は、指定した手続きが使用する全てのデータを含み、また、それらデータのすべての上位データ構造を持つ為、項目名称の衝突が無いことが保証される。
図６の例においては、２つの同名の項目９３、９５に対し、それぞれの親項目９２、９４が残されていることで、項目名称の衝突が回避されている。
【００１３】
【発明の効果】
本発明によれば、プログラム分割時に考慮しなければならないデータ項目をユーザが把握できるようになり、これを元に分割プログラムに移行するデータ項目を指示し、分割プログラムの生成が行えるようにできる。
Ａ及びＢに分類されたデータ項目を、移行するデータ項目として分割プログラム生成を行うことで、データ項目名称の衝突がない形で、自動的な分割プログラムの生成が行えるようになる。
【図面の簡単な説明】
【図１】本発明を適用した実施例のシステムの全体構造を示すブロック図である。
【図２】実施例の動作説明で用いるプログラム分割処理対象のＣＯＢＯＬプログラムソースである。
【図３】データ構造モデルの一例を示す図である。
【図４】データ使用解析処理において、手続き部で使用されている各項目に対して行われる処理のフローチャートを示す図である。
【図５】実施例のシステムによって表示されたデータ構造図の例を示す図である。
【図６】実施例のシステムにより生成されたＣＯＢＯＬソースのデータ定義部を示す図である。
【符号の説明】
１１    構文解析
１２    データ構造解析
１３    データ使用解析
１４    データ構造表示
１５    ソース生成
２１    対象プログラムソース
２２    構文モデル
２３    データ構造モデル
２４    生成プログラムソース
３１    ＣＰＵ
３２    ディスプレイ装置
３３    キーボード
３４    指示装置
【図１】
2004178132.tif 000003
【図２】
2004178132.tif 000004
【図３】
2004178132.tif 000005
【図４】
2004178132.tif 000006
【図５】
2004178132.tif 000007
【図６】
2004178132.tif 000008