ソフトウェアマイグレーションシステム及び方法
【課題】マイグレーション対象のソフトウェアの業務要件のヒアリングや説明を不要としたソフトウェアマイグレーション技術を提供する。
【解決手段】旧言語のソフトウェアを構成する各FU(Functional Unit)のソースコードが分析され、その分析の結果を基に、旧言語のFU間の呼出し依存関係が把握される。そして、把握された呼出し依存関係に基づいて、旧言語のFUから新言語のFUへのFU変換と、正しくFU変換が行われたかどうかの内部レベル(ソースコードレベル)のテストが行われる。各FU変換についての各内部レベルのテストの結果が異常無しであれば、新言語のFUとそれに対応する旧言語のFUに対して、ソフトウェアの外部(例えばスクリーン或いはバッチ)から情報を入力し同じ振舞いが行われたかどうかの外部レベルのテストが行われる。外部レベルのテストの結果も異常無しであれば、ソフトウェアマイグレーションの完了となる。
【解決手段】旧言語のソフトウェアを構成する各FU(Functional Unit)のソースコードが分析され、その分析の結果を基に、旧言語のFU間の呼出し依存関係が把握される。そして、把握された呼出し依存関係に基づいて、旧言語のFUから新言語のFUへのFU変換と、正しくFU変換が行われたかどうかの内部レベル(ソースコードレベル)のテストが行われる。各FU変換についての各内部レベルのテストの結果が異常無しであれば、新言語のFUとそれに対応する旧言語のFUに対して、ソフトウェアの外部(例えばスクリーン或いはバッチ)から情報を入力し同じ振舞いが行われたかどうかの外部レベルのテストが行われる。外部レベルのテストの結果も異常無しであれば、ソフトウェアマイグレーションの完了となる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェアのマイグレーションに関する。
【背景技術】
【0002】
アプリケーションプログラム等のソフトウェアのマイグレーションの依頼をクライアントからサプライヤが受けて、サプライヤがクライアントに代わってソフトウェアマイグレーションを行うサービスが知られている。「ソフトウェアマイグレーション」とは、或る言語で記述されているマイグレーション対象のソフトウェアが有する全ての機能を引き継いだ、別の言語で記述されたソフトウェアを構築することである。以下、マイグレーション対象のソフトウェアを、「旧ソフトウェア」と言い、旧ソフトウェアを記述した第一の言語を「旧言語」と言う。それに対し、旧ソフトウェアの機能が引き継がれたソフトウェアを「新ソフトウェア」と言い、新ソフトウェアを記述した第二の言語を「新言語」と言う。なお、「旧」や「新」といった言葉は、便宜上使用している言語であって、マイグレーション対象のソフトウェアを記述した言語が必ずしも年代的に古く(例えばCobol或いはVisual Basic)、マイグレーション後のソフトウェアを記述した言語が必ずしも年代的に新しい(例えばJava(登録商標).NET)というわけではない。
【0003】
ソフトウェアマイグレーションでは、通常、サプライヤが、旧ソフトウェアでどんな業務が実行されるかといった業務要件をクライアントからヒアリングし、クライアントから聞いた業務要件に基づいて、新ソフトウェアを構築する(例えば非特許文献1)。
【0004】
【非特許文献1】http://www.systems-inc.co.jp/migration/index.htm#001
【発明の開示】
【発明が解決しようとする課題】
【0005】
従来のソフトウェアマイグレーションでは、サプライヤがクライアントから旧ソフトウェアの業務要件をヒアリングすることは、重要且つ必須である。なぜなら、ソフトウェアマイグレーションでは、旧ソフトウェアで行われる業務を新ソフトウェアで行うことができるかどうか(言い換えれば、全ての機能が正しく引き継がれたかどうか)を検証する必要があるが、クライアントから業務要件をヒアリングできていないと、上述のことを検証することができないためである。従って、サプライヤにとって、クライアントへの依存度が大きい。また、クライアントにとってみれば、旧ソフトウェアの業務要件をサプライヤに伝えることは、負担の大きい作業である。
【0006】
また、上記のヒアリングの目的は、全ての機能が正しく引き継がれたかどうかを検証することに加えて、どんな機能を有したソフトウェアを新言語で記述したら良いかの指針を知ることにある。つまり、従来のソフトウェアマイグレーションでは、マイグレーションと言っても、クライアントから聞いた業務要件に従って、新ソフトウェアを作成しており、新規開発となんら変わりが無い。
【0007】
また、ソフトウェアマイグレーションを外国(例えばインド或いは中国)で行うサプライヤもいる。外国でソフトウェアマイグレーションを行うためには、サプライヤ或いはクライアントが、オフショアの人間(典型的には外国人)に、クライアントから聞いた業務要件を説明し理解してもらう必要がある。しかし、それは、負担の大きい作業である。その大きな理由として、日本語と外国語という言語の違いや、日本と外国との間での文化の違いがある。例えば、旧ソフトウェアが、金融に関するソフトウェアの場合、旧ソフトウェアが有する業務要件をオフショアの人間に説明する前に、日本の金融システムについて説明し理解してもらう必要がある場合がある。その際、日本語と外国語という言語の違いから、日本の金融システムや、旧ソフトウェアが有する業務要件を、オフショアの人間に正確に伝えるのが難しい場合がある。
【0008】
従って、本発明の目的は、マイグレーション対象のソフトウェアの業務要件のヒアリングや説明を不要としたソフトウェアマイグレーション技術を提供することにある。
【課題を解決するための手段】
【0009】
旧言語のソフトウェアを構成する各FU(Functional Unit)のソースコードが分析され、その分析の結果を基に、旧言語のFU間の呼出し依存関係が把握される。そして、把握された呼出し依存関係に基づいて、旧言語のFUから新言語のFUへのFU変換と、正しく変換が行われたかどうかの内部レベル(ソースコードレベル)のテストが行われる。各FU変換についての各内部レベルのテストの結果が異常無しであれば、新言語のFUとそれに対応する旧言語のFUに対して、ソフトウェアの外部(例えばスクリーン或いはバッチ)から情報を入力し同じ振舞いが行われたかどうかの外部レベルのテストが行われる。外部レベルのテストの結果も異常無しであれば、ソフトウェアマイグレーションの完了となる。
【発明を実施するための最良の形態】
【0010】
図1は、本発明の一実施形態に係るソフトウェアマイグレーションシステムのハードウェア構成の一例を示す。
【0011】
通信ネットワーク60に、サーバ100と1又は複数の作業者端末50とが接続されている。
【0012】
作業者端末50は、作業者が使用する計算機である。作業者端末50は、例えば、入力装置51と、表示装置53と、CPU(Central Processing Unit)55と、記憶装置57と、ネットワークI/F(Interface)59とを備えている。なお、「作業者」とは、ソフトウェアマイグレーションに関わる作業を行う人間である。
【0013】
サーバ100は、作業者端末50に種々のサービスを提供する計算機である。サーバ100は、例えば、CPU107と、記憶装置105と、ネットワークI/F111とを備えている。記憶装置105は、例えば、主記憶装置(例えばメモリ)及び/又は補助記憶装置(例えば不揮発性の記憶メディアのドライブ)である。ネットワークI/F111は、通信ネットワーク60を介した通信を行うための通信装置(例えばNIC(Network Interface Card))である。
【0014】
本実施形態に係るソフトウェアマイグレーションは、多数の処理から構成されているが、それら多数の処理は、5つのフェーズに分類することができる。
【0015】
図2は、本実施形態に係るソフトウェアマイグレーションにおける5つのフェーズの遷移図である。
【0016】
この図に示すように、ソフトウェアマイグレーションにおけるフェーズとして、下記の5つ、
P1000:現行システム分析;
P2000:変換方式設計;
P3000:技術差異分析;
P4000:継続的インテグレーション;及び
P5000:新旧稼動比較テスト
がある(ここでの「P」は、Phaseの頭文字を表す)。以下、これら5つのフェーズの概要を説明する。
【0017】
P1000:現行システム分析
現行システム分析では、旧ソフトウェア(マイグレーション対象のソフトウェア)に含まれている各FU(Functional Unit)のキャプチャが行われる(以下、旧ソフトウェア内のFUを「旧FU」と言う)。具体的には、旧ソフトウェアのソースコードが分析され、FU間の呼出し依存関係(以下、「FU呼出し依存関係」と言う)が算出される。そして、算出されたFU呼出し依存関係を基に、どの旧FUをいつ新FU(新言語で記述されたFU)に変換するかのFU変換スケジュールが作成される。ここで重要な点は、旧ソフトウェアのソースコード分析では、旧ソフトウェアの業務要件を知る必要は全く無いことである。なお、「FU」とは、何かしらの振舞いを行う、プログラムの最小単位(最小振舞い単位)であり、典型的には、プロシージャ、サブルーチン、或いは関数と呼ばれるモジュールである。
【0018】
P2000:変換方式設計
旧ソフトウェアのソースコードを新ソフトウェアのソースコードに変換するためにどんな言語変換ツール(コンピュータプログラム)を用いるかの選定が行われる。また、言語変換ツールのテストランやテストラン結果の検証も行われる。その結果、旧ソフトウェアの何パーセントを自動で言語変換できるかがわかる。旧ソフトウェアの自動で言語変換できないパートについては、手動で言語変換する必要がある。
【0019】
P3000:技術差異分析
旧ソフトウェアの手動で言語変換する必要のあるパートについて、このフェーズが実行される。具体的には、旧ソフトウェアに関する技術(以下、「旧技術」と言う)と新ソフトウェアに関する技術(以下、「新技術」と言う)との比較が行われ、その比較の結果を基に、P4000(継続的インテグレーション)においてどのような処理を行うかのガイドラインを表す情報(以下、「ガイドライン情報」と言う)が決定される。例えば、旧技術ではサポートされているが新技術でサポートされていない仕様がある場合には、継続的インテグレーションにおいてどのような処理を行うかが決定される。
【0020】
P4000:継続的インテグレーション
P1000(現行システム分析)で作成されたFU変換スケジュールは、依存度の低い旧FUほど先に新FUへと変換するスケジュールとなっている。このフェーズでは、そのスケジュールに従って(必要に応じて、P3000(技術差異分析)で作成されたガイドライン情報が更に参酌されて)、依存度の低い旧FUから先に、以下の(処理1)〜(処理3)、
(処理1)旧FUから新FUへの変換(FUの言語変換、以下、「FU変換」と言う)、
(処理2)FU変換が正しく行われたか否かのテスト、
(処理3)テストの結果が異常無しであり、且つ、(処理1)で得られた新FUより依存度が低い新FUが存在する場合に、その新FUに(処理1)で得られた新FUをインテグレートする処理、
が行われる。全ての旧FUについて(処理1)〜(処理3)が行われることで、新ソフトウェアが構築される。このフェーズで、旧ソフトウェアから新ソフトウェアへのマイグレーションが暫定的に完了したことになる。この後に、P5000(新旧稼働比較テスト)が実行され、異常が無ければ、ソフトウェアマイグレーションが完全に完了したことになる。具体的には、P4000(継続的インテグレーション)では、FU変換の都度に、そのFU変換が正しく行われたか否かがテストされるが、そのテストは、内部レベルのテスト(ソースコードレベルのテスト)であり、次のP5000(新旧稼働比較テスト)で、外部レベルのテストが実行される。内部レベルのテストと外部レベルのテストの両方で異常が無ければ、ソフトウェアマイグレーションが正しく行われたことになる。
【0021】
P5000:新旧稼動比較テスト
前述したように、外部レベルのテストが実行される。外部レベルのテストでは、旧ソフトウェア内の旧AR(Action Receiver)と、新ソフトウェア内の新AR(その旧ARから得られた新AR)が、ソフトウェアの外部から同じ入力(以下、外部からの入力を「外部入力」と言う)を受ける。新旧のソフトウェアが、その外部入力に応答したアクションを行い、それらのアクションが同じか否かが検証される。このような検証は、新旧のソフトウェアにアクションが行われる都度に実行される。ここで、「AR」とは、外部入力を受け付けるFUのこと(つまり一種のFU)である。FUがARであるか否かは、P1000(現行システム分析)で把握される。また、「外部」とは、例えば、スクリーン(ARのユーザに対するインタフェース、典型的にはGUI(Graphical User Interface))、又はバッチプログラムである。従って、外部入力は、例えば、ユーザからスクリーンに対して情報が入力されて特定の操作が行われたことに起因してスクリーンから入力されるパラメータ値、或いは、バッチプログラムから入力されるパラメータ値がある。
【0022】
以上が、本実施形態に係るソフトウェアマイグレーションの概要である。ソフトウェアのマイグレーションでは、人間によって行われる処理もあれば、コンピュータプログラムによって行われる処理もある。
【0023】
図3は、本実施形態で実行される代表的なコンピュータプログラムを示す。なお、図3には、ソフトウェアマイグレーションの前に存在するコンピュータプログラムを実線で示しており、ソフトウェアマイグレーションの過程で追加されるコンピュータプログラムを点線で示している。
【0024】
本実施形態で実行される代表的なコンピュータプログラムとして、例えば、循環的複雑度算出プログラム121、旧テストプログラム122、新テストプログラム132、チェックポイント結果チェッカー123、ロガーフレームワーク124、ログチェッカー125、前バッチプログラム126、後バッチプログラム127、スクリーン遷移アナライザ128、チェックポイント外部化プログラム群129、言語変換ツール130、FU変換スケジューラ131及び比較プログラム133がある。これらのコンピュータプログラム121〜133は、サーバ100の記憶装置105に記憶され、記憶装置105からCPU107にロードされ、CPU107にて実行される。以下の説明において、コンピュータプログラムが主語になる処理は、実際にはそのコンピュータプログラムを実行するCPU107によって行われる。
【0025】
循環的複雑度算出プログラム121は、旧FU毎に、旧FUに対応したセクション関係に基づいて、循環的複雑度を算出する。なお、「セクション」とは、FUを構成する要素であり、FUの実行の際の分岐となる最小単位である。「セクション関係」とは、複数のセクションと各セクション間のリンクとで構成された関係を意味する。
【0026】
旧テストプログラム122は、旧ソフトウェアに所定の入力情報(値)をセットし対象の旧FUを呼び出すプログラムである。対象の旧FUが呼び出されると、後に詳述する仕組みによって、一つのログファイルが作成される。一つの旧FUに対応する旧テストプログラムの数は、旧FUの循環的複雑度と同数である。このため、一つの旧FUにつき、その旧FUの循環的複雑度と同数のログファイルが作成されることになり、それ故、旧ソフトウェアについて多数のログファイルが作成されることになる。旧テストプログラム122は、P1000(現行システム分析)で用意されて実行される。
【0027】
新テストプログラム132は、例えば旧テストプログラム122が変換されたプログラムであり、旧テストプログラム122と1対1で対応している。新テストプログラム132は、新ソフトウェアに所定の入力情報(値)をセットし対象の新FUを呼び出す。対象の新FUが呼び出されると、一つのログファイルが作成される。新テストプログラム132は、P4000(継続的インテグレーション)で実行される。具体的には、FU変換の都度に行われる内部レベルテストにおいて、新テストプログラム132が実行されて、ログファイルが作成される。内部レベルテストでは、新FUのログファイル(以下、「新ログファイル」と言う)が、その新FUに対応した旧FUのログファイル(以下、「旧ログファイル」と言う)と比較される。新ログファイルの中身と旧ログファイルの中身が実質的に同じであれば、異常無しと判断される。なお、内部レベルテストで参照される旧ログファイルは、P1000(現行システム分析)で作成されたファイルである。また、新旧のテストプログラム122、132は、いわゆる「イン・プロセス」として動作する(すなわち、新旧のソフトウェアの一つのプロセスとして動作する)。従って、旧テストプログラム122は、旧ソフトウェアと同じ言語で記述され、新テストプログラム132は、新ソフトウェアと同じ言語で記述される。それに対し、前バッチプログラム126及び後バッチプログラム127は、いわゆる「アウト・プロセス」とし動作する(すなわち、サーバ100の図示しないオペレーティングシステム(OS)上の、新旧のソフトウェアとは全く別のプロセス、として動作する)。
【0028】
チェックポイント結果チェッカー123には、チェックポイントとして取得すべき項目が定義されている。チェックポイント結果チェッカー123は、テストプログラム122又は132の実行の結果として旧ソフトウェア又は新ソフトウェアにセットされたチェックポイント結果値を、チェックする。
【0029】
ロガーフレームワーク124には、コンピュータプログラムが組み込まれている。ロガーフレームワーク124は、組み込まれているコンピュータプログラムにより、ログファイルを準備したり、チェックポイント結果チェッカー123によるチェックポイント結果値のチェックの結果を表すファイルを作成したりする。
【0030】
ログチェッカー125は、作成された多数の旧ログファイルの入力を受けて、それら多数のログファイルを分析することで、FU呼出し依存関係を特定したり、各内部レベルテストのテスト結果の良し悪しをチェックしたりする。
【0031】
前バッチプログラム126は、前バッチ処理が定義されたプログラムである。前バッチ処理とは、テストプログラム122又は132によって対象の旧FU又は新FUが呼び出される前に実行すべきバッチ処理のことである。
【0032】
後バッチプログラム127は、後バッチ処理が定義されたプログラムである。後バッチ処理とは、対象の旧FU又は新FUが呼び出されて旧ログファイル又は新ログファイルの作成が完了した後に実行すべきバッチ処理のことである。
【0033】
スクリーン遷移アナライザ128は、作成された多数の旧ログファイル又は新ログファイルの入力を受けて、それら多数の旧ログファイル又は新ログファイルを分析することで、旧ソフトウェア又は新ソフトウェアでのスクリーンの遷移の流れを特定する。
【0034】
言語変換ツール130は、FU変換(つまりFUの言語変換)を行うプログラムである。
【0035】
FU変換スケジューラ131は、ログチェッカー125に特定されたFU呼出し依存関係に基づいて、FU変換スケジュールを作成する。
【0036】
比較プログラム133は、各種の比較を実行する。比較プログラム133は、比較の種類毎に設けられていても良い。
【0037】
チェックポイント外部化プログラム群129は、チェックポイントの外部化を実現する複数のコンピュータプログラムの集合である。「チェックポイントの外部化」とは、本実施形態における一つの特徴的なコンセプトである。具体的には、チェックポイントをどこにするかを人間任せにするのではなく(例えば、個々の作業者のスキルレベルに依存するのではなく)、機械的且つ包括的にチェックポイントを取得することで、ヒューマンレベルでの見落としを防ぐことである。チェックポイント外部化プログラム群129は、主に、外部レベルテストの際に実行される(一部のコンピュータプログラムは、外部レベルテストと内部レベルテストの両方で実行される)。外部レベルテストでは、前述したように、新旧のソフトウェアが、新旧のARが受けた同一の外部入力に応じたアクションを行う。以下、新旧のARが同一の外部入力を受ける前のことを「外部入力受領前」と言い、新旧のソフトウェアが同一の外部入力に応答したアクションを行うことを「アクション実行」と言い、新旧のソフトウェアがそのアクションを行った後のことを「アクション実行後」と言う。
【0038】
図4は、チェックポイント外部化プログラム群129に含まれる複数のコンピュータプログラムを示す。
【0039】
それら複数のコンピュータプログラムとして、例えば、データベース(DB)比較プログラム1291、ファイル状況差分検出プログラム1292、ネットワークリクエスト検出プログラム1293、DB接続検出プログラム1294及び変数値差分検出プログラム1295がある。
【0040】
DB比較プログラム1291は、旧ソフトウェアがアクセスするDB(以下、「旧DB」と言う)内の全レコードと、新ソフトウェアがアクセスするDB(以下、「新DB」と言う)内の全レコードとの比較(以下、「全レコード比較」と言う)を行う。DB比較プログラム1291は、外部レベルテストで実行される。DB比較プログラム1291は、この比較を、アクション実行後の都度に行う。
【0041】
なお、新旧のソフトウェアの種類によっては、新旧のDBの更新の際に、更新時刻が新旧のDBに書き込まれることになる。同一の外部入力が新旧のARで受領されたことに応答した新旧のDBの更新を、正確に同じ時刻に行うことは困難であり、通常、新旧のDBの更新時刻は異なる。そうすると、ソフトウェアマイグレーションが正しく行われているとしても、全レコード比較では、不一致のレコードが存在することとなる。更新時刻に限らず、レコードの種類によって、レコードが新旧で同じにならないこともある。
【0042】
そこで、DB比較プログラム1291が、設定ファイルに基づいて動作を制御する構成とされ、その設定ファイルに、全レコード比較での対象から除外するレコードのカラムを表す情報(例えばテーブル名とカラム名との組み合わせ)が設定される。これにより、DB比較プログラム1291は、除外対象のカラムに属するレコード以外の全レコードを新旧で比較することになる。
【0043】
また、DB比較プログラム1291が、新旧のDBを特定するための情報を検出したならば、新旧のDBに属する全てのテーブルに関する情報(例えばテーブル名)を自動で取得する構成とされる。これにより、作業者が、設定ファイルに、新旧のDBを特定するための情報(例えば、新旧のDBの位置情報)を設定しておきさえすれば、新旧のDBに属する各テーブルに関する情報を設定しなくても、DB比較プログラム1291は、新旧のDBに属する全てのテーブルに関する情報を取得することができる。
【0044】
さて、ファイル状況差分検出プログラム1292は、旧ソフトウェアについてのファイル状況差分(以下、「旧ファイル状況差分」と言う)と、新ソフトウェアについてのファイル状況差分(以下、「新ファイル状況差分」と言う)とを検出する。ここで、「ファイル状況」とは、所定の記憶空間(例えば、サーバ100のファイルシステムにおけるルートディレクトリ以下の空間)にどんなファイルが存在しているかであり、具体的には、例えば、所定の記憶空間に存在するファイルのファイル名のリストである。ファイル状況差分検出プログラム1292は、外部レベルテストと内部レベルテストの両方で実行される。従って、「ファイル状況差分」は、内部ファイル状況差分と、外部ファイル状況差分の2種類がある。「内部ファイル状況差分」とは、対象FUが呼び出される前のファイル状況と、対象FUが呼び出されてログファイルが作成された後のファイル状況との差分である。「外部ファイル状況差分」とは、外部入力受領前のファイル状況と、アクション実行後のファイル状況との差分である。ファイル状況差分検出プログラム1292は、内部レベルテストでは、対象FUの呼び出し前とログファイルの作成後の都度に実行され、外部レベルテストでは、外部入力受領前とアクション実行後の都度に実行される。なお、内部レベルテストと外部レベルテストの各々では、比較プログラム133によって、旧ファイル状況差分と新ファイル状況差分が比較され、互いに実質的に一致するか否かが判定される。
【0045】
ネットワークリクエスト検出プログラム1293は、ネットワークI/F111を通じて何らかのリクエストが流れているか否かを監視し、流れていたらそのリクエストを検出する。ネットワークリクエスト検出プログラム1293は、外部入力受領前からアクション受領後にかけて監視を行う。ネットワークリクエスト検出プログラム1293は、外部レベルテストと内部レベルテストの両方で実行される。なお、内部レベルテストと外部レベルテストの各々では、比較プログラム133によって、新旧のソフトウェアについての監視の結果が比較される。
【0046】
DB接続検出プログラム1294は、旧ソフトウェアの旧DBに対するコネクションと新ソフトウェアの新DBに対するコネクションとがそれぞれアクション実行後に切断されたか否かを検出する。DB接続検出プログラム1294は、外部レベルテストで実行される。DB接続検出プログラム1294は、DB差分検出プログラム1291と同様に、アクション実行後の都度に、コネクションの切断の有無を検出する。
【0047】
変数値差分検出プログラム1295は、旧ソフトウェアについての全変数値差分(以下、「旧全変数値差分」と言う)と、新ソフトウェアについての全変数値差分(以下、「新全変数値差分」と言う)とを検出する。ここで、「全変数値」とは、サーバ100内に存在する全ての変数値のことである。変数値差分検出プログラム1295は、外部レベルテストと内部レベルテストの両方で実行される。従って、「全変数値差分」は、内部全変数値差分と、外部全変数値差分の2種類がある。「内部全変数値差分」とは、対象FUが呼び出される前の全ての変数値と、対象FUが呼び出されてログファイルが作成された後の全ての変数値との差分である。「外部全変数値差分」とは、外部入力受領前に存在する全ての変数値と、アクション実行後に存在する全ての変数値との差分である。変数値差分検出プログラム1295は、内部レベルテストでは、対象FUの呼び出し前とログファイルの作成後の都度に実行され、外部レベルテストでは、外部入力受領前とアクション実行後の都度に実行される。なお、内部レベルテストと外部レベルテストの各々では、比較プログラム133によって、旧全変数値差分と新全変数値差分が比較され、互いに実質的に一致するか否かが判定される。
【0048】
以下、図5を参照して、本実施形態に係るソフトウェアマイグレーションで行われる処理の流れを説明する。なお、図5において、作業者(例えばオフショアの人間)によって行われる処理を表すボックスの線を細くし、コンピュータによって行われる処理を表すボックスの線を太くしている。また、図5における「S」は、Stepの頭文字を表す。図5に記載の各ステップの番号は、図2に記載の各フェーズの番号に対応する。例えば、1000番台のステップに対応した処理は、P1000(現行システム分析)に所属する処理であり、4000番台のステップに対応した処理は、P4000(継続的インテグレーション)に所属する処理であり、5000番台のステップに対応した処理は、P5000(新旧稼動比較テスト)に所属する処理である。
【0049】
S1100:
旧ソフトウェアから複数の旧FUが把握される。具体的には、入力された旧ソフトウェアソースコードから複数の旧FUソースコードが把握される。ここで重要なことは、図6に例示するように、旧ソフトウェアソースコード201を所定の規則に従って形式的に区切ることで、結果として、旧FUソースコード201から複数の旧FUソースコードが特定されることである。従って、旧ソフトウェアが有する業務要件を理解して旧ソフトウェアソースコード201を旧ソフトウェアの業務要件単位で区切る(つまり意味的に区切る)ことは、全く必要ない。つまり、旧ソフトウェアがどんな業務要件を有するかということは全く考慮する必要が無い。このS1100の処理は、作業者によって行われるが、それに代えて、例えば、コンピュータプログラムが、上記の所定の規則に従って旧ソフトウェアソースコード201から複数の旧FUソースコードを把握することも可能である。なお、上記の所定の規則としては、例えば、第一種の所定のコード(例えば“Sub”)と第二種の所定のコード(例えば“End Sub”)との間を一つの旧FUソースコードとするという規則を採用することができる。
【0050】
各旧FU(各旧FUソースコード)について、下記S1200乃至S1600が行われる。以下、処理の対象となる旧FUを、「対象旧FU」と言い、対象旧FUのソースコードを、「対象旧FUソースコード」と言う。
【0051】
S1200:旧FUソースコードの分析
対象旧FUから複数のセクションが把握される。具体的には、対象旧FUソースコードから、複数のセクションソースコードが把握される。ここでも、対象旧FUソースコードが意味的に区切られるのではなく(すなわち、対象旧FUの機能を理解し機能毎に区切らえるのではなく)、形式的に区切られる(すなわち、所定の規則に従って区切られる)ことで、結果として、対象旧FUソースコードから複数のセクションソースコードが把握されることになる。S1200も、S1100と同様、作業者によって行われるが、それに代えて、例えば、コンピュータプログラムが、所定の規則に従って対象旧FUソースコードを複数のセクションソースコードに区切ることも可能である。
【0052】
S1300:セクション関係の構築
作業者が、セクション関係を構築する。すなわち、セクションとセクションとの関連付けが行われる。この結果、図7に例示するように、どのセクションがどのセクションに対して関連するかが定義される。図7では、丸が、セクションを表しており、矢印が、リンクを表している。図7から分かるように、セクションとセクションとの関連付けにより、多数通りのパスができる。パスは、リンクで結ばれた一連のセクションで構成される。セクション間の関連付けは、対象旧FUソースコードを基に機械的に行うことができる。つまり、ここでも、対象旧FUソースコードが有する機能が何であるかを理解する必要は無い。なお、S1300では、セクション関係情報(どのセクションがどのセクションにリンクを張られているかを表す情報)を基に、循環的複雑度分析プログラム121が、図7に例示したようなセクション関係を表すセクション関係情報を、作業者端末50の表示装置53に表示することができる。この場合、作業者端末50で実行される図示しないブラウザが、そのセクション関係情報が表すセクション関係(つまり図7に示す関係)を、表示装置53のディスプレイ画面に表示することができる。
【0053】
S1400:循環的複雑度の算出
循環的複雑度分析プログラム121が、セクション関連情報から、セクション数及びリンク数を把握し、把握したセクション数及びリンク数を用いて、循環的複雑度を算出する。循環的複雑度を算出する目的は、対象旧FUについて幾つの旧テストプログラム122を作成したら良いかを知るためである。備循環的複雑度数の計算式は、下記(式1)、
循環的複雑度=リンク数−セクション数+(1+リーフ数(終点セクション数))・・(式1)、
である。
【0054】
S1500:旧テストプログラム122の作成
作業者が、算出された循環的複雑度に基づく数の旧テストプログラム122を作成する。「循環的複雑度に基づく数」とは、循環的複雑度を考慮して決定された数のことであり、循環的複雑度と同じ数であっても異なる数であっても良い。本実施形態では循環的複雑度と同じ数とする。旧テストプログラム122は、複数のパスのうちの対象とするパスを経由させる情報を対象旧FUに入力することで、旧ソフトウェアのプロセスの結果としてのログファイルを出力させるためのコンピュータプログラムである。旧テストプログラム122の作成においても、旧ソフトウェアがどんな業務要件を有しているかを作業者は全く知らなくてよい。すなわち、本実施形態では、旧ソフトウェアの業務要件を把握することなく、いきなり、業務が有するプロセスを調べることになる。ちなみに、本実施形態の説明では、旧テストプログラム122(又は新テストプログラム123)が対象の旧FU(又は新FU)を呼び出すことで行われる振舞いのことを「プロセス」と言い、ARが外部入力を受けることで行われる振舞いのことを「アクション」と言う。
【0055】
S1600:対象の旧FUに対応した全ての旧テストプログラムの実行
対象旧FUに対応した全ての旧テストプログラム122が実行される。旧テストプログラム122が実行されると、旧ソフトウェアのプロセスの結果として旧ログファイルが作成される。一つの旧テストプログラム122の実行につき、一つの旧ログファイルが作成されるので、このS1600では、対象旧FUの循環的複雑度と同数の旧ログファイルが作成される。作成された旧ログファイルは記憶装置105に格納される。
【0056】
S1700:スケジューラ用テキストの作成
全ての旧FUについてS1200〜S1600が実行されると、旧ソフトウェアについて多数の旧ログファイルが作成されていることになる。ログチェッカー125が、それら多数の旧ログファイルを入力し、多数の旧ログファイルを分析して、スケジューラ用テキストを作成する。「スケジューラ用テキスト」とは、FU変換スケジューラ131に入力されるテキストファイルである。このテキストファイルには、複数のFU呼出し関係が記録されている。「FU呼出し関係」とは、どの旧FUからどの旧FUが呼び出されたかの関係である。
【0057】
S1800:FU変換スケジュールの作成
FU変換スケジューラ131が、入力されたスケジューラ用テキストを基に(例えば、複数のFU呼出し関係を基に)、FU呼出し依存関係を把握する。FU呼出し関係に対し、「FU呼出依存関係」とは、FUの呼出しの向きとFUの依存度とによって定まるFU間の関係である。FU呼出し依存関係の一例を図12に示す。図12の矢印の向きは、呼び出しの向きである。従って、例えば、FU11からFU10が呼び出され、FU10からFU2が呼び出され、FU2からFU1が呼び出される場合には、図12に示すような関係になる。末端(木構造におけるリーフ)に近いほど、依存度が低く、先端に近いほど(末端から遠いほど)、依存度が高いということになる。従って、FU1,FU3,FU5,FU7,FU12が、最も依存度が低く、FU2,FU4,FU8,FU9が、2番目に依存度が低く、FU6,FU10が、3番目に依存度が低く、FU11が、4番目に依存度が低い(つまり最も依存度が高い)、ということになる。図12では、FU4は、一つのFU3にのみ依存し、FU8は、二つのFU5及びFU7に依存し、この結果、FU8の方がFU4よりも依存度が高いように見えるが、末端FUからの距離が同じため、依存度も同じである。FU変換スケジューラ131は、把握されたFU呼出し依存関係を基に、依存度の低い旧FUからFU変換を行うことを表したFU変換スケジュールを作成する。
【0058】
S1800の終了が、P1000(現行システム分析)の終了である。この後、P2000(変換方式設計)が行われる。すなわち、複数の言語変換ツール130の中からこのソフトウェアマイグレーションでのFU変換に使用される言語変換ツール130が選定される。また、旧ソフトウェアの何パーセントを自動で言語変換できるかが特定される。旧ソフトウェアの自動で言語変換できないパートがあれば、そのパートについて、P3000(技術差異分析)が行われる。その後、P4000(継続的インテグレーション)が行われる。
【0059】
P4000(継続的インテグレーション)では、FU変換スケジュールに従って、依存度の低い旧FUから、以下のS4100〜S4300が行われる。
【0060】
S4100:FU変換
対象の旧FUから新FUへのFU変換が行われる。
【0061】
S4200:内部レベルテスト
対象の旧FUに対応する旧テストプログラム122を基に(例えば、旧テストプログラム122の言語が旧言語から新言語に言語変換ツール130を使用して変換されることにより)、新テストプログラム132が作成される(新テストプログラム132は、継続的インテグレーションの前に作成されていても良い)。そして、内部レベルテストが行われる。具体的には、例えば、対象の新FU(変換後の新FU)に対応した新テストプログラム132が実行されることで、対象の新FUに対応した新ログファイルが作成される。また、対象の新FUに対応した旧FUの旧ログファイルが記憶装置105から読み出される。そして、作成された新ログファイルが、読み出された旧ログファイルと比較される。それらのログファイルの内容が実質的に同じであれば、正しくFU変換が行われたということであり、故に、次のS4300(インテグレーション処理)が行われる。それらのログファイルの内容が実質的に違っていれば、手動で、新FUが編集される。
【0062】
S4300:インテグレーション処理
S4200で得られた新FUの呼出し先の新FUが既にあれば(S4200で得られた新FUよりも依存度の低い新FUが取得済みであれば)、その呼び出し先の新FUに、S4200で得られた新FUがインテグレートされる。
【0063】
以上のように、FU変換の都度に、内部レベルテストが実行され、内部レベルテストの結果に異常が無ければ、FU変換で得られた新FUが依存度のより低い新FUにインテグレートされる。図12の例で言えば、FU1が先にFU変換されており、その後に、FU2がFU変換され、FU2についての内部レベルテストの結果が異常無しであれば、FU2がFU1にインテグレートされる。
【0064】
以上の一連の処理で、旧ソフトウェアから新ソフトウェアへのソフトウェアマイグレーションが暫定的に完了する。この後に、P5000(新旧稼働比較テスト)で外部レベルテストが実行され、外部レベルテストの結果も異常無しであれば、旧ソフトウェアから新ソフトウェアへのソフトウェアマイグレーションが完全に完了する。P5000(新旧稼働比較テスト)では、以下のS5100及びS5200が行われる。
【0065】
S5100:スクリーン入力ケースデータの作成
複数のスクリーン入力ケースデータが作成される。「スクリーン入力ケースデータ」とは、作業者がどのスクリーンに対してどんなスクリーン入力を行うか(例えばどんな値を入力してどんなボタンを押すか)のケースを規定したデータである。一つのARにつき、そのARの循環的複雑度と同数のスクリーン入力ケースデータが作成される。また、スクリーン入力ケースデータは、新旧のARについてそれぞれ作成される。以下、旧ARに対応したスクリーン入力ケースデータを「旧スクリーン入力ケースデータ」と言い、新ARに対応したスクリーン入力ケースデータを「新スクリーン入力ケースデータ」と言う。
【0066】
全ての新旧のスクリーン入力ケースデータについて、S5200が実行される。
【0067】
S5200:外部レベルテストの実行
新旧のスクリーン入力ケースデータに従うスクリーン入力が新旧のスクリーンに対して行われると、新旧のARが、新旧のスクリーンから同一の外部入力を受ける。その外部入力に応じたアクションを、新旧のソフトウェアが実行する。また、新旧のアクションに関して、チェックポイント外部化プログラム群129も実行される。
【0068】
全ての新旧のスクリーン入力ケースデータについて、S5200が行われ、その結果、異常無しであれば、本実施形態に係るソフトウェアマイグレーションが完全に終了する。
【0069】
以下、図5を参照して説明した流れにおけるS1500以降について、詳細に説明する。
【0070】
<S1500(旧テストプログラム122の作成)>。
【0071】
前述したように、構築されたセクション関係には、多数のパスが存在する。一つのパスは、リンクで結ばれている一連のセクションで構成されている。旧テストプログラム122は、対象の旧FUについて対象のパスの経由が実行される(対象のパスを構成するセクションの並び順にセクションが呼び出されるようにする)ためのプログラムである。対象パスの経由の実行は、対象の旧FUにセットされる入力情報で定義される。入力情報は、旧テストプログラム122がセットする。従って、対象の旧FUの循環的複雑度と同数の旧テストプログラム122を作成するということは、対象の旧FUにおける多数のパスのうちの、その循環的複雑度と同数のパスが経由されるということ(別の言い方をすれば、その循環的複雑度と同数の異なる種類の入力情報を作成するということ)である。
【0072】
作業者は、テスティングフレームワークを土台とし、テスティングフレームワークにコンピュータプログラムを組み込むことで、旧テストプログラム122を作成する。本実施形態では、テスティングフレームワークとして、xUnitコンセプトをベースとしたフレームワークが利用される。なぜなら、年代的に古い言語(例えば、FORTRAN、Cobol、Visual Basic)、では、フレームワークが無いが、xUnitコンセプトをベースとしたフレームワークにコンピュータプログラムを組み込むことで作成された旧テストプログラム122であれば、そのような年代的に古い言語で記述されている対象旧FUに対しても、テストを実行することが可能であるためである。各旧テストプログラム122には、例えば、処理の実行手順が記述される。
【0073】
<S1600(旧テストプログラム122の実行)>。
【0074】
図8は、旧ソフトウェアの構成と、旧テストプログラム122から呼び出された後の旧ソフトウェアのプロセスの概要を示す。
【0075】
旧ソフトウェア120は、複数のSCを有する。「SC」とは、Structural Componentの略であり、一又は複数の旧FUの論理的な入れ物である。SCは、例えば、旧言語がビジュアルベーシックの場合、拡張子が“.frm”であるソースコードであり、旧言語がコボルの場合、拡張子が“.cbl”であるソースコードである。
【0076】
旧テストプログラム122の実行よりも前に、作業者によって、各旧FUに、ロガー301が設定される(すなわち、各旧FUソースコードに、ロガーステートメントが記述される)。ロガー301は、例えば、各旧FUのセクション毎に設定される。ロガー301の役割は、そのロガー301を有するセクションが呼び出されたことのログ(そのセクションがどのSC内のどの旧FU内のセクションであるかのログ)を旧ログファイルに書き込むことである。ロガー301は、旧ログファイルにログを書き込む前に、旧ログファイルの排他制御のために旧ログファイルにロックをかけ、その後に、旧ログファイルにログを書き込み、ログを書き込んだ後に、ロックを解除する。
【0077】
一つの旧テストプログラム122の結果として一つの旧ログファイルが作成されるが、その流れの概要は、例えば下記の通りである。
【0078】
まず、旧テストプログラム122が、対象の旧FU11に、その旧テストプログラム122に定義されている入力情報をセットする(S1)。
【0079】
次に、旧テストプログラム122が、ロガーフレームワーク124に、旧ログファイルの準備を要求する(S2)。ロガーフレームワーク124は、その要求に応答して、旧ログファイル#11を準備する(S3)。
【0080】
次に、旧テストプログラム122は、対象の旧FU11を呼び出す(S4)。この結果、S1でセットされた入力情報に応じたセクション、例えばセクションAが起動する。起動したセクションAに設定されているログステートメントAが、セクションAが呼び出されたことのログ(例えば、セクションAの名称と、セクションAを有する旧FU11の名称と、旧FU11を有するSC1の名称とで構成されたログ)を書くことを、ロガーフレームワーク124に要求する。その要求に応答して、ロガーフレームワーク124によって、ログステートメントAが有する値(旧SC2内の旧FU1におけるセクションAを表す情報)が、旧ログファイル#11に書き込まれる(S5)。
【0081】
次に、セクションAは、S1でセットされた入力情報に基づき、旧SC1内の旧FU6におけるセクションCを呼び出す(S6)。このセクションCに設定されているログステートメント(図示せず)が、旧SC1内の旧FU6におけるセクションCが呼び出されたことのログを書くことを、ロガーフレームワーク124に要求する。その要求に応答して、ロガーフレームワーク124によって、ログステートメントが有する値(旧SC1内の旧FU6におけるセクションCを表す情報)が、旧ログファイル#11に書き込まれる(S7)。
【0082】
次に、旧FU6内のセクションCは、S1でセットされた入力情報に基づき、旧SC3内の旧FU8におけるセクションDを呼び出す(S8)。このセクションDに設定されているロガー(図示せず)が、旧SC3内の旧FU8におけるセクションDが呼び出されたことのログを書くことを、ロガーフレームワーク124に要求する。その要求に応答して、ロガーフレームワーク124によって、ログステートメントが有する値(旧SC1内の旧FU6におけるセクションCを表す情報)が、旧ログファイル#11に書き込まれる(S9)。
【0083】
以降、S1でセットされた入力情報に基づき、セクションから別のセクションへの呼出しと、呼び出されたセクションのことを示すログの旧ログファイル#11に対する書き込みとが繰り返される。これにより、一つの旧テストプログラム122に対応した一つの旧ログファイル#11が作成される。
【0084】
図9は、旧テストプログラム122の実行に起因して呼び出される各種コンピュータプログラムと、作成される各種ファイルの一例を示す。なお、この図には、S1600の詳細に加えて、S1700(スケジューラ用テキストの作成)及びS1800(FU変換スケジュールの作成)で行われる処理も示されている。
【0085】
ロガーフレームワーク601には、コンピュータプログラムとして、例えば、セクションロガー603及びチェックポイント結果ライタ605が組み込まれている。セクションロガー603は、旧テストプログラム122(又は新テストプログラム132)からの要求に応答して、旧ログファイル203(又は新ファイル)をオープン(準備)したりクローズしたりする。チェックポイント結果ライタ605は、旧テストプログラム122(又は新テストプログラム132)の実行によって旧ソフトウェア200(又は新ソフトウェア)に発生したチェックポイント結果値を、チェックポイント結果ファイル430に書き込む。
【0086】
例えば、旧テストプログラム122には、処理の実行手順として、以下の(1)〜(5)の順番、
(1)初期値(入力情報)の設定、
(2)前バッチプログラム126の呼び出し、
(3)旧ログファイル(セクションログファイル)の作成、
(3−1)旧ログファイルのオープン(準備)、
(3−2)対象旧FUの呼び出し、
(3−3)旧ログファイルのクローズ、
(4)チェックポイント結果チェッカー123の呼び出し、
(5)後バッチプログラム127の呼び出し、
で処理を実行することが定義されている。なお、(3−1)の処理定義に関連して、準備された旧ログファイル203に書き込むべき情報、すなわち、FUフルネーム(SC名及びFU名で構成された名称)、テストケース番号及び対象のパスの構成が書き込まれている。
【0087】
以下、各処理を説明する。
【0088】
<<(1)初期値(入力情報)設定>>
旧テストプログラム122は、図示しない所定の初期値(入力情報)を、旧ソフトウェア200に設定する。
【0089】
<<(2)前バッチプログラム126の呼び出し>>
旧テストプログラム122は、前バッチプログラム126を呼び出す。
【0090】
前バッチプログラム126は、呼び出されると、以下の3つの処理、
・ファイル状況差分検出プログラム(FileDiffDetector)1292の呼び出し、
・ネットワークリクエスト検出プログラム(NetworkReqDetector)1293の開始、
・変数値検出プログラム(VariableDiffDetector)1295の呼び出し、
を実行する。
【0091】
ファイル状況差分検出プログラム1292は、呼び出されると、呼び出された時点(ここでは、旧ログファイルの作成前)のファイル状況(所定の記憶空間に存在するファイルのファイル名のリスト)を検出し、検出されたファイル状況を表す結果ファイル400Bを作成する。
【0092】
ネットワークリクエスト検出プログラム1293は、開始されると、ネットワークI/F111を通じて何らかのリクエストが流れているか否かを定期的にチェックし、チェックの都度に、チェックの結果を、結果ファイル410に書き込む。
【0093】
変数値差分検出プログラム1295は、呼び出されると、呼び出された時点(ここでは、旧ログファイルの作成前)に存在する全ての変数情報(変数名と変数値とのペア)を検出し、検出された全ての変数情報を記録した結果ファイル500Bを作成する。
【0094】
<<(3−1)旧ログファイルの準備>>
旧テストプログラム122が、このプログラム122に記述されているFUフルネーム及びテストケース番号を使用して、ロガーフレームワーク601に組み込まれているセクションロガー603を呼び出す。それにより、FUフルネーム及びテストケース番号を持った、ロガーのインスタンスが、サーバ100内の主記憶装置に展開される。旧テストプログラム122が、セクションロガー603に、旧ログファイルの準備を要求する。その際、旧テストプログラム122は、このプログラム122に記述されている対象パスの構成を、セクションロガー603に渡す。セクションロガー603は、旧テストプログラム122からの準備要求に応答して、FUフルネーム及びテストケース番号に基づいて作成したファイル名の旧ログファイル203を準備する(例えば、メモリ等の主記憶装置に旧ログファイル203を展開する)。そして、セクションロガー603は、FUフルネーム、テストケース番号及び対象パスの構成を、準備された旧ログファイル203に書き込む(図10の1〜3行目を参照)。
【0095】
<<(3−2)対象旧FUの呼び出し>>
次に、旧テストプログラム122が、FUフルネームから特定される対象の旧FUを呼び出す。これにより、図8を参照して説明したように、セクションが次々に呼び出される。具体的には、対象パスを構成する複数のセクションが、対象パスを構成するセクションの並び順で呼び出される。セクションが呼び出される都度に、呼び出されたセクションに埋め込まれているログステートメントがセクションロガー603を使用する(セクションロガー603に要求を出す)ことによって、呼び出されたセクションを表す情報(つまりそのセクションが呼び出されたことのログ)が旧ログファイル203に書き込まれる。図9の例は、対象の旧FUに存在する二つのセクションA及びBがセクションA、Bの順で呼び出され、セクションAに埋め込まれているログステートメント内の値(セクションAを表す情報)と、セクションBに埋め込まれているログステートメント内の値(セクションBを表す情報)が、セクションロガー603によってログファイル203に書き込まれたことを表す。
【0096】
<<(3−3)旧ログファイルのクローズ>>
対象パスを構成する全てのセクションが呼び出されたならば、旧テストプログラム122が、ロガーフレームワーク601に組み込まれているセクションロガー603に、クローズを要求する。セクションロガー603は、旧テストプログラム122からのクローズ要求に応答して、旧ログファイル203をクローズする(例えば、主記憶装置から補助記憶装置にログファイル203を書き出し、主記憶装置からそのログファイル203を削除する)。これにより、作成された旧ログファイル203が記憶装置105に保存される。その際、そのクローズ要求を受けたセクションロガー603がサーバ100内の主記憶装置から消去されても良いし、消去されずに後でパラメータ(FUフルネーム及びテストケース番号)が設定され直されても良い。
【0097】
<<チェックポイント結果チェッカー123の呼び出し>>
旧テストプログラム122が、チェックポイント結果チェッカー123を呼び出す。呼び出されたチェックポイント結果チェッカー123は、まず、ロガーフレームワーク601に組み込まれているチェックポイント結果ライタ605に、チェックポイント結果ファイルの準備を要求する。チェックポイント結果ライタ605は、チェックポイント結果チェッカー123からの準備要求に応答して、チェックポイント結果ファイル430を準備する。次に、チェックポイント結果チェッカー123は、旧テストプログラム122の実行結果として旧ソフトウェアに発生したチェックポイント結果値を参照し、参照したチェックポイント結果値の書込みを、チェックポイント結果ライタ605に依頼する。チェックポイント結果ライタ605は、その依頼に応答して、チェックポイント結果値を、チェックポイント結果ファイル430に書き込む。最後に、チェックポイント結果チェッカー123は、チェックポイント結果ライタ605に、チェックポイント結果ファイルのクローズを要求する。チェックポイント結果ライタ605は、チェックポイント結果チェッカー123からのクローズ要求に応答して、チェックポイント結果ファイル430をクローズする。これにより、チェックポイント結果ファイル430が、記憶装置105に格納される。
【0098】
<<(5)後バッチプログラム127の呼び出し>>
旧テストプログラム122は、後バッチプログラム127を呼び出す。
【0099】
後バッチプログラム127は、呼び出されると、以下の3つの処理、
・ファイル状況差分検出プログラム1292の呼び出し、
・ネットワークリクエスト検出プログラム1293の終了、
・変数値検出プログラム1295の呼び出し、
を実行する。
【0100】
ファイル状況差分検出プログラム1292は、呼び出されると、呼び出された時点(ここでは、旧ログファイル作成後)のファイル状況を取得し、取得されたファイル状況を表す結果ファイル400Aを作成する。なお、この時点で、ファイル状況差分検出プログラム1292は、この結果ファイル400Aと、旧ログファイルの作成前の上述の結果ファイル400Bとを比較することにより旧内部ファイル状況差分を取得し、旧内部ファイル状況差分を表すファイルを作成して記憶装置105に格納しても良い。
【0101】
ネットワークリクエスト検出プログラム1293が終了されると、ネットワークI/F111を通じて何らかのリクエストが流れているか否かの監視が行われなくなる。
【0102】
変数値差分検出プログラム1295は、呼び出されると、呼び出された時点(ここでは、旧ログファイル作成後)に存在する全ての変数情報を検出し、検出された全ての変数情報を記録した結果ファイル500Aを作成する。なお、この時点で、変数値差分検出プログラム1295は、この結果ファイル500Aと、旧ログファイルの作成前の上述の結果ファイル500Bとを比較することにより旧内部全変数値差分を取得し、旧内部全変数値差分を表すファイルを作成して記憶装置105に格納しても良い。
【0103】
以上の一連の処理により、一つの旧テストプログラム122につき一つの旧ログファイル203が作成される。全ての旧FUについて全ての旧テストプログラム122が実行されると、多数のログファイル203が作成される。
【0104】
スクリーン遷移アナライザ128は、多数の旧ログファイル203(又は多数の新ログファイル)を分析することで、旧ソフトウェア200(又は新ソフトウェア)のスクリーンの遷移の流れを把握し、把握したスクリーン遷移を表す情報を、結果ファイル450に書き込む。
【0105】
以上、図8及び図9を参照して、旧テストプログラム122の実行と旧ログファイル203の作成とを説明したが、この説明は、新テストプログラム132の実行と新ログファイルの作成にも適用される説明である。すなわち、ロガー301付きの旧FUをFU変換すると、ロガー付きの新FUが得られる。このため、新テストプログラム132が実行されると、新FUに埋め込まれているロガーによって、新ログファイルにログが書き込まれることになる。また、後に説明する図10は、或る旧テストプログラム122の実行により作成された旧ログファイル203の中身の具体例を示しているが、その旧テストプログラム122に対応する新テストプログラム132の実行により作成される新ログファイルの中身も、図10に例示した中身と実質的に同じとなる。
【0106】
<S1700(スケジューラ用テキストの作成)>。
【0107】
ログチェッカー125は、多数の旧ログファイル203を分析して、以下の(1)及び(2)、
(1)各対象パスが正確に経由されたかを検出し、検出の結果を表す情報を、結果ファイル420に書き込む、
(2)各FU呼び出し関係を記録したスケジューラ用テキスト440を作成する、
を実行する。
【0108】
例えば、図10に示す旧ログファイル203の中身の具体例によれば、ログチェッカー125は、8個のログ(7〜14行目の8行のログ)があることから、テストケース#1に対応した旧テストプログラム122によって対象旧FUが呼び出された場合に8個のセクションが呼び出されたことがわかる。また、8個のログにおけるSC名及びFU名の組合せとFUフルネームとの比較から、ログチェッカー125は、対象旧FU内にあるセクションに対応したログは、7行目及び11〜14行目の計5個であることがわかる。また、ログチェッカー125は、その5個のログの並び順から、対象旧FUでのセクションの呼び出し順序(つまり達成されたパス)が、A,C,D,E及びGであることを特定でき、対象パスの構成(A、C、D、E及びG)との比較により、対象パスの構成通りにセクションが呼び出された(つまり達成されたパスは正しい)ことを検出することができる。更に、ログチェッカー125は、8〜10行目のログから、対象旧FUが別の旧FUを呼び出すというFU呼出し関係がわかる。
【0109】
各旧ログファイル203について上記のような分析をすることで、ログチェッカー122は、旧ソフトウェアにおける多数のFU呼出し関係を把握する。
【0110】
また、図11に示すように、ログチェッカー125は、多数の旧ログファイル203に加えて、以下の2つのパラメータ値、
(A)各旧FUに対応した循環的複雑度、
(B)作業者の人数、
を参照することで、図11に示すスケジューラ用テキスト440を作成する。
【0111】
このスケジューラ用テキスト440によれば、各行が、各旧FUに対応しており、各行における要素は、左から、旧FUのID、旧FUの名称、人日数、FU変換開始日、FU変換終了日、呼出し先旧FUのID、担当作業者IDである。
【0112】
人日数は、一人で旧FUのFU変換を担当した場合に要する時間を意味する。具体的には、例えば、旧FU1の循環的複雑度が“26”であり、作業者の人数が“20”である場合、ログチェッカー125は、旧FU1の人日数を、26÷20=1.3人日、と計算する。
【0113】
FU変換開始日及びFU変換終了日は、本例では全てが同じ値のデフォルト値となっている。FU変換開始日及びFU変換終了日は、FU呼出し依存関係、各旧FUの人日数及び担当作業者IDに基づいて、FU変換スケジューラ131によって自動で調整される。
【0114】
呼出し先旧FUのIDが記録されていない行に対応した旧FUは、呼び出す旧FUが存在しないため、依存度の最も低い旧FUである。
【0115】
旧FUに対応した担当作業者は、例えば、P1000(現行システム分析)でその旧FUのソースコードの分析を担当した作業者である。
【0116】
上記(A)及び(B)のパラメータ値や、旧FUのIDと担当作業者IDとの対応関係は、例えば、或る記憶装置(例えば、サーバ100内の記憶装置105、又は、サーバ100と通信可能な遠隔の記憶装置)に登録される。ログチェッカー125は、上記或る記憶装置から、登録されている(A)及び(B)のパラメータ値や、旧FUのIDと担当作業者IDとの対応関係を読み出すことで、(A)及び(B)のパラメータ値を入力したり、各旧FUに対応する担当作業者IDを把握したりすることができる。
【0117】
<S1800(FU変換スケジュールの作成)>。
【0118】
スケジューラ用テキスト440には、呼出し先旧FUのIDが旧FU毎に記録されていることから、多数のFU呼出し依存関係が記録されていることになる。
【0119】
FU変換スケジューラ131が、スケジューラ用テキスト440を解釈することで、多数のFU呼出し関係をまとめたFU呼出し依存関係(例えば図12に例示する木構造の関係)を把握する。FU変換スケジューラ131は、FU呼出し依存関係と、各旧FUに対応した人日数及び担当作業者IDに基づいて、FU変換スケジュールを作成する。FU変換スケジューラ131は、作成したFU変換スケジュールを表す情報を、作業者端末50に送信する。これにより、例えば図13に示すように、作業者端末50が有する表示装置53のディスプレイ画面に、FU変換スケジュールが表示される。
【0120】
なお、図13において、各色付きブロックの横幅は、各旧FUのFU変換に要する作業期間を意味し、矢印の向きは、旧FUの変換順序を意味する。作業期間は、例えば、その旧FUの人日数に担当作業者の人数を除算して得られた値である。FU変換スケジューラ131にスタート日時(例えば10月1日月曜日の6時)が設定されると、FU変換スケジューラ131が、各旧FUの依存度に基づいて、旧FUの変換順序を決定したり、各旧FUの人日数及び担当作業者IDを基に、各旧FUについての作業期間(変換開始日時及び変換終了日時)を決定したりすることができる。その際、FU変換スケジューラ131は、同一の作業者が同じ時間帯に複数の旧FUの作業期間が重ならないよう各旧FUの作業期間を調整することができる。また、図示しないが、FU変換スケジューラ131は、指定された担当作業者のIDをキーにして、指定された担当作業者についてのスケジュールのみを抽出して表示することもできる。
【0121】
<S4200(内部レベルテスト)>。
【0122】
内部レベルテストでは、前述したように、対象の新FUに対応した全ての新テストテストプログラム(対象の新FUの循環的複雑度と同数の新テストプログラム)132が実行されることで、対象の新FUの循環的複雑度と同数の新ログファイルが作成される。また、新テストプログラム132が実行されると、図9を参照して説明した旧テストプログラム122の実行と同様に前バッチプログラム126及び後バッチプログラム127が呼び出される。このため、一つの新テストプログラム132につき、以下の(1)〜(5)の結果ファイル、
(1)新ログファイル作成前の新ファイル状況を表す結果ファイル、
(2)新ログファイル作成後の新ファイル状況を表す結果ファイル、
(3)ネットワークリクエストの検出結果を表す結果ファイル、
(4)新ログファイル作成前の新全変数値を表す結果ファイル、
(5)新ログファイル作成後の新全変数値を表す結果ファイル、
が作成される。
【0123】
ファイル状況差分検出プログラム1292は、上記(1)と(2)の結果ファイルを比較することにより、新内部ファイル状況差分を取得する。また、ファイル状況差分検出プログラム1292は、図9に示した結果ファイル400Bと400Aとを比較することにより、旧内部ファイル状況差分を取得する(なお、旧内部ファイル状況差分は、S1600以降前もって取得されても良い)。
【0124】
変数値差分検出プログラム1295は、上記(4)と(5)の結果ファイルを比較することにより、新内部全変数値差分を取得する。また、変数値差分検出プログラム1295は、図9に示した結果ファイル500Bと500Aとを比較することにより、旧内部全変数値差分を取得する(なお、旧内部全変数値差分は、S1600以降前もって取得されても良い)。
【0125】
内部レベルテストでは、一つの新テストプログラム132と、その新テストプログラム132に対応する一つの旧テストプログラム122につき、以下の(a)〜(d)の処理、
(a)ログチェッカー125が、新ログファイルを旧ログファイルと比較する処理、
(b)比較プログラム133が、新内部ファイル状況差分を旧内部ファイル状況差分と比較する処理、
(c)比較プログラム133が、ネットワークリクエストの検出結果を表す新旧の結果ファイル(具体的には、上記(3)の結果ファイルと、図9に示した結果ファイル410)を比較する処理、
(d)比較プログラム133が、新内部全変数値差分を旧内部全変数値差分と比較する処理、
が実行される。
【0126】
上記(a)〜(d)での比較の結果、いずれでも異常が無ければ、FU変換が正しく行われたということになる。
【0127】
<S5100(スクリーン入力ケースデータの作成)>。
【0128】
前述したように、P1000(現行システム分析)が行われることで、どの旧FUが旧ARであるかが特定される。そのため、多数の旧テストプログラムのうち、どれが旧ARを対象旧FUとした旧テストプログラムであるかの特定が可能である。また、どの新FUが新ARであるかも特定することができるため、多数の新テストプログラム132のうち、どれが新ARを対象新FUとした新テストプログラム132であるかの特定も可能である。
【0129】
このS5100では、図14に示すように、各旧ARに対応した全ての旧テストプログラム122が、旧スクリーン入力ケースデータ830に変換される。具体的には、旧テストプログラム122のソースコードに基づいて、旧スクリーン入力を表すデータ830が作成される。「旧スクリーン入力」とは、旧スクリーン(旧ARの作業者に対するインタフェース)に対するスクリーン入力であり、例えば、“旧AR1のスクリーン1に値Aを入力してスクリーン1上の実行ボタンを押す」である。
【0130】
同様に、各新ARに対応した全ての新テストプログラム132が、新スクリーン入力ケースデータ840に変換される。新テストプログラム132は旧テストプログラムと1対1に対応しているため、新スクリーン入力ケースデータ840も旧スクリーン入力ケースデータ830と1対1に対応している。「新スクリーン入力」とは、新スクリーン(新ARの作業者に対するインタフェース)に対するスクリーン入力であり、例えば、上記具体例の旧スクリーン入力に対応する操作であれば、“新AR1のスクリーン1に値Aを入力してスクリーン1上で実行ボタンを操作する」のように、対応する旧スクリーン入力と実質的に同じ操作である。
【0131】
<S5200(外部レベルテストの実行)>。
【0132】
例えば、図15に示すように、新旧のスクリーン入力ケースデータ830、840を表示する或いは印刷するなどの方法により、作業者は、新旧のスクリーン入力を把握する。互いに対応している新旧のスクリーン入力ケースデータ830、840であれば、対象のARやスクリーンも互いに対応している(例えば、新旧のARは共に“AR1”であり、新旧のスクリーンも共に“スクリーン1”である)。スクリーンは、作業者端末50の表示装置53に表示される。
【0133】
図示していないが、本実施形態では、前述した前バッチプログラム126と後バッチプログラム127の他に、外部レベルテスト用の前バッチプログラムと、外部レベルテスト用の後バッチプログラムとが、サーバ100内の記憶装置105に記憶されている。外部レベルテスト用の前バッチプログラム及び後バッチプログラムは、前述した前バッチプログラム126と後バッチプログラム127のように新旧のテストプログラム122、132から呼び出されるのではなく、外部レベルテストの際にスクリーンから情報を入力する作業者から呼び出される。外部レベルテスト用の前バッチプログラムは、呼び出された場合、例えば、ファイル状況差分検出プログラム1292及び変数値差分検出プログラム1295を呼び出し、ネットワークリクエスト検出プログラムを開始する。一方、外部レベルテスト用の後バッチプログラムは、呼び出された場合、例えば、DB比較プログラム1291、ファイル状況差分検出プログラム1292、DB接続検出プログラム1294、変数値差分検出プログラム1295及び比較プログラム133を呼び出し、ネットワークリクエスト検出プログラムを終了する。
【0134】
作業者は、外部レベルテスト用の前バッチプログラムを呼び出し、その後で、新旧のスクリーン1に、新旧のスクリーン入力(実質的に同一のスクリーン入力)を行う。それにより、新旧のスクリーン1から同一の外部入力が新旧のAR1に与えられ、新旧のソフトウェア120、820においてそれぞれアクションが実行される。具体的には、例えば、新旧のAR1が外部入力を受けると、新旧のソフトウェア120、820においてFU間の呼び出しが次々に行われ、その結果として、例えば新旧のソフトウェア120、820が新旧のDB910、920をそれぞれ更新する。新旧のソフトウェア120、820のアクション実行後に、作業者は、外部レベルテスト用の後バッチプログラムを呼び出す。
【0135】
従って、例えば、新旧のソフトウェアによるアクション実行後に、DB比較プログラム1291によって、旧DB内の全レコードと、新DB内の全レコードとが比較される。一つでも互いに不一致のレコードがあれば、外部レベルテストの結果が異常有りとなる。
【0136】
アクション実行後の都度に作業者から外部レベルテスト用の後バッチプログラムが呼び出されるため、DB比較プログラム1291は、前述したように、このような全レコード比較を、アクション実行後の都度(言い換えれば、新旧のスクリーン入力が行われる都度)、実行する。例えば、図17に示す外部レベルテストの別の例によれば、新旧のスクリーン入力が新旧のスクリーン1〜3に行われ、新旧のAR1〜3によってアクション1〜3が行われる。DB比較プログラム1291は、アクション1の後に全レコード比較を実行し、アクション2の後にも全レコード比較を実行し、アクション3の後にも全レコード比較を実行する。
【0137】
外部レベルテストでは、チェックポイント外部化プログラム群129に含まれている他のコンピュータプログラム、すなわち、ファイル状況差分検出プログラム1292、ネットワークリクエスト検出プログラム1293、DB接続検出プログラム1294及び変数値差分検出プログラム1295も実行される。
【0138】
具体的には、図15で言えば、ファイル状況差分検出プログラム1292は、新旧のAR1について、以下の(1)〜(3)の処理、
(1)外部入力受領前の新旧のファイル状況を取得する、
(2)アクション実行後の新旧のファイル状況を取得する、
(3)外部入力受領前の新旧のファイル状況と、アクション実行後の新旧のファイル状況とを比較することにより、旧外部ファイル状況差分と、新外部ファイル状況差分とを取得する、
を実行する。そして、比較プログラム133が、新外部ファイル状況差分を旧外部ファイル状況差分と比較する。この比較の結果、不一致があれば、外部レベルテストの結果が異常有りということになる。
【0139】
ネットワークリクエスト検出プログラム1293は、新旧のAR1の外部入力受領前からアクション受領後にかけて、ネットワークI/F111を通じて何らかのリクエストが流れているか否かを監視する。比較プログラム133は、新旧のソフトウェア120、820についての監視結果を互いに比較し、比較の結果、不一致があれば、外部レベルテストの結果が異常有りということになる。
【0140】
DB接続検出プログラム1294は、DB比較プログラム1291と同様に、アクション実行後の都度に、新旧のソフトウェアが新旧のDB910、920に接続されているか否かを検出する。比較プログラム133は、新旧のソフトウェア120、820についての検出結果を互いに比較し、比較の結果、不一致があれば、外部レベルテストの結果が異常有りということになる。
【0141】
変数値差分検出プログラム1295は、新旧のAR1について、以下の(1)〜(3)の処理、
(1)外部入力受領前の新旧の全変数値を取得する、
(2)アクション実行後の新旧の全変数値を取得する、
(3)外部入力受領前の新旧の全変数値と、アクション実行後の新旧の全変数値とを比較することにより、旧外部全変数値差分と、新外部全変数値差分とを取得する、
を実行する。そして、比較プログラム133が、新外部全変数値差分を旧外部全変数値差分と比較する。この比較の結果、不一致があれば、外部レベルテストの結果が異常有りということである。
【0142】
従来のソフトウェアマイグレーションは、旧ソフトウェアの業務要件に依存したマイグレーションであり、マイグレーションの最後に行われるいわゆる総合テストでは、業務要件に従う業務の流れに依存したテストが行われる。具体的には、図16に示すように、予め業務の流れ(シナリオ)が決まっており、その業務の流れに従って一通りの操作が行われる。その後で、例えばDBが適切に更新されたか否かがチェックされる。
【0143】
本実施形態では、クライアントから旧ソフトウェアの業務要件をヒアリングする必要は無く、それを実現する一工夫として、旧ソフトウェアのソースコードの分析が行われる。しかし、ソースコードからは、業務の流れは分からないし、そもそも、本実施形態では、業務要件に全く頼っていないので、業務の流れを知る必要もない。そのため、従来のような総合テストはできない。
【0144】
そこで、本実施形態では、前述したようなチェックポイント外部化プログラム群129が用意され、そのプログラム群129に含まれる各コンピュータプログラム1291〜1295が、P4000(継続的インテグレーション)の後のP5000において適切なタイミングで実行される。そのため、P4000(継続的インテグレーション)の後に、従来のような総合テストに代わる新規観点のテスト(外部レベルテスト)を行うことができる。
【0145】
以上、本発明の幾つかの実施例を説明したが、これらの実施例は本発明の説明のための例示にすぎず、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、その要旨を逸脱することなく、その他の様々な態様でも実施することができる。
【図面の簡単な説明】
【0146】
【図1】本発明の一実施形態に係るソフトウェアマイグレーションシステムが適用された計算機システムの構成図である。
【図2】本発明の一実施形態に係るソフトウェアマイグレーションのフェーズ遷移図である。
【図3】本発明の一実施形態で実行される代表的なコンピュータプログラムを示す。
【図4】チェックポイント外部化プログラム群が有する複数のコンピュータプログラムを示す。
【図5】本発明の一実施形態に係るソフトウェアマイグレーションで行われる処理の流れを示す。
【図6】旧ソフトウェアソースコードと旧FUソースコードとセクションとの関係の説明図である。
【図7】一つの旧FUにおける複数のセクションとセクション間の関係の一例を示す。
【図8】旧ソフトウェアの構成と、旧テストプログラムから呼び出された後の旧ソフトウェアの振舞いの概要を示す。
【図9】旧テストプログラムの実行に起因して呼び出される各種コンピュータプログラムと作成される各種ファイルの一例を示す。
【図10】旧ログファイルの中身の具体例を示す。
【図11】ログチェッカーに入力される情報とログチェッカーに作成されるスケジューラ用テキストの具体例を示す。
【図12】FU呼出し依存関係の一例を示す。
【図13】FU変換スケジューラからの出力の一例を示す。
【図14】新旧のテストプログラムと外部レベルテストケースとの関係を示す。
【図15】本発明の一実施形態に係るソフトウェアマイグレーションでのスクリーンからのテストの一例を示す。
【図16】従来のソフトウェアマイグレーションでのスクリーンからのテストの説明図である。
【図17】スクリーンからのテストの別の一例を示す。
【符号の説明】
【0147】
50…作業者端末 100…サーバ
【技術分野】
【0001】
本発明は、ソフトウェアのマイグレーションに関する。
【背景技術】
【0002】
アプリケーションプログラム等のソフトウェアのマイグレーションの依頼をクライアントからサプライヤが受けて、サプライヤがクライアントに代わってソフトウェアマイグレーションを行うサービスが知られている。「ソフトウェアマイグレーション」とは、或る言語で記述されているマイグレーション対象のソフトウェアが有する全ての機能を引き継いだ、別の言語で記述されたソフトウェアを構築することである。以下、マイグレーション対象のソフトウェアを、「旧ソフトウェア」と言い、旧ソフトウェアを記述した第一の言語を「旧言語」と言う。それに対し、旧ソフトウェアの機能が引き継がれたソフトウェアを「新ソフトウェア」と言い、新ソフトウェアを記述した第二の言語を「新言語」と言う。なお、「旧」や「新」といった言葉は、便宜上使用している言語であって、マイグレーション対象のソフトウェアを記述した言語が必ずしも年代的に古く(例えばCobol或いはVisual Basic)、マイグレーション後のソフトウェアを記述した言語が必ずしも年代的に新しい(例えばJava(登録商標).NET)というわけではない。
【0003】
ソフトウェアマイグレーションでは、通常、サプライヤが、旧ソフトウェアでどんな業務が実行されるかといった業務要件をクライアントからヒアリングし、クライアントから聞いた業務要件に基づいて、新ソフトウェアを構築する(例えば非特許文献1)。
【0004】
【非特許文献1】http://www.systems-inc.co.jp/migration/index.htm#001
【発明の開示】
【発明が解決しようとする課題】
【0005】
従来のソフトウェアマイグレーションでは、サプライヤがクライアントから旧ソフトウェアの業務要件をヒアリングすることは、重要且つ必須である。なぜなら、ソフトウェアマイグレーションでは、旧ソフトウェアで行われる業務を新ソフトウェアで行うことができるかどうか(言い換えれば、全ての機能が正しく引き継がれたかどうか)を検証する必要があるが、クライアントから業務要件をヒアリングできていないと、上述のことを検証することができないためである。従って、サプライヤにとって、クライアントへの依存度が大きい。また、クライアントにとってみれば、旧ソフトウェアの業務要件をサプライヤに伝えることは、負担の大きい作業である。
【0006】
また、上記のヒアリングの目的は、全ての機能が正しく引き継がれたかどうかを検証することに加えて、どんな機能を有したソフトウェアを新言語で記述したら良いかの指針を知ることにある。つまり、従来のソフトウェアマイグレーションでは、マイグレーションと言っても、クライアントから聞いた業務要件に従って、新ソフトウェアを作成しており、新規開発となんら変わりが無い。
【0007】
また、ソフトウェアマイグレーションを外国(例えばインド或いは中国)で行うサプライヤもいる。外国でソフトウェアマイグレーションを行うためには、サプライヤ或いはクライアントが、オフショアの人間(典型的には外国人)に、クライアントから聞いた業務要件を説明し理解してもらう必要がある。しかし、それは、負担の大きい作業である。その大きな理由として、日本語と外国語という言語の違いや、日本と外国との間での文化の違いがある。例えば、旧ソフトウェアが、金融に関するソフトウェアの場合、旧ソフトウェアが有する業務要件をオフショアの人間に説明する前に、日本の金融システムについて説明し理解してもらう必要がある場合がある。その際、日本語と外国語という言語の違いから、日本の金融システムや、旧ソフトウェアが有する業務要件を、オフショアの人間に正確に伝えるのが難しい場合がある。
【0008】
従って、本発明の目的は、マイグレーション対象のソフトウェアの業務要件のヒアリングや説明を不要としたソフトウェアマイグレーション技術を提供することにある。
【課題を解決するための手段】
【0009】
旧言語のソフトウェアを構成する各FU(Functional Unit)のソースコードが分析され、その分析の結果を基に、旧言語のFU間の呼出し依存関係が把握される。そして、把握された呼出し依存関係に基づいて、旧言語のFUから新言語のFUへのFU変換と、正しく変換が行われたかどうかの内部レベル(ソースコードレベル)のテストが行われる。各FU変換についての各内部レベルのテストの結果が異常無しであれば、新言語のFUとそれに対応する旧言語のFUに対して、ソフトウェアの外部(例えばスクリーン或いはバッチ)から情報を入力し同じ振舞いが行われたかどうかの外部レベルのテストが行われる。外部レベルのテストの結果も異常無しであれば、ソフトウェアマイグレーションの完了となる。
【発明を実施するための最良の形態】
【0010】
図1は、本発明の一実施形態に係るソフトウェアマイグレーションシステムのハードウェア構成の一例を示す。
【0011】
通信ネットワーク60に、サーバ100と1又は複数の作業者端末50とが接続されている。
【0012】
作業者端末50は、作業者が使用する計算機である。作業者端末50は、例えば、入力装置51と、表示装置53と、CPU(Central Processing Unit)55と、記憶装置57と、ネットワークI/F(Interface)59とを備えている。なお、「作業者」とは、ソフトウェアマイグレーションに関わる作業を行う人間である。
【0013】
サーバ100は、作業者端末50に種々のサービスを提供する計算機である。サーバ100は、例えば、CPU107と、記憶装置105と、ネットワークI/F111とを備えている。記憶装置105は、例えば、主記憶装置(例えばメモリ)及び/又は補助記憶装置(例えば不揮発性の記憶メディアのドライブ)である。ネットワークI/F111は、通信ネットワーク60を介した通信を行うための通信装置(例えばNIC(Network Interface Card))である。
【0014】
本実施形態に係るソフトウェアマイグレーションは、多数の処理から構成されているが、それら多数の処理は、5つのフェーズに分類することができる。
【0015】
図2は、本実施形態に係るソフトウェアマイグレーションにおける5つのフェーズの遷移図である。
【0016】
この図に示すように、ソフトウェアマイグレーションにおけるフェーズとして、下記の5つ、
P1000:現行システム分析;
P2000:変換方式設計;
P3000:技術差異分析;
P4000:継続的インテグレーション;及び
P5000:新旧稼動比較テスト
がある(ここでの「P」は、Phaseの頭文字を表す)。以下、これら5つのフェーズの概要を説明する。
【0017】
P1000:現行システム分析
現行システム分析では、旧ソフトウェア(マイグレーション対象のソフトウェア)に含まれている各FU(Functional Unit)のキャプチャが行われる(以下、旧ソフトウェア内のFUを「旧FU」と言う)。具体的には、旧ソフトウェアのソースコードが分析され、FU間の呼出し依存関係(以下、「FU呼出し依存関係」と言う)が算出される。そして、算出されたFU呼出し依存関係を基に、どの旧FUをいつ新FU(新言語で記述されたFU)に変換するかのFU変換スケジュールが作成される。ここで重要な点は、旧ソフトウェアのソースコード分析では、旧ソフトウェアの業務要件を知る必要は全く無いことである。なお、「FU」とは、何かしらの振舞いを行う、プログラムの最小単位(最小振舞い単位)であり、典型的には、プロシージャ、サブルーチン、或いは関数と呼ばれるモジュールである。
【0018】
P2000:変換方式設計
旧ソフトウェアのソースコードを新ソフトウェアのソースコードに変換するためにどんな言語変換ツール(コンピュータプログラム)を用いるかの選定が行われる。また、言語変換ツールのテストランやテストラン結果の検証も行われる。その結果、旧ソフトウェアの何パーセントを自動で言語変換できるかがわかる。旧ソフトウェアの自動で言語変換できないパートについては、手動で言語変換する必要がある。
【0019】
P3000:技術差異分析
旧ソフトウェアの手動で言語変換する必要のあるパートについて、このフェーズが実行される。具体的には、旧ソフトウェアに関する技術(以下、「旧技術」と言う)と新ソフトウェアに関する技術(以下、「新技術」と言う)との比較が行われ、その比較の結果を基に、P4000(継続的インテグレーション)においてどのような処理を行うかのガイドラインを表す情報(以下、「ガイドライン情報」と言う)が決定される。例えば、旧技術ではサポートされているが新技術でサポートされていない仕様がある場合には、継続的インテグレーションにおいてどのような処理を行うかが決定される。
【0020】
P4000:継続的インテグレーション
P1000(現行システム分析)で作成されたFU変換スケジュールは、依存度の低い旧FUほど先に新FUへと変換するスケジュールとなっている。このフェーズでは、そのスケジュールに従って(必要に応じて、P3000(技術差異分析)で作成されたガイドライン情報が更に参酌されて)、依存度の低い旧FUから先に、以下の(処理1)〜(処理3)、
(処理1)旧FUから新FUへの変換(FUの言語変換、以下、「FU変換」と言う)、
(処理2)FU変換が正しく行われたか否かのテスト、
(処理3)テストの結果が異常無しであり、且つ、(処理1)で得られた新FUより依存度が低い新FUが存在する場合に、その新FUに(処理1)で得られた新FUをインテグレートする処理、
が行われる。全ての旧FUについて(処理1)〜(処理3)が行われることで、新ソフトウェアが構築される。このフェーズで、旧ソフトウェアから新ソフトウェアへのマイグレーションが暫定的に完了したことになる。この後に、P5000(新旧稼働比較テスト)が実行され、異常が無ければ、ソフトウェアマイグレーションが完全に完了したことになる。具体的には、P4000(継続的インテグレーション)では、FU変換の都度に、そのFU変換が正しく行われたか否かがテストされるが、そのテストは、内部レベルのテスト(ソースコードレベルのテスト)であり、次のP5000(新旧稼働比較テスト)で、外部レベルのテストが実行される。内部レベルのテストと外部レベルのテストの両方で異常が無ければ、ソフトウェアマイグレーションが正しく行われたことになる。
【0021】
P5000:新旧稼動比較テスト
前述したように、外部レベルのテストが実行される。外部レベルのテストでは、旧ソフトウェア内の旧AR(Action Receiver)と、新ソフトウェア内の新AR(その旧ARから得られた新AR)が、ソフトウェアの外部から同じ入力(以下、外部からの入力を「外部入力」と言う)を受ける。新旧のソフトウェアが、その外部入力に応答したアクションを行い、それらのアクションが同じか否かが検証される。このような検証は、新旧のソフトウェアにアクションが行われる都度に実行される。ここで、「AR」とは、外部入力を受け付けるFUのこと(つまり一種のFU)である。FUがARであるか否かは、P1000(現行システム分析)で把握される。また、「外部」とは、例えば、スクリーン(ARのユーザに対するインタフェース、典型的にはGUI(Graphical User Interface))、又はバッチプログラムである。従って、外部入力は、例えば、ユーザからスクリーンに対して情報が入力されて特定の操作が行われたことに起因してスクリーンから入力されるパラメータ値、或いは、バッチプログラムから入力されるパラメータ値がある。
【0022】
以上が、本実施形態に係るソフトウェアマイグレーションの概要である。ソフトウェアのマイグレーションでは、人間によって行われる処理もあれば、コンピュータプログラムによって行われる処理もある。
【0023】
図3は、本実施形態で実行される代表的なコンピュータプログラムを示す。なお、図3には、ソフトウェアマイグレーションの前に存在するコンピュータプログラムを実線で示しており、ソフトウェアマイグレーションの過程で追加されるコンピュータプログラムを点線で示している。
【0024】
本実施形態で実行される代表的なコンピュータプログラムとして、例えば、循環的複雑度算出プログラム121、旧テストプログラム122、新テストプログラム132、チェックポイント結果チェッカー123、ロガーフレームワーク124、ログチェッカー125、前バッチプログラム126、後バッチプログラム127、スクリーン遷移アナライザ128、チェックポイント外部化プログラム群129、言語変換ツール130、FU変換スケジューラ131及び比較プログラム133がある。これらのコンピュータプログラム121〜133は、サーバ100の記憶装置105に記憶され、記憶装置105からCPU107にロードされ、CPU107にて実行される。以下の説明において、コンピュータプログラムが主語になる処理は、実際にはそのコンピュータプログラムを実行するCPU107によって行われる。
【0025】
循環的複雑度算出プログラム121は、旧FU毎に、旧FUに対応したセクション関係に基づいて、循環的複雑度を算出する。なお、「セクション」とは、FUを構成する要素であり、FUの実行の際の分岐となる最小単位である。「セクション関係」とは、複数のセクションと各セクション間のリンクとで構成された関係を意味する。
【0026】
旧テストプログラム122は、旧ソフトウェアに所定の入力情報(値)をセットし対象の旧FUを呼び出すプログラムである。対象の旧FUが呼び出されると、後に詳述する仕組みによって、一つのログファイルが作成される。一つの旧FUに対応する旧テストプログラムの数は、旧FUの循環的複雑度と同数である。このため、一つの旧FUにつき、その旧FUの循環的複雑度と同数のログファイルが作成されることになり、それ故、旧ソフトウェアについて多数のログファイルが作成されることになる。旧テストプログラム122は、P1000(現行システム分析)で用意されて実行される。
【0027】
新テストプログラム132は、例えば旧テストプログラム122が変換されたプログラムであり、旧テストプログラム122と1対1で対応している。新テストプログラム132は、新ソフトウェアに所定の入力情報(値)をセットし対象の新FUを呼び出す。対象の新FUが呼び出されると、一つのログファイルが作成される。新テストプログラム132は、P4000(継続的インテグレーション)で実行される。具体的には、FU変換の都度に行われる内部レベルテストにおいて、新テストプログラム132が実行されて、ログファイルが作成される。内部レベルテストでは、新FUのログファイル(以下、「新ログファイル」と言う)が、その新FUに対応した旧FUのログファイル(以下、「旧ログファイル」と言う)と比較される。新ログファイルの中身と旧ログファイルの中身が実質的に同じであれば、異常無しと判断される。なお、内部レベルテストで参照される旧ログファイルは、P1000(現行システム分析)で作成されたファイルである。また、新旧のテストプログラム122、132は、いわゆる「イン・プロセス」として動作する(すなわち、新旧のソフトウェアの一つのプロセスとして動作する)。従って、旧テストプログラム122は、旧ソフトウェアと同じ言語で記述され、新テストプログラム132は、新ソフトウェアと同じ言語で記述される。それに対し、前バッチプログラム126及び後バッチプログラム127は、いわゆる「アウト・プロセス」とし動作する(すなわち、サーバ100の図示しないオペレーティングシステム(OS)上の、新旧のソフトウェアとは全く別のプロセス、として動作する)。
【0028】
チェックポイント結果チェッカー123には、チェックポイントとして取得すべき項目が定義されている。チェックポイント結果チェッカー123は、テストプログラム122又は132の実行の結果として旧ソフトウェア又は新ソフトウェアにセットされたチェックポイント結果値を、チェックする。
【0029】
ロガーフレームワーク124には、コンピュータプログラムが組み込まれている。ロガーフレームワーク124は、組み込まれているコンピュータプログラムにより、ログファイルを準備したり、チェックポイント結果チェッカー123によるチェックポイント結果値のチェックの結果を表すファイルを作成したりする。
【0030】
ログチェッカー125は、作成された多数の旧ログファイルの入力を受けて、それら多数のログファイルを分析することで、FU呼出し依存関係を特定したり、各内部レベルテストのテスト結果の良し悪しをチェックしたりする。
【0031】
前バッチプログラム126は、前バッチ処理が定義されたプログラムである。前バッチ処理とは、テストプログラム122又は132によって対象の旧FU又は新FUが呼び出される前に実行すべきバッチ処理のことである。
【0032】
後バッチプログラム127は、後バッチ処理が定義されたプログラムである。後バッチ処理とは、対象の旧FU又は新FUが呼び出されて旧ログファイル又は新ログファイルの作成が完了した後に実行すべきバッチ処理のことである。
【0033】
スクリーン遷移アナライザ128は、作成された多数の旧ログファイル又は新ログファイルの入力を受けて、それら多数の旧ログファイル又は新ログファイルを分析することで、旧ソフトウェア又は新ソフトウェアでのスクリーンの遷移の流れを特定する。
【0034】
言語変換ツール130は、FU変換(つまりFUの言語変換)を行うプログラムである。
【0035】
FU変換スケジューラ131は、ログチェッカー125に特定されたFU呼出し依存関係に基づいて、FU変換スケジュールを作成する。
【0036】
比較プログラム133は、各種の比較を実行する。比較プログラム133は、比較の種類毎に設けられていても良い。
【0037】
チェックポイント外部化プログラム群129は、チェックポイントの外部化を実現する複数のコンピュータプログラムの集合である。「チェックポイントの外部化」とは、本実施形態における一つの特徴的なコンセプトである。具体的には、チェックポイントをどこにするかを人間任せにするのではなく(例えば、個々の作業者のスキルレベルに依存するのではなく)、機械的且つ包括的にチェックポイントを取得することで、ヒューマンレベルでの見落としを防ぐことである。チェックポイント外部化プログラム群129は、主に、外部レベルテストの際に実行される(一部のコンピュータプログラムは、外部レベルテストと内部レベルテストの両方で実行される)。外部レベルテストでは、前述したように、新旧のソフトウェアが、新旧のARが受けた同一の外部入力に応じたアクションを行う。以下、新旧のARが同一の外部入力を受ける前のことを「外部入力受領前」と言い、新旧のソフトウェアが同一の外部入力に応答したアクションを行うことを「アクション実行」と言い、新旧のソフトウェアがそのアクションを行った後のことを「アクション実行後」と言う。
【0038】
図4は、チェックポイント外部化プログラム群129に含まれる複数のコンピュータプログラムを示す。
【0039】
それら複数のコンピュータプログラムとして、例えば、データベース(DB)比較プログラム1291、ファイル状況差分検出プログラム1292、ネットワークリクエスト検出プログラム1293、DB接続検出プログラム1294及び変数値差分検出プログラム1295がある。
【0040】
DB比較プログラム1291は、旧ソフトウェアがアクセスするDB(以下、「旧DB」と言う)内の全レコードと、新ソフトウェアがアクセスするDB(以下、「新DB」と言う)内の全レコードとの比較(以下、「全レコード比較」と言う)を行う。DB比較プログラム1291は、外部レベルテストで実行される。DB比較プログラム1291は、この比較を、アクション実行後の都度に行う。
【0041】
なお、新旧のソフトウェアの種類によっては、新旧のDBの更新の際に、更新時刻が新旧のDBに書き込まれることになる。同一の外部入力が新旧のARで受領されたことに応答した新旧のDBの更新を、正確に同じ時刻に行うことは困難であり、通常、新旧のDBの更新時刻は異なる。そうすると、ソフトウェアマイグレーションが正しく行われているとしても、全レコード比較では、不一致のレコードが存在することとなる。更新時刻に限らず、レコードの種類によって、レコードが新旧で同じにならないこともある。
【0042】
そこで、DB比較プログラム1291が、設定ファイルに基づいて動作を制御する構成とされ、その設定ファイルに、全レコード比較での対象から除外するレコードのカラムを表す情報(例えばテーブル名とカラム名との組み合わせ)が設定される。これにより、DB比較プログラム1291は、除外対象のカラムに属するレコード以外の全レコードを新旧で比較することになる。
【0043】
また、DB比較プログラム1291が、新旧のDBを特定するための情報を検出したならば、新旧のDBに属する全てのテーブルに関する情報(例えばテーブル名)を自動で取得する構成とされる。これにより、作業者が、設定ファイルに、新旧のDBを特定するための情報(例えば、新旧のDBの位置情報)を設定しておきさえすれば、新旧のDBに属する各テーブルに関する情報を設定しなくても、DB比較プログラム1291は、新旧のDBに属する全てのテーブルに関する情報を取得することができる。
【0044】
さて、ファイル状況差分検出プログラム1292は、旧ソフトウェアについてのファイル状況差分(以下、「旧ファイル状況差分」と言う)と、新ソフトウェアについてのファイル状況差分(以下、「新ファイル状況差分」と言う)とを検出する。ここで、「ファイル状況」とは、所定の記憶空間(例えば、サーバ100のファイルシステムにおけるルートディレクトリ以下の空間)にどんなファイルが存在しているかであり、具体的には、例えば、所定の記憶空間に存在するファイルのファイル名のリストである。ファイル状況差分検出プログラム1292は、外部レベルテストと内部レベルテストの両方で実行される。従って、「ファイル状況差分」は、内部ファイル状況差分と、外部ファイル状況差分の2種類がある。「内部ファイル状況差分」とは、対象FUが呼び出される前のファイル状況と、対象FUが呼び出されてログファイルが作成された後のファイル状況との差分である。「外部ファイル状況差分」とは、外部入力受領前のファイル状況と、アクション実行後のファイル状況との差分である。ファイル状況差分検出プログラム1292は、内部レベルテストでは、対象FUの呼び出し前とログファイルの作成後の都度に実行され、外部レベルテストでは、外部入力受領前とアクション実行後の都度に実行される。なお、内部レベルテストと外部レベルテストの各々では、比較プログラム133によって、旧ファイル状況差分と新ファイル状況差分が比較され、互いに実質的に一致するか否かが判定される。
【0045】
ネットワークリクエスト検出プログラム1293は、ネットワークI/F111を通じて何らかのリクエストが流れているか否かを監視し、流れていたらそのリクエストを検出する。ネットワークリクエスト検出プログラム1293は、外部入力受領前からアクション受領後にかけて監視を行う。ネットワークリクエスト検出プログラム1293は、外部レベルテストと内部レベルテストの両方で実行される。なお、内部レベルテストと外部レベルテストの各々では、比較プログラム133によって、新旧のソフトウェアについての監視の結果が比較される。
【0046】
DB接続検出プログラム1294は、旧ソフトウェアの旧DBに対するコネクションと新ソフトウェアの新DBに対するコネクションとがそれぞれアクション実行後に切断されたか否かを検出する。DB接続検出プログラム1294は、外部レベルテストで実行される。DB接続検出プログラム1294は、DB差分検出プログラム1291と同様に、アクション実行後の都度に、コネクションの切断の有無を検出する。
【0047】
変数値差分検出プログラム1295は、旧ソフトウェアについての全変数値差分(以下、「旧全変数値差分」と言う)と、新ソフトウェアについての全変数値差分(以下、「新全変数値差分」と言う)とを検出する。ここで、「全変数値」とは、サーバ100内に存在する全ての変数値のことである。変数値差分検出プログラム1295は、外部レベルテストと内部レベルテストの両方で実行される。従って、「全変数値差分」は、内部全変数値差分と、外部全変数値差分の2種類がある。「内部全変数値差分」とは、対象FUが呼び出される前の全ての変数値と、対象FUが呼び出されてログファイルが作成された後の全ての変数値との差分である。「外部全変数値差分」とは、外部入力受領前に存在する全ての変数値と、アクション実行後に存在する全ての変数値との差分である。変数値差分検出プログラム1295は、内部レベルテストでは、対象FUの呼び出し前とログファイルの作成後の都度に実行され、外部レベルテストでは、外部入力受領前とアクション実行後の都度に実行される。なお、内部レベルテストと外部レベルテストの各々では、比較プログラム133によって、旧全変数値差分と新全変数値差分が比較され、互いに実質的に一致するか否かが判定される。
【0048】
以下、図5を参照して、本実施形態に係るソフトウェアマイグレーションで行われる処理の流れを説明する。なお、図5において、作業者(例えばオフショアの人間)によって行われる処理を表すボックスの線を細くし、コンピュータによって行われる処理を表すボックスの線を太くしている。また、図5における「S」は、Stepの頭文字を表す。図5に記載の各ステップの番号は、図2に記載の各フェーズの番号に対応する。例えば、1000番台のステップに対応した処理は、P1000(現行システム分析)に所属する処理であり、4000番台のステップに対応した処理は、P4000(継続的インテグレーション)に所属する処理であり、5000番台のステップに対応した処理は、P5000(新旧稼動比較テスト)に所属する処理である。
【0049】
S1100:
旧ソフトウェアから複数の旧FUが把握される。具体的には、入力された旧ソフトウェアソースコードから複数の旧FUソースコードが把握される。ここで重要なことは、図6に例示するように、旧ソフトウェアソースコード201を所定の規則に従って形式的に区切ることで、結果として、旧FUソースコード201から複数の旧FUソースコードが特定されることである。従って、旧ソフトウェアが有する業務要件を理解して旧ソフトウェアソースコード201を旧ソフトウェアの業務要件単位で区切る(つまり意味的に区切る)ことは、全く必要ない。つまり、旧ソフトウェアがどんな業務要件を有するかということは全く考慮する必要が無い。このS1100の処理は、作業者によって行われるが、それに代えて、例えば、コンピュータプログラムが、上記の所定の規則に従って旧ソフトウェアソースコード201から複数の旧FUソースコードを把握することも可能である。なお、上記の所定の規則としては、例えば、第一種の所定のコード(例えば“Sub”)と第二種の所定のコード(例えば“End Sub”)との間を一つの旧FUソースコードとするという規則を採用することができる。
【0050】
各旧FU(各旧FUソースコード)について、下記S1200乃至S1600が行われる。以下、処理の対象となる旧FUを、「対象旧FU」と言い、対象旧FUのソースコードを、「対象旧FUソースコード」と言う。
【0051】
S1200:旧FUソースコードの分析
対象旧FUから複数のセクションが把握される。具体的には、対象旧FUソースコードから、複数のセクションソースコードが把握される。ここでも、対象旧FUソースコードが意味的に区切られるのではなく(すなわち、対象旧FUの機能を理解し機能毎に区切らえるのではなく)、形式的に区切られる(すなわち、所定の規則に従って区切られる)ことで、結果として、対象旧FUソースコードから複数のセクションソースコードが把握されることになる。S1200も、S1100と同様、作業者によって行われるが、それに代えて、例えば、コンピュータプログラムが、所定の規則に従って対象旧FUソースコードを複数のセクションソースコードに区切ることも可能である。
【0052】
S1300:セクション関係の構築
作業者が、セクション関係を構築する。すなわち、セクションとセクションとの関連付けが行われる。この結果、図7に例示するように、どのセクションがどのセクションに対して関連するかが定義される。図7では、丸が、セクションを表しており、矢印が、リンクを表している。図7から分かるように、セクションとセクションとの関連付けにより、多数通りのパスができる。パスは、リンクで結ばれた一連のセクションで構成される。セクション間の関連付けは、対象旧FUソースコードを基に機械的に行うことができる。つまり、ここでも、対象旧FUソースコードが有する機能が何であるかを理解する必要は無い。なお、S1300では、セクション関係情報(どのセクションがどのセクションにリンクを張られているかを表す情報)を基に、循環的複雑度分析プログラム121が、図7に例示したようなセクション関係を表すセクション関係情報を、作業者端末50の表示装置53に表示することができる。この場合、作業者端末50で実行される図示しないブラウザが、そのセクション関係情報が表すセクション関係(つまり図7に示す関係)を、表示装置53のディスプレイ画面に表示することができる。
【0053】
S1400:循環的複雑度の算出
循環的複雑度分析プログラム121が、セクション関連情報から、セクション数及びリンク数を把握し、把握したセクション数及びリンク数を用いて、循環的複雑度を算出する。循環的複雑度を算出する目的は、対象旧FUについて幾つの旧テストプログラム122を作成したら良いかを知るためである。備循環的複雑度数の計算式は、下記(式1)、
循環的複雑度=リンク数−セクション数+(1+リーフ数(終点セクション数))・・(式1)、
である。
【0054】
S1500:旧テストプログラム122の作成
作業者が、算出された循環的複雑度に基づく数の旧テストプログラム122を作成する。「循環的複雑度に基づく数」とは、循環的複雑度を考慮して決定された数のことであり、循環的複雑度と同じ数であっても異なる数であっても良い。本実施形態では循環的複雑度と同じ数とする。旧テストプログラム122は、複数のパスのうちの対象とするパスを経由させる情報を対象旧FUに入力することで、旧ソフトウェアのプロセスの結果としてのログファイルを出力させるためのコンピュータプログラムである。旧テストプログラム122の作成においても、旧ソフトウェアがどんな業務要件を有しているかを作業者は全く知らなくてよい。すなわち、本実施形態では、旧ソフトウェアの業務要件を把握することなく、いきなり、業務が有するプロセスを調べることになる。ちなみに、本実施形態の説明では、旧テストプログラム122(又は新テストプログラム123)が対象の旧FU(又は新FU)を呼び出すことで行われる振舞いのことを「プロセス」と言い、ARが外部入力を受けることで行われる振舞いのことを「アクション」と言う。
【0055】
S1600:対象の旧FUに対応した全ての旧テストプログラムの実行
対象旧FUに対応した全ての旧テストプログラム122が実行される。旧テストプログラム122が実行されると、旧ソフトウェアのプロセスの結果として旧ログファイルが作成される。一つの旧テストプログラム122の実行につき、一つの旧ログファイルが作成されるので、このS1600では、対象旧FUの循環的複雑度と同数の旧ログファイルが作成される。作成された旧ログファイルは記憶装置105に格納される。
【0056】
S1700:スケジューラ用テキストの作成
全ての旧FUについてS1200〜S1600が実行されると、旧ソフトウェアについて多数の旧ログファイルが作成されていることになる。ログチェッカー125が、それら多数の旧ログファイルを入力し、多数の旧ログファイルを分析して、スケジューラ用テキストを作成する。「スケジューラ用テキスト」とは、FU変換スケジューラ131に入力されるテキストファイルである。このテキストファイルには、複数のFU呼出し関係が記録されている。「FU呼出し関係」とは、どの旧FUからどの旧FUが呼び出されたかの関係である。
【0057】
S1800:FU変換スケジュールの作成
FU変換スケジューラ131が、入力されたスケジューラ用テキストを基に(例えば、複数のFU呼出し関係を基に)、FU呼出し依存関係を把握する。FU呼出し関係に対し、「FU呼出依存関係」とは、FUの呼出しの向きとFUの依存度とによって定まるFU間の関係である。FU呼出し依存関係の一例を図12に示す。図12の矢印の向きは、呼び出しの向きである。従って、例えば、FU11からFU10が呼び出され、FU10からFU2が呼び出され、FU2からFU1が呼び出される場合には、図12に示すような関係になる。末端(木構造におけるリーフ)に近いほど、依存度が低く、先端に近いほど(末端から遠いほど)、依存度が高いということになる。従って、FU1,FU3,FU5,FU7,FU12が、最も依存度が低く、FU2,FU4,FU8,FU9が、2番目に依存度が低く、FU6,FU10が、3番目に依存度が低く、FU11が、4番目に依存度が低い(つまり最も依存度が高い)、ということになる。図12では、FU4は、一つのFU3にのみ依存し、FU8は、二つのFU5及びFU7に依存し、この結果、FU8の方がFU4よりも依存度が高いように見えるが、末端FUからの距離が同じため、依存度も同じである。FU変換スケジューラ131は、把握されたFU呼出し依存関係を基に、依存度の低い旧FUからFU変換を行うことを表したFU変換スケジュールを作成する。
【0058】
S1800の終了が、P1000(現行システム分析)の終了である。この後、P2000(変換方式設計)が行われる。すなわち、複数の言語変換ツール130の中からこのソフトウェアマイグレーションでのFU変換に使用される言語変換ツール130が選定される。また、旧ソフトウェアの何パーセントを自動で言語変換できるかが特定される。旧ソフトウェアの自動で言語変換できないパートがあれば、そのパートについて、P3000(技術差異分析)が行われる。その後、P4000(継続的インテグレーション)が行われる。
【0059】
P4000(継続的インテグレーション)では、FU変換スケジュールに従って、依存度の低い旧FUから、以下のS4100〜S4300が行われる。
【0060】
S4100:FU変換
対象の旧FUから新FUへのFU変換が行われる。
【0061】
S4200:内部レベルテスト
対象の旧FUに対応する旧テストプログラム122を基に(例えば、旧テストプログラム122の言語が旧言語から新言語に言語変換ツール130を使用して変換されることにより)、新テストプログラム132が作成される(新テストプログラム132は、継続的インテグレーションの前に作成されていても良い)。そして、内部レベルテストが行われる。具体的には、例えば、対象の新FU(変換後の新FU)に対応した新テストプログラム132が実行されることで、対象の新FUに対応した新ログファイルが作成される。また、対象の新FUに対応した旧FUの旧ログファイルが記憶装置105から読み出される。そして、作成された新ログファイルが、読み出された旧ログファイルと比較される。それらのログファイルの内容が実質的に同じであれば、正しくFU変換が行われたということであり、故に、次のS4300(インテグレーション処理)が行われる。それらのログファイルの内容が実質的に違っていれば、手動で、新FUが編集される。
【0062】
S4300:インテグレーション処理
S4200で得られた新FUの呼出し先の新FUが既にあれば(S4200で得られた新FUよりも依存度の低い新FUが取得済みであれば)、その呼び出し先の新FUに、S4200で得られた新FUがインテグレートされる。
【0063】
以上のように、FU変換の都度に、内部レベルテストが実行され、内部レベルテストの結果に異常が無ければ、FU変換で得られた新FUが依存度のより低い新FUにインテグレートされる。図12の例で言えば、FU1が先にFU変換されており、その後に、FU2がFU変換され、FU2についての内部レベルテストの結果が異常無しであれば、FU2がFU1にインテグレートされる。
【0064】
以上の一連の処理で、旧ソフトウェアから新ソフトウェアへのソフトウェアマイグレーションが暫定的に完了する。この後に、P5000(新旧稼働比較テスト)で外部レベルテストが実行され、外部レベルテストの結果も異常無しであれば、旧ソフトウェアから新ソフトウェアへのソフトウェアマイグレーションが完全に完了する。P5000(新旧稼働比較テスト)では、以下のS5100及びS5200が行われる。
【0065】
S5100:スクリーン入力ケースデータの作成
複数のスクリーン入力ケースデータが作成される。「スクリーン入力ケースデータ」とは、作業者がどのスクリーンに対してどんなスクリーン入力を行うか(例えばどんな値を入力してどんなボタンを押すか)のケースを規定したデータである。一つのARにつき、そのARの循環的複雑度と同数のスクリーン入力ケースデータが作成される。また、スクリーン入力ケースデータは、新旧のARについてそれぞれ作成される。以下、旧ARに対応したスクリーン入力ケースデータを「旧スクリーン入力ケースデータ」と言い、新ARに対応したスクリーン入力ケースデータを「新スクリーン入力ケースデータ」と言う。
【0066】
全ての新旧のスクリーン入力ケースデータについて、S5200が実行される。
【0067】
S5200:外部レベルテストの実行
新旧のスクリーン入力ケースデータに従うスクリーン入力が新旧のスクリーンに対して行われると、新旧のARが、新旧のスクリーンから同一の外部入力を受ける。その外部入力に応じたアクションを、新旧のソフトウェアが実行する。また、新旧のアクションに関して、チェックポイント外部化プログラム群129も実行される。
【0068】
全ての新旧のスクリーン入力ケースデータについて、S5200が行われ、その結果、異常無しであれば、本実施形態に係るソフトウェアマイグレーションが完全に終了する。
【0069】
以下、図5を参照して説明した流れにおけるS1500以降について、詳細に説明する。
【0070】
<S1500(旧テストプログラム122の作成)>。
【0071】
前述したように、構築されたセクション関係には、多数のパスが存在する。一つのパスは、リンクで結ばれている一連のセクションで構成されている。旧テストプログラム122は、対象の旧FUについて対象のパスの経由が実行される(対象のパスを構成するセクションの並び順にセクションが呼び出されるようにする)ためのプログラムである。対象パスの経由の実行は、対象の旧FUにセットされる入力情報で定義される。入力情報は、旧テストプログラム122がセットする。従って、対象の旧FUの循環的複雑度と同数の旧テストプログラム122を作成するということは、対象の旧FUにおける多数のパスのうちの、その循環的複雑度と同数のパスが経由されるということ(別の言い方をすれば、その循環的複雑度と同数の異なる種類の入力情報を作成するということ)である。
【0072】
作業者は、テスティングフレームワークを土台とし、テスティングフレームワークにコンピュータプログラムを組み込むことで、旧テストプログラム122を作成する。本実施形態では、テスティングフレームワークとして、xUnitコンセプトをベースとしたフレームワークが利用される。なぜなら、年代的に古い言語(例えば、FORTRAN、Cobol、Visual Basic)、では、フレームワークが無いが、xUnitコンセプトをベースとしたフレームワークにコンピュータプログラムを組み込むことで作成された旧テストプログラム122であれば、そのような年代的に古い言語で記述されている対象旧FUに対しても、テストを実行することが可能であるためである。各旧テストプログラム122には、例えば、処理の実行手順が記述される。
【0073】
<S1600(旧テストプログラム122の実行)>。
【0074】
図8は、旧ソフトウェアの構成と、旧テストプログラム122から呼び出された後の旧ソフトウェアのプロセスの概要を示す。
【0075】
旧ソフトウェア120は、複数のSCを有する。「SC」とは、Structural Componentの略であり、一又は複数の旧FUの論理的な入れ物である。SCは、例えば、旧言語がビジュアルベーシックの場合、拡張子が“.frm”であるソースコードであり、旧言語がコボルの場合、拡張子が“.cbl”であるソースコードである。
【0076】
旧テストプログラム122の実行よりも前に、作業者によって、各旧FUに、ロガー301が設定される(すなわち、各旧FUソースコードに、ロガーステートメントが記述される)。ロガー301は、例えば、各旧FUのセクション毎に設定される。ロガー301の役割は、そのロガー301を有するセクションが呼び出されたことのログ(そのセクションがどのSC内のどの旧FU内のセクションであるかのログ)を旧ログファイルに書き込むことである。ロガー301は、旧ログファイルにログを書き込む前に、旧ログファイルの排他制御のために旧ログファイルにロックをかけ、その後に、旧ログファイルにログを書き込み、ログを書き込んだ後に、ロックを解除する。
【0077】
一つの旧テストプログラム122の結果として一つの旧ログファイルが作成されるが、その流れの概要は、例えば下記の通りである。
【0078】
まず、旧テストプログラム122が、対象の旧FU11に、その旧テストプログラム122に定義されている入力情報をセットする(S1)。
【0079】
次に、旧テストプログラム122が、ロガーフレームワーク124に、旧ログファイルの準備を要求する(S2)。ロガーフレームワーク124は、その要求に応答して、旧ログファイル#11を準備する(S3)。
【0080】
次に、旧テストプログラム122は、対象の旧FU11を呼び出す(S4)。この結果、S1でセットされた入力情報に応じたセクション、例えばセクションAが起動する。起動したセクションAに設定されているログステートメントAが、セクションAが呼び出されたことのログ(例えば、セクションAの名称と、セクションAを有する旧FU11の名称と、旧FU11を有するSC1の名称とで構成されたログ)を書くことを、ロガーフレームワーク124に要求する。その要求に応答して、ロガーフレームワーク124によって、ログステートメントAが有する値(旧SC2内の旧FU1におけるセクションAを表す情報)が、旧ログファイル#11に書き込まれる(S5)。
【0081】
次に、セクションAは、S1でセットされた入力情報に基づき、旧SC1内の旧FU6におけるセクションCを呼び出す(S6)。このセクションCに設定されているログステートメント(図示せず)が、旧SC1内の旧FU6におけるセクションCが呼び出されたことのログを書くことを、ロガーフレームワーク124に要求する。その要求に応答して、ロガーフレームワーク124によって、ログステートメントが有する値(旧SC1内の旧FU6におけるセクションCを表す情報)が、旧ログファイル#11に書き込まれる(S7)。
【0082】
次に、旧FU6内のセクションCは、S1でセットされた入力情報に基づき、旧SC3内の旧FU8におけるセクションDを呼び出す(S8)。このセクションDに設定されているロガー(図示せず)が、旧SC3内の旧FU8におけるセクションDが呼び出されたことのログを書くことを、ロガーフレームワーク124に要求する。その要求に応答して、ロガーフレームワーク124によって、ログステートメントが有する値(旧SC1内の旧FU6におけるセクションCを表す情報)が、旧ログファイル#11に書き込まれる(S9)。
【0083】
以降、S1でセットされた入力情報に基づき、セクションから別のセクションへの呼出しと、呼び出されたセクションのことを示すログの旧ログファイル#11に対する書き込みとが繰り返される。これにより、一つの旧テストプログラム122に対応した一つの旧ログファイル#11が作成される。
【0084】
図9は、旧テストプログラム122の実行に起因して呼び出される各種コンピュータプログラムと、作成される各種ファイルの一例を示す。なお、この図には、S1600の詳細に加えて、S1700(スケジューラ用テキストの作成)及びS1800(FU変換スケジュールの作成)で行われる処理も示されている。
【0085】
ロガーフレームワーク601には、コンピュータプログラムとして、例えば、セクションロガー603及びチェックポイント結果ライタ605が組み込まれている。セクションロガー603は、旧テストプログラム122(又は新テストプログラム132)からの要求に応答して、旧ログファイル203(又は新ファイル)をオープン(準備)したりクローズしたりする。チェックポイント結果ライタ605は、旧テストプログラム122(又は新テストプログラム132)の実行によって旧ソフトウェア200(又は新ソフトウェア)に発生したチェックポイント結果値を、チェックポイント結果ファイル430に書き込む。
【0086】
例えば、旧テストプログラム122には、処理の実行手順として、以下の(1)〜(5)の順番、
(1)初期値(入力情報)の設定、
(2)前バッチプログラム126の呼び出し、
(3)旧ログファイル(セクションログファイル)の作成、
(3−1)旧ログファイルのオープン(準備)、
(3−2)対象旧FUの呼び出し、
(3−3)旧ログファイルのクローズ、
(4)チェックポイント結果チェッカー123の呼び出し、
(5)後バッチプログラム127の呼び出し、
で処理を実行することが定義されている。なお、(3−1)の処理定義に関連して、準備された旧ログファイル203に書き込むべき情報、すなわち、FUフルネーム(SC名及びFU名で構成された名称)、テストケース番号及び対象のパスの構成が書き込まれている。
【0087】
以下、各処理を説明する。
【0088】
<<(1)初期値(入力情報)設定>>
旧テストプログラム122は、図示しない所定の初期値(入力情報)を、旧ソフトウェア200に設定する。
【0089】
<<(2)前バッチプログラム126の呼び出し>>
旧テストプログラム122は、前バッチプログラム126を呼び出す。
【0090】
前バッチプログラム126は、呼び出されると、以下の3つの処理、
・ファイル状況差分検出プログラム(FileDiffDetector)1292の呼び出し、
・ネットワークリクエスト検出プログラム(NetworkReqDetector)1293の開始、
・変数値検出プログラム(VariableDiffDetector)1295の呼び出し、
を実行する。
【0091】
ファイル状況差分検出プログラム1292は、呼び出されると、呼び出された時点(ここでは、旧ログファイルの作成前)のファイル状況(所定の記憶空間に存在するファイルのファイル名のリスト)を検出し、検出されたファイル状況を表す結果ファイル400Bを作成する。
【0092】
ネットワークリクエスト検出プログラム1293は、開始されると、ネットワークI/F111を通じて何らかのリクエストが流れているか否かを定期的にチェックし、チェックの都度に、チェックの結果を、結果ファイル410に書き込む。
【0093】
変数値差分検出プログラム1295は、呼び出されると、呼び出された時点(ここでは、旧ログファイルの作成前)に存在する全ての変数情報(変数名と変数値とのペア)を検出し、検出された全ての変数情報を記録した結果ファイル500Bを作成する。
【0094】
<<(3−1)旧ログファイルの準備>>
旧テストプログラム122が、このプログラム122に記述されているFUフルネーム及びテストケース番号を使用して、ロガーフレームワーク601に組み込まれているセクションロガー603を呼び出す。それにより、FUフルネーム及びテストケース番号を持った、ロガーのインスタンスが、サーバ100内の主記憶装置に展開される。旧テストプログラム122が、セクションロガー603に、旧ログファイルの準備を要求する。その際、旧テストプログラム122は、このプログラム122に記述されている対象パスの構成を、セクションロガー603に渡す。セクションロガー603は、旧テストプログラム122からの準備要求に応答して、FUフルネーム及びテストケース番号に基づいて作成したファイル名の旧ログファイル203を準備する(例えば、メモリ等の主記憶装置に旧ログファイル203を展開する)。そして、セクションロガー603は、FUフルネーム、テストケース番号及び対象パスの構成を、準備された旧ログファイル203に書き込む(図10の1〜3行目を参照)。
【0095】
<<(3−2)対象旧FUの呼び出し>>
次に、旧テストプログラム122が、FUフルネームから特定される対象の旧FUを呼び出す。これにより、図8を参照して説明したように、セクションが次々に呼び出される。具体的には、対象パスを構成する複数のセクションが、対象パスを構成するセクションの並び順で呼び出される。セクションが呼び出される都度に、呼び出されたセクションに埋め込まれているログステートメントがセクションロガー603を使用する(セクションロガー603に要求を出す)ことによって、呼び出されたセクションを表す情報(つまりそのセクションが呼び出されたことのログ)が旧ログファイル203に書き込まれる。図9の例は、対象の旧FUに存在する二つのセクションA及びBがセクションA、Bの順で呼び出され、セクションAに埋め込まれているログステートメント内の値(セクションAを表す情報)と、セクションBに埋め込まれているログステートメント内の値(セクションBを表す情報)が、セクションロガー603によってログファイル203に書き込まれたことを表す。
【0096】
<<(3−3)旧ログファイルのクローズ>>
対象パスを構成する全てのセクションが呼び出されたならば、旧テストプログラム122が、ロガーフレームワーク601に組み込まれているセクションロガー603に、クローズを要求する。セクションロガー603は、旧テストプログラム122からのクローズ要求に応答して、旧ログファイル203をクローズする(例えば、主記憶装置から補助記憶装置にログファイル203を書き出し、主記憶装置からそのログファイル203を削除する)。これにより、作成された旧ログファイル203が記憶装置105に保存される。その際、そのクローズ要求を受けたセクションロガー603がサーバ100内の主記憶装置から消去されても良いし、消去されずに後でパラメータ(FUフルネーム及びテストケース番号)が設定され直されても良い。
【0097】
<<チェックポイント結果チェッカー123の呼び出し>>
旧テストプログラム122が、チェックポイント結果チェッカー123を呼び出す。呼び出されたチェックポイント結果チェッカー123は、まず、ロガーフレームワーク601に組み込まれているチェックポイント結果ライタ605に、チェックポイント結果ファイルの準備を要求する。チェックポイント結果ライタ605は、チェックポイント結果チェッカー123からの準備要求に応答して、チェックポイント結果ファイル430を準備する。次に、チェックポイント結果チェッカー123は、旧テストプログラム122の実行結果として旧ソフトウェアに発生したチェックポイント結果値を参照し、参照したチェックポイント結果値の書込みを、チェックポイント結果ライタ605に依頼する。チェックポイント結果ライタ605は、その依頼に応答して、チェックポイント結果値を、チェックポイント結果ファイル430に書き込む。最後に、チェックポイント結果チェッカー123は、チェックポイント結果ライタ605に、チェックポイント結果ファイルのクローズを要求する。チェックポイント結果ライタ605は、チェックポイント結果チェッカー123からのクローズ要求に応答して、チェックポイント結果ファイル430をクローズする。これにより、チェックポイント結果ファイル430が、記憶装置105に格納される。
【0098】
<<(5)後バッチプログラム127の呼び出し>>
旧テストプログラム122は、後バッチプログラム127を呼び出す。
【0099】
後バッチプログラム127は、呼び出されると、以下の3つの処理、
・ファイル状況差分検出プログラム1292の呼び出し、
・ネットワークリクエスト検出プログラム1293の終了、
・変数値検出プログラム1295の呼び出し、
を実行する。
【0100】
ファイル状況差分検出プログラム1292は、呼び出されると、呼び出された時点(ここでは、旧ログファイル作成後)のファイル状況を取得し、取得されたファイル状況を表す結果ファイル400Aを作成する。なお、この時点で、ファイル状況差分検出プログラム1292は、この結果ファイル400Aと、旧ログファイルの作成前の上述の結果ファイル400Bとを比較することにより旧内部ファイル状況差分を取得し、旧内部ファイル状況差分を表すファイルを作成して記憶装置105に格納しても良い。
【0101】
ネットワークリクエスト検出プログラム1293が終了されると、ネットワークI/F111を通じて何らかのリクエストが流れているか否かの監視が行われなくなる。
【0102】
変数値差分検出プログラム1295は、呼び出されると、呼び出された時点(ここでは、旧ログファイル作成後)に存在する全ての変数情報を検出し、検出された全ての変数情報を記録した結果ファイル500Aを作成する。なお、この時点で、変数値差分検出プログラム1295は、この結果ファイル500Aと、旧ログファイルの作成前の上述の結果ファイル500Bとを比較することにより旧内部全変数値差分を取得し、旧内部全変数値差分を表すファイルを作成して記憶装置105に格納しても良い。
【0103】
以上の一連の処理により、一つの旧テストプログラム122につき一つの旧ログファイル203が作成される。全ての旧FUについて全ての旧テストプログラム122が実行されると、多数のログファイル203が作成される。
【0104】
スクリーン遷移アナライザ128は、多数の旧ログファイル203(又は多数の新ログファイル)を分析することで、旧ソフトウェア200(又は新ソフトウェア)のスクリーンの遷移の流れを把握し、把握したスクリーン遷移を表す情報を、結果ファイル450に書き込む。
【0105】
以上、図8及び図9を参照して、旧テストプログラム122の実行と旧ログファイル203の作成とを説明したが、この説明は、新テストプログラム132の実行と新ログファイルの作成にも適用される説明である。すなわち、ロガー301付きの旧FUをFU変換すると、ロガー付きの新FUが得られる。このため、新テストプログラム132が実行されると、新FUに埋め込まれているロガーによって、新ログファイルにログが書き込まれることになる。また、後に説明する図10は、或る旧テストプログラム122の実行により作成された旧ログファイル203の中身の具体例を示しているが、その旧テストプログラム122に対応する新テストプログラム132の実行により作成される新ログファイルの中身も、図10に例示した中身と実質的に同じとなる。
【0106】
<S1700(スケジューラ用テキストの作成)>。
【0107】
ログチェッカー125は、多数の旧ログファイル203を分析して、以下の(1)及び(2)、
(1)各対象パスが正確に経由されたかを検出し、検出の結果を表す情報を、結果ファイル420に書き込む、
(2)各FU呼び出し関係を記録したスケジューラ用テキスト440を作成する、
を実行する。
【0108】
例えば、図10に示す旧ログファイル203の中身の具体例によれば、ログチェッカー125は、8個のログ(7〜14行目の8行のログ)があることから、テストケース#1に対応した旧テストプログラム122によって対象旧FUが呼び出された場合に8個のセクションが呼び出されたことがわかる。また、8個のログにおけるSC名及びFU名の組合せとFUフルネームとの比較から、ログチェッカー125は、対象旧FU内にあるセクションに対応したログは、7行目及び11〜14行目の計5個であることがわかる。また、ログチェッカー125は、その5個のログの並び順から、対象旧FUでのセクションの呼び出し順序(つまり達成されたパス)が、A,C,D,E及びGであることを特定でき、対象パスの構成(A、C、D、E及びG)との比較により、対象パスの構成通りにセクションが呼び出された(つまり達成されたパスは正しい)ことを検出することができる。更に、ログチェッカー125は、8〜10行目のログから、対象旧FUが別の旧FUを呼び出すというFU呼出し関係がわかる。
【0109】
各旧ログファイル203について上記のような分析をすることで、ログチェッカー122は、旧ソフトウェアにおける多数のFU呼出し関係を把握する。
【0110】
また、図11に示すように、ログチェッカー125は、多数の旧ログファイル203に加えて、以下の2つのパラメータ値、
(A)各旧FUに対応した循環的複雑度、
(B)作業者の人数、
を参照することで、図11に示すスケジューラ用テキスト440を作成する。
【0111】
このスケジューラ用テキスト440によれば、各行が、各旧FUに対応しており、各行における要素は、左から、旧FUのID、旧FUの名称、人日数、FU変換開始日、FU変換終了日、呼出し先旧FUのID、担当作業者IDである。
【0112】
人日数は、一人で旧FUのFU変換を担当した場合に要する時間を意味する。具体的には、例えば、旧FU1の循環的複雑度が“26”であり、作業者の人数が“20”である場合、ログチェッカー125は、旧FU1の人日数を、26÷20=1.3人日、と計算する。
【0113】
FU変換開始日及びFU変換終了日は、本例では全てが同じ値のデフォルト値となっている。FU変換開始日及びFU変換終了日は、FU呼出し依存関係、各旧FUの人日数及び担当作業者IDに基づいて、FU変換スケジューラ131によって自動で調整される。
【0114】
呼出し先旧FUのIDが記録されていない行に対応した旧FUは、呼び出す旧FUが存在しないため、依存度の最も低い旧FUである。
【0115】
旧FUに対応した担当作業者は、例えば、P1000(現行システム分析)でその旧FUのソースコードの分析を担当した作業者である。
【0116】
上記(A)及び(B)のパラメータ値や、旧FUのIDと担当作業者IDとの対応関係は、例えば、或る記憶装置(例えば、サーバ100内の記憶装置105、又は、サーバ100と通信可能な遠隔の記憶装置)に登録される。ログチェッカー125は、上記或る記憶装置から、登録されている(A)及び(B)のパラメータ値や、旧FUのIDと担当作業者IDとの対応関係を読み出すことで、(A)及び(B)のパラメータ値を入力したり、各旧FUに対応する担当作業者IDを把握したりすることができる。
【0117】
<S1800(FU変換スケジュールの作成)>。
【0118】
スケジューラ用テキスト440には、呼出し先旧FUのIDが旧FU毎に記録されていることから、多数のFU呼出し依存関係が記録されていることになる。
【0119】
FU変換スケジューラ131が、スケジューラ用テキスト440を解釈することで、多数のFU呼出し関係をまとめたFU呼出し依存関係(例えば図12に例示する木構造の関係)を把握する。FU変換スケジューラ131は、FU呼出し依存関係と、各旧FUに対応した人日数及び担当作業者IDに基づいて、FU変換スケジュールを作成する。FU変換スケジューラ131は、作成したFU変換スケジュールを表す情報を、作業者端末50に送信する。これにより、例えば図13に示すように、作業者端末50が有する表示装置53のディスプレイ画面に、FU変換スケジュールが表示される。
【0120】
なお、図13において、各色付きブロックの横幅は、各旧FUのFU変換に要する作業期間を意味し、矢印の向きは、旧FUの変換順序を意味する。作業期間は、例えば、その旧FUの人日数に担当作業者の人数を除算して得られた値である。FU変換スケジューラ131にスタート日時(例えば10月1日月曜日の6時)が設定されると、FU変換スケジューラ131が、各旧FUの依存度に基づいて、旧FUの変換順序を決定したり、各旧FUの人日数及び担当作業者IDを基に、各旧FUについての作業期間(変換開始日時及び変換終了日時)を決定したりすることができる。その際、FU変換スケジューラ131は、同一の作業者が同じ時間帯に複数の旧FUの作業期間が重ならないよう各旧FUの作業期間を調整することができる。また、図示しないが、FU変換スケジューラ131は、指定された担当作業者のIDをキーにして、指定された担当作業者についてのスケジュールのみを抽出して表示することもできる。
【0121】
<S4200(内部レベルテスト)>。
【0122】
内部レベルテストでは、前述したように、対象の新FUに対応した全ての新テストテストプログラム(対象の新FUの循環的複雑度と同数の新テストプログラム)132が実行されることで、対象の新FUの循環的複雑度と同数の新ログファイルが作成される。また、新テストプログラム132が実行されると、図9を参照して説明した旧テストプログラム122の実行と同様に前バッチプログラム126及び後バッチプログラム127が呼び出される。このため、一つの新テストプログラム132につき、以下の(1)〜(5)の結果ファイル、
(1)新ログファイル作成前の新ファイル状況を表す結果ファイル、
(2)新ログファイル作成後の新ファイル状況を表す結果ファイル、
(3)ネットワークリクエストの検出結果を表す結果ファイル、
(4)新ログファイル作成前の新全変数値を表す結果ファイル、
(5)新ログファイル作成後の新全変数値を表す結果ファイル、
が作成される。
【0123】
ファイル状況差分検出プログラム1292は、上記(1)と(2)の結果ファイルを比較することにより、新内部ファイル状況差分を取得する。また、ファイル状況差分検出プログラム1292は、図9に示した結果ファイル400Bと400Aとを比較することにより、旧内部ファイル状況差分を取得する(なお、旧内部ファイル状況差分は、S1600以降前もって取得されても良い)。
【0124】
変数値差分検出プログラム1295は、上記(4)と(5)の結果ファイルを比較することにより、新内部全変数値差分を取得する。また、変数値差分検出プログラム1295は、図9に示した結果ファイル500Bと500Aとを比較することにより、旧内部全変数値差分を取得する(なお、旧内部全変数値差分は、S1600以降前もって取得されても良い)。
【0125】
内部レベルテストでは、一つの新テストプログラム132と、その新テストプログラム132に対応する一つの旧テストプログラム122につき、以下の(a)〜(d)の処理、
(a)ログチェッカー125が、新ログファイルを旧ログファイルと比較する処理、
(b)比較プログラム133が、新内部ファイル状況差分を旧内部ファイル状況差分と比較する処理、
(c)比較プログラム133が、ネットワークリクエストの検出結果を表す新旧の結果ファイル(具体的には、上記(3)の結果ファイルと、図9に示した結果ファイル410)を比較する処理、
(d)比較プログラム133が、新内部全変数値差分を旧内部全変数値差分と比較する処理、
が実行される。
【0126】
上記(a)〜(d)での比較の結果、いずれでも異常が無ければ、FU変換が正しく行われたということになる。
【0127】
<S5100(スクリーン入力ケースデータの作成)>。
【0128】
前述したように、P1000(現行システム分析)が行われることで、どの旧FUが旧ARであるかが特定される。そのため、多数の旧テストプログラムのうち、どれが旧ARを対象旧FUとした旧テストプログラムであるかの特定が可能である。また、どの新FUが新ARであるかも特定することができるため、多数の新テストプログラム132のうち、どれが新ARを対象新FUとした新テストプログラム132であるかの特定も可能である。
【0129】
このS5100では、図14に示すように、各旧ARに対応した全ての旧テストプログラム122が、旧スクリーン入力ケースデータ830に変換される。具体的には、旧テストプログラム122のソースコードに基づいて、旧スクリーン入力を表すデータ830が作成される。「旧スクリーン入力」とは、旧スクリーン(旧ARの作業者に対するインタフェース)に対するスクリーン入力であり、例えば、“旧AR1のスクリーン1に値Aを入力してスクリーン1上の実行ボタンを押す」である。
【0130】
同様に、各新ARに対応した全ての新テストプログラム132が、新スクリーン入力ケースデータ840に変換される。新テストプログラム132は旧テストプログラムと1対1に対応しているため、新スクリーン入力ケースデータ840も旧スクリーン入力ケースデータ830と1対1に対応している。「新スクリーン入力」とは、新スクリーン(新ARの作業者に対するインタフェース)に対するスクリーン入力であり、例えば、上記具体例の旧スクリーン入力に対応する操作であれば、“新AR1のスクリーン1に値Aを入力してスクリーン1上で実行ボタンを操作する」のように、対応する旧スクリーン入力と実質的に同じ操作である。
【0131】
<S5200(外部レベルテストの実行)>。
【0132】
例えば、図15に示すように、新旧のスクリーン入力ケースデータ830、840を表示する或いは印刷するなどの方法により、作業者は、新旧のスクリーン入力を把握する。互いに対応している新旧のスクリーン入力ケースデータ830、840であれば、対象のARやスクリーンも互いに対応している(例えば、新旧のARは共に“AR1”であり、新旧のスクリーンも共に“スクリーン1”である)。スクリーンは、作業者端末50の表示装置53に表示される。
【0133】
図示していないが、本実施形態では、前述した前バッチプログラム126と後バッチプログラム127の他に、外部レベルテスト用の前バッチプログラムと、外部レベルテスト用の後バッチプログラムとが、サーバ100内の記憶装置105に記憶されている。外部レベルテスト用の前バッチプログラム及び後バッチプログラムは、前述した前バッチプログラム126と後バッチプログラム127のように新旧のテストプログラム122、132から呼び出されるのではなく、外部レベルテストの際にスクリーンから情報を入力する作業者から呼び出される。外部レベルテスト用の前バッチプログラムは、呼び出された場合、例えば、ファイル状況差分検出プログラム1292及び変数値差分検出プログラム1295を呼び出し、ネットワークリクエスト検出プログラムを開始する。一方、外部レベルテスト用の後バッチプログラムは、呼び出された場合、例えば、DB比較プログラム1291、ファイル状況差分検出プログラム1292、DB接続検出プログラム1294、変数値差分検出プログラム1295及び比較プログラム133を呼び出し、ネットワークリクエスト検出プログラムを終了する。
【0134】
作業者は、外部レベルテスト用の前バッチプログラムを呼び出し、その後で、新旧のスクリーン1に、新旧のスクリーン入力(実質的に同一のスクリーン入力)を行う。それにより、新旧のスクリーン1から同一の外部入力が新旧のAR1に与えられ、新旧のソフトウェア120、820においてそれぞれアクションが実行される。具体的には、例えば、新旧のAR1が外部入力を受けると、新旧のソフトウェア120、820においてFU間の呼び出しが次々に行われ、その結果として、例えば新旧のソフトウェア120、820が新旧のDB910、920をそれぞれ更新する。新旧のソフトウェア120、820のアクション実行後に、作業者は、外部レベルテスト用の後バッチプログラムを呼び出す。
【0135】
従って、例えば、新旧のソフトウェアによるアクション実行後に、DB比較プログラム1291によって、旧DB内の全レコードと、新DB内の全レコードとが比較される。一つでも互いに不一致のレコードがあれば、外部レベルテストの結果が異常有りとなる。
【0136】
アクション実行後の都度に作業者から外部レベルテスト用の後バッチプログラムが呼び出されるため、DB比較プログラム1291は、前述したように、このような全レコード比較を、アクション実行後の都度(言い換えれば、新旧のスクリーン入力が行われる都度)、実行する。例えば、図17に示す外部レベルテストの別の例によれば、新旧のスクリーン入力が新旧のスクリーン1〜3に行われ、新旧のAR1〜3によってアクション1〜3が行われる。DB比較プログラム1291は、アクション1の後に全レコード比較を実行し、アクション2の後にも全レコード比較を実行し、アクション3の後にも全レコード比較を実行する。
【0137】
外部レベルテストでは、チェックポイント外部化プログラム群129に含まれている他のコンピュータプログラム、すなわち、ファイル状況差分検出プログラム1292、ネットワークリクエスト検出プログラム1293、DB接続検出プログラム1294及び変数値差分検出プログラム1295も実行される。
【0138】
具体的には、図15で言えば、ファイル状況差分検出プログラム1292は、新旧のAR1について、以下の(1)〜(3)の処理、
(1)外部入力受領前の新旧のファイル状況を取得する、
(2)アクション実行後の新旧のファイル状況を取得する、
(3)外部入力受領前の新旧のファイル状況と、アクション実行後の新旧のファイル状況とを比較することにより、旧外部ファイル状況差分と、新外部ファイル状況差分とを取得する、
を実行する。そして、比較プログラム133が、新外部ファイル状況差分を旧外部ファイル状況差分と比較する。この比較の結果、不一致があれば、外部レベルテストの結果が異常有りということになる。
【0139】
ネットワークリクエスト検出プログラム1293は、新旧のAR1の外部入力受領前からアクション受領後にかけて、ネットワークI/F111を通じて何らかのリクエストが流れているか否かを監視する。比較プログラム133は、新旧のソフトウェア120、820についての監視結果を互いに比較し、比較の結果、不一致があれば、外部レベルテストの結果が異常有りということになる。
【0140】
DB接続検出プログラム1294は、DB比較プログラム1291と同様に、アクション実行後の都度に、新旧のソフトウェアが新旧のDB910、920に接続されているか否かを検出する。比較プログラム133は、新旧のソフトウェア120、820についての検出結果を互いに比較し、比較の結果、不一致があれば、外部レベルテストの結果が異常有りということになる。
【0141】
変数値差分検出プログラム1295は、新旧のAR1について、以下の(1)〜(3)の処理、
(1)外部入力受領前の新旧の全変数値を取得する、
(2)アクション実行後の新旧の全変数値を取得する、
(3)外部入力受領前の新旧の全変数値と、アクション実行後の新旧の全変数値とを比較することにより、旧外部全変数値差分と、新外部全変数値差分とを取得する、
を実行する。そして、比較プログラム133が、新外部全変数値差分を旧外部全変数値差分と比較する。この比較の結果、不一致があれば、外部レベルテストの結果が異常有りということである。
【0142】
従来のソフトウェアマイグレーションは、旧ソフトウェアの業務要件に依存したマイグレーションであり、マイグレーションの最後に行われるいわゆる総合テストでは、業務要件に従う業務の流れに依存したテストが行われる。具体的には、図16に示すように、予め業務の流れ(シナリオ)が決まっており、その業務の流れに従って一通りの操作が行われる。その後で、例えばDBが適切に更新されたか否かがチェックされる。
【0143】
本実施形態では、クライアントから旧ソフトウェアの業務要件をヒアリングする必要は無く、それを実現する一工夫として、旧ソフトウェアのソースコードの分析が行われる。しかし、ソースコードからは、業務の流れは分からないし、そもそも、本実施形態では、業務要件に全く頼っていないので、業務の流れを知る必要もない。そのため、従来のような総合テストはできない。
【0144】
そこで、本実施形態では、前述したようなチェックポイント外部化プログラム群129が用意され、そのプログラム群129に含まれる各コンピュータプログラム1291〜1295が、P4000(継続的インテグレーション)の後のP5000において適切なタイミングで実行される。そのため、P4000(継続的インテグレーション)の後に、従来のような総合テストに代わる新規観点のテスト(外部レベルテスト)を行うことができる。
【0145】
以上、本発明の幾つかの実施例を説明したが、これらの実施例は本発明の説明のための例示にすぎず、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、その要旨を逸脱することなく、その他の様々な態様でも実施することができる。
【図面の簡単な説明】
【0146】
【図1】本発明の一実施形態に係るソフトウェアマイグレーションシステムが適用された計算機システムの構成図である。
【図2】本発明の一実施形態に係るソフトウェアマイグレーションのフェーズ遷移図である。
【図3】本発明の一実施形態で実行される代表的なコンピュータプログラムを示す。
【図4】チェックポイント外部化プログラム群が有する複数のコンピュータプログラムを示す。
【図5】本発明の一実施形態に係るソフトウェアマイグレーションで行われる処理の流れを示す。
【図6】旧ソフトウェアソースコードと旧FUソースコードとセクションとの関係の説明図である。
【図7】一つの旧FUにおける複数のセクションとセクション間の関係の一例を示す。
【図8】旧ソフトウェアの構成と、旧テストプログラムから呼び出された後の旧ソフトウェアの振舞いの概要を示す。
【図9】旧テストプログラムの実行に起因して呼び出される各種コンピュータプログラムと作成される各種ファイルの一例を示す。
【図10】旧ログファイルの中身の具体例を示す。
【図11】ログチェッカーに入力される情報とログチェッカーに作成されるスケジューラ用テキストの具体例を示す。
【図12】FU呼出し依存関係の一例を示す。
【図13】FU変換スケジューラからの出力の一例を示す。
【図14】新旧のテストプログラムと外部レベルテストケースとの関係を示す。
【図15】本発明の一実施形態に係るソフトウェアマイグレーションでのスクリーンからのテストの一例を示す。
【図16】従来のソフトウェアマイグレーションでのスクリーンからのテストの説明図である。
【図17】スクリーンからのテストの別の一例を示す。
【符号の説明】
【0147】
50…作業者端末 100…サーバ
【特許請求の範囲】
【請求項1】
第一言語で記述された第一ソフトウェアを第二言語で記述された第二ソフトウェアにマイグレーションする方法であって、
(A)前記第一ソフトウェアのソースコードに含まれている各第一ファンクショナルユニット(FU)のソースコードについて、以下の(a1)及び(a2)、
(a1)対象の第一FUにおけるセクションの数とリンクの数とに基づいて循環的複雑度を算出する処理、
(a2)算出された循環的複雑度に基づく数の作成された第一テストプログラムの各々が前記対象の第一FUを呼び出すことで呼び出された第一FUを表す情報を記述した、各前記第一テストプログラムに対応した各第一ログファイルを作成する処理、
を実行し、
(B)前記第一ソフトウェアについて作成された複数の第一ログファイルを基に、FU間の呼出しの向きとFUの依存度とによって定まるFU呼出し依存関係を把握し、
(C)把握されたFU呼出し依存関係において依存度の低い前記第一FUから順に、以下の(c1)乃至(c3)、
(c1)前記第一FUを第二言語で記述された第二FUに変換することであるFU変換、
(c2)各前記第一テストプログラムに対応する各第二テストプログラムが前記(c1)で得られた第二FUを呼び出すことで呼び出された第二FUを表す情報を記述した、前記各第二テストプログラムに対応した各第二ログファイルを作成し、前記各第二ログファイルを、前記各第一のテストプログラムに対応した前記各第一ログファイルと比較する内部レベルテスト、
(c3)前記内部レベルテストの結果に異常が無く、前記(c1)で得られた前記第二FUの呼出し先の第二FUが既に存在する場合に、前記得られた第二FUを前記呼出し先の第二FUにインテグレートする処理、
を実行し、
(D)全ての前記第一FUについて前記(C)が実行されることにより得られた前記第二ソフトウェアと、前記第一ソフトウェアとの両方について、ユーザからの情報入力を受け付けるスクリーン及び/又はバッチで実行されるコンピュータプログラムである外部からの入力に従うテストである外部レベルテストを実行する、
ソフトウェアマイグレーション方法。
【請求項2】
前記外部レベルテストでは、以下の(d1)乃至(d3)のうちの少なくとも一つ、
(d1)前記外部からの入力に従う前記第一ソフトウェアのアクション後の所定種類の対象の状況と、前記外部からの入力に従う前記第二ソフトウェアのアクション後の所定種類の対象の状況とを比較する、
(d2)前記第一ソフトウェアについての、前記外部からの入力の前から前記アクション後までの所定種類の監視結果と、前記第二ソフトウェアについての前記外部からの入力の前から前記アクション後までの所定種類の監視の結果とを比較する、
(d3)前記第一ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分と、前記第二ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分とを、比較する、
ことが実行される、
請求項1記載のソフトウェアマイグレーション方法。
【請求項3】
前記第一テストプログラムが実行されると、以下の(p1)及び/又は(p2)、
(p1)前記対象の第一FUの呼出し前の所定種類の対象の状況Aを取得し、且つ、前記第一ログファイルが作成された後の前記所定種類の対象の状況Bを取得し、
(p2)前記対象の第一FUの呼出し前から前記第一ログファイル作成後まで所定種類の対象を監視し、
が実行され、
前記第一テストプログラムに対応する第二テストプログラムが実行されると、以下の(q1)及び/又は(q2)、
(q1)前記対象の第二FUの呼出し前の所定種類の対象の状況Cを取得し、且つ、前記第二ログファイルが作成された後の前記所定種類の対象の状況Dを取得し、
(q2)前記対象の第二FUの呼出し前から前記第二ログファイル作成後まで所定種類の対象を監視し、
が実行され、
前記内部レベルテストでは、以下の(r1)及び/又は(r2)、
(r1)前記状況Aと前記状況Bとの差分と、前記状況Cと前記状況Dとの差分を比較する、
(r2)前記(p2)の監視の結果と前記(q2)の監視の結果とを比較する、
が実行される、
請求項1又は2記載のマイグレーション方法。
【請求項4】
前もって各第一FUのソースコードにログステートメントが設定され、ログステートメントにより、前記第一ログファイルに、呼び出された第一FUを表すログが記録される、
請求項1乃至3のうちのいずれか一項に記載のマイグレーション方法。
【請求項5】
第一ソフトウェアのソースコードにおける各第一FUのソースコードにロガーステートメントを設定しておき、
前記第一ソフトウェアのソースコードに含まれている各第一FUのソースコードについて、以下の(a1)及び(a2)、
(a1)対象の第一FUにおけるセクションの数とリンクの数とに基づいて循環的複雑度を算出する処理、
(a2)算出された循環的複雑度に基づく数の作成された第一テストプログラムの各々が、前記対象の第一FUを呼び出すことで、呼び出された第一FUの前記ロガーステートメントが前記呼び出された第一FUを表す情報を記述した、各前記第一テストプログラムに対応した各第一ログファイルを作成する処理、
を実行する、
FU呼出し依存関係の把握を支援する方法。
【請求項6】
第一言語で記述された第一ソフトウェアがそれのソースコードの分析結果を基にマイグレーションされたものである、第二言語で記述された第二ソフトウェアが、前記第一ソフトウェアの正しいマイグレーションであるか否かのテストの方法であって、
前記第二ソフトウェアと前記第一ソフトウェアとの両方について、ユーザからの情報入力を受け付けるスクリーン及び/又はバッチで実行されるコンピュータプログラムである外部からの入力に従うテストである外部レベルテストを実行し、
前記外部レベルテストでは、以下の(d1)乃至(d3)のうちの少なくとも一つ、
(d1)前記外部からの入力に従う前記第一ソフトウェアのアクション後の所定種類の対象の状況と、前記外部からの入力に従う前記第二ソフトウェアのアクション後の所定種類の対象の状況とを比較する、
(d2)前記第一ソフトウェアについての、前記外部からの入力の前から前記アクション後までの所定種類の監視結果と、前記第二ソフトウェアについての前記外部からの入力の前から前記アクション後までの所定種類の監視の結果とを比較する、
(d3)前記第一ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分と、前記第二ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分とを、比較する、
ことが実行される、
ソフトウェアマイグレーションの成否をテストする方法。
【請求項7】
第一言語で記述された第一ソフトウェアを第二言語で記述された第二ソフトウェアにマイグレーションするコンピュータシステムであって、
前記第一ソフトウェアのソースコードに含まれている各第一ファンクショナルユニット(FU)のソースコードについて、各第一FUにおけるセクションの数とリンクの数とに基づいて各循環的複雑度を算出する循環的複雑度算出部と、
各第一FUに対応した、算出された循環的複雑度に基づく数の第一テストプログラムと、
各第一テストプログラムに対応した各第二テストプログラムと、
前記第一ソフトウェアのソースコードに含まれている各第一ファンクショナルユニット(FU)に設定されたロガーと、
内部レベルテスト部と、
外部レベルテスト部と、
を備え、
各第一テストプログラムが対象の第一FUを呼び出し、その後に呼び出された第一FUに設定されているロガーが、第一ログファイルに、前記呼び出された第一FUを表す情報を書き込み、それにより、各第一テストプログラムに対応した各第一ログファイルが作成され、
前記第一ソフトウェアについての複数の第一ログファイルに基づいて把握されたFU呼出し依存関係に基づく順番で第一FUから得られた第二FUを、前記各第二プテストログラムが呼び出し、その後に呼び出された第二FUに設定されているロガーが、第二ログファイルに、前記呼び出された第二FUを表す情報を書き込み、それにより、各第二テストプログラムに対応した各第二ログファイルが作成され、
前記内部レベルテスト部が、前記各第一ログファイルと前記各第二ログファイルを比較し、
前記外部レベルテスト部が、前記第二ソフトウェアと前記第一ソフトウェアとの両方について、ユーザからの情報入力を受け付けるスクリーン及び/又はバッチで実行されるコンピュータプログラムである外部からの入力に従うテストである外部レベルテストを実行する、
ソフトウェアマイグレーションシステム。
【請求項8】
第一言語で記述された第一ソフトウェアのソースコードに含まれている各第一ファンクショナルユニット(FU)のソースコードについて、各第一FUにおけるセクションの数とリンクの数とに基づいて各循環的複雑度を算出する循環的複雑度算出部と、
各第一FUに対応した、算出された循環的複雑度に基づく数の第一テストプログラムと、
前記各第一FUに設定されたロガーと
を備え、
各前記第一テストプログラムが、そのプログラムの対象の第一FUを呼び出すことで、呼び出された第一FUの前記ロガーが、前記呼び出された第一FUを表す情報を、第一のログファイルに記録する、
FU呼出し依存関係の把握を支援するコンピュータシステム。
【請求項9】
第一言語で記述された第一ソフトウェアがそれのソースコードの分析結果を基にマイグレーションされたものである、第二言語で記述された第二ソフトウェアが、前記第一ソフトウェアの正しいマイグレーションであるか否かをテストするコンピュータシステムであって、
前記第二ソフトウェアと前記第一ソフトウェアとの両方について、ユーザからの情報入力を受け付けるスクリーン及び/又はバッチで実行されるコンピュータプログラムである外部からの入力に従うテストである外部レベルテストを実行する外部レベルテスト部、
を備え、
前記外部レベルテスト部は、以下の(d1)乃至(d3)のうちの少なくとも一つ、
(d1)前記外部からの入力に従う前記第一ソフトウェアのアクション後の所定種類の対象の状況と、前記外部からの入力に従う前記第二ソフトウェアのアクション後の所定種類の対象の状況とを比較する、
(d2)前記第一ソフトウェアについての、前記外部からの入力の前から前記アクション後までの所定種類の監視結果と、前記第二ソフトウェアについての前記外部からの入力の前から前記アクション後までの所定種類の監視の結果とを比較する、
(d3)前記第一ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分と、前記第二ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分とを、比較する、
を実行する、
ソフトウェアマイグレーションの成否をテストするシステム。
【請求項1】
第一言語で記述された第一ソフトウェアを第二言語で記述された第二ソフトウェアにマイグレーションする方法であって、
(A)前記第一ソフトウェアのソースコードに含まれている各第一ファンクショナルユニット(FU)のソースコードについて、以下の(a1)及び(a2)、
(a1)対象の第一FUにおけるセクションの数とリンクの数とに基づいて循環的複雑度を算出する処理、
(a2)算出された循環的複雑度に基づく数の作成された第一テストプログラムの各々が前記対象の第一FUを呼び出すことで呼び出された第一FUを表す情報を記述した、各前記第一テストプログラムに対応した各第一ログファイルを作成する処理、
を実行し、
(B)前記第一ソフトウェアについて作成された複数の第一ログファイルを基に、FU間の呼出しの向きとFUの依存度とによって定まるFU呼出し依存関係を把握し、
(C)把握されたFU呼出し依存関係において依存度の低い前記第一FUから順に、以下の(c1)乃至(c3)、
(c1)前記第一FUを第二言語で記述された第二FUに変換することであるFU変換、
(c2)各前記第一テストプログラムに対応する各第二テストプログラムが前記(c1)で得られた第二FUを呼び出すことで呼び出された第二FUを表す情報を記述した、前記各第二テストプログラムに対応した各第二ログファイルを作成し、前記各第二ログファイルを、前記各第一のテストプログラムに対応した前記各第一ログファイルと比較する内部レベルテスト、
(c3)前記内部レベルテストの結果に異常が無く、前記(c1)で得られた前記第二FUの呼出し先の第二FUが既に存在する場合に、前記得られた第二FUを前記呼出し先の第二FUにインテグレートする処理、
を実行し、
(D)全ての前記第一FUについて前記(C)が実行されることにより得られた前記第二ソフトウェアと、前記第一ソフトウェアとの両方について、ユーザからの情報入力を受け付けるスクリーン及び/又はバッチで実行されるコンピュータプログラムである外部からの入力に従うテストである外部レベルテストを実行する、
ソフトウェアマイグレーション方法。
【請求項2】
前記外部レベルテストでは、以下の(d1)乃至(d3)のうちの少なくとも一つ、
(d1)前記外部からの入力に従う前記第一ソフトウェアのアクション後の所定種類の対象の状況と、前記外部からの入力に従う前記第二ソフトウェアのアクション後の所定種類の対象の状況とを比較する、
(d2)前記第一ソフトウェアについての、前記外部からの入力の前から前記アクション後までの所定種類の監視結果と、前記第二ソフトウェアについての前記外部からの入力の前から前記アクション後までの所定種類の監視の結果とを比較する、
(d3)前記第一ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分と、前記第二ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分とを、比較する、
ことが実行される、
請求項1記載のソフトウェアマイグレーション方法。
【請求項3】
前記第一テストプログラムが実行されると、以下の(p1)及び/又は(p2)、
(p1)前記対象の第一FUの呼出し前の所定種類の対象の状況Aを取得し、且つ、前記第一ログファイルが作成された後の前記所定種類の対象の状況Bを取得し、
(p2)前記対象の第一FUの呼出し前から前記第一ログファイル作成後まで所定種類の対象を監視し、
が実行され、
前記第一テストプログラムに対応する第二テストプログラムが実行されると、以下の(q1)及び/又は(q2)、
(q1)前記対象の第二FUの呼出し前の所定種類の対象の状況Cを取得し、且つ、前記第二ログファイルが作成された後の前記所定種類の対象の状況Dを取得し、
(q2)前記対象の第二FUの呼出し前から前記第二ログファイル作成後まで所定種類の対象を監視し、
が実行され、
前記内部レベルテストでは、以下の(r1)及び/又は(r2)、
(r1)前記状況Aと前記状況Bとの差分と、前記状況Cと前記状況Dとの差分を比較する、
(r2)前記(p2)の監視の結果と前記(q2)の監視の結果とを比較する、
が実行される、
請求項1又は2記載のマイグレーション方法。
【請求項4】
前もって各第一FUのソースコードにログステートメントが設定され、ログステートメントにより、前記第一ログファイルに、呼び出された第一FUを表すログが記録される、
請求項1乃至3のうちのいずれか一項に記載のマイグレーション方法。
【請求項5】
第一ソフトウェアのソースコードにおける各第一FUのソースコードにロガーステートメントを設定しておき、
前記第一ソフトウェアのソースコードに含まれている各第一FUのソースコードについて、以下の(a1)及び(a2)、
(a1)対象の第一FUにおけるセクションの数とリンクの数とに基づいて循環的複雑度を算出する処理、
(a2)算出された循環的複雑度に基づく数の作成された第一テストプログラムの各々が、前記対象の第一FUを呼び出すことで、呼び出された第一FUの前記ロガーステートメントが前記呼び出された第一FUを表す情報を記述した、各前記第一テストプログラムに対応した各第一ログファイルを作成する処理、
を実行する、
FU呼出し依存関係の把握を支援する方法。
【請求項6】
第一言語で記述された第一ソフトウェアがそれのソースコードの分析結果を基にマイグレーションされたものである、第二言語で記述された第二ソフトウェアが、前記第一ソフトウェアの正しいマイグレーションであるか否かのテストの方法であって、
前記第二ソフトウェアと前記第一ソフトウェアとの両方について、ユーザからの情報入力を受け付けるスクリーン及び/又はバッチで実行されるコンピュータプログラムである外部からの入力に従うテストである外部レベルテストを実行し、
前記外部レベルテストでは、以下の(d1)乃至(d3)のうちの少なくとも一つ、
(d1)前記外部からの入力に従う前記第一ソフトウェアのアクション後の所定種類の対象の状況と、前記外部からの入力に従う前記第二ソフトウェアのアクション後の所定種類の対象の状況とを比較する、
(d2)前記第一ソフトウェアについての、前記外部からの入力の前から前記アクション後までの所定種類の監視結果と、前記第二ソフトウェアについての前記外部からの入力の前から前記アクション後までの所定種類の監視の結果とを比較する、
(d3)前記第一ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分と、前記第二ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分とを、比較する、
ことが実行される、
ソフトウェアマイグレーションの成否をテストする方法。
【請求項7】
第一言語で記述された第一ソフトウェアを第二言語で記述された第二ソフトウェアにマイグレーションするコンピュータシステムであって、
前記第一ソフトウェアのソースコードに含まれている各第一ファンクショナルユニット(FU)のソースコードについて、各第一FUにおけるセクションの数とリンクの数とに基づいて各循環的複雑度を算出する循環的複雑度算出部と、
各第一FUに対応した、算出された循環的複雑度に基づく数の第一テストプログラムと、
各第一テストプログラムに対応した各第二テストプログラムと、
前記第一ソフトウェアのソースコードに含まれている各第一ファンクショナルユニット(FU)に設定されたロガーと、
内部レベルテスト部と、
外部レベルテスト部と、
を備え、
各第一テストプログラムが対象の第一FUを呼び出し、その後に呼び出された第一FUに設定されているロガーが、第一ログファイルに、前記呼び出された第一FUを表す情報を書き込み、それにより、各第一テストプログラムに対応した各第一ログファイルが作成され、
前記第一ソフトウェアについての複数の第一ログファイルに基づいて把握されたFU呼出し依存関係に基づく順番で第一FUから得られた第二FUを、前記各第二プテストログラムが呼び出し、その後に呼び出された第二FUに設定されているロガーが、第二ログファイルに、前記呼び出された第二FUを表す情報を書き込み、それにより、各第二テストプログラムに対応した各第二ログファイルが作成され、
前記内部レベルテスト部が、前記各第一ログファイルと前記各第二ログファイルを比較し、
前記外部レベルテスト部が、前記第二ソフトウェアと前記第一ソフトウェアとの両方について、ユーザからの情報入力を受け付けるスクリーン及び/又はバッチで実行されるコンピュータプログラムである外部からの入力に従うテストである外部レベルテストを実行する、
ソフトウェアマイグレーションシステム。
【請求項8】
第一言語で記述された第一ソフトウェアのソースコードに含まれている各第一ファンクショナルユニット(FU)のソースコードについて、各第一FUにおけるセクションの数とリンクの数とに基づいて各循環的複雑度を算出する循環的複雑度算出部と、
各第一FUに対応した、算出された循環的複雑度に基づく数の第一テストプログラムと、
前記各第一FUに設定されたロガーと
を備え、
各前記第一テストプログラムが、そのプログラムの対象の第一FUを呼び出すことで、呼び出された第一FUの前記ロガーが、前記呼び出された第一FUを表す情報を、第一のログファイルに記録する、
FU呼出し依存関係の把握を支援するコンピュータシステム。
【請求項9】
第一言語で記述された第一ソフトウェアがそれのソースコードの分析結果を基にマイグレーションされたものである、第二言語で記述された第二ソフトウェアが、前記第一ソフトウェアの正しいマイグレーションであるか否かをテストするコンピュータシステムであって、
前記第二ソフトウェアと前記第一ソフトウェアとの両方について、ユーザからの情報入力を受け付けるスクリーン及び/又はバッチで実行されるコンピュータプログラムである外部からの入力に従うテストである外部レベルテストを実行する外部レベルテスト部、
を備え、
前記外部レベルテスト部は、以下の(d1)乃至(d3)のうちの少なくとも一つ、
(d1)前記外部からの入力に従う前記第一ソフトウェアのアクション後の所定種類の対象の状況と、前記外部からの入力に従う前記第二ソフトウェアのアクション後の所定種類の対象の状況とを比較する、
(d2)前記第一ソフトウェアについての、前記外部からの入力の前から前記アクション後までの所定種類の監視結果と、前記第二ソフトウェアについての前記外部からの入力の前から前記アクション後までの所定種類の監視の結果とを比較する、
(d3)前記第一ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分と、前記第二ソフトウェアについての、前記外部からの入力前の所定種類の対象の状況と前記アクション後の所定種類の対象の状況との差分とを、比較する、
を実行する、
ソフトウェアマイグレーションの成否をテストするシステム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2009−245066(P2009−245066A)
【公開日】平成21年10月22日(2009.10.22)
【国際特許分類】
【出願番号】特願2008−89492(P2008−89492)
【出願日】平成20年3月31日(2008.3.31)
【出願人】(000155469)株式会社野村総合研究所 (1,067)
【Fターム(参考)】
【公開日】平成21年10月22日(2009.10.22)
【国際特許分類】
【出願日】平成20年3月31日(2008.3.31)
【出願人】(000155469)株式会社野村総合研究所 (1,067)
【Fターム(参考)】
[ Back to top ]