(第1の実施の形態)
図1に示されるように、本発明の第1の実施の形態による構造解析装置10は、装置本体20と、記憶装置(記憶手段)30と、入力装置40と、表示装置50とを備えている。構造解析装置10は、プログラム言語によって記述された1以上の文からなるモジュール(ソースプログラム)の構造解析を行うものである。
本実施の形態によるプログラム言語はCOBOLである。しかしながら、本発明はCOBOL以外のプログラム言語にも適用可能である。
本実施の形態によるモジュールは、文字、数字、記号等を組み合わせたモジュール名によって特定可能である。
モジュールには、1以上の文から構成される処理単位を記述することができる。本実施の形態による処理単位は、COBOLにおけるセクションであり、セクションの夫々は、セクション名(処理単位名)によって特定することができる。なお、他のプログラム言語における処理単位は、例えば関数名(処理単位名)によって特定可能な関数である。
モジュールは、他のモジュール又は当該モジュール自身を呼び出すことができる。また、モジュールのセクションは、他のセクション又は当該セクション自身を実行することができる。より具体的には、モジュールには、文として、セクションをセクション名によって特定して実行するための処理単位実行文と、モジュールの一つをモジュール名によって特定して実行するためのモジュール呼び出し文とを記述することができる。本実施の形態においては、処理単位実行文はPERFORM文であり、モジュール呼び出し文はCALL文である。なお、他のプログラム言語における処理単位実行文及びモジュール呼び出し文は、例えば関数名を指定した文である。モジュール呼び出し文が関数名を指定した文である場合、モジュール呼び出し文によって実行されるのは、モジュールのうちの指定された関数部分(即ち、モジュールの一部)である。また、この場合、モジュール呼び出し文においてモジュール名が明示的に記述されない場合(即ち、関数名によってモジュール名が間接的に特定される場合)がある。
更に、モジュールには、文の一つである条件文を記述することができる。条件文には、条件式が成立する場合に実行される文である成立時実行文及び/又は条件式が成立しない場合に実行される前記文である不成立時実行文を記述することができる。本実施の形態における条件文は、IF文及びEVALUATE文である。IF文においては、成立時実行文はTHEN句に記述される文であり、不成立時実行文は、ELSE句に記述される文である。同様に、EVALUATE文においては、成立時実行文はWHEN句に記述される文である。
本実施の形態による条件文は(即ち、条件文のうちの少なくとも1つは)、成立時実行文及び/又は不成立時実行文として更に条件文を記述可能であり、これにより条件文による文の階層化が可能である。例えば、IF文の成立時実行文として、更にIF文を記述することができる。換言すれば、モジュールは、条件文によって階層化可能な1以上の文からなり、これにより所定の階層構造(即ち、条件文による階層構造)を有している。容易に理解されるように、モジュールにおける連続する文からなる複数の箇所(対象範囲)について、階層化による階層構造を夫々特定することができる。
図1に示されるように、記憶装置30は、例えば磁気ディスク装置であり、フォルダ(図示せず)等によって階層化された様々なファイルを記憶することができる。記憶装置30は、装置本体20と通信可能に接続されており、装置本体20からの指示に従ってファイルの読込(取得)、書込(記憶)等を行う。本実施の形態による記憶装置30には、1以上のモジュール31が記憶されている。また、記憶装置30には、階層構造データ36を記憶することができる。
モジュール31は、例えばプログラミングツール(図示せず)を使用して作成される。モジュール31の夫々が一つのファイルであってもよいし、複数のモジュール31が一つのファイルとして記憶されていてもよい。階層構造データ36は、モジュール31に含まれる1以上の対象範囲の階層構造を、夫々記憶するものである。本実施の形態によれば、モジュール31の夫々について、階層構造データ36が作成される。
入力装置40は、例えばキーボードやマウスである。入力装置40は、装置本体20と通信可能に接続されており、キーボードから入力された文字やマウスによって指示された位置を装置本体20に通知する。
表示装置50は、例えばディスプレイやプリンタである。表示装置50は、装置本体20と通信可能に接続されており、装置本体20から転送された文字や図形等を表示又は印刷する。
装置本体20は、例えばPC(Personal Computer)の本体である。装置本体20は、CPU(Central Processing Unit)、主記憶装置等を備えている(図示せず)。記憶装置30には様々なプログラムの実行形式ファイルが記憶されている(図示せず)。CPUは、実行形式ファイルを主記憶装置にローディングし、実行形式ファイル内の命令語を実行することで様々な機能を実現する。またCPUが命令語を実行する過程において、記憶装置30に記憶された所定のファイルが、主記憶装置内のバッファ領域を経由してプログラムの変数領域に読み込まれる。また、プログラムの変数領域に読み込まれたファイルの内容は、必要に応じて主記憶装置内のバッファ領域を経由して記憶装置30に書き込まれる。上記の説明から理解されるように、記憶装置30と主記憶装置とは、本実施の形態における読み込み及び書き込み可能な記憶手段として夫々機能する。以降の説明における記憶手段としては記憶装置30を例示する。
本実施の形態による記憶装置30には、解析プログラム等の様々なプログラムが記憶されている(図示せず)。上記のプログラムは、主記憶装置にローディングされ、CPUによって実行され、これによってコンピュータは、様々な手段として(即ち、装置として)機能する。例えば、解析プログラムは、コンピュータを、記憶装置30に記憶されたモジュール31のうちの所定の対象モジュール31の構造解析を行う解析手段27(構造解析装置10)として機能させる。換言すれば、本実施の形態による構造解析装置10の装置本体20は、解析手段27を備えている。
図2に示されるように、本実施の形態によるモジュール31は、n個(n≧1)の行310から構成される。本実施の形態によるモジュール31は、テキストファイルである。但し、モジュール31は、例えば、MICROSOFT EXCEL(登録商標)のワークシートであってもよい。モジュール31がワークシートである場合、解析手段27は、例えばEXCELマクロによって実現することができる。行310は、一連番号(行識別)311と文312とから構成される。一連番号311は、行310を特定すると共に、行310の並び順を判断するためのものである。一連番号311は、数字だけでなく文字等を含むことができる。文312には、文(データ定義文、実行文、コメント文等)が記述されている。文312には、一つの完結した文全体が記述されていてもよいし、一つの文の一部が記述されていてもよい。例えば、MOVE文が2つの行310の文312に分けて記述されていてもよい。
図3に示されるように、本実施の形態による階層構造データ36は、m個(m≧1)の行360から構成される。本実施の形態による階層構造データ36は、MICROSOFT EXCEL(登録商標)のワークシートである。但し、階層構造データ36は、テキストファイル等であってもよい。階層構造データ36は、解析手段27がモジュール31の階層構造を解析することによって作成され、モジュール31と関連付けて記憶される。具体的には、例えば、階層構造データ36のファイル名は、対応するモジュール31のファイル名と同一である。あるいは、互いに対応するモジュール31及び階層構造データ36は、同一のワークブックの異なるワークシートであってもよい。
階層構造データ36の行360は、一連番号(行識別)361と、階層パターン362と、終了行(一連番号)363と、類似通知情報364とから構成される。本実施の形態による類似通知情報364は、類似行(一連番号)364nを備えている。一連番号361には、対応するモジュール31の一連番号311が設定される。終了行363には、モジュール31における一連番号361から始まる対象範囲(即ち、階層構造の解析を行う対象となる範囲)が終了する行310の一連番号311が設定される。階層パターン362には、一連番号361から終了行363までの対象範囲についての階層構造を特定可能なデータが設定される。類似通知情報364には、モジュール31内に互いに類似する対象範囲が存在することを示すデータが設定される。より具体的には、本実施の形態による類似行364nには、当該行360の階層パターン362と同一の階層パターン362を有する行360の一連番号361が設定される。
以下、本実施の形態による構造解析装置10の機能及び動作について、図5乃至図8に示される例を織り交ぜつつ、図4を使用して詳細に説明する。詳しくは、まず、モジュール31に含まれる条件文がIF文のみである場合(図5及び図6参照)を例にして説明し、次に、モジュール31にIF文以外の条件文が含まれる場合(図8参照)について説明する。
図4から理解されるように、本実施の形態による解析手段27は、モジュール31のうち処理対象とする対象モジュール31を記憶装置30(又は主記憶装置)から取得する取得機能(S400、S402)と、対象モジュール31の階層構造を解析する解析機能(S404〜S416)と、対象モジュール31と階層構造データ36(従って、類似通知情報364)とを関連付けて記憶装置30に記憶する書込機能(S418)と、対象モジュール31と類似通知情報364とを関連付けて表示装置50に表示する表示機能(S420)とを有している。
詳しくは、解析手段27は、例えば入力装置40から入力された起動指示によって起動され、対象モジュール31を特定するための対象モジュール名を取得する(S400)。対象モジュール名は、例えば起動指示の一部として入力すればよい。解析手段27は、取得した対象モジュール名によって特定される対象モジュール31を記憶装置30から読み込む(S402)。このとき、例えば所定のフォルダに記憶されたモジュール31のみを読み込み対象としてもよい。なお対象モジュール31が記憶装置30に記憶されていない場合、解析手段27は処理を終了する(図示せず)。
次に、解析手段27は、対象モジュール31の各文の階層レベルを特定する(S404)。具体的には、対象モジュール31の行310を1行目から最終行まで順次取得し、行310の夫々に階層レベルを付与する。このとき、1行目の階層レベルは1とし、IF文のTHEN句を検出するたびに階層レベルを加算する。一方、IF文のEND-IF(即ち、IF文の終了)を検出するたびに階層レベルを減算する。なお、THEN句やEND-IFの記述を省略することが可能な場合は、IF文における文の並び等を解析して階層レベルの加減算を行えばよい。
例えば、図5に例示される対象モジュール31については、先頭の(一連番号311が0001である)文312の階層レベルは1であり、次のTHEN句の階層レベルは2である。上記の例では、階層レベルは数値であり、THEN句を検出するたびに階層レベルを1アップし、END-IFを検出するたびに階層レベルを1ダウンする。しかしながら、階層レベルは、階層レベルの深さを比較することができる限り、数値でなくてもよい。更に、THEN句の検出によって更新された階層レベルが、対応するEND-IFの検出によって更新前の値に戻るように設計されていればよい。また、階層レベルは、実行文について付与すればよい。詳しくは、IF文の先頭行及び終了行と、THEN句又はELSE句が記述された行とに付与すればよい。従って、階層レベルの付与は、対象モジュール31の先頭の実行分から最後の実行文までの範囲について行えばよい。
次に、解析手段27は、対象範囲(即ち、階層構造の解析を行う対象とする範囲)を抽出する(S406)。詳しくは、解析手段27は、対象モジュール31に含まれる条件文の夫々について、開始行及び終了行を検出する。解析手段27は、対象モジュール31に条件文が含まれていない場合、又は対象モジュール31に含まれる条件文が1つのみの場合、処理を終了する(図示せず)。以上の説明から理解されるように、本実施の形態によれば、対象範囲には条件文が少なくとも1つ含まれており、対象範囲に含まれる条件文のいずれについても、条件文の開始から終了までの全体が含まれている。但し、対象範囲を条件文より前から又は条件文の途中から開始させることも可能である。
図5に例示する対象モジュール31においては、IF文(条件文)は、一連番号311が0001、0003、0005、0011及び0014の行310から夫々開始している。また、IF文は、一連番号311が0020、0010、0008、0018及び0017の行310で夫々終了している。図6の上段に示されるように、以上のように検出された開始行及び終了行は、対象範囲の開始行及び終了行として、夫々使用される。
更に、解析手段27は、抽出した対象範囲の夫々について階層パターンを作成する(S406)。具体的には、条件文の夫々について、開始行から終了行までの階層レベルが連結され、階層パターン(圧縮前)が作成される。更に、階層パターン(圧縮前)において連続する同一の階層レベルが圧縮され、階層パターン(圧縮後)が作成される。
図5の対象モジュール31について説明すると、図6の上段に示されるように、例えば開始行が0001、終了行が0020のIF文については、階層レベル:1、2、2、3…3、2、2、1(図5の階層レベル参照)が順次連結され、階層パターン(圧縮前)が作成される。更に、階層パターン(圧縮前)において同一階層レベルが連続する箇所は1つの階層レベルに圧縮され、これにより階層パターン(圧縮後)が作成される。
以上の説明から理解されるように、本実施形態における階層レベルは、対象範囲の先頭の文を基準として特定される階層の深さを示すものである。また、対象範囲における階層構造は、対象範囲に含まれる階層レベルを連結した階層パターンによって識別することができる。
図6の下段に示されるように、解析手段27は、以上のようにして検出した対象範囲の開始行、階層パターン(圧縮後)及び終了行を、階層構造データ36の一連番号361、階層パターン362及び終了行363に、夫々設定する(S406の処理の一部)。換言すれば、一連番号361、階層パターン362及び終了行363によって特定される1以上の対象範囲が、階層構造データ36に設定される。このとき階層パターン362は、対象範囲の先頭の文(即ち、IF文)を基準として特定される階層の深さを示すように変換される。具体的には、例えば”2 3 4 3 2”は”1 2 3 2 1”に変換される。図6の下段右の模式図から理解されるように、上記のように作成された階層パターン362は、山岳の地形になぞらえることができる。この場合、階層パターン362に連結された階層レベルの夫々は、山岳の麓を基準にした相対的な高さを示している。
次に、解析手段27は、作成した階層構造データ36の行360を、階層パターン362の長さ(即ち、階層パターン362に連結された階層レベルの数)の降順にソートする(S408)。なお、階層パターン362の長さが同一の場合、例えば一連番号361の昇順にソートすればよい。図6の下段には、ソート後の階層構造データ36が例示されている。図6の下段の例において、例えば、”1 2 3 4 3 2 3 4 3 2 1”の階層パターン362の長さは11と最大であるため、ソートにより階層構造データ36の第1行目に配置される。
次に、解析手段27は、作成した階層構造データ36の対象範囲(即ち、対象モジュール31の対象範囲)のうち互いに異なる2つの対象範囲について(即ち、第1対象範囲と第2対象範囲とについて)、第1対象範囲の階層構造と第2対象範囲の階層構造とが同一である場合、類似通知情報364を、第2対象範囲と関連付けて作成する(S410〜S416)。より具体的には、解析手段27は、作成した階層構造データ36の行360の夫々について、同一階層パターン362の有無を判定する(S410〜S416)。
詳しくは、解析手段27は、まず、第1対象範囲の階層パターンとして、ソート後の先頭の(1行目の行360の)階層パターン362を取得する(S410)。図6の下段の例においては、”1 2 3 4 3 2 3 4 3 2 1” が取得される。
次に、解析手段27は、階層構造データ36に取得した階層パターン362と同一の階層パターン362が、階層構造データ36中に存在するか否か判定する(S412)。換言すれば、解析手段27は、第1対象範囲と異なり、且つ同一の階層パターンを有する第2対象範囲を検索する。存在する場合は、第2対象範囲の類似通知情報364の類似行364nに、第1対象範囲の一連番号361を設定する(S412)。図6の下段の例においては、”1 2 3 4 3 2 3 4 3 2 1”と同一の階層パターン362が存在しないため、いずれの行360の類似行364nも設定されない(即ち、初期値のままである)。
次に、解析手段27は、全ての階層パターン362の処理が終了したか判定し(S414)、終了した場合(S414でYESの場合)、S418の処理を行う。一方、未処理の階層パターン362が存在する場合(S414でNOの場合)、階層構造データ36中の次の行360の階層パターン362を取得する。以上の説明から理解されるように、図6の下段の例においては、”1 2 3 2 1”が取得される。この場合、一連番号361が0011の行360の階層パターン362も” 1 2 3 2 1”であり一致するため、一連番号361が0011の行360の類似行364nに、”0003”が設定される(S412)。
以上に説明したように、本実施の形態による解析手段27は、解析機能において、階層パターン362を長さの降順にソートし、これにより複数の対象範囲を、階層パターン362に連結された階層レベルの数の降順に第1対象範囲として使用している。しかしながら、ソートすることなく、階層構造を比較することも可能である。更に、階層パターン362を作成せず、対象モジュール31の行310を1行ずつずらしながら階層レベルを比較することもできる。但し、性能を考慮する場合、本実施の形態のように設計することが好ましい。
以上の説明から理解されるように、本実施の形態による解析手段27は、解析機能において、第1対象範囲の階層パターン362と第2対象範囲の階層パターン362とが同一である場合、第1対象範囲の階層構造と第2対象範囲の階層構造とが同一である(即ち、第1対象範囲と第2対象範囲が類似している)と判定する。但し、階層構造の比較方法は、上記の方法に限られない。例えば、図6に示される階層パターン(圧縮前)によって比較してもよい。このようにすることで、階層構造をより厳密に比較することができる。また、階層パターン(圧縮前)を作成する際、IF文、THEN句、ELSE句、END-IF以外の文(例えば、MOVE文)にも階層レベルを付与し、階層パターン(圧縮前)に連結してもよい。このようにすることで、2つの対象範囲の類似性を更に厳密に比較することができる。
なお、2つの対象範囲の類似性は、階層パターン以外によっても比較することができる。例えば、2つの対象範囲において使用されている実行文の種類や数、使用されている関数の種類や数、使用されている項目名称の種類や数によって評価点を算出することもできる。この場合、階層パターンが同一であり、且つ算出した評価点が所定点数以上のときに、2つの対象範囲が類似していると判定すればよい。
解析手段27は、解析処理(S404〜S416)を終了すると、類似通知情報364を記憶装置30に書き込む(S418)。より具体的には、解析手段27は、作成した階層構造データ36を記憶装置30に書き込む。前述したように、階層構造データ36は、対象モジュール31と関連付けて記憶される。従って、階層構造データ36の類似行364n(即ち、対象範囲と関連付けられた類似通知情報364)を参照することで、対象モジュール31における互いに類似する対象範囲を容易に見つけることができる。
次に、解析手段27は、類似する箇所が識別できるようにして対象モジュール31を表示装置50に表示し(S420)、処理を終了する。より具体的には、解析手段27は、例えば図7に示されるようにして対象モジュール31を表示する。図7に示されるように、対象モジュール31のうち互いに類似する対象範囲の夫々は、枠で囲んで表示される。更に、枠の内側に、どの対象範囲と類似しているかを示す類似識別コード(図7においては、丸で囲んだ数字)が表示される。但し、類似識別コードを表示せず、枠の属性(色や太さ等)を変えることで、どの対象範囲と類似しているかを示してもよい。また、対象モジュール31内において、互いに類似する対象範囲が離れている場合、例えば、対象モジュール31の先頭に元も近い対象範囲を表示すればよい。互いに類似する箇所を、視覚的に容易に把握できるように表示することで、メンテナンスが必要な箇所を容易に検出することが可能になる。更に、共通化すべき箇所を検出することもできる。
なお、表示機能(S420)において、解析手段27は、対象モジュール31を表示するのでなく、作成した階層構造データ36を表示してもよい。換言すれば、解析手段27は、対象モジュール31と類似通知情報364とを関連付けて表示装置50に表示すればよい。
また、本実施の形態による解析手段27は、書込機能(S418)と、表示機能(S420)とを有しているが、解析手段27は、書込機能(S418)と、表示機能(S420)との一方を有していればよい。更に、上記の2つの機能のいずれも有さず、代わりに、対象モジュール31と類似通知情報364とを関連付けて他の装置や手段に送信する機能を有していてもよい。
更に、図8に示されるように、対象モジュール31にIF文以外の条件文が含まれていてもよい。例えば、EVALUATE文については、WHEN句を検出するたびに階層レベルを更新し、対応するEND-EVALUATEを検出するたびに階層レベルを更新前に戻せばよい。IF文、EVALUATE文以外の条件文についても同様に処理することができる。容易に理解されるように、階層レベルを付与した後の解析手段27の機能・動作は、対象モジュール31に条件文としてIF文のみが含まれている場合と同じである。
本実施の形態による解析手段27は、以下に説明するように、様々に変形することが可能である。
例えば、解析手段27は、第2対象範囲(即ち、比較される側の対象範囲)の類似行364nに、第1対象範囲(即ち、比較する側の対象範囲)の一連番号361を設定するのでなく、第1対象範囲の類似行364nに、第2対象範囲の一連番号361を設定してもよい。また、第1対象範囲及び第2対象範囲の類似行364nに、第2対象範囲及び第1対象範囲の一連番号361を夫々設定してもよい。換言すれば、解析手段27は、類似通知情報364を、第1対象範囲及び/又は第2対象範囲と関連付けて作成すればよい。
また、第1対象範囲(又は第2対象範囲)が複数の第2対象範囲(又は第1対象範囲)と類似する場合、類似行364nに、最初に類似を検出した第2対象範囲(又は第1対象範囲)の一連番号361を設定してもよいし、類似を検出した数だけの類似行364nを設定してもよい。
但し、図7から理解されるように、類似する対象範囲の検出数が大きくなると(即ち、類似する対象範囲の検出精度が高いと)、対象モジュール31と関連付けて表示することが困難になる。また、互いに類似する対象範囲中には、互いに類似する対象範囲が更に含まれている場合が多い。このような場合、類似する対象範囲全てを階層構造データ36に記憶すると、類似行364nが設定された行360の数が不必要に大きくなり、メンテナンスが必要か否かの調査・検討工数が増加するおそれがある。一方、類似判断を行う対象範囲を絞ると、メンテナンスの要否についての調査・検討が漏れる可能性がある。従って、類似する対象範囲の検出精度は、メンテナンスの内容等に合わせて調整した方がよい。
例えば、類似する箇所を検出した後のメンテナンス効率が重視される場合には、解析手段27が、解析機能(図4のS404〜S416)において、所定の条件を満たす対象範囲(行360)を第1対象範囲として使用しないようにすればよい。所定の条件として、例えば、行360の階層パターン362に連結された階層レベルの数を基準にした条件を採用すればよい。より具体的には、階層パターン362に連結された階層レベルの数が所定の数(例えば10)より小さい場合、第1対象範囲として使用しないようにすればよい。あるいは、対象範囲における階層レベルの最大値が所定の数(例えば4)より小さい場合、第1対象範囲として使用しないようにしてもよい。
対象モジュール31として、複数のモジュール31を連結したものを使用してもよい。例えば、複数のモジュール31を、夫々の開始行から終了行まで単純に順に連結して、対象モジュール31としてもよい。このようにすることで、システム全体における類似する対象範囲を纏めて検出することができる。また、複数のモジュール31を、以下に説明する第2の実施の形態のように連結することも可能である。
(第2の実施の形態)
図9に示されるように、本発明の第2の実施の形態による構造解析装置10′は、装置本体20′と、記憶装置(記憶手段)30′と、入力装置40と、表示装置50とを備えている。構造解析装置10′は、第1の実施の形態による構造解析装置10と同様に、プログラム言語によって記述された1以上の文からなるモジュール(ソースプログラム)の構造解析を行うものである。第2の実施の形態によるプログラム言語、モジュール、入力装置40及び表示装置50は、第1の実施の形態と同様に夫々構成されている。
図9に示されるように、記憶装置30′は、記憶装置30と同様な磁気ディスク装置である。記憶装置30′には、第1の実施の形態と同様に、1以上のモジュール31が記憶されている。また、記憶装置30′には、二次的モジュール(モジュール)32とフローチャート33とが記憶される。本実施の形態による二次的モジュール32は、モジュール31を連結・変換して作成される。また、フローチャート33は、二次的モジュール32から作成される。
装置本体20′は、装置本体20と同じく、例えばPCの本体であり、CPU、主記憶装置等を備えている(図示せず)。第1の実施の形態と同様に、記憶装置30′と主記憶装置とは、本実施の形態における読み込み及び書き込み可能な記憶手段として夫々機能する。以降の説明における記憶手段としては記憶装置30′を例示する。
本実施の形態による記憶装置30′には、変換プログラムと、加工プログラムと、フローチャート作成プログラムと、解析プログラムとが記憶されている(図示せず)。上記のプログラムは、主記憶装置にローディングされ、CPUによって実行され、これによってコンピュータは、変換手段21、加工手段22、フローチャート作成手段25、及び解析手段27′として夫々機能する。即ち、上記のプログラムは、コンピュータをモジュールの構造解析を支援する構造解析装置10′として機能させるためのものである。換言すれば、本実施の形態による構造解析装置10′の装置本体20′は、変換手段21と、加工手段22と、フローチャート作成手段25と、解析手段27′とを備えている。
本実施の形態による変換手段21は、記憶装置30′に記憶されたモジュール31のうちの所定の対象モジュール31を二次的モジュール32に変換して記憶装置30′に記憶する。加工手段22は、記憶装置30′に記憶された二次的モジュール32を加工する。フローチャート作成手段25は、記憶装置30′に記憶された二次的モジュール32から表形式のフローチャート33を作成する。解析手段27′は、第1の実施の形態の解析手段27と同様に、記憶装置30′に記憶されたモジュール31の構造解析を行う。但し、本実施の形態による解析手段27′は、モジュール31を直接解析するのでなく、二次的モジュール32のうちの所定の対象モジュール32の構造解析を行う。
図10に示されるように、記憶装置30′には、例えばモジュール名がXXXであるモジュール31(XXXモジュール)と、モジュール名がAAAであるモジュール31(AAAモジュール)と、モジュール名がBBBであるモジュール31(BBBモジュール)と、モジュール名がCCCであるモジュール31(CCCモジュール)とが記憶されている。モジュール31の夫々は、一連番号311と文312とからなる複数の行310から構成されている。
XXXモジュールはメインモジュール(即ち、処理の起点となるモジュール)であり、AAAモジュールとBBBモジュールとをモジュール名によって特定して呼び出すためのCALL文が夫々記述された行310を有している。AAAモジュールは、CCCモジュールを呼び出すCALL文が記述された行310を有している。
図10に例示されたモジュール31の夫々は、1以上のセクションから構成されている。例えば、XXXモジュールは、”PROCEDURE DIVISION.”が記述された行310の次の行から、”STOP RUN.”が記述された行310までのメインセクション(モジュールにおける処理の起点となる主たる処理単位)と、”AAA-SUB SECTION.”が記述された行310から、”EXIT.”が記述された行310までの従たるセクション(従たる処理単位)を有している。なお、上述の従たるセクションのセクション名(処理単位名)はAAA−SUBであり、メインセクションは、AAA−SUBセクションをセクション名によって特定して実行する行310を備えている。より具体的には、メインセクションは、”PERFORM AAA-SUB.”が記述された行310を備えている。
図10に例示されたセクションの一部は、条件文が記述された行310を備えている。例えば、XXXモジュールのメインセクションは、5つのWHENを有するEVALUATE文が記述された行310と、THENおよびELSEを有するIF文が記述された行310とを備えている。また、CCCモジュールのメインセクションは、IF文のELSEにおいて更にIF文が記述された行310を備えており、これによって条件文による文312の階層化が行われている。
図11に示されるように、本実施の形態による二次的モジュール32は、p個(p≧1)の二次的行(行)320から構成される。本実施の形態においては、二次的モジュール32は、MICROSOFT EXCEL(登録商標)のワークシートであるが、テキストファイル等であってもよい。行320は、モジュール識別321と、行番号322と、階層識別323と、命令識別324と、一連番号(行識別)326と、二次的文327と、階層構造329とから構成される。階層構造329は、階層パターン329pと、類似通知情報329rとを備えている。本実施の形態による類似通知情報329rは、類似有無329fを備えている。
二次的モジュール32は、1以上のモジュール31から実行文等が記述された行310を集めて加工することによって生成されている。本実施の形態による二次的モジュール32は、変換手段21によって生成され、加工手段22及び解析手段27′によって加工される。特に、二次的モジュール32のうち階層構造329は、第1の実施の形態における階層構造データ36と同様に、解析手段27′によって設定される。
図12に示されるように、本実施の形態による二次的モジュール32は、例えば、XXXモジュール、AAAモジュール、BBBモジュール及びCCCモジュールのPROCEDURE DIVISIONの行310を集めて加工したものである。
図10及び図12から理解されるように、行320の二次的文327において、行310の文312に記述されているCALL文はコメント化されて(コメント文に変更されて)いる。また、CALL文によって呼び出されるAAAモジュールのPROCEDURE DIVISIONの文312が、行320の二次的文327として展開されている。更に、AAAモジュールからCALL文によって呼び出されるCCCモジュールのPROCEDURE DIVISIONの文312が、行320の二次的文327として展開されている。同様に、行310の文312に記述されているPERFORM文は、行320の二次的文327においてコメント化されている。また、PERFORM文によって実行されるAAA−SUBセクションの文312が、行320の二次的文327として展開されている。
また、文312に記述された条件文のうちIF文以外のもの(本実施の形態においてはEVALUATE文)は、二次的文327においてIF文に変換されている。例えば、”EVALUATE WK-A-O”、”WHEN CS-1”、”MOVE CS-1 TO WK-B-I”が夫々記述された3つの文312は、”*#E EVALUATE WK-A-O”(コメント文)、”*#E WHEN CS-1” (コメント文)、”IF ( WK-A-O = CS-1 )” 、”THEN”、”MOVE CS-1 TO WK-B-I”が夫々記述された5つの二次的文327に変換される。上記の変換に加え、IF文におけるTHEN、ELSE及びEND IFの欠落を補うための二次的文327が生成される。また、否定の条件式は肯定の条件式に変換される。更に、ANDやORで結合された条件式を有するIF文は複数のIF文に分解されて、2つの評価対象オペランド間の関係を1つの論理演算子のみによって評価する単純な二次的条件式を有するIF文に変換される。但し、上記の変換の一部(例えば、ANDやORで結合された条件式の分解)は行わなくてもよい。
以上に加えて、複数の文312に分かち書きされているMOVE文等は、1つの二次的文327に纏められている。即ち、二次的モジュール32の行320の夫々は、モジュール31の行310に基づいて生成されており、二次的文327は、文312をそのままコピーしたものであるか、又は文312を加工・展開することによって生成されたものである。
本実施の形態によるモジュール識別321は、夫々の行320がいずれのモジュール31に基づくものであるかを示すものである。より具体的には、モジュール識別321には、XXX等のモジュール名が設定される。なお、モジュール名に代えて、モジュール31を一意に識別可能な番号等を設定してもよい。
一連番号326には、二次的文327が文312のコピーである行320においては、コピー元の行310の一連番号311が設定される。また、二次的文327が文312をコメント化したものである等、行310と1対1に対応する行320については、一連番号326には、対応する行310の一連番号311が設定される。一方、生成された(追加された)行320の一連番号326には、生成された行320であることを識別可能な記号等が設定される。このようにすることで、システムのメンテナンスを行う際に、行320と行310を容易に対応付けることができる。
本実施の形態による行番号322には、1から始まる通番が行320の並び順に沿って設定されている。しかしながら、行番号322の大小関係を比較することが可能な限り、通番でなくてもよい。例えば、行番号322に記号等を設定してもよい。
本実施の形態による階層識別323は、分岐階層と分岐の深さとから構成されている。分岐階層は、条件文による階層を識別するためのものである。本実施の形態による分岐階層は、1を1行目の行320における出発値としており、IF文のTHENが記述された行320において1.1に変わり、ELSEが記述された行320において1.2に変わる。そしてIF文のEND IFが記述された行320の次の行から1に戻る。一般化すると、THENが記述された行320においては、直前の行320の分岐階層の末尾に「.1」が加えられ、ELSEが記述された行320においては、直前の行320の分岐階層の末尾「.1」が「.2」に変更され、END IFが記述された行320の次の行においては、END IFが記述された行320の分岐階層の末尾「.2」が削除されている。上記の場合を除き、分岐階層には、直前の行320と同一の値が設定されている。
本実施の形態による分岐の深さは、1を1行目の行320における出発値としており、IF文のTHENが記述された行320において1.1に変わり、END IFが記述された行320の次の行から1に戻る。また、その後のIF文のTHENが記述された行320において1.2に変わり、END IFが記述された行320の次の行から1に戻る。一般化すると、分岐の深さは、1を出発値としており、THENが記述された行320において末尾に「.q」(qは1以上の整数)なる桁が加えられ、END IFが記述された行320の次の行において末尾の「.q」なる桁が削除される。「.q」におけるqの値は、桁の夫々について1を出発値としている。詳しくは、1桁目の「.q」(例えば1.2の「.2」)におけるqの値は、1を出発値としており、付加される毎にインクリメントされる。一方、2桁目以降の「.q」(例えば1.2.1の「.1」)におけるqの値は、当該桁を除いた分岐の深さが同一値である行320が連続する範囲において1を出発値としており、当該連続する範囲において付加される毎にインクリメントされる。
命令識別324は、二次的文327に記述されている文の種別を示すものである。本実施の形態による命令識別324は、命令名と、条件命令であるか否かを示す区分(条件命令当否)と、処理命令であるか否かを示す区分(処理命令当否)とからなる。二次的文327にIF文の一部が記述されている場合(IF、THEN、ELSE又はEND-IFが記述されている場合)、条件命令当否には○が設定される。また、二次的文327にIF文以外の実行文が記述されている場合(例えばMOVE文やCOMPUTE文が記述されている場合)、処理命令当否には○が設定される。条件命令当否又は処理命令当否に○が設定されている場合、命令名には二次的文327に記述されている命令名(IF、THEN、END-IF、MOVE等)が設定される。
階層パターン329pは、第1の実施の形態と同様に、対象範囲の階層構造を特定するためのものである。詳しくは、第1の実施の形態と同様に、IF文が開始する(即ち、対象範囲が始まる)行320の階層パターン329pに、階層レベルを連結した階層パターンが設定される。図12において破線Aで示した部分から理解されるように、本実施の形態によれば、階層識別323の長さ(例えば、分岐の深さの桁数)が、階層レベルを示している。
類似通知情報329rにも、第1の実施の形態と同様に、二次的モジュール32内に互いに類似する対象範囲が存在することを示すデータが設定される。本実施の形態によれば、類似有無329fに、当該行320の階層パターン329pと同一の階層パターン329pを有する行320が存在するか否かを示すフラグが設定される。
行320は、以上に説明した項目に加えて様々な項目を備えることができる。例えば、対応する行310のセクション名を備えることにより、行320と行310との対応を、より容易に把握することができる。
本実施の形態によれば、記憶装置30′に記憶された二次的モジュール32に基づいて様々なファイルを作成し、作成したファイルをモジュール31の構文解析を支援するための資料として表示装置50に表示・印刷することができる。具体的には、例えば二次的モジュール32に基づいてフローチャート33を作成することができる。
図13から理解されるように、本実施の形態によるフローチャート33は、MICROSOFT EXCEL(登録商標)のワークシートであり、二次的モジュール32から生成される。但し、フローチャート33は他の形式のファイル等であっても構わない。
フローチャート33は、二次的モジュール32の二次的文327をフローチャート風に編集したものである。より具体的には、IF文と関連しない二次的文327は、二次的モジュール32における行320の並び順に沿って、第2列目に並べられている。一方、二次的文327のうち、IF文と関連するもの(即ち、IFからEND-IFまでの文が記述されたもの)については、IF文における条件式が成立する場合に実行される二次的文327と、IF文における条件式が成立しない場合に実行される二次的文327とが左右の列に並べられている。
フローチャート33の第1列目には第2列目に並べられた二次的文327の行番号322が設定されており、これによりフローチャート33の行を二次的モジュール32の行320に夫々対応付けることができる。なお、行番号322に限らず、行320の任意の項目をフローチャート33に設定することができる。
以上の説明から理解されるように、本実施の形態によるフローチャート33は、IF文による階層が深くなるにつれて列が増加する。換言すれば、二次的モジュール32のうち、より複雑な条件文が記述されている箇所は、表の列方向に延びるようにして表示される。従って、フローチャート33を表示装置50に表示させ、左右の列に並べて表示された実行文を見比べることで、条件式の成否による処理の相違を把握することができる。フローチャート33における処理の塊を色付けして表示装置50に表示させることもできる。例えば、フローチャート33のIF及びEND-IFが設定された欄に所定の背景色Aを設定し、THENの場合に実行される二次的文327に所定の背景色Bを設定し、ELSEの場合に実行される二次的文327に所定の背景色Cを設定することができる。このようにすることで、フローチャート33を表示装置50に表示させた際に、IF文による階層構造を背景色の組み合わせによるパターンとして視覚的に把握することが可能になる。
以下、本実施の形態による構造解析装置10′の機能及び動作について詳細に説明する。
図14から理解されるように、本実施の形態による変換手段21は、展開制御情報を取得する制御情報取得機能(S1400)と、モジュール31のうち処理対象とする対象モジュール31を記憶装置30′から読み込む読込機能(S1402、S1404)と、対象モジュール31を二次的モジュール32に変換する変換機能(S1406〜S1412)と、二次的モジュール32を記憶装置30′に記憶する書込機能(S1414)とを有している。
より具体的には、図14に示されるように、変換手段21は、例えば入力装置40から入力された起動指示によって起動され、例えば起動指示の一部として入力された展開制御情報を取得する(S1400)。ここで、展開制御情報は、展開制限指示を指定することが可能なものであり、展開制限指示は、実行対象のセクション又は呼び出し対象のモジュール31の文312に記述されている文の展開を初回のみに制限することを指示するものである。
次に、変換手段21は、対象モジュール31を特定するための対象モジュール名を取得する(S1402)。対象モジュール名は、展開制御情報と同様な方法で取得することができる。変換手段21は、取得した対象モジュール名によって特定される対象モジュール31を記憶装置30′から読み込む(S1404)。
次に、変換手段21は、対象モジュール31の処理開始箇所の文312を取得する(S1406)。本実施の形態による処理開始箇所は、メインセクションの先頭である。変換手段21は、取得した文312について二次的文出力処理を行う(S1408)。次に、変換手段21は、処理終了箇所の文312を処理済みであるか判定する(S1410)。本実施の形態による処理終了箇所は、メインセクションの末尾である。処理済みの場合(S1410においてYESの場合)、変換手段21は、作成した二次的モジュール32を記憶装置30′に書き込み(S1414)、処理を終了する。一方、処理済みでない場合(S1410においてNOの場合)、変換手段21は、次に処理する文312(後続する行310の文312)を取得し(S1412)、取得した文312について二次的文出力処理を行う(S1408)。
図15は、図14に示した変換手段21の処理(機能)のうち、二次的文出力処理(S1408)をより詳細に示すフローチャートである。図15に示されるように、変換手段21は、二次的文出力処理において文312を二次的文327として出力する(S1500)。より具体的には、本実施の形態においては、文312に記述されている実行文等をワークシートの所定の行・列にコピーする。このとき、前述したように、PERFORM文をコメント文にする等の加工が行われる。また、変換手段21は、モジュール識別321と、行番号322と、一連番号326とに前述したような値を設定する。
次に、変換手段21は、文312に条件文が記述されているか判定する(S1502)。文312に記述されている実行文が条件文である場合(S1502でYESの場合)、変換手段21は、前述したようにIF文以外の条件文をIF文に変換する等の処理を行う。より具体的には、変換手段21は、条件文の条件式に基づいて、二次的文の一つである二次的条件文(IF文)が記述された二次的文327を生成し、二次的条件文によって二次的文327を階層化して二次的モジュールに出力し(S1504)、二次的文出力処理を終了する。ここで、二次的条件文は、2つの評価対象オペランド間の関係を1つの論理演算子のみによって評価する二次的条件式が成立するか成立しないかによって実行すべき二次的文327を選択するものである。
文312に記述されている実行文が条件文でない場合(S1502でNOの場合)、変換手段21は、文312に記述されている実行文が処理単位実行文(PERFORM文)であるか判定する(S1506)。処理単位実行文である場合(S1506でYESの場合)、変換手段21は、実行対象の処理単位(セクション)の処理開始箇所の文312を取得する。本実施の形態においては、処理単位の処理開始箇所はセクションの先頭である。
処理単位実行文でない場合(S1506でNOの場合)、変換手段21は、文312に記述されている実行文がモジュール呼び出し文(CALL文)であるか判定する(S1510)。モジュール呼び出し文である場合(S1510でYESの場合)、変換手段21は、CALL文によって特定される呼び出し対象のモジュール31を記憶装置30′から読み込み(S1512)、呼び出し対象のモジュール31の処理開始箇所の文312を取得する(S1514)。本実施の形態においては、呼び出し対象のモジュール31の処理開始箇所は、当該モジュール31のメインセクションの先頭である。一方、モジュール呼び出し文でない場合(S1510でNOの場合)、変換手段21は二次的文出力処理を終了する。
変換手段21は、実行対象のセクションの文312又は呼び出し対象のモジュール31の文312について、再帰的に二次的文出力処理を行う(S1516)。次に、変換手段21は、処理終了箇所の文312を処理済みであるか判定する(S1518)。本実施の形態による処理終了箇所は、実行対象のセクションについては当該セクションの末尾であり、呼び出し対象のモジュール31についてはメインセクションの末尾である。処理済みの場合(S1518においてYESの場合)、変換手段21は、二次的文出力処理を終了する。一方、処理済みでない場合(S1518においてNOの場合)、変換手段21は、次に処理する文312(後続する行310の文312)を取得し(S1520)、取得した文312について再帰的に二次的文出力処理を行う(S1516)。
なお、変換手段21は、再帰的な(自分自身を実行する)PERFORM文については、実行対象のセクションの文312の展開を行わない。同様に、再帰的な(自分自身を呼び出す)CALL文については、呼び出し対象のモジュール31の文312の展開を行わない。更に、変換手段21は、展開制御情報に展開制限指示が指定されている場合、既に二次的文出力処理を行ったセクションとセクション名が同一であるセクションを実行するPERFORM文については、二次的文出力処理を行わない(S1506)。同様に、変換手段21は、展開制御情報に展開制限指示が指定されている場合、変換手段21は、既に二次的文出力処理を行ったモジュール31とモジュール名が同一であるモジュール31を呼び出すCALL文については、二次的文出力処理を行わない(S1510)。
以上の説明から理解されるように、変換手段21の変換機能は、対象モジュール31の所定の処理開始箇所から所定の処理終了箇所までに記述された文312の夫々を二次的文327として二次的モジュールに順次出力する。更に、文312が処理単位実行文又はモジュール呼び出し文である場合、実行対象の前記処理単位又は呼び出し対象のモジュール31に記述されている文312を展開することで二次的文327を生成して二次的モジュール32に出力する。更に、展開される文312における処理単位実行文又はモジュール呼び出し文についても展開を更に行う(即ち、再帰的に展開する)。従って、多数の処理単位やモジュール31に分散された機能を、対象モジュール31のメインセクションに手繰り寄せるようにして集めることができる。なお、モジュール31についての所定の処理開始箇所及び所定の処理終了箇所は、夫々、PROCRDURE DIVISONの先頭及び末尾としてもよい。また、例えば、メインセクションの途中とすることも可能である。但し、不要な展開を避け、且つ十分な展開結果を得るためには本実施の形態のようにするのが好ましい。
また、以上の説明から理解されるように、変換手段21の変換機能は、展開制御情報に展開制限指示が指定されている場合、同一の処理単位については、実行対象の処理単位に記述されている文312の展開を初回の1回のみ行い、同一のモジュール31については、呼び出し対象のモジュール31に記述されている文312の展開を初回の1回のみ行う。
以上に説明したように、変換手段21によって、二次的文327からなる二次的モジュール32が記憶装置30′に記憶される。
図16から理解されるように、本実施の形態による加工手段22は、読込機能(S1600、S1602)と、階層識別付加機能(S1606)と命令識別付加機能(S1608)と、書込機能(S1014)とを有している。読込機能は、処理対象の二次的モジュール32を記憶装置30′から読み込む機能である。階層識別付加機能は、二次的モジュール32の二次的文327の少なくとも一部について、二次的文327がいずれの階層に位置しているかを示す階層識別323を付加する機能である。命令識別付加機能は、二次的モジュール32の二次的文327の少なくとも一部について、二次的文327に記述されている文の種別を示す命令識別324を二次的文327に付加する機能である。書込機能は、階層識別323及び命令識別324が付加された二次的文327からなる二次的モジュール32を記憶装置30′に記憶する機能である。
より具体的には、図16に示されるように、加工手段22は、例えば変換手段21と同様に起動され、処理対象の二次的モジュール32を特定するための二次的モジュール名を取得する(S1600)。加工手段22は、取得した二次的モジュール名によって特定される二次的モジュール32を記憶装置30′から読み込む(S1602)。
次に、加工手段22は、処理対象の二次的モジュール32の処理開始箇所の二次的文327を取得する(S1604)。本実施の形態による処理開始箇所は、二次的モジュール32の先頭である。
加工手段22は、取得した二次的文327について階層識別323を付加する(S1606)。より具体的には、本実施の形態による加工手段22は、ワークシートにおいて行320の階層識別323と対応する行・列に、前述したような分岐階層と分岐の深さとを設定する。次に、加工手段22は、取得した二次的文327について命令識別324を付加する(S1608)。より具体的には、本実施の形態による加工手段22は、ワークシートにおいて行320の命令識別324と対応する行・列に、前述したような命令名と、条件命令当否と、処理命令当否とを設定する。
次に、加工手段22は、処理終了箇所の二次的文327を処理済みであるか判定する(S1612)。本実施の形態による処理終了箇所は、二次的モジュール32の末尾である。処理済みの場合(S1612においてYESの場合)、加工手段22は、加工した二次的モジュール32を記憶装置30′に書き込み(S1614)、処理を終了する。一方、処理済みでない場合(S1612においてNOの場合)、加工手段22は、次に処理する二次的文327(後続する行320の二次的文327)を取得し(S1616)、取得した二次的文327について階層識別323の付加等を行う(S1606、S1608)。
以上に説明したように、加工手段22によって、階層識別323及び命令識別324が付加された二次的文327からなる二次的モジュール32が記憶装置30′に記憶される。
本実施の形態による解析手段27′は、第1の実施の形態による解析手段27と同様な機能を備えている。以下、解析手段27と異なる機能を中心に、図17に示される例を織り交ぜつつ、図4を使用して説明する。
解析手段27′は、解析手段27と同様に起動され、対象モジュール32を記憶装置30′(又は主記憶装置)から読み込む(S400、S402)。換言すれば、解析手段27′は、モジュール31ではなく、二次的モジュール32を解析対象とする。
解析手段27′は、対象モジュール32の各文の階層レベルを特定する(S404)際、命令識別324の命令名によって、IF文の開始、終了等を判定する。また、階層識別323の長さを、階層レベルとする。図17の例においては、各行320に対して、右から2番目の列に示されるように階層レベルが付与される。
解析手段27′は、解析手段27と同様に、対象範囲(即ち、階層構造の解析を行う対象とする範囲)を抽出する(S406)。但し、本実施の形態による解析手段27′は、対象範囲に含まれる範囲を対象範囲としない。具体的には、図17に例示する対象モジュール32においては、IF文(条件文)のうちの2つは、行番号322が874及び2397の行320から夫々開始している。また、上記のIF文は、行番号322が921及び2437の行320で夫々終了している。解析手段27′は、行番号322が874の行320から行番号322が921の行320までと、行番号322が2397の行320から行番号322が2437の行320までを対象範囲とする。一方、解析手段27′は、例えば、行番号322が882の行320から行番号322が920の行320までを対象範囲としない。
解析手段27′は、解析手段27と同様に階層パターンを作成する(S406)。図17に例示する対象モジュール32においては、行番号322が874の行320及び行番号322が2397の行320の夫々について、” 1 2 3 4 3 4 5 4 3 2 1”の階層パターンが作成され、階層パターン329pに設定される。
解析手段27′は、解析手段27と同様に、作成した階層構造329の対象範囲(即ち、対象モジュール32の対象範囲)のうち互いに異なる2つの対象範囲について(即ち、第1対象範囲と第2対象範囲とについて)、第1対象範囲の階層構造と第2対象範囲の階層構造とが同一である場合、類似通知情報329rを作成する(S408〜S416)。但し、解析手段27′は、類似通知情報329rを、第1対象範囲及び第2対象範囲と関連付けて作成する。より具体的には、解析手段27は、対象モジュール32の行320の夫々について、同一階層パターン329pの有無を判定する(S410〜S416)。互いに同一の階層パターン329pを有する2つの行320を検出した場合、検出した2つの行320の夫々の類似有無329fに「類似あり」を意味するフラグを設定する。
図17に例示する対象モジュール32においては、行番号322が874の行320から行番号322が921の行320までの第1対象範囲(R1)と、行番号322が2397の行320から行番号322が2437の行320までの第2対象範囲(R2)とが同一の階層パターン329pを有している。このため、行番号322が874の行320及び行番号322が2397の行320の類似有無329fに、”1”( 類似対象範囲あり)が夫々設定される。
次に、解析手段27′は、全ての階層パターン329pの処理が終了したか判定し(S414)、終了した場合(S414でYESの場合)、S418の処理を行う。より具体的には、階層構造329を設定した二次的モジュール32を記憶装置30′に書き込む(更新する)。一方、未処理の階層パターン329pが存在する場合(S414でNOの場合)、次に処理すべき階層パターン329pを取得する。
以上の説明から理解されるように、本実施の形態による解析手段27′は、第1の実施の形態による解析手段27と同様に2つの対象範囲の類似性を比較することができる。更に、本実施の形態によれば、対象モジュール32には、関連する複数のモジュール31が処理順に連結されている。従って、システム全体における類似する対象範囲を、より調査し易い形式で、纏めて検出することができる。
図18から理解されるように、本実施の形態によるフローチャート作成手段25は、読込機能(S1800、S1802)と、フローチャート作成機能(S1804、S1805)と、書込機能(S1806)とを有している。
より具体的には、図18に示されるように、フローチャート作成手段25は、例えば変換手段21と同様に起動され、処理対象の二次的モジュール32を特定するための二次的モジュール名を取得する(S1800)。フローチャート作成手段25は、取得した二次的モジュール名によって特定される処理対象の二次的モジュール32を記憶装置30′から読み込む(S1802)。
次に、フローチャート作成手段25は、二次的条件式の成否に対応した二次的文327を表の左右に並べた表形式のフローチャート33を作成する(S1804)。より具体的には、二次的モジュール32の二次的文327のうち階層識別323によって示される階層が同一である二次的文327について、二次的条件式が成立した場合に実行される二次的文327と二次的条件式が成立しない場合に実行される二次的文327とを表の左右に並べたフローチャート33を作成する。このとき、フローチャート33に、二次的文327と対応するように行番号322を設定する。なお、階層識別323の分岐の深さが同一であり、且つ分岐階層のうち末尾の1桁(1又は2)を除いた部分が同一である場合、階層識別323によって示される階層が同一であると判定する。
次に、フローチャート作成手段25は、フローチャート中の互いに類似する箇所(対象範囲)をマークする(S1805)。より具体的には、図19に例示されているように、二次的モジュール32の行320のうち類似有無329fに「類似あり」が設定されている箇所(対象範囲)を枠で囲み、「パターンnn」(nnは、例えば通番)等の表示を行う。なお、通番(nn)は、例えば、フローチャートの先頭から順に付与すればよい。
次に、フローチャート作成手段25は、フローチャート33を記憶手段30′に書き込み(S1806)、処理を終了する。
図19から理解されるように、互いに類似する箇所(対象範囲)を視覚的に明示することで、例えば、メンテナンスの漏れを見つけることができる。例えば、互いに類似する対象範囲の一方に変更箇所があり、他方が変更されていない場合、変更が必要であることに気づくことができる。
なお、フローチャート作成手段25は、解析手段27′の解析機能、書込機能及び表示機能を備えていてもよい。換言すれば、フローチャート作成手段25が解析手段であってもよい。
(第3の実施の形態)
図20に示されるように、本発明の第3の実施の形態による構造解析装置10″は、装置本体20″と、記憶装置(記憶手段)30″と、入力装置40と、表示装置50とを備えている。本実施の形態による記憶装置30″は、装置本体20″の主記憶装置である。装置本体20″は、第2の実施の形態による装置本体20′と同様に、変換手段21と、加工手段22と、解析手段27′と、フローチャート作成手段25とを備えている。
構造解析装置10″は、通信回線80を経由して、ファイルサーバ60と通信可能に接続されている。通信回線80は、例えばLAN(Local Area Network)であってもよいし、インターネットであってもよい。ファイルサーバ60は、記憶装置(記憶手段)70を備えている。記憶装置70は、モジュール31と、二次的モジュール32と、フローチャート33とを記憶することができる。従って、構造解析装置10″は、記憶装置70からモジュール31等を読み込み、記憶装置70にモジュール31等を書き込むことができる。
容易に理解されるように、本実施の形態によれば、第1及び第2の実施の形態と同様に、モジュール31において類似する箇所を見つけることができる。更に見つけた類似箇所を、複数の構造解析装置10″によって共有することができる。