"コンピュータにより、コンピュータプログラムを分析するための方法であって、前記コンピュータは、A分析対象のコンピュータプログラムのソースコードを記憶部に記憶し、B前記ソースコードから、ロジック処理とデータアクセス処理との間の境界を示す境界候補を少なくとも一つ以上抽出して保持し、C抽出された前記境界候補に基づいて、前記ソースコードからデータアクセス処理を抽出し、D抽出された前記データアクセス処理を、当該データアクセス処理を呼び出すためのデータアクセス用情報に置き換えることにより、前記ソースコードからロジック処理を抽出する、コンピュータプログラムの分析方法。さらに、前記コンピュータは、E前記ソースコードから抽出された前記データアクセス処理及び前記ロジック処理を画面に出力させる、請求項1に記載のコンピュータプログラムの分析方法。前記Cでは、C1前記境界候補を基準としてデータ依存関係のある処理を抽出し、C2前記データ依存関係のある処理が参照するデータの種別に基づいて、データアクセス処理を抽出する、請求項1または請求項2のいずれかに記載のコンピュータプログラムの分析方法。前記Bでは、B1条件文の条件部を入力側の境界候補として抽出し、B2代入文を出力側の境界候補として抽出する、請求項1~3のいずれかに記載のコンピュータプログラムの分析方法。前記データアクセス用情報は、抽出された前記データアクセス処理が参照するデータの名称に基づいて作成される、請求項1~4のいずれかに記載のコンピュータプログラムの分析方法。前記データアクセス用情報は、抽出された前記データアクセス処理が参照する前記データの前記名称及び前記データの参照順序に基づいて生成される、請求項5に記載のコンピュータプログラムの分析方法。前記データアクセス処理により参照されるデータは、共有メモリに記憶されている、請求項1~6のいずれかに記載のコンピュータプログラムの分析方法。さらに、前記コンピュータは、Fユーザからの指示に応じて、抽出された前記データアクセス処理を前記ソースコードに戻したり、または、前記ソースコードの中から指定された処理をデータアクセス処理として抽出したりする、請求項1~7のいずれかに記載のコンピュータプログラムの分析方法。コンピュータプログラムを分析するコンピュータプログラム分析装置であって、所定の分析プログラムを格納する記憶部と、前記所定の分析プログラムを実行するマイクロプロセッサとを備え、前記マイクロプロセッサは、前記所定の分析プログラムを実行することにより、A分析対象のコンピュータプログラムのソースコードを記憶部に記憶し、B前記ソースコードから、ロジック処理とデータアクセス処理との間の境界を示す境界候補を少なくとも一つ以上抽出して保持し、C抽出された前記境界候補に基づいて、前記ソースコードからデータアクセス処理を抽出し、D抽出された前記データアクセス処理を、当該データアクセス処理を呼び出すためのデータアクセス用情報に置き換えることにより、前記ソースコードからロジック処理を抽出する、コンピュータプログラム分析装置。前記Cでは、C1前記境界候補を基準としてデータ依存関係のある処理を抽出し、C2前記データ依存関係のある処理が参照するデータの種別に基づいて、データアクセス処理を抽出する、請求項9に記載のコンピュータプログラム分析装置。コンピュータを、分析対象コンピュータプログラムを分析するための装置として機能させるためのコンピュータプログラムであって、前記コンピュータに、A前記分析対象コンピュータプログラムのソースコードを記憶部に記憶させ、B前記ソースコードから、ロジック処理とデータアクセス処理との間の境界を示す境界候補を少なくとも一つ以上抽出して保持させ、C抽出された前記境界候補に基づいて、前記ソースコードからデータアクセス処理を抽出させ、D抽出された前記データアクセス処理を、当該データアクセス処理を呼び出すためのデータアクセス用情報に置き換えさせて、前記ソースコードからロジック処理を抽出させる、コンピュータプログラム。特許文献1に記載の従来技術は、入出力データが明確に分かっている場合を前提としている。しかし、複数タスクが共有メモリを介してデータを共有するような情報制御プログラムでは、各タスク間でどのデータを共有しているのかはわかるが、入力データがどれで、出力データがどれであるか、必ずしも明確ではない。そのため、情報制御プログラムでは、入出力データを基準として情報制御プログラム内から処理を分離することは、困難である。そこで、本発明の目的は、入出力データが不明確な場合も、コンピュータプログラムを分析してロジック処理とデータアクセス処理とに分離することのできるコンピュータプログラムの分析方法及び分析装置を提供することにある。上記課題を解決すべく、本発明に従うコンピュータプログラムを解析する方法は、コンピュータにより、コンピュータプログラムを分析するための方法であって、コンピュータは、A分析対象のコンピュータプログラムのソースコードを記憶部に記憶し、Bソースコードから、ロジック処理とデータアクセス処理との間の境界を示す境界候補を少なくとも一つ以上抽出して保持し、C抽出された境界候補に基づいて、ソースコードからデータアクセス処理を抽出し、D抽出されたデータアクセス処理を、当該データアクセス処理を呼び出すためのデータアクセス用情報に置き換えることにより、ソースコードからロジック処理を抽出する。さらに、コンピュータは、Eソースコードから抽出されたデータアクセス処理及びロジック処理を画面に出力させてもよい。さらに、Cでは、C1境界候補を基準としてデータ依存関係のある処理を抽出し、C2データ依存関係のある処理が参照するデータの種別に基づいて、データアクセス処理を抽出してもよい。さらに、Bでは、B1条件文の条件部を入力側の境界候補として抽出し、B2代入文を出力側の境界候補として抽出してもよい。データアクセス用情報は、抽出されたデータアクセス処理が参照するデータの名称に基づいて作成してもよい。データアクセス用情報は、抽出されたデータアクセス処理が参照するデータの名称及びデータの参照順序に基づいて生成してもよい。本発明は、コンピュータプログラムを分析する装置、または、コンピュータプログラムを分析するためのコンピュータプログラムとして把握することもできる。以下、図面に基づいて、本発明の実施の形態を説明する。本実施形態では、後述のように、入力データを受け取り、入力データの内容をチェックして、制御対象が適切に動作するように出力データを作成するという、情報制御システムの基本動作に着目する。本実施形態では、例えば、条件文の条件部または代入文を基準として、ソースコードから、ロジック処理とデータアクセス処理との境界候補を検索する。さらに、本実施形態では、境界候補を基準として、データ依存関係または処理依存関係のある処理を、データアクセス処理として抽出する。本実施形態では、ソースコードからデータアクセス処理のコードを取り除いた残り部分を、ロジック処理として抽出する。このように、本実施形態では、入出力データが明確に分かっていない場合でも、プログラムをロジック処理とデータアクセス処理とに分離できる。従って、プログラムを修正する場合は、ロジック処理に集中して作業できるため、修正作業の効率が向上する。さらに、ロジック処理とデータアクセス処理とを区別できるため、データアクセス処理の部分を間違えて修正してしまうという事態を防止できる。これにより、プログラムの修正ミスを少なくできる。また、抽出したデータアクセス処理間を比較することにより、同一のデータアクセスについては1つに纏めることができる。そのため、プログラム内の様々な場所に実装されているデータアクセス処理の重複を省くことができる。このように、本実施形態では、古いプログラムを分析して、可読性及び保守性の高い新しいプログラムを得ることができる。以下、図面に従い、発明を実施するための形態について述べる。図1は、本実施例に係るプログラム分析装置1のシステム構成を示す。プログラム分析装置1は、例えば、記憶部11と、マイクロプロセッサ以下、CPU12と、メモリ13と、入力部14と、出力部15と、通信部16とを含むコンピュータとして構成される。記憶部11は、例えば、ハードディスクドライブまたはフラッシュメモリデバイスのような比較的大容量の記憶装置として構成される。記憶部11には、分析対象プログラムのソースコード21と、各種情報22-25と、分析対象ソースコードから分離されたデータアクセス処理のコード26と、分析対象ソースコードから分離されたロジック処理のコード27と、分析プログラム31とが記憶される。CPU12は、分析プログラム31を実行することにより、分析対象ソースコードからロジック処理とデータアクセス処理とを分離する機能を実現する。分析プログラム31は、記憶部11からメモリ13に転送されて、CPU12により実行される。メモリ13には、作業領域も設けられる。入力部14は、ユーザからの情報または指示を受け付けるための装置である。入力部14としては、例えば、キーボード、マウス等のポインティングデバイス、タッチパネル、マイクロフォン等のいずれか一つまたは複数を用いることができる。出力部15は、ユーザに情報を提示したりするための装置である。出力部15としては、例えば、ディスプレイ装置、スピーカー、プリンタ等のいずれか一つまたは複数を用いることができる。通信部16は、例えば、LANLocalAreaNetworkまたはインターネットのような通信ネットワークと接続して通信するための回路である。なお、プログラム分析装置1に接続されるコンピュータ端末を用いて、ユーザとプログラム分析装置1とが情報を交換する構成としてもよい。その場合、プログラム分析装置1から入力部14及び出力部15を取り除くことができる。さらに、図1では、一台のコンピュータからプログラム分析装置1を構成する例を示すが、これに限らず、複数のコンピュータを連携させることで一つのプログラム分析装置1を構成してもよい。図2は、分析対象プログラムのソースコード21の例を示す。ソースコード21は、制御対象となる列車を識別する列車IDを引数として取得し、列車の状態及び信号機の状態などをチェックし、信号機に制御指示を出力する。ソースコードの左側には、各行各ノードを識別するための連続数字を付してある。さらに、連続数字のさらに左側には、本実施形態の理解のために、後述する境界候補となるノードを示すための矢印を付してある。S12,S15,S22,S32に付された白い矢印は、境界であると判断されるノードを示す。S14に付された黒い矢印は、境界ではないと判断されたノードを示す。図3は、分析対象プログラムを実行するためのプログラム実行装置5のハードウェア構成を示す。プログラム実行装置5も図1で述べたプログラム分析装置1と同様に、例えば、記憶部51と、CPU52と、メモリ53と、入力部54と、出力部55と、通信部56とを備える。ハードディスクドライブまたはフラッシュメモリデバイス等から構成可能な記憶部51には、分析対象のソースコード21をコンパイルした結果である、分析対象プログラム50が格納されている。メモリ53は、分析対象プログラム50により利用される共有メモリデータ61-65を記憶する。共有メモリデータには、プログラム間で共有する列車情報TrainArray61と、駅情報StationArray62と、ダイヤ情報TimetableArray63と、進路情報RouteArray64と、信号機情報SignalArray65とがある。CPU52は、記憶部51からプログラム50をメモリ53にロードして実行する。プログラム50は、共有データ61-65を適宜利用しながら、所定の機能を実現する。図4は、分析対象プログラム50のソースコード21分析対象ソースコードの基本動作を模式的に示す。通常の場合、情報制御システムは、入力データを受け取り、その内容をチェックし、制御対象が適切に動作するように出力データを作成するという、基本動作を有する。図4では、入力データを複数回チェックして、それぞれ出力データを作成している。基本動作に着目することにより、ソースコード21に含まれているロジック処理とデータアクセス処理とを分離可能である。例えば、ロジック処理は、基本的に、if文またはswitch文のような、条件文を組み合わせて構成される。図4の例では、入力データをチェックする部分がロジック処理である。条件文の中では、入力となるデータアクセス部からのデータを参照する。また、出力部では、データアクセス部に対して出力値を設定する。制御プログラムの有する基本的構成に鑑みると、ロジック処理とデータアクセス処理との境界部分は、条件文の条件部または代入文の左辺に現れる。データアクセス処理からロジック処理に移る入力側境界は、if文またはswitch文など条件文または所定の関数で検出可能である。所定の関数としては、例えば、2つのメモリ値を比較する関数、2つの時間を比較する関数などを挙げることができる。それらの関数による比較結果を条件文の条件部にて評価する。それらの関数についても、条件文と同様に扱うものとする。一方、ロジック処理からデータアクセス処理に移る出力側境界は、代入文または所定の関数で検出可能である。所定の関数としては、例えば、メモリコピー関数のように代入文を使わずに値をセットすることができる関数を挙げることができる。それらの関数についても、代入文と同様に扱うものとする。図5は、共有メモリデータ61-65の情報を管理する共有メモリ情報22である。共有メモリデータは、分析対象プログラムにより利用される。共有メモリ情報22は、例えば、データ名221と、共有メモリ変数名222と、プライマリキー図中PK223と、属性名224と、属性メンバ名225とを保持している。データ名221は、データ種別を示す情報である。共有メモリ変数名222は、共有メモリにアクセスするときに使用する変数の名称である。プライマリキー223は、データ種別ごとに共有メモリ上のデータに一意にアクセスするための情報である。属性名224とは、データの属性を示す。属性メンバ名225とは、属性にアクセスするときのメンバ名である。共有メモリ上のデータにアクセスする場合には、例えば、図2のソースコード21の2行目に示すように、変数名222に示す変数名TrainArrayを利用する。さらに、そのデータの属性にアクセスする場合には、図2のソースコード21の3行目に示すように、メンバ名225で示したTrainId及びStationIdを利用する。変数名により共有メモリを特定する場合を説明したが、これに代えて、共有メモリ上のデータのアドレスを取得するためのGetSharedMemoryTYPE_TRAINtrainIdまたはGetTraintrainIdなどのアクセス関数を用意し、そのアクセス関数を介して共有メモリ上のデータにアクセスしても良い。GetSharedMemoryは、データを識別するIDとPKを引数にとり、その引数に対応する共有メモリ上のデータを返す関数である。GetTrainは、共有メモリ上の列車情報を取得する専用の関数であり、PKである列車番号を引数にとり、その引数に対応する共有メモリ上の列車情報を返す。このような関数を用いる場合、図4の共有メモリ情報22は、データを識別するID、および、アクセス関数の名前を保持する。図6は、ソースコード21に出現するデータとそのデータの分類とを示す、データ種別情報23の構成例である。データ種別情報23は、図7で後述する分離処理により抽出された処理がロジック処理であるか、それともデータアクセス処理であるかを判別するために使用される。ソースコード21に出現するデータの種別としては、制御対象ID231と、共有メモリのデータ232と、定数値配列インデックス233と、定数値配列インデックス除く234と、繰り返し文インデックス235とがある。一時的に利用するローカル変数は、データ種別に含めない。制御対象ID231は、引数として与えられる制御対象を識別するための識別子である。定数値233は、配列のインデックスとして使用する定数値である。定数値234は、配列インデックス以外として使用する定数値である。繰り返し文インデックス235は、for文などの繰返文のインデックスである。制御対象ID231と、共有メモリ上のデータ232と、配列のインデックスとして使用する定数値233と、繰り返し文のインデックス235とは、データアクセス処理として分類される。配列インデックス以外に使用される定数値234は、ロジック処理として分類される。図7は、分析プログラム31が実行する分離処理を示すフローチャートである。分離処理では、以下に述べるように、分析対象プログラムのソースコード21を、ロジック処理を記述するコードとデータアクセス処理を記述するコードとに分離する。分析プログラム31は、分析対象プログラムのソースコード21及び共有メモリ情報22を入力とし、ユーザからの指示で起動する。分析プログラム31は、CPU12に読み込まれて実行されることで、分離処理を実現する。CPU12は、プログラム分析装置1の頭脳である。従って、分離処理の動作の主体は、分析プログラム、CPU、プログラム分析装置のいずれでもよい。ここでは、分析プログラムを主語として説明する。本実施形態では、ソースコードを構成する構文要素としてノードという概念を使用する。ノードとは、ソースコード中の代入文もしくは関数呼出文などの文、または、条件文もしくは繰返文の条件部などの命令を示す。また、特殊なノードとして、関数の引数に対応するノード、関数の戻り値に対応するノード、共有メモリ上の変数に対応するノードがある。ノードは、ノードを一意に識別するノードIDを持つ。ここでは、文および条件部について、S行番号をノードIDとして設定する。関数の引数に対応するノードには、関数名_pin引数名をノードIDとして設定する。関数の戻り値に対応するノードには、関数名_exitをノードIDとして設定する。共有メモリ上の変数に対応するノードには、gin_変数名をノードIDとして設定する。まず最初に、分析プログラム31は、ロジック処理とデータアクセス処理の境界となる箇所の候補を抽出するS100。抽出された境界候補情報は、図8に示す境界候補情報24に登録される。図8を参照する。境界候補情報24は、例えば、ノードID24aと、変数名24bと、分類24cと、可否フラグ24dと、データアクセスコード24eと、用語名24fとを管理する。ノードID24aは、境界候補が現れる、ソースコード上の位置を示す。変数名24bは、境界候補で直接参照している変数の名を示す。分類24cは、境界候補が入力側の境界候補であるか、それとも出力側の境界候補であるかの種別を示す。可否フラグ24dは、境界候補を、ロジック処理とデータアクセス処理の境界として判定したか否かを示す。データアクセスコード24eは、境界候補を境界と判定した場合に、境界候補から呼び出すデータアクセスに対応する。用語名24fは、境界でのデータアクセスを識別するための情報であり、データアクセス用情報の一例である。図4で示したように、ロジック処理とデータアクセス処理の境界は、条件文の条件部及び代入文に現れる。境界を検出するために、分析プログラム31は、図2のソースコード21の中から、条件文の条件部で参照している箇所と、ローカル変数以外に代入されている代入文の箇所とを、境界候補としてリストアップする。図7のS100では、境界候補情報24のうち、ノードID24a及び変数名24bを登録する。例えば、図2のソースコード21の12行目では、条件文の中でtime1を参照している。従って、分析プログラム31は、境界候補情報24に、境界候補241ノードID:S12、変数名:time1、分類:入力を登録する。図2のソースコード21の15行目では、変数signal1.Controlに値を設定している。そこで、分析プログラム31は、境界候補244ノードID:S15、変数名:signal1.Control、分類:出力を境界候補情報24に登録する。分析プログラム31は、分析対象プログラムのソースコード21を、データ依存及び処理依存について分析するS101。調査された依存関係は、図9の依存関係情報25に登録される。図9を参照する。依存関係情報25は、例えば、始点ID25aと、終点ID25bと、依存関係25cと、変数名25dとを管理する。始点ID25aは、依存関係の始点となるノードを識別する情報である。終点ID25bは、依存関係の終点となるノードを識別する情報である。依存関係25cは、依存関係の種別を示す情報である。依存関係の種別には、データ依存と、処理依存がある。変数名25dは、データ依存の場合に依存関係を成り立たせる変数の名前である。データ依存は、変数を宣言する部分からその変数を参照する部分への依存関係である。例えば、図2のソースコード21の2行目で宣言している変数train1を、3行目で参照している。従って、分析プログラム31は、依存関係情報25に、データ依存253始点ID:S2、終点ID:S3、依存関係:データ依存、変数名:train1を登録する。図2のソースコード21の1行目で、関数Checkの引数trainIdは、2行目で参照しているため、依存関係情報25にデータ依存251始点ID:CheckpintrainId、終点ID:S2、依存関係:データ依存、変数名:trainIdを登録する。図2のソースコード21の2行目では、図5の共有メモリ情報22の22aで宣言している共有メモリTrainArrayを参照している。そこで、依存関係情報25には、データ依存関係252始点ID:gin_TrainArray、終点ID:S2、依存関係:データ依存、変数名:TrainArrayが登録される。図2のソースコード21の33行目では、関数CheckSignalに対してreturnを返している。この場合には、依存関係情報25に、データ依存関係257始点ID:S33、終点ID:CheckSignal_exit、依存関係:データ依存、変数名:-が登録される。図2のソースコード21の13行目では、関数CheckSignalを実行して、戻り値を参照している。この場合には、依存関係情報25に、データ依存関係258始点ID:CheckSignal_exit、終点ID:S13、依存関係:データ依存、変数名:-を登録する。処理依存は、制御構文における依存関係である。制御構文には、条件文と繰り返し文とがある。条件文には、例えば、if文、switch文がある。繰り返し文には、while文、for文がある。条件文では、条件部から、条件成立時または不成立時に実行される文への制御依存ができる。繰返文では、条件部から、繰り返し実行される文への制御依存ができる。例えば、図2のソースコード21の12行目の条件部が成立したとき、13行目の文が実行される。従って、依存関係情報25に、処理依存259始点ID:S12、終点ID:S13、依存関係:処理依存、変数名:-が登録される。このように依存関係分析をした結果を纏めると、図2のソースコード21について、図10に示すプログラム依存グラフPDG:ProgramDependenceGraph24pgを作成できる。プログラム依存グラフは、ソースコード21上の各ノードを、データ依存を示す線図10中の実線矢印、または、処理依存を示す線図10中の点線矢印で結びつけたものである。図7に戻る。分析プログラム31は、S103からS106までのステップを、S100で抽出した境界候補ごとに実行するS102。分析プログラム31は、境界候補情報24に対して、依存関係情報25に登録されたデータ依存を参照する。これにより、分析プログラム31は、境界候補となる変数名とデータ依存関係にある、ノード群を抽出するS103。分析プログラム31は、まず、境界候補を基準として、終点IDと変数名が基準と合致するデータ依存を検索する。見つかった場合、そのデータ依存の始点IDと合致するデータ依存を検索する。複数のデータ依存が見つかった場合には、見つかったデータ依存それぞれに対して実行する。これらの処理を、新たなデータ依存が見つからなくなるまで繰り返す。例えば、境界候補情報24の境界候補241文ID:S12、変数名:time1を基準として、図9の依存関係情報25からデータ依存関係を検索すると、データ依存256始点ID:S4、終点ID:S12、変数名:time1が見つかる。見つかったデータ依存256の始点ID:S4を終点に持つデータ依存関係を検索すると、データ依存255始点ID:S3、終点ID:S4、変数名:table1が見つかる。さらに、見つかったデータ依存255の始点ID:S3を終点に持つデータ依存を検索すると、データ依存253とデータ依存254が見つかる。上述の処理を新たなデータ依存が見つからなくなるまで続けることにより、データ依存として、251、252、253、254、255、256が見つかる。また、データ依存に関係するノードとして、CheckpintrainId、gin_TrainArray、gin_TimetableArray、S2、S3、S4が見つかる。これらのデータ依存を纏めると、図11aのようなデータ依存グラフ241dgを得る。図11aのデータ依存グラフ241dgは、図10のプログラム依存グラフ24pgのサブグラフとなる。他の境界候補情報24に対しても、同様に実行する。例えば、境界情報243に対するデータ依存を纏めると、図11bのようなデータ依存グラフ243dgとなる。図7に戻る。分析プログラム31は、図10のデータ種別情報23を用いることで、S103で抽出した処理がデータアクセス処理であるか否かを判定するS104。S103で抽出したデータ依存グラフは、データ依存の流入のないノードの中でデータを宣言している。分析プログラム31は、宣言しているデータの種類に基づいて、ロジック処理であるかデータアクセス処理であるかを判別する。例えば、図11aに示す境界候補241についてのデータ依存グラフ241dgにおいて、データ依存の流入のないノードは、CheckpintrainId、gin_TrainArray、gin_TimetableArrayである。関数Checkは、分析対象プログラムの基底となる関数である。関数Checkの引数であるtrainIdは、制御対象を示す。従って、CheckpintrainIdで定義するtrainIdは、制御対象情報である。図6のデータ種別情報23を参照すると、制御対象ID231に示すように、制御対象情報はデータアクセスであると定義されている。また、gin_TrainArray及びgin_TimetableArrayは、共有メモリ上のデータである。図6のデータ種別情報23を参照すると、共有メモリ232はデータアクセスであると定義されている。データ依存の流入のない全てのノードがデータアクセスと定義されているため、分析プログラム31は、境界情報241を基準とする処理を、データアクセス処理であると判別する。分析プログラム31は、図8の境界候補241の可否フラグ24dにOKを設定し、S105に進む。一方、図11bに示す境界候補243についてのデータ依存グラフ243dgにおいて、データ依存の流入のないノードは、CheckpintrainId、S33、S35である。CheckpintrainIdは、上記のようにデータアクセスに分類される。これに対し、S33は、図2の33行目に示すように、定数OKを参照している。S35は、図2の35行目に示すように、定数NGを参照している。図6のデータ種別情報23を参照すると、配列インデックスではない定数値234は、ロジックであると定義されている。分析プログラム31は、データ依存の流入のないノードの一部S33,S35にロジックと定義されるものが含まれているため、境界情報243を基点とする処理はロジック処理であると判別するS104:NO。分析プログラム31は、図8の境界候補243の可否フラグ24dにNGを設定した後、次の境界候補についてデータアクセスであるか否かを判定するS103,S104。分析プログラム31は、S104で可否フラグ24dがOKとなった境界候補情報24について、依存関係情報25の依存関係25cを参照し、境界候補となる変数にアクセスするためのデータアクセス処理を抽出するS105。分析プログラム31は、まず、境界候補を基準として、終点IDと変数名が基準と合致する、データ依存の依存情報を検索する。見つかった場合、分析プログラム31は、その依存情報の始点IDと合致する、データ依存及び処理依存を検索する。複数のデータ依存及び処理依存が見つかった場合、見つかったデータ依存及び処理依存のそれぞれに対して実行する。これを新たな依存情報が見つからなくなるまで繰り返す。例えば、境界候補241に対して、依存関係の検索を進めると、図12aのプログラム依存グラフ241pgができる。プログラム依存グラフ241pgは、ノードCheckpintrainId、gin_TrainArray、gin_TimetableArray、S2、S3、S4を含む。図2のソースコード21から、境界候補241のノードS4を除く、見つかった全てのノードに対する命令だけを抽出すると、図13aのデータアクセス処理261を得られる。プログラム依存グラフ241pgでは、データ依存の流入のない引数として、制御対象情報である列車の列車IDを取る。従って、抽出されたデータアクセス処理261は、引数として列車IDを取る。さらに、境界候補241の分類24cは入力である。また、境界候補241の変数名24bに設定されているtime1の型は、Timeである。従って、データアクセス処理261の戻り値の型は、Timeとなる。分析プログラム31は、抽出したデータアクセス処理261について、図8の境界候補241のデータアクセスコード24eに261を登録する。また、境界候補244に対して、依存関係の検索を進めると、図12bのプログラム依存グラフ244pgができる。プログラム依存グラフ244pgは、ノードCheckpintrainId、gin_TrainArray、gin_RouteArray、gin_SignalArray、S2、S10、S11、S15を含む。境界候補241のノードS15を除く、見つかった他の全てのノードに対する命令だけを抽出すると、図13cのデータアクセス処理264を得る。プログラム依存グラフ244pgでは、データ依存の流入のない引数として、制御対象情報である列車の列車IDを取る。従って、抽出されたデータアクセス264は、引数として列車IDを取る。さらに、境界候補244は、その分類24cが出力であるため、出力値を引数に持つ。なお、S107により抽出したデータアクセス処理は、同一のコードがプログラムの他の部分にも出現し、重複したコードとなっている場合がある。そこで、抽出したデータアクセス処理間を比較することにより、同一の処理であるかを判定する。判定は、例えば、抽出したプログラム依存グラフで、ローカル変数名を除いて同一のグラフとなっているかで判定する。同一処理であると判定した場合には、図8の境界候補情報24のデータアクセスコード24eを1つに集約する。これにより、重複したデータアクセス処理を取り除くことができる。同様にして、境界候補242に対しては、図13bのデータアクセス処理262を得る。境界候補245に対しては、図13dのデータアクセス処理265を得る。境界候補246に対しては、図13eのデータアクセス処理266を得る。分析プログラム31は、S105で抽出された各データアクセス処理について、データアクセス処理を識別するための用語名24fを設定するS106。分析プログラム31は、データアクセス処理内で参照される、共有メモリのデータ名及び属性名から、用語名24fを作成する。例えば、図11aの境界候補241に対するデータ依存グラフ241dgを参照すると、制御対象情報である列車IDから処理が始まることがわかる。ノードS2において、共有メモリTrainArrayにアクセスしているため、分析プログラム31は、図5の共有メモリ情報22の22aからデータ名列車を取得する。次に、ノードS3では、共有メモリTimetableArrayにアクセスしているため、分析プログラム31は、図5の共有メモリ情報22の22cから、データ名ダイヤを取得する。さらに、ノードS4では、共有メモリTimetableArrayの属性StartTimeにアクセスしているため、分析プログラム31は、図5の共有メモリ情報22の22c3の属性名出発予定時刻を取得する。取得した名称を纏めることにより、分析プログラム31は、境界候補241に対するデータアクセス処理の用語名として列車ダイヤ出発予定時刻を生成する。分析プログラム31は、図8の境界候補情報24のうち境界候補241に対応する用語名24fに、列車ダイヤ出発予定時刻を登録するS106。分析プログラム31は、他のデータアクセス処理についても、前記同様に用語名を生成し、図8の境界候補情報24の用語名24fに登録する。分析プログラム31は、ソースコード21から、S105で抽出したデータアクセス処理を取り除くことで、ロジック処理を抽出するS107。分析プログラム31は、可否フラグ24dがOKに設定された境界候補情報24について、ソースコード21を、入力となる部分をGetTermに、出力となる部分をSetTermに置き換える。分析プログラム31は、GetTermの第1引数に、データアクセスを識別する用語名を設定する。分析プログラム31は、それ以降の引数に、データアクセスで参照する制御対象情報、または、繰返文インデックスを指定する。例えば、境界候補241は、GetTerm列車ダイヤ出発予定時刻,trainIdとなる。分析プログラム31は、SetTermの第1引数に、データアクセス処理を識別する用語名を指定する。第2引数には、設定値が指定される。第3以降の引数には、データアクセス処理で参照する制御対象情報、または、繰返文インデックスが指定される。例えば、境界候補243は、SetTerm列車進路信号機制御情報,OK,trainIdとなる。次に、分析プログラム31は、ソースコード21に存在する文から、S105で抽出したデータアクセス処理に含まれる文を取り除く。例えば、図2のソースコード21の2行目、3行目、4行目は、境界候補241のデータアクセス処理に含まれるため、分析プログラム31は、2~4行目をソースコード21から取り除く。この結果、図15に示すように、ロジック処理だけが残ったソースコードが得られる。分析プログラム31は、ロジック処理とデータアクセス処理の分離結果を、出力部15に表示するS108。図16は、分析対象プログラムのソースコード21を分析した結果を表示する分析結果画面4を示す。分析結果画面4は、例えば、ロジック表示部41と、データアクセスリスト表示部42と、データアクセス詳細表示部43とを備える。ロジック表示部41は、ソースコード21から抽出されたロジック処理を表示する。データアクセスリスト表示部42は、ソースコード21から抽出されたデータアクセス処理のリストとして、境界候補情報24の情報の少なくとも一部例えば、用語名等が表示される。リスト表示部42で選択されたデータアクセス処理の詳細は、詳細表示部43に表示される。このように構成される本実施形態によれば、入力データ及び出力データが不明確なコンピュータプログラムであっても、ロジック処理とデータアクセス処理とに分離することができる。さらに、重複したデータアクセスコードを取り除くことができる。従って、プログラムの構成を理解し易くなり、かつ、プログラムの修正時にはロジック処理に集中して作業すればよい。さらに、データアクセス処理とロジック処理とを分離できるため、間違えてデータアクセス処理を修正したりすることを防止できる。それらの結果として、本実施形態では、保守性の高いソースコードを自動的に生成することができる。なお、本発明は、上述した実施形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。本実施形態では、分析プログラム31は、データアクセス処理に対して、用語名を設定したS106。データアクセス処理を一意に識別できればよいので、用語名に代えて、例えば、連続値等の任意の識別子をデータアクセス処理に設定しても良い。また、分析結果画面4のリスト表示部42において、ユーザが用語名を変更できるようにしてもよい。さらに、分析結果画面4のリスト表示部42において、ユーザが、データアクセス処理の可否を変更できるようにしてもよい。これにより、ユーザは、例えば、データアクセス処理であると自動判定されたものをロジック処理に変更したり、逆に、ロジック処理であると自動判定したものをデータアクセス処理に変更したりできる。この結果、ユーザは、ロジック処理とデータアクセス処理との分離を手動で調整できる。分析プログラム31は、先に、ソースコード21全体のデータ依存及び処理依存を分析しS101、その後のステップで依存種別を参照する場合を説明した。これに代えて、依存関係情報が必要となるステップで、関係する依存関係のみを分析する構成としても良い。本実施形態は、以下のように表現することもできる。ロジックとデータアクセスが混在したプログラムを、ロジックとデータアクセスに分離するソースコード解析装置であって、前記プログラムのソースコードを入力として受け取り、前記ソースコードの条件文の条件部と代入文とを検索して、前記条件文の条件部を入力側の境界候補として抽出し、前記代入文を出力側の境界候補として抽出し、抽出された前記境界候補を基準として、データ依存関係のある処理群を抽出し、抽出された前記処理群が参照するデータ種別に基づいて、データアクセスであるかを判定し、データアクセスであると判定した前記境界候補を基準として、データ依存関係または処理依存関係を分析し、依存関係のある処理をデータアクセスとして抽出し、抽出した前記データアクセスを前記ソースコードから取り除き、前記データアクセスを呼び出すように所定の情報に置き換えたコードをロジックとして抽出し、抽出した前記ロジックと抽出した前記データアクセスとを、解析結果として出力する、ソースコード解析装置。"