"テスト対象GUIアプリケーションに対する操作を記録再生する複数のテスト自動化装置と、複数のテスト自動化装置を使ってテスト対象GUIアプリケーションに対する操作を記録再生する併合テスト自動化装置と、前記テスト自動化装置と前記併合テスト自動化装置とテスト対象GUIアプリケーションを配するテスト実行マシンと、テスト実行マシンの入力部および表示部とからなり、前記テスト自動化装置が、前記テスト対象GUIアプリケーションに対して入力した操作手順をテストスクリプトとして記録するテストスクリプト記録装置と、前記テストスクリプトを再生するテストスクリプト再生装置と、前記テストスクリプトを登録するテストスクリプトデータベースとを備え、前記併合テスト自動化装置が、当該装置が使用する前記テスト自動化装置の一覧を登録したテスト自動化装置リストに登録されたテスト自動化装置と連携してテストスクリプトを記録する併合テストスクリプト記録装置と、前記テスト自動化装置リストに登録されたテスト自動化装置と連携して併合テストスクリプトを再生する併合テストスクリプト再生装置と、前記併合テストスクリプト記録装置が生成するテストスクリプトを登録する併合テストスクリプトデータベースとを備え、前記併合テストスクリプト記録装置が、前記テスト自動化装置が生成したテストスクリプトを複数個のテストスクリプトに分割するテストスクリプト分割部と、テストスクリプトの再現性が高いかどうかを記述内容から静的に評価するテストスクリプト静的評価部と、分割したテストスクリプトを結合し、その結合パターンが有効かどうかを実際に再生して評価するテストスクリプト動的評価部と、指定した結合パターンに従ってテストスクリプトを併合するテストスクリプト併合部と、前記スクリプト動的評価部で再生可能と評価されたスクリプトを格納する再生可能スクリプトデータベースと、テストスクリプト中に現れる再現性の低いコマンドの一覧を登録する不安定コマンドデータベースと、前記テストスクリプト動的評価部で再生可能と評価されたスクリプト結合パターンを登録するスクリプト結合パターンデータベースと、前記テストスクリプト分割部で分割されたスクリプトおよび前記静的評価部において算出された静的評価結果を登録する分割スクリプトデータベースとを備えることを特徴とするテスト自動化システム。近年、アプリケーションフレームワークが急速に増加している。このため、全てのアプリケーションフレームワークに対応するテスト自動化装置を開発することは困難である。一方、一部のアプリケーションフレームワークにのみ対応するテスト自動化装置は多く開発されている。近年増加している複数のアプリケーションフレームワークを組み合わせて開発されたGUIアプリケーションにおいては、1つのテスト自動化装置を使ってテスト操作を正常に記録、および再生させることは困難である。テスト操作の記録または再生に失敗した場合は、正常に再生できるようになるまで、テストスクリプトを手作業で修正する必要がある。また、正常に再生できるスクリプトであっても、対象のアプリケーションがテスト自動化装置に対応していないアプリケーションフレームワークである場合は、ボタンやテキストボックスといった画面部品に固有の属性値を認識できないために、再現性の低い操作内容に変換されて記録されることがある。例えば、特定のボタンをマウスで押下する操作が、記録時にそのボタンが表示されていたスクリーン座標に向かってマウスのボタンを押下する操作に変換されることがある。また、特定のテキストボックスに対して文字列を入力する操作が、テスト実行マシンのキーボードを押下する操作に変換されることがある。このように、再現性の低い操作内容に変換されて記録されたスクリプトは、テスト実行マシン、テスト対象GUIアプリケーション等の状態によって正常に再生できない事がある。例えば、あるスクリーン座標に向かってマウスのボタンを押下する操作は、テスト対象GUIアプリケーションの画面の仕様変更によって、操作対象の画面部品の位置が変更された場合に再現できなくなる。テスト対象GUIアプリケーションの仕様変更以外でも、テストデータによって画面部品の表示位置が変わる場合は、テストデータの変更によっても再現できなくなる。また、テスト実行マシンのキーボードを押下する操作は、テスト実行マシンの負荷状態によって操作対象の画面部品の表示タイミングが遅延した場合に、操作対象の画面部品の表示を待たずにキーボードを押下して失敗することがある。このように不安定なスクリプトは再現性が低くなるため、再現性の高いスクリプトが生成されることが望ましい。本発明の目的は、複数のテスト自動化装置を組み合わせることで幅広いアプリケーションフレームワークの記録に対応し、かつ、記録したテストスクリプトの再現性を静的に評価することで、再現性の高いテストスクリプトを生成できるテスト自動化システムを提供することにある。上記目的を達成するために、本発明のテスト自動化システムは、テスト対象GUIアプリケーションに対する操作を記録再生する複数のテスト自動化装置と、複数のテスト自動化装置を使ってテスト対象GUIアプリケーションに対する操作を記録再生する併合テスト自動化装置と、前記テスト自動化装置と前記併合テスト自動化装置とテスト対象GUIアプリケーションを配するテスト実行マシンと、テスト実行マシンの入力部および表示部とからなり、前記テスト自動化装置が、前記テスト対象GUIアプリケーションに対して入力した操作手順をテストスクリプトとして記録するテストスクリプト記録装置と、前記テストスクリプトを再生するテストスクリプト再生装置と、前記テストスクリプトを登録するテストスクリプトデータベースとを備え、前記併合テスト自動化装置が、当該装置が使用する前記テスト自動化装置の一覧を登録したテスト自動化装置リストに登録されたテスト自動化装置と連携してテストスクリプトを記録する併合テストスクリプト記録装置と、前記テスト自動化装置リストに登録されたテスト自動化装置と連携して併合テストスクリプトを再生する併合テストスクリプト再生装置と、前記併合テストスクリプト記録装置が生成するテストスクリプトを登録する併合テストスクリプトデータベースとを備え、前記併合テストスクリプト記録装置が、前記テスト自動化装置が生成したテストスクリプトを複数個のテストスクリプトに分割するテストスクリプト分割部と、テストスクリプトの再現性が高いかどうかを記述内容から静的に評価するテストスクリプト静的評価部と、分割したテストスクリプトを結合し、その結合パターンが有効かどうかを実際に再生して評価するテストスクリプト動的評価部と、指定した結合パターンに従ってテストスクリプトを併合するテストスクリプト併合部と、前記スクリプト動的評価部で再生可能と評価されたスクリプトを格納する再生可能スクリプトデータベースと、テストスクリプト中に現れる再現性の低いコマンドの一覧を登録する不安定コマンドデータベースと、前記テストスクリプト動的評価部で再生可能と評価されたスクリプト結合パターンを登録するスクリプト結合パターンデータベースと、前記テストスクリプト分割部で分割されたスクリプトおよび前記静的評価部において算出された静的評価結果を登録する分割スクリプトデータベースとを備えることを特徴とする。本発明のテスト自動化装置によれば、次のような効果がある。1対応するアプリケーションフレームワークの異なる複数のテスト自動化装置でテストスクリプトの記録再生を行い、記録再生が正常に行えたテストスクリプトを組み合わせて1つのテストスクリプトを生成するため、幅広いアプリケーションフレームワークに対してテスト操作の記録および再生を行うことができる。2再現性が高いかどうかをテストスクリプトの記述内容から静的に評価し、静的評価値の良いものから優先して動作確認するため、テストスクリプトの動作確認コストを必要最小限に抑えることができる。3テストスクリプトを部分的に静的評価し、静的評価の良い部分を優先して併合するため、全体的に再現性の高いテストスクリプトを生成することができる。4動作確認済みのテストスクリプトの記述パターン結合パターンを学習し、静的評価時に学習済みのパターンと一致するテストスクリプトに良い評価値を与えるため、動作確認済みのパターンを優先して動作確認することができる。以下、本発明のテスト自動化システムの一実施の形態について説明する。図1は、本発明の一実施の形態例を示すシステム構成図である。本テスト自動化システムは、テスト対象GUIアプリケーション0101と、テスト対象GUIアプリケーション0101に対する操作を記録再生する複数のテスト自動化装置0102a,0102bと、複数のテスト自動化装置0102a,0102bを使ってテスト対象GUIアプリケーション0101に対する操作を記録再生する併合テスト自動化装置0103と、複数のテスト自動化装置0102a,0102bと併合テスト自動化装置0103とテスト対象GUIアプリケーション0101を配するテスト実行マシン0104と、テスト実行マシン0104の入力部0105および表示部0106とから構成されている。本テスト自動化システムのテスト対象GUIアプリケーション0101は、ウィンドウ、ボタン、テキストボックス等のオブジェクトから構成され、それらのオブジェクトはName属性やCaption属性と言ったプロパティを持ち、そのプロパティを用いてオブジェクトを指定でき、それによって、テスト対象GUIアプリケーション0101に対する操作をテストスクリプトとして記述できるような、図2のような外観のアプリケーションである。テスト自動化装置0102a,0102bには、テスト対象GUIアプリケーション0101に対して入力した操作手順をテストスクリプトとして記録するテストスクリプト記録装置0107、テストスクリプトを再生するテストスクリプト再生装置0108、テストスクリプトを登録するテストスクリプトデータベース0109が備えられている。各テスト自動化装置のテストスクリプトデータベース0109には、そのテスト自動化装置によって生成された、テスト対象GUIアプリケーション0101に対する操作手順を記述したテストスクリプトが複数登録される。なお、本テスト自動化システムでは、テスト対象GUIアプリケーション0101に対する操作を表現できるのであれば、テストスクリプトが使用する言語は問わない。併合テスト自動化装置0103には、この装置が使用するテスト自動化装置の一覧を登録するテスト自動化装置リスト0110、テスト自動化装置リスト0110に登録されたテスト自動化装置と連携してテストスクリプトを記録する併合テストスクリプト記録装置0111、テスト自動化装置リスト0110に登録されたテスト自動化装置と連携してテストスクリプトを再生する併合テストスクリプト再生装置0112、併合テストスクリプト記録装置0111が生成するテストスクリプトを登録する併合テストスクリプトデータベース0113が備えられている。併合テストスクリプト記録装置0111には、テスト自動化装置0102a~0102bが生成したテストスクリプトを複数個のテストスクリプトに分割するテストスクリプト分割部0114、テストスクリプトの再現性が高いかどうかを記述内容から静的に評価するテストスクリプト静的評価部0115、分割したテストスクリプトを結合し、その結合パターンが有効かどうかを実際に再生して評価するテストスクリプト動的評価部0116、指定した結合パターンに従ってテストスクリプトを併合するテストスクリプト併合部0117、スクリプト動的評価部で再生可能と評価されたスクリプトを格納する再生可能スクリプトデータベース0118、テストスクリプト中に現れる再現性の低いコマンドの一覧を登録する不安定コマンドデータベース0119、前記テストスクリプト動的評価部で再生可能と評価されたスクリプト結合パターンを登録するスクリプト結合パターンデータベース0120、前記テストスクリプト分割部で分割されたスクリプト、および前記静的評価部0115において算出された静的評価結果を登録する分割スクリプトデータベース0121が備えられている。併合テスト自動化装置0103のテスト自動化装置リスト0110には、テストスクリプトの記録再生に使用するテスト自動化装置を起動するコマンドを登録する。テスト自動化装置の起動コマンドは、記録開始コマンド、記録終了コマンド、参照コマンド、再生コマンド、の4種類を登録する。また、これらの起動コマンドに加え、テストスクリプトを分割する単位となるテストスクリプト分割文も併せて登録する。併合テスト自動化装置0103の併合テストスクリプトデータベース0113には、複数のテストスクリプトを併合して作成したテストスクリプトが複数登録される。併合テストスクリプトデータベース0113に登録されるテストスクリプトには、異なる言語によるテストスクリプト記述が混在することもある。図2は、テスト対象GUIアプリケーションの例として、アプリケーションフレームワークMを使って開発したWebブラウザFBrowserで、Webアプリケーションファイル検索アプリケーションを表示した画面を示した図である。テスト実行マシン上でコマンドfbrowserexeにURLを引数として与えて実行すると、WebブラウザFBrowserが起動し、指定したURLのWebページを表示できる。いま、テスト実行マシン上でコマンドfbrowserexehttptargetappcomsearchjspを指定すると、WebブラウザFBrowserが起動してファイル検索ページ0201が表示され、検索キーを入力することを促す。このファイル検索ページ0201のテキストボックス0204に任意の文字列を入力して検索ボタン0205を押下すると、テキストボックス0204に入力された文字列を含む名前のファイルを検索し、検索結果のファイル名の一覧を表示する検索結果一覧ページ0202に遷移する。一方、ファイル検索ページ0201の閉じるボタン0206を押下すると、ブラウザFBrowserが終了する。検索結果一覧ページ0202に表示されるファイル名はハイパーリンクとなっており、このハイパーリンク0207を押下すると、図3に示すファイルのダウンロード方法を指定するファイルのダウンロード画面0203がポップアップする。ここで、検索結果一覧ページ0202に表示されるハイパーリンクは、使用するテストデータを変更した場合に表示位置が変わることがある。例えば、テストデータにファイルを1つ追加した場合は、そのファイル名を含む検索キーで検索したときに、検索結果が1行増えることになる。ファイルのダウンロード画面0203は、テスト実行マシンのオペレーションシステムが表示する画面であり、ブラウザFBrowserとは異なるアプリケーションフレームワークWを使用する。ファイルのダウンロード画面0203の保存ボタン0208を押下すると、ファイルのダウンロード画面0203が閉じ、検索結果一覧画面0202で押下したハイパーリンクの名前のファイルがテスト実行マシン0101上にダウンロードされる。一方、ファイルのダウンロード画面0203でキャンセルボタン0209を押下すると、ファイルのダウンロード画面0203が閉じるだけで、ファイルのダウンロードは行われない。なお、ファイル検索ページ0201のテキストボックス0204のName属性は検索キーとする。図4は、図2のファイル検索アプリケーションに対する操作手順の例である。図4aの操作手順は、ファイル検索アプリケーションを起動して検索キーpumpkinを検索し、検索結果からキャプションがpumpkin035txtのハイパーリンクを押下し、ダウンロードを実行する操作手順である。図4bの操作手順は、ファイル検索アプリケーションを起動して検索キーpumpkinを検索し、検索結果からキャプションがpumpkin035txtのハイパーリンクを押下し、ダウンロードをキャンセルする操作手順である。この2つの操作手順は、5行目のファイルのダウンロード画面で押下するボタンが保存かキャンセルかという違いだけである。図5は、テスト自動化装置リスト0110のデータ構造図である。テスト自動化装置リスト0110のレコードは、1つのテスト自動化装置について、テスト自動化装置名属性0401、記録開始コマンド属性0402、記録終了コマンド属性0403、参照コマンド属性0404、再生コマンド属性0405、スクリプト分割文属性0406を指定して登録する。スクリプト分割文属性0406には、テストスクリプト分割処理において、スクリプトを分割する行を特定するために使用する文を指定する。図5で示すレコードは、テスト自動化装置testCRとfastTestの2つに関するものである。図5の例では、スクリプト分割文属性0406に、画面をフォーカスするコマンドを指定している。具体的には、testCRはコマンドAttachWindowを、テスト自動化装置fastTestはコマンドassertTitleを指定している。これは、スクリプトの分割および結合を画面単位で行うことを意図している。なお、記録開始コマンド属性0402、記録終了コマンド属性0403、参照コマンド属性0404、再生コマンド属性0405、スクリプト分割文属性0406については、1という文字列を記述することができる。この文字列1は、テストスクリプト記録開始処理、テストスクリプト記録終了処理、テストスクリプト併合処理、テストスクリプト再生処理において、これらのコマンドに引数を与えて実行するためのものである。例えば、テスト自動化装置testCRの記録開始コマンド属性0402はtestCRRecexe1であるが、これはテストスクリプト記録開始処理において、記録開始コマンド実行時にテストスクリプト名を引数として与えるためのものである。図6は、不安定コマンドデータベース0119のデータ構造図である。不安定コマンドデータベース0119のレコードは、テスト自動化装置の名前を指定するテスト自動化装置名属性0501と、そのテスト自動化装置において、再現性の低いコマンドのパターンを指定する不安定コマンド属性0502の2つの属性を指定して登録する。ここで登録した不安定コマンドは、テストスクリプト静的評価処理において、静的評価値を算出する際に使用される。図6で示すレコードは、テスト自動化装置testCRとfastTestの不安定コマンドである。例えば、テスト自動化装置testCRでは、座標を指定して押下するコマンドClickAtと、テスト実行マシンのキーボードを押下するコマンドTypeが不安定コマンドである。文字列はワイルドカードであり、任意の文字列に合致させることができる。本テスト実行システムでは、テスト自動化装置ごとに不安定コマンドを事前に登録しておき、実際に記録されたテストスクリプトに対し、不安定コマンドがいくつ含まれているかを算出することによって、そのテストスクリプトが安定なスクリプトであるか不安定なスクリプトであるかを評価する。具体的には、テストスクリプトが含む不安定コマンドの数が少ないほど良い評価を与えることとする。図7及び図8は、テストスクリプトデータベース0109に格納されるテストスクリプトの例である。図7で示すテストスクリプトは、テスト自動化装置testCRとfastTestを使い、テスト対象GUIアプリケーションに対する図3の操作手順をテストスクリプトとして記録したものである。図7aのテストスクリプトは、テスト自動化装置testCRを使って、図4aの操作手順を記録した、名前がTC0001のテストスクリプトである。テスト自動化装置testCRは、アプリケーションフレームワークWに対応するが、アプリケーションフレームワークMには対応しない。このため、WebブラウザFBrowserに対する操作を正しく記録できず、不安定コマンドを使って記録される。例えば、3行目,5行目,7行目,11行目のスクリプトは、Webページに表示されたボタンやハイパーリンクを押下する操作を記録したものであるが、座標を指定して押下する不安定コマンドClickAtを使用したスクリプトに変換されている。さらに、4行目のスクリプトは、Webページに表示されたテキストボックスに文字列を入力する操作を記録したものであるが、テスト実行マシンのキーボードを押下する不安定コマンドTypeを使用したスクリプトに変換されている。一方、アプリケーションフレームワークWを使用するファイルのダウンロード画面0203に対する操作については、正しく記録することができる。例えば、9行目のスクリプトは、ファイルのダウンロード画面0203にある保存ボタン0208を押下する操作を記録したものであるが、キャプション属性を指定してボタンを押下するClickButtonコマンドを使用したスクリプトに変換されている。図7bのテストスクリプトは、テスト自動化装置fastTestを使って、図4aの操作手順を記録した、名前がTC0001のテストスクリプトである。テスト自動化装置fastTestは、アプリケーションフレームワークMに対応するが、アプリケーションフレームワークWには対応しない。このため、ファイルのダウンロード画面0203に対する操作を記録することができない。例えば、6行目のスクリプトはファイルpumpkin035txtのハイパーリンク0207を押下する操作であるが、続く7行目のスクリプトは、画面をフォーカスするコマンドassertTitleを使ってファイル検索ページ0201をフォーカスする操作となっており、ファイルのダウンロード画面0203に対する操作内容が一切記録されていない。このため、このテストスクリプトbは正しく再生することができない。図8aのテストスクリプトは、テスト自動化装置testCRを使って、図4bの操作手順を記録した、名前がTC0002のテストスクリプトである。殆どの記述は図7aのテストスクリプトと同一であるが、9行目で押下するボタンがファイルのダウンロード画面0203のキャンセルボタン0209となっている。図8bのテストスクリプトは、テスト自動化装置fastTestを使って、図4bの操作手順を記録した、名前がTC0002のテストスクリプトである。ファイルのダウンロード画面0203を記録できないため、図7bのテストスクリプトと同一のテストスクリプトとなっている。図9及び図10は、分割スクリプトデータベース0121のデータ構成図である。分割スクリプトデータベース0121のレコードは、スクリプトを記録したテスト自動化装置の名前であるテスト自動化装置名属性0701と、スクリプト名属性0702と、分割位置を表す分割番号属性0703と、分割したスクリプト部分が操作する画面の名前である画面名属性0704と、分割スクリプト属性0705と、分割スクリプトの静的評価値属性0706と、分割スクリプトが既に動作確認済みかどうかを表す再生可能フラグ属性0707との7つの属性で登録する。図9で示すレコードは、テストスクリプト分割処理において、図7及び図8のテストスクリプトを分割したものである。図9の分割スクリプトは、図7aのテストスクリプトをスクリプト分割文AttachWindowで分割したレコードと、図7bのテストスクリプトをスクリプト分割文assertTitleで分割したレコードが複数登録されている。また、図9bの分割スクリプトは、図8aのテストスクリプトをスクリプト分割文AttachWindowで分割したレコードと、図8bのテストスクリプトをスクリプト分割文assertTitleで分割したレコードが複数登録されている。静的評価値属性0706には、分割スクリプト属性0705の中に現れる、不安定コマンドの回数を負数にして指定する。例えば、図9の上から2つ目のレコードは、テスト自動化装置名がtestCRの不安定スクリプト、つまり、図6の不安定コマンドデータベースに登録されたClickAtとTypeの2つのコマンドが、分割スクリプト属性0705の中に現れる回数が3であることを表しており、この負数である3が静的評価値となっている。実際に、このレコードの分割スクリプト属性0705には不安定コマンドClickAtと合致するClickAt10030ClickAt100120、不安定コマンドTypeと合致するTypepumpkinが含まれており、合計3個の不安定コマンドが含まれている。再生可能フラグ属性0707には、テストスクリプト静的評価処理において、分割スクリプト属性0705が再生可能スクリプトデータベース0118に登録されたスクリプトと一致していた場合はTrue、未登録であった場合はFalseを指定する。本テスト実行システムでは、テストスクリプト動的評価処理において、再生可能フラグ属性0707がTrueであるが、テスト自動化装置による再生が失敗したスクリプトを、再生可能スクリプトデータベース0118から削除する。この機能によって、テスト対象GUIアプリケーション0101の仕様変更やテストデータ変更による、既存スクリプトの再現性の変化をシステムに学習させることができる。図11は、再生可能スクリプトデータベース0118のデータ構造図である。再生可能スクリプトデータベース0118のレコードは、スクリプトを記録したテスト自動化装置の名前であるテスト自動化装置名属性0801と、スクリプトが操作する画面の名前である画面名属性0802と、スクリプト属性0803と、このスクリプトの静的評価値属性0804との4つの属性で登録する。図11で示すレコードは、テストスクリプト動的評価処理において、図9の分割スクリプトのうち、実際にテスト自動化装置を使って再生を行って動作を確認したスクリプトであり、図9の分割スクリプトデータベース0121にある5つのレコードに相当するレコードが登録されている。具体的には、図11の上から1つ目のレコードは、図9の上から1つ目のレコードに相当し、図11の上から2つ目のレコードは、図9の上から4つ目のレコードに相当し、図11の上から3つ目のレコードは、図9の上から7つ目のレコードに相当し、図11の上から4つ目のレコードは、図9の上から8つ目のレコードに相当し、図11の上から5つ目のレコードは、図9の上から9つ目のレコードに相当する。静的評価値属性0804は、テストスクリプト動的評価処理において、分割スクリプトデータベース0121にある静的評価値属性0706に対して10加算したものが登録されている。本テスト実行システムでは、一度動作確認したスクリプトを再生可能スクリプトデータベース0118に保存しておき、次回以降のテストスクリプト静的評価処理において、評価対象のスクリプトが再生可能スクリプトデータベース0118に登録されたものと一致する場合は、優先して動作確認を試みる。この機能によって、不要な動作確認のコスト削減を実現する。例えば、再生可能スクリプトデータベース0118が図11の状態で、図8abのテストスクリプトを対象に、テストスクリプト分割処理、テストスクリプト静的評価処理を行った結果が、図10で示すようなものとなっている。図10の上から1つ目、上から7つ目、上から8つ目、上から9つ目のスクリプトの分割スクリプトは、図11の再生可能スクリプトと一致するため、静的評価値属性0706が静的評価値属性0804の値に更新され、また、再生可能フラグ属性0707の値がTrueに更新されている。図12は、スクリプト結合パターンデータベース0120のデータ構造図である。スクリプト結合パターンデータベース0120のレコードは、テストスクリプト動的評価処理において動作を確認した画面遷移パターンについて、遷移前画面名属性0901と、遷移後画面名属性0902の2つの属性で登録する。図12で示すレコードは、テストスクリプト動的評価処理において、図9の分割スクリプトについて動作確認を行った際、再生に成功した画面遷移パターンが登録されている。遷移前画面属性0901には、NULLを指定することができる。この場合は、最初の画面に遷移する前の状態を表す。例えば、図12の上から1つ目のレコードは、WebブラウザFBrowserを起動する前の状態から、ファイル検索ページ0201に遷移する画面遷移パターンを表している。本テスト実行システムでは、一度動作確認した画面遷移パターンをスクリプト結合パターンデータベース0120に保存しておき、次回以降のテストスクリプト動的評価処理において、スクリプト結合パターンデータベース0120に登録された画面遷移を優先して動作確認を試みる。この機能によって、不要な動作確認のコスト削減を実現する。図13及び図14は、併合テストスクリプトデータベース0113に格納されるテストスクリプトの例である。図13で示すテストスクリプトは、テストスクリプト併合処理において、テスト自動化装置testCRとfastTestによって記録された2つのテストスクリプトを、1つのテストスクリプトとして併合したものである。図13のテストスクリプトは、図7aとbのテストスクリプトを併合したものであり、図14のテストスクリプトは、図8aとbのテストスクリプトを併合したものとなっている。テストスクリプト中にある、およびは、テスト自動化装置選択文である。テスト自動化装置選択文は、テストスクリプト再生処理において、再生に使用するテスト自動化装置を指定する文である。例えば、名前がXのテスト自動化装置を指定する場合は、テスト自動化装置選択文はと記述する。テスト自動化装置Xを指定するテスト自動化装置選択文を記述した行から、次のテスト自動化装置選択文が現れる行までは、テスト自動化装置Xによって再生可能なスクリプトを記述する。例えば、図14の7行目はテスト自動化装置testCRを指定するテスト自動化装置選択文であり、10行目はテスト自動化装置fastTestを指定するテスト自動化装置選択文である。そして、この2つのテスト自動化装置選択文の間にある8行目と9行目のスクリプトは、テスト自動化装置testCRによって再生可能なスクリプトとなっている。本テスト実行システムでは、テスト自動化選択文を用いてスクリプトを結合することによって、使用する言語やアプリケーションプログラミングインタフェースが異なるスクリプトであっても、1つのスクリプトとして併合することを実現する。以下、以上のように構成されたテスト実行システムの動作を説明する。図15は、併合テスト自動化装置0103に備えられた併合テストスクリプト記録装置0111のテストスクリプト記録開始処理の概要を示すフローチャートである。併合テスト自動化装置0103で本処理を開始する前に、テスト自動化装置リスト0110に、テストスクリプトを記録するテスト自動化装置の一覧を登録しておく必要がある。まず、呼び出し元から与えられた引数を用いて、変数を初期化する。TSNは、これから記録する操作手順に対するテストスクリプトの名前を格納する変数である。続いて、ステップ1102~ステップ1105にて、テスト自動化装置リスト0110に登録された各テスト自動化装置の記録開始コマンド属性0402を使用し、名前をTSNとして、テストスクリプトの記録を開始する。全てのテスト自動化装置リスト0110について記録開始コマンドを実行したら、処理を終了する。併合テスト自動化装置0103は、以上の処理を、テスト実行マシン0104の入力部0105に記録開始操作が行われる度に実行する。テスト自動化装置リスト0110が図5の状態で、テスト対象GUIアプリケーション0101に対して図4aの操作手順を実行すると、図7のaとbのテストスクリプトが生成される。また、同状態でテスト対象GUIアプリケーション0101に対して図4bの操作手順を実行すると、図8のaとbのテストスクリプトが生成される。なお、生成されるテストスクリプトは、そのスクリプトを生成したテスト自動化装置が備えるテストスクリプトデータベース0109に登録される。例えば、テスト自動化装置testCRが生成するテストスクリプトは、テスト自動化装置testCRが備えるテストスクリプトデータベースに登録される。図16は、併合テスト自動化装置0103に備えられた併合テストスクリプト記録装置0111のテストスクリプト記録終了処理の概要を示すフローチャートである。本処理は、併合テスト自動化装置0103でテストスクリプト記録開始処理を実行した場合のみ実行することができる。本処理では、テスト自動化装置リスト0110に登録された各テスト自動化装置の記録終了コマンド属性0403を実行し、テストスクリプトの記録状態を終了させるステップ1201~ステップ1204。併合テスト自動化装置0103は、以上の処理を、テスト実行マシン0104の入力部0105に記録終了操作が行われる度に実行する。図17は、併合テスト自動化装置0103に備えられた併合テストスクリプト記録装置0111のテストスクリプト併合処理の概要を示すフローチャートである。本処理は、併合テスト自動化装置0103でテストスクリプト記録開始処理、およびテストスクリプト記録終了処理を行い、各テスト自動化装置によってテストスクリプトを生成した状態でのみ実行することができる。まず、呼び出し元から与えられた引数を用いて、変数を初期化する。TSNは、これから併合するテストスクリプトの名前を格納する変数である。SCLは、テストスクリプト動的評価処理において、分割スクリプトデータベース0121のレコードが、連続して再生可能な順番で格納される。SCLは、長さ0のリストとして初期化する。続いて、分割スクリプトデータベース0121に格納された全てのレコードを削除するステップ1302。分割スクリプトデータベース0121は、本処理の中で呼び出される各処理において、分割したスクリプト、静的評価値といった処理結果を格納するために利用する。分割スクリプトデータベース0121のレコードを削除したら、引数としてTSNを指定し、テストスクリプト分割処理を実行するステップ1303。このテストスクリプト分割処理において、テスト自動化装置リスト0110のスクリプト分割文属性0406によって1つのテストスクリプトを複数個のスクリプトに分割し、分割スクリプトデータベース0121に登録する。続いて、引数としてTSNを指定し、テストスクリプト静的評価処理を実行するステップ1304。このテストスクリプト評価処理において、分割したスクリプトごとに、不安定コマンドが含まれるか、再生可能スクリプトと一致するか、といった記述内容に関する評価を行い、その結果を分割スクリプトデータベース0121に登録する。続いて、引数としてTSNとSCLを指定し、テストスクリプト動的評価処理を実行するステップ1305。このテストスクリプト動的評価処理において、静的評価値の高いスクリプトを優先して動作確認を行い、連続して再生可能なスクリプトのリストを変数SCLに格納する。続いて、引数としてTSNとSCLを与え、テストスクリプト生成処理を実行するステップ1306。このテストスクリプト生成処理において、変数SCLに格納されたスクリプトを、先頭のものから順に結合して1つのテストスクリプトを生成し、併合テストスクリプトデータベース0113に登録する。併合テスト自動化装置0103は、以上の処理を、テスト実行マシン0104の入力部0105に併合操作が行われる度に実行する。テスト自動化装置リスト0110が図5、2つのテストスクリプトデータベース0109が図7ab、不安定コマンドデータベース0119が図6の状態で、テストスクリプト名TC0001を指定して本処理を実行すると、図13の併合テストスクリプトが生成され、併合テストスクリプトデータベース0113に格納される。一方、テスト自動化装置リスト0110が図5、2つのテストスクリプトデータベース0109が図8ab、不安定コマンドデータベース0119が図6の状態で、テストスクリプト名TC0002を指定して本処理を実行すると、図14のテストスクリプトが生成され、併合テストスクリプトデータベース0113に格納される。図18及び図19は、併合テスト自動化装置0103に備えられた併合テストスクリプト記録装置0111の、テストスクリプト分割処理の概要を示すフローチャートである。本処理は、複数のテスト自動化装置0102a,0102bによって記録されたスクリプトを、スクリプト分割文が現れる行によって分割し、分割スクリプトデータベース0121に登録するものである。まず、呼び出し元から与えられた引数を用いて、変数を初期化する。TSNは、これから分割するテストスクリプトの名前を格納する変数である。続いて、ステップ1402~ステップ1412において、各テスト自動化装置のテストスクリプトデータベース0109に登録された、名前がTSNのテストスクリプトを参照し、参照した各テストスクリプトについて、テスト自動化装置Rごとに設定されたスクリプト分割文SCと合致する行を分割点として、複数のスクリプトに分割する。なお、本処理で分割されたスクリプトは、ステップ1407において、分割スクリプトデータベース0121に登録される。この登録の際には、予め算出したスクリプトの分割位置N、テストスクリプト分割文SCと合致する行から取得した画面名SNも併せて登録する。ステップ1402~1412が終了したら、本処理は終了する。併合テスト自動化装置0103は、以上の処理を、テストスクリプト併合処理において呼び出される度に実行する。図20及び図21は、併合テスト自動化装置0103に備えられた併合テストスクリプト記録装置0111のテストスクリプト静的評価処理の概要を示すフローチャートである。本処理は、分割スクリプトデータベース0121に登録されたスクリプトを記述内容によって静的に評価し、その評価結果を分割スクリプトデータベース0121に登録するものである。まず、呼び出し元から与えられた引数を用いて、変数を初期化する。TSNは、これから静的評価するテストスクリプトの名前を格納する変数である。続いて、ステップ1502~ステップ1516において、分割スクリプトデータベース0121に登録された、スクリプト名属性0702がTSNである全ての分割スクリプトBSRの静的評価値を算出する。分割スクリプトBSRと一致する再生可能スクリプトデータベース0118のスクリプトSSCIが存在する場合は、BSRの静的評価値属性0706をSSCIの静的評価値属性0804に更新し、BSRの再生可能フラグ属性0707をTrueに更新する。分割スクリプトBSRと一致する再生可能スクリプトデータベース0118のスクリプトが存在しない場合は、不安定コマンドデータベース0119に登録された再現性の低い不安定コマンドが、BSRのスクリプト中に現れる回数を算出し、その回数の負数であるEでBSRの静的評価値属性0706を更新し、BSRの再生可能フラグ属性0707をFalseに更新するステップ1503~ステップ1505、ステップ1509~1515、ステップ1508。併合テスト自動化装置0103は、以上の処理を、テストスクリプト併合処理において呼び出される度に実行する。図22は、併合テスト自動化装置0103に備えられた併合テストスクリプト記録装置0111の、テストスクリプト動的評価処理の概要を示すフローチャートである。本処理は、分割スクリプトデータベース0121に登録されたスクリプトを、その静的評価値の高いものを優先して動作確認し、連続して再生可能な順番で分割スクリプトを並べたリストを返すものである。まず、呼び出し元から与えられた引数を用いて、変数を初期化する。TSNは、これから静的評価するテストスクリプトの名前を格納する変数である。SCLは、本処理の結果を格納する参照変数であり、この変数の値は呼び出し元から参照することができる。Nは、現在の分割番号をテスト自動化装置ごとに格納するマップ変数である。テスト自動化装置によっては、特定の画面に対する操作を記録できないことがあるため、テストスクリプトを画面単位で分割する場合、スクリプトの分割数が一致しない事がある。この分割数のズレを補正するために、マップ変数Nを使用し、現在の動的評価の対象である分割スクリプトの分割番号をテスト自動化装置ごとに管理する。ステップ1602~1604は、このマップ変数Nに対し、全てのテスト自動化装置の分割位置を1で初期化する処理である。初期化が終わったら、テストスクリプト名TSNとマップ変数NとSCLを与えてテストスクリプト動的評価処理のサブルーチン1を実行し、戻り値の分割スクリプトリストを参照変数SCLに設定し、処理を終了する。なお、本処理を終了する際は、呼び出し元に変数SCLの値を戻り値として返す。併合テスト自動化装置0103は、以上の処理を、テストスクリプト併合処理において呼び出される度に実行する。図23及び図24は、併合テスト自動化装置0103に備えられた併合テストスクリプト記録装置0111のテストスクリプト動的評価処理のサブルーチン1の概要を示すフローチャートである。本処理は再帰呼び出しが可能であり、各呼び出しごとに、固有の変数を作成する。まず、呼び出し元から与えられた引数を用いて、変数を初期化する。SCL2は、これまでの動的評価によって、連続して再生可能な順番で分割スクリプトが格納されているリスト変数である。N2は、各テスト自動化装置における、現在の分割番号を格納するマップ変数である。RRは、各テスト自動化装置における、現在の分割番号の分割スクリプトを格納する集合変数である。ステップ1702~1707は、このRRの初期化処理である。RRに分割スクリプトが存在しない場合は、本処理の戻り値として、引数であるSCL2をそのまま設定し、処理を終了する。上記フローは、全ての分割位置についての探索が終了し、分割スクリプトのリストSCL2が完成したことを表している。RRに分割スクリプトが存在する場合は、現在の分割スクリプトを再生するに至るまでに遷移した画面のうち、最後の画面である遷移前画面BSを取得する。まだ一度も画面に遷移していない場合は、BSにNULLを設定する。続くステップ1713では、スクリプト結合パターンデータベース0120より、遷移前画面がBSである場合に、その遷移後画面として再生実績のある画面の集合BSSを取得する。続いて、BSSに含まれる画面名を操作する分割スクリプトの集合PRと、BSSに含まれない画面を操作する分割スクリプトの集合IRを作成する。ステップ1714。そして、まず最初に、集合PRに対し、サブルーチン2を実行して動作確認し、戻り値RSを確認する。サブルーチン2の戻り値RSがNULLでない場合は、PRの1つの要素を遷移後画面とする、連続して再生可能な分割スクリプトのリストがRSに格納されている。よって、戻り値がNULLでない場合は、本処理の戻り値としてRSを設定し、処理を終了する。一方、戻り値RSがNULLである場合は、PRの要素を遷移後画面とする場合は、連続して再生可能な分割スクリプトを生成できない事を表している。この場合は、残りの分割スクリプト集合であるIRを遷移後画面として、PRの場合と同様にサブルーチン2を実行し、戻り値RS2を確認する。RS2がNULLでない場合は、本処理の戻り値にRS2を設定し、本処理を終了する。一方、RS2がNULLの場合は、再生可能なスクリプトが1つも得られなかったことを表している。この場合は、処理が失敗したことを示すNULLを本処理の戻り値として設定し、本処理を終了する。併合テスト自動化装置0103は、以上の処理を、テストスクリプト動的評価処理において、本処理が再帰的に呼び出される度に実行する。図32及び図33にこの動的評価処理結果の例を示している。図25~図27は、併合テスト自動化装置0103に備えられた併合テストスクリプト記録装置0111の、テストスクリプト動的評価処理のサブルーチン2の概要を示すフローチャートである。本処理は再帰呼び出しが可能であり、各呼び出しごとに、固有の変数を作成する。まず、呼び出し元から与えられた引数を用いて、変数を初期化する。SCL3は、これまでの動的評価によって、連続して再生可能な順番で分割スクリプトが格納されているリスト変数である。N3は、各テスト自動化装置における、現在の分割番号を格納するマップ変数である。Rは、現在動作確認対象となっている分割スクリプトの集合であり、テストスクリプト動的評価処理のサブルーチン1のステップ1714で作成した変数PRとIRのいずれかが代入される。続くステップ1802~ステップ1819では、分割スクリプト集合Rの中で、再生に成功する分割スクリプトRIがあるかどうかを調べる処理を行う。併合テストスクリプト再生処理のサブルーチンを実行することで分割スクリプトRIの動作確認を行い、再生に成功したら、その分割スクリプトRIを再生可能スクリプトデータベース0118のレコードとして追加し、再生に成功した画面遷移パターンをスクリプト結合パターンデータベース0120に追加する。再生可能スクリプトデータベース0118に分割スクリプトのレコードを追加する場合は、分割スクリプトの静的評価値属性0706に10を加算したものを登録する。これは、スクリプトに含まれる不安定コマンドの数が同じであっても、動作確認実績のあるスクリプトの優先度を高くするためである。これらのデータベースへの登録処理が終了したら、再生に成功した分割スクリプトRIをSCL3に加えた変数SCL4を生成し、これを与えて再度サブルーチン1を実行し、戻り値RSを判定する。サブルーチン1の処理が失敗し、戻り値RSがNULLとなる場合は、SCL4で指定する順で分割スクリプトを再生するときは、その後の画面から最後の画面まで連続して再生可能な分割スクリプトのリストを生成できないことを表している。よって、戻り値がNULLとなる場合は、残りの分割スクリプトの動作確認に移る。一方、サブルーチンの処理が成功し、戻り値がNULLでない場合は、SCL4で指定する順で分割スクリプトを再生したときに、その後の画面に対しても連続して再生可能な分割スクリプトのリストがRSに格納されている。よって、戻り値がNULLでない場合は、このRSを本処理の戻り値に設定し、本処理を終了する。併合テスト自動化装置0103は、以上の処理を、テストスクリプト動的評価処理において、本処理が再帰的に呼び出される度に実行する。図28は、併合テスト自動化装置0103に備えられた併合テストスクリプト記録装置0111の、テストスクリプト生成処理の概要を示すフローチャートである。本処理は、テストスクリプト動的評価処理において、連続して再生可能な順番で格納された分割スクリプトのリストに従い、併合テストスクリプト再生処理において再生可能な、1つのテストスクリプトを生成するものである。まず、呼び出し元から与えられた引数を用いて、変数を初期化する。SCLは、テストスクリプト動的評価処理によって生成された、連続して再生可能な順番で分割スクリプトが格納されているリスト変数である。TSNは、これから生成するテストスクリプトの名前を格納する変数である。Mは、併合後のスクリプトを格納する変数であり、NULLで初期化する。変数の初期化が終わったら、ループAステップ1902~ステップ1906において、リスト変数SCLに格納された分割スクリプトRを、リストの先頭のものから順番に、Mに書き込む処理を行う。但し、各分割スクリプトRをMに書き込む際には、その分割スクリプトRを再生するテスト自動化装置TAを指定するための、テスト自動化装置選択文を挿入する。ループAの全ての処理が終わったら、その時点のスクリプトMを、名前をTSNとして、併合テストスクリプトデータベース0113に登録する。併合テスト自動化装置0103は、以上の処理を、テストスクリプト併合処理において呼び出される度に実行する。図29及び図30は、併合テスト自動化装置0103に備えられた併合テストスクリプト再生装置0112のテストスクリプト再生処理の概要を示すフローチャートである。本処理は、テストスクリプトの名前を与えることで、併合テストスクリプトデータベース0113に登録されたテストスクリプトを再生するものである。まず、呼び出し元から与えられた引数を用いて、変数を初期化する。TSNは、これから再生するテストスクリプトの名前を格納する変数である。Sは、テスト自動化装置選択文によって分割したスクリプトを格納する変数である。TAは、スクリプトSを再生するテスト自動化装置の名前である。変数の初期化が終わったら、併合テストスクリプトデータベース0113より、名前がTSNであるテストスクリプトTSを開く。続いて、ループAにおいて、TSをテスト自動化装置選択文によって分割し、分割した各スクリプトSを、Sを再生するテスト自動化装置TAを使って再生する。分割したスクリプトSの再生は、併合テストスクリプト再生処理のサブルーチンを使用して行う。Sを再生するテスト自動化装置TAは、テスト自動化装置選択文を文字列解析することによって取得する。ループAの全ての処理が終わったら、ステップ2010の処理に移るステップ2010~2011では、ループAにおいて再生できなかった、テストスクリプトTSの最後の分割スクリプトを再生する。併合テスト自動化装置0103は、以上の処理を、テスト実行マシン0104の入力部0105に再生操作が行われる度に実行する。図31は、併合テスト自動化装置0103に備えられた併合テストスクリプト再生装置0112のテストスクリプト再生処理のサブルーチンの概要を示すフローチャートである。本処理は、テストスクリプトの名前を与えてテストスクリプトデータベース0109からテストスクリプトを検索するのではなく、テストスクリプトの記述内容を直接与えて再生する処理であり、併合テストスクリプト再生処理、テストスクリプト動的評価処理において、実行されるものである。まず、呼び出し元から与えられた引数を用いて、変数を初期化する。S2は、再生するスクリプトを格納する変数である。TA2は、スクリプトS2の再生に使用するテスト自動化装置の名前である。続いて、テスト自動化装置TA2を使用してスクリプトS2を再生し、その再生結果を戻り値として設定しステップ2105~2107、処理を終了する。本処理では、S2の内容をテストスクリプトデータベースにFとして書き出し、このFを再生することによって行う。また、テスト自動化装置TA2を使用するコマンドは、テスト自動化装置リスト0110より取得する。併合テスト自動化装置0103は、以上の処理を、併合テストスクリプト再生処理、テストスクリプト動作確認処理において呼び出される度に実行する。"