以下、情報処理装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
(実施の形態)
本実施の形態における情報処理装置1のブロック図である。
情報処理装置1は、旧ソースプログラム格納部100、新ソースプログラム格納部101、修正ソースプログラム格納部102、修正関数識別情報取得部103、関数変換部104、修正箇所検出部105、および関数更新部106を備える。
関数変換部104は、変換命令パターン情報格納手段10401、修正箇所検出手段10402、修正箇所判断手段10403、自動変換手段10404、入力受付手段10405、および手動変換手段10406を備える。
旧ソースプログラム格納部100には、旧ソースプログラムが格納される。旧ソースプログラムは変換前のソースプログラムである。旧ソースプログラムは、変換対象となるソースプログラムと考えても良い。ソースプログラムはコンピュータが行う処理(演算、動作、通信など)の手順を指示したもののことである。ソースプログラムは、それぞれ、COBOL言語や、C言語、perl言語等、どのような言語のソースプログラムであっても良い。また、いわゆるスクリプト等もソースプログラムと考えても良い。また、これらの言語をカスタマイズした言語のソースプログラムであっても良い。本実施の形態においては、ソースプログラムは、ソースコードと考えても良い。また、ソースプログラムは一以上の関数(好ましくは二以上の関数)を有している。ここでの関数は、ソースプログラムも含む概念である。一のソースプログラムは、一のファイルで構成されていても良いし、複数のファイルで構成されていても良い。例えば、一のソースプログラムは、メインとなるソースプログラムのファイルと、このソースプログラムで引用される一以上の関数のソースプログラムのファイルで構成されていても良い。例えば、一のソースプログラムは、複数のソースプログラムで構成されるソースプログラム群と考えても良い。
旧ソースプログラム格納部100に旧ソースプログラムが蓄積される過程は問わない。かかることは、他の格納部に蓄積される情報に関しても同様である。なお、ここでは、旧ソースプログラム格納部100に格納されている旧ソースプログラムは、新ソースプログラムへの変換が開始された時点のものであるとする。なお、ここでの格納は一時記憶も含む概念である。旧ソースプログラム格納部100は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
新ソースプログラム格納部101には、新ソースプログラムが格納される。新ソースプログラムは、変換前のソースプログラムである旧ソースプログラムを変換して得られた変換後のソースプログラムである。ここでの変換とは、例えば、旧ソースプログラムを、言語や言語の仕様や系統の異なる新ソースプログラムに変換する変換であり、いわゆるマイグレーションと呼ばれるものである。新ソースプログラムは、言語や使用や系統等が異なる点を除けば上述した旧ソースプログラムと同様のものである。旧ソースプログラムから新ソースプログラムへの変換がどのように行われたかは問わない。例えば、従来の技術で説明したよう自動化した処理を利用して行われたものであっても良いし、手動で変換されたものであってもよい。新ソースプログラム格納部101に格納されている新ソースプログラムと、この新ソースプログラムの変換元となる旧ソースプログラムとは、互いに対応付けられて管理されていることが好ましい。例えば、それぞれの識別情報を有する管理情報が、旧ソースプログラム格納部100や新ソースプログラム格納部101等に蓄積されているようにしても良い。あるいは、新ソースプログラムと旧ソースプログラムの識別情報とを有する管理情報が、新ソースプログラム格納部101等に蓄積されていてもよい。ソースプログラムの識別情報は、例えばソースプログラム名や、ソースプログラムのファイル名である。なお、ここでの格納は一時記憶も含む概念である。新ソースプログラム格納部101は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
修正ソースプログラム格納部102には、修正ソースプログラムが格納される。修正ソースプログラムは、新ソースプログラムへの変換開始後に、一以上の関数が修正された旧ソースプログラムである。ここでの変換開始とは、実際の変換処理を開始した時点でも良いし、変換の依頼を行った時点と考えても良い。また、変換対象となる旧ソースプログラムが確定した時点と考えても良い。新ソースプログラム格納部101に格納されている、後述する関数更新部106による関数の更新が行われていない新ソースプログラムは、この変換開始時の旧ソースプログラムを変換して得られたものである。
修正ソースプログラムと旧ソースプログラムとは、対応付けて管理されることが好ましい。例えば、両方に同じプログラム名等の識別情報を付与しても良い。また、修正ソースプログラムと旧ソースプログラムとの対応関係が分かるような予め指定されたルールの識別情報をそれぞれに付与しても良い。また、修正ソースプログラムと旧ソースプログラムとの識別情報を対応付けて有する管理情報を、修正ソースプログラム格納部102等に蓄積するようにしても良い。
なお、各修正ソースプログラムには、旧ソースプログラムからの修正箇所が分かるように、旧ソースプログラムに対して行われた修正についての履歴や差分の情報が対応付けて管理されていてもよい。例えば、この履歴や差分の情報を修正ソースプログラムが有していても良い。また、この履歴や差分の情報は、修正ソースプログラムに含まれる関数別に管理されていても良い。なお、このようなソースプログラムに対する修正履歴や差分の管理は、CVS(Concurrent Versions System)と呼ばれるバージョン管理システムや、SVN(Subversion)と呼ばれるバージョン管理システム等において公知の技術であるので、ここでは説明を省略する。なお、修正プログラムに、旧ソースプログラムに対して行われた修正の履歴や差分が管理される場合であって、この履歴や差分を用いることで、旧ソースプログラムを取得することが可能である場合、旧ソースプログラムと、修正プログラムとを共用してもよく、旧ソースプログラム格納部100を、修正ソースプログラム格納部102と兼用してもよい。なお、ここでの格納は一時記憶も含む概念である。修正ソースプログラム格納部102は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
修正関数識別情報取得部103は、修正関数識別情報を取得する。修正関数識別情報は、修正ソースプログラムに含まれる関数のうちの、旧ソースプログラムの新ソースプログラムへの変換開始後に修正された関数の識別情報である。関数の識別情報とは、例えば、関数名である。また、一の関数が、メインとなる旧ソースプログラムや新ソースプログラムのファイルに対して異なるファイルを構成している場合、関数の識別情報は、関数のファイル名と考えてもよい。
修正関数識別情報取得部103は、どのように修正関数識別情報を取得しても良い。例えば、修正ソースプログラムと、この修正ソースプログラムの修正前の旧ソースプログラムとを比較して、異なる部分を検出し、検出された異なる部分を含む関数の識別情報を取得しても良い。また、修正プログラムに対応付けて格納されている履歴や差分の情報から、変換開始以降に修正された部分を検出して、修正された部分を含む関数の識別情報を取得しても良い。例えば、履歴や差分の情報が、修正された日時の情報を有している場合、この日時の情報が、変換開始日時以降であることを示す履歴や差分が含まれる関数の識別情報を取得する。また、履歴や差分の情報が、修正された関数名等の関数の識別情報等と対応付けて格納されている場合には、この関数の識別情報の情報を取得しても良い。また、旧ソースプログラムの関数が個別のファイルを構成している場合、そのファイルの修正日時が、変換開始日時以降である関数の識別情報(例えばファイル名)を修正関数識別情報として取得しても良い。変更開始日時としては、旧ソースプログラムのファイル等の最終修正日時を用いるようにしてもよい。また、上述したような旧ソースプログラムの修正箇所を上述したようなバージョン管理システム等で管理している場合等においては、このシステムから、変換開始以降に修正された箇所を含む関数の識別情報を取得しても良い。また、旧ソースプログラムを修正したユーザ等が、修正時に手作業で記録した修正した関数の識別情報を、図示しない入力手段等を介して修正関数識別情報取得部103が受け付けることで、修正関数識別情報を取得してもよい。
修正関数識別情報取得部103は、通常、MPUやメモリ等から実現され得る。修正関数識別情報取得部103の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
関数変換部104は、修正関数識別情報取得部103が取得した修正関数識別情報が示す関数を変換する。関数変換部104は、関数を新ソースプログラム格納部101に格納されている新ソースプログラムに対応した関数に変換する。具体的には、関数を、新ソースプログラムと同様の言語や言語の仕様や系統に適合した関数に変換する。関数変換部104は、例えば、修正ソースプログラム内の修正関数識別情報が示す関数をメモリ等の記憶媒体に読み出して変換する。ここでの変換は、自動変換でも良いし、ユーザによる手作業による変換でも良い。
なお、この実施の形態においては、関数変換部104が、修正関数識別情報が示す関数の修正箇所が予め指定された数または比率を超える場合には、関数を自動変換し、超えない場合は、関数を手作業で変換するようにした場合の例について説明する。
関数変換部104は、通常、MPUやメモリ等から実現され得る。関数変換部104の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
変換命令パターン情報格納手段10401には、第一命令パターン情報と、第二命令パターン情報とを有する一以上の変換命令パターン情報が格納される。第一命令パターン情報は、旧ソースプログラムの命令パターンを示す情報である。第二命令パターン情報は、新ソースプログラムの命令パターンを示す情報である。第一命令パターン情報とは、例えば、旧ソースプログラムにおいて利用可能な命令における文字列等の情報の出現するパターン等を示す情報である。また、第一命令パターン情報は、旧ソースプログラムの命令において出現する文字列等の情報のうちの一部、例えば、変数やリテラル文字や関数名等を正規表現化した情報であっても良い。ここではこの変数やリテラル文字や関数名等を正規表現化した情報をここでは例えば変換語と呼ぶ。第一命令パターン情報は、例えば、命令語と、ユーザ指定語と、変換語と、その他の文字列とのうちの1以上の組み合わせで構成される。ユーザ指定語は、ユーザが指定した文字列である。また、命令パターンを、第一ソースプログラムにおける予約語(例えば命令語等)の出現するパターン、非予約語(例えば、変数やリテラル文字や関数名等)の出現するパターン、または予約語および非予約語の出現するパターンと考えても良く、この場合、第一命令パターン情報は、例えば、第一ソースプログラムにおける予約語の出現するパターン、非予約語の出現するパターン、または予約語および非予約語の出現するパターンの少なくとも一つを示す情報であってもよい。具体例を挙げると、第一命令パターン情報は、「命令語 <引数1> <引数2>」という予約語と非予約語の配列パターンを示す情報である。ただし、この場合、命令語は、「OPEN」や「MOVE」、「CALL」等の予約語であり、「<引数1>」、「<引数2>」は変数文字列である非予約語である。また、第一命令パターン情報は、特定の予約語、例えば命令語と不特定の予約語とがどのような順番で配列されているかを示す情報等であっても良い。予約語とは、プログラミング言語の仕様等で定められた、変数名や関数名、クラス名等の識別子名として使用できない字句要素である。
第二命令パターン情報については、新ソースプログラムにおいて利用可能な命令における文字列等の情報の出現するパターン等を示す情報である点を除けば、上記第一命令パターン情報と同様であるので、ここでは詳細な説明は省略する。一の変換命令パターン情報に含まれる第一命令パターン情報と第二命令パターン情報とは、それぞれ変換前の命令パターン情報と、変換後の命令パターン情報とに相当する。つまり、一の変換命令パターン情報に含まれる第一命令パターン情報を、新ソースプログラムに対応した言語や言語の仕様や系統となるように変換したものが、同じ変換命令パターン情報に含まれる第二命令パターン情報である。変換命令パターン情報格納手段10401は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
修正箇所検出手段10402は、修正関数識別情報が示す修正ソースプログラムの関数の、関数の修正元となる旧ソースプログラムの関数に対する修正箇所を示す情報を検出する。修正箇所検出手段10402は、どのように修正箇所を検出しても良い。例えば、修正関数識別情報が示す修正ソースプログラムの関数と、この関数の修正元となる旧ソースプログラムの関数とを比較して、異なる箇所を、修正箇所として示す情報を取得しても良い。比較は、文字ごとの比較であっても良いし、予め指定された文字や、スペースや制御コード等で区切られた文字列ごとの比較であってもよい。また、上述したように、修正ソースプログラムについての修正箇所の履歴や差分等が管理されている場合等には、修正箇所情報が示す関数内の、履歴や差分の情報が新ソースプログラムへの変換処理後に修正されたことを示す箇所を、修正箇所として検出して良い。修正箇所が、新ソースプログラムへの変換処理後に修正されたか否かは、例えば、履歴や差分の情報に対応付けられた修正が行われた日時等を示す情報と、変換処理が行われた日時との情報を比較することで判断可能である。
ここで述べる修正箇所の単位は、文字単位であってもよいし、スペースや改行コード等の予め指定されたコード(例えば制御コード)等で区切られた文字列単位であっても良い。修正箇所検出手段10402は、修正箇所の位置を示す情報等を更に取得しても良い。
修正箇所検出手段10402は、通常、MPUやメモリ等から実現され得る。修正箇所検出手段10402の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
修正箇所判断手段10403は、修正箇所検出手段10402が検出した修正箇所が、予め指定された数または比率を超えるか否かを判断する。なお、修正箇所数または比率が同じである場合は、指定された数または比率を超えたこととして扱うようにしても良いし、超えていないこととして扱うようにしても良い。ここでの修正箇所の単位は、上記と同様の、文字単位としても良いし、スペース等で区切られた文字列単位(例えば、単語や文単位)でも良いし、行単位でも良い。修正箇所判断手段10403は、例えば、修正箇所検出手段10402が検出した修正箇所の数(例えば、修正された文字数や単語数や文数や行数等)をカウントする。そして、カウントして得られた値と、予め指定されている数とを比較して、予め指定された数を超えるか否かを判断する。また、修正箇所の数の、修正された関数を構成する文字の文字数や文字列数に対する比率や、修正されていない文字や文字列に対する比率等を算出して、その算出した比率が、予め指定された比率を超えるか否かを判断する。予め指定された数または比率を示す情報は、例えば、関数変換部104内の図示しない記憶媒体等の格納部に予め蓄積しておくようにすればよい。
修正箇所判断手段10403は、通常、MPUやメモリ等から実現され得る。修正箇所判断手段10403の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
自動変換手段10404は、修正箇所判断手段10403が、修正箇所が予め指定された数または比率を超えると判断した場合に、修正関数識別情報が示す修正ソースプログラム内の関数の第一命令パターン情報に対応する箇所を、第一命令パターン情報に対応する第二命令パターン情報に対応するように変換する。自動変換手段10404は、例えば、メモリ等の記憶媒体に読み出した修正ソースプログラム内の修正関数識別情報が示す関数を変換する。例えば、第一命令パターン情報が正規表現化された命令パターンである場合、自動変換手段10404は、修正関数識別情報が示す関数の、第一命令パターン情報に一致する箇所を、第一命令パターン情報に対応する第二命令パターン情報に対応する命令パターンを有するものとなるよう変換する。例えば、自動変換手段10404は、修正された関数内の第一命令パターン情報に対応する箇所から、第一命令パターン情報の変換語に対応する文字列を取得し、この第一命令パターン情報に対応する第二命令パターン情報内の変換語を、取得した文字列で置き換え、置き換えた第二命令パターン情報で第一命令パターン情報に対応する箇所を更新することで、関数を自動変換する。ここでの更新とは、置換や上書き等を意味する。なお、自動変換手段10404は、修正箇所検出手段10402が検出した修正箇所を含む部分だけを変換対象として、変換命令パターン情報を用いて自動変換してもよい。
自動変換手段10404は、通常、MPUやメモリ等から実現され得る。自動変換手段10404の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
入力受付手段10405は、修正箇所判断手段10403が、修正箇所が予め指定された数または比率を超えないと判断した場合に、修正関数識別情報が示す修正ソースプログラム内の関数に対して、ユーザの手作業による、関数を変換する入力を受け付ける。関数を変換する入力とは、修正ソースプログラム内の修正箇所を有する関数を、新ソースプログラムに対応する言語や言語の仕様や系統の関数に変換するための入力である。関数を変換する入力は、例えば、関数の修正箇所を指定した入力であることが好ましい。
なお、修正箇所検出部105が検出した修正箇所を示す情報を、図示しない記憶媒体等に蓄積しておくようにし、入力受付手段10405が入力受付を行う前に、この修正箇所を示す情報が示す修正箇所を他の部分に視覚的に区別されるようにして、関数を図示しない出力部から出力するようにしてもよい。このような出力結果を参照することで、修正者は、手作業で変換すべき修正箇所を容易に把握することが可能となる。なお、視覚的に句別するとは、例えば、文字色や下線の有無等を修正されていない部分と異なるものとすることである。
ここでの受け付けは、キーボードやマウス、タッチパネルなどの入力デバイスから入力された情報の受け付け、有線もしくは無線の通信回線を介して送信された情報の受信、光ディスクや磁気ディスク、半導体メモリなどの記録媒体から読み出された情報の受け付けなどを含む概念である。入力手段は、テンキーやキーボードやマウスやメニュー画面によるもの等、何でも良い。入力受付手段10405は、テンキーやキーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。
手動変換手段10406は、入力受付手段10405が受け付けた入力を用いて、修正関数識別情報が示す修正ソースプログラム内の関数を変換する。手動変換手段10406は、例えば、メモリ等の記憶媒体に読み出した修正ソースプログラム内の修正関数識別情報が示す関数を変換する。ここでの変換は、入力を受け付けた部分を入力された情報どおりの情報にすることである。具体的には、手動変換手段10406は、入力受付手段10405がユーザから受け付けた入力によって、関数の修正箇所を更新する。ここでの更新は、例えば、置換や上書きである。
手動変換手段10406は、通常、MPUやメモリ等から実現され得る。手動変換手段10406の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
なお、関数変換部104が修正箇所の数に関係なく自動変換しか行わない場合には、修正箇所検出手段10402、修正箇所判断手段10403、入力受付手段10405、および手動変換手段10406は省略するようにすればよい。
また、関数変換部104が修正箇所の数に関係なく手動による変換しか行わない場合には、変換命令パターン情報格納手段10401、修正箇所検出手段10402、修正箇所判断手段10403、および自動変換手段10404は省略するようにすればよい。
修正箇所検出部105は、修正関数識別情報取得部103が取得した修正関数識別情報が示す関数に対応した新ソースプログラム内の関数を検出する。修正関数識別情報が示す関数に対応した新ソースプログラム内の関数とは、具体的には、修正関数識別情報が示す関数の修正元となる旧ソースプログラム内の関数を変換して得られた新ソースプログラム内の関数である。
例えば、予め、旧ソースプログラムの関数と、この関数を変換して得られる新ソースプログラムの関数とを対応関係を管理しておくとともに、旧ソースプログラムの関数と、この関数を修正して得られる修正ソースプログラムの関数との対応関係を管理しておくことで、修正箇所検出部105は、これらの対応関係を辿って、修正関数識別情報が示す関数(すなわち、修正ソースプログラムの関数)に対応する新ソースプログラムの関数を検出することが可能となる。この対応関係の管理は、例えば、対応する関数の識別情報(関数名やファイル名)や、関数が配置されている行番号等を有する管理情報を用いて管理しても良いし、対応する関数の識別情報(例えば関数名)として、予め指定されたルールに従った識別情報を用いることで、関数の識別情報を用いて対応関係を管理するようにしても良い。例えば、旧ソースプログラムの関数と対応する新ソースプログラムの関数および修正ソースプログラムの関数のそれぞれに、旧ソースプログラムの関数の識別情報(例えば関数名)と一致する識別情報を付与することで、修正関数識別情報が示す関数(すなわち、修正ソースプログラムの関数)の関数の識別情報と一致する識別情報を有する新ソースプログラム内の関数を、修正関数識別情報が示す関数に対応する新ソースプログラムの関数を検出することが可能となる。また、新ソースプログラムの関数および修正ソースプログラムの関数のそれぞれに、対応する旧ソースプログラムの関数の識別情報と一致する識別情報を付与する代わりに、一致する識別情報に予め指定されたルールに沿った文字列等を付与した識別情報を付与するようにしても良い。例えば、旧ソースプログラムの関数の識別情報に対して「−1」等の予め指定された文字列を加えた識別情報を新ソースプログラムの関数に付与し、修正ソースプログラムの対応する関数には、旧ソースプログラムの関数の識別情報と同じ識別情報を付与するようにしても良い。この場合、新ソースプログラムの関数のうちの、「−1」という文字列を除外した識別情報が、修正関数識別情報が示す関数の識別情報と完全一致する関数を、修正関数識別情報が示す関数に対応する新ソースプログラムの関数として検出することが可能となる。なお、対応関係の管理は上記以外の管理であっても良い。
修正箇所検出部105は、通常、MPUやメモリ等から実現され得る。修正箇所検出部105の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
関数更新部106は、新ソースプログラム格納部101に格納されている新ソースプログラムの、修正箇所検出部105が検出した関数を、関数変換部104が変換した関数で更新する。例えば、修正箇所検出部105が検出した新ソースプログラムの関数を、関数変換部104が変換した関数で置換したり、上書きしたりする。この更新の際に、関数の識別情報は、更新前の識別情報としても良いし、関数変換部104が変換した関数の識別情報に変更しても良いし、新たなルールに従って生成された識別情報に変更しても良い。
関数更新部106は、通常、MPUやメモリ等から実現され得る。関数更新部106の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはROM等の記録媒体に記録されている。但し、ハードウェア(専用回路)で実現しても良い。
なお、本実施の形態の情報処理装置1においては、関数更新部106で更新された新ソースプログラム格納部101に格納されている新ソースプログラムを出力する出力部(図示せず)を備えていてもよい。ここでの出力とは、ディスプレイへの表示、プリンタへの印字、外部の装置への送信、記録媒体への蓄積、他の処理装置や他のプログラム等への処理結果の引渡し等を含む概念である。出力部は、ディスプレイやプリンタや通信デバイス等の出力デバイスを含むと考えても含まないと考えても良い。出力部は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。
次に、情報処理装置1の動作について図2のフローチャートを用いて説明する。
(ステップS201)修正関数識別情報取得部103は、修正ソースプログラム格納部102に修正ソースプログラムがあるか否かを判断する。一以上ある場合、ステップS202に進み、ない場合、処理を終了する。
(ステップS202)修正関数識別情報取得部103は、修正ソースプログラムに格納されている修正ソースプログラムから、修正された関数の識別情報である修正関数識別情報を取得する。修正関数識別情報は、例えば、修正された関数名である。取得した修正関数識別情報は、図示しないメモリ等の記憶媒体に一時記憶する。
(ステップS203)修正関数識別情報取得部103は、カウンターmに1を代入する。
(ステップS204)関数変換部104は、m番目の修正関数識別情報があるか否かを判断する。ある場合、ステップS205に進み、ない場合、処理を終了する。
(ステップS205)修正箇所検出手段10402は、m番目の修正関数識別情報が示す修正された関数をメモリ等に読み出し、読み出した修正された関数内において、修正箇所を検出する。
(ステップS206)修正箇所判断手段10403は、ステップS205において検出した修正箇所の数または比率が、予め指定された値を超えるか否かを判断する。超える場合、ステップS207に進み、超えない場合、ステップS215に進む。
(ステップS207)自動変換手段10404は、カウンターnに1を代入する。
(ステップS208)自動変換手段10404は、n番目の第一命令パターン情報が、変換命令パターン情報格納部10401に格納されているか否かを判断する。格納されている場合、ステップS209に進み、格納されていない場合、ステップS212に進む。
(ステップS209)自動変換手段10404は、n番目の第一命令パターン情報が示すパターンと一致する箇所があるか否かをパターンマッチングにより判断する。ある場合、ステップS210に進み、ない場合、ステップS211に進む。
(ステップS210)自動変換手段10404は、メモリ等に読み出したm番目の修正された関数内のn番目の第一命令パターン情報に一致する箇所を、n番目の第一命令パターン情報に対応する第二命令パターン情報を用いて変換する。
(ステップS211)自動変換手段10404は、カウンターnの値を1インクリメントする。そして、ステップS208に戻る。
(ステップS212)修正箇所検出部105は、m番目の修正関数識別情報が示す修正された関数に対応する新ソースプログラム内の関数を検出する。
(ステップS213)関数更新部106は、ステップS212で検出した関数を、ステップS210で第二命令パターン情報を用いて変換して得られた関数で更新する。
(ステップS214)修正関数識別情報取得部103は、カウンターmの値を1インクリメントする。そして、ステップS204に戻る。
(ステップS215)入力受付手段10405は、m番目の修正関数識別情報が示す修正された関数を修正するための入力を受け付けたか否かを判断する。修正するための入力とは、例えば、置換する文字列の入力や、文字列の削除の指示等である。受け付けた場合、ステップS216に進み、受け付けていない場合、ステップS217に進む。
(ステップS216)手動変換手段10406は、ステップS215で受け付けた入力を用いて、m番目の修正関数識別情報が示す修正された関数を変換する。
(ステップS217)手動変換手段10406は、m番目の修正関数識別情報が示す修正された関数に対する手動による変換が終了したか否かを判断する。例えば、入力受付手段10405が終了を示す入力を受け付けた場合に変換が終了したことを判断する。終了した場合、ステップS212に進み、終了していない場合、ステップS215に戻る。
以下、本実施の形態における情報処理装置1の具体的な動作について説明する。
この実施の形態においては、一例として、旧ソースプログラム格納部100に格納されている一の旧ソースプログラムが、JCL(JOB CONTROL LANGUAGE)で記述されたソースプログラムと、このソースプログラムで呼び出される複数の関数を示すソースプログラムとで構成されたソースプログラム群である場合を例に挙げて説明する。また、JCLで記述されたソースプログラムと、関数を示す各ソースプログラムは、それぞれ一のファイルで構成されているものとする。つまり、ここでのファイルは関数と考えても良い。関数を示すソースプログラムのファイル名を、ここでは関数名として用いる。
旧ソースプログラム格納部100に格納されている一の旧ソースプログラムを構成するソースプログラム群を管理する旧ソースプログラム管理表を示す図である。旧ソースプログラム管理表は、「ファイル名」と、「最終修正日時」という項目を有している。「ファイル名」は、ソースプログラム群を構成するソースプログラムのファイル名である。ここでは、このファイル名を関数識別情報とする。このファイル名は、関数名と考えても良い。「最終修正日時」は、各ファイルの最終修正日時であり、この最終修正日時が示す日時以降は、この旧ソースプログラム格納部100内のソースプログラムはロックされて修正不可の状態となっており、この最終修正日時が、ここでは各ファイルの新ソースプログラムへの変換開始の日時を示すものとする。なお、ここでは、ファイル名が「PRGJCL01」がJCLで記述されたソースプログラムであるとし、それ以外のファイルは、このソースプログラム呼び出される関数のファイルであるとする。
新ソースプログラム格納部101に格納されている一の新ソースプログラムを構成するソースプログラム群を管理する新ソースプログラム管理表を示す図である。この一の新ソースプログラムは、上述した一の旧ソースプログラムが変換されたものである。新ソースプログラム管理表は、旧ソースプログラム管理表と同様の、「ファイル名」と、「最終修正日時」という項目を有している。ここでは、旧ソースプログラムを構成するそれぞれのファイルに対応する変換後の新ソールプログラムのファイル名は、変換の際に予め指定されたルールに従って変更されているものとする。このファイル名のルールは、旧ソースプログラムのファイル名の末尾に「−1」を付与されたものを、変換後に得られたファイル名とする、というルールであるとする。例えば、旧ソースプログラムの関数の一つであるファイル「PRG101」を変換して得られた新ソースプログラムのファイルは、「PRG101−1」となる。
修正ソースプログラム格納部102に格納されている一の修正ソースプログラムを構成するソースプログラム群を管理する修正ソースプログラム管理表を示す図である。この一の修正ソースプログラムは、上述した一の旧ソースプログラムが変換されたものである。新ソースプログラム管理表は、旧ソースプログラム管理表と同様の、「ファイル名」と、「最終修正日時」という項目を有している。修正ソースプログラムの各ファイルの「ファイル名」は、ここでは、修正前の旧ソースプログラムの各ファイル名と同じ「ファイル名」としている。「ファイル名」が同じファイルのうちの、修正ソースプログラム管理表の「最終修正日時」の値が、旧ソースプログラム管理表の「最終修正日時」の値よりも新しいファイルが、一の修正ソースプログラムを構成するソースプログラム群のうちの、修正されたソースプログラムのファイルであり、「最終修正日時」の値が同じものは、一の修正ソースプログラムを構成するソースプログラム群のうちの、修正が行われていないソースプログラムのファイルを示している。
まず、修正関数識別情報取得部103は、修正ソースプログラム格納部102に修正ソースプログラムがあるため、修正ソースプログラムを構成する関数の中から、修正された関数の関数識別情報を取得する。ここでは、関数識別情報として、修正された関数のファイルからファイル名を取得する。ここでは、旧ソースプログラム管理表の「最終修正日時」と、修正ソースプログラム管理表の「最終修正日時」とを、それぞれに対応付けられた「ファイル名」が同じもの同士で順次比較して、値が異なる「最終修正日時」と対応付けられた「ファイル名」を取得する。つまり、最終修正日時が、新ソースプログラムに変換開始された時点の旧ソースプログラムの最終修正日時以降に修正されたソースプログラムのファイル名を取得する。なお、最終修正日同士を比較する代わりに、修正ソースプログラムの各ファイルの「最終修正日時」と、旧ソースプログラムの新ソースプログラムへの変換開始日時とを比較して、変換開始日時以降の「最終修正日時」と対応付けられた「ファイル名」を取得しても良い。ここでは、比較の結果、「PRG102」と「PRG104」という2つのファイル名を取得したとする。
次に、修正箇所検出手段10402は、まず、修正関数識別情報取得部103が取得したファイル名から1番目のファイル名「PRG102」を読み出し、修正ソースプログラム格納部102に格納されているソースプログラムのファイルのうちの、ファイル名が「PRG102」であるファイルをメモリ等に読み出し、修正箇所を検出する。ここでは、一例として、修正箇所検出手段10402は、同じファイル名のファイルを旧ソースプログラム格納部100から読み出し、両者を予め指定されたスペースまたはピリオドで区切られた文字列単位等で比較して、異なる箇所を修正箇所として検出する。なお、比較の際に、行番号等は、比較の対象から除外してもよい。
旧ソースプログラムを構成するファイル名が「PRG102」であるファイルのソースプログラムの一部を示す図である。
また、修正ソースプログラムを構成するファイル名が「PRG102」であるファイルのソースプログラムの一部を示す図である。
図6に示したソースプログラムと図7に示したソースプログラムとの比較の結果、例えば、図7において下線で示した部分が修正箇所として検出されたとする。
修正箇所判断手段10403は、修正箇所検出手段10402が、ファイル名が「PRG102」であるファイルについて検出した修正箇所の数をカウントする。ここでは、修正箇所として検出された予め指定されたスペースまたはピリオドで区切られた文字列をそれぞれ一の修正箇所として修正箇所数をカウントする。また、ファイル名が「PRG102」であるファイルに含まれる予め指定されたスペースまたはピリオドで区切られた文字列の数をカウントする。そして、カウントされた修正箇所数をこのカウントされたファイルを構成する文字列の数で除算して、修正箇所の比率を取得する。そして、予め用意された閾値を図示しない記憶媒体等から読み出し、カウント数が予め指定された閾値を超えるか否かを判断する。閾値は例えば「20%」であったとする。
ここで、修正箇所判断手段10403がカウントした修正箇所の比率が「40%」であり、閾値「20%」を超えたとすると、自動変換手段10404は、変換命令パターン情報格納手段10401に格納されている変換命令パターン情報を用いて修正されたファイル名が「PRG102」であるファイルのパターン変換を行う。
変換命令パターン情報格納手段10401に格納されている変換命令パターン情報を管理する変換命令パターン情報管理表である。変換命令パターン情報管理表は、「第一命令パターン情報」と「第二命令パターン情報」とを有する変換命令パターン情報を示すレコードを複数有している。変換命令パターン情報は、変換対象のプログラム中に出現する第一命令パターン情報に一致するパターンを有するソースコードを、対になる第二命令パターン情報に対応するように変換する場合に利用される情報である。例えば、「第一命令パターン情報」が「SOURCE−COMPUTER. 変数01」である場合には、「SOURCE−COMPUTER. ABC−2000」に変換することを示す。なお、ここでは例として、第一命令パターン情報および第二命令パターン情報内の「変数01」、「変数02」等の文字列「変数」と2桁の数字列との組み合わせは任意の変数名を示す。ここでは、例として、一の変換命令パターン情報の第一命令パターン情報と第二命令パターン情報とに含まれる同じ変数名は、同じ変数を示すものとする。また、変換命令パターン情報において、「#DEL」は、第一命令パターン情報に一致する文字列を削除することを意味する。
修正箇所判断手段10403は、まず、変換命令パターン情報管理表の一番目のレコードの「第一命令パターン情報」の値である「SOURCE−COMPUTER. 変数01」を読み出し、図7に示したような修正ソースプログラムのファイル名が「PRG102」であるファイルのソースプログラムにおいて、読み出した第一命令パターン情報である「SOURCE−COMPUTER. 変数01」と一致するソースコードを検出する。この検出は、例えば、正規表現を用いた検索と同様の検索によって実現される。そして、一致するソースコードが検出された場合、そのソースコードを、「SOURCE−COMPUTER. 変数01」に対応した「第二命令パターン情報」、即ち、変換命令パターン情報管理表の一番目のレコードの「第二命令パターン情報」の値である「SOURCE−COMPUTER. ABC−2000」に変換する。ここでは、例えば、上書きする。一致するソースコードがなければ、変換は行わない。
更に、変換命令パターン情報管理表の二番目以降のレコードについても、同様の処理を行って、ファイル名が「PRG102」であるファイルのソースプログラムの自動変換を行う。
このようにして変換されたファイル名が「PRG102」であるファイルのソースコードの一部を示す図である。
ここで、修正箇所判断手段10403が算出した修正箇所の比率が、閾値「20%」を超えなかったとする(即ち、20%以下であったとする)と、入力受付手段10405は、例えば、ファイル名が「PRG102」であるファイルを変換するための入力を受け付ける入力画面等を図示しないモニタ等に表示してソースコードを変換するための入力を受け付ける。
そして、手動変換手段10406は、受け付けた入力によって、ファイル名が「PRG102」であるファイルのソースコードを上書きしたり削除したりする。これにより、修正ソースプログラムを構成する関数のソースコードが変換される。
関数内の修正箇所が少ない場合、例えば、新ソースプログラム内の修正された関数等を参照して、修正箇所に対応する部分だけを手作業で変換することにより、容易に関数の変換が行えるとともに、手作業により変換することで、変換箇所の再確認が不要となる。この結果、精度の変換効率の両立を図ることができる。また、関数内の修正箇所が多い場合、新ソースプログラム内の修正された関数等を参照しても、そのまま利用できる部分や簡単な手直しで利用できる部分が少ないため、自動変換するほうが、迅速な変換が可能である。このため、本実施の形態のように、修正箇所の数が閾値を超える場合には、自動変換を行い、超えない場合は手動変換を行うようにすることで、変換の効率化と、変換精度の向上との両立を図ることができる。
次に、修正箇所検出部105は、新ソースプログラム格納部101に格納されている新ソースプログラムを構成するファイルから、修正ソースプログラムの変換されたファイルに対応したファイルを検出する。ここでは、旧ソースプログラムを構成するファイルのファイル名の末尾に「−1」を付与したファイル名が、変換後の新ソースプログラムのファイルのファイル名であり、旧ソースプログラムのファイルと、このファイルが修正された修正ソースプログラムのファイルとは、同じファイル名である。このため、ここでは、修正ソースプログラムの変換されたファイルのファイル名と一致する文字列を含むファイル名を有する新ソースプログラムのファイルを検出する。ここでは、変換されたファイルのファイル名が「PRG102」であるため、この文字列と一致する文字列を含むファイル名を有するファイルを新ソースプログラム格納部101において検索する。ここでは、ファイル名が「PRG102−1」であるファイルが検索される。
そして、関数更新部106は、検索されたファイルのソースコードを、修正ソースプログラムの変換されたファイルのソースコードで更新する。ここでは上書きする。そして、図4に示した新ソースプログラム管理表の「ファイル名」が「PRG102−1」であるレコードの「最新修正日時」の値を現在の日時に変更する。
同様にして、関数変換部104は、修正関数識別情報取得部103が取得した2番目のファイル名「PRG104」が示すファイルについても上記と同様の処理により変換を行い、変換したファイルを用いて、修正箇所検出部105と関数更新部106とにより新ソースプログラム格納部101に格納されている新ソースプログラムを更新する。
なお、本具体例においては、旧ソースプログラムのファイルと、修正ソースプログラムのファイルとを比較することで修正箇所を検出したが、旧ソースプログラムに対して行われた修正箇所が修正ソースプログラム等と対応付けられて管理されている場合、旧ソースプログラムとの比較をせずに修正箇所を検出しても良い。また、この場合、旧ソースプログラム格納部100は省略可能である。
以上、本実施の形態によれば、変換の作業中に行われた旧ソースプログラムの関数に対する修正を、迅速にかつ容易に新ソースプログラムに反映させることができる。これにより、例えば、マイグレーションの一連のプロセスにおける後追い作業工程の支援を効率的に行うことが可能となる。
なお、上記各実施の形態において、各処理(各機能)は、単一の装置(システム)によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
また、上記各実施の形態において、一の装置に存在する2以上の通信手段(情報送信部など)は、物理的に一の媒体で実現されても良いことは言うまでもない。
また、上記実施の形態において、各構成要素が実行する処理に関係する情報、例えば、各構成要素が受け付けたり、取得したり、選択したり、生成したり、送信したり、受信したりする情報や、各構成要素が処理で用いるしきい値や数式、アドレス等の情報等は、上記説明で明記していない場合であっても、図示しない記録媒体において、一時的に、あるいは長期にわたって保持されていてもよい。また、その図示しない記録媒体への情報の蓄積を、各構成要素、あるいは、図示しない蓄積部が行ってもよい。また、その図示しない記録媒体からの情報の読み出しを、各構成要素、あるいは、図示しない読み出し部が行ってもよい。
また、上記各実施の形態では、情報処理装置がスタンドアロンである場合について説明したが、情報処理装置は、スタンドアロンの装置であってもよく、サーバ・クライアントシステムにおけるサーバ装置であってもよい。後者の場合には、出力部や受付部は、通信回線を介して入力を受け付けたり、画面を出力したりすることになる。
また、上記各実施の形態において、各構成要素は専用のハードウェアにより構成されてもよく、あるいは、ソフトウェアにより実現可能な構成要素については、プログラムを実行することによって実現されてもよい。例えば、ハードディスクや半導体メモリ等の記録媒体に記録されたソフトウェア・プログラムをCPU等のプログラム実行部が読み出して実行することによって、各構成要素が実現され得る。
なお、上記各実施の形態における情報処理装置を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、変換前のソースプログラムである旧ソースプログラムを変換して得られた変換後のソースプログラムである新ソースプログラムが格納される新ソースプログラム格納部と、新ソースプログラムへの変換開始後に、一以上の関数が修正された旧ソースプログラムである修正ソースプログラムが格納される修正ソースプログラム格納部とにアクセス可能なコンピュータを、修正ソースプログラムに含まれる関数のうちの、旧ソースプログラムの新ソースプログラムへの変換開始後に修正された関数の識別情報である修正関数識別情報を取得する修正関数識別情報取得部と、修正ソースプログラム内の、修正関数識別情報取得部が取得した修正関数識別情報が示す関数を変換する関数変換部と、修正関数識別情報取得部が取得した修正関数識別情報が示す関数に対応した新ソースプログラム内の関数を検出する修正箇所検出部と、修正箇所検出部が検出した関数を、関数変換部が変換した関数で更新する関数更新部として機能させるためのプログラムである。
なお、上記プログラムにおいて、上記プログラムが実現する機能には、ハードウェアでしか実現できない機能は含まれない。例えば、情報を取得する取得部や、情報を出力する出力部などにおけるモデムやインターフェースカードなどのハードウェアでしか実現できない機能は、上記プログラムが実現する機能には含まれない。
また、このプログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
図10は、上記プログラムを実行して、上記実施の形態による情報処理装置を実現するコンピュータの外観の一例を示す模式図である。上記実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムによって実現されうる。
図10において、コンピュータシステム900は、CD−ROM(Compact Disk Read Only Memory)ドライブ905、FD(Floppy(登録商標) Disk)ドライブ906を含むコンピュータ901と、キーボード902と、マウス903と、モニタ904とを備える。
図11は、コンピュータシステム900の内部構成を示す図である。図11において、コンピュータ901は、CD−ROMドライブ905、FDドライブ906に加えて、MPU(Micro Processing Unit)911と、ブートアッププログラム等のプログラムを記憶するためのROM912と、MPU911に接続され、アプリケーションプログラムの命令を一時的に記憶すると共に、一時記憶空間を提供するRAM(Random Access Memory)913と、アプリケーションプログラム、システムプログラム、及びデータを記憶するハードディスク914と、MPU911、ROM912等を相互に接続するバス915とを備える。なお、コンピュータ901は、LANへの接続を提供する図示しないネットワークカードを含んでいてもよい。
コンピュータシステム900に、上記実施の形態による情報処理装置等の機能を実行させるプログラムは、CD−ROM921、またはFD922に記憶されて、CD−ROMドライブ905、またはFDドライブ906に挿入され、ハードディスク914に転送されてもよい。これに代えて、そのプログラムは、図示しないネットワークを介してコンピュータ901に送信され、ハードディスク914に記憶されてもよい。プログラムは実行の際にRAM913にロードされる。なお、プログラムは、CD−ROM921やFD922、またはネットワークから直接、ロードされてもよい。
プログラムは、コンピュータ901に、上記実施の形態による情報処理装置の機能を実行させるオペレーティングシステム(OS)、またはサードパーティプログラム等を必ずしも含んでいなくてもよい。プログラムは、制御された態様で適切な機能(モジュール)を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいてもよい。コンピュータシステム900がどのように動作するのかについては周知であり、詳細な説明は省略する。
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。