(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022156575
(43)【公開日】2022-10-14
(54)【発明の名称】解析プログラム、解析方法、および情報処理装置
(51)【国際特許分類】
G06F 8/75 20180101AFI20221006BHJP
G06F 8/73 20180101ALI20221006BHJP
【FI】
G06F8/75
G06F8/73
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2021060343
(22)【出願日】2021-03-31
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】特許業務法人扶桑国際特許事務所
(72)【発明者】
【氏名】工藤 駿
(72)【発明者】
【氏名】浦本 貴正
(72)【発明者】
【氏名】大畑 貴史
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BB12
5B376BC38
5B376DA22
(57)【要約】
【課題】プログラム実行時の動作仕様の把握を容易にする。
【解決手段】情報処理装置10は、ソースファイル1aと、ソースファイル1aにおける解析対象プログラムの記述に使用されたプログラミング言語の動作仕様が定義された仕様定義情報とを記憶する。情報処理装置10は、仕様定義情報に基づいて、ソースファイル1aに記述された行ごとのコードの動作仕様を解読する。そして情報処理装置10は、ソースファイル1a内の複数の行それぞれに対応付けて、複数の行それぞれに記述されたコードの動作仕様を示すコメント文が記述された仕様情報を生成する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
コンピュータに、
ソースファイルにおける解析対象プログラムの記述に使用されたプログラミング言語の動作仕様が定義された仕様定義情報に基づいて、前記ソースファイルに記述された行ごとのコードの動作仕様を解読し、
前記ソースファイル内の複数の行それぞれに対応付けて、前記複数の行それぞれに記述されたコードの動作仕様を示すコメント文が記述された仕様情報を生成する、
処理を実行させる解析プログラム。
【請求項2】
コードの仕様の解読では、前記解析対象プログラムの実行時に参照する情報が示された外付け情報に基づいて、前記外付け情報に応じた動作を記述した外部情報参照コードを実行した場合の動作を解読し、
前記仕様情報の生成では、前記外部情報参照コードが記述された行に対応付けて、前記外部情報参照コードに基づく前記外付け情報に応じた動作を示すコメント文を前記仕様情報に記載する、
請求項1記載の解析プログラム。
【請求項3】
前記コンピュータに、さらに、
前記仕様定義情報に基づいて、前記ソースファイルに変更を加えた変更後ソースファイルに記述された行ごとのコードの動作仕様を解読し、
前記変更後ソースファイル内の複数の行それぞれに対応付けて、前記複数の行それぞれに記述されたコードの動作仕様を示すコメント文が記述された変更後仕様情報を生成し、
前記仕様情報と前記変更後仕様情報との差分を抽出する、
処理を実行させる請求項1または2に記載の解析プログラム。
【請求項4】
コードの仕様の解読では、前記解析対象プログラムを第1システムで実行した場合における前記解析対象プログラムを記述したプログラミング言語の動作仕様が定義された第1仕様定義情報に基づいて、前記ソースファイルに記述された行ごとのコードの動作仕様を解読すると共に、前記解析対象プログラムを第2システムで実行した場合における前記解析対象プログラムを記述したプログラミング言語の動作仕様が定義された第2仕様定義情報に基づいて、前記ソースファイルに記述された行ごとのコードの動作仕様を解読し、
前記仕様情報の生成では、前記ソースファイル内の複数の行それぞれに対応付けて、前記複数の行それぞれに記述されたコードの前記第1仕様定義情報に基づく動作仕様を示すコメント文が記述された第1仕様情報を生成すると共に、前記ソースファイル内の前記複数の行それぞれに対応付けて、前記複数の行それぞれに記述されたコードの前記第2仕様定義情報に基づく動作仕様を示すコメント文が記述された第2仕様情報を生成し、
前記第1仕様情報と前記第2仕様情報との差分を抽出する、
請求項1または2に記載の解析プログラム。
【請求項5】
前記コンピュータに、さらに、
前記第1仕様情報と前記第2仕様情報との差分に基づいて、前記第1システムで実行されていた前記解析対象プログラムを前記第2システムに移行させるための修正案を出力する、
処理を実行させる請求項4記載の解析プログラム。
【請求項6】
コンピュータが、
ソースファイルにおける解析対象プログラムの記述に使用されたプログラミング言語の動作仕様が定義された仕様定義情報に基づいて、前記ソースファイルに記述された行ごとのコードの動作仕様を解読し、
前記ソースファイル内の複数の行それぞれに対応付けて、前記複数の行それぞれに記述されたコードの動作仕様を示すコメント文が記述された仕様情報を生成する、
処理を実行させる解析方法。
【請求項7】
ソースファイルと、前記ソースファイルにおける解析対象プログラムの記述に使用されたプログラミング言語の動作仕様が定義された仕様定義情報とを記憶する記憶部と、
前記仕様定義情報に基づいて、前記ソースファイルに記述された行ごとのコードの動作仕様を解読し、前記ソースファイル内の複数の行それぞれに対応付けて、前記複数の行それぞれに記述されたコードの動作仕様を示すコメント文が記述された仕様情報を生成する処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、解析プログラム、解析方法、および情報処理装置に関する。
【背景技術】
【0002】
アプリケーションソフトウェア(以下アプリケーションと呼ぶ)などのソフトウェアは、そのソフトウェアを実行するプラットフォームの移行または処理系の変更により、実行環境が変更されることがある。例えば以下のようなプラットフォームの移行または処理系の変更があり得る。
・ホストからいわゆるオープン系OS(Operating System)への移行
・オープン系OSの中での別OSへの移行
・同一OSでの32-bit版から64-bit版への移行
・同一OSでのバージョンアップ
・高級言語で作成されたソフトウェアの処理系の変更(例えばコンパイラを提供するベンダの変更)
ソフトウェアの実行環境が変更される場合、その変更に伴うソフトウェアの動作の変化が問題となることが多い。例えば、メモリ領域へのポインタを扱うプログラムの場合、32-bitから64-bitへの移行ではポインタのサイズが異なる。このため、ポインタを利用した処理でポインタサイズが32bitであることを利用した処理を含むソフトウェアを64-bit版のOSへ移行させた場合、ソースファイルなどの資産に一切変更が無くとも、動作が変更される。これらのプラットフォーム移行に伴う仕様差は、移行するソフトウェアのソースファイルなどの資産文面には直接現れない情報である。
【0003】
プラットフォームの移行の際には、プラットフォーム移行の実現性の事前確認作業が行われる。例えばソフトウェア資産に対して実行するプラットフォーム間の非互換の部分を人手によりしらみつぶし的に洗い出すアセスメントが実施される。
【0004】
プログラムの内容の把握を支援する技術としては、例えば入力されるプログラムに基づいて柔軟な仕様書を生成できる仕様書生成装置が提案されている。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
プログラム実行時の動作仕様がソースファイルなどの資産文面に現れない部分があるため、ソースファイルだけではコンパイル後のプログラムの動作仕様を正確に把握することが困難である。そのため例えば、ソフトウェアの実行環境が変更される場合にアセスメントを実施しても、実行環境の変更に応じて変更される動作の抽出漏れが発生しやすく、正確性に欠けてしまう。またソフトウェアのソースファイルの変更により動作が変更される場合においても、動作の変更箇所を正確に把握することが困難となっている。
【0007】
1つの側面では、本件は、プログラム実行時の動作仕様の把握を容易にすることを目的とする。
【課題を解決するための手段】
【0008】
1つの案では、以下の処理をコンピュータに実行させる解析プログラムが提供される。
コンピュータは、ソースファイルにおける解析対象プログラムの記述に使用されたプログラミング言語の動作仕様が定義された仕様定義情報に基づいて、ソースファイルに記述された行ごとのコードの動作仕様を解読する。そしてコンピュータは、ソースファイル内の複数の行それぞれに対応付けて、複数の行それぞれに記述されたコードの動作仕様を示すコメント文が記述された仕様情報を生成する。
【発明の効果】
【0009】
1態様によれば、プログラム実行時の動作仕様の把握が容易となる。
【図面の簡単な説明】
【0010】
【
図1】第1の実施の形態に係る解析方法の一例を示す図である。
【
図2】移行前後のシステムを含む全体のシステム構成の一例を示す図である。
【
図3】管理端末のハードウェアの一例を示す図である。
【
図4】アプリケーションの自動アセスメントのための管理端末の機能を示すブロック図である。
【
図5】プラットフォーム移行に伴うアプリケーションのアセスメント処理の一例を示す図である。
【
図11】コンパイラを変更する場合のアセスメントの一例を示す図である。
【
図12】制御構造の部分の仕様の出力例を示す図である。
【
図13】サブルーチンの呼び出し先の仕様差抽出の一例を示す図である。
【
図14】エラー伝搬を抑止した仕様差抽出の一例を示す図である。
【
図15】運用時パラメータを参照することによる仕様差抽出の一例を示す図である。
【
図16】システムごとに異なる動作設定ファイルが存在する場合の仕様差抽出の一例を示す図である。
【
図17】仕様情報生成処理の手順の一例を示すフローチャートである。
【
図18】外付け情報解析処理の手順の一例を示すフローチャートである。
【
図19】システム利用環境変数一覧テーブルの一例を示す図である。
【
図20】環境変数一覧テーブルの一例を示す図である。
【
図21】実行時オプションテーブルの一例を示す図である。
【
図23】環境変数一覧から環境変数一覧テーブルへのデータ登録処理の一例を示す図である。
【
図24】動作設定ファイルから動作設定テーブルへのデータ登録処理の一例を示す図である。
【
図25】ソースファイル解析処理の手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
まず第1の実施の形態について説明する。
【0012】
図1は、第1の実施の形態に係る解析方法の一例を示す図である。
図1には、解析方法を実現するための情報処理装置10が示されている。情報処理装置10は、例えば所定の解析プログラムを実行することにより、第1の実施の形態にかかる解析方法を実施することができる。
【0013】
情報処理装置10は、例えば記憶部11と処理部12とを有するコンピュータである。記憶部11は、例えば情報処理装置10が有するメモリまたはストレージ装置である。処理部12は、例えば情報処理装置10が有するプロセッサまたは演算回路である。
【0014】
記憶部11は、ソフトウェア資産1、第1仕様定義情報2、および第2仕様定義情報3を記憶する。ソフトウェア資産1には、ソフトウェアのソースファイル1aと、ソースファイル1aに記述された解析対象プログラムの実行時に参照する情報が示された外付け情報1bが含まれる。第1仕様定義情報2は、解析対象プログラムを第1システムで実行した場合における解析対象プログラムを記述したプログラミング言語の動作仕様が定義された情報である。第2仕様定義情報3は、解析対象プログラムを第2システムで実行した場合における解析対象プログラムを記述したプログラミング言語の動作仕様が定義された情報である。第1システムと第2システムとは、例えばOSなどのプラットフォームが異なるシステムである。
【0015】
処理部12は、第1仕様定義情報2または第2仕様定義情報3に基づいて、ソースファイル1aに記述された行ごとのコードの動作仕様を解読する。そして処理部12は、ソースファイル1a内の複数の行それぞれに対応付けて、複数の行それぞれに記述されたコードの動作仕様を示すコメント文が記述された仕様情報を生成する。例えば処理部12は、第1仕様定義情報2に基づいて、ソースファイル1aに記述された行ごとのコードの動作仕様を解読し、第1仕様定義情報2に基づく動作仕様を示すコメント文が記述された第1仕様情報4を生成する。また処理部12は、第2仕様定義情報3に基づいて、ソースファイル1aに記述された行ごとのコードの動作仕様を解読し、第2仕様定義情報3に基づく動作仕様を示すコメント文が記述された第2仕様情報5を生成する。
【0016】
第1仕様情報4には第1仕様定義情報2に基づく動作仕様を示すコメント文が記述されているため、第1仕様情報4を参照すれば、解析対象プログラムを第1システムで実行した場合の動作仕様を容易に把握可能である。また第2仕様情報5には第2仕様定義情報3に基づく動作仕様を示すコメント文が記述されているため、第2仕様情報5を参照すれば、解析対象プログラムを第2システムで実行した場合の動作仕様を容易に把握可能である。
【0017】
例えば第1システムで実行されている解析対象プログラムを第2プログラムに移行する場合、第1仕様情報4と第2仕様情報5とを比較することで、実行するシステムの移行に伴う動作仕様の変更箇所を容易に検出できる。その場合、処理部12は、第1仕様情報4と第2仕様情報5との差分を抽出し、抽出した差分を示す仕様差分情報6を生成してもよい。仕様差分情報6には、解析対象プログラムを実行するシステムの移行に伴う動作仕様の変更箇所が漏れなく記載される。これにより、動作仕様の変更箇所の抽出漏れが抑止される。
【0018】
なお処理部12は、仕様差分情報6に基づいて差分レポート7を出力してもよい。差分レポート7には、動作仕様の変更箇所がユーザに分かりやすく可視化される。これにより、ユーザによる動作仕様の変更箇所の把握が容易となる。
【0019】
なお処理部12は、コードの仕様の解読の際に、解析対象プログラムの実行時に参照する情報が示された外付け情報1bに基づいて、外付け情報1bに応じた動作を記述した外部情報参照コードを実行した場合の動作を解読することもできる。その場合、処理部12は、外部情報参照コードが記述された行に対応付けて、外部情報参照コードに基づく外付け情報1bに応じた動作を示すコメント文を第1仕様情報4または第2仕様情報5に記載する。
【0020】
外付け情報1bに応じた動作仕様を示すコメント文が第1仕様情報4または第2仕様情報5に記載されることで、ソースファイル1aには文面上現れない動作仕様が第1仕様情報4または第2仕様情報5に示される。そのため、第1仕様情報4または第2仕様情報5に基づいて、解析対象プログラムの実行時の動作を正確に把握することが可能となる。
【0021】
さらに処理部12は、第1仕様情報4と第2仕様情報5との差分に基づいて、第1システムで実行されていた解析対象プログラムを第2システムに移行させるための修正案を出力してもよい。例えば処理部12には、コード仕様の解読によって判明する動作時のエラーの種別に対応付けて、そのエラーを解消するための修正案を保持する。そして処理部12は、第2仕様情報5において動作エラーとなることが示されている場合、エラーの種別に応じ、エラーが出ないようにするソースファイル1aの修正案を出力する。これにより、解析対象プログラムを実行させるシステムの移行に合わせたソースファイル1aの修正が容易となる。
【0022】
また処理部12は、第1仕様定義情報2または第2仕様定義情報3に基づいて、ソースファイル1aに変更を加えた変更後ソースファイルに記述された行ごとのコードの動作仕様を解読することもできる。その場合、処理部12は、変更後ソースファイル内の複数の行それぞれに対応付けて、複数の行それぞれに記述されたコードの動作仕様を示すコメント文が記述された変更後仕様情報を生成する。そして処理部12は、仕様情報と変更後仕様情報との差分を抽出する。これにより、ソースファイル1aの変更による解析対象プログラムの実行時の動作仕様の変更内容を正確に把握することができる。
【0023】
〔第2の実施の形態〕
次に第2の実施の形態について説明する。
図2は、移行前後のシステムを含む全体のシステム構成の一例を示す図である。
図2の例では、ネットワーク20を介して、複数のシステム200,300と管理端末100とが接続されている。システム200,300は、アプリケーションを実行するコンピュータである。システム200とシステム300とでは、異なるプラットフォームが構築されているものとする。例えばシステム200とは異なるOSでシステム300は動作している。管理端末100は、システム200,300の運用管理に用いるコンピュータである。
【0024】
図3は、管理端末のハードウェアの一例を示す図である。管理端末100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101がプログラムを実行することで実現する機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
【0025】
メモリ102は、管理端末100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOSのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に利用する各種データが格納される。メモリ102としては、例えばRAM(Random Access Memory)などの揮発性の半導体記憶装置が使用される。
【0026】
バス109に接続されている周辺機器としては、ストレージ装置103、GPU(Graphics Processing Unit)104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
【0027】
ストレージ装置103は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置103は、コンピュータの補助記憶装置として使用される。ストレージ装置103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置103としては、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)を使用することができる。
【0028】
GPU104は画像処理を行う演算装置であり、グラフィックコントローラとも呼ばれる。GPU104には、モニタ21が接続されている。GPU104は、プロセッサ101からの命令に従って、画像をモニタ21の画面に表示させる。モニタ21としては、有機EL(Electro Luminescence)を用いた表示装置や液晶表示装置などがある。
【0029】
入力インタフェース105には、キーボード22とマウス23とが接続されている。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をプロセッサ101に送信する。なお、マウス23は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【0030】
光学ドライブ装置106は、レーザ光などを利用して、光ディスク24に記録されたデータの読み取り、または光ディスク24へのデータの書き込みを行う。光ディスク24は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク24には、DVD(Digital Versatile Disc)、DVD-RAM、CD-ROM(Compact Disc Read Only Memory)、CD-R(Recordable)/RW(ReWritable)などがある。
【0031】
機器接続インタフェース107は、管理端末100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置25やメモリリーダライタ26を接続することができる。メモリ装置25は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ26は、メモリカード27へのデータの書き込み、またはメモリカード27からのデータの読み出しを行う装置である。メモリカード27は、カード型の記録媒体である。
【0032】
ネットワークインタフェース108は、ネットワーク20に接続されている。ネットワークインタフェース108は、ネットワーク20を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。ネットワークインタフェース108は、例えばスイッチやルータなどの有線通信装置にケーブルで接続される有線通信インタフェースである。またネットワークインタフェース108は、基地局やアクセスポイントなどの無線通信装置に電波によって通信接続される無線通信インタフェースであってもよい。
【0033】
管理端末100は、以上のようなハードウェアによって、第2の実施の形態の処理機能を実現することができる。システム200,300も、管理端末100と同様のハードウェアにより実現することができる。また、第1の実施の形態に示した情報処理装置10も、管理端末100と同様のハードウェアにより実現することができる。
【0034】
管理端末100は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態の処理機能を実現する。管理端末100に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、管理端末100に実行させるプログラムをストレージ装置103に格納しておくことができる。プロセッサ101は、ストレージ装置103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。また管理端末100に実行させるプログラムを、光ディスク24、メモリ装置25、メモリカード27などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、ストレージ装置103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【0035】
以上のようなシステムにおいて、システム200,300の一方で実行されているアプリケーションを他方のシステムに移行させる場合がある。この場合、システムの管理者は、管理端末100を用いてアプリケーションの実行環境の移行に伴って動作が変更される部分の洗い出し(アセスメント)を行う。管理端末100は、アプリケーションのアセスメントを自動で行い、実行環境の違いに応じた動作の差分を出力することができる。
【0036】
ここで、アプリケーションのプラットフォーム移行時のアセスメントの困難性について説明する。
アセスメントの1つの手段としては、コンパイラを用いて移行対象資産の構文解析を行い、移行後システム基準の構文エラーを抽出することが考えられる。しかし、コンパイラは仕様差の抽出のために設計されているわけではないため、コンパイラを用いて移行対象資産の構文解析を行ってもすべての仕様差を抽出できる保証がない(課題1)。
【0037】
仕様差が抽出できない場合として、ある箇所のエラーにより、その後続のコードの判定がうまくいかない場合がある(課題2)。例えば、データ定義エラーにより、そのデータを使う文全体の構文チェックがエラーとなる。その場合、文自体の仕様差がチェックできないことがある。
【0038】
またコンパイラを用いた場合、コンパイル時にわかる仕様しかチェックできない(課題3)。例えば、運用時のパラメータ指定により動作を変えているケースでは、移行前後での動作の違いを正しく判定できない。
【0039】
アセスメントの別の手段としては、移行前システムと移行後システムの仕様差を事前に洗い出し、顧客資産に該当する仕様差を抽出するツールを作成することが考えられる。この場合、移行前のシステムと移行後のシステムの組み合わせごとに仕様差を洗い出すこととなり、対象システム数が増えると組み合わせ数が膨大になる(課題4)。
【0040】
そこで第2の実施の形態に係る管理端末100では、既存のチェックツールのように非互換があるプログラム要素に対して警告を表示するのではなく、ソースファイル中のすべてのプログラム要素に対して、その詳細な仕様をコメント文で出力する。すなわち管理端末100は、エラーとなることを示すコメント文を出力するものの、エラー処理による後続の処理のスキップは発生させない。管理端末100が出力する仕様には、ソースファイルの表記からは見て取れない仕様(実行プラットフォーム依存、処理系依存、翻訳パラメータ依存、実行環境情報依存な仕様)も含まれる。
【0041】
このように管理端末100は、「プラットフォームAからプラットフォームBへの移行における仕様定義上での非互換」を検出するのではなく、プログラム実行時の「プラットフォームA上での動作仕様」と「プラットフォームB上での動作仕様」を出力する。プログラム実行時の動作仕様には、ソースファイルに現れない仕様が含まれる。そして管理端末100は、異なるプラットフォームに応じた動作仕様を比較する。これにより、個々のアプリケーションについての多岐にわたる移行パターンを、移行元と移行先の各プラットフォームに対する仕様情報出力を実装するだけでサポートすることができる。すなわち以下の通り、上記の各課題を解決することができる。
【0042】
課題1(仕様差抽出の完全性)については、移行前後のソースコードに関係する動作仕様を機械的に書き出すことで、仕様差の検出漏れが防止される。課題2(エラー伝搬の防止)については、仕様コメントを複数行とすることで、エラー伝搬による情報の損失が防止される。課題3(運用時パラメータの反映)については、資産解析のインプットとして運用環境設定用ファイルを利用することで、運用時のパラメータが比較対象に反映可能となる。課題4(組み合わせパターン増大防止)については、組み合わせごとの仕様差を考慮せず、システムの仕様にのみ着目するため、解析のパターンが削減される。すなわち、プラットフォームの組み合わせごとに解析を行う場合、nシステム(nは2以上の整数)の比較を行うには全部でnC2通りの比較が必要となるが、ソフトウェアを実行するシステムごとの動作仕様のコメント文の出力であればn通りだけ考えればよい。
【0043】
図4は、アプリケーションの自動アセスメントのための管理端末の機能を示すブロック図である。管理端末100は、記憶部110、仕様情報出力部120、差分抽出部130、差分レポート出力部140、および修正方法提案部150を有する。
【0044】
記憶部110は、移行対象資産31,32,・・・、仕様定義情報41,42,・・・、および修正ルール51,52,・・・を記憶する。移行対象資産31,32,・・・は、システム200で実行させているアプリケーションのソフトウェア資産である。例えば1つの移行対象資産31は、ソースファイル31aと外付け情報31bとを含む。ソースファイル31aは、高級言語でのプログラム(解析対象プログラム)のソースコードが記述されたファイルである。外付け情報31bは、ソースファイル31aをコンパイルして生成された実行ファイルの実行時に参照される情報である。
【0045】
仕様定義情報41,42,・・・は、移行対象資産31,32,・・・内のソースファイルにおけるプログラムの記述に使用されたプログラミング言語の仕様が定義された情報である。仕様定義情報41,42,・・・は、コンパイル後のアプリケーションを実行するプラットフォームごとに設けられている。
【0046】
修正ルール51,52,・・・は、移行前と移行後とのアプリケーションの動作の差分を修正するためのルールを示す情報である。
仕様情報出力部120は、移行対象資産31,32,・・・それぞれについて、ソースコードの行ごとの詳細な仕様を示す仕様情報を生成する。例えば仕様情報出力部120は、ソースファイル内に行ごとのコンパイル後の動作の仕様を追記した仕様情報を生成する。
【0047】
差分抽出部130は、2つの仕様情報の差分を抽出する。例えば差分抽出部130は、移行前のシステム200に対応する仕様定義情報41を用いて生成された、移行対象資産の仕様情報と、移行後のシステム300に対応する仕様定義情報42を用いて生成された、同じ移行対象資産の仕様情報との差分を抽出する。
【0048】
差分レポート出力部140は、2つの仕様情報間の差分を示す差分レポートを生成し、ファイルまたはモニタ21に出力する。
修正方法提案部150は、修正ルール51,52,・・・に従って、差分の修正方法を提案する提案メッセージを出力する。
【0049】
以上のような機能により、管理端末100は、アプリケーションを実行するプラットフォーム移行の際のアセスメントを自動で実行することができる。なお
図4に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【0050】
なお仕様情報出力部120による仕様情報の出力機能の一部は、ソースファイルをコンパイルするためのコンパイラの機能を流用することができる。例えばコンパイラは、ソースファイル31aの字句解釈、構文解釈、意味解釈を行い、これらの解釈結果に応じて適切な機械語のコードを生成する。仕様情報出力部120は、コンパイラと同様にソースファイル31aの字句解釈、構文解釈、意味解釈を行う。ただし、仕様情報出力部120は、コンパイラとは異なり機械語のコードは生成せずに、行ごとの解釈結果を示すコメント文を生成する。
【0051】
仕様定義情報41,42,・・・には、コンパイラにおける字句解釈、構文解釈、意味解釈の仕様が定義されていると共に、解釈した内容を表す内部コードに代えてコメント文が定義される。仕様情報出力部120は、仕様定義情報41,42,・・・に基づいてソースファイル31aの動作仕様を解析し、その解析内容を表すコメント文を仕様定義情報41,42,・・・から取得する。そして仕様情報出力部120は、ソースファイル31aのコピーを生成し、そのコピーにプログラムの行ごとに動作仕様を示すコメント文を追加することで、仕様情報を生成する。
【0052】
通常のコンパイラは内部で仕様情報を保持し、それをもとにコード生成を行い、仕様情報を外部に公開しない。コンパイラにとって、仕様情報はオブジェクトコードを出力するためのものであり、それ自身を出力する必要性・意義がない。また、同じ理由で、実行時まで確定しない実行時環境変数などの各種情報は気にかけない。
【0053】
それに対して、仕様情報出力部120は、仕様情報を形式化して出力するものであり、そのためにコンパイラの仕組みを一部に流用して、文ごとの動作仕様の可視化を行う。これにより、例えばシステム移行に伴う移行前後での非互換性の有無の調査を、精密に、かつ漏れなく行うことができる。すなわち仕様情報出力部120は、コンパイラでは意識されていなかった、実行時の動作をコメント文によって明示する。しかも仕様情報出力部120は、コンパイラでは入力として扱っていなかった、動作設定ファイルなどの外付け情報に依存した実行時動作仕様も出力することができる。
【0054】
プラットフォーム移行時に自動アセスメントを管理端末100に自動実行させるための入力は、例えば、ソースファイル、実行プラットフォームの種類、処理系の種類(どのベンダが用意した処理系か)、翻訳パラメータ、アプリケーションの実行環境情報である。自動アセスメントの実行結果として得られる出力は、例えばソースファイル内に記述された各プログラム要素(各行のコード)それぞれに対してその詳細仕様を定められた形式で記述した情報である。
【0055】
図5は、プラットフォーム移行に伴うアプリケーションのアセスメント処理の一例を示す図である。例えば移行対象資産31に対応するアプリケーションを、システム200からシステム300に移行させるものとする。システム200のプラットフォームに対応する仕様は、仕様定義情報41に示されている。システム300のプラットフォームに対応する仕様は、仕様定義情報42に示されている。
【0056】
仕様情報出力部120は、移行対象資産31のソースファイル31aと外付け情報31bと仕様定義情報41とに基づいて、移行対象資産31の仕様情報61を生成する。また仕様情報出力部120は、移行対象資産31のソースファイル31aと外付け情報31bと仕様定義情報42とに基づいて、移行対象資産31の仕様情報62を生成する。仕様情報出力部120は、生成した2つの仕様情報61,62を差分抽出部130に送信する。
【0057】
差分抽出部130は、diffコマンドなどを用いて、2つの仕様情報61,62間の差分を抽出する。差分抽出部130は、抽出した差分を示す仕様差分情報63を、差分レポート出力部140と修正方法提案部150とに送信する。
【0058】
差分レポート出力部140は、仕様差分情報63に示される差分の内容を説明する差分レポート64を生成し、出力する。また修正方法提案部150は、修正ルール51,52,・・・のいずれかに合致する差分がある場合、該当する修正ルールを用いた差分の修正提案を示す修正方法指示書65を生成する。修正方法提案部150は、生成した修正方法指示書65をファイルまたはモニタ21に出力する。
【0059】
以下、
図6~
図10を参照して、仕様情報出力部120による仕様情報の出力例について説明する。
図6は、仕様情報の第1の生成例を示す図である。
図6の例では、ソースファイル中に仕様情報がYAML記法で埋め込まれている。なお仕様情報の記法は、YAMLには限定されない。
【0060】
例えば仕様情報出力部120は、ソースファイル31a内の「01 WK PIC S9(4)」(COBOLのデータ定義)の行に対し、
図6に示すような記述を追加した仕様情報61を出力する。仕様情報61の「*>」から始まる行は、仕様を示すコメント文である。
【0061】
例えば「type:”record”」は、言語要素の種類がレコードであることを示している。「level:1」は、レベル番号が「1」であることを示している。「name:”WK”」は、名前が「WK」であることを示している。「name-case-sensitivity:”capitalize”」は、名前の大文字小文字の区別に関して、大文字化して比較することが示されている。この名前の大文字小文字の区別に関する仕様は、処理系(コンパイラの種類)に依存し、かつ翻訳パラメータにも依存する情報である。「usage:”display”」は、用途:が「DISPLAY」であることを示している。「format:」、「type:”zoned-decimal”」、「sub-format:”f-tsu”」の3行は、データの形式がゾーン十進(F通社形式)であることを示している。この形式に関する仕様は、処理系依存の情報である。「width:4」は、桁が4桁であることを示している。「unit-length:1」は、桁の幅が1byteであることを示している。この桁の幅は処理系(コンパイラの種類)に依存し、かつ翻訳パラメータにも依存する情報である。「signed:true」は、符号があることを示している。「child-items:null」は、子項目がないことを示している。
【0062】
実行プラットフォーム依存、処理系依存、翻訳パラメータ依存、実行環境情報依存の仕様を正確に出力するため、仕様情報出力部120には、これらの情報も、アセスメント処理開始時に入力される。
【0063】
仕様情報出力部120は、ソースファイル中のすべてのプログラム要素に対して仕様情報を出力している。そのため差分抽出部130により複数のプラットフォームに対する仕様情報の比較、修正方法提案部150により内容差分に対する対応案の提示などが可能となる。
【0064】
図6の例では、ソースファイル31a内の1行についての仕様を示しているが、仕様情報出力部120は、ソースファイル31a内のすべての行について、同様に仕様の記述を出力する。これにより、ソースファイル31a内のすべてのコードについて、漏れなく仕様が書き出される。
【0065】
なお、ソースファイル31aが修正された場合、出力される仕様情報にも修正内容が反映される。
図7は、仕様情報の第2の生成例を示す図である。
図7には、ソースファイル31a内の「01 WK PIC S9(4)」の行が「01 WK PIC 9(8)」に変更された場合の仕様の例が示されている。この場合、変更後のソースファイル31cに対する仕様情報61aでは、「width:4」が「width:8」に変わっている。また変更後のソースファイル31cに対する仕様情報61aでは、「signed:true」が「signed:false」に変わっている。このように、ソースファイル31a内のコードが書き換えられれば、仕様情報に示される動作仕様も変化する。なお仕様情報61aは、第1の実施の形態に示す変更後仕様情報の一例である。
【0066】
また、ソースファイル31aが同一であっても、異なる翻訳オプションを適用した場合には、異なる仕様情報が生成される。
図8は、仕様情報の第3の生成例を示す図である。
図8には、翻訳オプションとして、「NOALPHAL」を指定していない場合と指定した場合とにおける、ソースファイル31a内の「01 WK PIC S9(4)」の行の仕様の例が示されている。「NOALPHAL」の指定は、ソースファイル31a中の英子文字を大文字化しないことを示している。
【0067】
「NOALPHAL」を指定していない場合の仕様情報61には、コメント文「name-case-sensitivity:”capitalize”」が示される。それに対して「NOALPHAL」を指定している場合の仕様情報61bの対応するコメント文は「name-case-sensitivity:”sensitive”」である。
【0068】
このようにソースファイル31a中のコードが同じであっても、指定される翻訳オプションの違いが仕様情報61,61bに動作仕様の違いとしてコメント文で表される。
ソースファイル31aが同一であっても、異なるコンパイラそれぞれに対応する仕様定義情報を適用した場合には、異なる仕様情報が生成される。
【0069】
図9は、仕様情報の第4の生成例を示す図である。
図9には、異なるコンパイラに対応する仕様定義情報を適用して生成された、ソースファイル31a内の「01 WK PIC S9(4)」の仕様の例を示している。例えば仕様情報61は、F通社のコンパイラに対応する仕様定義情報を適用して生成されている。また仕様情報62は、M社のコンパイラに対応する仕様定義情報を適用して生成されている。
【0070】
F通社のコンパイラに対応する仕様定義情報を適用した場合の仕様情報61では、コメント文「sub-format:”f-tsu”」が示されている。それに対してM社のコンパイラに対応する仕様定義情報を適用した場合の仕様情報62における対応するコメント文は「sub-format:”m-focus”」である。
【0071】
ソースファイル31aが同一であっても、異なる実行環境設定を適用した場合には、異なる仕様情報が生成される。実行環境設定は、外付け情報31bに含まれる。
図10は、仕様情報の第5の生成例を示す図である。
図10には、実行環境の追加設定がない場合と、メッセージ出力先を変更する実行環境設定が指定された場合とにおける、ソースファイル31a内の「DISPLAY “TEXT” UPON SYSERR.」の行の仕様の例が示されている。
【0072】
実行環境の追加設定がない場合の仕様情報61では、「target-device:」の下に「type:”stdio”」と「kind:”stderr”」と記述されている。他方、メッセージ出力先を変更する実行環境設定31dが指定された場合の仕様情報61cでは、「target-device:」の下に、実行環境設定31dに示されたメッセージ出力先が記述されている。
図10の例では、実行環境設定31dにはメッセージ出力先が「type:”file”」、「path:”c:¥punch.txt”」であることが示されている。
【0073】
実行環境設定はソースファイル31aには現れず、アプリケーションの実行時に適用される情報である。実行環境の追加設定がない場合の仕様情報61と実行環境設定31dが指定された場合の仕様情報61cとでは、メッセージ出力先の実行時仕様が異なっている。すなわち実行環境設定31dを指定した場合の仕様情報61cを生成することにより、実行環境を想定したアプリケーションの仕様が認識できる。
【0074】
以上のように、アプリケーションを実行するプラットフォームに応じた仕様情報を生成することで、プラットフォーム移行時のアセスメントが容易となる。例えばあるベンダが提供するコンパイラでコンパイルして実行されていた移行対象資産を、別のベンダが提供するコンパイラでコンパイルして実行する場合において、移行前後での動作の違いを容易に比較できる。
【0075】
図11は、コンパイラを変更する場合のアセスメントの一例を示す図である。移行前のシステム200ではM社から提供されたコンパイラを用いてソースファイル31aをコンパイルしたアプリケーションを実行しているものとする。移行後のシステム300ではF通社から提供されたコンパイラを用いてソースファイル31aをコンパイルしたアプリケーションを実行することを予定しているものとする。この場合、ソースファイル31aについて、M社のコンパイラに対応する仕様定義情報を適用して、仕様情報61dが生成される。またソースファイル31aについて、F通社のコンパイラに対応する仕様定義情報を適用して、仕様情報62aが生成される。
図11の例では、ソースファイル31a中の「MOVE WK-X TO WK-N.」に対する仕様についての仕様情報61d,62a間での違いが示されている。
【0076】
M社のコンパイラでは、英数字項目からNATIONAL項目(各国語文字列型の項目)へ直接転記することができる。そのため仕様情報61dでは「MOVE WK-X TO WK-N.」の仕様として転記処理の内容が記述されている。
【0077】
他方F通社のコンパイラでは、英数字項目からNATIONAL項目へ直接転記することができない。そのため仕様情報62aでは「MOVE WK-X TO WK-N.」の仕様として翻訳エラーになることが記載されている。
【0078】
仕様情報61dと仕様情報62aとの違いは、差分抽出部130で抽出される。例えば移行元のプラットフォームに関する仕様情報61dの転記処理内容の記述が、移行先のプラットフォームに関する仕様情報62aで「error-id:”JMN3023I-S”」の翻訳エラーになった場合の修正ルールを予め用意しておくことができる。修正ルールには、例えば解決策「案1.転記元をFUNCTION NATIONAL(WK-X)に書き換える」が設定される。修正方法提案部150は、差分抽出部130が生成した仕様差分情報63と修正ルールとに基づいて、「案1.転記元をFUNCTION NATIONAL(WK-X)に書き換える」との提案メッセージを含む修正方法指示書65を生成する。このようにしてプラットフォームの移行の際に実施するべき修正内容が自動で生成される。
【0079】
なおソースファイル31aに記載されたプログラムには、IF文などによる制御構造が含まれる。仕様情報出力部120は、ソースファイル31a内の制御構造についても、1行ずつ仕様を解析して、その仕様をコメントとして仕様情報61に記載する。
【0080】
図12は、制御構造の部分の仕様の出力例を示す図である。
図12に示すようにIF文のような条件分岐があっても、すべての分岐先について1行ずつ仕様が解析され、仕様の記述が仕様情報61に出力される。なお、
図12に示す主要な項目の意味は次の通りである。「type」は文・節のタイプを示す。「spec」は仕様の分類を示す。「condition」は詳細を示す。「operands」は式の要素を示す。「name」は名前を示す。「class」はデータ型を示す。「width」はデータ長を示す。「format」はデータ形式を示す。「value」はデータの値を示す。「target」は動作の対象を示す。
【0081】
図12に示した例では、ソースファイル31a内にサブルーチンの呼び出し命令「CALL ”CBLABN” USING ABN-CODE」が含まれている。このようなサブルーチンを呼び出すプログラムでは、呼び出し先のサブルーチンをユーザが作成する場合と、製品で提供されている場合がある。移行前のプラットフォームでは製品で提供されていたサブルーチンを使用している顧客資産について、移行後のプラットフォームでは、該当サブルーチンをユーザが作成する場合がある。
【0082】
このような場合において、コンパイラを用いて顧客資産の構文解析を行っても、コンパイラは「このサブルーチンはユーザが定義している」と判定するのみであり、非互換の箇所の存在を検出できない。また移行前システムと移行後システムの仕様差を事前に洗い出す方法では、移行前後のサブルーチンサポート状況の比較を行うこととなり、システム組み合わせが増加すると組み合わせの管理が困難となる。
【0083】
それに対して、仕様情報出力部120は、行ごとの構文解析で把握できる仕様をコメント文として漏れなく追加する。これにより、サブルーチンの呼び出し先の仕様の違いも抽出可能である。
【0084】
図13は、サブルーチンの呼び出し先の仕様差抽出の一例を示す図である。なお、
図13では、仕様情報出力部120が追加するコメント文のうち着目対象の行のみを示し、その他のコメント文を省略している。
【0085】
移行前のプラットフォームに応じた仕様情報61では「kind:“service-routine“」と記載されていたコメントが、移行後のプラットフォームに応じた仕様情報62では「kind:“user-routine“」との記載に変化している。仕様情報61と仕様情報62との差分を抽出すれば、サブルーチンの呼び出し先の仕様差の抽出が可能となる。
【0086】
また仕様情報出力部120は、仕様定義情報に基づく仕様の抽出を1行ごとに行う場合、コンパイルであればエラーとなるような箇所があっても、それ以降の行についても仕様の抽出を続行する。これにより、エラー伝搬による動作変更箇所の抽出漏れが抑止される。
【0087】
図14は、エラー伝搬を抑止した仕様差抽出の一例を示す図である。
図14の例では、ソースファイル31a内のCALL文に未定義の定数が含まれている。コンパイラによる構文解析を行うと、未定義定数があることによりCALL文全体の評価が中断される可能性がある。それに対して、仕様情報出力部120は、未定義の定数があってもそれ以降の仕様の抽出を停止しない。そのためCALL文に未定義の定数が含まれていても、仕様情報61,62にはサブルーチンの呼び出し先の仕様差が正しく表される。また仕様情報61,62には、未定義の定数であることを示すコメントが記述される。
【0088】
また仕様情報出力部120は、外付け情報31bを参照して仕様情報を生成するため、コンパイル時には分からず、運用時に判明する仕様差について抽出することが可能である。例えば仕様情報出力部120は、運用時のパラメータ設定に応じて動作が変わる場合において、外付け情報31bに含まれる動作設定ファイルを参照して仕様差を正しく抽出する。
【0089】
図15は、運用時パラメータを参照することによる仕様差抽出の一例を示す図である。
図15の例では、ソースファイル31a内に「DISPLAY “TEXT” UPON SYSPUNCH」という行が含まれている。「DISPLAY SYSPUNCH」は、初期設定では標準出力(stdout)に文字を出力する命令である。
【0090】
移行元のシステムでは、外付け情報31bにA社仕様の動作設定ファイル31eが含まれていたものとする。動作設定ファイル31eには、特定のA社仕様として出力先を指定する情報「CBL_SYSPUNCH=stderr」が含まれている。この場合、移行元のシステムに応じた仕様情報61eでは、出力先が「stderr」であることを示すコメント文が含まれる。
【0091】
それに対して、移行先のシステムでは、動作設定ファイルによる出力先の指定がされていない。その場合、移行先のシステムに応じた仕様情報62では、出力先が初期設定のままの「stdout」であることを示すコメント文が含まれる。
【0092】
このように仕様情報出力部120は、仕様の出力結果に外付け情報の設定を反映させ、システム独自仕様を取り込んだ仕様コメントを出力することができる。これにより、コンパイラでは検出できない仕様差を検出可能となる。
【0093】
なお外付け情報には、システムを運用する会社ごとに異なる情報が設定される。移行前後のシステムの仕様を比較する場合、移行可能なシステムのすべての組み合わせについて比較することとなり、処理量が膨大となる。それに対して、移行されるソフトウェアに着目して、そのソフトウェアに適用する外付け情報を参照して使用情報を生成することで、処理量が少なくて済む。
【0094】
図16は、システムごとに異なる動作設定ファイルが存在する場合の仕様差抽出の一例を示す図である。例えばA社のシステム用には動作設定ファイル31eがあり、B社のシステム用には動作設定ファイル31fがあるものとする。ここでソースファイル31aに基づくアプリケーションを、A社のシステムとB社のシステムとのそれぞれから、動作設定ファイルを用いないシステムに移行させるものとする。この場合、動作設定ファイル31eを適用した仕様情報61e、動作設定ファイル31fを適用した仕様情報61f、および初期設定値を適用した仕様情報62が生成される。
【0095】
ソースファイル31aに基づくアプリケーションのシステム移行の際には、移行前の仕様情報61e,61fそれぞれと移行後の仕様情報62とのコメント文を比較するだけで差分抽出が可能となる。なお移行前システムと移行後システムの仕様差を事前に洗い出すツールを作成しようとすると、n個のシステムに対応する場合、全部でnC2通りのツールを作成することとなる。それに対して、ソースファイル31aに対してシステムごとの仕様情報を作成するのであれば、n個の仕様情報を作成するだけで済む。
【0096】
次に、アプリケーションのプラットフォーム移行時の仕様情報生成処理について詳細に説明する。
図17は、仕様情報生成処理の手順の一例を示すフローチャートである。以下、
図17に示す処理をステップ番号に沿って説明する。
【0097】
[ステップS101]仕様情報出力部120は、移行対象資産一覧を取得する。例えば仕様情報出力部120は、ユーザから、移行元のシステムに実装されているソフトウェア資産のうちの、移行先のシステムに移行させるソフトウェア資産を示す移行対象資産一覧の入力を受け付ける。
【0098】
[ステップS102]仕様情報出力部120は、稼働システムを示す稼働システム情報を取得する。例えば仕様情報出力部120は、稼働システム情報として、ユーザから、移行前のシステムの識別情報と移行後のシステムの識別情報との組の入力を受け付ける。
【0099】
[ステップS103]仕様情報出力部120は、稼働システム情報に示されるシステムに応じた仕様定義を記憶部110から読み込む。
[ステップS104]仕様情報出力部120は、取得した移行対象資産一覧に示される移行対象資産に含まれるすべての外付け情報資産についてステップS105の処理が完了するまで、ステップS105の処理をループする。
【0100】
[ステップS105]仕様情報出力部120は、外付け情報の解析処理を行う。この処理の詳細は後述する(
図18参照)。
[ステップS106]仕様情報出力部120は、すべての外付け情報資産についてステップS105の処理が完了したら、処理をステップS107に進める。
【0101】
[ステップS107]仕様情報出力部120は、取得した移行対象資産一覧に示される移行対象資産に含まれるすべてのソースファイルについてステップS108の処理が完了するまで、ステップS108の処理をループする。
【0102】
[ステップS108]仕様情報出力部120は、ソースファイル解析処理を行う。この処理の詳細は後述する(
図25参照)。
[ステップS109]仕様情報出力部120は、すべてのソースファイルについてステップS108の処理が完了したら仕様情報生成処理を終了する。
【0103】
図18は、外付け情報解析処理の手順の一例を示すフローチャートである。以下、
図18に示す処理をステップ番号に沿って説明する。
[ステップS121]仕様情報出力部120は、外付け情報の種別を分析する。仕様情報出力部120は、外付け情報が環境変数一覧であれば処理をステップS122に進める。また仕様情報出力部120は、外付け情報が実行時オプションファイルであれば処理をステップS126に進める。さらに仕様情報出力部120は、外付け情報が動作設定ファイルであれば処理をステップS129に進める。
【0104】
[ステップS122]仕様情報出力部120は、環境変数一覧に示されるすべての変数定義についてステップS123~S124の処理が完了するまで、ステップS123~S124の処理をループする。
【0105】
[ステップS123]仕様情報出力部120は、システムごとの仕様定義情報に示されるシステム利用環境変数一覧テーブル内に、環境変数一覧に含まれる変数定義の変数名があるか否かを調査する。システム利用環境変数一覧テーブルは、アプリケーションを実行するシステムで提供される変数の一覧である。
【0106】
図19は、システム利用環境変数一覧テーブルの一例を示す図である。システム利用環境変数一覧テーブル71には、例えばシステム利用環境変数を示す項目名「Key」に対応付けて、システム利用環境変数の変数名が設定されている。
【0107】
以下、
図18の説明に戻る。
[ステップS124]仕様情報出力部120は、環境変数一覧に含まれる各変数の変数名に対応するレコードを環境変数一覧テーブルに格納する。環境変数一覧テーブルには、システム利用環境変数一覧テーブルに含まれる変数か否かの調査結果が含まれる。
【0108】
図20は、環境変数一覧テーブルの一例を示す図である。環境変数一覧テーブル72には、「Key」、「Value」、「システムフラグ」の欄が設けられている。「Key」の欄には、変数名が設定される。「Value」の欄には、変数の値が設定される。「システムフラグ」の欄には、システム利用環境変数一覧テーブルに含まれる変数か否かを示すシステムフラグが設定される。例えばシステム利用環境変数一覧テーブルに含まれる変数であればシステムフラグ「1」が設定され、システム利用環境変数一覧テーブルに含まれない変数であればシステムフラグ「0」が設定される。
【0109】
以下、
図18の説明に戻る。
[ステップS125]仕様情報出力部120は、すべての変数定義について処理が完了したら外付け情報解析処理を終了する。
【0110】
[ステップS126]仕様情報出力部120は、実行時オプションファイルに示されるすべての実行時オプションについてステップS127の処理が完了するまでステップS127の処理をループする。
【0111】
[ステップS127]仕様情報出力部120は、実行時オプションテーブルに、実行時オプションに対応するデータを格納する。
図21は、実行時オプションテーブルの一例を示す図である。実行時オプションテーブル73には、「Key」と「Value」の欄が設けられている。「Key」の欄には、実行時オプションとして使用される実行環境変数の変数名が設定される。「Value」の欄には、実行環境変数が設定されたファイルの識別情報(ファイルの場所、ファイル名など)が設定される。
【0112】
以下、
図18の説明に戻る。
[ステップS128]仕様情報出力部120は、すべての実行時オプションについて処理が完了したら外付け情報解析処理を終了する。
【0113】
[ステップS129]仕様情報出力部120は、動作設定ファイルに示されるすべての動作設定についてステップS130の処理が完了するまで、ステップS130の処理をループする。
【0114】
[ステップS130]仕様情報出力部120は、機能ごとの動作設定テーブルにデータを格納する。
図22は、動作設定テーブルの一例を示す図である。動作設定テーブル74には、「Key」と「Value」との欄が設けられている。「Key」の欄には、機能の名称が設定される。「Value」の欄には、機能を指定する値が設定される。
【0115】
以下、
図18の説明に戻る。
[ステップS131]仕様情報出力部120は、すべての動作設定について処理が完了したら外付け情報解析処理を終了する。
【0116】
このようにして外付け情報が解析される。外付け情報解析処理は、ユーザが任意に設定した外付け情報に限らず、システム固有の外付け情報についても実施される。
図23は、環境変数一覧から環境変数一覧テーブルへのデータ登録処理の一例を示す図である。仕様情報出力部120は、実行時の環境変数を、システムの環境変数・ユーザ環境変数のほか、実行環境変数を定義した実行環境変数定義ファイル81から読み込む。実行環境変数定義ファイル81には環境変数一覧が含まれる。環境変数一覧には、「key=value」の形式で環境変数が定義されている。仕様情報出力部120は、実行環境変数定義ファイル81内の環境変数の定義式それぞれに対応するレコードを環境変数一覧テーブル72に追加する。仕様情報出力部120は、環境変数の定義式の左辺の値を、追加したレコードの「Key」の欄に設定する。さらに仕様情報出力部120は、環境変数の定義式の右辺の値を、追加したレコードの「Value」の欄に設定する。実行環境変数定義ファイル81に定義された環境変数はシステム利用環境変数ではないため、該当レコードのシステムフラグの欄には「0」が設定される。
【0117】
図24は、動作設定ファイルから動作設定テーブルへのデータ登録処理の一例を示す図である。移行対象資産全体の動作を環境変数で指定するケースのほかに、特定の機能の動作を設定する外付け情報を利用することがある。その場合、外付け情報として例えば動作設定ファイル82が用いられる。
【0118】
図24に示す動作設定ファイル82は、GUI(Graphical User Interface)画面を作成する機能において、画面表示の動作設定を行うファイルである。動作設定ファイル82には「key value」の形式で、画面表示の動作設定が定義されている。なお、”*”から始まる文字列はコメント文である。動作設定ファイル82に示されている動作設定より、GUIウィンドウのタイトル、使用するフォント名、使用するフォントのサイズ、GUIウィンドウの表示位置などが定義されている。
【0119】
仕様情報出力部120は、動作設定ファイル82内の動作設定それぞれに対応するレコードを動作設定テーブル74に追加する。仕様情報出力部120は、動作設定の左側の値を追加したレコードの「Key」の欄に設定する。さらに仕様情報出力部120は、動作設定の右側の値を追加したレコードの「Value」の欄に設定する。
【0120】
外付け情報解析によって環境変数一覧テーブル72、実行時オプションテーブル73、および動作設定テーブル74を参照して、ソースファイルの解析を行うことで、アプリケーションの実行時の状況に応じた動作仕様を抽出することができる。
【0121】
次にソースファイル解析処理について詳細に説明する。
図25は、ソースファイル解析処理の手順の一例を示すフローチャートである。以下、
図25に示す処理をステップ番号に沿って説明する。
【0122】
[ステップS141]仕様情報出力部120は、以降の解析に用いる外付け情報をコメント文として仕様情報に出力する。
[ステップS142]仕様情報出力部120は、ソースファイル内のすべての行および字句についてステップS143~S151の処理が完了するまで、ステップS143~S151の処理をループする。
【0123】
[ステップS143]仕様情報出力部120は、処理対象の行または字句の種別を分析する。仕様情報出力部120は、行または字句が変数定義であれば処理をステップS144に進める。また仕様情報出力部120は、行または字句が処理命令であれば処理をステップS147に進める。さらに仕様情報出力部120は、行または字句が命令引数であれば処理をステップS149に進める。
【0124】
[ステップS144]仕様情報出力部120は、外付け情報解析の結果を参照し、移行元または移行先のシステムに対応する変数定義情報に基づいて変数定義情報を解析する。
[ステップS145]仕様情報出力部120は、変数一覧テーブルに解析結果を格納する。
【0125】
図26は、変数一覧テーブルの一例を示す図である。変数一覧テーブル75には、「Name」、「Class」、「width」、「format」の欄が設けられている。「Name」の欄には、変数名が設定される。「Class」の欄には、変数の型(文字列型:string、数値型:numericなど)が設定される。「width」の欄には、変数のデータ長が設定される。「format」の欄には、データ形式(日本語:Jpn、パック10進数:packed-decimalなど)が設定される。
【0126】
以下、
図25の説明に戻る。
[ステップS146]仕様情報出力部120は、変数仕様をコメント文として仕様情報に出力する。その後、仕様情報出力部120は処理をステップS152に進める。
【0127】
[ステップS147]仕様情報出力部120は、外付け情報解析の結果を参照し、移行元または移行先のシステムに対応する変数定義情報に基づいて命令種別を解析する。
[ステップS148]仕様情報出力部120は、命令種別ごとおよびシステムごとの命令仕様をコメント文として仕様情報に出力する。その後、仕様情報出力部120は処理をステップS152に進める。
【0128】
[ステップS149]仕様情報出力部120は、外付け情報解析の結果を参照し、移行元または移行先のシステムに対応する変数定義情報に基づいて引数種別を解析する。
[ステップS150]仕様情報出力部120は、変数一覧テーブル75を参照し、引数情報を取得する。
【0129】
[ステップS151]仕様情報出力部120は、引数仕様をコメント文として仕様情報に出力する。
[ステップS152]仕様情報出力部120は、すべての行および字句についてステップS143~S151の処理が完了したらソースファイル解析処理を終了する。
【0130】
仕様情報出力部120により移行前と移行後とのそれぞれの仕様情報が生成される。それらの仕様情報を差分抽出部130が比較することで、仕様差が明確となる。仕様差は、例えば差分レポート出力部140によって、ユーザが理解しやすい形式の差分レポートとして出力される。
【0131】
図27は、差分レポートの出力例を示す図である。ソースファイル31aに基づいて生成された移行前後の仕様情報61,62の差分を抽出した仕様差分情報63に基づいて、差分レポート64が生成される。差分レポート64には、移行前システムと移行後システムの情報(OSの種別、処理系の種別など)が記載されている。また差分レポート64には、移行対象資産の資産名に対応付けて、動作に差分が生じた行の行番号、指摘番号、指摘内容などが記載されている。指摘番号は、生じた差分の種別を示す番号である。
【0132】
差分レポート出力部140は、例えば差分レポート64をモニタ21に表示させる。これによりユーザは、移行対象資産を実行させるプラットフォームを移行させる場合に生じる動作の変更内容を正確に把握することができる。
【0133】
〔その他の実施の形態〕
第2の実施の形態ではCOBOLで記述されたソフトウェア資産を移行させる場合の例を用いているが、第2の実施の形態に示したアセスメント処理は、COBOLに限らず、他の言語で記述されたソフトウェア資産の移行にも同様に適用できる。
【0134】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
【符号の説明】
【0135】
1 ソフトウェア資産
1a ソースファイル
1b 外付け情報
2 第1仕様定義情報
3 第2仕様定義情報
4 第1仕様情報
5 第2仕様情報
6 仕様差分情報
7 差分レポート
10 情報処理装置
11 記憶部
12 処理部