説明

コンパイル支援装置、コンパイル支援方法、及びプログラム

【課題】プログラム間連絡時の引数が、集団項目に従属するデータ項目に記述されている場合であっても、プログラム間におけるデータの不適合を自動的に検出し得る、コンパイル支援装置、コンパイル支援方法、及びプログラムを提供する。
【解決手段】第1のプログラム(COBOLプログラム)と呼び出される第2のプログラムとのコンパイル後の引数の適合の有無を判定するため、コンパイル支援装置31のデータ属性検証部は、第2のプログラムのデータマップリストの中から、第2のプログラムの引数のデータ名と同一のデータ名を含む行を特定して、データ名及びデータ属性を取り出し、行が集団項目の場合は同じ集団項目の行からデータ名及びデータ属性を取り出し、第1のプログラムのデータマップリスト中の、取り出したデータ名とデータ名が同一の行において、データ属性が取り出したデータ属性との一致の有無を判定し、一致していない場合にフラグを設定する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンパイルされたプログラム間の連絡に用いられる引数の適合性を判定するための、コンパイル支援装置、コンパイル支援方法、及びこれらを実現するためのプログラムに関する。
【背景技術】
【0002】
COBOL言語には、事務処理を行なう上で欠かせない機能が数多く備えられており、COBOL言語を用いれば、事務処理系のプログラムを効率良く開発できる。このため、ソフトウェア市場における開発言語において、COBOL言語のシェアは、今なお約20%を占めている。
【0003】
一方、近年、企業等においては、COBOL言語で構築されたレガシーシステムをオープンシステムへ移行するレガシーマイグレーションが盛んに行われている。このレガシーマイグレーションの実行方法の一つとしては、過去のCOBOL資産を流用せず、JAVA(登録商標)等のオープン系技術を使って全面的に再構築することが提案されているが、この場合は、膨大な開発期間とコストとが必要になる。
【0004】
このため、COBOLコンパイラを用いて、COBOL言語で記述されたソースコード(以下「COBOLプログラム」とも言う。)を、オープンシステム上で実行可能なコードに書き換えることに注目が集まっている(例えば、特許文献1参照。)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2010−086218号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、ハードウェア及びOSのアーキテクチャにおいて、COBOL製品には、固有仕様が存在するため、コンパイル後の検証において多大な工数が必要となる場合がある。
【0007】
具体的には、コンパイル時に得られるリポジトリ情報は、集団項目に従属するデータ項目の定義を含まないため、通常、COBOLコンパイラによって、コンパイル時に、プログラム間連絡における引数の適合の有無を自動的に検出することは困難である。この結果、適切な引数が設定されているかどうかは、人的手段による検証によって行なわなければならず、多大な工数が必要となる。
【0008】
本発明の目的の一例は、上記問題を解消し、プログラム間連絡時の引数が、集団項目に従属するデータ項目に記述されている場合であっても、プログラム間におけるデータの不適合を自動的に検出し得る、コンパイル支援装置、コンパイル支援方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【0009】
上記目的を達成するため、本発明の一側面におけるコンパイル支援装置は、COBOL言語で記述された第1のプログラムと、それによって呼び出される第2のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、装置であって、
データ属性検証部を備え、
前記データ属性検証部は、
前記第2のプログラムをコンパイルして得られた第2のデータマップリストの中から、前記第2のプログラムの引数のデータ名と同一のデータ名を含む行を特定し、
特定した行からデータ名及びデータ属性を取り出し、
特定した行が集団項目に属する場合は、特定した行以降の同じ前記集団項目に属する行についても、データ名及びデータ属性を取り出し、
そして、前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が取り出した前記データ属性と一致しているかどうかを判定し、
判定の結果、一致していない場合に、そのことを示すフラグを設定する、
ことを特徴とする。
【0010】
また、上記目的を達成するため、本発明の一側面におけるコンパイル支援方法は、COBOL言語で記述された第1のプログラムと、それによって呼び出される第2のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、方法であって、
(a)前記第2のプログラムをコンパイルして得られた第2のデータマップリストの中から、前記第2のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
(b)前記(a)のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
(c)前記(a)のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
(d)前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、前記(b)又は(c)のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記(b)又は(c)のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を有することを特徴とする。
【0011】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、COBOL言語で記述された第1のプログラムと、それによって呼び出される第2のプログラムとのコンパイル後における、両者間の引数の適合の有無を、コンピュータによって判定するための、プログラムであって、
前記コンピュータに、
(a)前記第2のプログラムをコンパイルして得られた第2のデータマップリストの中から、前記第2のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
(b)前記(a)のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
(c)前記(a)のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
(d)前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、前記(b)又は(c)のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記(b)又は(c)のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を実行させることを特徴とする。
【発明の効果】
【0012】
以上のように本発明によれば、プログラム間連絡時の引数が、集団項目に従属するデータ項目に記述されている場合であっても、プログラム間におけるデータの不適合を自動的に検出することができる。
【図面の簡単な説明】
【0013】
【図1】図1は、本発明の実施の形態におけるコンパイル支援装置の構成を示すブロック図である。
【図2】図2は、本発明の実施の形態において用いられるリポジトリ情報の一例を示す図である。
【図3】図3は、本発明の実施の形態におけるコンパイル支援装置の動作を示すフロー図である。
【図4】図4は、本発明の実施の形態において作成されるプログラム関係情報の一例を示す図である。
【図5】図5は、本発明の実施の形態において得られる検証結果の一例を示す図である。
【図6】図6は、本発明の実施の形態において表示装置に表示される画面の一例を示す図である。
【図7】図7は、本発明の実施の形態におけるコンパイル支援装置を実現するコンピュータの一例を示すブロック図である。
【発明を実施するための形態】
【0014】
(実施の形態)
以下、本発明の実施の形態における、コンパイル支援装置、コンパイル支援方法、及びプログラムについて、図1〜図7を参照しながら説明する。
【0015】
[装置構成]
最初に、本発明の実施の形態におけるコンパイル支援装置の構成について図1を用いて説明する。図1は、本発明の実施の形態におけるコンパイル支援装置の構成を示すブロック図である。
【0016】
図1に示す本実施の形態におけるコンパイル支援装置31は、COBOL言語で記述されたプログラムと、それによって呼び出されるプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための装置である。
【0017】
以降の説明において、COBOL言語で記述されたプログラムは「COBOLプログラム」と表記する。また、他のプログラムを呼び出すプログラムを「呼出し元プログラム」と表記する場合がある。更に、呼出し元プログラムによって読み出されるプログラムを「呼出し先プログラム」と表記する場合もある。
【0018】
図1に示すように、コンパイル支援装置31は、データ属性検証部312を備えている。データ属性検証部312は、まず、呼出し先プログラムをコンパイルして得られたデータマップリスト(以下、「呼出し先データマップリスト」と表記する。)の中から、呼出し先プログラムの引数のデータ名と同一のデータ名を含む行を特定する。
【0019】
次いで、特定した行からデータ名及びデータ属性を取り出す。更に、データ属性検証部312は、特定した行が集団項目に属する場合は、呼出し先データマップリストにおいて、特定した行以降の同じ集団項目に属する行についても、データ名及びデータ属性を取り出す。このとき、取り出されたデータ名とデータ属性とは、行毎に管理される。
【0020】
そして、データ属性検証部312は、呼出し元プログラムをコンパイルして得られたデータマップリスト(以下、「呼出し元データマップリスト」と表記する。)中の、先に取り出したいずれかのデータ名とデータ名が同一の行を特定する。更に、データ属性検証部312は、特定した行のデータ属性が、先に取り出したデータ名と同じ行から取り出されたデータ属性と一致しているかどうかを判定する。
【0021】
その後、判定の結果、一致していない場合は、データ属性検証部312は、そのことを示すフラグを設定する。本実施の形態において、フラグは、呼出し元データマップリストから取り出され、且つ判定の対象となったデータ名及びデータ属性に対して設定される。
【0022】
このように、本実施の形態では、呼出し先プログラムにおいて、引数が記述されているデータ項目が集団項目である場合は、その下位に従属するデータ項目についても、データ属性の検証対象となる。よって、本実施の形態によれば、プログラム間連絡時の引数が、集団項目に従属するデータ項目に記述されている場合であっても、プログラム間におけるデータの不適合が自動的に検出される。
【0023】
ここで、本実施の形態におけるコンパイル支援装置31の構成を更に具体的に説明する。図1に示すように、本実施の形態では、COBOLプログラムA11とCOBOLプログラムB21とが、データ属性の検証対象となり、これらのうち一方が、呼出し元プログラムとなり、他方が呼出し先プログラムになるとする。COBOLプログラムA11とCOBOLプログラムB21とは、COBOLコンパイラ12によってコンパイルされる。
【0024】
具体的には、COBOLコンパイラ12は、COBOLプログラムA11を入力として、目的プログラムA13と、データマップリストA14と、リポジトリ情報A15とを出力する。同様に、COBOLコンパイラ12は、COBOLプログラムB21を入力として、目的プログラムB23と、データマップリストB24と、リポジトリ情報B25とを出力する。
【0025】
データマップリストA14、及びデータマップリストB24は、それぞれ、対応するCOBOLプログラムの行毎に、レベル番号、データ名、データ属性、項目長、相対アドレスといった識別情報を有している。
【0026】
また、リポジトリ情報A15、及びリポジトリ情報B25は、それぞれ、図2に示すリポジトリ情報32と同様に、多数の要素情報を有している。図2は、本発明の実施の形態において用いられるリポジトリ情報の一例を示す図である。
【0027】
図2に示すように、リポジトリ情報32は、それが付随しているCOBOLプログラム、言い換えると、リポジトリ情報32によって呼び出されるプログラム(以下、「呼び出されるプログラム」と表記する。)の情報321を含む。即ち、リポジトリ情報32が、リポジトリ情報A15であれば、呼び出されるプログラムは、COBOLプログラムAとなる。また、リポジトリ情報32は、それが付随しているCOBOLプログラムが呼び出すプログラム(以下、「呼び出すプログラム」と表記する。)の情報の個数322と、「呼び出すプログラム」の情報323とを更に含む。
【0028】
呼び出されるプログラムの情報321は、COBOLコンパイラ12によって、COBOLプログラムの手続き部と連絡節との記述内容に基づいて設定される。呼び出されるプログラムの情報は、プログラム名3211、引数の個数3212、引数のデータ名3214、引数のデータ属性3215、引数のデータ項目長3216を含む。
【0029】
呼び出すプログラムの情報323は、呼び出すプログラムの個数322が0(ゼロ)より大きい場合に、COBOLコンパイラ12によって、COBOLプログラム(呼び出されるプログラム)のCALL文の引数の記述内容に基づいて、設定される。呼び出すプログラムの情報323は、プログラム名3231、引数の個数3232、引数のデータ名3234、引数のデータ属性3235、引数のデータ項目長3236を含む。
【0030】
また、図1に示すように、本実施の形態では、コンパイル支援装置31は、データ属性検証部311に加えて、リポジトリ情報照合部311と、データ表示部313とを備えている。また、コンパイル支援装置31には、液晶表示装置等のディスプレイ装置40が接続されている。
【0031】
リポジトリ情報照合部311は、コンパイルが実行された複数のプログラムを対象にして、コンパイルによって得られた、複数のプログラムそれぞれのリポジトリ情報に基づいて、呼出し元プログラムと呼出し先プログラムとを特定する。
【0032】
具体的には、本実施の形態では、リポジトリ情報照合部311は、各プログラムの図2に示したリポジトリ情報32を用いて、呼出し元プログラムと呼出し先プログラムとが特定されたプログラム関係情報を作成し、これをデータ属性検証部312に出力する。データ属性検証部312は、プログラム関係情報を用いて、データ属性の検証を実行する。プログラム関係情報の具体例については、図4を用いて後述する。
【0033】
また、本実施の形態では、データ属性検証部312は、呼出し先データマップリストの中から特定した行と、特定した行以降の同じ集団項目に属する行とから、データ名及びデータ属性に加えて、データ項目長を更に取り出すことができる。
【0034】
この場合、データ属性検証部312は、呼出し元データマップリスト中の、先に取り出したいずれかのデータ名とデータ名が同一の行において、当該行のデータ項目長が、先に取り出したデータ名と同じ行から取り出されたデータ項目長と一致しているかどうかも判定する。また、データ属性検証部312は、データ項目長についての判定の結果、データ項目長が一致しない場合も、そのことを示すフラグを設定する。
【0035】
更に、本実施の形態では、データ属性検証部312は、検証の結果を「検証結果」としてまとめる。検証結果には、呼出し元データマップリストから取り出された、データ名、データ属性、及びデータ項目長に加え、設定された各種フラグも記述されている。検証結果の具体例については、図5を用いて後述する。
【0036】
また、データ表示部313は、呼出し元データマップリストの全部又は一部と、呼出し先データマップリストの全部又は一部と、フラグの設定状況とを、表示装置40の画面41に表示する。表示される画面41の具体例については、図6を用いて後述する。
【0037】
[装置動作]
次に、本発明の実施の形態におけるコンパイル支援装置31の動作について図3を用いて説明する。図3は、本発明の実施の形態におけるコンパイル支援装置の動作を示すフロー図である。以下の説明においては、適宜図1及び図2を参酌する。また、本実施の形態では、コンパイル支援装置31を動作させることによって、コンパイル支援方法が実施される。よって、本実施の形態におけるコンパイル支援方法の説明は、以下のコンパイル支援装置31の動作説明に代える。
【0038】
図3に示すように、最初に、リポジトリ情報照合部311が、コンパイルによって得られた各プログラムのリポジトリ情報に基づいて、呼出し元プログラムと呼出し先プログラムとを特定し、プログラム関係情報を作成する(ステップA1)。
【0039】
本実施の形態では、リポジトリ情報照合部311は、リポジトリ情報A15と、リポジトリ情報B25とを入力として、COBOLプログラムA11とCOBOLプログラムB21との間に、プログラム間連絡の関係があるかどうかを判定する。そして、リポジトリ情報照合部311は、判定結果をプログラム関係情報として、データ属性検証部312に出力する。
【0040】
具体的には、リポジトリ情報照合部311は、リポジトリ情報A15内の呼び出されるプログラムの情報321のプログラム名3211が「COBOLプログラムA」となり、リポジトリ情報B25内の呼び出すプログラムの情報323のプログラム名3231が「COBOLプログラムA」となっているかどうかを判定する。
【0041】
または、リポジトリ情報照合部311は、リポジトリ情報A15内の呼び出すプログラムの情報323のプログラム名3231が「COBOLプログラムB」となり、リポジトリ情報B25内の呼び出されるプログラムの情報321のプログラム名3211が「COBOLプログラムB」となっているかどうかを判定する。
【0042】
そして、判定の結果、イエスである場合は、リポジトリ情報照合部311は、COBOLプログラムAとCOBOLプログラムBとの間には、プログラム間連絡の関係があると判断する。この場合、リポジトリ情報照合部311は、呼出し元プログラムと呼出し先プログラムとを特定し、特定結果に基づいて、図4に示すプログラム関係情報314を作成し、これを出力する。一方、判定の結果、ノーである場合は、リポジトリ情報照合部311は、プログラム間連絡の関係がないと判断する。
【0043】
図4は、本発明の実施の形態において作成されるプログラム関係情報の一例を示す図である。図4に示すように、リポジトリ情報照合部311は、呼出し元プログラムのリポジトリ情報32における、呼び出されるプログラムの情報321を、プログラム関係情報314の呼出し元プログラムの情報332として設定する。
【0044】
また、リポジトリ情報照合部311は、呼出し元プログラムのリポジトリ情報32に含まれる「呼び出すプログラムの情報」323のうち、プログラム名が呼出し先プログラムのそれと一致している情報を特定する。そして、図4に示すように、リポジトリ情報照合部311は、特定した情報の数を、呼出し先プログラムの個数334に設定する。更に、リポジトリ情報照合部311は、呼出し先プログラムの情報335には、この特定した情報を設定する。
【0045】
また、図4に示すように、リポジトリ情報照合部311は、呼出し元プログラムのデータマップリストを特定し、その名称を呼出し元プログラムのデータマップ名331に設定する。更に、リポジトリ情報照合部311は、呼出し先プログラムのデータマップリストを特定し、その名称を、呼び出し先プログラムのデータマップリスト名333に設定する。
【0046】
次に、ステップA1の実行後、データ属性検証部312は、プログラム関係情報314内の呼出し元プログラムの引数の個数3322が0(ゼロ)でないことを確認する。なお、0の場合は、データ属性検証部312は、処理を終了する。
【0047】
そして、データ属性検証部312は、0でないことを確認すると、呼出し先プログラムのデータマップリスト名333に記述されたデータマップリストから、呼出し先プログラムの情報335に含まれる引数のデータ名3354にデータ名が一致している行を特定する(ステップA2)。
【0048】
次に、データ属性検証部312は、特定した行から、レベル番号3152、データ名3153、データ属性3154、及びデータ項目長3155を抽出する(ステップA3)。そして、データ属性検証部312は、抽出した情報を用いて、図5に示す検証結果315を作成する。図5は、本発明の実施の形態において得られる検証結果の一例を示す図である。
【0049】
次に、データ属性検証部312は、ステップA2で特定した行が集団項目に属しているかどかを、ステップA3で抽出されたレベル番号3152(図5参照)を用いて判定する(ステップA4)。ステップA4の判定の結果、ステップA2で特定した行が集団項目に属していない場合は、データ属性検証部312は、ステップA6を実行する。一方、ステップA4の判定の結果、ステップA2で特定した行が集団項目に属している場合は、データ属性検証部312は、ステップA5を実行する。
【0050】
ステップA5では、データ属性検証部312は、ステップA2で特定した行に対して下位に位置する行から、レベル番号3152、データ名3153、データ属性3154、及びデータ項目長3155の抽出を実行する(ステップA5)。また、データ属性検証部312は、ステップA5で抽出した情報も、図5に示す検証結果315に記述する。
【0051】
そして、データ属性検証部312は、ステップA3で抽出したレベル番号と同じレベル番号3152が出現するまで、又は、空行が出現するまで、ステップA5を実行する。また、本実施の形態では、データ属性検証部312は、ステップA2〜A5の処理を、呼出し先プログラムの個数334の数だけ繰り返し実行する。
【0052】
次に、データ属性検証部312は、図5に示す検証結果315と、図4に示す呼び出し元プログラムのデータマップリスト名331に記述されているデータマップリストとを用いて、データ属性について検証を行なう(ステップA6)。
【0053】
具体的には、ステップA6では、データ属性検証部312は、検証結果315と呼出し元データマップリストとを、データ名が一致する行において比較し、検証結果315におけるデータ属性3154が、呼出し元データマップリストにおけるデータ属性と相違しているかどうかを判断する。そして、データ属性検証部312は、相違している場合は、検証結果315において、フラグ3151を「1」に設定する。
【0054】
次に、データ属性検証部312は、図5に示す検証結果315と、図4に示す呼び出し元プログラムのデータマップリスト名331に記述されているデータマップリストとを用いて、データ項目長について検証を行なう(ステップA7)。
【0055】
具体的には、ステップA6では、データ属性検証部312は、検証結果315と呼出し元データマップリストとを、データ名が一致する行において比較し、検証結果315におけるデータ項目長3155が、呼出し元データマップリストにおけるデータ項目長と相違しているかどうかを判断する。そして、データ属性検証部312は、相違している場合は、検証結果315において、フラグ3151を「2」に設定する。なお、データ属性検証部312は、図5の例では、検証結果315において、ステップA6及びA7のいずれにも該当しない行に対しては、「0(ゼロ)」を設定する。
【0056】
ところで、ステップA6に加えて、ステップA7が実行されるのは、以下の理由による。まず、データ属性3154がポインタデータ項目の場合は、システムが32ビット及び64ビットのいずれであるかによってデータ項目長が相違する。そのため、COBOLプログラマは、REDEFINES句によってデータ領域を再定義する場合等において、データ項目長に基づいて、データ割付境界、及び集団項目の長さを考慮する必要があるが、「2」のフラグを設定することにより、COBOLプログラムにおける考慮が容易となる。
【0057】
次に、データ表示部313は、データ属性検証部312による検証結果を表示装置40の画面に表示する(ステップA8)。ステップA8の実行により、コンパイル支援装置31における処理は一旦終了する。
【0058】
具体的には、図6に示すように、データ表示部313は、プログラム間連絡時の呼出し先の引数のデータマップと呼出し元の引数のデータマップとを、対照的に表示装置40の画面41に表示する。また、図6の例では、データ表示部313は、検証結果315のフラグ3151が「1」のときは、該当する行を罫線で囲んで表示する。更に、データ表示部313は、検証結果315のフラグ3151が「2」のときは、該当する行の先頭にマークを表示する。
【0059】
本実施の形態におけるプログラムは、コンピュータに、図3に示すステップA1〜A8を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態におけるコンパイル支援装置31とコンパイル支援方法とを実現することができる。この場合、コンピュータのCPU(Central Processing Unit)は、リポジトリ情報照合部311、データ属性検証部312、及びデータ表示部313として機能し、処理を行なう。また、本実施の形態では、プログラム関係情報(図4参照)、検証結果(図5)は、コンピュータに備えられた、メモリ、ハードディスク等の記憶装置に、格納される。
【0060】
以上のように、本実施の形態によれば、プログラム間連絡時の引数が、集団項目に従属するデータ項目に記述されている場合であっても、プログラム間におけるデータの不適合が自動的に検出される。結果、COBOL資産をオープン環境へ移行する場合の人的手段による検証工数が削減される。
【0061】
また、一般に、COBOLプログラムが、COBOL言語以外で記述されたプログラムと連携する場合は、データ割付境界のデータ不整合により、目的プログラムの実行時にプログラム例外が発生することがある。これに対して、本実施の形態では、データ項目長の適合性も検証されるため、目的プログラム実行時のデータ不整合は、プログラム例外が発生する前に検証されることになる。
【0062】
また、図1においては、図示していないが、COBOLプログラムと、C言語などのCOBOL言語以外の他言語で記述されたプログラム(以下「多言語プログラム」と表記する。)とを連携させる場合は、コンパイル支援装置31は、以下の態様であるのが好ましい。
【0063】
具体的には、コンパイル支援装置31は、多言語プログラムのヘッダファイルの宣言部分から、COBOLのリポジトリへ情報を登録する機能と、他言語プログラムで生成したデータマップリストを解析する機能とを備えているのが好ましい。
【0064】
また、コンパイル支援装置31は、応用例として、開発環境ツールと連携して動作する態様であるのも好ましい。この態様では、データマップ表示だけでなく、データ属性が不適合となるプログラムソースの該当箇所をプログラムエディタで位置付けることも可能となる。
【0065】
ここで、実施の形態におけるプログラムを実行することによって、コンパイル装置を実現するコンピュータについて図7を用いて説明する。図7は、本発明の実施の形態におけるコンパイル支援装置を実現するコンピュータの一例を示すブロック図である。
【0066】
図7に示すように、コンピュータ110は、CPU111と、メインメモリ112と、記憶装置113と、入力インターフェイス114と、表示コントローラ115と、データリーダ/ライタ116と、通信インターフェイス117とを備える。これらの各部は、バス121を介して、互いにデータ通信可能に接続される。
【0067】
CPU111は、記憶装置113に格納された、本実施の形態におけるプログラム(コード)をメインメモリ112に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ112は、典型的には、DRAM(Dynamic Random Access Memory)等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体120に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス117を介して接続されたインターネット上で流通するものであっても良い。
【0068】
また、記憶装置113の具体例としては、ハードディスクの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス114は、CPU111と、キーボード及びマウスといった入力機器118との間のデータ伝送を仲介する。表示コントローラ115は、ディスプレイ装置119と接続され、ディスプレイ装置119での表示を制御する。データリーダ/ライタ116は、CPU111と記録媒体120との間のデータ伝送を仲介し、記録媒体120からのプログラムの読み出し、及びコンピュータ110における処理結果の記録媒体120への書き込みを実行する。通信インターフェイス117は、CPU111と、他のコンピュータとの間のデータ伝送を仲介する。
【0069】
また、記録媒体120の具体例としては、CF(Compact Flash)及びSD(Secure Digital)等の汎用的な半導体記憶デバイス、フレキシブルディスク(Flexible Disk)等の磁気記憶媒体、又はCD−ROM(Compact Disk Read Only Memory)などの光学記憶媒体が挙げられる。
【0070】
上述した実施の形態の一部又は全部は、以下に記載する(付記1)〜(付記12)によって表現することができるが、以下の記載に限定されるものではない。
【0071】
(付記1)
COBOL言語で記述された第1のプログラムと、それによって呼び出される第2のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、装置であって、
データ属性検証部を備え
前記データ属性検証部は、
前記第2のプログラムをコンパイルして得られた第2のデータマップリストの中から、前記第2のプログラムの引数のデータ名と同一のデータ名を含む行を特定し、
特定した行からデータ名及びデータ属性を取り出し、
特定した行が集団項目に属する場合は、特定した行以降の同じ前記集団項目に属する行についても、データ名及びデータ属性を取り出し、
そして、前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が取り出した前記データ属性と一致しているかどうかを判定し、
判定の結果、一致していない場合に、そのことを示すフラグを設定する、
ことを特徴とするコンパイル支援装置。
【0072】
(付記2)
前記データ属性検証部が、
特定した行と、特定した行以降の同じ前記集団項目に属する行とから、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、取り出した前記データ名とデータ名が同一の行において、当該行のデータ項目長が、取り出した前記データ項目長と一致しているかどうかも判定し、
判定の結果、データ項目長が一致しない場合は、そのことを示すフラグを設定する、
付記1に記載のコンパイル支援装置。
【0073】
(付記3)
前記第1のデータマップリストの全部又は一部と、前記第2のデータマップリストの全部又は一部と、前記フラグの設定状況とを、画面に表示する、データ表示部を更に備えている、付記1または2に記載のコンパイル支援装置。
【0074】
(付記4)
コンパイルが実行された複数のプログラムを対象にして、前記コンパイルによって得られた、複数のプログラムそれぞれのリポジトリ情報に基づいて、前記第1のプログラムと前記第2のプログラムとを特定する、リポジトリ情報照合部を、
更に備えている付記1〜3のいずれかに記載のコンパイル支援装置。
【0075】
(付記5)
COBOL言語で記述された第1のプログラムと、それによって呼び出される第2のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、方法であって、
(a)前記第2のプログラムをコンパイルして得られた第2のデータマップリストの中から、前記第2のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
(b)前記(a)のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
(c)前記(a)のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
(d)前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、前記(b)又は(c)のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記(b)又は(c)のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を有することを特徴とするコンパイル支援方法。
【0076】
(付記6)
前記(b)のステップにおいて、前記(a)のステップで特定した行から、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
前記(c)のステップにおいて、前記(a)のステップで特定した行以降の同じ前記集団項目に属する行から、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
(e)前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、前記(b)又は(c)のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ項目長が、前記(b)又は(c)のステップで取り出した前記データ項目長と一致しているかどうかを判定し、判定の結果、データ項目長が一致しない場合は、そのことを示すフラグを設定する、ステップを更に有する、
付記5に記載のコンパイル支援方法。
【0077】
(付記7)
(f)前記第1のデータマップリストの全部又は一部と、前記第2のデータマップリストの全部又は一部と、前記フラグの設定状況とを、画面に表示する、ステップを更に有している、付記5または6に記載のコンパイル支援方法。
【0078】
(付記8)
(g)コンパイルが実行された複数のプログラムを対象にして、前記コンパイルによって得られた、複数のプログラムそれぞれのリポジトリ情報に基づいて、前記第1のプログラムと前記第2のプログラムとを特定する、ステップを更に有している、
付記5〜7のいずれかに記載のコンパイル支援方法。
【0079】
(付記9)
COBOL言語で記述された第1のプログラムと、それによって呼び出される第2のプログラムとのコンパイル後における、両者間の引数の適合の有無を、コンピュータによって判定するための、プログラムであって、
前記コンピュータに、
(a)前記第2のプログラムをコンパイルして得られた第2のデータマップリストの中から、前記第2のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
(b)前記(a)のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
(c)前記(a)のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
(d)前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、前記(b)又は(c)のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記(b)又は(c)のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を実行させるプログラム。
【0080】
(付記10)
前記(b)のステップにおいて、前記(a)のステップで特定した行から、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
前記(c)のステップにおいて、前記(a)のステップで特定した行以降の同じ前記集団項目に属する行から、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
前記コンピュータに、
(e)前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、前記(b)又は(c)のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ項目長が、前記(b)又は(c)のステップで取り出した前記データ項目長と一致しているかどうかを判定し、判定の結果、データ項目長が一致しない場合は、そのことを示すフラグを設定する、ステップを更に実行させる、
付記9に記載のプログラム。
【0081】
(付記11)
前記コンピュータに、
(f)前記第1のデータマップリストの全部又は一部と、前記第2のデータマップリストの全部又は一部と、前記フラグの設定状況とを、画面に表示する、ステップを更に実行させる、付記9または10に記載のプログラム。
【0082】
(付記12)
前記コンピュータに、
(g)コンパイルが実行された複数のプログラムを対象にして、前記コンパイルによって得られた、複数のプログラムそれぞれのリポジトリ情報に基づいて、前記第1のプログラムと前記第2のプログラムとを特定する、ステップを更に実行させる、
付記9〜11のいずれかに記載のプログラム。
【産業上の利用可能性】
【0083】
以上のように、本発明によれば、プログラム間連絡時の引数が、集団項目に従属するデータ項目に記述されている場合であっても、プログラム間におけるデータの不適合を自動的に検出することができる。本発明は、COBOL資産のマイグレーションの分野に適用でき、更に、システムのアーキテクチャ(32ビットと64ビット)依存を考慮する必要がある場合に有用である。
【符号の説明】
【0084】
11 COBOLプログラムA
12 COBOLコンパイラ
13 目的プログラムA
14 データマップリストA
15 リポジトリ情報A
21 COBOLプログラムA
23 目的プログラムB
24 データマップリストB
25 リポジトリ情報B
31 コンパイル支援装置
40 ディスプレイ装置
41 画面
110 コンピュータ
111 CPU
112 メインメモリ
113 記憶装置
114 入力インターフェイス
115 表示コントローラ
116 データリーダ/ライタ
117 通信インターフェイス
118 入力機器
119 ディスプレイ装置
120 記録媒体
121 バス
311 リポジトリ情報照合部
312 データ属性検証部
313 データ表示部
314 プログラム関係情報
315 検証結果

【特許請求の範囲】
【請求項1】
COBOL言語で記述された第1のプログラムと、それによって呼び出される第2のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、装置であって、
データ属性検証部を備え、
前記データ属性検証部は、
前記第2のプログラムをコンパイルして得られた第2のデータマップリストの中から、前記第2のプログラムの引数のデータ名と同一のデータ名を含む行を特定し、
特定した行からデータ名及びデータ属性を取り出し、
特定した行が集団項目に属する場合は、特定した行以降の同じ前記集団項目に属する行についても、データ名及びデータ属性を取り出し、
そして、前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が取り出した前記データ属性と一致しているかどうかを判定し、
判定の結果、一致していない場合に、そのことを示すフラグを設定する、
ことを特徴とするコンパイル支援装置。
【請求項2】
前記データ属性検証部が、
特定した行と、特定した行以降の同じ前記集団項目に属する行とから、データ名及びデータ属性に加えて、データ項目長を更に取り出し、
前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、取り出した前記データ名とデータ名が同一の行において、当該行のデータ項目長が、取り出した前記データ項目長と一致しているかどうかも判定し、
判定の結果、データ項目長が一致しない場合は、そのことを示すフラグを設定する、
請求項1に記載のコンパイル支援装置。
【請求項3】
前記第1のデータマップリストの全部又は一部と、前記第2のデータマップリストの全部又は一部と、前記フラグの設定状況とを、画面に表示する、データ表示部を更に備えている、請求項1または2に記載のコンパイル支援装置。
【請求項4】
コンパイルが実行された複数のプログラムを対象にして、前記コンパイルによって得られた、複数のプログラムそれぞれのリポジトリ情報に基づいて、前記第1のプログラムと前記第2のプログラムとを特定する、リポジトリ情報照合部を、
更に備えている請求項1〜3のいずれかに記載のコンパイル支援装置。
【請求項5】
COBOL言語で記述された第1のプログラムと、それによって呼び出される第2のプログラムとのコンパイル後における、両者間の引数の適合の有無を判定するための、方法であって、
(a)前記第2のプログラムをコンパイルして得られた第2のデータマップリストの中から、前記第2のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
(b)前記(a)のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
(c)前記(a)のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
(d)前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、前記(b)又は(c)のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記(b)又は(c)のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を有することを特徴とするコンパイル支援方法。
【請求項6】
COBOL言語で記述された第1のプログラムと、それによって呼び出される第2のプログラムとのコンパイル後における、両者間の引数の適合の有無を、コンピュータによって判定するための、プログラムであって、
前記コンピュータに、
(a)前記第2のプログラムをコンパイルして得られた第2のデータマップリストの中から、前記第2のプログラムの引数のデータ名と同一のデータ名を含む行を特定する、ステップと、
(b)前記(a)のステップで特定した行からデータ名及びデータ属性を取り出す、ステップと、
(c)前記(a)のステップで特定した行が集団項目に属する場合に、特定した行以降の同じ前記集団項目に属する行について、データ名及びデータ属性を取り出す、ステップと、
(d)前記第1のプログラムをコンパイルして得られた第1のデータマップリスト中の、前記(b)又は(c)のステップで取り出した前記データ名とデータ名が同一の行において、当該行のデータ属性が、前記(b)又は(c)のステップで取り出した前記データ属性と一致しているかどうかを判定し、判定の結果、一致していない場合に、そのことを示すフラグを設定する、ステップと、
を実行させるプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2013−45247(P2013−45247A)
【公開日】平成25年3月4日(2013.3.4)
【国際特許分類】
【出願番号】特願2011−181865(P2011−181865)
【出願日】平成23年8月23日(2011.8.23)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.COMPACTFLASH
【出願人】(390001395)NECシステムテクノロジー株式会社 (438)
【Fターム(参考)】