(57)【要約】【課題】鉄道運行管理用のソフトウェア開発に流用しやすいコード部品を抽出する。【解決手段】繰返し構文のネスト関係を解析し、ネストの深さ、開始行番号、終了行番号を抽出する（ステップＳ１５０２）。次に、繰返し文が制御のために使用している変数から、抽出対象が駅、列車、機器のいずれかを特定する（ステップＳ１５０３）。そして、開始行番号から終了行番号までの範囲において、ログ関数の出現するログ関数出現行番号を、ネストの深さの深いものから探索して、ログ出現行番号が重複しないようにしつつ、前記範囲に関連付けを行う（ステップＳ１５０５）。そして、駅、列車、機器の順に、開始行番号から終了行番号までの範囲のソースコードを切り出した（ステップＳ１５０６）後、その切り出したソースコードに対して、先頭行からログ関数出現行番号までを切り出して（ステップＳ１５０７）、ソフトウェア資産（コード部品）とする。【選択図】図１５
2011215978.tif 000002
【特許請求の範囲】
【請求項１】
鉄道運行管理で用いられているソースコードから断片化したコード部品を抽出するソフトウェア資産抽出支援装置であって、
ソースコード内の繰返し構文のネスト関係を解析し、ネストの階層と、該ネストの範囲を表す開始行番号および終了行番号と、を抽出し、記憶部に記憶する手段と、
ソースコード内の変数の値を出力するログ関数の出現する行番号を示すログ関数出現行番号を抽出し、前記記憶部に記憶する手段と、
前記記憶部から前記ネストの範囲および前記ログ関数出現行番号を読み出し、前記ネストの階層の下位から上位へ順に前記ネストの範囲に含まれる前記ログ関数出現行番号を検出する際に先に検出された前記ログ関数出現行番号を検出対象から除外しつつ、前記ネストの範囲に含まれる前記ログ関数出現行番号を検出する手段と、
検出した前記ログ関数出現行番号と当該ネストの範囲とを関連付ける手段と、
前記ネストの階層の下位から上位へ順に、前記ソースコードを、前記ネストの範囲の先頭行から、当該ネストの範囲に関連付けられたログ関数出現行番号までを切り出して、断片化したコード部品を抽出する手段と、
を備えることを特徴とするソフトウェア資産抽出支援装置。
【請求項２】
前記ネストの階層は、前記ネストの範囲に含まれる行数の小さいものほど下位とする
ことを特徴とする請求項１に記載のソフトウェア資産抽出支援装置。
【請求項３】
鉄道運行管理で用いられているソースコードから断片化したコード部品を抽出するソフトウェア資産抽出支援装置であって、
ソースコード内の繰返し構文のネスト関係を解析し、ネストの階層と、該ネストの範囲を表す開始行番号および終了行番号と、を抽出し、記憶部に記憶する手段と、
ソースコード内の変数の値を出力するログ関数の出現する行番号を示すログ関数出現行番号を抽出し、前記記憶部に記憶する手段と、
前記記憶部から前記ネストの範囲および前記ログ関数出現行番号を読み出し、前記ネストの階層の下位から上位へ順に前記ネストの範囲に含まれる前記ログ関数出現行番号を検出する際に先に検出された前記ログ関数出現行番号を検出対象から除外しつつ、前記ネストの範囲に含まれる前記ログ関数出現行番号を検出する手段と、
検出した前記ログ関数出現行番号と当該ネストの範囲とを関連付ける手段と、
前記ネストの範囲の先頭行となる繰返し文において制御のために使用している変数が、駅、列車、および機器のいずれの抽出対象に関するものかを判定し、前記ネストの範囲と前記抽出対象とを関連付ける手段と、
前記抽出対象について機器、列車、駅の順に、前記ソースコードを、前記ネストの範囲の先頭行から、当該ネストの範囲に関連付けられたログ関数出現行番号までを切り出して、断片化したコード部品を抽出する手段と、
を備えることを特徴とするソフトウェア資産抽出支援装置。
【請求項４】
鉄道運行管理で用いられているソースコードから断片化したコード部品を抽出するソフトウェア資産抽出支援装置であって、
ソースコード内の繰返し構文のネスト関係を解析し、ネストの階層と、該ネストの範囲を表す開始行番号および終了行番号と、を抽出し、記憶部に記憶する手段と、
ソースコード内の変数の値を出力するログ関数の出現する行番号を示すログ関数出現行番号を抽出し、前記記憶部に記憶する手段と、
前記記憶部から前記ネストの範囲および前記ログ関数出現行番号を読み出し、前記ネストの階層の下位から上位へ順に前記ネストの範囲に含まれる前記ログ関数出現行番号を検出する際に先に検出された前記ログ関数出現行番号を検出対象から除外しつつ、前記ネストの範囲に含まれる前記ログ関数出現行番号を検出する手段と、
検出した前記ログ関数出現行番号と当該ネストの範囲とを関連付ける手段と、
前記ネストの範囲の先頭行となる繰返し文において制御のために使用している変数が、駅、列車、および機器のいずれの抽出対象に関するものかを判定し、前記ネストの範囲と前記抽出対象とを関連付ける手段と、
前記抽出対象について駅、列車、機器の順に、前記ソースコードを、前記ネストの範囲の先頭行から、当該ネストの範囲に関連付けられたログ関数出現行番号までを切り出して、断片化したコード部品を抽出する抽出手段と、
を備えることを特徴とするソフトウェア資産抽出支援装置。
【請求項５】
前記抽出手段において、
前記抽出対象が列車の前記ネストの範囲が、前記抽出対象が駅の前記ネストの範囲に含まれる場合、当該抽出対象が駅の前記ネストの範囲について切り出されたコード部品から、当該抽出対象が列車の前記ネストの範囲を切り出して、切り出した当該抽出対象が列車の前記ネストの範囲の先頭行から、当該ネストの範囲に関連付けられたログ関数出現行番号までを切り出して、断片化したコード部品を抽出する
ことを特徴とする請求項４に記載のソフトウェア資産抽出支援装置。
【請求項６】
前記抽出手段において、
前記抽出対象が機器の前記ネストの範囲が、前記抽出対象が駅の前記ネストの範囲に含まれる場合、当該抽出対象が駅の前記ネストの範囲について切り出されたコード部品から、当該抽出対象が機器の前記ネストの範囲を切り出して、切り出した当該抽出対象が機器の前記ネストの範囲の先頭行から、当該ネストの範囲に関連付けられたログ関数出現行番号までを切り出して、断片化したコード部品を抽出する
ことを特徴とする請求項４に記載のソフトウェア資産抽出支援装置。
【請求項７】
前記抽出手段において、
前記抽出対象が機器の前記ネストの範囲が、前記抽出対象が列車の前記ネストの範囲に含まれる場合、当該抽出対象が列車の前記ネストの範囲について切り出されたコード部品から、当該抽出対象が機器の前記ネストの範囲を切り出して、切り出した当該抽出対象が機器の前記ネストの範囲の先頭行から、当該ネストの範囲に関連付けられたログ関数出現行番号までを切り出して、断片化したコード部品を抽出する
ことを特徴とする請求項４または請求項５に記載のソフトウェア資産抽出支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、鉄道運行管理のためのソフトウェアを対象とし、ブラックボックス化したソースコードから流用可能なコード部品を抽出する技術に関する。
【背景技術】
【０００２】
鉄道運行管理のためのソフトウェアは、一旦運用され始めると、１０年〜１５年の間は、既存のソースコードにはほとんど手を入れずに、改造する部分のソースコードを新たに継ぎ足すようにして開発されていく。これは、既存のソースコードに手を入れて、動作が不安定になるリスクを低くするため、および、開発期間の短縮のために用いられる開発手法の一つである。しかし、１０年〜１５年が経過すると、そのソフトウェアの開発に係わった担当者が少なくなって、ソフトウェア全体を俯瞰できなくなり、ブラックボックス化したソースコードになってしまうことになる。
【０００３】
そのため、従来技術として、ソフトウェアの再利用のために、既存のソフトウェアのソースコードを部品化する技術が開示されている（特許文献１）。具体的には、ソースコード内のデータ入出力と制御構造に着目してコード部品（コード断片）を切り出す方法が用いられている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１３４４４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載の方法を、鉄道運行管理のためのソフトウェアに適用すると、コード部品が、プログラム言語に備えられている関数のレベルにまで小さくなりすぎてしまうという問題がある。すなわち、コード部品が小さくなりすぎると、そのコード部品の処理内容が分からなくなってしまい、かえって利用しにくくなってしまう。なお、鉄道運行管理では、駅、列車、機器の順に制御が行われているという特徴がある。例えば、駅ごとに列車の発着管理の処理が行われることが多く、また、列車ごとに信号機のような機器の操作が行われることが多い。そのような特徴を、特許文献１に記載の方法では、用いることができない。
【０００６】
そこで、本発明では、鉄道運行管理用のソフトウェア開発のために流用しやすいコード部品を抽出することを課題とする。
【課題を解決するための手段】
【０００７】
前記課題を解決するために、ソフトウェア資産抽出支援装置は、ソースコードに対して、繰返し構文のネスト関係を解析し、ネストの深さ、開始行番号、終了行番号を抽出する。ネストの深さの深いものから順に、抽出した開始行番号から終了行番号までの範囲において、ログ関数の出現するログ出現行番号を探索する。なお、前記探索処理では、ログ出現行番号が異なるネスト間で重複しないようにしつつ、ログ出現行番号をいずれかの前記範囲に関連付ける。そして、開始行番号からログ出現行番号までを切り出して、ソフトウェア資産（コード部品）を抽出する。ここで、ログ関数とは、ひとまとまりの処理を実行した後で、その処理の評価を行うために、エラーの出力や処理履歴を出力する関数である。
【発明の効果】
【０００８】
本発明によれば、鉄道運行管理用のソフトウェア開発のために流用しやすいコード部品を抽出することができる。
【図面の簡単な説明】
【０００９】
【図１】ソースコードの一例を示す図である。
【図２】本実施形態におけるソフトウェア資産抽出支援装置の一例を示す図である。
【図３】ログ関数リストファイルの一例を示す図である。
【図４】抽出形式ファイルの一例を示す図である。
【図５】入力画面の一例を示す図である。
【図６】出力画面の一例を示す図である。
【図７】ジョブ管理ＤＢの一例を示す図である。
【図８】抽出形式ＤＢの一例を示す図である。
【図９】ログ検索結果ＤＢの一例を示す図である。
【図１０】ネスト解析結果ＤＢの一例を示す図である。
【図１１】解析結果管理ＤＢの一例を示す図である。
【図１２】制御部の処理フロー（その１）の一例を示す図である。
【図１３】制御部の処理フロー（その２）の一例を示す図である。
【図１４】データ登録部の処理フローの一例を示す図である。
【図１５】資産抽出部の処理フローの一例を示す図である。
【図１６】画面生成部の処理フローの一例を示す図である。
【発明を実施するための形態】
【００１０】
次に、本発明を実施するための形態（以降、「本実施形態」と称す）について、適宜図面を参照しながら詳細に説明する。
【００１１】
（フレームワーク）
はじめに、鉄道運行管理で用いられるソースコードの特徴について、図１を用いて説明する。図１には、鉄道運行管理のためのソースコードの一例を示す。鉄道運行管理のためのソースコードにおいては、駅、列車、機器という順序で制御が行われる場合が多い。そのため、繰返し構文ｆｏｒ（１，８，１５行目）が多く出てくる。
また、繰返し構文のループの中に、ログ関数ｌｏｇｏｕｔが出てくる（４，１１，１８，２４行目）。ログ関数は、ひとまとまりの処理を実行した後で、その処理の評価を行うために、エラーの出力や処理履歴を出力する。そのため、ログ関数の出現箇所が一つの処理の区切りと考えられるので、ログ関数を、コード部品を抽出する基点とする。
また、抽出対象ロジック（２，９，１６，２２行目）は、繰返し構文の中で、演算対象（ｓｔｎ，ｔｒｎ，ｄｅｖ）を次々に変えながら、似たような処理を実行している部分であり、ソフトウェア資産として有効になると考えられる。したがって、抽出対象ロジックを、ソフトウェア資産として抽出するターゲットとする。
また、資産抽出では、抽出対象が繰返し構文とログ関数との間に存在していることを利用する。
なお、図１中のかぎ型矢印は、切り出し対象の範囲を表しているが、この範囲の決定処理については後記する。
このように、本実施形態では、繰返し構文やログ関数等の特徴を利用することによって、鉄道運行管理のためのソースコードからコード部品を抽出することとする。
【００１２】
（ソフトウェア資産抽出支援装置）
次に、コード部品を抽出するソフトウェア資産抽出支援装置の構成について、図２を用いて説明する。図２に示すように、ソフトウェア資産抽出支援装置１は、処理部１１、記憶部１２、入力Ｉ／Ｆ（インタフェース）１３、および出力Ｉ／Ｆ（インタフェース）１４を備える。入力装置２は、例えば、キーボードやマウスやタッチパネル等の入力デバイスであり、入力Ｉ／Ｆ１３を介して、処理部１１における処理に用いる情報を送信する。出力装置３は、例えば、ディスプレイであって、出力Ｉ／Ｆ１４を介して、処理結果を受信し、入力装置２の操作者にその処理結果を画面表示する。なお、図示していないが、ソフトウェア資産抽出支援装置１は、ソースコードや資産抽出処理に用いる情報を記憶するＨＤＤ（Hard Disk Drive）等の大容量記憶装置と接続するためのインタフェースや、ソースコードや資産抽出処理に用いる情報を管理しているサーバ等とネットワークを介して接続するためのインタフェースを備えていてもよい。
【００１３】
処理部１１は、コンピュータのＣＰＵとメインメモリとで構成され、記憶部１２に格納されているアプリケーションプログラムをメインメモリに展開して、制御部１１１、データ登録部１１２、ソースコード連結実行部１１３、ログ関数検索部１１４、資産抽出部１１５、および画面生成部１１６を具現化する。
【００１４】
制御部１１１は、入力装置２から入力された情報を、入力Ｉ／Ｆ１３を介して受信する。受信する情報は、例えば、処理対象とするソースコードを格納しているファイル名、ログ関数リストを格納しているファイル名、抽出形式を格納しているファイル名、ソフトウェア資産の抽出対象名、および出力先のファイル名である。なお、「ログ関数リスト」、「抽出形式」、「抽出対象」の語の意味については、後記する。そして、制御部１１１は、受信した情報を記憶部１２のジョブ管理ＤＢ１２１に格納する。また、制御部１１１は、入力装置２から資産抽出処理の実行開始を指示する実行開始指示情報を受信したとき、処理部１１の各部１１２〜１１６へ処理の実行指示を出力し、それらを制御する。
【００１５】
データ登録部１１２は、制御部１１１から処理の実行指示を受信したとき、ジョブ管理ＤＢ１２１から処理対象とするソースコードを格納しているファイル名、ログ関数リストを格納しているファイル名、抽出形式を格納しているファイル名を読み出して、ソースコード、ログ関数リスト、抽出形式の実データを取得する。そして、データ登録部１１２は、取得したデータを、それぞれ、記憶部１２のログ関数リストＤＢ１２２、抽出形式ＤＢ１２３、ソースコードＤＢ１２４に格納する。
【００１６】
ソースコード連結実行部１１３は、制御部１１１から処理の実行指示を受信したとき、メインプログラムから呼び出すサブ関数が、メインプログラムを格納しているファイルとは別のファイルに格納されていることが分かったとき、そのサブ関数をメインプログラムにインライン展開して、一つのソースコードに生成する。そして、ソースコード連結実行部１１３は、生成したソースコードをソースコードＤＢ１２４に格納する。
【００１７】
ログ関数検索部１１４は、制御部１１１から処理の実行指示を受信したとき、ログ関数リストＤＢ１２２からログ関数リストを読み出し、ソースコードＤＢ１２４からソースコードを読み出して、ログ関数リストに記述されたログ関数のそれぞれについてソースコードを検索する。そして、ログ関数検索部１１４は、ログ関数の名称ごとに、ソースコードの何行目に出現しているかを検索し、出現行番号情報をログ検索結果ＤＢ１２５に格納する。
【００１８】
資産抽出部１１５は、制御部１１１から処理の実行指示を受信したとき、ソースコードＤＢ１２４からソースコードを読み出し、繰返し構文のネスト関係を抽出し、ネスト解析結果ＤＢ１２６に格納する。そして、資産抽出部１１５は、ネスト解析結果ＤＢ１２６、抽出形式ＤＢ１２３およびログ検索結果ＤＢ１２５に格納された情報を参照して、ソフトウェア資産（コード部品）を抽出し、解析結果管理ＤＢ１２７に格納する。
【００１９】
画面生成部１１６は、制御部１１１から処理の実行指示を受信したとき、解析結果管理ＤＢ１２７を参照し、出力装置３に表示する出力画像を生成する。
【００２０】
記憶部１２は、ＯＳ（Operating System）等の基本プログラムや基本データを格納するための不揮発性記憶装置（不図示）、資産抽出処理実行時の処理領域やソースコードや演算結果のデータ等を一時的に格納する領域として使用する揮発性記憶装置（不図示）、ＨＤＤ（Hard Disk Drive）等の大容量記憶装置（不図示）によって構成されている。記憶部１２は、ジョブ管理ＤＢ１２１、ログ関数リストＤＢ１２２、抽出形式ＤＢ１２３、ソースコードＤＢ１２４、ログ検索結果ＤＢ１２５、ネスト解析結果１２６、および解析結果管理ＤＢ１２７を記憶している。
【００２１】
ジョブ管理ＤＢ１２１は、入力装置２を介して入力された、資産抽出を実行するために必要な情報を記憶している。ジョブ管理ＤＢ１２１の情報は、制御部１１によって記憶される。また、ジョブ管理ＤＢ１２１の情報は、処理部１１の各部１１２〜１１６によって、それぞれ必要な情報を読み出されて、資産抽出処理に用いられる。ジョブ管理ＤＢ１２１の一例（図７）については、後記する。
【００２２】
ログ関数リストＤＢ１２２は、データ登録部１１２が、ジョブ管理ＤＢ１２１から読み出したログ関数リストファイル名を用いて、そのファイルに格納されているログ関数リストの情報を記憶している。ログ関数リストファイルは、図３に示すように、資産抽出処理に利用するログ関数を記述したものである。ログ関数には、例えば、ｌｏｇｏｕｔ以外に、テストモードでプログラムを実行するときに用いるｌｏｇｔｅｓｔ、アラームを出力するときに用いるｌｏｇａｌｅｒｔ等がある。
【００２３】
抽出形式ＤＢ１２３は、変数名、マクロ変数名、および型名（構造体名）と抽出対象とを関連付けて記憶している。変数名とは、図１に示すプログラムコードでは、ｓｔｎ、ｔｒｎ、ｄｅｖである。また、マクロ変数とは、ＳＴＮＭＡＸであり、繰り返し文の制御に係るパラメータである。また、型名（構造体名）とは、ＳＴＮ＿ＬＩＳＴ、ＴＲＮ＿ＬＩＳＴ、ＤＥＶ＿ＬＩＳＴであり、データの集まりの名称である。なお、以降では、変数名、マクロ変数名、および型名をまとめて、変数名と称する。また、抽出対象とは、本実施形態では、駅、列車、機器（信号）等のいずれかである。
また、抽出形式ＤＢ１２３には、データ登録部１１２が、ジョブ管理ＤＢ１２１から読み出した抽出形式ファイル名を用いて、そのファイルに格納されている変数名と抽出対象との関係についての情報を記憶している。抽出形式ファイルは、図４に示すように、変数名と抽出対象との対応関係を記述したものである。抽出形式ＤＢ１２３の一例（図８）については後記する。
【００２４】
ソースコードＤＢ１２４は、データ登録部１１２が、ジョブ管理ＤＢ１２１に格納されたファイル名を参照して、そのファイルから読み出したソースコードのデータを記憶している。なお、データ登録部１１２は、ジョブ管理ＤＢ１２１に複数のファイル名が記憶されていることを検知した場合、それらの複数のファイルから、メインプログラムおよびそのサブプログラムを取得して、それぞれのファイルを区別できるようにして記憶する。そして、ソースコード連結実行部１１３は、ソースコードＤＢ１２４に記憶されている複数のファイルを検知した場合、サブプログラムをメインプログラム中にインライン展開したソースコードを生成し、ソースコードＤＢ１２４に記憶する。
【００２５】
ログ検索結果ＤＢ１２５は、ログ関数検索部１１４の検索結果として、ログ関数の名称と出現行番号とを関連付けて記憶している。ログ検索結果ＤＢ１２５の一例（図９）については後記する。
ネスト解析結果１２６は、資産抽出部１１５によって抽出された繰返し構文のネスト関係について、開始行番号、終了行番号を関連付けて記憶している。ネスト解析結果１２６の一例（図１０）については後記する。
解析結果管理ＤＢ１２７は、資産抽出部１１５によって抽出されたソフトウェア資産（コード部品）を記憶している。解析結果管理ＤＢ１２７の一例（図１１）については後記する。
【００２６】
次に、入力装置２に表示する入力画面の一例について、図５を用いて説明する（適宜、図２参照）。図５に示すように、入力画面５０１は、ソフトウェア資産抽出支援装置１においてユーザによる処理対象の選択と出力先と実行指示とを受け付けるためのユーザインタフェースであり、ソースファイル選択モード切替ウィンドウ５０２、ソースファイル選択ウィンドウ５０３、ログ関数リスト選択ウィンドウ５０４、抽出形式ファイル選択ウィンドウ５０５、抽出対象選択ウィンドウ５０６、出力先ディレクトリ選択ウィンドウ５０７および資産抽出開始ボタン５０８を含む。入力画面５０１を介して入力された情報は、制御部１１１によってジョブ管理ＤＢ１２１に記憶され、資産抽出処理に用いられる。
【００２７】
ソースファイル選択モード切替ウィンドウ５０２は、資産抽出処理の対象が、複数ファイルか、または単一ファイルかを設定するためのウィンドウである。ソースファイル選択モード切替ウィンドウ５０２は、例えば、図５に示すようなラジオボタンを表示し、いずれかを選択可能にしている。この単一ファイルまたは複数ファイルに関する情報は、ジョブ管理ＤＢ１２１に記憶される。そして、もし複数ファイルが選択されている場合、ソースコード連結実行部１１３によって１つのソースコードとして連結される。
【００２８】
ソースファイル選択ウィンドウ５０３は、資産抽出対象のソースコードを格納しているソースファイルを選択するためのウィンドウであり、ディレクトリ指定ウィンドウ５０３ａとファイル指定ウィンドウ５０３ｂとを含む。
ディレクトリ指定ウィンドウ５０３ａは、資産抽出対象のファイルが格納されたパス名を設定するために用いられる。このディレクトリ指定ウィンドウ５０３ａに、ディレクトリ構造のパス名を設定することによって、ファイル指定ウィンドウ５０３ｂにその設定されたパス名に存在する対象ファイルの一覧が表示される。
【００２９】
ファイル指定ウィンドウ５０３ｂは、資産抽出対象のファイルを指定するために用いられる。資産抽出対象のファイルには、既存プログラムのソースコードが格納されている。例えば、ファイル指定ウィンドウ５０３ｂ内に表示されるファイル名をマウス等のユーザインタフェースデバイスによって選択すると、選択されたファイル名の背景に色が付く等ユーザの選択結果が可視化できるようになり、選択対象が決定される。
【００３０】
ログ関数リスト選択ウィンドウ５０４は、資産抽出の際に必要となるログ関数の名称を記述したログ関数リストファイルを選択するために用いられ、ディレクトリ指定ウィンドウ５０４ａとファイル指定ウィンドウ５０４ｂとを含む。ディレクトリ指定ウィンドウ５０４ａは、ログ関数リストファイル（図３参照）の存在するパス名を指定するために用いられる。このディレクトリ指定ウィンドウ５０４ａにディレクトリ構造のパス名が設定されると、ファイル指定ウィンドウ５０４ｂに対象となるログ関数リストファイルの一覧が表示される。
【００３１】
ファイル指定ウィンドウ５０４ｂは、資産抽出の際に必要となるログ関数が格納されたログ関数リストファイルを指定するために用いられる。なお、ログ関数リストファイルは、図３に示すように、資産抽出に利用するログ関数のリストを記述したものである。このファイル指定ウィンドウ５０４ｂ内のファイルをマウス等のユーザインタフェースデバイスによって選択すると、このウィンドウ内のファイル名の背景に色が付く等ユーザ選択が可視化できるように表示され、選択対象が決定される。
【００３２】
抽出形式ファイル選択ウィンドウ５０５は、資産抽出の際に必要となる変数名と抽出対象との対応関係を記述した抽出形式ファイル（図４参照）を選択するために用いられ、ディレクトリ指定ウィンドウ５０５ａとファイル指定ウィンドウ５０５ｂとを含む。
ディレクトリ指定ウィンドウ５０５ａは、抽出形式ファイルの存在するパス名を指定するために用いられる。このディレクトリ指定ウィンドウ５０５ａにディレクトリ構造のパス名を設定することによって、ファイル指定ウィンドウ５０５ｂに抽出形式ファイルの一覧が表示される。
【００３３】
ファイル指定ウィンドウ５０５ｂは、資産抽出の際に必要となる変数名と抽出対象との対応関係が格納された抽出形式ファイルを指定するために用いられる。なお、抽出形式ファイルは、図４に示すように、変数名と抽出対象との対応関係を記述したものである。このファイル指定ウィンドウ５０５ｂ内のファイルをマウス等のユーザインタフェースデバイスによって選択すると、このウィンドウ内のファイル名の背景に色が付く等ユーザ選択が可視化できるよう表示され、選択対象が決定される。
【００３４】
抽出対象選択ウィンドウ５０６は、抽出対象ごとに選択のためのラジオボタンを表示している。例えば、駅と列車とに関するソフトウェア資産（コード部品）を抽出したい場合には、図５に示すように、それぞれに対応したラジオボタン等で選択する。
【００３５】
出力先ディレクトリ選択ウィンドウ５０７は、抽出されたソフトウェア資産を格納するパス名を設定するために用いられる。
資産抽出開始ボタン５０８は、そのボタンを押す（マウスでクリックする）ことによって、実行開始指示情報を処理部１１の制御部１１１に伝達する。
【００３６】
次に、出力装置３に表示する出力画面の一例について、図６を用いて説明する（適宜、図２参照）。図６に示すように、出力画面６０１は、ユーザが出力結果を確認するために用いられる。出力画面６０１は、出力結果ファイルを選択するための出力結果ファイル選択ウィンドウ６０２と、出力結果ファイル選択ウィンドウ６０２において選択されたファイルの内容を確認するための出力結果ソースコード確認ウィンドウ６０３と、ソフトウェア資産抽出装置１の動作を終了するための終了ボタン６０４とを含む。
【００３７】
出力結果ファイル選択ウィンドウ６０２は、ソフトウェア資産抽出装置１が生成した出力結果ファイル名の一覧を表示し、表示したファイル名の一覧に対するユーザの選択を受け付ける。
【００３８】
出力結果ソースコード確認ウィンドウ６０３は、出力結果ファイル選択ウィンドウ６０２にて選択されたファイルに格納されているソースコードを表示し、ユーザに確認を促すために用いられる。ユーザは、この出力結果ソースコード確認ウィンドウ６０３に表示されたソースコードを閲覧することによって、ユーザの意図通りにソフトウェア資産が抽出されているかを確認することができる。この際、例えば、出力結果ファイルの名称や出力結果ファイルに含まれる関数名を表示してもよい。また、表示内容がウィンドウサイズに入りきらない場合には、スクロールバーを備えることによりユーザが閲覧する際の利便性を向上することができる。例えば、表示されたソースコードが意図通りでないと判断した場合には、終了ボタン６０４を押すことによって、ソフトウェア資産抽出装置１の動作を一旦終了し、再度違う条件を指定して資産抽出を行うことができる。
【００３９】
ここで、ジョブ管理ＤＢ１２１の一例について、図７を用いて説明する（適宜、図５参照）。ジョブ管理ＤＢ１２１は、ジョブＩＤ、項目、および設定内容を関連付けて記憶している。ジョブＩＤは、入力項目を管理するための番号である。項目は、入力画面５０１から入力される情報に対応している。例えば、ジョブＩＤが「１」の場合は、「ソースファイル選択モード」であり、それに関連付けられた設定内容には、ソースファイル選択モード切替ウィンドウ５０２において選択された情報が記載される。ジョブＩＤが「２」〜「６」についても、それぞれ「ソースファイル名」「ログ関数リストファイル名」「抽出形式ファイル名」「抽出対象」「出力先ディレクトリ」であり、それに関連付けられた設定内容の情報が記憶される。
【００４０】
次に、抽出形式ＤＢ１２３の一例について、図８を用いて説明する。図８に示すように、抽出形式ＤＢ１２３は、変数（構造体）名と抽出対象とを関連付けて記憶している。資産抽出の際には、抽出形式ＤＢ１２３は、出力結果ソースコードの抽出対象が何であるかを、繰返し文や条件文の変数名から対応付けるために参照される。
例えば、「Ｎｏ．」が「１」の場合には、「変数（構造体）名」のマクロ変数「ＳＴＮＭＡＸ」に対応する抽出対象が「駅」であることが関連付けられている。また、「Ｎｏ．」が「２」「３」の場合には、それぞれ「変数（構造体）名」の変数「ｔｒｎ」「ｄｅｖ＿ｎｏ」に対応する抽出対象が「列車」「機器」であることが関連付けられている。さらに、「Ｎｏ．」が「４」の場合には、「変数（構造体）名」の型名「ＳＴＮ＿ＬＩＳＴ」に対応する抽出対象が「駅」であることが関連付けられている。
【００４１】
次に、ログ検索結果ＤＢ１２５の一例について、図９を用いて説明する（適宜、図２参照）。図９に示すように、ログ検索結果ＤＢ１２５は、ログ関数の名称と出現行番号とを記憶している。ログ関数検索部１１４は、ソースコードＤＢ１２４に記憶されているソースコードに対して、ログ関数リストＤＢ１２２に記憶されているログ関数の出現行番号を探索して、その結果をログ検索結果ＤＢ１２５に記憶する。例えば、図１に示すソースコードに対しては、ログ関数「ｌｏｇｏｕｔ」が、４行目、１１行目、１８行目、２４行目に出てくる。その結果が、ログ検索結果ＤＢ１２５に記憶される。
【００４２】
次に、ネスト解析結果ＤＢ１２６の一例について、図１０を用いて説明する（適宜、図１参照）。図１０に示すように、ネスト解析結果ＤＢ１２６は、繰返し文について、ネストの深さ、繰返し文の開始行番号、終了行番号、抽出対象、ログ関数出現行番号を関連付けて記憶している。「ネストの深さ」（ネストの階層）は、ソースコードの繰返し文の入れ子構造の深さを表す。具体的には、まず、繰返し文ｆｏｒをソースコード全体について検索し、もし見つかったならばｆｏｒの開始の中括弧に対応した終了をあらわす中括弧を見つけ出す。この時に開始行番号と終了行番号とをネスト解析結果ＤＢ１２６記録する。次に、開始行番号と終了行番号の入れ子関係を調査する。図１に示すソースコードでは、繰返し文の開始行番号から終了行番号までの範囲が一番広いものは１行目から２７行目までの繰返し文であり、これを第１階層のネストとして、ネスト解析結果ＤＢ１２６に記録する。その次に、範囲が広いものは８行目から２７行目までの繰返し文であるため、これを第２階層のネストとしてネスト解析結果ＤＢ１２６記録する。このようにして、すべての繰返し文についてネスト関係をネスト解析結果ＤＢ１２６に記録する。例えば、「Ｎｏ．」が「１」では、「ネストの深さ」が「１」、「開始行番号」が「１」、「終了行番号」が「２７」となる。また、「Ｎｏ．」が「２」では、「ネストの深さ」が「２」、「開始行番号」が「８」、「終了行番号」が「２７」となる。また、「Ｎｏ．」が「３」では、「ネストの深さ」が「３」、「開始行番号」が「１５」、「終了行番号」が「２１」となる。
【００４３】
また、「抽出対象」には、資産抽出部１１５（図２参照）が、抽出形式ＤＢ１２３（図８）を参照して、繰返し文が制御のために使用している各変数に関連付けられている抽出対象を取得し、格納する。例えば、「Ｎｏ．」が「１」の場合、マクロ変数ＳＴＮＭＡＸが用いられているので、「抽出対象」は「駅」となる。「Ｎｏ．」が「２」の場合、構造体名ＴＲＮ＿ＬＩＳＴのメンバであるｔｒｎ＿ｎｏが用いられているので、「抽出対象」は「列車」となる。「Ｎｏ．」が「３」の場合、変数名ｄｅｖ＿ｎｏが用いられているので、「抽出対象」は機器」となる。
【００４４】
また、「ログ関数出現行番号」は、それぞれのネストにおいて、変数が存在する範囲を示すスコープ内に出現するログ関数の出現行番号を記述する。この際、ネストの深さの数値の大きい方（ネストの下位）のスコープに存在するログ関数の出現を優先してログ関数出現行番号を記述し、ネストの上位にあるスコープに存在するログ関数に関しては、重複を避ける。その結果、図１０に示すように、「ネストの深さ」が「１」「２」「３」に対して、「ログ出現行番号」は、それぞれ、「４」「１１，２４」「１８」となる。
【００４５】
次に、解析結果管理ＤＢ１２７の一例について、図１１を用いて説明する（適宜、図２，６参照）。図１１に示すように、解析結果管理ＤＢ１２７は、資産抽出部１１５によって抽出された、抽出対象とソフトウェア資産（部品コード）とを管理するために、解析結果ＩＤ、ソフトウェア資産の仮名称、抽出対象、ソフトウェア資産を格納する出力ファイル名とを関連付けて記憶している。
【００４６】
「解析結果ＩＤ」には、出力結果を識別して管理するために、一意の数字（または記号）が割り当てられる。この「解析結果ＩＤ」は、出力画面６０１の出力結果ファイル選択ウィンドウ６０２において、「解析結果ＩＤ」が「１」のものから順に表示するために用いられる。また、「解析結果ＩＤ」は、出力結果ファイル選択ウィンドウ６０２において仮名称が選択されると、その選択された仮名称に関連付けられた「解析結果ＩＤ」が制御部１１１を介して画面生成部１１６に送られ、解析結果管理ＤＢ１２７において「解析結果ＩＤ」に関連付けられた出力ファイル名を取得するために用いられる。そして、取得された出力ファイルに格納されているソフトウェア資産（部品コード）が出力結果ソースコード確認ウィンドウ６０３に表示される。
【００４７】
なお、「出力ファイル名」は、抽出対象を表す名称と、その名称の末尾に番号を付して、重複を防止できるように生成される。また、「仮名称」には、出力結果ファイル選択ウィンドウ６０２に表示するための名称が格納される。そして、「仮名称」は、「出力ファイル名」の場合と同様に、抽出対象を表す名称と、その名称の末尾に番号を付して、重複を防止できるように生成される。
【００４８】
次に、ソフトウェア資産抽出支援装置１の制御部１１１の処理フロー（その１）について、図１２を用いて説明する（適宜、図２，５，６参照）。
【００４９】
ステップＳ１２０１では、制御部１１１は、入力装置２から入力画面５０１を介して資産抽出開始ボタン５０８が押下されたか否かを判定する。資産抽出開始ボタン５０８が押下されていないと判定した場合（ステップＳ１２０１でＮｏ）、ステップＳ１２０１へ戻る。また、資産抽出開始ボタン５０８が押下されたと判定した場合（ステップＳ１２０１でＹｅｓ）、ステップＳ１２０２へ進む。
ステップＳ１２０２では、制御部１１１は、ジョブ管理ＤＢ１２１に、入力装置２から入力画面５０１を介して入力された入力情報を記憶する。
【００５０】
ステップＳ１２０３では、制御部１１１は、データ登録部１１２に、実行指示を送信して、データ登録部１１２を起動する。なお、データ登録部１１２は、処理を正常に終了した場合に、正常終了通知を制御部１１１に送信する。
ステップＳ１２０４では、制御部１１１は、データ登録部１１２から正常終了通知を受信したか否かを判定する。データ登録部１１２から正常終了通知を受信していないと判定した場合（ステップＳ１２０４でＮｏ）、ステップＳ１２１１へ進む。ここで、データ登録部１１２から正常終了通知を受信していないと判定するケースは、例えば、正常終了通知を受信していないのにデータ登録部１１２の動作が終了している場合である。なお、データ登録部１１２から正常終了通知を受信したと判定した場合（ステップＳ１２０４でＹｅｓ）、ステップＳ１２０５へ進む。
【００５１】
ステップＳ１２０５では、制御部１１１は、ソースコード連結実行部１１３、ログ関数検索部１１４、資産抽出部１１５を起動する。なお、ソースコード連結実行部１１３の起動は、後記するように、「ソースファイル選択モード」として「ディレクトリ内の全ファイルを対象」が選択された場合に行われる。また、ログ関数検索部１１４は、資産抽出部１１５より前に起動される。そして、資産抽出部１１５は、処理を正常に終了した場合に、正常終了通知を制御部１１１に送信する。
ステップＳ１２０６では、制御部１１１は、資産抽出部１１５から正常終了通知を受信したか否かを判定する。資産抽出部１１５から正常終了通知を受信していないと判定した場合（ステップＳ１２０６でＮｏ）、ステップＳ１２１１へ進む。また、資産抽出部１１５から正常終了通知を受信したと判定した場合、ステップＳ１２０７へ進む。
【００５２】
ステップＳ１２０７では、制御部１１１は、画面生成部１１６を起動する。
ステップＳ１２０８では、制御部１１１は、入力装置２によって出力画面６０１を介して選択された、出力結果ファイル選択ウィンドウ６０２に表示されている出力結果ファイルの解析結果ＩＤを、画面生成部１１６へ送信する。
ステップＳ１２０９では、制御部１１１は、入力装置２によって出力画面６０１を介して終了ボタン６０４が押下されているか否かを判定する。終了ボタン６０４が押下されていないと判定した場合（ステップＳ１２０９でＮｏ）、ステップＳ１２０９へ戻る。また、終了ボタン６０４が押下されていると判定した場合（ステップＳ１２０９でＹｅｓ）、ステップＳ１２１０へ進む。
ステップＳ１２１０では、制御部１１１は、画面生成部１１６の動作を終了するために、終了指示を送信する。
なお、ステップＳ１２１１では、ユーザに出力装置３を介してエラーを通知するため、制御部１１１は、画面生成部１１６にエラー通知指示を送信する。
【００５３】
次に、ステップＳ１２０５における制御部１１１の処理フローについて、図１３を用いて説明する（適宜、図２参照）。
【００５４】
ステップＳ１３０１では、制御部１１１は、ジョブ管理ＤＢ１２１（図７）を参照して、ジョブＩＤが「１」の項目「ソースファイル選択モード」に対応する設定内容が「ディレクトリ内の全ファイルを対象」であるか否かを判定する。設定内容が「ディレクトリ内の全ファイルを対象」であると判定した場合、ステップＳ１３０２へ進む。また、設定内容が「ディレクトリ内の全ファイルを対象」でないと判定した場合、ステップＳ１３０３へ進む。
ステップＳ１３０２では、制御部１１１は、ソースコード連結実行部１１３を起動する。
ステップＳ１３０３では、制御部１１１は、ログ関数検索部１１４を起動する。なお、ログ関数検索部１１４は、ログ関数がソースコード内の何行目に存在するかを検索し、出現行番号情報をログ検索結果ＤＢ１２５（図９参照）に格納する。
【００５５】
ステップＳ１３０４では、制御部１１１は、ログ関数検索部１１４によって検出されたログ関数があるか否かを判定する。検出されたログ関数がないと判定した場合（ステップＳ１３０４でＮｏ）、処理は終了する。また、検出されたログ関数があると判定した場合（ステップＳ１３０４でＹｅｓ）、ステップＳ１３０５へ進む。
ステップＳ１３０５では、制御部１１１は、資産抽出部１１５を起動する。なお、資産抽出部１１５は、処理を正常に終了した場合に、正常終了通知を制御部１１１に送信する。
【００５６】
次に、データ登録部１１２の処理フローについて、図１４を用いて説明する（適宜、図２参照）。
ステップＳ１４０１では、データ登録部１１２は、制御部１１１から実行指示を受信したか否かを判定する。実行指示を受信していないと判定した場合（ステップＳ１４０１でＮｏ）、ステップＳ１４０１へ戻る。実行指示を受信したと判定した場合（ステップＳ１４０１でＹｅｓ）、ステップＳ１４０２へ進む。
【００５７】
ステップＳ１４０２では、データ登録部１１２は、ジョブ管理ＤＢ１２１（図７参照）から、ジョブＩＤ「１」〜「６」の情報を取得する。
ステップＳ１４０３では、データ登録部１１２は、ジョブＩＤ「１」〜「６」の情報が揃っているか否かを判定する。ジョブＩＤ「１」〜「６」の情報が揃っていないと判定した場合（ステップＳ１４０３でＮｏ）、処理は終了する。また、ジョブＩＤ「１」〜「６」の情報が揃っていると判定した場合（ステップＳ１４０３でＹｅｓ）、ステップＳ１４０４へ進む。
【００５８】
ステップＳ１４０４では、データ登録部１１２は、ジョブ管理ＤＢ１２１のジョブＩＤが「３」の項目「ログ関数リストファイル名」に設定されているファイルから、ログ関数を取得して、ログ関数リストＤＢ１２２に記憶する。
ステップＳ１４０５では、データ登録部１１２は、ジョブ管理ＤＢ１２１のジョブＩＤが「４」の項目「ログ関数リストファイル名」に設定されているファイルから、変数名および抽出対象を取得して、抽出形式ＤＢ１２３（図８参照）に記憶する。
【００５９】
ステップＳ１４０６では、データ登録部１１２は、ジョブ管理ＤＢ１２１のジョブＩＤが「２」の項目「ソースファイル名」に設定されているファイルから、ソースコードを取得して、ソースコードＤＢ１２４に記憶する。なお、ファイルが複数存在する場合には、例えば、ファイルごとに、データの先頭に定型ヘッダ情報を入れて、ファイルごとのデータを区別できるようにする。
ステップＳ１４０７では、データ登録部１１２は、ステップＳ１４０４〜Ｓ１４０６の処理が正常に終了したとき、制御部１１１へ正常終了通知を送信する。
【００６０】
次に、資産抽出部１１５の処理フローについて、図１５を用いて説明する（適宜、図２，１０参照）。
ステップＳ１５０１では、資産抽出部１１５は、制御部１１１から実行指示を受信したか否かを判定する。実行指示を受信していないと判定した場合（ステップＳ１５０１でＮｏ）、ステップＳ１５０１へ戻る。実行指示を受信したと判定した場合（ステップＳ１５０１でＹｅｓ）、ステップＳ１５０２へ進む。
【００６１】
ステップＳ１５０２では、資産抽出部１１５は、繰返し構文のネスト関係を解析し、ネストの深さ、開始行番号、終了行番号をネスト解析結果ＤＢ１２６に記憶する。例えば、図１に示すソースコードにおいて、ネスト関係の解析は以下のように行う。まず、繰返し文ｆｏｒをソースコード全体について検索し、もし見つかったならばｆｏｒの開始の中括弧に対応した終了をあらわす中括弧を見つけ出す。この時に開始行番号と終了行番号とをネスト解析結果ＤＢ１２６記録する。次に、開始行番号と終了行番号の入れ子関係を調査する。図１に示すソースコードでは、繰返し文の開始行番号から終了行番号までの範囲が一番広いものは１行目から２７行目までの繰返し文であり、これを第１階層のネストとして、ネスト解析結果ＤＢ１２６に記録する。その次に、範囲が広いものは８行目から２７行目までの繰返し文であるため、これを第２階層のネストとしてネスト解析結果ＤＢ１２６記録する。このようにして、ステップＳ１５０２では、すべての繰返し文についてネスト関係をネスト解析結果ＤＢ１２６に記録する。
【００６２】
ステップＳ１５０３では、資産抽出部１１５が、抽出形式ＤＢ１２３（図８）を参照して、繰返し文が制御のために使用している各変数に関連付けられている抽出対象を取得し、ネスト解析結果ＤＢ１２６に記憶する。ここで、繰返し文が制御のために使用している変数とは、例えば、図１に示すソースコードの行番号１の繰返し文ではマクロ変数ＳＴＮＭＡＸである。そして、資産抽出部１１５は、抽出形式ＤＢ１２３を参照して、このマクロ変数ＳＴＮＭＡＸに関連付けられた抽出対象が「駅」であることを取得する。行番号８では、構造体ＴＲＮ＿ＬＩＳＴのメンバであるｔｒｎ＿ｎｏであり、その抽出対象が「列車」であることを取得する。また、行番号１５では変数ｄｅｖ＿ｎｏであり、抽出対象が「機器」であることを取得する。
【００６３】
ステップＳ１５０４では、資産抽出部１１５は、ネスト解析結果ＤＢ１２６に記憶されている抽出対象があるか否かを判定する。記憶されている抽出対象がない（すべて未記入）と判定された場合（ステップＳ１５０４でＮｏ）、抽出対象の取得に失敗したものとして、処理を終了する。記憶されている抽出対象があると判定された場合（ステップＳ１５０４でＹｅｓ）、ステップＳ１５０５へ進む。
【００６４】
ステップＳ１５０５では、資産抽出部１１５は、開始行番号および終了行番号の範囲において、ログ関数の出現するログ出現行番号を、ネスト解析結果ＤＢ１２６に記憶する。例えば、ネスト解析結果ＤＢ１２６のＮｏ．「３」については、開始行番号が「１５」であり、終了行番号が「２１」である。ここで、図９に示すログ検索結果ＤＢ１２５の出現行番号を参照すると、「４」、「１１」、「１８」、「２４」が記憶されおり、開始行番号「１５」〜終了行番号「２１」の間に入るログ関数は１８行目に存在することがわかる。そのため、Ｎｏ．「３」については、ログ関数出現行番号の欄に「１８」を記憶する。なお、「ネストの深さ」の深いものから優先的に、ログ関数出現行番号を記憶することとし、ログ関数出現行番号が重複することがないようにする。すなわち、Ｎｏ．「２」については、開始行番号「８」〜終了行番号「２７」の間に入るログ関数出現行番号は、「１１」「１８」「２４」であるが、「１８」は既に、Ｎｏ．「３」で使われているため、「１１」「２４」を記憶する。Ｎｏ．［１］については、ログ関数出現行番号は、「４」を記憶する。
【００６５】
ステップＳ１５０６では、資産抽出部１１５は、ネスト解析結果ＤＢ１２６を参照して、抽出対象として駅、列車、機器の順に、開始行番号から終了行番号までの範囲のソースコードを切り出して、一時記憶する。鉄道運行管理システムにおいては制御の対象を絞り込むために、駅、列車、機器の順で処理を行う場合が多い。この理由は、駅ごとに列車の発着管理の処理が行われることが多く、また、列車ごとに信号機のような機器の操作が行われることが多いためである。そこで、ステップ１５０６では、駅、列車、機器の順番に、ソースコードの切り出しを行う。例えば、駅に対応するソースコードを抽出する場合には、ネスト解析結果ＤＢ１２６の抽出対象が「駅」となっている行を抽出して、抽出した行の開始行番号から終了行番号までのソースコードを切り出し、一時記憶する。このとき、一時記憶するファイル名を解析結果管理ＤＢ１２７（図１１参照）の出力ファイル名の欄に記憶する。また、解析結果管理ＤＢ１２７の抽出対象の欄に「駅」を記憶する。仮に、ネスト解析結果ＤＢ１２６に、抽出対象「駅」の行が複数存在する場合は、スコープの広いものを優先して処理する。次に、列車について処理を行う場合、仮に、抽出対象「列車」に該当するスコープが、既に切り出した「駅」に該当するスコープに含まれるとき、既に一時記憶したソースコードから該当部分を切り取る（切り出す）。さらに、機器についても、そのスコープが駅や列車に該当するスコープに含まれる場合、既に一時記憶したソースコードから切り取る（切り出す）。このような処理を行うことで、駅、列車、機器の包含関係を保持しながらソフトウェア資産（部品コード）を抽出することができる。
【００６６】
ステップＳ１５０７では、資産抽出部１１５は、ネスト解析結果ＤＢ１２６のログ出現行番号を用いて、Ｓ１５０６で一時記憶したソースコードに対して、先頭行からログ出現行番号までを切り出して、Ｓ１５０６で一時記憶したソースコードを置換する。例えば、ネスト解析結果ＤＢ１２６のＮｏ．「１」の行では、ログ関数出現行番号の欄に「４」が記述されている。そこで、既に一時記憶したソースコード（１行目〜２７行目）の先頭からログ関数出現行番号までを抽出し、その抽出したソースコードによって一時記憶したソースコードを置き換える。なお、ネスト解析結果ＤＢ１２６のＮｏ．「２」では、ログ関数出現行番号として「１１」「２４」の２つが存在する。この場合には、まず、先頭行（８行目）から１１行目までのソースコードを切り出す。そして、切り出した残りの先頭行１２行目から２４行目までのソースコードを切り出す。このようにして、切り出した範囲は、図１中のかぎ型矢印が示している範囲である。
【００６７】
ステップＳ１５０８では、資産抽出部１１５は、ステップＳ１５０７で切り出したソースコードを格納するファイルの仮名称および出力ファイル名を、抽出対象の名称を用いて生成し、生成した仮名称および出力ファイル名を解析結果管理ＤＢ１２７に記憶する。例えば、解析結果管理ＤＢ１２７の解析結果ＩＤ「１」では、抽出対象が「駅」であるので、仮名称として駅抽出結果１、出力ファイル名としてstation1を生成する。
ステップＳ１５０９では、資産抽出部１１５は、処理が正常に終了した場合、制御部１１１へ正常終了通知を送信する。
【００６８】
次に、画面生成部１１６の処理フローについて、図１６を用いて説明する（適宜、図２，６，１１参照）。
【００６９】
ステップＳ１６０１では、画面生成部１１６は、制御部１１１から実行指示を受信したか否かを判定する。実行指示を受信していないと判定した場合（ステップＳ１６０１でＮｏ）、ステップＳ１６０１へ戻る。実行指示を受信したと判定した場合（ステップＳ１６０１でＹｅｓ）、ステップＳ１６０２へ進む。
【００７０】
ステップＳ１６０２では、画面生成部１１６は、出力画面６０１の出力結果ファイル選択ウィンドウ６０２に解析結果管理ＤＢ１２７に記憶している仮名称を表示する。
ステップＳ１６０３では、画面生成部１１６は、仮名称が選択されたか否かを判定する。仮名称が選択された場合には、選択された仮名称に関連付けられた「解析結果ＩＤ」が制御部１１１を経由して取得される。なお、仮名称が選択されたと判定した場合（ステップＳ１６０３でＹｅｓ）、ステップＳ１６０４へ進む。また、仮名称が選択されていないと判定した場合（ステップＳ１６０３でＮｏ）、ステップＳ１６０５へ進む。仮名称が選択されていないと判定するケースは、例えば、所定の時間が経過しても、選択されない場合である。
【００７１】
ステップＳ１６０４では、画面生成部１１６は、出力画面６０１の出力結果ソースコード確認ウィンドウ６０３に、選択された仮名称に対応する、ステップＳ１５０７で切り出したソースコードを表示する。そして、ステップＳ１６０３へ戻る。
ステップＳ１６０５では、画面生成部１１６は、出力画面６０１の終了ボタン６０４が押下されることによって制御部１１１によって生成された終了指示を受信したか否かを判定する。終了指示を受信したと判定した場合（ステップＳ１６０５でＹｅｓ）、処理は終了する。終了指示を受信していないと判定した場合（ステップＳ１６０５でＮｏ）、ステップＳ１６０３へ戻る。なお、終了指示を受信していないと判定するケースは、例えば、所定の時間が経過しても、選択されない場合である。
【００７２】
以上、本実施形態では、鉄道運行管理用のソフトウェアの開発のために流用しやすいソフトウェア資産（コード部品）を抽出する装置および処理フローについて説明した。処理フローでは、繰返し構文のネスト関係を解析し、ネストの深さ、開始行番号、終了行番号を抽出する（ステップＳ１５０２）。次に、繰返し文が制御のために使用している変数から、抽出対象が駅、列車、機器のいずれかを特定する（ステップＳ１５０３）。そして、開始行番号から終了行番号までの範囲において、ログ関数の出現するログ関数出現行番号を、ネストの深さの深いものから探索して、ログ出現行番号が重複しないようにしつつ、前記範囲に関連付けを行う（ステップＳ１５０５）。そして、駅、列車、機器の順に、開始行番号から終了行番号までの範囲のソースコードを切り出した（ステップＳ１５０６）後、その切り出したソースコードに対して、先頭行からログ関数出現行番号までを切り出して（ステップＳ１５０７）、ソフトウェア資産（コード部品）とする。このように構成したので、鉄道運行管理用のソフトウェア開発のために流用しやすいコード部品を抽出することができる。
【００７３】
なお、本実施形態では、ステップＳ１５０６において、駅、列車、機器の順に、開始行番号から終了行番号までの範囲のソースコードを切り出すことを説明した。この変形例として、ネストの深さの深いものから順にソースコードを切り出しても同様の結果となる。また、機器、列車、駅の順にソースコードを切り出しても同様の結果となる。
【符号の説明】
【００７４】
１      ソフトウェア資産抽出支援装置
１１    処理部
１２    記憶部
１１１  制御部
１１２  データ登録部
１１３  ソースコード連結実行部
１１４  ログ関数検索部
１１５  資産抽出部
１１６  画面生成部
１２１  ジョブ管理ＤＢ
１２２  ログ関数リストＤＢ
１２３  抽出形式ＤＢ
１２４  ソースコードＤＢ
１２５  ログ検索結果ＤＢ
１２６  ネスト解析結果ＤＢ
１２７  解析結果管理ＤＢ
５０１  入力画面
６０１  出力画面
【図１】
2011215978.tif 000003
【図２】
2011215978.tif 000004
【図３】
2011215978.tif 000005
【図４】
2011215978.tif 000006
【図５】
2011215978.tif 000007
【図６】
2011215978.tif 000008
【図７】
2011215978.tif 000009
【図８】
2011215978.tif 000010
【図９】
2011215978.tif 000011
【図１０】
2011215978.tif 000012
【図１１】
2011215978.tif 000013
【図１２】
2011215978.tif 000014
【図１３】
2011215978.tif 000015
【図１４】
2011215978.tif 000016
【図１５】
2011215978.tif 000017
【図１６】
2011215978.tif 000018