(57)【要約】【課題】システムの移行の難易度やコストを提示可能とする。【解決手段】本プログラム解析方法は、解析対象プログラムを解析することによって、当該解析対象プログラムにおける、予め定められた資産外から提供される使用外部機能の種類及び出現位置に関する情報を抽出する工程と、使用外部機能の種類及び出現位置に関する情報から、解析対象プログラムにおける各使用外部機能の分散度（例えば、外部機能がどの程度広範囲にわたって記述されているかについての度合い）を算出する工程と、抽出結果及び算出結果を、所定の単位で集約する工程とを含む。外部機能は、移行後にそのまま利用できず、移行の大きな障害となる場合もあり、資産移行時にはこの外部機能を含めて検討する必要がある。そこで、上で述べたような処理を行うことによって、移行の難易度やコストを十分に把握することができるようになる。【選択図】図１
2007310727.tif 000002
【特許請求の範囲】
【請求項１】
プログラム格納部に格納された解析対象プログラムを解析することによって、当該解析対象プログラムにおける、予め定められた使用外部機能の種類及び出現位置に関する情報を抽出し、外部機能分析結果格納部に格納するステップと、
前記外部機能分析結果格納部に格納された前記使用外部機能の種類及び前記出現位置に関する情報から、前記解析対象プログラムにおける各前記使用外部機能の分散度を算出し、分散度格納部に格納する分散度算出ステップと、
前記外部機能分析結果格納部及び前記分散度格納部に格納されたデータを、所定の単位で集約し、集約結果を集約結果格納部に格納する集約ステップと、
を含み、コンピュータにより実行されるプログラム解析方法。
【請求項２】
前記解析対象プログラム内における、予め定められ且つシステム移行に対して難易度の高い高難易度外部機能及び出現位置に関する情報を抽出し、高難易度外部機能データ格納部に格納するステップ、
をさらに含み、
前記集約ステップが、
前記高難易度機能データ格納部に格納されたデータを、前記所定の単位で集約し、集約結果を前記集約結果格納部に格納するステップ
を含む請求項１記載のプログラム解析方法。
【請求項３】
プログラム格納部に格納された解析対象プログラムを解析することによって、当該解析対象プログラムにおける、予め定められた使用外部機能の種類及び他のプログラムの呼び出しの有無を抽出し、分析結果格納部に格納するステップと、
前記分析結果格納部に格納された前記使用外部機能の種類及び前記他のプログラムの呼び出しの有無から、前記解析対象プログラムを、予め定められた構造パターンに分類し、分類結果を分類結果格納部に格納するステップと、
前記分類結果格納部に格納された前記構造パターンの分類結果を、所定の単位で集約し、集約結果格納部に格納する集約ステップと、
を含み、コンピュータに実行されるプログラム解析方法。
【請求項４】
前記集約ステップが、
前記所定の単位であるサブシステム単位で、各前記構造パターンの数又は割合を算出するステップ
を含む請求項３記載のプログラム解析方法。
【請求項５】
プログラム格納部に格納された解析対象プログラムを解析することによって、プログラムの呼出関係を抽出し、分析結果格納部に格納する分析ステップと、
前記プログラム格納部に格納された前記解析対象プログラムのサイズを特定し、前記分析結果格納部に格納するステップと、
前記分析結果格納部に格納された前記プログラムの呼出関係を、前記解析対象プログラムのサイズを反映させて出力する出力ステップと、
を含み、コンピュータに実行されるプログラム解析方法。
【請求項６】
前記分析ステップは、
前記解析対象プログラムについて、予め定められた使用外部機能の種類を抽出し、前記分析結果格納部に格納するステップ、
を含み、
前記出力ステップが、
前記分析結果格納部に格納されている前記使用外部機能の種類を出力内容に反映させるステップ
を含む請求項５記載のプログラム解析方法。
【請求項７】
請求項１乃至６のいずれか１つ記載のプログラム解析方法をコンピュータに実行させるためのプログラム。
【請求項８】
プログラム格納部に格納された解析対象プログラムを解析することによって、当該解析対象プログラムにおける、予め定められた使用外部機能の種類及び出現位置に関する情報を抽出し、外部機能分析結果格納部に格納する手段と、
前記外部機能分析結果格納部に格納された前記使用外部機能の種類及び前記出現位置に関する情報から、前記解析対象プログラムにおける各前記使用外部機能の分散度を算出し、分散度格納部に格納する分散度算出手段と、
前記外部機能分析結果格納部及び前記分散度格納部に格納されたデータを、所定の単位で集約し、集約結果を集約結果格納部に格納する集約手段と、
を有するプログラム解析装置。
【請求項９】
プログラム格納部に格納された解析対象プログラムを解析することによって、当該解析対象プログラムにおける、予め定められた使用外部機能の種類及び他のプログラムの呼び出しの有無を抽出し、分析結果格納部に格納する手段と、
前記分析結果格納部に格納された前記使用外部機能の種類及び前記他のプログラムの呼び出しの有無から、前記解析対象プログラムを、予め定められた構造パターンに分類し、分類結果を分類結果格納部に格納する手段と、
前記分類結果格納部に格納された前記構造パターンの分類結果を、所定の単位で集約し、集約結果格納部に格納する集約手段と、
を有するプログラム解析装置。
【請求項１０】
プログラム格納部に格納された解析対象プログラムを解析することによって、プログラムの呼出関係を抽出し、分析結果格納部に格納する分析手段と、
前記プログラム格納部に格納された前記解析対象プログラムのサイズを特定し、前記分析結果格納部に格納する手段と、
前記分析結果格納部に格納された前記プログラムの呼出関係を、前記解析対象プログラムのサイズを反映させて出力する出力手段と、
を有するプログラム解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムにおけるプログラムの解析技術に関する。
【背景技術】
【０００２】
近年コンピュータシステムの発達により、世の中の様々な場面でコンピュータシステムが活用されるようになっている。一度構築したコンピュータシステムでも歳月を経ることで、改良を行う必要性や、システム全体を見直す必要性が生じることがある。特に、現在稼動中のメインフレームから、オープン系プラットホームへの移行の要求が強まっている。このような要求には、現在稼動中のシステムと同じ仕様で、新規システムへ移行したいという要件を含むものが多い。具体的な例として、ホスト系ＣＯＢＯＬ資産から、オープン系ＣＯＢＯＬやＪａｖａ（登録商標）へマイグレーションを行うという要件が挙げられる。
【０００３】
このため、マイグレーションの方針を早期に立て、正確な作業量を見積るための情報を収集し、その情報を表現する必要性がある。
【０００４】
ところで、例えば特開平６−１１９２０５号公報には、メトリクスを用いてプログラム構造の客観的な分析、評価・助言付与および高品質化を図るための技術が開示されている。具体的には、分析処理部は、従来から用いられているプログラム量に関するメトリクスと制御構造に関するメトリクスの他に、変数データの操作構造に関するメトリクスを用いて、分析対象システム格納部に格納されているソフトウェアのメトリクスを計測し、計測結果をプログラム毎およびプログラムを構成するモジュール毎にメトリクス記憶部に記憶し、この記憶されたメトリクスをもとにソフトウェアを分析処理し、分析処理内容を分析結果格納部或いは出力部に出力する。そして、この変数データの操作構造に関するメトリクスは、変数データの使用型に分類した変数データの使用型別頻度と、変数データのそれぞれがいくつのモジュールで使用されているかをモジュール呼出関係記憶部に記憶されたモジュール呼出関係をもとに測ったデータスコープ値とからなるものである。しかしながら、個々のモジュールの高品質化に重点を置き、テストケースの作成支援などを目的にしていて、システムのマイグレーションについての難易度やコストについて考察してはいない。
【０００５】
また、特開平１１−２７２４６０号公報には、ソフトウェア視覚化技法によって、たとえば改訂を行うために、既存のソフトウェアを変換するときに発生する問題の広がりおよび深さを判定するための技術が開示されている。具体的には、最初にいくつかの異なるソフトウェア測度およびその変換プロセスに関する統計データを生成するか、あるいは入力する。次に、これらの測度および統計情報がソフトウェア視覚化技法の各種の視覚化ツールによって生成されるソフトウェア・アプリケーション、システム、サブシステム、プログラムの個々のラインの各種のビューの外観を変えるために使われる。各種のビューと対話することによって、そのアプリケーションのどの部分が改訂を必要とするか、そしてその実施するための最適の方法を迅速に決定することができる。しかし、資産内部のモジュール関係について情報を抽出できるが、データアクセスルーチンや、オンライン機能など、資産以外に、外部から提供される機能に対しては考察していない。したがって、システムのマイグレーションについての難易度やコストについて直接的に考察してはいない。また、そのような観点で関数呼出構造を表してはいない。
【０００６】
さらに、特開平１０−２８３１９１号公報には、言語処理装置によりソースプログラムをオブジェクトプログラムに変換するとき、オブジェクトプログラムを容量が小さく処理が速い状態に生成するための技術が開示されている。具体的には、ソースプログラムをオブジェクトプログラムに変換するとき、ソースプログラムを関数検出手段で解析して複数の関数を個々に検出し、複数の関数の呼出関係を呼出検出手段で検出して短距離用の呼出回数が多数となる関数の配列を配列生成手段で生成し、この配列に関数の順番を配列変更手段で変更する。オブジェクトプログラムは、関数の配列の変更により短距離用の呼出回数が多数となる状態に生成されるので、容量が小さく処理が速い状態に生成される。しかし、ここでは、ソースプログラムの特徴を捉えて、プログラムを修正することによって、より高速なオブジェクトプログラムを作成することを目的としていて、システムのマイグレーションについての難易度やコストについて直接的に考察してはいない。また、そのような観点で関数呼出構造を表してはいない。
【特許文献１】特開平６−１１９２０５号公報
【特許文献２】特開平１１−２７２４６０号公報
【特許文献３】特開平１０−２８３１９１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
実際にコンピュータシステムのマイグレーションを行う際には、そのコンピュータシステムに関するドキュメントが開発当時の管理体制や、担当者の移動などにより、充分に入手できない場合があるため、稼動中のコンピュータシステムのアプリケーション資産そのものについて分析を行い、ドキュメントを生成し、整理することで、理解を助けるというアプローチを行う場合が多い。これはリバースエンジニアリングと呼ばれるが、上で述べたように従来のリバースエンジニアリング技術では、個々のプログラムやジョブの呼び出し構造や、各プログラムがアクセスするデータの情報を抽出することが出来るが、サブシステム単位やシステム全体に対する移行の難易度やコストを判断することは困難である。
【０００８】
また、個々のプログラムについて考察する場合においても、移行の難易度やコストを見積るためには、そのための解析及び提示の技術が必要である。
【０００９】
従って、本発明の目的は、システムの移行の難易度を提示可能とするための新規な技術を提供することである。
【００１０】
また、本発明の他の目的は、システムの移行のコストを提示可能とするための新規な技術を提供することである。
【００１１】
さらに、本発明の他の目的は、システムの移行の難易度やコストの観点から移行対象システムの状態を提示するための新規な技術を提供することである。
【課題を解決するための手段】
【００１２】
本発明の第１の態様に係る資産診断のためのプログラム解析方法は、プログラム格納部に格納された解析対象プログラムを解析することによって、当該解析対象プログラムにおける、予め定められた使用外部機能の種類及び出現位置に関する情報を抽出し、外部機能分析結果格納部に格納するステップと、外部機能分析結果格納部に格納された使用外部機能の種類及び出現位置に関する情報から、解析対象プログラムにおける各使用外部機能の分散度（例えば、外部機能がどの程度広範囲にわたって記述されているかについての度合い）を算出し、分散度格納部に格納する分散度算出ステップと、外部機能分析結果格納部及び分散度格納部に格納されたデータを、所定の単位で集約し、集約結果を集約結果格納部に格納する集約ステップとを含む。
【００１３】
現行のソースプログラムを単純に書き換えることで、システムを移行できる場合は少なく、データアクセスルーチンやオンライン機能など、移行対象システムとは別に外部から提供される機能を考慮に入れる必要がある。このような機能（外部機能と呼ぶ）は、移行後にそのまま利用できず、移行の大きな障害となる場合もあり、資産移行時にはこの外部機能を含めて検討する必要がある。そこで、上で述べたような処理を行うことによって、移行の難易度やコストを十分に把握することができるようになる。
【００１４】
また、本発明の第１の態様において、解析対象プログラム内における、予め定められ且つシステム移行に対して難易度の高い高難易度外部機能及び出現位置に関する情報を抽出し、高難易度外部機能データ格納部に格納するステップをさらに含むようにしてもよい。その場合、上記集約ステップが、高難易度機能データ格納部に格納されたデータを、所定の単位で集約し、集約結果を集約結果格納部に格納するステップを含むようにしてもよい。このようにすれば、機能量では図ることが出来ない移行が困難な外部機能についての情報を得ることができ、移行の難易度を把握することができるようになる。
【００１５】
さらに、本発明の第１の態様において、使用外部機能の出現位置に関する情報が、出現セグメントの情報であるようにしてもよい。その場合、上で述べた分散度算出ステップが、各使用外部機能について、当該使用外部機能の出現セグメントの合計サイズを当該出現セグメントを含むプログラムの全体サイズで除することによって分散度を算出するステップを含むようにしてもよい。
【００１６】
さらに、本発明の第１の態様において、解析対象プログラム内における、予め定められ且つシステム移行に対して難易度の高い高難易度外部機能及び出現位置に関する情報を抽出し、高難易度外部機能データ格納部に格納するステップと、解析対象プログラムのサイズを特定するステップとをさらに含むようにしてもよい。その場合、上記集約ステップが、各使用外部機能について、当該使用外部機能についての命令種別数と、当該使用外部機能が関連する解析対象プログラムの合計サイズと、当該使用外部機能についての分散度の分布と、当該使用外部機能に関連する高難易度機能の有無とを、所定の単位であるサブシステム単位で集約し、集約結果格納部に格納するステップを含むようにしてもよい。
【００１７】
また、本発明の第１の態様において、サブシステム単位で、合計サイズを使用外部機能の表示要素のサイズで表し、分散度の分布を表示要素の内訳で表し、高難易度機能の有無を表示要素の色で表すような表示データを生成するステップをさらに含むようにしてもよい。このようにすれば、より容易にサブシステムの移行の難易度を把握することができるようになる。
【００１８】
また、本発明の第１の態様において、集約結果格納部に格納されているデータのうち外部機能の使用の程度を表す集約データからコストを算出し、コストデータ格納部に格納するステップと、集約結果格納部に格納されているデータのうち手作業の量に関連する集約データからコストを算出し、コストデータ格納部に格納するステップとをさらに含むようにしてもよい。このような２つの側面からコストを提示することによって、より移行対象システムのコストや難易度を的確に把握することができるようになる。
【００１９】
具体的には、集約結果格納部に格納された、使用外部機能が関連する処理プログラムの合計サイズと使用外部機能についての命令種別数と外部機能に関連する高難易度機能の有無とを用いて、使用外部機能について機能量及び難易度に関するコストを算出し、コストデータ格納部に格納するステップと、集約結果格納部に格納された、使用外部機能についての分散度の分布に基づき、使用外部機能について手作業の量に関するコストを算出し、コストデータ格納部に格納するステップとをさらに含むようにしてもよい。
【００２０】
また、本発明の第１の態様において、縦軸により機能量及び難易度に関するコストを表し且つ横軸で手作業の量に関するコストを表す平面における、処理対象サブシステムについての位置を特定して出力するステップをさらに含むようにしてもよい。このようにすれば、より移行対象システムの状態を容易に把握することができるようになる。なお、上記平面を所定の閾値によって領域を分けて表示することによって、例えば「必要な外部機能が多く、手修正の作業量も多いのでマイグレーションに不向き」、単に「手修正の作業量が多い」、「使用機能実現のため、多くの実行時ルーチンが必要」、「必要な外部機能が少なく、作業量も少ないのでマイグレーション向け」といった判断をより簡単にできるようになる。
【００２１】
本発明の第２の態様に係る資産診断のためのプログラム解析方法は、プログラム格納部に格納された解析対象プログラムを解析することによって、当該解析対象プログラムにおける、予め定められた使用外部機能の種類及び他のプログラムの呼び出しの有無を抽出し、分析結果格納部に格納するステップと、分析結果格納部に格納された使用外部機能の種類及び他のプログラムの呼び出しの有無から、解析対象プログラムを、予め定められた構造パターンに分類し、分類結果を分類結果格納部に格納するステップと、分類結果格納部に格納された構造パターンの分類結果を、所定の単位で集約し、集約結果格納部に格納する集約ステップとを含む。
【００２２】
移行の判断を行うために、プログラム内で利用する外部機能を利用する構造の情報を取得する必要があるが、資産量が多い場合にプログラム内の構造を効率的に把握することは膨大な工数が必要となり、従来は一部のサンプルに対してのみ実施しているが、資産全体の情報を整理する方法がなく、資産全体の情報に対する判断が出来ていなかった。このように、予め定められた所定数の構造パターンに分類した結果を提示すれば、例えば、整理された形で各プログラムが作成されたシステムなのかそうでないのかといった移行対象システムの状態を把握しやすくなり、結果として移行の難易度やコストを的確に把握することにつながる。
【００２３】
また、上で述べた集約ステップは、所定の単位であるサブシステム単位で、各構造パターンの数又は割合を算出するステップを含むようにしても良い。
【００２４】
さらに、本発明の第２の態様において、集約結果格納部に格納されるデータを、移行難易度の高い構造パターンについてのデータから順番に出力するステップをさらに含むようにしてもよい。これによって、移行の難易度を容易に把握できるようになる。
【００２５】
また、本発明の第３の態様に係る資産診断のためのプログラム解析方法は、プログラム格納部に格納された解析対象プログラムを解析することによって、プログラムの呼出関係を抽出し、分析結果格納部に格納する分析ステップと、プログラム格納部に格納された解析対象プログラムのサイズを特定し、分析結果格納部に格納するステップと、分析結果格納部に格納されたプログラムの呼出関係を、解析対象プログラムのサイズを反映させて出力する出力ステップとを含む。解析対象プログラムのサイズを呼出関係に反映させて出力することによって、移行の難易度を把握しやすくなる。例えば、他のプログラム等との関係が多い解析対象プログラムのサイズが大きい場合には、移行の難易度が高いと推測できる。
【００２６】
また、上記分析ステップは、解析対象プログラムについて、予め定められた使用外部機能の種類を抽出し、分析結果格納部に格納するステップを含むようにしてもよい。その場合、上記出力ステップが、分析結果格納部に格納されている使用外部機能の種類を出力内容に反映させるステップを含むようにしてもよい。使用外部機能の分布についても把握できれば、移行の難易度やコストを的確に推測できるようになる。
【００２７】
さらに、上記分析ステップは、解析対象プログラムについて、予め定められた使用外部機能の種類及び出現位置に関する情報を抽出し、分析結果格納部に格納するステップを含むようにしてもよい。そして、本発明の第３の態様において、さらに、分析結果格納部に格納された使用外部機能の種類及び出現位置に関する情報から、解析対象プログラムにおける各使用外部機能の分散度を算出し、分散度格納部に格納する分散度算出ステップを含むようにしてもよい。また、その場合、上記出力ステップが、分散度格納部に格納された各使用外部機能の分散度から各解析対象プログラムの代表使用外部機能を特定し、出力内容に反映するステップを含むようにしてもよい。複数の外部機能を使用している解析対象プログラムの場合には、分散度が大きいほどその外部機能による移行コストや難易度が大きくなるためである。
【００２８】
さらに、上で述べた分析ステップは、解析対象プログラムについて、予め定められた使用外部機能の種類を抽出し、分析結果格納部に格納するステップを含むようにしてもよい。その場合、上記出力ステップが、ユーザに指定された外部機能を有する解析対象プログラムのみを出力するステップを含むようにしてもよい。特定の外部機能に着目する場合に有用である。
【００２９】
また、上で述べた出力ステップが、呼出関係における基点プログラム以降の呼出先のみを出力するステップを含むようにしてもよい。このようにすれば、解析対象プログラムが多数である場合に、必要な部分のみに着目することができる。なお、基点プログラムについては手動で指定するようにしても良いし、特徴的な基点プログラムを自動で抽出するようにしても良い。
【００３０】
本発明にかかる方法をコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等の記憶媒体又は記憶装置に格納される。また、ネットワークを介してディジタル信号にて頒布される場合もある。なお、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
【発明の効果】
【００３１】
本発明によれば、システムの移行の難易度を提示可能とすることができるようになる。
【００３２】
また、本発明の他の側面によれば、システムの移行のコストを提示可能とすることができるようになる。
【００３３】
本発明のさらに他の側面によれば、システムの移行の難易度やコストの観点から移行対象システムの状態を提示することができるようになる。
【発明を実施するための最良の形態】
【００３４】
［実施の形態１］
本発明の第１の実施の形態に係る機能ブロック図を図１に示す。本実施の形態に係るプログラム解析装置は、解析対象のプログラムのソースコードを格納するプログラム格納部１と、プログラム格納部１に格納されているソースコードに対して構文解析処理を実施する構文解析部２と、構文解析部２の処理結果を格納する構文解析結果格納部３と、移行の難易度が高いとされる外部機能に関する知識情報を格納する高難易度外部機能知識情報格納部４と、予め規定されている外部機能についての知識情報を格納する外部機能分類知識情報格納部５と、外部機能分類知識情報格納部５に格納されたデータを用いて構文解析結果格納部３に格納されたデータから外部機能についての情報を抽出する外部機能抽出処理部６と、外部機能抽出処理部６によって抽出されたデータを格納する外部機能抽出結果格納部９と、高難易度外部機能知識情報格納部４に格納されたデータを用いて構文解析結果格納部３に格納されたデータから高難易度外部機能についての情報を抽出する高難易度外部機能抽出処理部７と、高難易度外部機能抽出処理部７により抽出されたデータを格納する高難易度外部機能抽出結果格納部１１と、構文解析結果格納部３に格納されたデータからセグメントの行数やプログラムの行数などのプログラムのデータを抽出するプログラムデータ抽出部８と、プログラムデータ抽出部８により抽出されたデータを格納するプログラムデータ格納部１２と、外部機能抽出結果格納部９及びプログラムデータ格納部１２に格納されたデータを用いて外部機能の分散度を算出する分散度算出処理部１３と、分散度算出処理部１３により算出された分散度を格納する分散度格納部１４と、分散度格納部１４と高難易度外部機能抽出結果格納部１１とプログラムデータ格納部１２と外部機能抽出結果格納部９とに格納されたデータを用いて集約処理を行う集約処理部１５と、集約処理部１５の処理結果を格納する集約結果格納部１８と、コスト計算を行うための知識情報を格納するコスト知識情報格納部２１と、集約結果格納部１８及びコスト知識情報格納部２１に格納されたデータを用いて移行のコストを見積るための処理を実施するコスト見積処理部２０と、コスト見積処理部２０の処理結果を格納するコスト見積結果格納部２２と、集約結果格納部１８とコスト見積結果格納部２２とに格納されたデータを出力する出力処理部１９とを含む。集約処理部１５は、プログラム別集約処理部１６とサブシステム別集約処理部１７とを含む。
【００３５】
次に、図１に示したプログラム解析装置の処理フローを図２乃至図１４を用いて説明する。まず、プログラム格納部１に格納されている全解析対象プログラムに対して周知の構文解析を実施し、処理結果を構文解析結果格納部３に格納する（ステップＳ１）。構文解析は、以下の処理において命令文、アクセス先などの情報を正確に把握するための処理である。ＣＯＢＯＬのソースコードの例を図３に示す。図３の例では、１０８００行乃至１２１００行がソート前処理のセクション（ＳＥＣＴＩＯＮ）であり、１２２００行乃至１２６００行がソート後処理セクションであり、１２７００行乃至１３４００行が準備処理セクションである。このうち例えばソート前処理セクション及びソート後処理セクションについての構文解析結果を図４に示す。図４では、ＸＭＬ（eXtensible Markup Language）形式で、正確な文法情報及び行番号を含むようなデータが生成されている。構文解析の処理内容及び表現方法は、周知なのでこれ以上述べない。また、以下では図３をベースに説明する。
【００３６】
次に、外部機能抽出処理部６は、構文解析結果格納部３に格納されている未処理プログラムを１つ特定し（ステップＳ３）、未処理行のデータを１行分読み出す（ステップＳ５）。なお、セクション名が出現した場合には、次のセクション名が出現するまで保持しておく。そして、外部機能抽出処理部６は、外部機能分類知識情報格納部５に格納されたデータに基づき、読み出した１行分のデータに対象外部機能が含まれているか判断する（ステップＳ７）。外部機能分類知識情報格納部５に格納されているデータの一例を図５に示す。図５の例では、抽出すべき外部機能の分類（種類）（オンライン、帳票、ＣＯＢＯＬ入出力、ＲＤＢ入出力、ＮＤＢ入出力のいずれか）と、分類機能（具体的な分類（種類））と、分類基準（説明）と、検索方法とが規定されている。このような外部機能は、移行の作業において大きな影響を与えるものとして既に認識されているものである。外部機能抽出処理部６は、読み出した１行分のデータが検索方法の規定のいずれかに合致するか判断する。すなわち、検索方法にはキーワードが規定されており、当該キーワードの有無によって、外部機能を含むか否かを判断する。分類によっては、単純なキーワードの有無の検査だけでなく、複数行の読込みを実施し、文法を解析して、構文の利用方法を特定するなどして、複数の条件を満たした場合に、外部機能有りと決定する場合もある。
【００３７】
読み出した１行分のデータに対象外部機能が含まれていない場合には、ステップＳ１１に移行する。一方、読み出した１行文のデータに対象外部機能が含まれている場合には、外部機能抽出処理部６は、ステップＳ３で特定されたプログラム名、セクション名、ステップＳ５で読み出した１行分のデータの行番号、該当する外部機能の種類、対象ファイル名などを、外部機能抽出結果格納部９に記録する（ステップＳ９）。
【００３８】
図３の例では、最初の１０８００行を読み出すと、セクションの定義を行っているだけで、外部機能を示すものは無いと判断される。次の１０９００行を読み込むと、ＣＯＢＯＬ入出力文を表す「ＯＰＥＮ」文が存在するため、図３のプログラム名（例えばプログラムＡ）、セッション名の「ソート前処理」、外部機能の種類であるＣＯＢＯＬ入出力、行番号である１０９００行、対象ファイル名である売上実績ファイルなどが記録される。次に、１１０００行を読み込むと、外部機能を示すものはないと判断される。さらに、１１１００行を読み込むと、ＣＯＢＯＬ入出力文である「ＲＥＡＤ」文が存在するため、図３のプログラム名（例えばプログラムＡ）、セッション名の「ソート前処理」、外部機能の種類であるＣＯＢＯＬ入出力、行番号である１１１００行、対象ファイル名である売上実績ファイルなどが記録される。そして、１１２００行乃至１１８００行までは記録されるものはなく、１１９００行では、ＣＯＢＯＬ入出力文である「ＣＬＯＳＥ」文が存在するため、図３のプログラム名（例えばプログラムＡ）、セッション名の「ソート前処理」、外部機能の種類であるＣＯＢＯＬ入出力、行番号である１１９００行、対象ファイル名である売上実績ファイルなどが記録される。
【００３９】
なお、１２２００行乃至１２６００行までのソート後処理セクションについて該当する外部機能は存在しない。
【００４０】
次のセクションである準備処理セクションでは、最初の１２８００行を読み込むと、ＣＯＢＯＬ入出力文を表す「ＯＰＥＮ」文が存在するため、図３のプログラム名（例えばプログラムＡ）、セッション名の「準備処理」、外部機能の種類であるＣＯＢＯＬ入出力、行番号である１２８００行、対象ファイル名である月次支店別売上集計リストなどが記録される。１２９００行乃至１３３００行については外部機能は存在しない。そして、１３３０１行を読み込むと、ＲＤＢ入出力文を表す「ＳＱＬ  ＳＴＡＲＴ」命令が存在するため、図３のプログラム名（例えばプログラムＡ）、セッション名の「準備処理」、外部機能の種類であるＲＤＢ入出力、行番号である１３３０１行などが記録される。さらに、１３４００行を読み込むと、ＮＤＢ入出力文を表す「ＧＥＴ」命令が存在するため、図３のプログラム名（例えばプログラムＡ）、セッション名の「準備処理」、外部機能の種類であるＮＤＢ入出力、行番号である１３４００行などが記録される。
【００４１】
また、高難易度外部機能抽出処理部７は、高難易度外部機能知識情報格納部４に格納されているデータに基づき、ステップＳ５で読み出した１行文のデータに高難易度の外部機能が含まれているか判断する（ステップＳ１１）。高難易度外部機能知識情報格納部４に格納されているデータの一例を図６に示す。高難易度外部機能は、実現が不可能な外部機能と、実現が可能だが工数が多く必要である外部機能である。図６の例では、抽出すべき高難易度外部機能の分類（種類）（オンライン、帳票、ＣＯＢＯＬ入出力、ＲＤＢ入出力、ＮＤＢ拡張機能のいずれか）と、分類機能（具体的な分類（種類））と、分類基準（説明）と、検索方法と、難易度レベルとが規定されている。高難易度外部機能抽出処理部７は、読み出した１行分のデータが検索方法の規定のいずれかに合致するか判断する。
【００４２】
読み出した１行分のデータに高難易度外部機能が含まれていない場合には、ステップＳ１５に移行する。一方、読み出した１行文のデータに高難易度外部機能が含まれている場合には、高難易度外部機能抽出処理部７は、ステップＳ３で特定されたプログラム名、該当する高難易度外部機能の種類、難易度などを、高難易度外部機能抽出結果格納部１１に記録する（ステップＳ１３）。行番号やセクション名などを記録するようにしても良い。
【００４３】
図３の例では、１３４００行を読み込むと、ＲＤＢ入出力文を表す「ＧＥＴ」命令が存在するため、図３のプログラム名（例えばプログラムＡ）、高難易度外部機能の種類であるＲＤＢ入出力、及び難易度として実現不可が記録される。
【００４４】
さらに、プログラムデータ抽出部８は、セクション行数及びプログラム行数を計数し、プログラムデータ格納部１２に格納する（ステップＳ１５）。セクション開始が特定されれば当該セクションの行数の計数を開始し、セクションの終了が特定されると当該セクションの行数の計数を停止し、セクション名に対応してプログラムデータ格納部１２に格納する。また、新たにプログラムの解析を開始すると行数の計数を開始し、当該プログラムの解析が終了すると行数の計数を停止し、プログラム名に対応してプログラムデータ格納部１２に格納する。
【００４５】
ステップＳ５乃至Ｓ１５の処理については、ステップＳ３で特定された未処理プログラムの最後の行に達するまで繰り返される（ステップＳ１７）。ステップＳ３で特定された未処理プログラムの最後の行に達すると、分散度算出処理部１３は、外部機能の分散度の算出処理を実施する（ステップＳ１９）。この処理については、図７を用いて説明する。なお、ステップＳ１９の後には端子Ａを介して図８の処理に移行する。
【００４６】
まず、分散度算出処理部１３は、処理対象となる１つの外部機能を特定する（ステップＳ２１）。そして、外部機能抽出結果格納部９において、特定された種類の外部機能を含むとして記録されたセクションを特定し、プログラムデータ格納部１２に格納されているデータから当該セクションの行数を特定し、例えばメインメモリなどの記憶装置に格納する（ステップＳ２３）。図３の例で、ＣＯＢＯＬ入出力という外部機能について処理を行う場合には、セクションはソート前処理及び準備処理が特定され、それぞれ行数は１４行及び９行と特定される。
【００４７】
そして、分散度算出処理部１３は、ステップＳ２３で特定されたセクションの行数を合計し、例えばメインメモリなどの記憶装置に格納する（ステップＳ２５）。上で述べた例では、２３行と算出される。さらに、ステップＳ２１で特定された種類の外部機能の分散度を、プログラムデータ格納部１２に格納されている解析対象プログラムの行数（サイズ）を用いて算出し、外部機能及びプログラム名に対応して分散度格納部１４に格納する（ステップＳ２７）。図３の例では、プログラム全体の行数は２８行であり、ＣＯＢＯＬ入出力という外部機能の場合、ステップＳ２５で特定された合計行数（２３行）をプログラムの行数（２８行）で除することによって０．８２（８２％）として分散度が算出される。
【００４８】
その後、全ての外部機能について処理したか判断し（ステップＳ２９）、未処理の外部機能が存在する場合にはステップＳ２１に戻り、全ての外部機能について処理が完了した場合には元の処理に戻る。
【００４９】
図３の例では、他にＲＤＢ入出力という外部機能も特定されており、当該ＲＤＢ入出力を含むセクションは準備処理であるから、準備処理セクションの行数（９行）／プログラム（２８行）＝０．３２（３２％）と分散度が算出される。ＮＤＢ入出力という外部機能も、同様である。
【００５０】
このように分散度を各外部機能について算出することにより、当該プログラムの移行についての作業量を推定することができるようになる。
【００５１】
次に、図８の処理について説明する。全てのプログラムについて処理が完了したか確認し（ステップＳ３１）、未処理のプログラムが存在する場合には端子Ｂを介してステップＳ３に戻る。一方、全てのプログラムについて処理が完了した場合には、集約処理部１５のプログラム別集約処理部１６は、分散度格納部１４と外部機能抽出結果格納部９と高難易度外部機能抽出結果格納部１１とプログラムデータ格納部１２とに格納されている、外部機能についての情報などをプログラム単位で集約し、集約結果格納部１８に格納する（ステップＳ３３）。ステップＳ３３では、図９（ａ）乃至（ｃ）に示すようなデータを生成する。図９（ａ）乃至（ｃ）のデータは、ソースステップ数（行数）と、使用されている外部機能の種類、分散度及び当該外部機能についての種類数と、高難易度外部機能の有無及び種類とが含まれている。プログラムＡについては、ソースステップ数が４００行であり、ＣＯＢＯＬ入出力（分散度６６％、１種類）、ＳＱＬ（分散度３０％、１種類）、及びＮＤＢ（分散度３０％、１種類）が含まれており、高難易度の外部機能及び種類（ＮＤＢ読み込み命令（実現不可））も含まれている。プログラムＢについては、ソースステップ数が３００行であり、オンライン機能（分散度３０％、１種類）、及びＳＱＬ（分散度５０％、３種類）が含まれており、高難易度の外部機能（ＡＣＳ（オンライン）機能（実現不可））も含まれている。プログラムＣについては、ソースステップ数が１０００行であり、オンライン機能（分散度７０％、１種類）、及びＳＱＬ（分散度３０％、３種類）が含まれており、高難易度の外部機能は含まれていない。なお、図９（ａ）乃至（ｃ）では示されていないが、各外部機能についての種類については、種類数だけではなく、具体的な種類についても特定しておく。
【００５２】
ソースステップ数は、プログラムデータ格納部１２に格納されている。使用されている外部機能の種類及び当該外部機能についての種類数については、外部機能抽出結果格納部９に格納されたデータを用いて特定される。外部機能についての種類数について、ＣＯＢＯＬ入出力文等では命令名は異なっていても対象ファイル名が同じ場合があって、この場合には対象ファイル名が同じものについては１種類として取り扱う。図３の例では、ＣＯＢＯＬ入出力については３行分のデータが特定されているが、全て「売上実績ファイル」が対象ファイル名として記録されているので、１種類として取り扱われる。外部機能の分散度については、分散度格納部１４に格納されている。高難易度外部機能の有無及び種類については、高難易度外部機能抽出結果格納部１１に格納されている。
【００５３】
次に、集約処理部１５のサブシステム別集約処理部１７は、未処理のサブシステム（予めサブシステムの範囲については規定されている）を１つ特定し（ステップＳ３５）、ステップＳ３５で特定されたサブシステムについてステップＳ３３で集約結果格納部１８に格納された各プログラムの外部機能を集約し、集約結果を集約結果格納部１８に格納する（ステップＳ３７）。また、ステップＳ３５で特定されたサブシステムについてステップＳ３３で集約結果格納部１８に格納された各外部機能の分散度を分類し、分類結果を集約結果格納部１８に格納する（ステップＳ３９）。さらに、ステップＳ３５で特定されたサブシステムについてステップＳ３３で集約結果格納部１８に格納された高難易度の外部機能使用の有無及び種類についてのデータを集約し、集約結果格納部１８に格納する（ステップＳ４１）。
【００５４】
このような処理を行うことによって図１０に示すようなデータを生成する。図１０の例では、オンライン機能、帳票機能、ＣＯＢＯＬ入出力、ＮＤＢ機能、ＲＤＢ機能の各々について、規模（行数）、分散度の内訳（分布）、高難易度外部機能の有無及び種類、当該外部機能の命令種別数（重複命令については集約する）を含む。分散度の内訳（分布）については、例えば１０％刻みで、その範囲に含まれるプログラムの本数についてのデータである。例えばオンライン機能については、２０−３０％については１本、６０−７０％については１本となっている。
【００５５】
このような処理を全てのサブシステムについて繰り返す。すなわち、未処理のサブシステムが存在する場合には（ステップＳ４３：Ｎｏルート）、ステップＳ３５に戻る。一方、全てのサブシステムについて処理が完了した場合には（ステップＳ４３：Ｙｅｓルート）、コストの見積りを行うならば（ステップＳ４５：Ｙｅｓル−ト）、コスト見積処理部２０が、コスト知識情報格納部２１及び集約結果格納部１８に格納されるデータを用いてコスト見積処理を実施し、処理結果をコスト見積結果格納部２２に格納する（ステップＳ４７）。一方、コストの見積を行わない場合にはステップＳ４９に移行する。
【００５６】
コスト見積処理については図１１及び図１２を用いて説明する。コスト見積処理部２０は、集約結果格納部１８を参照して、コスト見積対象サブシステムについて、外部機能毎に規模及び命令種別数、並びに高難易度外部機能の有無を特定する（ステップＳ５１）。図１０の例では、オンライン機能については１３００行で１種類と特定され、ＣＯＢＯＬ入出力については４００行で１種類と特定され、ＮＤＢ機能については４００行で１種類と特定され、ＲＤＢ機能については１７００行で３種類と特定される。そして、特定された規模、命令種別数、及び該当高機能外部機能に対応するコスト係数をコスト知識情報格納部２１から読み出す（ステップＳ５３）。コスト知識情報格納部２１には、図１２（ａ）及び（ｂ）に示すようなデータが登録されている。図１２（ａ）及び図１２（ｂ）の例では、項目毎に点数（係数）が登録されている。図１０の場合、ステップＳ５３では、図１２（ａ）に示すようなテーブルから、規模の点数（係数）と、オンラインの点数（係数）と、ＣＯＢＯＬ入出力の点数（係数）と、ＮＤＢ機能の点数（係数）と、ＲＤＢ機能の点数（係数）と、高難易度外部機能であるＡＣＳ機能の点数（係数）と、高難易度外部機能であるＮＤＢ拡張機能の点数（係数）とを読み出す。
【００５７】
そして、コスト見積処理部２０は、ステップＳ５１で特定されたデータ及びステップＳ５３で読み出されたデータを用いて、機能量及び難易度に関するコストを算出し、コスト見積結果格納部２２に格納する（ステップＳ５５）。図１０の場合には、規模の点数（３）×規模（１３００＋４００＋４００＋１７００）／１００＋オンラインの点数（６）×１＋ＣＯＢＯＬ入出力の点数（１０）×１＋ＮＤＢ機能の点数（１５）×１＋ＲＤＢ機能の点数（７）×３＋ＡＣＳ機能の点数（２００）＋ＮＤＢ拡張機能の点数（２３０）で算出する。このように計数と数量との積和となる。
【００５８】
また、コスト見積処理部２０は、集約結果格納部１８を参照して、コスト見積対象サブシステムについて、外部機能毎に分散度分布を特定する（ステップＳ５７）。また、特定された外部機能の分散度分布に対応するコスト係数を、コスト知識情報格納部２１から読み出す（ステップＳ５９）。そして、ステップＳ５７で特定されたデータ及びステップＳ５９で読み出されたデータを用いて、手作業量に関するコストを算出し、コスト見積結果格納部２２に格納する（ステップＳ６１）。図１０の場合には、オンラインの点数（５）×５０％以上の本数（１）＋ＣＯＢＯＬ入出力の点数（６）×５０％以上の本数（１）＋ＮＤＢ機能の点数（１０）×５０％以上の本数（０）＋ＲＤＢ機能の点数（３）×５０％以上の本数（０）で算出する。このように計数と数量との積和となる。
【００５９】
さらに、コスト見積処理部２０は、ステップＳ５５及びＳ６１で算出されたコストを用いてコスト見積対象サブシステムについての総合コストを算出し、コスト見積結果格納部２２に格納する（ステップＳ６３）。例えばステップＳ５５及びＳ６１で算出されたコストを加算するなどによって算出する。また、以下で説明する平面にプロットするための座標値を算出するようにしても良い。さらに、本ステップはスキップするようにしても良い。なお、このステップの後に元の処理に戻る。また、図１１では示されていないが、複数のサブシステムが存在している場合には、図１１の処理を各サブシステムについて実施する。
【００６０】
このように、機能量や難易度の側面からコストを見積ると共に、分散度から手作業量によるコストを見積るようにして、総合的なコストや難易度を判断できるようにする。
【００６１】
図８の説明に戻って、ステップＳ４５でコスト見積りを行わない場合又はステップＳ４７の後に、出力処理部１９は、集約結果格納部１８又は集約結果格納部１８及びコスト見積結果格納部２２に格納されているデータを用いて、解析結果を出力する（ステップＳ４９）。例えば、表示装置に表示したり、プリンタに出力したりする。
【００６２】
図１３に、集約結果格納部１８に格納されたデータを用いた出力例を示す。図１３の例では、オンライン、帳票、ＲＤＢ、ＮＤＢ、ＣＯＢＯＬ入出力、その他を縦に並べ、サブシステムＡ乃至Ｃを横に並べて、解析対象全体を概観できるようになっている。また、高難易度外部機能が使用されている場合であってそれが「実現不可」の難易度である場合には「赤色」（図１３では濃いハッチング）を背景に施し、「実現困難」の何度である場合には「黄色」（図１３では薄いハッチング）を背景に施している。なお、色は別のものであっても良い。また、円グラフの大きさ（半径）は、該当する外部機能の行数（ステップ数。サイズとも呼ぶ）を表す。すなわち、大きい場合には行数が多く、小さい場合には行数が少ない。さらに、円グラフの内訳は、分散度分布を表す。すなわち、集約結果格納部１８には１０％刻みで該当プログラムの本数が格納されているので、０−１０％の本数、１０−２０％の本数、２０−３０％の本数などを構成比で表すようにしている。
【００６３】
なお、上で述べたように外部機能を特定できる場合は良いが、プログラム呼出を介して、外部機能にアクセスしている可能性が考えられる。従って、解析対象プログラム内に存在しないプログラムを呼び出しているものについては、外部呼出しとして、外部機能と同様の扱いする。例えばステップＳ９で、その他の外部機能として特定し、上で述べたような外部機能と同様に集約する。そうすると、図１３に示すような「その他」の部分で表示することができるようになる。
【００６４】
このような表示を行うことによって、円グラフの大きさが大きい場合は、対象サブシステムでは、利用している各外部機能の資産量（サイズ）が多く、移行は困難と判断することも可能である。また、円グラフの内訳から、外部機能記述の分散度が高いものについては、ソースコードの多くの箇所を書き換える必要があり、移行は困難と判断することも可能である。その他、赤色が表示されているものがあった場合、該当する外部機能は、移行が不可能なものであるため、代替機能を用意するなど、仕様変更が必要と判断することもできる。
【００６５】
また、図１４に、コスト見積結果格納部２２に格納されているデータを用いた出力例を示す。図１４の例では、縦軸で使用外部機能に関するコスト（機能量及び難易度に関するコスト）を表し、横軸で手作業量に関するコストを表す平面において、ステップＳ５５で算出されたコスト及びステップＳ６１で算出されたコストに応じた座標に、該当するサブシステムを配置するようになっている。また、この平面においては、機能量及び難易度に関するコストについて所定の閾値ａと、手作業量に関するコストについて所定の閾値ｂとが定義されている。このような閾値ａと閾値ｂによって、平面は４象限に分けられる。このような平面における位置によって、以下のようなことが容易に分かる。
【００６６】
すなわち、機能量及び難易度に関するコストが閾値ａより大きく且つ手作業量（手修正の作業量）に関するコストが閾値ｂより大きいサブシステム（図１４ではサブシステムＥ）の場合には、必要な外部機能が多く、手作業量も多いので移行には不向きのサブシステムであることが分かる。また、機能量及び難易度に関するコストが閾値ａより小さく且つ手作業量に関するコストが閾値ｂより大きいサブシステム（図１４ではサブシステムＨ）の場合には、手作業量が多いサブシステムであることが分かる。また、機能量及び難易度に関するコストが閾値ａ以上であり且つ手作業量に関するコストが閾値ｂより小さいサブシステム（図１４ではサブシステムＧ）の場合には、使用外部機能の実現のため、多くの実行時ルーチンが別途必要となるようなサブシステムであることが分かる。さらに、機能量及び難易度に関するコストが閾値ａ以下であって且つ手作業量に関するコストが閾値ｂ以下であるサブシステム（図１４ではサブシステムＦ）の場合には、必要な外部機能の数が少なく、手作業量も少ないので移行に向いているサブシステムであることが分かる。
【００６７】
ステップＳ４９では、図１３や図１４のような出力を行っても良いし、図１０のようなデータをそのまま出力するようにしても良い。また、図１３を提示せず、図１４のみを出力するようにしても良い。
【００６８】
現行のソースコード資産を書き換えることでのみ、システムを移行できる場合は少なく、データアクセスルーチンやオンライン機能など、プログラムソースの外部から提供される機能である外部機能を含めて検討する必要がある。しかし、従来技術では、資産内で利用している外部機能の量や、利用箇所の分布など、移行方針を立てるのに十分な情報を把握して、適切に出力することができていなかった。上で述べたような処理を実施することによって、プログラム内で外部機能を利用する記述がどの程度分散して存在しているのか、資産全体を対象として外部機能をどの程度利用しているのか、機能量では図ることが出来ない移行が困難な外部機能を含んでいるかどうかといった情報を取得し、且つこの情報をユーザにとって理解しやすい形で示すことで、移行の難易度やコストを容易に把握することができるようになる。さらに、資産の移行を行うか、新規に作成するか、また、移行を行う場合に、資産の書き換えを実施するのか、エミュレーションによる方法で実現するのかといった移行方針の判断をも行うことができる。
【００６９】
さらに、単なる外部機能の使用状況についてのデータからコストを導き出すことが出来ないようなユーザであっても、資産の移行に対するコストを資産全体の情報を利用することで見積ることが出来るため、より正確な見積結果を取得することが出来る。
【００７０】
［実施の形態２］
次に、本発明の第２の実施の形態について説明する。本実施の形態と以下で説明する第３の実施の形態では共通する部分が多いので、第２の実施の形態及び第３の実施の形態に係る機能ブロック図を図１５に示す。
【００７１】
第２及び第３の実施の形態に係るプログラム解析装置は、解析対象のプログラムのソースコードを格納するプログラム格納部３１と、プログラム格納部３１に格納されているソースコードに対して構文解析処理を実施する構文解析部３２と、構文解析部３２の処理結果を格納する構文解析結果格納部３３と、予め規定されている外部機能についての知識情報を格納する外部機能分類知識情報格納部３４と、外部機能分類知識情報格納部３４に格納されたデータを用いて構文解析結果格納部３３に格納されたデータから外部機能についての情報を抽出する外部機能抽出処理部３５と、外部機能抽出処理部３５によって抽出されたデータを格納する外部機能抽出結果格納部３８と、外部機能抽出処理部３５が抽出しない呼出関係を抽出する処理を実施する呼出関係抽出処理部３６と、呼出関係抽出処理部３６の抽出結果である呼出関係データを格納する呼出関係データ格納部３９と、構文解析結果格納部３３に格納されたデータからセグメントの行数やプログラムの行数などのプログラムのデータを抽出するプログラムデータ抽出部３７と、プログラムデータ抽出部３７により抽出されたデータを格納するプログラムデータ格納部４０と、外部機能抽出結果格納部３８及びプログラムデータ格納部４０に格納されたデータを用いて外部機能の分散度を算出する分散度算出処理部４１と、分散度算出処理部４１により算出された分散度を格納する分散度格納部４２と、外部機能抽出結果格納部３８と呼出関係データ格納部３９とプログラムデータ格納部４０とに格納されているデータから構造パターン分類処理を実施する構造パターン分類処理部４３と、構造パターン分類処理部４３の処理結果を格納する構造パターン分類結果格納部４５と、構造パターン分類結果格納部４５に格納されたデータを用いて集約処理を実施する第１集約処理部４９と、第１集約処理部４９の処理結果を格納する第１集約結果格納部５１と、分散度格納部４２とプログラムデータ格納部４０と呼出関係データ格納部３９と外部機能抽出結果格納部３８とに格納されているデータに対して集約処理を実施するプログラム別集約処理部４６と、プログラム別集約処理部４６の処理結果を格納する第２集約結果格納部５０と、ユーザからの指示入力を受け付ける指示入力受付部５２と、指示入力受付部５２により受け付けられたユーザの指示に従って第１集約結果格納部５１又は第２集約結果格納部５０に格納されたデータを処理して出力する出力処理部５３とを含む。
【００７２】
なお、分散度算出処理部４１と分散度格納部４２とプログラム別集約処理部４６と第２集約結果格納部５０と指示入力受付部５２については、第３の実施の形態で用いられる。
【００７３】
次に、図１５に示したプログラム解析装置の処理フローを図１６乃至図２０を用いて説明する。まず、プログラム格納部３１に格納されている全解析対象プログラムに対して周知の構文解析を実施し、処理結果を構文解析結果格納部３３に格納する（ステップＳ７１）。本ステップは、ステップＳ１と同じであり、これ以上述べない。
【００７４】
次に、外部機能抽出処理部３５は、構文解析結果格納部３３に格納されている未処理プログラムを１つ特定し（ステップＳ７３）、未処理行のデータを１行分読み出す（ステップＳ７５）。なお、セクション名が出現した場合には、次のセクション名が出現するまで保持しておく。そして、外部機能抽出処理部３５は、外部機能分類知識情報格納部３４に格納されたデータに基づき、読み出した１行分のデータに対象外部機能が含まれているか判断する（ステップＳ７７）。外部機能分類知識情報格納部３４に格納されているデータは図５に示されたデータと同様である。
【００７５】
読み出した１行分のデータに対象外部機能が含まれていない場合には、ステップＳ８１に移行する。一方、読み出した１行文のデータに対象外部機能が含まれている場合には、外部機能抽出処理部３５は、ステップＳ７３で特定されたプログラム名、セクション名、ステップＳ７５で読み出した１行分のデータの行番号、該当する外部機能の種類、対象ファイル名などを、外部機能抽出結果格納部３８に記録する（ステップＳ７９）。
【００７６】
また、呼出関係抽出処理部３６は、読み出した１行分のデータに、外部機能分類知識情報格納部３４に規定されている外部機能以外の他のプログラムに対する呼び出しが含まれているか判断する（ステップＳ８１）。読み出した１行文のデータに他のプログラムに対する呼び出しが含まれていない場合には、ステップＳ８５に移行する。一方、読み出した１行文のデータに他のプログラムに対する呼び出しが含まれている場合には、呼出元プログラム名、呼出先プログラム名、解析対象プログラム以外に対する呼び出しの場合には外部呼出であることを表すデータ（外部呼出か否かを表すデータ）などを、呼出関係データ格納部３９に格納する（ステップＳ８３）。
【００７７】
さらに、プログラムデータ抽出部３７は、セクション行数及びプログラム行数を計数し、プログラムデータ格納部４０に格納する（ステップＳ８５）。セクション開始が特定されれば当該セクションの行数の計数を開始し、セクションの終了が特定されると当該セクションの行数の計数を停止し、プログラムデータ格納部４０に格納する。また、新たにプログラムの解析を開始すると行数の計数を開始し、当該プログラムの解析が終了すると行数の計数を停止し、プログラムデータ格納部４０に格納する。
【００７８】
ステップＳ７５乃至Ｓ８５の処理については、ステップＳ７３で特定された未処理プログラムの最後の行に達するまで繰り返される（ステップＳ８７）。ステップＳ７３で特定された未処理プログラムの最後の行に達すると、端子Ｃを介して図１７の処理に移行する。なお、ステップＳ７５、ステップＳ７９、ステップＳ８５などにおいて、分散度を算出するために必要となるデータについては、本実施の形態では取り扱わなくとも良い。
【００７９】
次に、構造パターン分類処理部４３は、外部機能抽出結果格納部３８、呼出関係データ格納部３９及びプログラムデータ格納部４０に格納されているデータを集約し、構造パターン分類結果格納部４５に格納する（ステップＳ８８）。例えば図１８（ａ）乃至（ｃ）に示すようなデータを生成する。図１８（ａ）は、プログラムＡについての集約結果を示す。集約結果には、プログラム名（プログラムＡ）、ソースステップ数（４００行）、使用されている外部機能（ＣＯＢＯＬ入出力文あり、ＳＱＬ文あり、ＮＤＢ文あり）、呼出先プログラム名（プログラムＢ、プログラムＣ）が含まれる。また、図１８（ｂ）は、プログラムＢについての集約結果を示しており、当該集約結果には、プログラム名（プログラムＢ）、ソースステップ数（３００行）、使用されている外部機能（オンラインあり、ＳＱＬ文あり）、呼出先プログラム名（プログラムＣ）が含まれる。さらに、図１８（ｃ）は、プログラムＣについての集約結果を示しており、当該集約結果には、プログラム名（プログラムＣ）、ソースステップ数（１０００行）、使用されている外部機能（オンラインあり、ＳＱＬ文あり）、呼出先プログラム名（プログラムＤ（外部呼出））が含まれる。プログラムＤは、解析対象プログラムではないので「外部呼出」というデータが付加される。
【００８０】
そして、構造パターン分類処理部４３は、ステップＳ８８で生成されたデータを用いて、解析対象プログラムが使用する外部機能及び呼出関係から、所定の構造に分類し、分類結果を構造パターン分類結果格納部４５に格納する（ステップＳ８９）。図１８（ａ）乃至（ｃ）に示したようなプログラムの場合には、図１９（ａ）乃至（ｃ）に示すようなパターンに分類される。図１９（ａ）乃至（ｃ）のそれぞれは、オンラインに対応する入力（入力振分）要素、業務ロジック部分に対応する業務要素、ＣＯＢＯＬ入出力、ＳＱＬ及びＮＤＢに対応するデータアクセス（Ｉ／Ｏ，ＲＤＢ等）、データアクセス先のＲＤＢ及びＣＯＢＯＬファイル、帳票に対応する帳票出力要素、帳票出力要素の出力先の帳票、解析対象資産内に含まれないプログラムへの外部呼出に対応する外部ＣＡＬＬ、外部ＣＡＬＬ先の外部ＰＧ（プログラム）を含む構造パターンがベースとなっている。そして、解析対象プログラムにおいて該当する要素にハッチング（マーク）を付することによって、いずれの構造パターンに分類されるかが表されている。
【００８１】
図１９（ａ）は、プログラムＡの構造パターン分類を示しており、業務要素及びデータアクセスにハッチングが付される構造パターン分類となる。図１９（ｂ）は、プログラムＢの構造パターン分類を示しており、入力（入力振分）要素、業務要素及びデータアクセスにハッチングが付される構造パターン分類となる。図１９（ｃ）は、プログラムＣの構造パターン分類を表しており、入力（入力振分）要素、業務要素、外部ＣＡＬＬ及びデータアクセスにハッチングが付される構造パターン分類となる。
【００８２】
解析対象のシステムが、よく設計されている場合には、個々のプログラムは、図１９（ａ）のように業務要素以外の要素は少数であるが、あまりよく設計されていない場合には、図１９（ｃ）のように業務要素以外の要素が多くなる。業務要素以外の要素が増えれば、移行の難易度が高くなるか又はコストが多くかかるようになる。
【００８３】
構造パターンは、以下の図２０に示すように１６種類のいずれかに分類できるので、ステップＳ８９では、そのいずれの構造パターン分類に該当するかを記録する。
【００８４】
そして、全てのプログラムについて処理が完了したかが確認され（ステップＳ９１）、未処理のプログラムが存在する場合には端子Ｄを介してステップＳ７３に戻る。一方、全てのプログラムについて処理が完了した場合には、第１集約処理部４９は、構造パターン分類結果格納部４５に格納された構造パターン分類の結果を、サブシステム単位で集約し、集約結果を第１集約結果格納部５１に格納する（ステップＳ９３）。
【００８５】
例えば、図２０に示すようなデータを生成する。図２０の例では、１６種類の構造パターンが、原則的に移行難易度が高い順に並べられている。具体的には、構造パターン分類（１）は、オンライン、帳票、データアクセス及び外部ＣＡＬＬの全てを使用している。構造パターン分類（２）乃至（５）は、オンライン、帳票、データアクセス及び外部ＣＡＬＬのうち３つを使用している。また、構造パターン分類（６）乃至（１１）は、オンライン、帳票、データアクセス及び外部ＣＡＬＬのうち２つを使用している。さらに、構造パターン分類（１２）乃至（１５）は、オンライン、帳票、データアクセス及び外部ＣＡＬＬのうちいずれか１つを使用している。構造パターン分類（１６）は、業務要素のみを使用している。このように多くの外部機能などを使用していれば、それらの外部機能の全てに対処する必要があり、難易度やコストが高くなる。
【００８６】
そして、各構造パターン分類について、サブシステム単位で、該当本数及び構成割合についてのデータも含まれる。サブシステム単位で、該当本数の合計及び構成割合合計についてのデータも含まれる。
【００８７】
そして、出力処理部５３は、第１集約結果格納部５１に格納されている集約結果を出力する（ステップＳ９５）。例えば表示装置に表示するか、プリンタなどの出力装置に出力する。図２０のようなデータをそのまま出力しても良い。
【００８８】
このように、対象のプログラムがどの程度多くの種類の外部機能等を含んでいるのかという情報を上で述べたように分類した上で取得することができる。このことで、１つのプログラム内で多くの外部機能を使用しているものは、移行を行わないか、低いレベルでのエミュレーションという形で実施することを考えることができるようになる。また、使用している外部機能が少ない場合は、そのまま業務ロジック部分のみを移行することができると判断することが出来る。
【００８９】
また、資産全体に対して、プログラムを所定の構造パターンで分類することで、資産内の全てのプログラムに対して、プログラムの特徴を把握することができ、移行方法を検討する上で利用できる。これにより、資産量が多い場合であってもプログラム内の構造を効率的に把握することができる。
【００９０】
［実施の形態３］
本発明の第３の実施の形態に係るプログラム解析装置は、図１５に示すような機能ブロックを含む。但し、第３の実施の形態では、構造パターン分類処理部４３、構造パターン分類結果格納部４５、第１集約処理部４９、第１集約結果格納部５１については、使用されない。
【００９１】
次に、第３の実施の形態に係るプログラム解析装置の処理フローを図２１乃至図２７を用いて説明する。なお、第２の実施の形態に係る処理フローのうちステップＳ７１乃至Ｓ８７（図１６）については、第３の実施の形態に係る処理フローにおいても同じであるから説明を省略する。
【００９２】
すなわち、図１６の端子Ｃから図２１の処理に移行する。ここで、分散度算出処理部４１は、外部機能抽出結果格納部３８とプログラムデータ格納部４０とに格納されているデータを用いて、外部機能の分散度の算出処理を実施する（ステップＳ１０１）。この処理については、図７で説明したものと同様であるので、説明を省略する。
【００９３】
そして、全てのプログラムについて処理が完了したかが確認され（ステップＳ１０３）、未処理のプログラムが存在する場合には端子Ｄを介してステップＳ７３に戻る。一方、全てのプログラムについて処理が完了した場合には、プログラム別集約処理部４６は、分散度格納部４２と外部機能抽出結果格納部３８とプログラムデータ格納部４０と呼出関係データ格納部３９とに格納されている、外部機能及び呼出関係についての情報などをプログラム単位で集約し、第２集約結果格納部５０に格納する（ステップＳ１０５）。
【００９４】
ステップＳ１０５では、図２２（ａ）乃至（ｃ）に示すようなデータを生成する。図２２（ａ）乃至（ｃ）のデータは、ソースステップ数（行数）と、使用されている外部機能の種類及び分散度と、呼出関係（呼出先プログラム名及び解析対象サブシステム内には含まれないプログラムへの外部ＣＡＬＬである場合にはその旨を表すデータ）とが含まれている。プログラムＡについては、ソースステップ数が４００行であり、ＣＯＢＯＬ入出力（分散度６６％）、ＳＱＬ（分散度３０％）、及びＮＤＢ（分散度３０％）が含まれている。また、解析対象プログラムであるプログラムＢ及びプログラムＣへの呼出が含まれている。プログラムＢについては、ソースステップ数が３００行であり、オンライン機能（分散度３０％）、及びＳＱＬ（分散度５０％）が含まれている。また、解析対象プログラムであるプログラムＣへの呼出が含まれている。プログラムＣについては、ソースステップ数が１０００行であり、オンライン機能（分散度７０％）、及びＳＱＬ（分散度３０％）が含まれている。また、外部ＣＡＬＬとしてプログラムＤへの呼出が含まれている。
【００９５】
ソースステップ数は、プログラムデータ格納部４０に格納されている。使用されている外部機能の種類については、外部機能抽出結果格納部３８に格納されたデータを用いて特定される。外部機能の分散度については、分散度格納部４２に格納されている。呼出関係については、呼出関係データ格納部３９に格納されている。
【００９６】
そして、出力処理部５３は、ユーザからの指示を受け付ける指示入力受付部５２からの指示に応じて、第２集約結果格納部５０に格納されたデータを用いて出力処理を実施する（ステップＳ１０７）。この出力処理については図２３乃至図２６を用いて説明する。
【００９７】
出力処理部５３は、解析対象サブシステムについて、第２集約結果格納部５０に格納された各プログラムの規模（ソースステップ数）から、各プログラムに対応するノードの大きさを決定する（図２３：ステップＳ１１１）。また、解析対象サブシステムについて、第２集約結果格納部５０に格納されている各プログラムの呼出関係からプログラム間のリンク、ノードの配置及びノードの形状を決定する（ステップＳ１１３）。そして、解析対象サブシステムの呼出構造を表示する（ステップＳ１１５）。
【００９８】
例えば図２２の場合には、図２４のような表示が行われる。図２４の例では、プログラムＣ、プログラムＡ、プログラムＢの順番でソースステップ数が小さくなるので、対応するノードの大きさも小さくなる。また、プログラムＡ乃至Ｃについては、解析対象サブシステムに含まれるプログラムであるから矩形ノードが用いられているが、解析対象サブシステム外のプログラムＤについては楕円ノードが用いられている。さらに、プログラムＡにはプログラムＢ及びＣへの呼出が含まれ、プログラムＢにはプログラムＣへの呼出が含まれ、プログラムＣからはプログラムＤへの呼出が含まれているので、対応するリンクも示されている。配置については、互いに重ならないようなノード位置が決定される。このような呼出構造が提示されると、外部ＣＡＬＬの基点となるプログラムを把握したり、規模の大きいプログラムと他のプログラムとの関係を把握したりすることが可能となる。
【００９９】
また、出力処理部５３は、指示入力受付部５２からの指示を待って、外部機能による色分け表示がユーザから指示されたか判断する（ステップＳ１１７）。外部機能による色分け表示を指示された場合には、表示中のプログラム（ノード）について主たる外部機能を分散度の値で特定し、対応する色を付して表示を更新する（ステップＳ１１９）。その後処理はステップＳ１２９に移行する。
【０１００】
図２２の場合には、例えば図２５のような表示に更新される。プログラムＡについては、ＣＯＢＯＬ、ＳＱＬ及びＮＤＢの使用が特定されているが、分散度が最も高いのはＣＯＢＯＬ入出力であるから、ＣＯＢＯＬ入出力に対応する色が付される。同様に、プログラムＢについては、オンライン及びＳＱＬの使用が特定されているが、分散度が最も高いのはＳＱＬであるから、ＳＱＬに対応する色が付される。さらに、プログラムＣについては、オンライン及びＳＱＬの使用が特定されているが、分散度が最も高いのはオンラインであるから、オンラインに対応する色が付される。
【０１０１】
ステップＳ１１７で外部機能による色分け表示が指示されていないと判断された場合には、出力処理部５３は、表示すべきプログラムの先頭がユーザから指示されたか判断する（ステップＳ１２１）。表示すべきプログラムの先頭がユーザから指示された場合には、先頭プログラム配下のプログラムを特定し、表示対象を当該先頭プログラム配下に対応するノード及びリンクに限定して表示する（ステップＳ１２３）。その後処理はステップＳ１２９に移行する。
【０１０２】
例えば図２６（ａ）のような表示が行われていた場合には、図２６（ｂ）に示すような表示に更新される。図２６（ａ）では、プログラムＧからプログラムＱ及びプログラムＢへの呼出が存在し、プログラムＱからプログラムＡへの呼出が存在し、プログラムＡからプログラムＢ、プログラムＰ及びプログラムＣへの呼出が存在し、プログラムＰからプログラムＢ、プログラムＣ及びプログラムＥへの呼出が存在し、プログラムＢからプログラムＣへの呼出が存在し、プログラムＣからプログラムＥへの呼出が存在し、プログラムＥから外部のプログラムＤへの呼出が存在することを表している。ここでプログラムＢが先頭プログラムとして指定された場合には、図２６（ｂ）のような表示に更新される。プログラムＢ配下のプログラムは、プログラムＣ、プログラムＥ及びプログラムＤだけなので、この４つのノード及びそれらについてのリンクに表示が限定される。なお、図２６（ａ）及び（ｂ）では、外部機能による色分け表示も併せて行われている。
【０１０３】
ステップＳ１２１で表示すべきプログラムの先頭が指示されたわけではないと判断された場合には、表示すべき外部機能が指示されたか判断する（ステップＳ１２５）。表示すべき外部機能が指示された場合には、指示された外部機能を使用するプログラムのみを特定し、表示する（ステップＳ１２７）。その後、処理はステップＳ１２９に移行する。例えば図２４のような表示が行われている場合に、「オンライン」が表示すべき外部機能として特定された場合には、例えば図２７のような表示に更新される。すなわち、オンラインを使用指定プログラムＢ及びプログラムＣだけが表示され、その他のプログラムＡ及びプログラムＤについては表示されない。また、プログラムＢ及びプログラムＣは、オンラインに対応する色で表示される。
【０１０４】
ステップＳ１２５で表示すべき外部機能が指示されたわけではないと判断された場合にはステップＳ１２９に移行する。ステップＳ１２９ではユーザから終了が指示されたか判断し、終了指示でない場合にはステップＳ１１７に戻る。一方、終了が指示された場合には、処理を終了する。
【０１０５】
第２の実施の形態の出力結果では、解析対象プログラムにおける外部機能の利用状況を把握するものであったのに対して、本実施の形態では、個々のプログラムではなく、プログラムの呼出構造上での外部機能の利用状況及びプログラム規模の分布を把握することができる。呼出構造の上位であるプログラムの呼出元には、業務ロジックのみが含まれ、呼び出し先に外部機能を利用しているものが集中している場合、呼出構造の上位部分はそのまま移行しやすいと考えられる。逆に外部機能を利用しているプログラムが呼出構造中分散している場合、資産の整理が難しいため、移行が難しいと判断できる。
【０１０６】
また、巨大な呼出構造が取得されたときに、呼出構造全体を把握できない場合もある。これに対して、本実施の形態によれば、ある基点から呼び出している方向にのみ注目して解析することも可能である。また、色別表示を行って、そのほかの機能に隠れてしまって見えない問題を解消し、利用者が注目したい外部機能のみを表示することが出来るようになる。さらに、主たる外部機能の分布がどのようになっているかに注目する時などにも有用である。なお、基点となるプログラムの指定については、ユーザが個々のプログラムを設定する方法も可能であるが、ソースコード内を解析して、上位の資産であるＪＣＬ（Job Control Language）資産から直接呼び出されているもの、対象サブシステムから呼び出されているもの、という形で設定することも考えられる。
【０１０７】
以上本発明の実施の形態を説明したが本発明は上記実施の形態に限定されるものではない。例えば、機能ブロック図は、必ずしも実際のプログラムモジュール構成を示すものではない。
【０１０８】
また、処理フローについても同様の結果を得られる場合には、並列的に実行したり実行順番を入れ替えたりすることができる。
【０１０９】
ＣＯＢＯＬを解析対象としたが、他の言語についても適用することができる。
【０１１０】
なお、プログラム解析装置は、図２８のようなコンピュータ装置であって、メモリ２５０１（記憶装置）とＣＰＵ２５０３（処理装置）とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施の形態における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。本発明の実施の形態では、上で述べた処理を実施するためのアプリケーション・プログラムはリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１１１】
（付記１）
プログラム格納部に格納された解析対象プログラムを解析することによって、当該解析対象プログラムにおける、予め定められた使用外部機能の種類及び出現位置に関する情報を抽出し、外部機能分析結果格納部に格納するステップと、
前記外部機能分析結果格納部に格納された前記使用外部機能の種類及び前記出現位置に関する情報から、前記解析対象プログラムにおける各前記使用外部機能の分散度を算出し、分散度格納部に格納する分散度算出ステップと、
前記外部機能分析結果格納部及び前記分散度格納部に格納されたデータを、所定の単位で集約し、集約結果を集約結果格納部に格納する集約ステップと、
を含み、コンピュータにより実行されるプログラム解析方法。
【０１１２】
（付記２）
前記解析対象プログラム内における、予め定められ且つシステム移行に対して難易度の高い高難易度外部機能及び出現位置に関する情報を抽出し、高難易度外部機能データ格納部に格納するステップ、
をさらに含み、
前記集約ステップが、
前記高難易度機能データ格納部に格納されたデータを、前記所定の単位で集約し、集約結果を前記集約結果格納部に格納するステップ
を含む付記１記載のプログラム解析方法。
【０１１３】
（付記３）
前記使用外部機能の前記出現位置に関する情報が、出現セグメントの情報であって、
前記分散度算出ステップが、
各前記使用外部機能について、当該使用外部機能の出現セグメントの合計サイズを当該出現セグメントを含むプログラムの全体サイズで除することによって前記分散度を算出するステップ
を含む付記１記載のプログラム解析方法。
【０１１４】
（付記４）
前記解析対象プログラム内における、予め定められ且つシステム移行に対して難易度の高い高難易度外部機能及び出現位置に関する情報を抽出し、高難易度外部機能データ格納部に格納するステップと、
前記解析対象プログラムのサイズを特定するステップと、
をさらに含み、
前記集約ステップが、
各前記使用外部機能について、当該使用外部機能についての命令種別数と、当該使用外部機能が関連する前記解析対象プログラムの合計サイズと、当該使用外部機能についての分散度の分布と、当該使用外部機能に関連する前記高難易度機能の有無とを、前記所定の単位であるサブシステム単位で集約し、前記集約結果格納部に格納するステップ
を含む付記１記載のプログラム解析方法。
【０１１５】
（付記５）
前記サブシステム単位で、前記合計サイズを前記使用外部機能の表示要素のサイズで表し、前記分散度の分布を前記表示要素の内訳で表し、前記高難易度機能の有無を前記表示要素の色で表すような表示データを生成するステップ
をさらに含む付記４記載のプログラム解析方法。
【０１１６】
（付記６）
前記集約結果格納部に格納されているデータのうち前記外部機能の使用の程度を表す集約データからコストを算出し、コストデータ格納部に格納するステップと、
前記集約結果格納部に格納されているデータのうち手作業の量に関連する集約データからコストを算出し、前記コストデータ格納部に格納するステップと、
をさらに含む付記１又は２記載のプログラム解析方法。
【０１１７】
（付記７）
前記集約結果格納部に格納された、前記使用外部機能が関連する処理プログラムの合計サイズと前記使用外部機能についての命令種別数と前記外部機能に関連する前記高難易度機能の有無とを用いて、前記使用外部機能について機能量及び難易度に関するコストを算出し、コストデータ格納部に格納するステップと、
前記集約結果格納部に格納された、前記使用外部機能についての分散度の分布に基づき、前記使用外部機能について手作業の量に関するコストを算出し、前記コストデータ格納部に格納するステップと、
をさらに含む付記４記載のプログラム解析方法。
【０１１８】
（付記８）
縦軸により前記機能量及び難易度に関するコストを表し且つ横軸で前記手作業の量に関するコストを表す平面における、処理対象サブシステムについての位置を特定して出力するステップ
をさらに含む付記７記載のプログラム解析方法。
【０１１９】
（付記９）
プログラム格納部に格納された解析対象プログラムを解析することによって、当該解析対象プログラムにおける、予め定められた使用外部機能の種類及び他のプログラムの呼び出しの有無を抽出し、分析結果格納部に格納するステップと、
前記分析結果格納部に格納された前記使用外部機能の種類及び前記他のプログラムの呼び出しの有無から、前記解析対象プログラムを、予め定められた構造パターンに分類し、分類結果を分類結果格納部に格納するステップと、
前記分類結果格納部に格納された前記構造パターンの分類結果を、所定の単位で集約し、集約結果格納部に格納する集約ステップと、
を含み、コンピュータに実行されるプログラム解析方法。
【０１２０】
（付記１０）
前記集約ステップが、
前記所定の単位であるサブシステム単位で、各前記構造パターンの数又は割合を算出するステップ
を含む付記９記載のプログラム解析方法。
【０１２１】
（付記１１）
前記集約結果格納部に格納されるデータを、移行難易度の高い前記構造パターンについてのデータから順番に出力するステップ
をさらに含む付記９又は１０記載のプログラム解析方法。
【０１２２】
（付記１２）
プログラム格納部に格納された解析対象プログラムを解析することによって、プログラムの呼出関係を抽出し、分析結果格納部に格納する分析ステップと、
前記プログラム格納部に格納された前記解析対象プログラムのサイズを特定し、前記分析結果格納部に格納するステップと、
前記分析結果格納部に格納された前記プログラムの呼出関係を、前記解析対象プログラムのサイズを反映させて出力する出力ステップと、
を含み、コンピュータに実行されるプログラム解析方法。
【０１２３】
（付記１３）
前記分析ステップは、
前記解析対象プログラムについて、予め定められた使用外部機能の種類を抽出し、前記分析結果格納部に格納するステップ、
を含み、
前記出力ステップが、
前記分析結果格納部に格納されている前記使用外部機能の種類を出力内容に反映させるステップ
を含む付記１２記載のプログラム解析方法。
【０１２４】
（付記１４）
前記分析ステップは、
前記解析対象プログラムについて、予め定められた使用外部機能の種類及び出現位置に関する情報を抽出し、前記分析結果格納部に格納するステップ
を含み、
さらに、
前記分析結果格納部に格納された前記使用外部機能の種類及び前記出現位置に関する情報から、前記解析対象プログラムにおける各前記使用外部機能の分散度を算出し、分散度格納部に格納する分散度算出ステップ
を含み、
前記出力ステップが、
前記分散度格納部に格納された各前記使用外部機能の分散度から各前記解析対象プログラムの代表使用外部機能を特定し、出力内容に反映するステップ
を含む付記１２記載のプログラム解析方法。
【０１２５】
（付記１５）
前記分析ステップは、
前記解析対象プログラムについて、予め定められた使用外部機能の種類を抽出し、前記分析結果格納部に格納するステップ、
を含み、
前記出力ステップが、
ユーザに指定された外部機能を有する前記解析対象プログラムのみを出力するステップ
を含む付記１２記載のプログラム解析方法。
【０１２６】
（付記１６）
前記出力ステップが、
前記呼出関係における基点プログラム以降の呼出先のみを出力するステップ
を含む付記１２記載のプログラム解析方法。
【０１２７】
（付記１７）
付記１乃至１６のいずれか１つ記載のプログラム解析方法をコンピュータに実行させるためのプログラム。
【０１２８】
（付記１８）
プログラム格納部に格納された解析対象プログラムを解析することによって、当該解析対象プログラムにおける、予め定められた使用外部機能の種類及び出現位置に関する情報を抽出し、外部機能分析結果格納部に格納する手段と、
前記外部機能分析結果格納部に格納された前記使用外部機能の種類及び前記出現位置に関する情報から、前記解析対象プログラムにおける各前記使用外部機能の分散度を算出し、分散度格納部に格納する分散度算出手段と、
前記外部機能分析結果格納部及び前記分散度格納部に格納されたデータを、所定の単位で集約し、集約結果を集約結果格納部に格納する集約手段と、
を有するプログラム解析装置。
【０１２９】
（付記１９）
プログラム格納部に格納された解析対象プログラムを解析することによって、当該解析対象プログラムにおける、予め定められた使用外部機能の種類及び他のプログラムの呼び出しの有無を抽出し、分析結果格納部に格納する手段と、
前記分析結果格納部に格納された前記使用外部機能の種類及び前記他のプログラムの呼び出しの有無から、前記解析対象プログラムを、予め定められた構造パターンに分類し、分類結果を分類結果格納部に格納する手段と、
前記分類結果格納部に格納された前記構造パターンの分類結果を、所定の単位で集約し、集約結果格納部に格納する集約手段と、
を有するプログラム解析装置。
【０１３０】
（付記２０）
プログラム格納部に格納された解析対象プログラムを解析することによって、プログラムの呼出関係を抽出し、分析結果格納部に格納する分析手段と、
前記プログラム格納部に格納された前記解析対象プログラムのサイズを特定し、前記分析結果格納部に格納する手段と、
前記分析結果格納部に格納された前記プログラムの呼出関係を、前記解析対象プログラムのサイズを反映させて出力する出力手段と、
を有するプログラム解析装置。
【図面の簡単な説明】
【０１３１】
【図１】本発明の第１の実施の形態に係る機能ブロック図である。
【図２】本発明の第１の実施の形態に係る処理フローの第１部分を示す図である。
【図３】プログラム例を示す図である。
【図４】構文解析結果の一例を示す図である。
【図５】外部機能分類知識情報格納部に格納されるデータの一例を示す図である。
【図６】高難易度外部機能知識情報格納部に格納されるデータの一例を示す図である。
【図７】外部機能の分散度の算出処理の処理フローを示す図である。
【図８】本発明の第１の実施の形態に係る処理フローの第２部分を示す図である。
【図９】（ａ）乃至（ｃ）は、本発明の第１の実施の形態に係るプログラム別集約処理の処理結果を示す図である。
【図１０】本発明の第１の実施の形態に係るサブシステム別集約処理の処理結果を示す図である。
【図１１】本発明の第１の実施の形態に係るコスト見積処理の処理フローを示す図である。
【図１２】（ａ）及び（ｂ）は、コスト知識情報格納部に格納されるデータの一例を示す図である。
【図１３】本発明の第１の実施の形態における集約結果の表示例を示す図である。
【図１４】本発明の第１の実施の形態に係るコスト関連の表示例を示す図である。
【図１５】本発明の第２及び第３の実施の形態に係る機能ブロック図である。
【図１６】本発明の第２の実施の形態に係る処理フローの第１部分を示す図である。
【図１７】本発明の第２の実施の形態に係る処理フローの第２部分を示す図である。
【図１８】本発明の第２の実施の形態に係る集約処理の処理結果を示す図である。
【図１９】（ａ）乃至（ｃ）は、構造パターン分類の例を示す図である。
【図２０】本発明の第２の実施の形態に係る出力処理の表示例を示す図である。
【図２１】本発明の第３の実施の形態に係る処理フローを示す図である。
【図２２】（ａ）乃至（ｃ）は、本発明の第３の実施の形態に係る集約処理の処理結果を示す図である。
【図２３】本発明の第３の実施の形態に係る出力処理の処理フローを示す図である。
【図２４】本発明の第３の実施の形態に係る出力処理の表示例を示す図である。
【図２５】本発明の第３の実施の形態に係る出力処理の表示例を示す図である。
【図２６】（ａ）は基点プログラムの指定前の表示例、（ｂ）は基点プログラムの指定後の表示例を示す図である。
【図２７】本発明の第３の実施の形態に係る出力処理の表示例を示す図である。
【図２８】コンピュータの機能ブロック図である。
【符号の説明】
【０１３２】
１，３１  プログラム格納部
２，３２  構文解析部
３，３３  構文解析結果格納部
４  高難易度外部機能知識情報格納部
５，３４  外部機能分類知識情報格納部
６，３５  外部機能抽出処理部
７  高難易度外部機能抽出処理部
８，３７  プログラムデータ抽出部
９，３８  外部機能抽出結果格納部
１１  高難易度外部機能抽出結果格納部
１２，４０  プログラムデータ格納部
１３，４１  分散度算出処理部
１４，４２  分散度格納部
１５  集約処理部
１６，４６  プログラム別集約処理部
１７  サブシステム別集約処理部
１８  集約結果格納部
１９  出力処理部
２０  コスト見積処理部
２１  コスト知識情報格納部
２２  コスト見積結果格納部
３６  呼出関係抽出処理部
３９  呼出関係データ格納部
４３  構造パターン分類処理部
４５  構造パターン分類結果格納部
４９  第１集約処理部
５０  第２集約結果格納部
５１  第１集約結果格納部
５２  指示入力受付部
５３  出力処理部
【図１】
2007310727.tif 000003
【図２】
2007310727.tif 000004
【図３】
2007310727.tif 000005
【図４】
2007310727.tif 000006
【図５】
2007310727.tif 000007
【図６】
2007310727.tif 000008
【図７】
2007310727.tif 000009
【図８】
2007310727.tif 000010
【図９】
2007310727.tif 000011
【図１０】
2007310727.tif 000012
【図１１】
2007310727.tif 000013
【図１２】
2007310727.tif 000014
【図１３】
2007310727.tif 000015
【図１４】
2007310727.tif 000016
【図１５】
2007310727.tif 000017
【図１６】
2007310727.tif 000018
【図１７】
2007310727.tif 000019
【図１８】
2007310727.tif 000020
【図１９】
2007310727.tif 000021
【図２０】
2007310727.tif 000022
【図２１】
2007310727.tif 000023
【図２２】
2007310727.tif 000024
【図２３】
2007310727.tif 000025
【図２４】
2007310727.tif 000026
【図２５】
2007310727.tif 000027
【図２６】
2007310727.tif 000028
【図２７】
2007310727.tif 000029
【図２８】
2007310727.tif 000030