(57)【特許請求の範囲】
【請求項１】
プログラム言語によって記述された１以上の文からなるモジュールの構造解析を行う構造解析装置であって、
前記モジュールには、前記文である条件文を記述することが可能であり、前記条件文には条件式が成立する場合に実行される前記文である成立時実行文及び／又は前記条件式が成立しない場合に実行される前記文である不成立時実行文を記述可能であり、前記条件文のうちの少なくとも１つは、成立時実行文及び／又は不成立時実行文として更に前記条件文を記述可能であり、これにより前記条件文による前記文の階層化が可能であり、前記モジュールにおける連続する前記文からなる複数の対象範囲について、前記階層化による階層構造を夫々特定することが可能であり、
前記構造解析装置は、１以上の前記モジュールが記憶された記憶手段と、前記記憶手段に記憶された前記モジュールのうちの所定の対象モジュールの構造解析を行う解析手段とを備えており、
前記解析手段は、前記対象モジュールを前記記憶手段から取得する取得機能と、取得した前記対象モジュールの前記対象範囲のうち互いに異なる第１対象範囲と第２対象範囲とについて、前記第１対象範囲の前記階層構造と前記第２対象範囲の前記階層構造とが同一である場合、前記対象モジュール内に互いに類似する前記対象範囲が存在することを示す類似通知情報を、前記第１対象範囲及び／又は前記第２対象範囲と関連付けて作成する解析機能とを有している
構造解析装置。
【請求項２】
請求項１記載の構造解析装置であって、
前記対象範囲には前記条件文が少なくとも１つ含まれており、前記対象範囲に含まれる前記条件文のいずれについても、前記条件文の開始から終了までの全体が含まれている
構造解析装置。
【請求項３】
請求項１又は請求項２記載の構造解析装置であって、
前記対象範囲における前記階層構造は、前記対象範囲に含まれる階層レベルを連結した階層パターンによって識別可能であり、前記階層レベルは、前記対象範囲の先頭の前記文を基準として特定される階層の深さを示すものである
構造解析装置。
【請求項４】
請求項３記載の構造解析装置であって、
前記解析手段は、前記解析機能において、前記第１対象範囲の前記階層パターンと前記第２対象範囲の前記階層パターンとが同一である場合、前記第１対象範囲の前記階層構造と前記第２対象範囲の前記階層構造とが同一であると判定する
構造解析装置。
【請求項５】
請求項３又は請求項４記載の構造解析装置であって、
前記解析手段は、前記解析機能において、複数の前記対象範囲を、前記階層パターンに連結された前記階層レベルの数の降順に前記第１対象範囲として使用する
構造解析装置。
【請求項６】
請求項５記載の構造解析装置であって、
前記解析手段は、前記解析機能において、所定の条件を満たす前記対象範囲を前記第１対象範囲として使用しない
構造解析装置。
【請求項７】
請求項６記載の構造解析装置であって、
前記所定の条件は、前記対象範囲の前記階層パターンに連結された前記階層レベルの数を基準にした条件である
構造解析装置。
【請求項８】
請求項１乃至請求項７のいずれかに記載の構造解析装置であって、
前記対象モジュールは、複数の前記モジュールを連結したものである
構造解析装置。
【請求項９】
請求項１乃至請求項８のいずれかに記載の構造解析装置であって、
前記解析手段は、前記対象モジュールと前記類似通知情報とを関連付けて前記記憶手段に記憶する書込機能を更に有している
構造解析装置。
【請求項１０】
請求項１乃至請求項９のいずれかに記載の構造解析装置であって、
表示装置を更に備えており、
前記解析手段は、前記対象モジュールと前記類似通知情報とを関連付けて前記表示装置に表示する表示機能を更に有している
構造解析装置。
【請求項１１】
コンピュータを、請求項１乃至請求項１０のいずれかに記載の構造解析装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム言語によって記述された１以上の文からなるモジュール（ソースプログラム）の構造解析を支援する構造解析装置に関する。
【背景技術】
【０００２】
プログラムを作成する場合、構造化プログラミングが強く推奨される。具体的には、例えば、比較的少数の文からなる処理単位を組み合わせることでモジュールを作成するように求められる。また、モジュール内においては、無条件分岐文（ＧＯＴＯ文）を排除し、条件文や繰り返し文による階層構造を備えることが求められる。更に、複数のモジュールについての共通的な処理については、モジュール化することが求められる。従って、例えばプログラムの合計行数が１００万行を超すような大きなシステムは、夫々が数十の処理単位からなる数千のモジュールを備えていることも多い。
【０００３】
上述のような大規模なシステムは、開発後しばらくの期間においては、開発に携わった担当者、即ちモジュール間の関連及び夫々のモジュールの構造を熟知した者がシステムのメンテナンスを行うことが多い。しかしながら、このようなシステムは数十年に亘ってメンテナンスを繰り返しながら使用されることも多い。時が経つにつれて開発に携わった担当者がいなくなり、モジュールの構造を知らない者がシステムのメンテナンスを行うことになる。このような場合、構造化プログラミングがなされていることに起因して、膨大なモジュールに分散して記述されている機能を把握しなければならず、メンテナンスは困難を極める。
【０００４】
モジュール全体又は各処理単位の機能を理解するためには、条件文による階層構造（以下、単に「階層構造」という。）を把握する必要がある。しかしながら、大規模なシステムにおいては、階層構造が例えば１０階層以上と深い場合も多い。このような場合、階層構造を容易に把握することができない。このため、例えば、メンテナンスを行った箇所に類似する箇所（類似する機能を有する箇所）を見落とし、これにより必要なメンテナンスが行われない場合がある。
【０００５】
以上の説明から理解されるように、階層構造を容易に把握することができれば、システムのメンテナンスを、より容易かつより適切に行うことができる。更に、階層構造が同一の箇所を見つけることで、類似する箇所に対するメンテナンスの漏れを防止することができる。このため、例えば特許文献１及び特許文献２には、階層構造の把握を支援するための技術が開示されている。
【０００６】
特許文献１に開示されたプログラム開発支援装置は、プログラム（モジュール）を表示する際、ＩＦ文によるネスト構造（階層構造）の深さに応じて文の表示色を変更する。これにより、プログラム開発者は階層構造を視覚的に把握することができる。特許文献２に開示された構造化プログラム編集装置によれば、プログラム（モジュール）を表示する際、階層を示すキーワード（例えば、ｉｆやｃａｓｅ）を含む文を表示する一方、その他の文を表示しない又は簡易表示することができる。これにより、プログラム開発者は階層構造を比較的容易に把握することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平７−２１９７５６号公報
【特許文献２】特開２００１−１５４８３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１及び特許文献２のいずれに開示された技術においても、最終的にはプログラム開発者が、モジュールの階層構造を把握しなければならない。より具体的には、メンテナンスを行う必要がある箇所の階層構造を把握し、膨大なモジュールから類似する箇所を見つけ出すという困難かつ手間のかかる作業を行わなければならない。
【０００９】
そこで、本発明は、モジュールにおいて同一の階層構造を備える箇所を検出し、これによって階層構造の把握を支援する構造解析装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、第１の構造解析装置として、
プログラム言語によって記述された１以上の文からなるモジュールの構造解析を行う構造解析装置であって、
前記モジュールには、前記文である条件文を記述することが可能であり、前記条件文には条件式が成立する場合に実行される前記文である成立時実行文及び／又は前記条件式が成立しない場合に実行される前記文である不成立時実行文を記述可能であり、前記条件文のうちの少なくとも１つは、成立時実行文及び／又は不成立時実行文として更に前記条件文を記述可能であり、これにより前記条件文による前記文の階層化が可能であり、前記モジュールにおける連続する前記文からなる複数の対象範囲について、前記階層化による階層構造を夫々特定することが可能であり、
前記構造解析装置は、１以上の前記モジュールが記憶された記憶手段と、前記記憶手段に記憶された前記モジュールのうちの所定の対象モジュールの構造解析を行う解析手段とを備えており、
前記解析手段は、前記対象モジュールを前記記憶手段から取得する取得機能と、取得した前記対象モジュールの前記対象範囲のうち互いに異なる第１対象範囲と第２対象範囲とについて、前記第１対象範囲の前記階層構造と前記第２対象範囲の前記階層構造とが同一である場合、前記対象モジュール内に互いに類似する前記対象範囲が存在することを示す類似通知情報を、前記第１対象範囲及び／又は前記第２対象範囲と関連付けて作成する解析機能とを有している
構造解析装置を提供する。
【００１１】
本発明は、第２の構造解析装置として、第１の構造解析装置であって、
前記対象範囲には前記条件文が少なくとも１つ含まれており、前記対象範囲に含まれる前記条件文のいずれについても、前記条件文の開始から終了までの全体が含まれている
構造解析装置を提供する。
【００１２】
本発明は、第３の構造解析装置として、第１又は第２の構造解析装置であって、
前記対象範囲における前記階層構造は、前記対象範囲に含まれる階層レベルを連結した階層パターンによって識別可能であり、前記階層レベルは、前記対象範囲の先頭の前記文を基準として特定される階層の深さを示すものである
構造解析装置を提供する。
【００１３】
本発明は、第４の構造解析装置として、第３の構造解析装置であって、
前記解析手段は、前記解析機能において、前記第１対象範囲の前記階層パターンと前記第２対象範囲の前記階層パターンとが同一である場合、前記第１対象範囲の前記階層構造と前記第２対象範囲の前記階層構造とが同一であると判定する
構造解析装置を提供する。
【００１４】
本発明は、第５の構造解析装置として、第３又は第４の構造解析装置であって、
前記解析手段は、前記解析機能において、複数の前記対象範囲を、前記階層パターンに連結された前記階層レベルの数の降順に前記第１対象範囲として使用する
構造解析装置を提供する。
【００１５】
本発明は、第６の構造解析装置として、第５の構造解析装置であって、
前記解析手段は、前記解析機能において、所定の条件を満たす前記対象範囲を前記第１対象範囲として使用しない
構造解析装置を提供する。
【００１６】
本発明は、第７の構造解析装置として、第６の構造解析装置であって、
前記所定の条件は、前記対象範囲の前記階層パターンに連結された前記階層レベルの数を基準にした条件である
構造解析装置を提供する。
【００１７】
本発明は、第８の構造解析装置として、第１乃至第７の構造解析装置のいずれかであって、
前記対象モジュールは、複数の前記モジュールを連結したものである
構造解析装置。
【００１８】
本発明は、第９の構造解析装置として、第１乃至第８の構造解析装置のいずれかであって、
前記解析手段は、前記対象モジュールと前記類似通知情報とを関連付けて前記記憶手段に記憶する書込機能を更に有している
構造解析装置を提供する。
【００１９】
本発明は、第１０の構造解析装置として、第１乃至第９の構造解析装置のいずれかであって、
表示装置を更に備えており、
前記解析手段は、前記対象モジュールと前記類似通知情報とを関連付けて前記表示装置に表示する表示機能を更に有している
構造解析装置を提供する。
【００２０】
本発明は、第１のプログラムとして、コンピュータを、第１乃至第１０のいずれかの構造解析装置として機能させるためのプログラムを提供する。
【発明の効果】
【００２１】
本発明によれば、モジュール内に互いに類似する箇所（対象範囲）が存在する場合、対象範囲と関連付けられた類似通知情報が作成される。従って、類似通知情報によって、互いに類似する対象範囲を、より容易に見つけることができる。
【００２２】
更に、システムにおける複数のモジュールを連結して解析することで、膨大なモジュールにおける類似する対象範囲を、より容易に把握することができる。
【図面の簡単な説明】
【００２３】
【図１】本発明の第１の実施の形態による構造解析装置を示すブロック構成図である。
【図２】図１の構造解析装置の記憶装置に記憶されているモジュールの模式的なファイル構成図である。
【図３】図１の記憶装置に記憶されている階層構造データの模式的なファイル構成図である。
【図４】図１の構造解析装置の解析手段の機能を示すフローチャートである。
【図５】図４の解析手段による解析プロセスの前半を、一例を使用して示す図である。
【図６】図４の解析手段による解析プロセスの後半を、一例を使用して示す図である。
【図７】図４の解析手段による表示結果を、一例を使用して示す図である。
【図８】図４の解析手段による解析プロセスの前半を、他の一例を使用して示す図である。
【図９】本発明の第２の実施の形態による構造解析装置を示すブロック構成図である。
【図１０】図９の記憶装置に記憶されているモジュールの一例を示す図である。
【図１１】図９の記憶装置に記憶されている二次的モジュールの模式的なファイル構成図である。
【図１２】図９の二次的モジュールの一例を部分的に示す図である。
【図１３】図９の記憶装置に記憶されているフローチャートの一例を部分的に示す図である。
【図１４】図９の構造解析装置の変換手段の機能を示すフローチャートである。
【図１５】図１４の変換手段の機能の一部をより詳細に示すフローチャートである。
【図１６】図９の構造解析装置の加工手段の機能を示すフローチャートである。
【図１７】図９の二次的モジュールの他の一例を部分的に示す図である。
【図１８】図９の構造解析装置のフローチャート作成手段の機能を示すフローチャートである。
【図１９】図１７の二次的モジュールについて作成されたフローチャートを部分的に示す図である。
【図２０】本発明の第３の実施の形態による構造解析装置を示すシステム構成図である。
【発明を実施するための形態】
【００２４】
（第１の実施の形態）
図１に示されるように、本発明の第１の実施の形態による構造解析装置１０は、装置本体２０と、記憶装置（記憶手段）３０と、入力装置４０と、表示装置５０とを備えている。構造解析装置１０は、プログラム言語によって記述された１以上の文からなるモジュール（ソースプログラム）の構造解析を行うものである。
【００２５】
本実施の形態によるプログラム言語はCOBOLである。しかしながら、本発明はCOBOL以外のプログラム言語にも適用可能である。
【００２６】
本実施の形態によるモジュールは、文字、数字、記号等を組み合わせたモジュール名によって特定可能である。
【００２７】
モジュールには、１以上の文から構成される処理単位を記述することができる。本実施の形態による処理単位は、COBOLにおけるセクションであり、セクションの夫々は、セクション名（処理単位名）によって特定することができる。なお、他のプログラム言語における処理単位は、例えば関数名（処理単位名）によって特定可能な関数である。
【００２８】
モジュールは、他のモジュール又は当該モジュール自身を呼び出すことができる。また、モジュールのセクションは、他のセクション又は当該セクション自身を実行することができる。より具体的には、モジュールには、文として、セクションをセクション名によって特定して実行するための処理単位実行文と、モジュールの一つをモジュール名によって特定して実行するためのモジュール呼び出し文とを記述することができる。本実施の形態においては、処理単位実行文はPERFORM文であり、モジュール呼び出し文はCALL文である。なお、他のプログラム言語における処理単位実行文及びモジュール呼び出し文は、例えば関数名を指定した文である。モジュール呼び出し文が関数名を指定した文である場合、モジュール呼び出し文によって実行されるのは、モジュールのうちの指定された関数部分（即ち、モジュールの一部）である。また、この場合、モジュール呼び出し文においてモジュール名が明示的に記述されない場合（即ち、関数名によってモジュール名が間接的に特定される場合）がある。
【００２９】
更に、モジュールには、文の一つである条件文を記述することができる。条件文には、条件式が成立する場合に実行される文である成立時実行文及び／又は条件式が成立しない場合に実行される前記文である不成立時実行文を記述することができる。本実施の形態における条件文は、IF文及びEVALUATE文である。IF文においては、成立時実行文はTHEN句に記述される文であり、不成立時実行文は、ELSE句に記述される文である。同様に、EVALUATE文においては、成立時実行文はWHEN句に記述される文である。
【００３０】
本実施の形態による条件文は（即ち、条件文のうちの少なくとも１つは）、成立時実行文及び／又は不成立時実行文として更に条件文を記述可能であり、これにより条件文による文の階層化が可能である。例えば、IF文の成立時実行文として、更にIF文を記述することができる。換言すれば、モジュールは、条件文によって階層化可能な１以上の文からなり、これにより所定の階層構造（即ち、条件文による階層構造）を有している。容易に理解されるように、モジュールにおける連続する文からなる複数の箇所（対象範囲）について、階層化による階層構造を夫々特定することができる。
【００３１】
図１に示されるように、記憶装置３０は、例えば磁気ディスク装置であり、フォルダ（図示せず）等によって階層化された様々なファイルを記憶することができる。記憶装置３０は、装置本体２０と通信可能に接続されており、装置本体２０からの指示に従ってファイルの読込（取得）、書込（記憶）等を行う。本実施の形態による記憶装置３０には、１以上のモジュール３１が記憶されている。また、記憶装置３０には、階層構造データ３６を記憶することができる。
【００３２】
モジュール３１は、例えばプログラミングツール（図示せず）を使用して作成される。モジュール３１の夫々が一つのファイルであってもよいし、複数のモジュール３１が一つのファイルとして記憶されていてもよい。階層構造データ３６は、モジュール３１に含まれる１以上の対象範囲の階層構造を、夫々記憶するものである。本実施の形態によれば、モジュール３１の夫々について、階層構造データ３６が作成される。
【００３３】
入力装置４０は、例えばキーボードやマウスである。入力装置４０は、装置本体２０と通信可能に接続されており、キーボードから入力された文字やマウスによって指示された位置を装置本体２０に通知する。
【００３４】
表示装置５０は、例えばディスプレイやプリンタである。表示装置５０は、装置本体２０と通信可能に接続されており、装置本体２０から転送された文字や図形等を表示又は印刷する。
【００３５】
装置本体２０は、例えばＰＣ（Personal Computer）の本体である。装置本体２０は、ＣＰＵ（Central Processing Unit）、主記憶装置等を備えている（図示せず）。記憶装置３０には様々なプログラムの実行形式ファイルが記憶されている（図示せず）。ＣＰＵは、実行形式ファイルを主記憶装置にローディングし、実行形式ファイル内の命令語を実行することで様々な機能を実現する。またＣＰＵが命令語を実行する過程において、記憶装置３０に記憶された所定のファイルが、主記憶装置内のバッファ領域を経由してプログラムの変数領域に読み込まれる。また、プログラムの変数領域に読み込まれたファイルの内容は、必要に応じて主記憶装置内のバッファ領域を経由して記憶装置３０に書き込まれる。上記の説明から理解されるように、記憶装置３０と主記憶装置とは、本実施の形態における読み込み及び書き込み可能な記憶手段として夫々機能する。以降の説明における記憶手段としては記憶装置３０を例示する。
【００３６】
本実施の形態による記憶装置３０には、解析プログラム等の様々なプログラムが記憶されている（図示せず）。上記のプログラムは、主記憶装置にローディングされ、ＣＰＵによって実行され、これによってコンピュータは、様々な手段として（即ち、装置として）機能する。例えば、解析プログラムは、コンピュータを、記憶装置３０に記憶されたモジュール３１のうちの所定の対象モジュール３１の構造解析を行う解析手段２７（構造解析装置１０）として機能させる。換言すれば、本実施の形態による構造解析装置１０の装置本体２０は、解析手段２７を備えている。
【００３７】
図２に示されるように、本実施の形態によるモジュール３１は、ｎ個（ｎ≧１）の行３１０から構成される。本実施の形態によるモジュール３１は、テキストファイルである。但し、モジュール３１は、例えば、MICROSOFT EXCEL（登録商標）のワークシートであってもよい。モジュール３１がワークシートである場合、解析手段２７は、例えばEXCELマクロによって実現することができる。行３１０は、一連番号（行識別）３１１と文３１２とから構成される。一連番号３１１は、行３１０を特定すると共に、行３１０の並び順を判断するためのものである。一連番号３１１は、数字だけでなく文字等を含むことができる。文３１２には、文（データ定義文、実行文、コメント文等）が記述されている。文３１２には、一つの完結した文全体が記述されていてもよいし、一つの文の一部が記述されていてもよい。例えば、MOVE文が２つの行３１０の文３１２に分けて記述されていてもよい。
【００３８】
図３に示されるように、本実施の形態による階層構造データ３６は、ｍ個（ｍ≧１）の行３６０から構成される。本実施の形態による階層構造データ３６は、MICROSOFT EXCEL（登録商標）のワークシートである。但し、階層構造データ３６は、テキストファイル等であってもよい。階層構造データ３６は、解析手段２７がモジュール３１の階層構造を解析することによって作成され、モジュール３１と関連付けて記憶される。具体的には、例えば、階層構造データ３６のファイル名は、対応するモジュール３１のファイル名と同一である。あるいは、互いに対応するモジュール３１及び階層構造データ３６は、同一のワークブックの異なるワークシートであってもよい。
【００３９】
階層構造データ３６の行３６０は、一連番号（行識別）３６１と、階層パターン３６２と、終了行（一連番号）３６３と、類似通知情報３６４とから構成される。本実施の形態による類似通知情報３６４は、類似行（一連番号）３６４ｎを備えている。一連番号３６１には、対応するモジュール３１の一連番号３１１が設定される。終了行３６３には、モジュール３１における一連番号３６１から始まる対象範囲（即ち、階層構造の解析を行う対象となる範囲）が終了する行３１０の一連番号３１１が設定される。階層パターン３６２には、一連番号３６１から終了行３６３までの対象範囲についての階層構造を特定可能なデータが設定される。類似通知情報３６４には、モジュール３１内に互いに類似する対象範囲が存在することを示すデータが設定される。より具体的には、本実施の形態による類似行３６４ｎには、当該行３６０の階層パターン３６２と同一の階層パターン３６２を有する行３６０の一連番号３６１が設定される。
【００４０】
以下、本実施の形態による構造解析装置１０の機能及び動作について、図５乃至図８に示される例を織り交ぜつつ、図４を使用して詳細に説明する。詳しくは、まず、モジュール３１に含まれる条件文がIF文のみである場合（図５及び図６参照）を例にして説明し、次に、モジュール３１にIF文以外の条件文が含まれる場合（図８参照）について説明する。
【００４１】
図４から理解されるように、本実施の形態による解析手段２７は、モジュール３１のうち処理対象とする対象モジュール３１を記憶装置３０（又は主記憶装置）から取得する取得機能（Ｓ４００、Ｓ４０２）と、対象モジュール３１の階層構造を解析する解析機能（Ｓ４０４〜Ｓ４１６）と、対象モジュール３１と階層構造データ３６（従って、類似通知情報３６４）とを関連付けて記憶装置３０に記憶する書込機能（Ｓ４１８）と、対象モジュール３１と類似通知情報３６４とを関連付けて表示装置５０に表示する表示機能（Ｓ４２０）とを有している。
【００４２】
詳しくは、解析手段２７は、例えば入力装置４０から入力された起動指示によって起動され、対象モジュール３１を特定するための対象モジュール名を取得する（Ｓ４００）。対象モジュール名は、例えば起動指示の一部として入力すればよい。解析手段２７は、取得した対象モジュール名によって特定される対象モジュール３１を記憶装置３０から読み込む（Ｓ４０２）。このとき、例えば所定のフォルダに記憶されたモジュール３１のみを読み込み対象としてもよい。なお対象モジュール３１が記憶装置３０に記憶されていない場合、解析手段２７は処理を終了する（図示せず）。
【００４３】
次に、解析手段２７は、対象モジュール３１の各文の階層レベルを特定する（Ｓ４０４）。具体的には、対象モジュール３１の行３１０を１行目から最終行まで順次取得し、行３１０の夫々に階層レベルを付与する。このとき、１行目の階層レベルは１とし、IF文のTHEN句を検出するたびに階層レベルを加算する。一方、IF文のEND-IF（即ち、IF文の終了）を検出するたびに階層レベルを減算する。なお、THEN句やEND-IFの記述を省略することが可能な場合は、IF文における文の並び等を解析して階層レベルの加減算を行えばよい。
【００４４】
例えば、図５に例示される対象モジュール３１については、先頭の（一連番号３１１が0001である）文３１２の階層レベルは１であり、次のTHEN句の階層レベルは２である。上記の例では、階層レベルは数値であり、THEN句を検出するたびに階層レベルを１アップし、END-IFを検出するたびに階層レベルを１ダウンする。しかしながら、階層レベルは、階層レベルの深さを比較することができる限り、数値でなくてもよい。更に、THEN句の検出によって更新された階層レベルが、対応するEND-IFの検出によって更新前の値に戻るように設計されていればよい。また、階層レベルは、実行文について付与すればよい。詳しくは、IF文の先頭行及び終了行と、THEN句又はELSE句が記述された行とに付与すればよい。従って、階層レベルの付与は、対象モジュール３１の先頭の実行分から最後の実行文までの範囲について行えばよい。
【００４５】
次に、解析手段２７は、対象範囲（即ち、階層構造の解析を行う対象とする範囲）を抽出する（Ｓ４０６）。詳しくは、解析手段２７は、対象モジュール３１に含まれる条件文の夫々について、開始行及び終了行を検出する。解析手段２７は、対象モジュール３１に条件文が含まれていない場合、又は対象モジュール３１に含まれる条件文が１つのみの場合、処理を終了する（図示せず）。以上の説明から理解されるように、本実施の形態によれば、対象範囲には条件文が少なくとも１つ含まれており、対象範囲に含まれる条件文のいずれについても、条件文の開始から終了までの全体が含まれている。但し、対象範囲を条件文より前から又は条件文の途中から開始させることも可能である。
【００４６】
図５に例示する対象モジュール３１においては、IF文（条件文）は、一連番号３１１が0001、0003、0005、0011及び0014の行３１０から夫々開始している。また、IF文は、一連番号３１１が0020、0010、0008、0018及び0017の行３１０で夫々終了している。図６の上段に示されるように、以上のように検出された開始行及び終了行は、対象範囲の開始行及び終了行として、夫々使用される。
【００４７】
更に、解析手段２７は、抽出した対象範囲の夫々について階層パターンを作成する（Ｓ４０６）。具体的には、条件文の夫々について、開始行から終了行までの階層レベルが連結され、階層パターン（圧縮前）が作成される。更に、階層パターン（圧縮前）において連続する同一の階層レベルが圧縮され、階層パターン（圧縮後）が作成される。
【００４８】
図５の対象モジュール３１について説明すると、図６の上段に示されるように、例えば開始行が0001、終了行が0020のIF文については、階層レベル：1、2、2、3…3、2、2、1（図５の階層レベル参照）が順次連結され、階層パターン（圧縮前）が作成される。更に、階層パターン（圧縮前）において同一階層レベルが連続する箇所は１つの階層レベルに圧縮され、これにより階層パターン（圧縮後）が作成される。
【００４９】
以上の説明から理解されるように、本実施形態における階層レベルは、対象範囲の先頭の文を基準として特定される階層の深さを示すものである。また、対象範囲における階層構造は、対象範囲に含まれる階層レベルを連結した階層パターンによって識別することができる。
【００５０】
図６の下段に示されるように、解析手段２７は、以上のようにして検出した対象範囲の開始行、階層パターン（圧縮後）及び終了行を、階層構造データ３６の一連番号３６１、階層パターン３６２及び終了行３６３に、夫々設定する（Ｓ４０６の処理の一部）。換言すれば、一連番号３６１、階層パターン３６２及び終了行３６３によって特定される１以上の対象範囲が、階層構造データ３６に設定される。このとき階層パターン３６２は、対象範囲の先頭の文（即ち、IF文）を基準として特定される階層の深さを示すように変換される。具体的には、例えば”2 3 4 3 2”は”1 2 3 2 1”に変換される。図６の下段右の模式図から理解されるように、上記のように作成された階層パターン３６２は、山岳の地形になぞらえることができる。この場合、階層パターン３６２に連結された階層レベルの夫々は、山岳の麓を基準にした相対的な高さを示している。
【００５１】
次に、解析手段２７は、作成した階層構造データ３６の行３６０を、階層パターン３６２の長さ（即ち、階層パターン３６２に連結された階層レベルの数）の降順にソートする（Ｓ４０８）。なお、階層パターン３６２の長さが同一の場合、例えば一連番号３６１の昇順にソートすればよい。図６の下段には、ソート後の階層構造データ３６が例示されている。図６の下段の例において、例えば、”1 2 3 4 3 2 3 4 3 2 1”の階層パターン３６２の長さは１１と最大であるため、ソートにより階層構造データ３６の第１行目に配置される。
【００５２】
次に、解析手段２７は、作成した階層構造データ３６の対象範囲（即ち、対象モジュール３１の対象範囲）のうち互いに異なる２つの対象範囲について（即ち、第１対象範囲と第２対象範囲とについて）、第１対象範囲の階層構造と第２対象範囲の階層構造とが同一である場合、類似通知情報３６４を、第２対象範囲と関連付けて作成する（Ｓ４１０〜Ｓ４１６）。より具体的には、解析手段２７は、作成した階層構造データ３６の行３６０の夫々について、同一階層パターン３６２の有無を判定する（Ｓ４１０〜Ｓ４１６）。
【００５３】
詳しくは、解析手段２７は、まず、第１対象範囲の階層パターンとして、ソート後の先頭の（１行目の行３６０の）階層パターン３６２を取得する（Ｓ４１０）。図６の下段の例においては、”1 2 3 4 3 2 3 4 3 2 1” が取得される。
【００５４】
次に、解析手段２７は、階層構造データ３６に取得した階層パターン３６２と同一の階層パターン３６２が、階層構造データ３６中に存在するか否か判定する（Ｓ４１２）。換言すれば、解析手段２７は、第１対象範囲と異なり、且つ同一の階層パターンを有する第２対象範囲を検索する。存在する場合は、第２対象範囲の類似通知情報３６４の類似行３６４ｎに、第１対象範囲の一連番号３６１を設定する（Ｓ４１２）。図６の下段の例においては、”1 2 3 4 3 2 3 4 3 2 1”と同一の階層パターン３６２が存在しないため、いずれの行３６０の類似行３６４ｎも設定されない（即ち、初期値のままである）。
【００５５】
次に、解析手段２７は、全ての階層パターン３６２の処理が終了したか判定し（Ｓ４１４）、終了した場合（Ｓ４１４でＹＥＳの場合）、Ｓ４１８の処理を行う。一方、未処理の階層パターン３６２が存在する場合（Ｓ４１４でＮＯの場合）、階層構造データ３６中の次の行３６０の階層パターン３６２を取得する。以上の説明から理解されるように、図６の下段の例においては、”1 2 3 2 1”が取得される。この場合、一連番号３６１が0011の行３６０の階層パターン３６２も” 1 2 3 2 1”であり一致するため、一連番号３６１が0011の行３６０の類似行３６４ｎに、”0003”が設定される（Ｓ４１２）。
【００５６】
以上に説明したように、本実施の形態による解析手段２７は、解析機能において、階層パターン３６２を長さの降順にソートし、これにより複数の対象範囲を、階層パターン３６２に連結された階層レベルの数の降順に第１対象範囲として使用している。しかしながら、ソートすることなく、階層構造を比較することも可能である。更に、階層パターン３６２を作成せず、対象モジュール３１の行３１０を１行ずつずらしながら階層レベルを比較することもできる。但し、性能を考慮する場合、本実施の形態のように設計することが好ましい。
【００５７】
以上の説明から理解されるように、本実施の形態による解析手段２７は、解析機能において、第１対象範囲の階層パターン３６２と第２対象範囲の階層パターン３６２とが同一である場合、第１対象範囲の階層構造と第２対象範囲の階層構造とが同一である（即ち、第１対象範囲と第２対象範囲が類似している）と判定する。但し、階層構造の比較方法は、上記の方法に限られない。例えば、図６に示される階層パターン（圧縮前）によって比較してもよい。このようにすることで、階層構造をより厳密に比較することができる。また、階層パターン（圧縮前）を作成する際、IF文、THEN句、ELSE句、END-IF以外の文（例えば、MOVE文）にも階層レベルを付与し、階層パターン（圧縮前）に連結してもよい。このようにすることで、２つの対象範囲の類似性を更に厳密に比較することができる。
【００５８】
なお、２つの対象範囲の類似性は、階層パターン以外によっても比較することができる。例えば、２つの対象範囲において使用されている実行文の種類や数、使用されている関数の種類や数、使用されている項目名称の種類や数によって評価点を算出することもできる。この場合、階層パターンが同一であり、且つ算出した評価点が所定点数以上のときに、２つの対象範囲が類似していると判定すればよい。
【００５９】
解析手段２７は、解析処理（Ｓ４０４〜Ｓ４１６）を終了すると、類似通知情報３６４を記憶装置３０に書き込む（Ｓ４１８）。より具体的には、解析手段２７は、作成した階層構造データ３６を記憶装置３０に書き込む。前述したように、階層構造データ３６は、対象モジュール３１と関連付けて記憶される。従って、階層構造データ３６の類似行３６４ｎ（即ち、対象範囲と関連付けられた類似通知情報３６４）を参照することで、対象モジュール３１における互いに類似する対象範囲を容易に見つけることができる。
【００６０】
次に、解析手段２７は、類似する箇所が識別できるようにして対象モジュール３１を表示装置５０に表示し（Ｓ４２０）、処理を終了する。より具体的には、解析手段２７は、例えば図７に示されるようにして対象モジュール３１を表示する。図７に示されるように、対象モジュール３１のうち互いに類似する対象範囲の夫々は、枠で囲んで表示される。更に、枠の内側に、どの対象範囲と類似しているかを示す類似識別コード（図７においては、丸で囲んだ数字）が表示される。但し、類似識別コードを表示せず、枠の属性（色や太さ等）を変えることで、どの対象範囲と類似しているかを示してもよい。また、対象モジュール３１内において、互いに類似する対象範囲が離れている場合、例えば、対象モジュール３１の先頭に元も近い対象範囲を表示すればよい。互いに類似する箇所を、視覚的に容易に把握できるように表示することで、メンテナンスが必要な箇所を容易に検出することが可能になる。更に、共通化すべき箇所を検出することもできる。
【００６１】
なお、表示機能（Ｓ４２０）において、解析手段２７は、対象モジュール３１を表示するのでなく、作成した階層構造データ３６を表示してもよい。換言すれば、解析手段２７は、対象モジュール３１と類似通知情報３６４とを関連付けて表示装置５０に表示すればよい。
【００６２】
また、本実施の形態による解析手段２７は、書込機能（Ｓ４１８）と、表示機能（Ｓ４２０）とを有しているが、解析手段２７は、書込機能（Ｓ４１８）と、表示機能（Ｓ４２０）との一方を有していればよい。更に、上記の２つの機能のいずれも有さず、代わりに、対象モジュール３１と類似通知情報３６４とを関連付けて他の装置や手段に送信する機能を有していてもよい。
【００６３】
更に、図８に示されるように、対象モジュール３１にIF文以外の条件文が含まれていてもよい。例えば、EVALUATE文については、WHEN句を検出するたびに階層レベルを更新し、対応するEND-EVALUATEを検出するたびに階層レベルを更新前に戻せばよい。IF文、EVALUATE文以外の条件文についても同様に処理することができる。容易に理解されるように、階層レベルを付与した後の解析手段２７の機能・動作は、対象モジュール３１に条件文としてIF文のみが含まれている場合と同じである。
【００６４】
本実施の形態による解析手段２７は、以下に説明するように、様々に変形することが可能である。
【００６５】
例えば、解析手段２７は、第２対象範囲（即ち、比較される側の対象範囲）の類似行３６４ｎに、第１対象範囲（即ち、比較する側の対象範囲）の一連番号３６１を設定するのでなく、第１対象範囲の類似行３６４ｎに、第２対象範囲の一連番号３６１を設定してもよい。また、第１対象範囲及び第２対象範囲の類似行３６４ｎに、第２対象範囲及び第１対象範囲の一連番号３６１を夫々設定してもよい。換言すれば、解析手段２７は、類似通知情報３６４を、第１対象範囲及び／又は第２対象範囲と関連付けて作成すればよい。
【００６６】
また、第１対象範囲（又は第２対象範囲）が複数の第２対象範囲（又は第１対象範囲）と類似する場合、類似行３６４ｎに、最初に類似を検出した第２対象範囲（又は第１対象範囲）の一連番号３６１を設定してもよいし、類似を検出した数だけの類似行３６４ｎを設定してもよい。
【００６７】
但し、図７から理解されるように、類似する対象範囲の検出数が大きくなると（即ち、類似する対象範囲の検出精度が高いと）、対象モジュール３１と関連付けて表示することが困難になる。また、互いに類似する対象範囲中には、互いに類似する対象範囲が更に含まれている場合が多い。このような場合、類似する対象範囲全てを階層構造データ３６に記憶すると、類似行３６４ｎが設定された行３６０の数が不必要に大きくなり、メンテナンスが必要か否かの調査・検討工数が増加するおそれがある。一方、類似判断を行う対象範囲を絞ると、メンテナンスの要否についての調査・検討が漏れる可能性がある。従って、類似する対象範囲の検出精度は、メンテナンスの内容等に合わせて調整した方がよい。
【００６８】
例えば、類似する箇所を検出した後のメンテナンス効率が重視される場合には、解析手段２７が、解析機能（図４のＳ４０４〜Ｓ４１６）において、所定の条件を満たす対象範囲（行３６０）を第１対象範囲として使用しないようにすればよい。所定の条件として、例えば、行３６０の階層パターン３６２に連結された階層レベルの数を基準にした条件を採用すればよい。より具体的には、階層パターン３６２に連結された階層レベルの数が所定の数（例えば１０）より小さい場合、第１対象範囲として使用しないようにすればよい。あるいは、対象範囲における階層レベルの最大値が所定の数（例えば４）より小さい場合、第１対象範囲として使用しないようにしてもよい。
【００６９】
対象モジュール３１として、複数のモジュール３１を連結したものを使用してもよい。例えば、複数のモジュール３１を、夫々の開始行から終了行まで単純に順に連結して、対象モジュール３１としてもよい。このようにすることで、システム全体における類似する対象範囲を纏めて検出することができる。また、複数のモジュール３１を、以下に説明する第２の実施の形態のように連結することも可能である。
【００７０】
（第２の実施の形態）
図９に示されるように、本発明の第２の実施の形態による構造解析装置１０′は、装置本体２０′と、記憶装置（記憶手段）３０′と、入力装置４０と、表示装置５０とを備えている。構造解析装置１０′は、第１の実施の形態による構造解析装置１０と同様に、プログラム言語によって記述された１以上の文からなるモジュール（ソースプログラム）の構造解析を行うものである。第２の実施の形態によるプログラム言語、モジュール、入力装置４０及び表示装置５０は、第１の実施の形態と同様に夫々構成されている。
【００７１】
図９に示されるように、記憶装置３０′は、記憶装置３０と同様な磁気ディスク装置である。記憶装置３０′には、第１の実施の形態と同様に、１以上のモジュール３１が記憶されている。また、記憶装置３０′には、二次的モジュール（モジュール）３２とフローチャート３３とが記憶される。本実施の形態による二次的モジュール３２は、モジュール３１を連結・変換して作成される。また、フローチャート３３は、二次的モジュール３２から作成される。
【００７２】
装置本体２０′は、装置本体２０と同じく、例えばＰＣの本体であり、ＣＰＵ、主記憶装置等を備えている（図示せず）。第１の実施の形態と同様に、記憶装置３０′と主記憶装置とは、本実施の形態における読み込み及び書き込み可能な記憶手段として夫々機能する。以降の説明における記憶手段としては記憶装置３０′を例示する。
【００７３】
本実施の形態による記憶装置３０′には、変換プログラムと、加工プログラムと、フローチャート作成プログラムと、解析プログラムとが記憶されている（図示せず）。上記のプログラムは、主記憶装置にローディングされ、ＣＰＵによって実行され、これによってコンピュータは、変換手段２１、加工手段２２、フローチャート作成手段２５、及び解析手段２７′として夫々機能する。即ち、上記のプログラムは、コンピュータをモジュールの構造解析を支援する構造解析装置１０′として機能させるためのものである。換言すれば、本実施の形態による構造解析装置１０′の装置本体２０′は、変換手段２１と、加工手段２２と、フローチャート作成手段２５と、解析手段２７′とを備えている。
【００７４】
本実施の形態による変換手段２１は、記憶装置３０′に記憶されたモジュール３１のうちの所定の対象モジュール３１を二次的モジュール３２に変換して記憶装置３０′に記憶する。加工手段２２は、記憶装置３０′に記憶された二次的モジュール３２を加工する。フローチャート作成手段２５は、記憶装置３０′に記憶された二次的モジュール３２から表形式のフローチャート３３を作成する。解析手段２７′は、第１の実施の形態の解析手段２７と同様に、記憶装置３０′に記憶されたモジュール３１の構造解析を行う。但し、本実施の形態による解析手段２７′は、モジュール３１を直接解析するのでなく、二次的モジュール３２のうちの所定の対象モジュール３２の構造解析を行う。
【００７５】
図１０に示されるように、記憶装置３０′には、例えばモジュール名がＸＸＸであるモジュール３１（ＸＸＸモジュール）と、モジュール名がＡＡＡであるモジュール３１（ＡＡＡモジュール）と、モジュール名がＢＢＢであるモジュール３１（ＢＢＢモジュール）と、モジュール名がＣＣＣであるモジュール３１（ＣＣＣモジュール）とが記憶されている。モジュール３１の夫々は、一連番号３１１と文３１２とからなる複数の行３１０から構成されている。
【００７６】
ＸＸＸモジュールはメインモジュール（即ち、処理の起点となるモジュール）であり、ＡＡＡモジュールとＢＢＢモジュールとをモジュール名によって特定して呼び出すためのCALL文が夫々記述された行３１０を有している。ＡＡＡモジュールは、ＣＣＣモジュールを呼び出すCALL文が記述された行３１０を有している。
【００７７】
図１０に例示されたモジュール３１の夫々は、１以上のセクションから構成されている。例えば、ＸＸＸモジュールは、”PROCEDURE DIVISION.”が記述された行３１０の次の行から、”STOP RUN.”が記述された行３１０までのメインセクション（モジュールにおける処理の起点となる主たる処理単位）と、”AAA-SUB SECTION.”が記述された行３１０から、”EXIT.”が記述された行３１０までの従たるセクション（従たる処理単位）を有している。なお、上述の従たるセクションのセクション名（処理単位名）はＡＡＡ−ＳＵＢであり、メインセクションは、ＡＡＡ−ＳＵＢセクションをセクション名によって特定して実行する行３１０を備えている。より具体的には、メインセクションは、”PERFORM AAA-SUB.”が記述された行３１０を備えている。
【００７８】
図１０に例示されたセクションの一部は、条件文が記述された行３１０を備えている。例えば、ＸＸＸモジュールのメインセクションは、５つのWHENを有するEVALUATE文が記述された行３１０と、THENおよびELSEを有するIF文が記述された行３１０とを備えている。また、ＣＣＣモジュールのメインセクションは、IF文のELSEにおいて更にIF文が記述された行３１０を備えており、これによって条件文による文３１２の階層化が行われている。
【００７９】
図１１に示されるように、本実施の形態による二次的モジュール３２は、ｐ個（ｐ≧１）の二次的行（行）３２０から構成される。本実施の形態においては、二次的モジュール３２は、MICROSOFT EXCEL（登録商標）のワークシートであるが、テキストファイル等であってもよい。行３２０は、モジュール識別３２１と、行番号３２２と、階層識別３２３と、命令識別３２４と、一連番号（行識別）３２６と、二次的文３２７と、階層構造３２９とから構成される。階層構造３２９は、階層パターン３２９ｐと、類似通知情報３２９ｒとを備えている。本実施の形態による類似通知情報３２９ｒは、類似有無３２９ｆを備えている。
【００８０】
二次的モジュール３２は、１以上のモジュール３１から実行文等が記述された行３１０を集めて加工することによって生成されている。本実施の形態による二次的モジュール３２は、変換手段２１によって生成され、加工手段２２及び解析手段２７′によって加工される。特に、二次的モジュール３２のうち階層構造３２９は、第１の実施の形態における階層構造データ３６と同様に、解析手段２７′によって設定される。
【００８１】
図１２に示されるように、本実施の形態による二次的モジュール３２は、例えば、ＸＸＸモジュール、ＡＡＡモジュール、ＢＢＢモジュール及びＣＣＣモジュールのPROCEDURE DIVISIONの行３１０を集めて加工したものである。
【００８２】
図１０及び図１２から理解されるように、行３２０の二次的文３２７において、行３１０の文３１２に記述されているCALL文はコメント化されて（コメント文に変更されて）いる。また、CALL文によって呼び出されるＡＡＡモジュールのPROCEDURE DIVISIONの文３１２が、行３２０の二次的文３２７として展開されている。更に、ＡＡＡモジュールからCALL文によって呼び出されるＣＣＣモジュールのPROCEDURE DIVISIONの文３１２が、行３２０の二次的文３２７として展開されている。同様に、行３１０の文３１２に記述されているPERFORM文は、行３２０の二次的文３２７においてコメント化されている。また、PERFORM文によって実行されるＡＡＡ−ＳＵＢセクションの文３１２が、行３２０の二次的文３２７として展開されている。
【００８３】
また、文３１２に記述された条件文のうちIF文以外のもの（本実施の形態においてはEVALUATE文）は、二次的文３２７においてIF文に変換されている。例えば、”EVALUATE WK-A-O”、”WHEN CS-1”、”MOVE CS-1 TO WK-B-I”が夫々記述された３つの文３１２は、”*#E EVALUATE WK-A-O”（コメント文）、”*#E WHEN CS-1” （コメント文）、”IF ( WK-A-O = CS-1 )” 、”THEN”、”MOVE CS-1 TO WK-B-I”が夫々記述された５つの二次的文３２７に変換される。上記の変換に加え、IF文におけるTHEN、ELSE及びEND IFの欠落を補うための二次的文３２７が生成される。また、否定の条件式は肯定の条件式に変換される。更に、ANDやORで結合された条件式を有するIF文は複数のIF文に分解されて、２つの評価対象オペランド間の関係を１つの論理演算子のみによって評価する単純な二次的条件式を有するIF文に変換される。但し、上記の変換の一部（例えば、ANDやORで結合された条件式の分解）は行わなくてもよい。
【００８４】
以上に加えて、複数の文３１２に分かち書きされているMOVE文等は、１つの二次的文３２７に纏められている。即ち、二次的モジュール３２の行３２０の夫々は、モジュール３１の行３１０に基づいて生成されており、二次的文３２７は、文３１２をそのままコピーしたものであるか、又は文３１２を加工・展開することによって生成されたものである。
【００８５】
本実施の形態によるモジュール識別３２１は、夫々の行３２０がいずれのモジュール３１に基づくものであるかを示すものである。より具体的には、モジュール識別３２１には、ＸＸＸ等のモジュール名が設定される。なお、モジュール名に代えて、モジュール３１を一意に識別可能な番号等を設定してもよい。
【００８６】
一連番号３２６には、二次的文３２７が文３１２のコピーである行３２０においては、コピー元の行３１０の一連番号３１１が設定される。また、二次的文３２７が文３１２をコメント化したものである等、行３１０と１対１に対応する行３２０については、一連番号３２６には、対応する行３１０の一連番号３１１が設定される。一方、生成された（追加された）行３２０の一連番号３２６には、生成された行３２０であることを識別可能な記号等が設定される。このようにすることで、システムのメンテナンスを行う際に、行３２０と行３１０を容易に対応付けることができる。
【００８７】
本実施の形態による行番号３２２には、１から始まる通番が行３２０の並び順に沿って設定されている。しかしながら、行番号３２２の大小関係を比較することが可能な限り、通番でなくてもよい。例えば、行番号３２２に記号等を設定してもよい。
【００８８】
本実施の形態による階層識別３２３は、分岐階層と分岐の深さとから構成されている。分岐階層は、条件文による階層を識別するためのものである。本実施の形態による分岐階層は、１を１行目の行３２０における出発値としており、IF文のTHENが記述された行３２０において１．１に変わり、ELSEが記述された行３２０において１．２に変わる。そしてIF文のEND IFが記述された行３２０の次の行から１に戻る。一般化すると、THENが記述された行３２０においては、直前の行３２０の分岐階層の末尾に「．１」が加えられ、ELSEが記述された行３２０においては、直前の行３２０の分岐階層の末尾「．１」が「．２」に変更され、END IFが記述された行３２０の次の行においては、END IFが記述された行３２０の分岐階層の末尾「．２」が削除されている。上記の場合を除き、分岐階層には、直前の行３２０と同一の値が設定されている。
【００８９】
本実施の形態による分岐の深さは、１を１行目の行３２０における出発値としており、IF文のTHENが記述された行３２０において１．１に変わり、END IFが記述された行３２０の次の行から１に戻る。また、その後のIF文のTHENが記述された行３２０において１．２に変わり、END IFが記述された行３２０の次の行から１に戻る。一般化すると、分岐の深さは、１を出発値としており、THENが記述された行３２０において末尾に「．ｑ」（ｑは１以上の整数）なる桁が加えられ、END IFが記述された行３２０の次の行において末尾の「．ｑ」なる桁が削除される。「．ｑ」におけるｑの値は、桁の夫々について１を出発値としている。詳しくは、１桁目の「．ｑ」（例えば１．２の「．２」）におけるｑの値は、１を出発値としており、付加される毎にインクリメントされる。一方、２桁目以降の「．ｑ」（例えば１．２．１の「．１」）におけるｑの値は、当該桁を除いた分岐の深さが同一値である行３２０が連続する範囲において１を出発値としており、当該連続する範囲において付加される毎にインクリメントされる。
【００９０】
命令識別３２４は、二次的文３２７に記述されている文の種別を示すものである。本実施の形態による命令識別３２４は、命令名と、条件命令であるか否かを示す区分（条件命令当否）と、処理命令であるか否かを示す区分（処理命令当否）とからなる。二次的文３２７にIF文の一部が記述されている場合（IF、THEN、ELSE又はEND-IFが記述されている場合）、条件命令当否には○が設定される。また、二次的文３２７にIF文以外の実行文が記述されている場合（例えばMOVE文やCOMPUTE文が記述されている場合）、処理命令当否には○が設定される。条件命令当否又は処理命令当否に○が設定されている場合、命令名には二次的文３２７に記述されている命令名（IF、THEN、END-IF、MOVE等）が設定される。
【００９１】
階層パターン３２９ｐは、第１の実施の形態と同様に、対象範囲の階層構造を特定するためのものである。詳しくは、第１の実施の形態と同様に、IF文が開始する（即ち、対象範囲が始まる）行３２０の階層パターン３２９ｐに、階層レベルを連結した階層パターンが設定される。図１２において破線Ａで示した部分から理解されるように、本実施の形態によれば、階層識別３２３の長さ（例えば、分岐の深さの桁数）が、階層レベルを示している。
【００９２】
類似通知情報３２９ｒにも、第１の実施の形態と同様に、二次的モジュール３２内に互いに類似する対象範囲が存在することを示すデータが設定される。本実施の形態によれば、類似有無３２９ｆに、当該行３２０の階層パターン３２９ｐと同一の階層パターン３２９ｐを有する行３２０が存在するか否かを示すフラグが設定される。
【００９３】
行３２０は、以上に説明した項目に加えて様々な項目を備えることができる。例えば、対応する行３１０のセクション名を備えることにより、行３２０と行３１０との対応を、より容易に把握することができる。
【００９４】
本実施の形態によれば、記憶装置３０′に記憶された二次的モジュール３２に基づいて様々なファイルを作成し、作成したファイルをモジュール３１の構文解析を支援するための資料として表示装置５０に表示・印刷することができる。具体的には、例えば二次的モジュール３２に基づいてフローチャート３３を作成することができる。
【００９５】
図１３から理解されるように、本実施の形態によるフローチャート３３は、MICROSOFT EXCEL（登録商標）のワークシートであり、二次的モジュール３２から生成される。但し、フローチャート３３は他の形式のファイル等であっても構わない。
【００９６】
フローチャート３３は、二次的モジュール３２の二次的文３２７をフローチャート風に編集したものである。より具体的には、IF文と関連しない二次的文３２７は、二次的モジュール３２における行３２０の並び順に沿って、第２列目に並べられている。一方、二次的文３２７のうち、IF文と関連するもの（即ち、IFからEND-IFまでの文が記述されたもの）については、IF文における条件式が成立する場合に実行される二次的文３２７と、IF文における条件式が成立しない場合に実行される二次的文３２７とが左右の列に並べられている。
【００９７】
フローチャート３３の第１列目には第２列目に並べられた二次的文３２７の行番号３２２が設定されており、これによりフローチャート３３の行を二次的モジュール３２の行３２０に夫々対応付けることができる。なお、行番号３２２に限らず、行３２０の任意の項目をフローチャート３３に設定することができる。
【００９８】
以上の説明から理解されるように、本実施の形態によるフローチャート３３は、IF文による階層が深くなるにつれて列が増加する。換言すれば、二次的モジュール３２のうち、より複雑な条件文が記述されている箇所は、表の列方向に延びるようにして表示される。従って、フローチャート３３を表示装置５０に表示させ、左右の列に並べて表示された実行文を見比べることで、条件式の成否による処理の相違を把握することができる。フローチャート３３における処理の塊を色付けして表示装置５０に表示させることもできる。例えば、フローチャート３３のIF及びEND-IFが設定された欄に所定の背景色Ａを設定し、THENの場合に実行される二次的文３２７に所定の背景色Ｂを設定し、ELSEの場合に実行される二次的文３２７に所定の背景色Ｃを設定することができる。このようにすることで、フローチャート３３を表示装置５０に表示させた際に、IF文による階層構造を背景色の組み合わせによるパターンとして視覚的に把握することが可能になる。
【００９９】
以下、本実施の形態による構造解析装置１０′の機能及び動作について詳細に説明する。
【０１００】
図１４から理解されるように、本実施の形態による変換手段２１は、展開制御情報を取得する制御情報取得機能（Ｓ１４００）と、モジュール３１のうち処理対象とする対象モジュール３１を記憶装置３０′から読み込む読込機能（Ｓ１４０２、Ｓ１４０４）と、対象モジュール３１を二次的モジュール３２に変換する変換機能（Ｓ１４０６〜Ｓ１４１２）と、二次的モジュール３２を記憶装置３０′に記憶する書込機能（Ｓ１４１４）とを有している。
【０１０１】
より具体的には、図１４に示されるように、変換手段２１は、例えば入力装置４０から入力された起動指示によって起動され、例えば起動指示の一部として入力された展開制御情報を取得する（Ｓ１４００）。ここで、展開制御情報は、展開制限指示を指定することが可能なものであり、展開制限指示は、実行対象のセクション又は呼び出し対象のモジュール３１の文３１２に記述されている文の展開を初回のみに制限することを指示するものである。
【０１０２】
次に、変換手段２１は、対象モジュール３１を特定するための対象モジュール名を取得する（Ｓ１４０２）。対象モジュール名は、展開制御情報と同様な方法で取得することができる。変換手段２１は、取得した対象モジュール名によって特定される対象モジュール３１を記憶装置３０′から読み込む（Ｓ１４０４）。
【０１０３】
次に、変換手段２１は、対象モジュール３１の処理開始箇所の文３１２を取得する（Ｓ１４０６）。本実施の形態による処理開始箇所は、メインセクションの先頭である。変換手段２１は、取得した文３１２について二次的文出力処理を行う（Ｓ１４０８）。次に、変換手段２１は、処理終了箇所の文３１２を処理済みであるか判定する（Ｓ１４１０）。本実施の形態による処理終了箇所は、メインセクションの末尾である。処理済みの場合（Ｓ１４１０においてＹＥＳの場合）、変換手段２１は、作成した二次的モジュール３２を記憶装置３０′に書き込み（Ｓ１４１４）、処理を終了する。一方、処理済みでない場合（Ｓ１４１０においてＮＯの場合）、変換手段２１は、次に処理する文３１２（後続する行３１０の文３１２）を取得し（Ｓ１４１２）、取得した文３１２について二次的文出力処理を行う（Ｓ１４０８）。
【０１０４】
図１５は、図１４に示した変換手段２１の処理（機能）のうち、二次的文出力処理（Ｓ１４０８）をより詳細に示すフローチャートである。図１５に示されるように、変換手段２１は、二次的文出力処理において文３１２を二次的文３２７として出力する（Ｓ１５００）。より具体的には、本実施の形態においては、文３１２に記述されている実行文等をワークシートの所定の行・列にコピーする。このとき、前述したように、PERFORM文をコメント文にする等の加工が行われる。また、変換手段２１は、モジュール識別３２１と、行番号３２２と、一連番号３２６とに前述したような値を設定する。
【０１０５】
次に、変換手段２１は、文３１２に条件文が記述されているか判定する（Ｓ１５０２）。文３１２に記述されている実行文が条件文である場合（Ｓ１５０２でＹＥＳの場合）、変換手段２１は、前述したようにIF文以外の条件文をIF文に変換する等の処理を行う。より具体的には、変換手段２１は、条件文の条件式に基づいて、二次的文の一つである二次的条件文（IF文）が記述された二次的文３２７を生成し、二次的条件文によって二次的文３２７を階層化して二次的モジュールに出力し（Ｓ１５０４）、二次的文出力処理を終了する。ここで、二次的条件文は、２つの評価対象オペランド間の関係を１つの論理演算子のみによって評価する二次的条件式が成立するか成立しないかによって実行すべき二次的文３２７を選択するものである。
【０１０６】
文３１２に記述されている実行文が条件文でない場合（Ｓ１５０２でＮＯの場合）、変換手段２１は、文３１２に記述されている実行文が処理単位実行文（PERFORM文）であるか判定する（Ｓ１５０６）。処理単位実行文である場合（Ｓ１５０６でＹＥＳの場合）、変換手段２１は、実行対象の処理単位（セクション）の処理開始箇所の文３１２を取得する。本実施の形態においては、処理単位の処理開始箇所はセクションの先頭である。
【０１０７】
処理単位実行文でない場合（Ｓ１５０６でＮＯの場合）、変換手段２１は、文３１２に記述されている実行文がモジュール呼び出し文（CALL文）であるか判定する（Ｓ１５１０）。モジュール呼び出し文である場合（Ｓ１５１０でＹＥＳの場合）、変換手段２１は、CALL文によって特定される呼び出し対象のモジュール３１を記憶装置３０′から読み込み（Ｓ１５１２）、呼び出し対象のモジュール３１の処理開始箇所の文３１２を取得する（Ｓ１５１４）。本実施の形態においては、呼び出し対象のモジュール３１の処理開始箇所は、当該モジュール３１のメインセクションの先頭である。一方、モジュール呼び出し文でない場合（Ｓ１５１０でＮＯの場合）、変換手段２１は二次的文出力処理を終了する。
【０１０８】
変換手段２１は、実行対象のセクションの文３１２又は呼び出し対象のモジュール３１の文３１２について、再帰的に二次的文出力処理を行う（Ｓ１５１６）。次に、変換手段２１は、処理終了箇所の文３１２を処理済みであるか判定する（Ｓ１５１８）。本実施の形態による処理終了箇所は、実行対象のセクションについては当該セクションの末尾であり、呼び出し対象のモジュール３１についてはメインセクションの末尾である。処理済みの場合（Ｓ１５１８においてＹＥＳの場合）、変換手段２１は、二次的文出力処理を終了する。一方、処理済みでない場合（Ｓ１５１８においてＮＯの場合）、変換手段２１は、次に処理する文３１２（後続する行３１０の文３１２）を取得し（Ｓ１５２０）、取得した文３１２について再帰的に二次的文出力処理を行う（Ｓ１５１６）。
【０１０９】
なお、変換手段２１は、再帰的な（自分自身を実行する）PERFORM文については、実行対象のセクションの文３１２の展開を行わない。同様に、再帰的な（自分自身を呼び出す）CALL文については、呼び出し対象のモジュール３１の文３１２の展開を行わない。更に、変換手段２１は、展開制御情報に展開制限指示が指定されている場合、既に二次的文出力処理を行ったセクションとセクション名が同一であるセクションを実行するPERFORM文については、二次的文出力処理を行わない（Ｓ１５０６）。同様に、変換手段２１は、展開制御情報に展開制限指示が指定されている場合、変換手段２１は、既に二次的文出力処理を行ったモジュール３１とモジュール名が同一であるモジュール３１を呼び出すCALL文については、二次的文出力処理を行わない（Ｓ１５１０）。
【０１１０】
以上の説明から理解されるように、変換手段２１の変換機能は、対象モジュール３１の所定の処理開始箇所から所定の処理終了箇所までに記述された文３１２の夫々を二次的文３２７として二次的モジュールに順次出力する。更に、文３１２が処理単位実行文又はモジュール呼び出し文である場合、実行対象の前記処理単位又は呼び出し対象のモジュール３１に記述されている文３１２を展開することで二次的文３２７を生成して二次的モジュール３２に出力する。更に、展開される文３１２における処理単位実行文又はモジュール呼び出し文についても展開を更に行う（即ち、再帰的に展開する）。従って、多数の処理単位やモジュール３１に分散された機能を、対象モジュール３１のメインセクションに手繰り寄せるようにして集めることができる。なお、モジュール３１についての所定の処理開始箇所及び所定の処理終了箇所は、夫々、PROCRDURE DIVISONの先頭及び末尾としてもよい。また、例えば、メインセクションの途中とすることも可能である。但し、不要な展開を避け、且つ十分な展開結果を得るためには本実施の形態のようにするのが好ましい。
【０１１１】
また、以上の説明から理解されるように、変換手段２１の変換機能は、展開制御情報に展開制限指示が指定されている場合、同一の処理単位については、実行対象の処理単位に記述されている文３１２の展開を初回の１回のみ行い、同一のモジュール３１については、呼び出し対象のモジュール３１に記述されている文３１２の展開を初回の１回のみ行う。
【０１１２】
以上に説明したように、変換手段２１によって、二次的文３２７からなる二次的モジュール３２が記憶装置３０′に記憶される。
【０１１３】
図１６から理解されるように、本実施の形態による加工手段２２は、読込機能（Ｓ１６００、Ｓ１６０２）と、階層識別付加機能（Ｓ１６０６）と命令識別付加機能（Ｓ１６０８）と、書込機能（Ｓ１０１４）とを有している。読込機能は、処理対象の二次的モジュール３２を記憶装置３０′から読み込む機能である。階層識別付加機能は、二次的モジュール３２の二次的文３２７の少なくとも一部について、二次的文３２７がいずれの階層に位置しているかを示す階層識別３２３を付加する機能である。命令識別付加機能は、二次的モジュール３２の二次的文３２７の少なくとも一部について、二次的文３２７に記述されている文の種別を示す命令識別３２４を二次的文３２７に付加する機能である。書込機能は、階層識別３２３及び命令識別３２４が付加された二次的文３２７からなる二次的モジュール３２を記憶装置３０′に記憶する機能である。
【０１１４】
より具体的には、図１６に示されるように、加工手段２２は、例えば変換手段２１と同様に起動され、処理対象の二次的モジュール３２を特定するための二次的モジュール名を取得する（Ｓ１６００）。加工手段２２は、取得した二次的モジュール名によって特定される二次的モジュール３２を記憶装置３０′から読み込む（Ｓ１６０２）。
【０１１５】
次に、加工手段２２は、処理対象の二次的モジュール３２の処理開始箇所の二次的文３２７を取得する（Ｓ１６０４）。本実施の形態による処理開始箇所は、二次的モジュール３２の先頭である。
【０１１６】
加工手段２２は、取得した二次的文３２７について階層識別３２３を付加する（Ｓ１６０６）。より具体的には、本実施の形態による加工手段２２は、ワークシートにおいて行３２０の階層識別３２３と対応する行・列に、前述したような分岐階層と分岐の深さとを設定する。次に、加工手段２２は、取得した二次的文３２７について命令識別３２４を付加する（Ｓ１６０８）。より具体的には、本実施の形態による加工手段２２は、ワークシートにおいて行３２０の命令識別３２４と対応する行・列に、前述したような命令名と、条件命令当否と、処理命令当否とを設定する。
【０１１７】
次に、加工手段２２は、処理終了箇所の二次的文３２７を処理済みであるか判定する（Ｓ１６１２）。本実施の形態による処理終了箇所は、二次的モジュール３２の末尾である。処理済みの場合（Ｓ１６１２においてＹＥＳの場合）、加工手段２２は、加工した二次的モジュール３２を記憶装置３０′に書き込み（Ｓ１６１４）、処理を終了する。一方、処理済みでない場合（Ｓ１６１２においてＮＯの場合）、加工手段２２は、次に処理する二次的文３２７（後続する行３２０の二次的文３２７）を取得し（Ｓ１６１６）、取得した二次的文３２７について階層識別３２３の付加等を行う（Ｓ１６０６、Ｓ１６０８）。
【０１１８】
以上に説明したように、加工手段２２によって、階層識別３２３及び命令識別３２４が付加された二次的文３２７からなる二次的モジュール３２が記憶装置３０′に記憶される。
【０１１９】
本実施の形態による解析手段２７′は、第１の実施の形態による解析手段２７と同様な機能を備えている。以下、解析手段２７と異なる機能を中心に、図１７に示される例を織り交ぜつつ、図４を使用して説明する。
【０１２０】
解析手段２７′は、解析手段２７と同様に起動され、対象モジュール３２を記憶装置３０′（又は主記憶装置）から読み込む（Ｓ４００、Ｓ４０２）。換言すれば、解析手段２７′は、モジュール３１ではなく、二次的モジュール３２を解析対象とする。
【０１２１】
解析手段２７′は、対象モジュール３２の各文の階層レベルを特定する（Ｓ４０４）際、命令識別３２４の命令名によって、IF文の開始、終了等を判定する。また、階層識別３２３の長さを、階層レベルとする。図１７の例においては、各行３２０に対して、右から２番目の列に示されるように階層レベルが付与される。
【０１２２】
解析手段２７′は、解析手段２７と同様に、対象範囲（即ち、階層構造の解析を行う対象とする範囲）を抽出する（Ｓ４０６）。但し、本実施の形態による解析手段２７′は、対象範囲に含まれる範囲を対象範囲としない。具体的には、図１７に例示する対象モジュール３２においては、IF文（条件文）のうちの２つは、行番号３２２が874及び2397の行３２０から夫々開始している。また、上記のIF文は、行番号３２２が921及び2437の行３２０で夫々終了している。解析手段２７′は、行番号３２２が874の行３２０から行番号３２２が921の行３２０までと、行番号３２２が2397の行３２０から行番号３２２が2437の行３２０までを対象範囲とする。一方、解析手段２７′は、例えば、行番号３２２が882の行３２０から行番号３２２が920の行３２０までを対象範囲としない。
【０１２３】
解析手段２７′は、解析手段２７と同様に階層パターンを作成する（Ｓ４０６）。図１７に例示する対象モジュール３２においては、行番号３２２が874の行３２０及び行番号３２２が2397の行３２０の夫々について、” 1 2 3 4 3 4 5 4 3 2 1”の階層パターンが作成され、階層パターン３２９ｐに設定される。
【０１２４】
解析手段２７′は、解析手段２７と同様に、作成した階層構造３２９の対象範囲（即ち、対象モジュール３２の対象範囲）のうち互いに異なる２つの対象範囲について（即ち、第１対象範囲と第２対象範囲とについて）、第１対象範囲の階層構造と第２対象範囲の階層構造とが同一である場合、類似通知情報３２９ｒを作成する（Ｓ４０８〜Ｓ４１６）。但し、解析手段２７′は、類似通知情報３２９ｒを、第１対象範囲及び第２対象範囲と関連付けて作成する。より具体的には、解析手段２７は、対象モジュール３２の行３２０の夫々について、同一階層パターン３２９ｐの有無を判定する（Ｓ４１０〜Ｓ４１６）。互いに同一の階層パターン３２９ｐを有する２つの行３２０を検出した場合、検出した２つの行３２０の夫々の類似有無３２９ｆに「類似あり」を意味するフラグを設定する。
【０１２５】
図１７に例示する対象モジュール３２においては、行番号３２２が874の行３２０から行番号３２２が921の行３２０までの第１対象範囲（R1）と、行番号３２２が2397の行３２０から行番号３２２が2437の行３２０までの第２対象範囲（R2）とが同一の階層パターン３２９ｐを有している。このため、行番号３２２が874の行３２０及び行番号３２２が2397の行３２０の類似有無３２９ｆに、”1”（ 類似対象範囲あり）が夫々設定される。
【０１２６】
次に、解析手段２７′は、全ての階層パターン３２９ｐの処理が終了したか判定し（Ｓ４１４）、終了した場合（Ｓ４１４でＹＥＳの場合）、Ｓ４１８の処理を行う。より具体的には、階層構造３２９を設定した二次的モジュール３２を記憶装置３０′に書き込む（更新する）。一方、未処理の階層パターン３２９ｐが存在する場合（Ｓ４１４でＮＯの場合）、次に処理すべき階層パターン３２９ｐを取得する。
【０１２７】
以上の説明から理解されるように、本実施の形態による解析手段２７′は、第１の実施の形態による解析手段２７と同様に２つの対象範囲の類似性を比較することができる。更に、本実施の形態によれば、対象モジュール３２には、関連する複数のモジュール３１が処理順に連結されている。従って、システム全体における類似する対象範囲を、より調査し易い形式で、纏めて検出することができる。
【０１２８】
図１８から理解されるように、本実施の形態によるフローチャート作成手段２５は、読込機能（Ｓ１８００、Ｓ１８０２）と、フローチャート作成機能（Ｓ１８０４、Ｓ１８０５）と、書込機能（Ｓ１８０６）とを有している。
【０１２９】
より具体的には、図１８に示されるように、フローチャート作成手段２５は、例えば変換手段２１と同様に起動され、処理対象の二次的モジュール３２を特定するための二次的モジュール名を取得する（Ｓ１８００）。フローチャート作成手段２５は、取得した二次的モジュール名によって特定される処理対象の二次的モジュール３２を記憶装置３０′から読み込む（Ｓ１８０２）。
【０１３０】
次に、フローチャート作成手段２５は、二次的条件式の成否に対応した二次的文３２７を表の左右に並べた表形式のフローチャート３３を作成する（Ｓ１８０４）。より具体的には、二次的モジュール３２の二次的文３２７のうち階層識別３２３によって示される階層が同一である二次的文３２７について、二次的条件式が成立した場合に実行される二次的文３２７と二次的条件式が成立しない場合に実行される二次的文３２７とを表の左右に並べたフローチャート３３を作成する。このとき、フローチャート３３に、二次的文３２７と対応するように行番号３２２を設定する。なお、階層識別３２３の分岐の深さが同一であり、且つ分岐階層のうち末尾の１桁（１又は２）を除いた部分が同一である場合、階層識別３２３によって示される階層が同一であると判定する。
【０１３１】
次に、フローチャート作成手段２５は、フローチャート中の互いに類似する箇所（対象範囲）をマークする（Ｓ１８０５）。より具体的には、図１９に例示されているように、二次的モジュール３２の行３２０のうち類似有無３２９ｆに「類似あり」が設定されている箇所（対象範囲）を枠で囲み、「パターンｎｎ」（ｎｎは、例えば通番）等の表示を行う。なお、通番（ｎｎ）は、例えば、フローチャートの先頭から順に付与すればよい。
【０１３２】
次に、フローチャート作成手段２５は、フローチャート３３を記憶手段３０′に書き込み（Ｓ１８０６）、処理を終了する。
【０１３３】
図１９から理解されるように、互いに類似する箇所（対象範囲）を視覚的に明示することで、例えば、メンテナンスの漏れを見つけることができる。例えば、互いに類似する対象範囲の一方に変更箇所があり、他方が変更されていない場合、変更が必要であることに気づくことができる。
【０１３４】
なお、フローチャート作成手段２５は、解析手段２７′の解析機能、書込機能及び表示機能を備えていてもよい。換言すれば、フローチャート作成手段２５が解析手段であってもよい。
【０１３５】
（第３の実施の形態）
図２０に示されるように、本発明の第３の実施の形態による構造解析装置１０″は、装置本体２０″と、記憶装置（記憶手段）３０″と、入力装置４０と、表示装置５０とを備えている。本実施の形態による記憶装置３０″は、装置本体２０″の主記憶装置である。装置本体２０″は、第２の実施の形態による装置本体２０′と同様に、変換手段２１と、加工手段２２と、解析手段２７′と、フローチャート作成手段２５とを備えている。
【０１３６】
構造解析装置１０″は、通信回線８０を経由して、ファイルサーバ６０と通信可能に接続されている。通信回線８０は、例えばＬＡＮ（Local Area Network）であってもよいし、インターネットであってもよい。ファイルサーバ６０は、記憶装置（記憶手段）７０を備えている。記憶装置７０は、モジュール３１と、二次的モジュール３２と、フローチャート３３とを記憶することができる。従って、構造解析装置１０″は、記憶装置７０からモジュール３１等を読み込み、記憶装置７０にモジュール３１等を書き込むことができる。  
【０１３７】
容易に理解されるように、本実施の形態によれば、第１及び第２の実施の形態と同様に、モジュール３１において類似する箇所を見つけることができる。更に見つけた類似箇所を、複数の構造解析装置１０″によって共有することができる。
【符号の説明】
【０１３８】
１０，１０′，１０″  構造解析装置
２０，２０′，２０″  装置本体
２１                  変換手段
２２                  加工手段
２５                  フローチャート作成手段
２７，２７′          解析手段
３０，３０′，３０″  記憶装置（記憶手段）
３１                  モジュール（ソースプログラム）
３１０                行
３１１                一連番号（行識別）
３１２                文
３２                  二次的モジュール（モジュール）
３２０                二次的行（行）
３２１                モジュール識別
３２２                行番号
３２３                階層識別
３２４                命令識別
３２６                一連番号（行識別）
３２７                二次的文
３２９                階層構造
３２９ｐ              階層パターン
３２９ｒ              類似通知情報
３２９ｆ              類似有無
３３                  フローチャート
３６                  階層構造データ
３６０                行
３６１                一連番号（行識別）
３６２                階層パターン
３６３                終了行（一連番号）
３６４                類似通知情報
３６４ｎ              類似行（一連番号）
４０                  入力装置
５０                  表示装置
６０                  ファイルサーバ
７０                  記憶装置（記憶手段）
８０                  通信回線
【要約】
【課題】モジュールにおいて同一の階層構造を備える箇所を検出し、これによって階層構造の把握を支援する構造解析装置を提供すること。
【解決手段】構造解析装置は、モジュールが記憶された記憶手段と、記憶手段に記憶されたモジュールのうちの所定の対象モジュールの構造解析を行う解析手段とを備えている。解析手段は、記憶手段から取得した対象モジュールの対象範囲のうち互いに異なる第１対象範囲と第２対象範囲とについて、第１対象範囲の階層構造と第２対象範囲の階層構造とが同一である場合、対象モジュール内に互いに類似する対象範囲が存在することを示す類似通知情報を、第１対象範囲及び／又は第２対象範囲と関連付けて作成する。
【選択図】図１【図１】
0005273884.tif 000002
【図２】
0005273884.tif 000003
【図３】
0005273884.tif 000004
【図４】
0005273884.tif 000005
【図５】
0005273884.tif 000006
【図６】
0005273884.tif 000007
【図７】
0005273884.tif 000008
【図８】
0005273884.tif 000009
【図９】
0005273884.tif 000010
【図１０】
0005273884.tif 000011
【図１１】
0005273884.tif 000012
【図１２】
0005273884.tif 000013
【図１３】
0005273884.tif 000014
【図１４】
0005273884.tif 000015
【図１５】
0005273884.tif 000016
【図１６】
0005273884.tif 000017
【図１７】
0005273884.tif 000018
【図１８】
0005273884.tif 000019
【図１９】
0005273884.tif 000020
【図２０】
0005273884.tif 000021