(57)【特許請求の範囲】
【請求項１】
ＣＯＢＯＬ言語で記述された第１のプログラムと、それによって呼び出される第２のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、装置であって、
データ属性検証部を備え、
前記データ属性検証部は、
前記第２のプログラムをコンパイルして得られた第２のデータマップリストの中から、前記第２のプログラムの引数のデータ名と同一のデータ名を含む行を特定し、
特定した行からデータ名及びデータ属性を取り出し、
特定した行が集団項目に属する場合は、特定した行以降の同じ前記集団項目に属する行についても、データ名及びデータ属性を取り出し、
そして、前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が取り出した前記データ属性と一致しているかどうかを判定し、
判定の結果、一致していない場合に、そのことを示すフラグを設定する、
ことを特徴とするコンパイル支援装置。
【請求項２】
前記データ属性検証部が、
特定した行と、特定した行以降の同じ前記集団項目に属する行とから、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、取り出した前記データ名とデータ名が同一の行において、当該行のデータ項目長が、取り出した前記データ項目長と一致しているかどうかも判定し、
判定の結果、データ項目長が一致しない場合は、そのことを示すフラグを設定する、
請求項１に記載のコンパイル支援装置。
【請求項３】
前記第１のデータマップリストの全部又は一部と、前記第２のデータマップリストの全部又は一部と、前記フラグの設定状況とを、画面に表示する、データ表示部を更に備えている、請求項１または２に記載のコンパイル支援装置。
【請求項４】
コンパイルが実行された複数のプログラムを対象にして、前記コンパイルによって得られた、複数のプログラムそれぞれのリポジトリ情報に基づいて、前記第１のプログラムと前記第２のプログラムとを特定する、リポジトリ情報照合部を、
更に備えている請求項１〜３のいずれかに記載のコンパイル支援装置。
【請求項５】
ＣＯＢＯＬ言語で記述された第１のプログラムと、それによって呼び出される第２のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、方法であって、
（ａ）コンピュータによって、前記第２のプログラムをコンパイルして得られた第２のデータマップリストの中から、前記第２のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
（ｂ）前記コンピュータによって、前記（ａ）のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
（ｃ）前記コンピュータによって、前記（ａ）のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
（ｄ）前記コンピュータによって、前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、前記（ｂ）又は（ｃ）のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記（ｂ）又は（ｃ）のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を有することを特徴とするコンパイル支援方法。
【請求項６】
ＣＯＢＯＬ言語で記述された第１のプログラムと、それによって呼び出される第２のプログラムとのコンパイル後における、両者間の引数の適合の有無を、コンピュータによって判定するための、プログラムであって、
前記コンピュータに、
（ａ）前記第２のプログラムをコンパイルして得られた第２のデータマップリストの中から、前記第２のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
（ｂ）前記（ａ）のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
（ｃ）前記（ａ）のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
（ｄ）前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、前記（ｂ）又は（ｃ）のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記（ｂ）又は（ｃ）のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイルされたプログラム間の連絡に用いられる引数の適合性を判定するための、コンパイル支援装置、コンパイル支援方法、及びこれらを実現するためのプログラムに関する。
【背景技術】
【０００２】
ＣＯＢＯＬ言語には、事務処理を行なう上で欠かせない機能が数多く備えられており、ＣＯＢＯＬ言語を用いれば、事務処理系のプログラムを効率良く開発できる。このため、ソフトウェア市場における開発言語において、ＣＯＢＯＬ言語のシェアは、今なお約２０％を占めている。
【０００３】
一方、近年、企業等においては、ＣＯＢＯＬ言語で構築されたレガシーシステムをオープンシステムへ移行するレガシーマイグレーションが盛んに行われている。このレガシーマイグレーションの実行方法の一つとしては、過去のＣＯＢＯＬ資産を流用せず、ＪＡＶＡ（登録商標）等のオープン系技術を使って全面的に再構築することが提案されているが、この場合は、膨大な開発期間とコストとが必要になる。
【０００４】
このため、ＣＯＢＯＬコンパイラを用いて、ＣＯＢＯＬ言語で記述されたソースコード（以下「ＣＯＢＯＬプログラム」とも言う。）を、オープンシステム上で実行可能なコードに書き換えることに注目が集まっている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−０８６２１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、ハードウェア及びＯＳのアーキテクチャにおいて、ＣＯＢＯＬ製品には、固有仕様が存在するため、コンパイル後の検証において多大な工数が必要となる場合がある。
【０００７】
具体的には、コンパイル時に得られるリポジトリ情報は、集団項目に従属するデータ項目の定義を含まないため、通常、ＣＯＢＯＬコンパイラによって、コンパイル時に、プログラム間連絡における引数の適合の有無を自動的に検出することは困難である。この結果、適切な引数が設定されているかどうかは、人的手段による検証によって行なわなければならず、多大な工数が必要となる。
【０００８】
本発明の目的の一例は、上記問題を解消し、プログラム間連絡時の引数が、集団項目に従属するデータ項目に記述されている場合であっても、プログラム間におけるデータの不適合を自動的に検出し得る、コンパイル支援装置、コンパイル支援方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の一側面におけるコンパイル支援装置は、ＣＯＢＯＬ言語で記述された第１のプログラムと、それによって呼び出される第２のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、装置であって、
データ属性検証部を備え、
前記データ属性検証部は、
前記第２のプログラムをコンパイルして得られた第２のデータマップリストの中から、前記第２のプログラムの引数のデータ名と同一のデータ名を含む行を特定し、
特定した行からデータ名及びデータ属性を取り出し、
特定した行が集団項目に属する場合は、特定した行以降の同じ前記集団項目に属する行についても、データ名及びデータ属性を取り出し、
そして、前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が取り出した前記データ属性と一致しているかどうかを判定し、
判定の結果、一致していない場合に、そのことを示すフラグを設定する、
ことを特徴とする。
【００１０】
また、上記目的を達成するため、本発明の一側面におけるコンパイル支援方法は、ＣＯＢＯＬ言語で記述された第１のプログラムと、それによって呼び出される第２のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、方法であって、
（ａ）前記第２のプログラムをコンパイルして得られた第２のデータマップリストの中から、前記第２のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
（ｂ）前記（ａ）のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
（ｃ）前記（ａ）のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
（ｄ）前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、前記（ｂ）又は（ｃ）のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記（ｂ）又は（ｃ）のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を有することを特徴とする。
【００１１】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、ＣＯＢＯＬ言語で記述された第１のプログラムと、それによって呼び出される第２のプログラムとのコンパイル後における、両者間の引数の適合の有無を、コンピュータによって判定するための、プログラムであって、
前記コンピュータに、
（ａ）前記第２のプログラムをコンパイルして得られた第２のデータマップリストの中から、前記第２のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
（ｂ）前記（ａ）のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
（ｃ）前記（ａ）のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
（ｄ）前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、前記（ｂ）又は（ｃ）のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記（ｂ）又は（ｃ）のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を実行させることを特徴とする。
【発明の効果】
【００１２】
以上のように本発明によれば、プログラム間連絡時の引数が、集団項目に従属するデータ項目に記述されている場合であっても、プログラム間におけるデータの不適合を自動的に検出することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の実施の形態におけるコンパイル支援装置の構成を示すブロック図である。
【図２】図２は、本発明の実施の形態において用いられるリポジトリ情報の一例を示す図である。
【図３】図３は、本発明の実施の形態におけるコンパイル支援装置の動作を示すフロー図である。
【図４】図４は、本発明の実施の形態において作成されるプログラム関係情報の一例を示す図である。
【図５】図５は、本発明の実施の形態において得られる検証結果の一例を示す図である。
【図６】図６は、本発明の実施の形態において表示装置に表示される画面の一例を示す図である。
【図７】図７は、本発明の実施の形態におけるコンパイル支援装置を実現するコンピュータの一例を示すブロック図である。
【発明を実施するための形態】
【００１４】
（実施の形態）
以下、本発明の実施の形態における、コンパイル支援装置、コンパイル支援方法、及びプログラムについて、図１〜図７を参照しながら説明する。
【００１５】
［装置構成］
最初に、本発明の実施の形態におけるコンパイル支援装置の構成について図１を用いて説明する。図１は、本発明の実施の形態におけるコンパイル支援装置の構成を示すブロック図である。
【００１６】
図１に示す本実施の形態におけるコンパイル支援装置３１は、ＣＯＢＯＬ言語で記述されたプログラムと、それによって呼び出されるプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための装置である。
【００１７】
以降の説明において、ＣＯＢＯＬ言語で記述されたプログラムは「ＣＯＢＯＬプログラム」と表記する。また、他のプログラムを呼び出すプログラムを「呼出し元プログラム」と表記する場合がある。更に、呼出し元プログラムによって読み出されるプログラムを「呼出し先プログラム」と表記する場合もある。
【００１８】
図１に示すように、コンパイル支援装置３１は、データ属性検証部３１２を備えている。データ属性検証部３１２は、まず、呼出し先プログラムをコンパイルして得られたデータマップリスト（以下、「呼出し先データマップリスト」と表記する。）の中から、呼出し先プログラムの引数のデータ名と同一のデータ名を含む行を特定する。
【００１９】
次いで、特定した行からデータ名及びデータ属性を取り出す。更に、データ属性検証部３１２は、特定した行が集団項目に属する場合は、呼出し先データマップリストにおいて、特定した行以降の同じ集団項目に属する行についても、データ名及びデータ属性を取り出す。このとき、取り出されたデータ名とデータ属性とは、行毎に管理される。
【００２０】
そして、データ属性検証部３１２は、呼出し元プログラムをコンパイルして得られたデータマップリスト（以下、「呼出し元データマップリスト」と表記する。）中の、先に取り出したいずれかのデータ名とデータ名が同一の行を特定する。更に、データ属性検証部３１２は、特定した行のデータ属性が、先に取り出したデータ名と同じ行から取り出されたデータ属性と一致しているかどうかを判定する。
【００２１】
その後、判定の結果、一致していない場合は、データ属性検証部３１２は、そのことを示すフラグを設定する。本実施の形態において、フラグは、呼出し元データマップリストから取り出され、且つ判定の対象となったデータ名及びデータ属性に対して設定される。
【００２２】
このように、本実施の形態では、呼出し先プログラムにおいて、引数が記述されているデータ項目が集団項目である場合は、その下位に従属するデータ項目についても、データ属性の検証対象となる。よって、本実施の形態によれば、プログラム間連絡時の引数が、集団項目に従属するデータ項目に記述されている場合であっても、プログラム間におけるデータの不適合が自動的に検出される。
【００２３】
ここで、本実施の形態におけるコンパイル支援装置３１の構成を更に具体的に説明する。図１に示すように、本実施の形態では、ＣＯＢＯＬプログラムＡ１１とＣＯＢＯＬプログラムＢ２１とが、データ属性の検証対象となり、これらのうち一方が、呼出し元プログラムとなり、他方が呼出し先プログラムになるとする。ＣＯＢＯＬプログラムＡ１１とＣＯＢＯＬプログラムＢ２１とは、ＣＯＢＯＬコンパイラ１２によってコンパイルされる。
【００２４】
具体的には、ＣＯＢＯＬコンパイラ１２は、ＣＯＢＯＬプログラムＡ１１を入力として、目的プログラムＡ１３と、データマップリストＡ１４と、リポジトリ情報Ａ１５とを出力する。同様に、ＣＯＢＯＬコンパイラ１２は、ＣＯＢＯＬプログラムＢ２１を入力として、目的プログラムＢ２３と、データマップリストＢ２４と、リポジトリ情報Ｂ２５とを出力する。
【００２５】
データマップリストＡ１４、及びデータマップリストＢ２４は、それぞれ、対応するＣＯＢＯＬプログラムの行毎に、レベル番号、データ名、データ属性、項目長、相対アドレスといった識別情報を有している。
【００２６】
また、リポジトリ情報Ａ１５、及びリポジトリ情報Ｂ２５は、それぞれ、図２に示すリポジトリ情報３２と同様に、多数の要素情報を有している。図２は、本発明の実施の形態において用いられるリポジトリ情報の一例を示す図である。
【００２７】
図２に示すように、リポジトリ情報３２は、それが付随しているＣＯＢＯＬプログラム、言い換えると、リポジトリ情報３２によって呼び出されるプログラム（以下、「呼び出されるプログラム」と表記する。）の情報３２１を含む。即ち、リポジトリ情報３２が、リポジトリ情報Ａ１５であれば、呼び出されるプログラムは、ＣＯＢＯＬプログラムＡとなる。また、リポジトリ情報３２は、それが付随しているＣＯＢＯＬプログラムが呼び出すプログラム（以下、「呼び出すプログラム」と表記する。）の情報の個数３２２と、「呼び出すプログラム」の情報３２３とを更に含む。
【００２８】
呼び出されるプログラムの情報３２１は、ＣＯＢＯＬコンパイラ１２によって、ＣＯＢＯＬプログラムの手続き部と連絡節との記述内容に基づいて設定される。呼び出されるプログラムの情報は、プログラム名３２１１、引数の個数３２１２、引数のデータ名３２１４、引数のデータ属性３２１５、引数のデータ項目長３２１６を含む。
【００２９】
呼び出すプログラムの情報３２３は、呼び出すプログラムの個数３２２が０（ゼロ）より大きい場合に、ＣＯＢＯＬコンパイラ１２によって、ＣＯＢＯＬプログラム（呼び出されるプログラム）のＣＡＬＬ文の引数の記述内容に基づいて、設定される。呼び出すプログラムの情報３２３は、プログラム名３２３１、引数の個数３２３２、引数のデータ名３２３４、引数のデータ属性３２３５、引数のデータ項目長３２３６を含む。
【００３０】
また、図１に示すように、本実施の形態では、コンパイル支援装置３１は、データ属性検証部３１１に加えて、リポジトリ情報照合部３１１と、データ表示部３１３とを備えている。また、コンパイル支援装置３１には、液晶表示装置等のディスプレイ装置４０が接続されている。
【００３１】
リポジトリ情報照合部３１１は、コンパイルが実行された複数のプログラムを対象にして、コンパイルによって得られた、複数のプログラムそれぞれのリポジトリ情報に基づいて、呼出し元プログラムと呼出し先プログラムとを特定する。
【００３２】
具体的には、本実施の形態では、リポジトリ情報照合部３１１は、各プログラムの図２に示したリポジトリ情報３２を用いて、呼出し元プログラムと呼出し先プログラムとが特定されたプログラム関係情報を作成し、これをデータ属性検証部３１２に出力する。データ属性検証部３１２は、プログラム関係情報を用いて、データ属性の検証を実行する。プログラム関係情報の具体例については、図４を用いて後述する。
【００３３】
また、本実施の形態では、データ属性検証部３１２は、呼出し先データマップリストの中から特定した行と、特定した行以降の同じ集団項目に属する行とから、データ名及びデータ属性に加えて、データ項目長を更に取り出すことができる。
【００３４】
この場合、データ属性検証部３１２は、呼出し元データマップリスト中の、先に取り出したいずれかのデータ名とデータ名が同一の行において、当該行のデータ項目長が、先に取り出したデータ名と同じ行から取り出されたデータ項目長と一致しているかどうかも判定する。また、データ属性検証部３１２は、データ項目長についての判定の結果、データ項目長が一致しない場合も、そのことを示すフラグを設定する。
【００３５】
更に、本実施の形態では、データ属性検証部３１２は、検証の結果を「検証結果」としてまとめる。検証結果には、呼出し元データマップリストから取り出された、データ名、データ属性、及びデータ項目長に加え、設定された各種フラグも記述されている。検証結果の具体例については、図５を用いて後述する。
【００３６】
また、データ表示部３１３は、呼出し元データマップリストの全部又は一部と、呼出し先データマップリストの全部又は一部と、フラグの設定状況とを、表示装置４０の画面４１に表示する。表示される画面４１の具体例については、図６を用いて後述する。
【００３７】
［装置動作］
次に、本発明の実施の形態におけるコンパイル支援装置３１の動作について図３を用いて説明する。図３は、本発明の実施の形態におけるコンパイル支援装置の動作を示すフロー図である。以下の説明においては、適宜図１及び図２を参酌する。また、本実施の形態では、コンパイル支援装置３１を動作させることによって、コンパイル支援方法が実施される。よって、本実施の形態におけるコンパイル支援方法の説明は、以下のコンパイル支援装置３１の動作説明に代える。
【００３８】
図３に示すように、最初に、リポジトリ情報照合部３１１が、コンパイルによって得られた各プログラムのリポジトリ情報に基づいて、呼出し元プログラムと呼出し先プログラムとを特定し、プログラム関係情報を作成する（ステップＡ１）。
【００３９】
本実施の形態では、リポジトリ情報照合部３１１は、リポジトリ情報Ａ１５と、リポジトリ情報Ｂ２５とを入力として、ＣＯＢＯＬプログラムＡ１１とＣＯＢＯＬプログラムＢ２１との間に、プログラム間連絡の関係があるかどうかを判定する。そして、リポジトリ情報照合部３１１は、判定結果をプログラム関係情報として、データ属性検証部３１２に出力する。
【００４０】
具体的には、リポジトリ情報照合部３１１は、リポジトリ情報Ａ１５内の呼び出されるプログラムの情報３２１のプログラム名３２１１が「ＣＯＢＯＬプログラムＡ」となり、リポジトリ情報Ｂ２５内の呼び出すプログラムの情報３２３のプログラム名３２３１が「ＣＯＢＯＬプログラムＡ」となっているかどうかを判定する。
【００４１】
または、リポジトリ情報照合部３１１は、リポジトリ情報Ａ１５内の呼び出すプログラムの情報３２３のプログラム名３２３１が「ＣＯＢＯＬプログラムＢ」となり、リポジトリ情報Ｂ２５内の呼び出されるプログラムの情報３２１のプログラム名３２１１が「ＣＯＢＯＬプログラムＢ」となっているかどうかを判定する。
【００４２】
そして、判定の結果、イエスである場合は、リポジトリ情報照合部３１１は、ＣＯＢＯＬプログラムＡとＣＯＢＯＬプログラムＢとの間には、プログラム間連絡の関係があると判断する。この場合、リポジトリ情報照合部３１１は、呼出し元プログラムと呼出し先プログラムとを特定し、特定結果に基づいて、図４に示すプログラム関係情報３１４を作成し、これを出力する。一方、判定の結果、ノーである場合は、リポジトリ情報照合部３１１は、プログラム間連絡の関係がないと判断する。
【００４３】
図４は、本発明の実施の形態において作成されるプログラム関係情報の一例を示す図である。図４に示すように、リポジトリ情報照合部３１１は、呼出し元プログラムのリポジトリ情報３２における、呼び出されるプログラムの情報３２１を、プログラム関係情報３１４の呼出し元プログラムの情報３３２として設定する。
【００４４】
また、リポジトリ情報照合部３１１は、呼出し元プログラムのリポジトリ情報３２に含まれる「呼び出すプログラムの情報」３２３のうち、プログラム名が呼出し先プログラムのそれと一致している情報を特定する。そして、図４に示すように、リポジトリ情報照合部３１１は、特定した情報の数を、呼出し先プログラムの個数３３４に設定する。更に、リポジトリ情報照合部３１１は、呼出し先プログラムの情報３３５には、この特定した情報を設定する。
【００４５】
また、図４に示すように、リポジトリ情報照合部３１１は、呼出し元プログラムのデータマップリストを特定し、その名称を呼出し元プログラムのデータマップ名３３１に設定する。更に、リポジトリ情報照合部３１１は、呼出し先プログラムのデータマップリストを特定し、その名称を、呼び出し先プログラムのデータマップリスト名３３３に設定する。
【００４６】
次に、ステップＡ１の実行後、データ属性検証部３１２は、プログラム関係情報３１４内の呼出し元プログラムの引数の個数３３２２が０（ゼロ）でないことを確認する。なお、０の場合は、データ属性検証部３１２は、処理を終了する。
【００４７】
そして、データ属性検証部３１２は、０でないことを確認すると、呼出し先プログラムのデータマップリスト名３３３に記述されたデータマップリストから、呼出し先プログラムの情報３３５に含まれる引数のデータ名３３５４にデータ名が一致している行を特定する（ステップＡ２）。
【００４８】
次に、データ属性検証部３１２は、特定した行から、レベル番号３１５２、データ名３１５３、データ属性３１５４、及びデータ項目長３１５５を抽出する（ステップＡ３）。そして、データ属性検証部３１２は、抽出した情報を用いて、図５に示す検証結果３１５を作成する。図５は、本発明の実施の形態において得られる検証結果の一例を示す図である。
【００４９】
次に、データ属性検証部３１２は、ステップＡ２で特定した行が集団項目に属しているかどかを、ステップＡ３で抽出されたレベル番号３１５２（図５参照）を用いて判定する（ステップＡ４）。ステップＡ４の判定の結果、ステップＡ２で特定した行が集団項目に属していない場合は、データ属性検証部３１２は、ステップＡ６を実行する。一方、ステップＡ４の判定の結果、ステップＡ２で特定した行が集団項目に属している場合は、データ属性検証部３１２は、ステップＡ５を実行する。
【００５０】
ステップＡ５では、データ属性検証部３１２は、ステップＡ２で特定した行に対して下位に位置する行から、レベル番号３１５２、データ名３１５３、データ属性３１５４、及びデータ項目長３１５５の抽出を実行する（ステップＡ５）。また、データ属性検証部３１２は、ステップＡ５で抽出した情報も、図５に示す検証結果３１５に記述する。
【００５１】
そして、データ属性検証部３１２は、ステップＡ３で抽出したレベル番号と同じレベル番号３１５２が出現するまで、又は、空行が出現するまで、ステップＡ５を実行する。また、本実施の形態では、データ属性検証部３１２は、ステップＡ２〜Ａ５の処理を、呼出し先プログラムの個数３３４の数だけ繰り返し実行する。
【００５２】
次に、データ属性検証部３１２は、図５に示す検証結果３１５と、図４に示す呼び出し元プログラムのデータマップリスト名３３１に記述されているデータマップリストとを用いて、データ属性について検証を行なう（ステップＡ６）。
【００５３】
具体的には、ステップＡ６では、データ属性検証部３１２は、検証結果３１５と呼出し元データマップリストとを、データ名が一致する行において比較し、検証結果３１５におけるデータ属性３１５４が、呼出し元データマップリストにおけるデータ属性と相違しているかどうかを判断する。そして、データ属性検証部３１２は、相違している場合は、検証結果３１５において、フラグ３１５１を「１」に設定する。
【００５４】
次に、データ属性検証部３１２は、図５に示す検証結果３１５と、図４に示す呼び出し元プログラムのデータマップリスト名３３１に記述されているデータマップリストとを用いて、データ項目長について検証を行なう（ステップＡ７）。
【００５５】
具体的には、ステップＡ６では、データ属性検証部３１２は、検証結果３１５と呼出し元データマップリストとを、データ名が一致する行において比較し、検証結果３１５におけるデータ項目長３１５５が、呼出し元データマップリストにおけるデータ項目長と相違しているかどうかを判断する。そして、データ属性検証部３１２は、相違している場合は、検証結果３１５において、フラグ３１５１を「２」に設定する。なお、データ属性検証部３１２は、図５の例では、検証結果３１５において、ステップＡ６及びＡ７のいずれにも該当しない行に対しては、「０（ゼロ）」を設定する。
【００５６】
ところで、ステップＡ６に加えて、ステップＡ７が実行されるのは、以下の理由による。まず、データ属性３１５４がポインタデータ項目の場合は、システムが３２ビット及び６４ビットのいずれであるかによってデータ項目長が相違する。そのため、ＣＯＢＯＬプログラマは、ＲＥＤＥＦＩＮＥＳ句によってデータ領域を再定義する場合等において、データ項目長に基づいて、データ割付境界、及び集団項目の長さを考慮する必要があるが、「２」のフラグを設定することにより、ＣＯＢＯＬプログラムにおける考慮が容易となる。
【００５７】
次に、データ表示部３１３は、データ属性検証部３１２による検証結果を表示装置４０の画面に表示する（ステップＡ８）。ステップＡ８の実行により、コンパイル支援装置３１における処理は一旦終了する。
【００５８】
具体的には、図６に示すように、データ表示部３１３は、プログラム間連絡時の呼出し先の引数のデータマップと呼出し元の引数のデータマップとを、対照的に表示装置４０の画面４１に表示する。また、図６の例では、データ表示部３１３は、検証結果３１５のフラグ３１５１が「１」のときは、該当する行を罫線で囲んで表示する。更に、データ表示部３１３は、検証結果３１５のフラグ３１５１が「２」のときは、該当する行の先頭にマークを表示する。
【００５９】
本実施の形態におけるプログラムは、コンピュータに、図３に示すステップＡ１〜Ａ８を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態におけるコンパイル支援装置３１とコンパイル支援方法とを実現することができる。この場合、コンピュータのＣＰＵ（Central Processing Unit）は、リポジトリ情報照合部３１１、データ属性検証部３１２、及びデータ表示部３１３として機能し、処理を行なう。また、本実施の形態では、プログラム関係情報（図４参照）、検証結果（図５）は、コンピュータに備えられた、メモリ、ハードディスク等の記憶装置に、格納される。
【００６０】
以上のように、本実施の形態によれば、プログラム間連絡時の引数が、集団項目に従属するデータ項目に記述されている場合であっても、プログラム間におけるデータの不適合が自動的に検出される。結果、ＣＯＢＯＬ資産をオープン環境へ移行する場合の人的手段による検証工数が削減される。
【００６１】
また、一般に、ＣＯＢＯＬプログラムが、ＣＯＢＯＬ言語以外で記述されたプログラムと連携する場合は、データ割付境界のデータ不整合により、目的プログラムの実行時にプログラム例外が発生することがある。これに対して、本実施の形態では、データ項目長の適合性も検証されるため、目的プログラム実行時のデータ不整合は、プログラム例外が発生する前に検証されることになる。
【００６２】
また、図１においては、図示していないが、ＣＯＢＯＬプログラムと、Ｃ言語などのＣＯＢＯＬ言語以外の他言語で記述されたプログラム（以下「多言語プログラム」と表記する。）とを連携させる場合は、コンパイル支援装置３１は、以下の態様であるのが好ましい。
【００６３】
具体的には、コンパイル支援装置３１は、多言語プログラムのヘッダファイルの宣言部分から、ＣＯＢＯＬのリポジトリへ情報を登録する機能と、他言語プログラムで生成したデータマップリストを解析する機能とを備えているのが好ましい。
【００６４】
また、コンパイル支援装置３１は、応用例として、開発環境ツールと連携して動作する態様であるのも好ましい。この態様では、データマップ表示だけでなく、データ属性が不適合となるプログラムソースの該当箇所をプログラムエディタで位置付けることも可能となる。
【００６５】
ここで、実施の形態におけるプログラムを実行することによって、コンパイル装置を実現するコンピュータについて図７を用いて説明する。図７は、本発明の実施の形態におけるコンパイル支援装置を実現するコンピュータの一例を示すブロック図である。
【００６６】
図７に示すように、コンピュータ１１０は、ＣＰＵ１１１と、メインメモリ１１２と、記憶装置１１３と、入力インターフェイス１１４と、表示コントローラ１１５と、データリーダ／ライタ１１６と、通信インターフェイス１１７とを備える。これらの各部は、バス１２１を介して、互いにデータ通信可能に接続される。
【００６７】
ＣＰＵ１１１は、記憶装置１１３に格納された、本実施の形態におけるプログラム（コード）をメインメモリ１１２に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ１１２は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体１２０に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス１１７を介して接続されたインターネット上で流通するものであっても良い。
【００６８】
また、記憶装置１１３の具体例としては、ハードディスクの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス１１４は、ＣＰＵ１１１と、キーボード及びマウスといった入力機器１１８との間のデータ伝送を仲介する。表示コントローラ１１５は、ディスプレイ装置１１９と接続され、ディスプレイ装置１１９での表示を制御する。データリーダ／ライタ１１６は、ＣＰＵ１１１と記録媒体１２０との間のデータ伝送を仲介し、記録媒体１２０からのプログラムの読み出し、及びコンピュータ１１０における処理結果の記録媒体１２０への書き込みを実行する。通信インターフェイス１１７は、ＣＰＵ１１１と、他のコンピュータとの間のデータ伝送を仲介する。
【００６９】
また、記録媒体１２０の具体例としては、ＣＦ（Compact Flash）及びＳＤ（Secure Digital）等の汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）等の磁気記憶媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記憶媒体が挙げられる。
【００７０】
上述した実施の形態の一部又は全部は、以下に記載する（付記１）〜（付記１２）によって表現することができるが、以下の記載に限定されるものではない。
【００７１】
（付記１）
ＣＯＢＯＬ言語で記述された第１のプログラムと、それによって呼び出される第２のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、装置であって、
データ属性検証部を備え
前記データ属性検証部は、
前記第２のプログラムをコンパイルして得られた第２のデータマップリストの中から、前記第２のプログラムの引数のデータ名と同一のデータ名を含む行を特定し、
特定した行からデータ名及びデータ属性を取り出し、
特定した行が集団項目に属する場合は、特定した行以降の同じ前記集団項目に属する行についても、データ名及びデータ属性を取り出し、
そして、前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が取り出した前記データ属性と一致しているかどうかを判定し、
判定の結果、一致していない場合に、そのことを示すフラグを設定する、
ことを特徴とするコンパイル支援装置。
【００７２】
（付記２）
前記データ属性検証部が、
特定した行と、特定した行以降の同じ前記集団項目に属する行とから、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、取り出した前記データ名とデータ名が同一の行において、当該行のデータ項目長が、取り出した前記データ項目長と一致しているかどうかも判定し、
判定の結果、データ項目長が一致しない場合は、そのことを示すフラグを設定する、
付記１に記載のコンパイル支援装置。
【００７３】
（付記３）
前記第１のデータマップリストの全部又は一部と、前記第２のデータマップリストの全部又は一部と、前記フラグの設定状況とを、画面に表示する、データ表示部を更に備えている、付記１または２に記載のコンパイル支援装置。
【００７４】
（付記４）
コンパイルが実行された複数のプログラムを対象にして、前記コンパイルによって得られた、複数のプログラムそれぞれのリポジトリ情報に基づいて、前記第１のプログラムと前記第２のプログラムとを特定する、リポジトリ情報照合部を、
更に備えている付記１〜３のいずれかに記載のコンパイル支援装置。
【００７５】
（付記５）
ＣＯＢＯＬ言語で記述された第１のプログラムと、それによって呼び出される第２のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、方法であって、
（ａ）前記第２のプログラムをコンパイルして得られた第２のデータマップリストの中から、前記第２のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
（ｂ）前記（ａ）のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
（ｃ）前記（ａ）のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
（ｄ）前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、前記（ｂ）又は（ｃ）のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記（ｂ）又は（ｃ）のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を有することを特徴とするコンパイル支援方法。
【００７６】
（付記６）
前記（ｂ）のステップにおいて、前記（ａ）のステップで特定した行から、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
前記（ｃ）のステップにおいて、前記（ａ）のステップで特定した行以降の同じ前記集団項目に属する行から、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
（ｅ）前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、前記（ｂ）又は（ｃ）のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ項目長が、前記（ｂ）又は（ｃ）のステップで取り出した前記データ項目長と一致しているかどうかを判定し、判定の結果、データ項目長が一致しない場合は、そのことを示すフラグを設定する、ステップを更に有する、
付記５に記載のコンパイル支援方法。
【００７７】
（付記７）
（ｆ）前記第１のデータマップリストの全部又は一部と、前記第２のデータマップリストの全部又は一部と、前記フラグの設定状況とを、画面に表示する、ステップを更に有している、付記５または６に記載のコンパイル支援方法。
【００７８】
（付記８）
（ｇ）コンパイルが実行された複数のプログラムを対象にして、前記コンパイルによって得られた、複数のプログラムそれぞれのリポジトリ情報に基づいて、前記第１のプログラムと前記第２のプログラムとを特定する、ステップを更に有している、
付記５〜７のいずれかに記載のコンパイル支援方法。
【００７９】
（付記９）
ＣＯＢＯＬ言語で記述された第１のプログラムと、それによって呼び出される第２のプログラムとのコンパイル後における、両者間の引数の適合の有無を、コンピュータによって判定するための、プログラムであって、
前記コンピュータに、
（ａ）前記第２のプログラムをコンパイルして得られた第２のデータマップリストの中から、前記第２のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
（ｂ）前記（ａ）のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
（ｃ）前記（ａ）のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
（ｄ）前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、前記（ｂ）又は（ｃ）のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記（ｂ）又は（ｃ）のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を実行させるプログラム。
【００８０】
（付記１０）
前記（ｂ）のステップにおいて、前記（ａ）のステップで特定した行から、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
前記（ｃ）のステップにおいて、前記（ａ）のステップで特定した行以降の同じ前記集団項目に属する行から、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
前記コンピュータに、
（ｅ）前記第１のプログラムをコンパイルして得られた第１のデータマップリスト中の、前記（ｂ）又は（ｃ）のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ項目長が、前記（ｂ）又は（ｃ）のステップで取り出した前記データ項目長と一致しているかどうかを判定し、判定の結果、データ項目長が一致しない場合は、そのことを示すフラグを設定する、ステップを更に実行させる、
付記９に記載のプログラム。
【００８１】
（付記１１）
前記コンピュータに、
（ｆ）前記第１のデータマップリストの全部又は一部と、前記第２のデータマップリストの全部又は一部と、前記フラグの設定状況とを、画面に表示する、ステップを更に実行させる、付記９または１０に記載のプログラム。
【００８２】
（付記１２）
前記コンピュータに、
（ｇ）コンパイルが実行された複数のプログラムを対象にして、前記コンパイルによって得られた、複数のプログラムそれぞれのリポジトリ情報に基づいて、前記第１のプログラムと前記第２のプログラムとを特定する、ステップを更に実行させる、
付記９〜１１のいずれかに記載のプログラム。
【産業上の利用可能性】
【００８３】
以上のように、本発明によれば、プログラム間連絡時の引数が、集団項目に従属するデータ項目に記述されている場合であっても、プログラム間におけるデータの不適合を自動的に検出することができる。本発明は、ＣＯＢＯＬ資産のマイグレーションの分野に適用でき、更に、システムのアーキテクチャ（３２ビットと６４ビット）依存を考慮する必要がある場合に有用である。
【符号の説明】
【００８４】
１１  ＣＯＢＯＬプログラムＡ
１２  ＣＯＢＯＬコンパイラ
１３  目的プログラムＡ
１４  データマップリストＡ
１５  リポジトリ情報Ａ
２１  ＣＯＢＯＬプログラムＡ
２３  目的プログラムＢ
２４  データマップリストＢ
２５  リポジトリ情報Ｂ
３１  コンパイル支援装置
４０  ディスプレイ装置
４１  画面
１１０  コンピュータ
１１１  ＣＰＵ
１１２  メインメモリ
１１３  記憶装置
１１４  入力インターフェイス
１１５  表示コントローラ
１１６  データリーダ／ライタ
１１７  通信インターフェイス
１１８  入力機器
１１９  ディスプレイ装置
１２０  記録媒体
１２１  バス
３１１  リポジトリ情報照合部
３１２  データ属性検証部
３１３  データ表示部
３１４  プログラム関係情報
３１５  検証結果
【図１】
0005464673.tif 000002
【図２】
0005464673.tif 000003
【図３】
0005464673.tif 000004
【図４】
0005464673.tif 000005
【図５】
0005464673.tif 000006
【図６】
0005464673.tif 000007
【図７】
0005464673.tif 000008