(57)【特許請求の範囲】
【請求項１】
プログラム言語にて記述されたソースプログラムを解析するプログラム解析装置において、
前記ソースプログラムが入力されると前記ソースプログラムから、分岐制御および反復制御を行う制御文と、記憶装置に格納されたファイルにアクセスする入出力文と、サブルーチンに含まれる文を特定するための１以上の句で構成されており少なくともサブルーチン名を含む手続き定義文と、サブルーチンを呼び出す手続き呼出文とを抽出し、抽出した文を前記ソースプログラムにおける出現順序に従って並べたプログラム基本構造を生成する構造抽出手段と、
前記構造抽出手段が生成した前記プログラム基本構造を操作して、前記手続き呼出文の呼出先のサブルーチンに含まれる文を、前記手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入したプログラム展開構造を生成する構造展開手段と、
前記構造展開手段が生成した前記プログラム展開構造から、前記入出力文と、前記制御文のうち前記入出力文を対象として前記反復制御を行う文とを選択し、選択しなかった文を前記プログラム展開構造から削除したアクセス構造を生成する削除手段と、
前記削除手段が生成した前記アクセス構造に基づいて、前記記憶装置に格納されたファイルへのアクセスの順序を示す情報を出力する出力手段と、
を有することを特徴とするプログラム解析装置。
【請求項２】
前記構造展開手段は、前記プログラム展開構造を生成する前に、前記入出力文および前記手続き呼出文のいずれも含まないサブルーチンに関して、前記手続き定義文および当該サブルーチンに含まれる文を前記プログラム基本構造から削除すると共に、呼出先のサブルーチンが前記プログラム展開構造から削除された前記手続き呼出文は、挿入の処理の対象から除外することを特徴とする請求項１記載のプログラム解析装置。
【請求項３】
前記構造展開手段は、
前記プログラム基本構造に含まれる前記手続き呼出文にて指定されるサブルーチン名を、サブルーチン名で示されるサブルーチンに関する前記手続き定義文および当該サブルーチンに含まれる全ての文のうちの、先頭の文の行番号に置き換える置換部と、
前記置換部による置き換えが行われた後に、前記手続き呼出文にて指定された行番号を用いて挿入すべき文を特定し、挿入の処理を行う挿入部と、
から構成されることを特徴とする請求項１記載のプログラム解析装置。
【請求項４】
前記出力手段は、ファイルへのアクセスの順序を示す情報として、プログラム言語にて記述された文のリストを出力することを特徴とする請求項１記載のプログラム解析装置。
【請求項５】
前記出力手段は、前記アクセス構造から、入出力の処理の実行順序とアクセス対象のファイルとの対応関係を表形式で表したアクセス表を生成し、生成した前記アクセス表をファイルへのアクセスの順序を示す情報として出力することを特徴とする請求項１記載のプログラム解析装置。
【請求項６】
プログラム受付手段と構造抽出手段と構造展開手段と削除手段と出力手段とを有し、プログラム言語にて記述されたソースプログラムを解析するプログラム解析装置によるプログラム解析方法において、
前記プログラム受付手段が、前記ソースプログラムの入力を受け付けるステップと、
前記構造抽出手段が、前記ソースプログラムから、分岐制御および反復制御を行う制御文と、記憶装置に格納されたファイルにアクセスする入出力文と、サブルーチンに含まれる文を特定するための１以上の句で構成されており少なくともサブルーチン名を含む手続き定義文と、サブルーチンを呼び出す手続き呼出文とを抽出し、抽出した文を前記ソースプログラムにおける出現順序に従って並べたプログラム基本構造を生成するステップと、
前記構造展開手段が、前記構造抽出手段が生成した前記プログラム基本構造を操作して、前記手続き呼出文の呼出先のサブルーチンに含まれる文を、前記手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入したプログラム展開構造を生成するステップと、
前記削除手段が、前記構造展開手段が生成した前記プログラム展開構造から、前記入出力文と、前記制御文のうち前記入出力文を対象として前記反復制御を行う文とを選択し、選択しなかった文を前記プログラム展開構造から削除したアクセス構造を生成するステップと、
前記出力手段が、前記削除手段が生成した前記アクセス構造に基づいて、前記記憶装置に格納されたファイルへのアクセスの順序を示す情報を出力するステップと、
を有することを特徴とするプログラム解析方法。
【請求項７】
コンピュータを、プログラム言語にて記述されたソースプログラムを解析するプログラム解析装置として機能させるためのソースプログラム解析用プログラムを記録したコンピュータ読み取り可能な記録媒体において、コンピュータを、
前記ソースプログラムの入力を受け付けるプログラム受付手段、
前記ソースプログラムが入力されると前記ソースプログラムから、分岐制御および反復制御を行う制御文と、記憶装置に格納されたファイルにアクセスする入出力文と、サブルーチンに含まれる文を特定するための１以上の句で構成されており少なくともサブルーチン名を含む手続き定義文と、サブルーチンを呼び出す手続き呼出文とを抽出し、抽出した文を前記ソースプログラムにおける出現順序に従って並べたプログラム基本構造を生成する構造抽出手段、
前記構造抽出手段が生成した前記プログラム基本構造を操作して、前記手続き呼出文の呼出先のサブルーチンに含まれる文を、前記手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入したプログラム展開構造を生成する構造展開手段、
前記構造展開手段が生成した前記プログラム展開構造から、前記入出力文と、前記制御文のうち前記入出力文を対象として前記反復制御を行う文とを選択し、選択しなかった文を前記プログラム展開構造から削除したアクセス構造を生成する削除手段、
前記削除手段が生成した前記アクセス構造に基づいて、前記記憶装置に格納されたファイルへのアクセスの順序を示す情報を出力する出力手段、
として機能させるためのソースプログラム解析用プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラム解析装置、プログラム解析方法及びコンピュータをプログラム解析装置として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体に関し、特にプログラム言語にて記述されたソースプログラムを解析するプログラム解析装置、プログラム言語にて記述されたソースプログラムを解析するプログラム解析方法及びコンピュータを、プログラム言語にて記述されたソースプログラムを解析するプログラム解析装置として機能させるためのソースプログラム解析用プログラムを記録したコンピュータ読み取り可能な記録媒体に関する。
【０００２】
【従来の技術】
データファイルとのアクセスを含むプログラムを実行する場合、その実行にかかる時間は、ファイルアクセスのための時間に左右されることが多い。このためデータファイルは、記憶装置の中でも同時にアクセスされる他のデータファイルと近い場所に格納されたり、アクセス頻度の高い順に速くアクセスできる場所に格納されたりする。
【０００３】
プログラムやデータファイルの量が増えるにつれ、ファイルの効率的な格納は難しくなる。そして、ファイルを効率的に格納し直したい場合には、その記憶装置にアクセスするすべてのプログラムが、どのような順番でどのファイルにアクセスするかを調べなければならない。従来この解析作業は、人間の手作業でのみ行っていた。
【０００４】
【発明が解決しようとする課題】
しかし、対象となるプログラムすべてを人間の手作業で解析し、そのアクセス状況を調べると、莫大な時間や費用がかかったり、正確性を欠いたりしてしまうという問題点があった。
【０００５】
本発明はこのような点に鑑みてなされたものであり、プログラムのソースファイルからファイルアクセスの状況を、正確に、かつ高速に、さらに人間が理解しやすいように出力するプログラム解析装置を提供することを目的とする。
【０００６】
また、本発明の他の目的は、プログラムのソースファイルからファイルアクセスの状況を、正確に、かつ高速に、さらに人間が理解しやすいように出力するプログラム解析方法を提供することである。
【０００７】
さらに、本発明の他の目的は、コンピュータを、プログラムのソースファイルからファイルアクセスの状況を、正確に、かつ高速に、さらに人間が理解しやすいように出力するプログラム解析装置として機能させるためのソースプログラム解析用プログラムを記録したコンピュータ読み取り可能な記録媒体を提供することである。
【０００８】
【課題を解決するための手段】
本発明では上記課題を解決するために、プログラム言語にて記述されたソースプログラムを解析するプログラム解析装置において、ソースプログラムが入力されるとソースプログラムから、分岐制御および反復制御を行う制御文と、記憶装置に格納されたファイルにアクセスする入出力文と、サブルーチンに含まれる文を特定するための１以上の句で構成されており少なくともサブルーチン名を含む手続き定義文と、サブルーチンを呼び出す手続き呼出文とを抽出し、抽出した文をソースプログラムにおける出現順序に従って並べたプログラム基本構造を生成する構造抽出手段と、構造抽出手段が生成したプログラム基本構造を操作して、手続き呼出文の呼出先のサブルーチンに含まれる文を、手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入したプログラム展開構造を生成する構造展開手段と、構造展開手段が生成したプログラム展開構造から、入出力文と、制御文のうち入出力文を対象として反復制御を行う文とを選択し、選択しなかった文をプログラム展開構造から削除したアクセス構造を生成する削除手段と、削除手段が生成したアクセス構造に基づいて、記憶装置に格納されたファイルへのアクセスの順序を示す情報を出力する出力手段と、を有することを特徴とするプログラム解析装置が提供される。
【０００９】
このようなプログラム解析装置で、プログラム言語にて記述されたソースプログラムを解析する場合、構造抽出手段が、入力されたソースプログラムから、制御文と入出力文と手続き定義文と手続き呼出文とを抽出し、プログラム基本構造を生成する。構造展開手段は、プログラム基本構造を操作して、手続き呼出文の呼出先のサブルーチンに含まれる文を、手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入してプログラム展開構造を生成する。削除手段は、プログラム展開構造から入出力文と入出力文を対象として反復制御を行う制御文とを選択し、選択しなかった文をプログラム展開構造から削除したアクセス構造を生成する。そして、出力手段はアクセス構造に基づいてファイルへのアクセスの順序を示す情報を出力する。
【００１０】
このようなプログラム解析装置にてソースプログラムを解析すると、ソースプログラム中に手続き呼出文が含まれている場合でも、その手続き順序に対応してアクセス状況を解析、出力することができる。
【００１１】
また、本発明では上記課題を解決するために、プログラム受付手段と構造抽出手段と構造展開手段と削除手段と出力手段とを有し、プログラム言語にて記述されたソースプログラムを解析するプログラム解析装置によるプログラム解析方法において、プログラム受付手段が、ソースプログラムの入力を受け付けるステップと、構造抽出手段が、ソースプログラムから、分岐制御および反復制御を行う制御文と、記憶装置に格納されたファイルにアクセスする入出力文と、サブルーチンに含まれる文を特定するための１以上の句で構成されており少なくともサブルーチン名を含む手続き定義文と、サブルーチンを呼び出す手続き呼出文とを抽出し、抽出した文をソースプログラムにおける出現順序に従って並べたプログラム基本構造を生成するステップと、構造展開手段が、構造抽出手段が生成したプログラム基本構造を操作して、手続き呼出文の呼出先のサブルーチンに含まれる文を、手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入したプログラム展開構造を生成するステップと、削除手段が、構造展開手段が生成したプログラム展開構造から、入出力文と、制御文のうち入出力文を対象として反復制御を行う文とを選択し、選択しなかった文をプログラム展開構造から削除したアクセス構造を生成するステップと、出力手段が、削除手段が生成したアクセス構造に基づいて、記憶装置に格納されたファイルへのアクセスの順序を示す情報を出力するステップと、を有することを特徴とするプログラム解析方法が提供される。
【００１２】
このようなプログラム解析方法にて、プログラム言語にて記述されたソースプログラムを解析する場合、まずソースプログラムの入力を受け付け、入力されたソースプログラムから、制御文と入出力文と手続き定義文と手続き呼出文とを抽出し、プログラム基本構造を生成する。次にプログラム基本構造を操作して、手続き呼出文の呼出先のサブルーチンに含まれる文を、手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入したプログラム展開構造を生成する。そしてプログラム展開構造から入出力文と入出力文を対象として反復制御を行う制御文とを選択し、選択しなかった文をプログラム展開構造から削除したアクセス構造を生成し、アクセス構造に基づいてファイルへのアクセスの順序を示す情報を出力する。
【００１３】
このようなプログラム解析方法にてソースプログラムを解析すると、ソースプログラム中に手続き呼出文が含まれている場合でも、その手続き順序に対応してアクセス状況を解析、出力することができる。
【００１４】
さらに、本発明では上記課題を解決するために、コンピュータを、プログラム言語にて記述されたソースプログラムを解析するプログラム解析装置として機能させるためのソースプログラム解析用プログラムを記録したコンピュータ読み取り可能な記録媒体において、コンピュータを、ソースプログラムの入力を受け付けるプログラム受付手段、ソースプログラムが入力されるとソースプログラムから、分岐制御および反復制御を行う制御文と、記憶装置に格納されたファイルにアクセスする入出力文と、サブルーチンに含まれる文を特定するための１以上の句で構成されており少なくともサブルーチン名を含む手続き定義文と、サブルーチンを呼び出す手続き呼出文とを抽出し、抽出した文をソースプログラムにおける出現順序に従って並べたプログラム基本構造を生成する構造抽出手段、構造抽出手段が生成したプログラム基本構造を操作して、手続き呼出文の呼出先のサブルーチンに含まれる文を、手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入したプログラム展開構造を生成する構造展開手段、構造展開手段が生成したプログラム展開構造から、入出力文と、制御文のうち入出力文を対象として反復制御を行う文とを選択し、選択しなかった文をプログラム展開構造から削除したアクセス構造を生成する削除手段、削除手段が生成したアクセス構造に基づいて、記憶手段に格納されたファイルへのアクセスの順序を示す情報を出力する出力手段、として機能させるためのソースプログラム解析用プログラムを記録したコンピュータ読み取り可能な記録媒体が提供される。
【００１５】
このような記録媒体に記録されたソースプログラム解析用プログラムにて、コンピュータを、プログラム言語にて記述されたソースプログラムを解析するプログラム解析装置として機能させる場合、コンピュータは、入力されたソースプログラムから、制御文と入出力文と手続き定義文と手続き呼出文とを抽出し、プログラム基本構造を生成する機能と、プログラム基本構造を操作して、手続き呼出文の呼出先のサブルーチンに含まれる文を、手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入したプログラム展開構造を生成する機能と、プログラム展開構造から入出力文と入出力文を対象として反復制御を行う制御文とを選択し、選択しなかった文をプログラム展開構造から削除したアクセス構造を生成する機能と、アクセス構造に基づいてファイルへのアクセスの順序を示す情報を出力する機能とを実現する。
【００１６】
このようなソースプログラム解析用プログラムを記録した記録媒体にてコンピュータをプログラム解析装置として機能させると、ソースプログラム中に手続き呼出文が含まれている場合でも、その手続き順序に対応してアクセス状況を解析、出力することができる。
【００１７】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、本発明のプログラム解析装置の原理構成を示したブロック図である。
【００１８】
本発明のプログラム解析装置は、プログラム受付手段２と、構造抽出手段３と、構造展開手段５と、削除手段７と、出力手段９とから構成される。
プログラム受付手段２は、プログラム言語にて記述されたソースプログラム１の入力を受け付ける。構造抽出手段３は、受け付けたソースプログラム１から、ソースプログラム１の制御構造を決定する文と入出力文と手続きとを抽出して、プログラム基本構造４を生成する。構造展開手段５は、プログラム基本構造４に、離れて記述された手続きを呼び出す手続き呼出部が含まれている場合に、その手続きを手続き呼出部の直後に挿入して、プログラム展開構造６を生成する。削除手段７は、プログラム展開構造６から入出力文に関与しない文を削除して、アクセス構造８を生成する。出力手段９は、生成されたアクセス構造８を出力する。
【００１９】
ここで構造展開手段５は、置換部５ａと、挿入部５ｂとから構成される。置換部５ａは、プログラムの制御構造を決定する文に含まれる手続き呼出にて指定される手続き名を、その手続き名の行番号に置き換える。そして、挿入部５ｂは、呼び出されている手続きを、手続き呼出の直後に挿入する。
【００２０】
なお、生成したアクセス構造８を出力手段９から出力する際、プログラム言語のまま出力する方法と、アクセス構造８からファイルアクセスの様子を示すアクセス表を生成して、このアクセス表を出力する方法とが選択できる。
【００２１】
このようなプログラム解析装置にてソースプログラム１の解析を行うと、ソースプログラム１の中に、離れた手続きを呼び出す手続き呼出が含まれている場合でも、その手続き順序に対応してアクセス状況を解析、出力することができる。
【００２２】
ここで、本発明のプログラム解析装置にて実際にプログラム解析を行う場合の解析の様子を、例を挙げて説明する。
図２〜図５は、ソースプログラム１の例を示す図である。
【００２３】
プログラム１０（１／４）〜プログラム１０（４／４）は、プログラム言語「ＣＯＢＯＬ」にて記述されている。プログラム１０の各行左側に添えてあるのは行番号で、プログラム１０が行番号「000100」〜行番号「014200」にて構成されていることが判る。
【００２４】
ここで、行番号「000200」〜「000300」は、プログラム１０全体の概要を示す見出し部１１である。見出し部１１に含まれた行番号「000300」の「PROFGRAM-ID PROG001 」にて、プログラム１０の名称「PROG001 」を宣言している。
【００２５】
行番号「000400」〜「001100」は、使用する計算機の機器構成やハードウェアに依存する内容を示す環境部１２であり、行番号「001200」〜「002900」は、手続き対象のデータやファイルの構造を示すデータ部１３である。そして、行番号「003100」以降が、実行すべき内容を示す手続き部１４である。なお、行番号の直後に「＊」が示してある文はコメント文である。
【００２６】
手続き部１４の中においてプログラム１０は細かく分かれている。すなわち、行番号「003100」〜「004200」は、このプログラム１０の主体部１４１である。また、行番号「004400」〜「005100」は、このプログラム１０の第１のサブルーチン１４２であって、名称「PROC-RTN」を持つ。行番号「005300」〜「007300」は、このプログラム１０の第２のサブルーチン１４３であって、名称「PROC-S-RTN」を持つ。以下同様に、行番号「007500」〜「008700」は、第３のサブルーチン１４４であって、名称「READ-F01-RTN」を持つ。また、行番号「008900」〜「010000」は、第４のサブルーチン１４５であって、名称「SEARCH-KYMD-RTN 」を持つ。行番号「010200」〜「012300」は、第５のサブルーチン１４６であって、名称「READ-MST-RTN」を持つ。行番号「012500」〜「013800」は、第６のサブルーチン１４７であって、名称「GET-YMD-RTN 」を持つ。そして、行番号「014000」〜「014100」は、第７のサブルーチン１４８であって、名称「DBECD-CLEAR 」を持つ。
【００２７】
このような構成のプログラム１０を本発明のプログラム解析装置にて解析する場合、まずプログラム受付手段２がプログラム１０を受け付ける。そして、受け付けられたプログラム１０から、構造抽出手段３が、プログラム１０の制御構造を決定する文と入出力文とサブルーチンとを抽出して、プログラム基本構造を生成する。
【００２８】
プログラム１０からプログラム基本構造２０を生成する場合、見出し部１１、環境部１２、データ部１３は抽出されない。また、コメント文やＤＩＳＰＬＡＹ（表示）文、ＭＯＶＥ（転記）文、算術文等も抽出されない。
【００２９】
図６、７は、図２〜図５にて示したプログラム１０から生成したプログラム基本構造を示した図である。
プログラム基本構造２０（１／２）〜プログラム基本構造２０（２／２）は、プログラムの主体部１４１から抽出された領域２１と、第１〜第７のサブルーチン１４２〜１４８から抽出された領域２２〜２８とから構成されている。
【００３０】
ここで領域２３は、プログラム１０の第２のサブルーチン１４３から、行番号「006000」〜「006200」のＭＯＶＥ文や、行番号「006400」〜「006800」のＭＯＶＥ文のみを含むＩＦ（条件）文以外の部分が抽出されて生成される。
【００３１】
同様に、領域２４は、第３のサブルーチン１４４から、行番号「007800」のＡＤＤ（加算）文や、行番号「008300」のＭＯＶＥ文以外の部分が抽出されて生成される。
【００３２】
領域２５は、第４のサブルーチン１４５から、行番号「009000」〜「010000」の変数Ｊを増加させるＰＥＲＦＯＲＭ（実行）文や、この変数Ｊが一定の条件を満たした時点でＭＯＶＥ文を実行するＩＦ文以外の部分が抽出されて生成される。
【００３３】
領域２６は、第５のサブルーチン１４６から、行番号「010700」や行番号「011800」のＭＯＶＥ文、行番号「012100」〜「012200」のＤＩＳＰＬＡＹ文以外の部分が抽出されて生成される。
【００３４】
領域２７は、第６のサブルーチン１４７から、行番号「013000」〜「013200」のＭＯＶＥ文及びＡＤＤ文、行番号「0013400 」〜「0013500 」のＤＩＳＰＬＡＹ文以外の部分が抽出されて生成される。
【００３５】
そして、領域２８は、第７のサブルーチン１４８から、行番号「014100」のＭＯＶＥ文以外の部分が抽出されて生成される。
生成されたプログラム基本構造２０は次に、構造展開手段５にて、離れて記述された手続きを呼び出す手続き呼出部が含まれている場合に、その手続きを手続き呼出部の直後に挿入されて、プログラム展開構造６が生成される。
【００３６】
但し、構造展開手段５には、プログラム基本構造中の手続き呼出にて指定される手続き名をその手続き名の行番号に置き換える置換部５ａと、行番号を含んだ手続き呼出の直後にその行番号の手続きを挿入する挿入部５ｂとから構成されている。そこで、まず置換部５ａにてプログラム第１展開構造が生成される様子を説明した後、挿入部５ｂにてプログラム第２展開構造が生成される様子を説明する。このプログラム第２展開構造がプログラム展開構造６にあたる。
【００３７】
図８、９は、図２〜図５にて示したプログラム１０から生成されたプログラム第１展開構造の様子を示した図である。
図において、プログラム第１展開構造３０（１／２）〜プログラム第１展開構造３０（２／２）は、プログラム基本構造２０の領域２１に含まれた手続き呼出にて指定された手続き名をその手続き名の行番号に置き換えた領域３１と、領域２２〜２８を同様に置き換えた領域３２〜３８とから構成されている。
【００３８】
ここで、領域３１では、領域２１の行番号「003700」の「PERFORM DBECD-CREAR.」が、「PERFORM SEQ-014000. 」に置き換えられている。これは、行番号「014000」に名称「DBECD-CREAR 」のサブルーチンが存在するためである。同様に行番号「003800」の「PERFORM PROC-RTN. 」が、「PERFORM SEQ-004400. 」に置き換えられている。なお、「SEQ-」にて行番号を示す。
【００３９】
領域３２では、領域２２の行番号「004500」の「PERFORM READ-F01-RTN THRU READ-F01-EXIT.」が「PERFORM SEQ-007500 THRU SEQ-008700. 」に、行番号「004700」の「PERFORM PROC-S-RTN THRU PROC-S-EXIT.」が「PERFORM SEQ-005300 THRU SEQ-007300. 」に、さらに行番号「005100」の「PERFORM DBECD-CREAR.」が「PERFORM SEQ-014000. 」に、置き換えられている。
【００４０】
領域３３では、領域２３の行番号「005400」の「PERFORM READ-MST-RTN THRU READ-MST-EXIT.」が「PERFORM SEQ-010200 THRU SEQ-012300. 」に、行番号「005600」の「GO TO PROC-S-001. 」が「GO TO SEQ-007100. 」に置き換えられている。また、行番号「006300」の「PERFORM SEARCH-KYMD-RTN.」が「PERFORM SEQ-008900. 」に、行番号「007200」の「PERFORM READ-F01-RTN THRU READ-F01-EXIT.」が「PERFORM SEQ-007500 THRU SEQ-008700. 」に置き換えられている。
【００４１】
領域３４では、領域２４の行番号「007700」の「AT END GO TO READ-F01-EXIT. 」が「AT END GO TO SEQ-008700.」に、行番号「008400」の「GO TO READ-F01-EXIT.」が「GO TO SEQ-008700. 」に、行番号「008600」の「GO TO READ-F01-RTN. 」が「GO TO SEQ-007500. 」に置き換えられている。
【００４２】
領域３５では、置き換えはない。
領域３６では、行番号「010400」の「AT END GO TO READ-MST-ERR.」が「AT END GO TO SEQ-012000.」に、行番号「0010600 」の「AT END GO TO READ-MST-ERR.」が「AT END GO TO SEQ-012000.」に置き換えられている。また、行番号「011000」の「GO TO READ-MST-ERR. 」が「GO TO SEQ-012000. 」に、行番号「011200」の「AT END GO TO READ-MST-ERR.」が「AT END GO TO SEQ-012000.」に、行番号「011400」の「AT END GO TO READ-MST-ERR.」が「AT END GO TO SEQ-012000.」に置き換えられている。さらに、行番号「011600」の「PERFORM GET-YMD-RTN THRU GET-YMD-END. 」が「PERFORM SEQ-012500THRU SEQ-013800.」に、行番号「011900」の「GO TO READ-MYST-EXIT. 」が「GO TO SEQ-012300. 」に置き換えられている。
【００４３】
領域３７では、行番号「012700」の「AT END GO TO GET-YMD-END. 」が「AT END GO TO SEQ-013800.」に、行番号「012900」の「GO TO GET-YMD-RTN.」が「GO TO SEQ-012500. 」に置き換えられている。また、行番号「013600」の「GO TO GET-YMD-END.」が「GO TO GET SEQ-013800. 」に、行番号「013700」の「GO TO GET-YMD-RTN.」が「GO TO SEQ-012500. 」に置き換えられている。
【００４４】
そして、領域３８では、置き換えはない。
ここで、各領域に含まれる手続き呼出を確認しておく。
領域３１に含まれる手続き呼出は、行番号「003700」の「PERFORM SEQ-014000. 」と、行番号「003800」の「PERFORM SEQ-004400. 」である。なお、この領域３１に含まれた行番号「003200」の「START-001.」は、他からの呼出のない段落名であるので、以降の処理では不要である。よって、この時点で削除する。
【００４５】
領域３２に含まれる手続き呼出は、行番号「004500」の「PERFORM SEQ-007500 THRU SEQ-008700. 」、行番号「004700」の「PERFORM SEQ-005300 THRU SEQ-007300. 」、及び行番号「005100」の「PERFORM SEQ-014000. 」である。
【００４６】
領域３３に含まれる手続き呼出は、行番号「005400」の「PERFORM SEQ-010200 THRU SEQ-012300. 」、行番号「006300」の「PERFORM SEQ-008900. 」、及び行番号「007200」の「PERFORM SEQ-007500 THRU SEQ-008700. 」である。
【００４７】
領域３４にはＧＯＴＯ（飛び越し）文や入出力文は含まれているが、手続き呼出は含まれていない。
なお、領域３５には手続き呼出も入出力文も含まれておらず、以降の処理では不要である。よって、領域３５はこの時点で削除する。
【００４８】
領域３６に含まれる手続き呼出は、行番号「011600」の「PERFORM SEQ-012500 THRU SEQ-013800. 」である。
領域３７には、ＧＯＴＯ文や入出力文は含まれているが、手続き呼出は含まれていない。
【００４９】
なお、領域３８には手続き呼出も入出力文も含まれておらず、以降の処理では不要である。よって、領域３８はこの時点で削除する。
図１０、１１は、構造展開手段５の挿入部５ｂにて、図８、９にて示したプログラム第１展開構造３０からプログラム第２展開構造４０が生成された様子を示した図である。
【００５０】
図において、プログラム第２展開構造４０（１／２）〜プログラム第２展開構造４０（２／２）は、プログラム第１展開構造３０に含まれた手続き呼出の直後に、呼び出されている手続きを挿入した構成となっている。
【００５１】
なお、ここでは挿入の繰り返しにより処理の流れが不明瞭になるのを防ぐために、展開番号という項目を設けてある。これは、新たに手続きを挿入する度に、その手続きによる処理の流れに逐次番号を付加していくもので、最初は展開番号０１である。この流れの途中で手続き呼出があり、手続きを挿入した場合、その手続きには展開番号０２を付加する。また、展開番号０２の途中でさらに手続き呼出があったり、展開番号０２の処理が終了して展開番号０１の処理の再開中に別の手続き呼出があったりした場合には、展開番号０３、０４・・・を付加していく。また、ここでは、手続き呼出を意味している行に「＊」を付加して、その他の行と区別してある。
【００５２】
まず行番号「003700」の「PERFORM SEQ-014000. 」であるが、行番号「014000」の手続きは削除されており、存在しない。よって、挿入は行われない。
次に、行番号「003800」の「PERFORM SEQ-004400. 」及び行番号「003900」にの「UNTIL DBSCB=01」に基づいて、この直後に行番号「004400」の「PROC-RTN. 」以下が挿入される。以降、展開番号０２が付加される。
【００５３】
展開番号０２の流れでは、行番号「004500」の「PERFORM SEQ-007500 THRU SEQ-008700. 」が手続き呼出を意味しているので、この直後に行番号「007500」の「READ-F01-RTN. 」以下が挿入されている。以降、展開番号０３が付加される。
【００５４】
展開番号０３の流れには手続き呼出は存在しないので、行番号「008700」までで、この流れは終了する。展開番号０２の流れに戻ると、行番号「004700」の「PERFORM SEQ-005300 THRU SEQ-007300. 」及び行番号「004800」の「UNTIL DBSCB=01」が、手続き呼出を意味している。よって、この直後に行番号「005300」の「PROC-S-RTN. 」以下が挿入される。以降、展開番号０４が付加される。
【００５５】
展開番号０４の流れでは、行番号「005400」の「PERFORM SEQ-010200 THRU SEQ-012300. 」が手続き呼出を意味しているので、この直後に行番号「010200」の「READ-MST-RTN. 」以下が挿入される。以降、展開番号０５が付加される。
【００５６】
展開番号０５の流れでは、行番号「011600」の「PERFORM SEQ-012500 THRU SEQ-013800. 」が手続き呼出を意味しているので、この直後に行番号「012500」の「GET-YMD-RTN.」以下が挿入される。以降、展開番号０６が付加される。
【００５７】
展開番号０６の流れには手続き呼出は存在しないので、行番号「013800」までで、この流れは終了する。展開番号０５の流れに戻ると、ここにもこれ以上の手続き呼出は存在しないので、行番号「012300」までで、この流れは終了する。
【００５８】
展開番号０４の流れに戻ると、行番号「006300」の「PERFORM SEQ-008900. 」が手続き呼出を意味している。しかし、行番号「008900」の手続きは削除されており、存在しない。よって、挿入は行われない。
【００５９】
次に、行番号「007200」の「PERFORM SEQ-007500 THRU SEQ-008700. 」が手続き呼出を意味しているので、この直後に行番号「007500」の「READ-F01-RTN. 」以下が挿入される。以降、展開番号０７が付加される。
【００６０】
展開番号０７の流れには手続き呼出は存在しないので、行番号「008700」までで、この流れは終了する。展開番号０４の流れに戻ると、ここにもこれ以上の手続き呼出は存在しないので、行番号「007300」までで、この流れは終了する。
【００６１】
展開番号０２の流れに戻ると、行番号「005100」の「PERFORM SEQ-014000. 」が手続き呼出を意味している。しかし、行番号「014000」の手続きは削除されており、存在しない。よって、挿入は行われない。
【００６２】
展開番号０１の流れに戻ると、これ以上の手続き呼出は存在しないので、行番号「004200」までで、この流れは終了する。
このようにして、構造展開手段５にてプログラム第２展開構造４０が生成される。生成されたプログラム第２展開構造４０は次に、削除手段７にて入出力に関与しない文を削除される。なお、入出力に関与するのは、データベースファイルとのアクセスを意味するＧＥＴ文、ＷＲＩＴＥ（書込み）文、ＲＥＡＤ（読込み）文、及びこれらの文の繰り返しを意味する文である。
【００６３】
図１２は、図２〜図５に示されたプログラム１０から生成したアクセス構造を示した図である。
アクセス構造５０には、新たに相対番号が付加される。行番号「003500」は、ＧＥＴ文なので残され、相対番号「 001」を付加されている。相対番号「 002」のＰＥＲＦＯＲＭ文及び相対番号「 025」のＥＮＤ−ＰＥＲＦＩＲＭ文は、プログラム１０の行番号「003800」〜「003900」が意味していた処理の繰り返しに相当する。
【００６４】
行番号「007500」は、ＧＥＴ文を含んだサブルーチンの名称を示しているので残され、相対番号「 003」を付加されている。行番号「007600」はＧＥＴ文なので残され、相対番号「 004」を付加されている。行番号「008600」は、行番号「007600」のＧＥＴ文の繰り返しを意味するＧＯＴＯ文なので残され、相対番号「 005」を付加されている。相対番号「 006」のＰＥＲＦＯＲＭ文及び相対番号「 023」のＥＮＤ−ＰＥＲＦＩＲＭ文は、プログラム１０の行番号「004700」〜「004800」が意味していた処理の繰り返しに相当する。
【００６５】
行番号「010200」は、ＧＥＴ文を含んだサブルーチンの名称を示しているので残され、相対番号「 007」を付加されている。行番号「010300」、「010500」、「010800」、「011100」、「011300」は、ＧＥＴ文なので残され、相対番号「 008」、「 009」、「 010」、「 011」、「 012」を付加されている。
【００６６】
行番号「012500」は、ＧＥＴ文を含んだサブルーチンの名称を示しているので残され、相対番号「 013」を付加されている。行番号「012600」はＧＥＴ文なので残され、相対番号「 014」を付加されている。行番号「012900」及び「013700」は、どちらも行番号「012600」のＧＥＴ文の繰り返しを意味するＧＯＴＯ文なので残され、相対番号「 015」及び「 016」を付加されている。相対番号「 017」のＰＥＲＦＯＲＭ文及び相対番号「 019」のＥＮＤ−ＰＥＲＦＩＲＭ文は、プログラム１０の行番号「005700」〜「007000」が意味していた処理の繰り返しに相当する。
【００６７】
行番号「007500」は、ＧＥＴ文を含んだサブルーチンの名称を示しているので残され、相対番号「 020」を付加されている。行番号「007600」はＧＥＴ文なので残され、相対番号「 021」を付加されている。行番号「008600」は、行番号「007600」のＧＥＴ文の繰り返しを意味するＧＯＴＯ文なので残され、相対番号「 022」を付加されている。そして、行番号「004900」はＧＥＴ文なので残され、相対番号「 024」を付加されている。
【００６８】
このようなアクセス構造５０から、プログラム「ＰＲＯＧ１」のファイルアクセスの状況が判る。
すなわち、相対番号「 001」より、まずファイル「Ｆ０２」の最初のデータが読み込まれることが判る。以下、ここで読み込まれるファイル「Ｆ０２」の最初のデータを、説明のため、「データＡ１」とする。
【００６９】
次に、相対番号「 002」〜「 004」より、ファイル「Ｆ０１」とのアクセスが行われ、先にファイル「Ｆ０２」から読み込まれたデータ「データＡ１」に関連するデータが存在すれば、そのデータが読み込まれることが判る。データの読込みは、に関連するデータがすべて読み込まれるまで繰り返される。以下、ここで「データＡ１」に関連して読み込まれるファイル「Ｆ０１」のデータを、「データＢ１１」、「データＢ１２」・・・「データＢ１Ｘ」とする。
次に、相対番号「 008」により、ファイル「Ｆ０４」とのアクセスが行われ、先にファイル「Ｆ０１」から読み込まれたデータ「データＢ１１」の親にあたるデータが読み込まれることが判る。以下、ここで「データＢ１１」の親として読み込まれるファイル「Ｆ０４」のデータを、「データＣ１１」とする。
【００７０】
相対番号「 009」により、ファイル「Ｆ０５」とのアクセスが行われ、先にファイル「Ｆ０２」から読み込まれた「データＡ１」の親にあたるデータが読み込まれることが判る。以下、ここで「データＡ１」の親として読み込まれるファイル「Ｆ０５」のデータを、「データＤ１」とする。
【００７１】
相対番号「 010」により、ファイル「Ｆ０６」とのアクセスが行われ、インデックスを指定してデータが読み込まれることが判る。以下、ここで読み込まれるファイル「Ｆ０６」のデータを、「データＥｋ」とする。
【００７２】
相対番号「 011」により、ファイル「Ｆ０７」とのアクセスが行われ、先にファイル「Ｆ０６」から読み込まれた「データＥｋ」の親にあたるデータが読み込まれることが判る。以下、ここで「データＥｋ」の親として読み込まれるファイル「Ｆ０７」のデータを、「データＦｋ」とする。
【００７３】
相対番号「 012」により、ファイル「Ｆ０８」とのアクセスが行われ、先にファイル「Ｆ０６」から読み込まれた「データＥｋ」の親にあたるデータが読み込まれることが判る。以下、ここで「データＥｋ」の親として読み込まれるファイル「Ｆ０８」のデータを、「データＧｋ」とする。
【００７４】
相対番号「 013」〜「 016」により、ファイル「Ｆ０３」とのアクセスが行われ、先にファイル「Ｆ０１」から読み込まれた「データＢ１１」に関連するデータが存在すれば、そのデータが読み込まれることが判る。データの読込みは、関連するデータがすべて読み込まれるまで繰り返される。以下、ここで「データＢ１１」に関連して読み込まれるファイル「Ｆ０３」のデータを、「データＨ１１１」、「データＨ１１２」・・・「データＨ１１Ｘ」とする。
【００７５】
相対番号「 017」〜「 019」により、ファイル「Ｓ０１」とのアクセスが行われ、インデックスを指定してデータが書き込まれることが判る。データの書き込みは、必要に応じて繰り返される。
【００７６】
相対番号「 020」〜「 022」により、ファイル「Ｆ０１」とのアクセスが行われ、先にファイル「Ｆ０２」から読み込まれた「データＡ１」に関連するデータが存在すれば、そのデータが読み込まれることが判る。ここで読み込まれるデータは、「データＢ１１」、「データＢ１２」・・・「データＢ１Ｘ」である。
【００７７】
相対番号「 023」により、相対番号「 006」以下の流れに再度進むことが判る。すなわち、「データＢ１１」に関する処理が終了したので、次は「データＢ１２」に関する処理が行われる。相対番号「 006」〜「 023」の処理は、「データＢ１Ｘ」に関する処理が終了するまで繰り返される。
【００７８】
相対番号「 024」〜「 025」により、ファイル「Ｆ０２」の次のデータが読み込まれ、相対番号「 002」以下の流れに再度進むことが判る。すなわち、「データＡ１」に関する処理が終了したので、次はファイル「Ｆ０２」に含まれた次のデータである「データＡ２」に関する処理が行われる。相対番号「 002」〜「 025」の処理は、ファイル「Ｆ０２」のすべてのデータに関する処理が終了するまで繰り返される。
【００７９】
このように、本発明のプログラム解析装置ではソースプログラムからアクセス構造が出力できるので、ファイルアクセスの状況を解析することができる。また、本発明ではアクセス構造を表形式で出力することもできる。
【００８０】
図１３は、図２〜図５に示されたプログラム１０から生成した表形式のアクセス構造を示した図である。
アクセス構造６０では、横軸にファイル名を記載し、縦軸で処理の流れを意味するようにして、アクセス構造を表形式で表わしている。繰り返し処理は矢印等で示せばよい。また、ファイルアクセスを意味する文を添付することで、必要に応じて修正の手掛かりとすることができる。
【００８１】
本発明のプログラム解析装置では、このようにファイルアクセスの状況を表形式で表わすことができるので、プログラム形式のアクセス構造だけでは把握しづらいようなプログラムに関しても解析が容易となる。
【００８２】
以上説明したように、本発明のプログラム解析装置では、プログラム中に、離れた手続きを呼び出す手続き呼出が含まれている場合でも、その手続き順序に対応してアクセス状況を解析、出力することが可能である。
【００８３】
また、この解析結果は正確かつ高速に、さらに人間が理解しやすいように出力されるので、この解析結果をファイルの統廃合等を行う際の指針とすることができる。
【００８４】
図１４は、本発明のプログラム解析装置にて解析されたファイルのアクセス状況の解析結果を３例、示した図である。
解析結果７１は、プログラム「ＰＲＯＧ００１」のファイルアクセス状況を、解析結果７２は、プログラム「ＰＲＯＧ００２」のファイルアクセス状況を、解析結果７３は、プログラム「ＰＲＯＧ００３」のファイルアクセス状況を、表形式で示している。
【００８５】
解析結果７１により、プログラム「ＰＲＯＧ００１」は、ファイル「Ｆ０２」のレコードを読み込んだ後、ファイル「Ｆ０１」の関連するレコードを読み、さらにファイル「Ｆ０１」から読み込んだレコードの親レコードをファイル「Ｆ０３」から読み込むという処理を繰り返すことが判る。
【００８６】
また、解析結果７２の内容が解析結果７２の内容と同一であることから、プログラム「ＰＲＯＧ００２」がプログラム「ＰＲＯＧ００１」と同様の処理を繰り返すことが判る。
【００８７】
さらに、解析結果７３により、プログラム「ＰＲＯＧ００３」は、ファイル「Ｆ０４」のレコードを指定に従って読み込むことが判る。
つまり、プログラム「ＰＲＯＧ００１」、「ＰＲＯＧ００２」、「ＰＲＯＧ００３」に関してのみ考えると、ファイル「Ｆ０３」は独立して読み込まれることはなく、必ずファイル「Ｆ０１」との関連に基づいて読み込まれている。従って、他に支障がなければファイル「Ｆ０３」をファイル「Ｆ０１」に統合してしまった方が、各プログラムのファイルへのアクセス回数を、減少させることができる。
【００８８】
また、ファイル「Ｆ０４」は、特に他のファイルと関連して読み込まれることはない。従って、他に支障がなければ、セット情報を意識させずに、独立したファイルとして記憶装置に格納させることができる。
【００８９】
このように、本発明のプログラム解析装置にて、プログラムによるファイルのアクセス状況を解析し、その結果を人間に判りやすいように出力することで、記憶装置内のデータファイル整理等の指針とすることができる。
【００９０】
なお、上記の説明では、本発明のプログラム解析装置をプログラム言語「ＣＯＢＯＬ」で記述されたソースプログラムに適用した例を示したが、「ＣＯＢＯＬ」以外のプログラム言語で記述されたソースプログラムに対しても本発明のプログラム解析装置は適用可能である。
【００９１】
【発明の効果】
以上説明したように、本発明のプログラム解析装置には、ソースプログラム中に手続き呼出文が含まれている場合に、サブルーチンに含まれる文を手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入する構造展開手段と、入出力文に関与しない文を削除する削除手段とを設けたので、ソースプログラム中に、手続き呼出文が含まれている場合でも、その手続き順序に対応してアクセス状況を解析、出力することができる。
【００９２】
また、本発明のプログラム解析方法では、ソースプログラム中に手続き呼出文が含まれている場合に、サブルーチンに含まれる文を手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入するので、ソースプログラム中に、手続き呼出文が含まれている場合でも、その手続き順序に対応してアクセス状況を解析、出力することができる。
【００９３】
さらに、本発明のコンピュータをプログラム解析装置として機能させるためのプログラムを格納したソースプログラム解析用プログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータを、ソースプログラム中に手続き呼出文が含まれている場合に、サブルーチンに含まれる文を手続き呼出文とサブルーチンからの復帰直後に実行される位置にある文との間に挿入する構造展開手段及び入出力文に関与しない文を削除する削除手段として機能させるので、ソースプログラム中に、手続き呼出文が含まれている場合でも、その手続き順序に対応してアクセス状況を解析、出力することができる。
【図面の簡単な説明】
【図１】本発明のプログラム解析装置の原理構成を示したブロック図である。
【図２】ソースプログラムの例を示す図（その１）である。
【図３】ソースプログラムの例を示す図（その２）である。
【図４】ソースプログラムの例を示す図（その３）である。
【図５】ソースプログラムの例を示す図（その４）である。
【図６】図２〜図５にて示したプログラムから生成したプログラム基本構造を示した図（その１）である。
【図７】図２〜図５にて示したプログラムから生成したプログラム基本構造を示した図（その２）である。
【図８】図２〜図５にて示したプログラムから生成されたプログラム第１展開構造の様子を示した図（その１）である。
【図９】図２〜図５にて示したプログラムから生成されたプログラム第１展開構造の様子を示した図（その２）である。
【図１０】図８、９にて示したプログラム第１展開構造からプログラム第２展開構造が生成された様子を示した図（その１）である。
【図１１】図８、９にて示したプログラム第１展開構造からプログラム第２展開構造が生成された様子を示した図（その２）である。
【図１２】図２〜図５に示されたプログラムから生成したアクセス構造を示した図である。
【図１３】図２〜図５に示されたプログラムから生成した表形式のアクセス構造を示した図である。
【図１４】本発明のプログラム解析装置にて解析されたファイルのアクセス状況の解析結果を３例、示した図である。
【符号の説明】
１  ソースプログラム
２  プログラム受付手段
３  構造抽出手段
４  プログラム基本構造
５  構造展開手段
５ａ  置換部
５ｂ  挿入部
６  プログラム展開構造
７  削除手段
８  アクセス構造
９  出力手段
【図１】
0003970373.tif 000002
【図２】
0003970373.tif 000003
【図３】
0003970373.tif 000004
【図４】
0003970373.tif 000005
【図５】
0003970373.tif 000006
【図６】
0003970373.tif 000007
【図７】
0003970373.tif 000008
【図８】
0003970373.tif 000009
【図９】
0003970373.tif 000010
【図１０】
0003970373.tif 000011
【図１１】
0003970373.tif 000012
【図１２】
0003970373.tif 000013
【図１３】
0003970373.tif 000014
【図１４】
0003970373.tif 000015