(57)【要約】【課題】テストスクリプトの修正に要する作業量を軽減する。【解決手段】対象アプリケーションが変更されると、テストスクリプト修正手段１３は、カーソル移動操作に対応する移動元画面要素と移動先画面要素を変更アプリケーションに合わせて修正し、カーソル移動手順の探索を操作制御手段１４に指示する。操作制御手段１４は、操作実行手段１６に指示してカーソルを移動させ、カーソル取得手段１７でカーソルの位置を確認しながら、移動先画面要素までのカーソル移動手順を探索する。こうして取得されたカーソル移動手順に基づいて、テストスクリプト修正手段１３は、テストスクリプトを修正する。【選択図】図１
2010218231.tif 000002
【特許請求の範囲】
【請求項１】
対象アプリケーションに対するユーザの操作に基づいて作成されるテストスクリプトを用いて実施されるアプリケーションテストを支援する処理を行うテスト支援プログラムにおいて、
コンピュータを、
前記対象アプリケーションの動作環境を再現する再現装置で表示される表示画面の画面要素を指示するカーソルの位置情報を取得するカーソル取得手段、
始点の画面要素と目標点の画面要素とが指定されると、前記カーソルの移動を前記対象アプリケーションに指示する操作実行手段を制御し、前記始点の画面要素を起点として前記カーソルを移動させるとともに前記カーソル取得手段によって取得される前記カーソルの位置情報に基づいて移動後の前記カーソルが指示する前記画面要素を確認する処理を繰り返し、確認された前記画面要素が前記目標点の画面要素に到達するまでのカーソル移動手順を探索する操作制御手段、
予め前記テストスクリプトのカーソル移動操作と、前記カーソル移動操作の実行前に前記カーソルが指示する移動元画面要素と、前記カーソル移動操作の実行後に前記カーソルが指示する移動先画面要素とを関連付けたテストスクリプト管理情報をテストスクリプト管理情報記憶手段に記憶しておき、前記対象アプリケーションが変更されるときは、前記対象アプリケーションの変更前と変更後の前記画面要素を関連付けた画面要素関連付け情報に基づいて、前記テストスクリプト管理情報記憶手段に格納される変更前の前記テストスクリプト管理情報に設定される前記移動元画面要素及び前記移動先画面要素を変更後の前記画面要素に応じた値に変換し、変換された前記移動元画面要素を前記始点の画面要素、変換された前記移動先画面要素を前記目標点の画面要素として前記操作制御手段に前記カーソル移動手順の探索を指示し、探索された前記カーソル移動手順に基づいて前記テストスクリプトの前記カーソル移動操作を修正し、前記テストスクリプトを変更後の前記対象アプリケーションに適合させる修正処理を行うテストスクリプト修正手段、
として機能させることを特徴とするテスト支援プログラム。
【請求項２】
前記操作制御手段は、前記カーソル取得手段によって特定された前記カーソルが指示する前記画面要素を探索地点として１つの操作で可能な前記カーソルの移動を順次実行させて実行後の前記カーソルが指示する移動先の前記画面要素を探索するとともに、探索された前記移動先の画面要素と前記移動先の画面要素への移動に対応する操作とを操作履歴として記録し、探索された前記移動先の画面要素のうち前記探索地点と異なり、かつこれまでに探索されていない前記画面要素を次の探索地点として、前記移動先の画面要素が前記目標点の画面要素になるまで探索処理を繰り返し、前記目標点の画面要素に到達するまでに通過した前記移動先の画面要素への移動に対応する操作を前記操作履歴より抽出し、前記カーソル移動手順とする、ことを特徴とする請求項１記載のテスト支援プログラム。
【請求項３】
前記テストスクリプト修正手段は、予め、変更前の前記テストスクリプトのカーソル移動操作を抽出し、前記カーソル移動操作の実行前に前記カーソル取得手段から前記カーソル移動操作の実行前の前記カーソルの位置情報を取得して前記移動元画面要素を特定し、前記カーソル移動操作を前記再現装置に実行させた後、前記カーソル取得手段から前記カーソルの位置情報を取得して前記移動先画面要素を特定し、特定された前記移動元画面要素と前記移動先画面要素とを前記カーソル移動操作に対応付けて前記テストスクリプト管理情報を生成し、前記管理情報記憶手段に格納する、
ことを特徴とする請求項１記載のテスト支援プログラム。
【請求項４】
対象アプリケーションに対するユーザの操作に基づいて作成されるテストスクリプトを用いて実施されるアプリケーションテストを支援するテスト支援方法において、
前記対象アプリケーションの動作環境を再現する再現装置で表示される表示画面の画面要素を指示するカーソルの位置情報を取得するカーソル取得手段を用いて、前記テストスクリプトのカーソル移動操作と、前記カーソル移動操作の実行前に前記カーソルが指示する移動元画面要素と、前記カーソル移動操作の実行後に前記カーソルが指示する移動先画面要素とを関連付けたテストスクリプト管理情報をテストスクリプト管理情報記憶手段に記憶しておくテストスクリプト管理情報生成手順と、
前記対象アプリケーションが変更されるときは、前記対象アプリケーションの変更前と変更後の前記画面要素を関連付けた画面要素関連付け情報に基づいて、前記テストスクリプト管理情報記憶手段に格納される変更前の前記テストスクリプト管理情報に設定される前記移動元画面要素及び前記移動先画面要素を変更後の前記画面要素に応じた値に変換し、変換された前記移動元画面要素を始点の画面要素、変換された前記移動先画面要素を目標点の画面要素として指定する手順と、
前記始点の画面要素と前記目標点の画面要素とが指定されると、前記始点の画面要素を起点とし、前記カーソルの移動を前記対象アプリケーションに指示する操作手段を制御して前記カーソルを移動させるとともに前記カーソル取得手段によって取得される前記カーソルの位置情報に基づいて移動後の前記カーソルが指示する前記画面要素を確認する処理を繰り返し、確認された前記画面要素が前記目標点の画面要素に到達するまでのカーソル移動手順を探索する操作制御手順と、
前記操作制御手順によって探索された前記カーソル移動手順に基づいて前記テストスクリプトの前記カーソル移動操作を修正し、前記テストスクリプトを変更後の前記対象アプリケーションに適合させる修正処理を行うテストスクリプト修正手順と、
を有することを特徴とするテスト支援方法。
【請求項５】
対象アプリケーションに対するユーザの操作に基づいて作成されるテストスクリプトを用いて実施されるアプリケーションテストを支援するテスト支援装置において、
前記対象アプリケーションの動作環境を再現する再現装置で表示される表示画面の画面要素を指示するカーソルの位置情報を取得するカーソル取得手段と、
前記テストスクリプトのカーソル移動操作と、前記カーソル移動操作の実行前に前記カーソルが指示する移動元画面要素と、前記カーソル移動操作の実行後に前記カーソルが指示する移動先画面要素とを関連付けたテストスクリプト管理情報を記憶するテストスクリプト管理情報記憶手段と、
始点の画面要素と目標点の画面要素とが指定されると、前記カーソルの移動を前記対象アプリケーションに指示する操作実行手段を制御し、前記始点の画面要素を起点として前記カーソルを移動させるとともに前記カーソル取得手段によって取得される前記カーソルの位置情報に基づいて移動後の前記カーソルが指示する前記画面要素を確認する処理を繰り返し、確認された前記画面要素が前記目標点の画面要素に到達するまでのカーソル移動手順を探索する操作制御手段と、
前記対象アプリケーションが変更されるときは、前記対象アプリケーションの変更前と変更後の前記画面要素を関連付けた画面要素関連付け情報に基づいて、前記テストスクリプト管理情報記憶手段に格納される変更前の前記テストスクリプト管理情報に設定される前記移動元画面要素及び前記移動先画面要素を変更後の前記画面要素に応じた値に変換し、変換された前記移動元画面要素を前記始点の画面要素、変換された前記移動先画面要素を前記目標点の画面要素として前記操作制御手段に前記カーソル移動手順の探索を指示し、探索された前記カーソル移動手順に基づいて前記テストスクリプトの前記カーソル移動操作を修正し、前記テストスクリプトを変更後の前記対象アプリケーションに適合させる修正処理を行うテストスクリプト修正手段と、
を有することを特徴とするテスト支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テスト支援プログラム、テスト支援方法及びテスト支援装置に関し、特に、対象アプリケーションに対するユーザの操作に基づいて作成されるテストスクリプトを用いて実施されるアプリケーションテストを支援するテスト支援プログラム、テスト支援方法及びテスト支援装置に関する。
【背景技術】
【０００２】
携帯電話などの組み込み機器に搭載するソフトウェアの開発では、キーや画面といったハードウェアデバイス、ＯＳ（Operating System）やミドルウェアといったソフトウェアを含むシステムのエミュレータを使用したテストが一般的に実施される。また、エミュレータ上でテストを実施する場合には、エミュレータの操作手順を記述したテストスクリプトを利用してテストの省力化を図ることが多い。多くのエミュレータ用のテストスクリプトは、エミュレートしている入力デバイスに対する操作の連続として記述される。携帯電話であれば、オンフックキーや数字キー等の操作として記述される。例えば、「下キーを押す」、「決定キーを押す」、「１キーを押す」、「２キーを押す」、・・・という操作に対応し、「ｋｅｙ  下キー」、「ｋｅｙ  決定キー」、「ｋｅｙ  １キー」、「ｋｅｙ  ２キー」・・・というように、テストスクリプトが記述される。
【０００３】
このように、テストスクリプトは、操作対象のアプリケーションによる部品やキー等の種類や表示位置に対応して作成される。このため、操作対象のアプリケーションに機能拡張や不良修正などが発生したときは、既存のテストスクリプトを使用することができなくなる。
【０００４】
そこで、アプリケーションの仕様変更前の画面におけるボタンやテキストボックス等の画面要素と、仕様変更後の画面における画面要素との間の対応関係を設定することによってテストスクリプトを修正する技術が提案されている（例えば、特許文献１参照）。
【０００５】
また、単にユーザの操作をテストスクリプトに記述するだけでは、画面の各オブジェクト（部品）に対する遷移パターンを全て把握できない。そこで、操作画面のオブジェクトに対する遷移パターンと、画面の入力パターンと、状態遷移などの情報を記憶しておき、テストスクリプトを自動作成する方法も提案されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−１０２６５４号公報
【特許文献２】特開２００５−１１５５８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、従来のテスト支援装置では、仕様変更等によってテストスクリプトの修正が必要となったとき、実施のための作業量が膨大となってしまうという問題点がある。
仕様変更前後の画面要素の対応関係に基づいてテストスクリプトを修正する場合には、任意の画面要素間でのカーソル移動の手順を画一的に記述できることを要する。すなわち、テストスクリプト上で任意の画面要素へのカーソル移動を最小記述単位とすることができ、カーソルの移動操作がテストスクリプトに記述されないことを意味する。
【０００８】
しかし、組み込み機器の多くのテストスクリプトは、ユーザの１つの操作を最小記述単位としている。すなわち、画面要素間のカーソル移動の手順も、実際にカーソルを移動させるための操作として記述されている。例えば、ある画面要素から別の画面要素へのカーソル移動は、「ｋｅｙ  下キー」であり、さらに別の画面要素への移動は、「ｋｅｙ  右キー」、「ｋｅｙ  上キー」の連続で表記される。このように、テストスクリプトは、画面上のボタン位置など画面要素の位置に基づいて記述されるため、画面要素の位置変更に伴って修正する必要が生じる。
【０００９】
そこで、テストスクリプトを修正する際には、テストスクリプトに含まれるカーソル移動の操作部分を特定してから、仕様修正後の画面において、ある画面要素から別の画面要素へカーソルを移動させる手順を検出しなければならない。しかし、カーソルの移動手順は一様ではなく、移動可能な手順を人手で検出することは容易ではない。
【００１０】
また、予め仕様変更後の画面について、画面要素から別の画面要素への遷移パターンを登録しておけば、修正部分を置き換えることはできる。しかしながら、ある画面に関して任意のカーソル移動に対応させるために必要となる遷移パターンの数は、移動元画面要素となり得る画面要素数と、移動先画面要素となり得る画面要素数の積に比例する。さらに、アプリケーションの仕様が変更されるごとに、登録した遷移パターンを作り直さなければならない。このため、テスト対象の全てのアプリケーションの画面に対してカーソル移動の遷移パターンを登録する方法は、膨大な遷移パターンを作成する作業が必要となるという問題点がある。
【００１１】
仕様変更後に、試験担当者が操作を行い、これを録画などによって記録し、その記録に基づいてテストスクリプトを修正する方法も考えられる。しかしながら、作業は人手に任されており、テスト対象の全てのアプリケーション画面に対して実施するには、膨大な作業量が必要となるという問題点がある。
【００１２】
このような問題点に鑑み、仕様変更に追随してテストスクリプトを修正し、テストスクリプトの修正に要する作業量を軽減することが可能なテスト支援プログラム、テスト支援方法及びテスト支援装置の提供を目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、対象アプリケーションに対するユーザの操作に基づいて作成されるテストスクリプトを用いて実施されるアプリケーションテストを支援する処理を行うテスト支援プログラムが提供される。このテスト支援プログラムは、コンピュータをカーソル取得手段、操作制御手段及びテストスクリプト修正手段として機能させる。カーソル取得手段は、対象アプリケーションの動作環境を再現する再現装置で表示される表示画面の画面要素を指示するカーソルの位置情報を取得する。操作制御手段は、始点の画面要素と目標点の画面要素とが指定されると、カーソルの移動を対象アプリケーションに指示する操作実行手段を制御し、始点の画素要素を起点としてカーソルを移動させるとともに、カーソル取得手段によってカーソルの位置情報を取得する。そして、カーソルの位置情報に基づいて移動後のカーソルが指示する画面要素を確認する。この処理を繰り返し、確認された画面要素が目標点の画面要素に到達するまでのカーソル移動手順を探索する。テストスクリプト修正手段は、予めテストスクリプトのカーソル移動操作と、カーソル移動操作の実行前にカーソルが指示する移動元画面要素と、カーソル移動操作の実行後にカーソルが指示する移動先画面要素とを関連付けたテストスクリプト管理情報をテストスクリプト管理情報記憶手段に記憶しておく。対象アプリケーションが変更されるときは、対象アプリケーションの変更前と変更後の画面要素を関連付けた画面要素関連付け情報に基づいて、テストスクリプト管理情報記憶手段に格納される変更前のテストスクリプト管理情報を変更する。テストスクリプト管理情報に設定される移動元画面要素及び移動先画面要素を変更後の画面要素に応じた値に変換する。そして、変換された移動元画面要素を始点の画面要素、変換された移動先画面要素を目標点の画面要素として操作制御手段にカーソル移動手順の探索を指示する。そして、探索されたカーソル移動手順に基づいて、テストスクリプトのカーソル移動操作を修正し、テストスクリプトを変更後の対象アプリケーションに適合させる修正処理を行う。
【００１４】
このようなテスト支援プログラムは、コンピュータをテスト支援装置として機能させる。このテスト支援装置は、テストスクリプトのカーソル移動操作と、移動元画面要素と、移動先画面要素とを関連付けたテストスクリプト管理情報を記憶しておく。対象アプリケーションが変更されるときは、変更前と変更後の画面要素を対応付けた画面要素関連付け情報に基づいて、テストスクリプト管理情報の移動元画面要素と移動先画面要素を変更後の画面要素の値に変換する。そして、変換された移動元画面要素を始点の画面要素、移動先画面要素を目標点の画面要素として、カーソル移動手順を探索する。探索は、操作手段が、対象アプリケーションにカーソルの移動を指示する操作実行手段を制御してカーソルを移動させ、カーソル取得手段が取得するカーソルの位置情報に基づいて移動後の画面要素を確認する処理を繰り返して行う。こうして、移動後の画面要素が目標点の画面要素になるまでのカーソル移動手順を探索する。そして、探索されたカーソル移動手順に基づいて、テストスクリプト及びテストスクリプト管理情報を修正する。
【００１５】
また、上記課題を解決するために、コンピュータに上記の処理機能によって実現される処理手順を実行させるテスト支援方法と、テスト支援装置と、が提供される。
【発明の効果】
【００１６】
開示のテスト支援プログラム、テスト支援方法及びテスト支援装置によれば、対象アプリケーションが変更されたときは、移動元画面要素を起点としてカーソルを操作し、その移動先を探索する処理が行われる。こうして、実際に移動可能な移動元画面要素から移動先画面要素へのカーソル移動手順が自動的に探索される。そして探索されたカーソル移動手順を用いてテストスクリプトが修正される。この結果、仕様変更に伴うテストスクリプト修正に要する作業量を大幅に軽減することが可能となる。
【図面の簡単な説明】
【００１７】
【図１】発明の概要を示した図である。
【図２】テスト装置のハードウェア構成を示した図である。
【図３】テスト装置のソフトウェア構成を示したブロック図である。
【図４】対象アプリケーションの仕様変更前画面と仕様変更後画面の一例を示した図である。
【図５】テストスクリプト本体の一例を示した図である。
【図６】構造化の一例を示した図である。
【図７】構造化された呼出元テストスクリプト全体を示した図である。
【図８】サブスクリプト全体を示した図である。
【図９】テストスクリプト管理情報の一例を示した図である。
【図１０】画面要素関連付け情報の一例を示した図である。
【図１１】キー操作及びカーソル移動先情報の一例を示した図である。
【図１２】連続する探索処理で生成されるキー操作及びカーソル移動先情報を示した図である。
【図１３】探索手順記録情報の一例を示した図である。
【図１４】移動可能画面要素情報を示した図である。
【図１５】修正後のサブスクリプトを示した図である。
【図１６】テストスクリプトを修正するテスト支援方法の処理手順を示したフローチャートである。
【図１７】テストスクリプト管理情報生成処理の手順を示したフローチャートである。
【図１８】画面要素の関連付け処理の手順を示したフローチャートである。
【図１９】テストスクリプト修正処理の手順を示したフローチャートである。
【図２０】カーソル移動手順探索処理の手順を示したフローチャートである。
【図２１】探索処理１の手順を示したフローチャートである。
【図２２】探索処理２の手順を示したフローチャートである。
【図２３】探索関連情報更新処理の手順を示したフローチャートである。
【図２４】探索復帰処理の手順を示したフローチャートである。
【発明を実施するための形態】
【００１８】
以下、実施の形態を図面を参照して説明する。まず、発明の概要について説明し、その後、具体的な内容を説明する。
図１は、発明の概要を示した図である。
【００１９】
テスト支援装置１０は、管理情報を記憶する管理情報記憶手段１１、探索情報を記憶する探索情報記憶手段１２、対象アプリケーションの仕様変更等に伴ってテストスクリプトを修正するテストスクリプト修正手段１３、カーソル操作を制御し、移動元の画面要素から移動先の画面要素へのカーソル移動手順を探索する操作制御手段１４、テストスクリプトを解釈するスクリプト解釈手段１５、解釈されたテストスクリプトをキー操作として実行させる操作実行手段１６、カーソルの位置情報を取得するカーソル取得手段１７及びカーソルを移動させるカーソル移動手段１８を有し、組み込み機器エミュレータ２０を用いたテスト対象アプリケーション２１のテストを支援する。なお、画面要素とは、ボタンやテキストボックス等、アプリケーションの画面を構成する部品をいう。カーソルは、この画面要素間を移動する。
【００２０】
ここで、組み込み機器エミュレータ２０は、テスト対象アプリケーション２１を実際に動作させる機器のハードウェアデバイスやＯＳを含む動作環境をコンピュータ上に再現した再現装置として機能する。なお、テスト対象となる組み込み機器は、表示画面やキー操作部を有し、テスト対象アプリケーション２１は、表示画面上のカーソルをキー操作によって移動させ、カーソルによって指示された画面上の表示に応じた処理を実行する。このため、テストに際しては、ユーザのキー操作を記述したテストスクリプトが生成される。テストスクリプトが実行されることにより、ユーザが操作を行ったときと同じ状態を作り出すことができる。また、テスト対象アプリケーション２１は、組み込み機器に搭載されるアプリケーションプログラムで、実機への搭載前に組み込み機器エミュレータ２０でテストが行われる。例えば、テスト対象アプリケーション２１に小規模な仕様変更があるとする。テストスクリプトには、所定の値もしくは操作を行わせるため、カーソルの位置を所定の場所に移動させるカーソル移動操作と、所定の値もしくは操作を行わせる非カーソル移動操作とがある。ここでの小規模な仕様変更とは、画面要素の配置を変えるなどの変更で、操作自体は変えないような仕様変更を言う。従って、カーソル移動操作を修正する必要はあるが、非カーソル移動操作の修正は必要ない。もちろん、入力する数値を変更する必要が生じる場合もあるが、このような変更は試験実施者が行うとし、ここでの説明は省く。
【００２１】
次に、テスト支援装置１０の各処理手段について説明する。
管理情報記憶手段１１は、テストスクリプト、テストスクリプトに関するテストスクリプト管理情報及び画面要素関連付け情報を記憶する。テストスクリプトには、組み込み機器エミュレータ２０で再現される表示画面上の画面要素を指示するカーソルを移動させるカーソル移動操作を含むユーザの操作を再現する操作命令が記述される。テストスクリプト管理情報には、少なくともカーソル移動操作と、カーソル移動操作の実行前にカーソルが指示する移動元画面要素と、カーソル移動操作の実行後にカーソルが指示する移動先画面要素と、が対応付けて登録される。画面要素関連付け情報には、対象アプリケーションの変更前の表示画面の画面要素と、変更後の画面要素と、が対応付けて登録される。これらのテストスクリプトに関する管理情報は、テストスクリプト修正手段１３が処理を行う際に参照される。
【００２２】
探索情報記憶手段１２には、移動可能画面要素情報、キー操作及びカーソル移動先情報及び探索手順記録情報が格納される。移動可能画面要素情報には、各画面要素をカーソルが通過したかどうかが記録される。キー操作及びカーソル移動先情報には、ある画面要素に対してどのキー操作を実施したのか、また、どの画面要素にカーソルが移動したのかといった情報が記録される。探索手順記録情報は、探索においてキー操作の実施した順番が記録される。これらの探索情報は、操作制御手段１４が、移動元画面要素から移動先画面要素へカーソルを移動させるカーソル移動手順を探索する際に参照される。
【００２３】
テストスクリプト修正手段１３は、テストスクリプト管理情報と、画面要素関連付け情報とに基づき、テストスクリプトのカーソル移動操作部分を修正する。具体的には、対象アプリケーションが変更されるときは、管理情報記憶手段１１に格納される変更前のテストスクリプト管理情報を読み出し、移動元画面要素及び移動先画面要素を抽出する。画面要素関連付け情報に基づき、移動元画面要素と移動先画面要素とを対象アプリケーション変更後の画面要素に応じた値に変換する。そして、変換後の移動元画面要素を始点、移動先画面要素を目標点として操作制御手段１４にカーソル移動手順の探索を指示する。操作制御手段１４によって探索された移動元画面要素から移動先画面要素へのカーソル移動手順に基づいて、テストスクリプトのカーソル移動操作部分を修正する。
【００２４】
操作制御手段１４は、テストスクリプト修正手段１３から始点の画面要素と、目標点の画面要素とを受け取り、始点から目標点までのカーソル移動手順を探索する。具体的には、カーソル取得手段１７から逐次取得する組み込み機器エミュレータ２０上のカーソルの位置情報と、探索情報記憶手段１２に格納される各種情報とに基づいて、カーソル移動手段１８と、操作実行手段１６とを操作する。始点の画面要素を起点として順次カーソルを移動させ、目標点の画面要素までのカーソル移動手順を探索する。すなわち、カーソル取得手段１７によって、カーソルの移動先の画面要素として目標点の画面要素が検出されるまで探索が行われる。なお、探索の結果、カーソル移動手順が得られなかったときは、その旨をテストスクリプト修正手段１３に通知する。
【００２５】
スクリプト解釈手段１５は、テストスクリプトを解釈して、操作実行手段１６を操作する。
操作実行手段１６は、スクリプト解釈手段１５と、操作制御手段１４から操作指示を受け、実際に組み込み機器エミュレータ２０へキー操作の指示を行う。
【００２６】
カーソル取得手段１７は、組み込み機器エミュレータ２０から画面のカーソルの位置を示す位置情報を取得し、操作制御手段１４へ渡す。位置情報には、カーソルが指示する画面要素が直接、または、画面要素に変換可能な情報が設定される。
【００２７】
カーソル移動手段１８は、操作制御手段に従って、組み込み機器エミュレータ２０の画面において、カーソル状態を変更させて、別の画面要素にカーソルを移動させる。
このような構成のテスト支援装置１０の動作について説明する。なお、以下の説明では、カーソルによって指示される画面要素を、カーソルを持つ画面要素とする。
【００２８】
管理情報記憶手段１１には、テストスクリプトと、テストスクリプト管理情報とが格納されている。テストスクリプト管理情報は、テストスクリプト修正手段１３が、予め変更前のテストスクリプトについて生成しておく。テストスクリプトのカーソル移動操作実行前にカーソル取得手段１７からカーソルの位置情報を取得し、移動元画面要素を特定する。続いて、カーソル移動操作部分のテストスクリプトを、スクリプト解釈手段１５を介して実行する。その後、カーソル取得手段１７からカーソルの位置情報を取得して、移動先画面要素を特定する。こうして特定された移動元画面要素と移動先画面要素とをカーソル移動操作に対応付けてテストスクリプト管理情報を生成し、前記管理情報記憶手段１１に格納する。
【００２９】
対象アプリケーションの仕様等が変更され、テストスクリプトの修正が必要となったとき、試験実施者は、テスト支援装置１０にテストスクリプト修正指示を出す。これにより、テストスクリプト修正手段１３によってテストスクリプト修正処理が開始される。このとき、予め試験実施者等によって、変更前の画面要素と、変更後の画面要素とを対応付けた画面要素関連付け情報が設定されている。
【００３０】
テストスクリプト修正手段１３は、テストスクリプト管理情報と、画面要素関連付け情報とに基づいて、変更前のテストスクリプトのカーソル移動操作部分の移動元画面要素と、移動先画面要素を変更後の画面要素の値に変換する。そして、変換された移動元画面要素を始点、変換された移動先画面要素を目標点としてカーソル移動手順を探索する指示を操作制御手段１４へ出力する。操作制御手段１４は、カーソル取得手段１７によってカーソルを持つ画面要素を確認しながら、操作実行手段１６と、カーソル移動手段１８を制御してカーソルを移動させ、始点から目標点までのカーソル移動手順を探索する。例えば、所定の画面要素を探索地点とし、操作実行手段１６を介してカーソル移動操作をテスト対象アプリケーション２１に実行させ、カーソル取得手段１７に指示して移動先の画面要素を特定する。カーソル移動手段１８に指示してカーソルの位置を探索地点に戻して次の方向へカーソルを移動させる操作を操作実行手段１６へ行う。こうして、探索地点からカーソルを移動させることのできる全操作と、このときの移動先の画面要素とを特定する。そして、特定された移動先の画面要素の１つを探索地点として、目標点に到達するまで同様の処理を行う。テストスクリプト修正手段１３は、操作制御手段１４によって探索されたカーソル移動手順に基づき、テストスクリプトを修正する。こうして、テストスクリプトが、変更された対象アプリケーションに応じて修正される。
【００３１】
このように、テスト支援装置１０によれば、テスト支援装置１０が変更後の対象アプリケーションに適合するカーソル移動手順を探索し、探索されたカーソル移動手順に基づいてテストスクリプトを修正することができる。従って、カーソルを持つ画面要素から別の画面要素にカーソルを移動させる手順を人手により設定する必要がない。これにより、変更時の作業を大幅に軽減することができる。
【００３２】
次に、図１に示したテスト支援装置１０を、携帯電話のアプリケーションのテストを行うテスト装置に適用した場合を例にとり、実施の形態について説明する。このテスト装置は、携帯電話のキーや画面などのハードウェアデバイスをエミュレートするエミュレータ部と、試験の操作及びテストスクリプトを修正するテスト支援部とを有する。
【００３３】
まず、テスト装置のハードウェア構成について説明する。図２は、テスト装置のハードウェア構成を示した図である。
テスト装置１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ：Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、及び通信インタフェース１０６が接続されている。
【００３４】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションのプログラムが格納される。グラフィック処理装置１０４には、モニタ１０８が接続されており、ＣＰＵ１０１からの命令に従って画像をモニタ１０８の画面に表示させる。入力インタフェース１０５には、キーボード１０９ａやマウス１０９ｂが接続されており、キーボード１０９ａやマウス１０９ｂから送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。通信インタフェース１０６は、図示しないネットワークに接続されており、ネットワークを介して他の装置との間でデータの送受信を行うことができる。
【００３５】
このようなハードウェア構成によって、情報装置の処理機能を実現することができる。なお、図２には、テスト装置のハードウェア構成を示したが、テスト装置のテスト支援部と、エミュレータ部を別装置とすることもできる。このような構成の場合のそれぞれの装置のハードウェア構成も同様である。
【００３６】
次に、テスト装置１００のソフトウェア構成について説明する。図３は、テスト装置のソフトウェア構成を示したブロック図である。
テスト装置１００は、テストスクリプトの修正等、テストのための支援処理を行うテスト支援部１１０と、対象機器をエミュレートするエミュレータ部１２０とを有する。
【００３７】
テスト支援部１１０は、管理情報記憶部１１１、探索情報記憶部１１２、テストスクリプト修正部１１３、操作制御部１１４、スクリプト解釈部１１５及びキー操作実行部１１６を有する。
【００３８】
管理情報記憶部１１１には、テストスクリプト管理情報、画面要素関連付け情報、テストスクリプト本体及びサブテストスクリプトが格納される。テストスクリプト管理情報は、テストスクリプトを分割したサブテストスクリプトを管理するための管理情報である。サブスクリプトは、テストスクリプトを操作の種別ごとに分割した操作群である。ここでは、サブスクリプトとしてカーソル移動を含むカーソル移動操作と、カーソル移動を含まない非カーソル移動操作とに分割される。テストスクリプト管理情報には、対応するサブスクリプトの種別や、サブスクリプトがカーソル移動操作を含む場合はそのカーソル移動操作と、移動元画面要素及び移動先画面要素と、が設定される。画面要素関連付け情報は、対象アプリケーションの仕様変更前の画面要素と、仕様変更後の画面要素との間での対応をとるための情報である。テストスクリプト本体は、操作手順を列記したテストスクリプトのデータである。サブテストスクリプトは、テストスクリプトを分割したサブスクリプトと、サブスクリプトを呼び出す呼出元スクリプトから成るデータである。詳細は後述する。
【００３９】
探索情報記憶部１１２は、移動可能画面要素情報と、キー操作及びカーソル移動先情報と、探索手順記録情報と、が格納される。移動可能画面要素情報には、各画面要素が、一度でもカーソルを持ったかどうかが保存される。キー操作及びカーソル移動先情報には、各画面要素から操作可能な入力デバイス操作及びカーソル移動先に関する情報が保存される。探索手順記録情報には、探索を試みている入力デバイスの操作内容と、実施順とが保持される。これらの情報は、探索処理の間のみに必要な情報である。
【００４０】
テストスクリプト修正部１１３は、テストスクリプトを、カーソル移動を含むカーソル移動サブスクリプトと、含まない非カーソル移動サブスクリプトとに分割し、テストスクリプト管理情報を生成する。また、モジュール呼び出し等のソフトウェア間通信によって、解釈・実行すべきテストスクリプトあるいはテストスクリプトの一部の処理をスクリプト解釈部１１５に指示する。そして、カーソル取得部１２１ｂから、表示部１２５に表示されている画面中でカーソルを持つ画面要素の識別情報を取得する。この識別情報は、エミュレータ部１２０との共有メモリを通じたソフトウェア間通信を介して取得する。さらに、モジュール呼び出し等のソフトウェア間通信を通じて操作制御部１１４に対し、始点の移動元画面要素と、目標点の移動先画面要素とを指示してカーソル移動手順の探索を依頼する。操作制御部１１４から得られたカーソル移動手順で対応するカーソル移動サブスクリプトを修正し、最終的に仕様変更後のアプリケーション用のテストスクリプトを生成する。
【００４１】
操作制御部１１４は、テストスクリプト修正部１１３から取得した始点の移動元画面要素と、目標点の移動先画面要素とに基づき、移動元画面要素から移動先画面要素へのカーソル移動手順を探索する。そして、探索されたカーソル移動手順をテストスクリプト修正部１１３が解釈可能なデータ形式で通知する。カーソル移動手順の探索では、テストスクリプト修正部１１３と同様にして、表示部１２５に表示されている画面でカーソルを持つ画面要素をカーソル取得部１２１ｂから取得する。また、共有メモリを通じたソフトウェア間通信を介してカーソル移動部１２１ｃに対し、最前面の画面中でカーソルを移動させることが必要な画面要素にカーソルを移動させる指示を行う。さらに、モジュール呼び出し等のソフトウェア通信を通じて、キー操作実行部１１６へ入力デバイス操作指示を行う。
【００４２】
スクリプト解釈部１１５は、実施すべき入力デバイス操作が記述されているテストスクリプトを入力として受け取り、入力デバイス操作を解釈して対応するデータグラムである入力デバイス操作指示に変換する。そして、ＡＰＩ（Application Program Interface）呼び出し等、ホストＯＳ上でのソフトウェア間通信によって、入力デバイス操作指示をキー操作実行部１１６に送信する。
【００４３】
キー操作実行部１１６は、入力デバイス操作指示を受信し、ＯＳイベントに変換する。そして、エミュレータ部１２０のキー仮想部１２２でエミュレートしている仮想キーのうち、入力デバイス操作指示に対応する仮想キーに対する操作を、ホストＯＳ経由でＯＳイベントとして送信する。
【００４４】
エミュレータ部１２０は、テスト対象アプリケーション１２１、キー仮想部１２２、入力デバイス処理部１２３、エミュレータプラットフォーム１２４及び表示部１２５を有する。
【００４５】
テスト対象アプリケーション１２１は、アプリケーション本体１２１ａのプログラムソースに対して、カーソル取得部１２１ｂ及びカーソル移動部１２１ｃのプログラムソースを加えてビルドを実施した結果得られるアプリケーションプログラムで動作する。アプリケーション本体１２１ａは、各種条件やデータを設定・入力するための表示画面を表示部１２５に表示するとともに、入力データを処理する。この画面上でカーソルが移動可能な画面要素には、識別子が設定されて管理される。この画面要素の識別子は、画面要素の包含関係において包含する側から包含される側へ向かう順番に画面要素１、画面要素２というように与えられる。また、同じ画面要素に包含される画面要素間については、画面要素の中心点が画面の上から下へ向かう順番に設定される。さらに、上下方向の座標が同じ場合には、画面の左から右へ向かう順番という優先順位で与えられる。
【００４６】
カーソル取得部１２１ｂ及びカーソル移動部１２１ｃは、ある特定のフレームワークを利用して構築されたアプリケーションに共通して組み込むことが可能なプログラムコンポーネントである。カーソル取得部１２１ｂは、組み込んだアプリケーション本体１２１ａの別スレッドとして動作し、アプリケーション本体１２１ａが持つ画面の１つが表示部１２５の最前面に表示されているときに、画面中のカーソルを持つ画面要素の識別子を取得する。取得した画面要素の識別子は、共有メモリを通じたソフトウェア間通信を介してテスト支援部１１０に送信する。送信の契機は、共有メモリ等を通じたソフトウェア間通信を介してテスト支援部１１０からの指示を受けたときである。カーソル移動部１２１ｃも同様に、アプリケーション本体１２１ａの別スレッドとして動作し、画面の１つが最前面に表示されたとき、画面中のカーソルを移動させる。カーソルの移動は、共有メモリを通じたソフトウェア間通信を介してテスト支援部１１０から受け取った命令に従って行う。また、カーソル取得部１２１ｂ及びカーソル移動部１２１ｃを組み込んだ複数のアプリケーションが同時に起動している場合は、表示部１２５の最前面に表示されている画面が属するアプリケーションに組み込まれたもののみが動作する。
【００４７】
なお、カーソル取得部１２１ｂ及びカーソル移動部１２１ｃは、エミュレータ部１２０内のアプリケーション本体１２１ａとは別のプロセスで動作させるとしてもよいし、エミュレータ部１２０外部のプロセスとして動作させてもよい。
【００４８】
キー仮想部１２２は、対象の組み込み機器の入力用キーをソフトウェア的にエミュレートする。キー操作実行部１１６によるホストＯＳの座標上で発生するマウスイベント等のＯＳイベントを受信し、エミュレートしているキーのうちのどれに操作が行われていたのかを認識する。そして、対応するデータグラムである入力デバイス操作に変換し、ホストＯＳ上でのソフトウェア通信によって、入力デバイス処理部１２３に送信する。
【００４９】
入力デバイス処理部１２３は、キー仮想部１２２から入力デバイス操作を受信して、エミュレータプラットフォーム１２４で動作しているゲスト用ＯＳで処理できる形式に変換する。そして、ホストＯＳ上でのソフトウェア通信によって、エミュレータプラットフォーム１２４に送信する。
【００５０】
エミュレータプラットフォーム１２４は、組み込み機器上で動作する組み込みＯＳ及びミドルウェアをエミュレートしている。ここでは、テスト装置のホストＯＳに対し、エミュレートされている組み込みＯＳをゲストＯＳと呼ぶ。入力デバイス処理部１２３から入力操作イベントを受信し、ゲストＯＳ上で動作するアプリケーションが受信可能な形式に変換し、ゲストＯＳ上でのソフトウェア通信によって、テスト対象アプリケーション１２１に送信する。また、テスト対象アプリケーション１２１によって実行されたソフトウェア処理の処理結果に応じた画面要素のデータを受け取り、表示部１２５に通知する。
【００５１】
表示部１２５は、エミュレータプラットフォーム１２４を通じて受信したテスト対象アプリケーション１２１の処理結果を基に、ゲストＯＳ上で最前面のアプリケーション画面に画面要素データを描画する。
【００５２】
このような構成のテスト装置１００の動作及びテスト支援方法を詳細に説明する。
テスト装置１００は、エミュレータ部１２０によるテスト対象アプリケーション１２１のテストの支援として、テスト対象アプリケーション１２１の仕様等が変更された場合には、変更に合わせてテストスクリプトを修正する処理を行う。以下、具体例を用いて説明する。
【００５３】
図４は、対象アプリケーションの仕様変更前画面と仕様変更後画面の一例を示した図である。（Ａ）は仕様変更前画面、（Ｂ）は仕様変更後画面を示している。
（Ａ）の仕様変更前画面２１０及び（Ｂ）の仕様変更後画面２２０は、ともに「相性診断」画面である。これは、ユーザは自分の誕生日と相手の誕生日を西暦で入力し、診断ボタンを押下することによって、相性診断結果を得ることができるという相性診断アプリケーションに基づく表示画面である。
【００５４】
仕様変更前画面２１０では、上から診断を開始するためのボタンを表した「診断」の画面要素２１１、相手の生年月日を入力するテキストボックスを構成する「年」の画面要素２１２、「月」の画面要素２１３及び「日」の画面要素２１４がある。その下には、自分の生年月日を入力するテキストボックスを構成する「年」の画面要素２１５、「月」の画面要素２１６及び「日」の画面要素２１７がある。そして、診断を実施せずにアプリケーションを終了させるボタンである「戻る」の画面要素２１８が配置されている。
【００５５】
各画面要素には識別子が付されており、画面上の並びに従って、画面要素２１１には「画面要素１」、画面要素２１２には「画面要素２」、画面要素２１３には「画面要素３」、画面要素２１４には「画面要素４」、画面要素２１５には「画面要素５」、画面要素２１６には「画面要素６」、画面要素２１７には「画面要素７」、画面要素２１８には「画面要素８」が設定されている。
【００５６】
一方、仕様変更後画面２２０では、上から自分の生年月日を入力するテキストボックスを構成する「年」の画面要素２２１、「月」の画面要素２２２及び「日」の画面要素２２３がある。その下には、相手の生年月日を入力するテキストボックスを構成する「年」の画面要素２２４、「月」の画面要素２２５及び「日」の画面要素２２６がある。そして、診断を開始するためのボタンを表した「診断」の画面要素２２７と、診断を実施せずにアプリケーションを終了させるボタンである「戻る」の画面要素２２８が並んで配置されている。このように、仕様変更後画面２２０では、生年月日を入力するテキストボックスの位置が相手と自分で入れ替わっているとともに、「診断」の画面要素２１１，２２７の位置が変更されている。
【００５７】
仕様変更後は、各画面要素の識別子を仕様変更後画面２２０の画面上の並びに従って振り直される。すなわち、仕様変更後画面２２０の例では、画面要素２２１には「画面要素１」、画面要素２２２には「画面要素２」、画面要素２２３には「画面要素３」、画面要素２２４には「画面要素４」、画面要素２２５には「画面要素５」、画面要素２２６には「画面要素６」、画面要素２２７には「画面要素７」、画面要素２２８には「画面要素８」が設定される。
【００５８】
このように、仕様変更の前後では、同じ内容を表す画面要素であっても、異なる識別子が付与される。例えば、「診断」ボタンは、仕様変更前画面２１０では画面要素１であるが、仕様変更後画面２２０では画面要素７になる。
【００５９】
このような画面を表示するアプリケーションのテストを行うため、画面のボタン操作及びデータ入力を行うキー操作を記述したテストスクリプトが生成される。
ここでは、テスト内容として、この画面に対し、
（１）「相手」の生年に「１９９９」入力、
（２）「相手」の生まれ月に「７」入力、
（３）「相手」の生まれ日に「１０」入力、
（４）「あなた」の生年に「１９３５」入力、
（５）「あなた」の生まれ月に「６」入力、
（６）「あなた」の生まれ日に「２０」入力、
（７）「診断」を押下、
という７つのステップを実行させるとする。
【００６０】
まず、アプリケーションの仕様変更前の仕様変更前画面２１０に対応するテストスクリプトが生成される。最初のテストスクリプトは、試験担当者によって記述されるとする。
図５は、テストスクリプト本体の一例を示した図である。
【００６１】
テストスクリプト本体１０００には、エミュレートしている組み込み機器のキー操作が連続して記述される。テストスクリプト本体１０００では、キー操作がテキスト形式で、「ｋｅｙ  下キー」、「ｋｅｙ  決定キー」、・・・として記述されている。なお、（ｓｃｎ（ｎは任意の整数））は、説明のために便宜的にテストスクリプトの各行に割り当てた識別符号であり、テストスクリプトには含まれない。
【００６２】
ここでは、上記の（１）ステップの「相手」の生年に「１９９９」入力という操作はｓｃ１の「ｋｅｙ  下キー」から、ｓｃ７の「ｋｅｙ  決定キー」までに記述されている。同様に、（２）ステップの操作はｓｃ８からｓｃ１１、（３）ステップの操作はｓｃ１２からｓｃ１６、（４）ステップの操作はｓｃ１７からｓｃ２５、（５）ステップの操作はｓｃ２６からｓｃ２９、（６）ステップの操作はｓｃ３０からｓｃ３４、（７）ステップの操作はｓｃ３５からｓｃ３７、にそれぞれ記述されている。なお、各処理には、該当する画面要素までの移動処理も含まれているとする。
【００６３】
上記のテストスクリプト本体１０００の記述は、カーソル移動操作に相当するスクリプトと、それ以外のデータの入力やボタンの選択などに相当するスクリプトとが混在する。例えば、ステップ（１）のｓｃ１の「ｋｅｙ  下キー」は、カーソル移動操作である。一方、ｓｃ２からｓｃ７までは、カーソルの移動以外の操作である。
【００６４】
テストスクリプト修正部１１３では、テストスクリプト本体１０００をカーソル移動操作と、それ以外の部分に分割し、それぞれをサブスクリプトとして構造化する。
図６は、構造化の一例を示した図である。
【００６５】
図６のテストスクリプト本体１０００は、図５に示したテストスクリプト本体１０００から、おおよそ（１）ステップと、（２）ステップと、に相当する部分を抜き出している。
【００６６】
構造化処理によって、テストスクリプト本体１０００は、カーソル移動サブスクリプトと、非カーソル移動サブスクリプトとに分割することができる。ここでは、（１）ステップのカーソル移動部分であるｓｃ１「ｋｅｙ  下キー」が抽出され、カーソル移動サブスクリプト１０２１を生成される。そして、「ｓｃｒｉｐｔ＿ｍｏｖｅ＿１」という名称が付与される。また、移動先で行う処理であるｓｃ２からｓｃ７までが抽出され、非カーソル移動サブスクリプト１０３１が生成される。このサブスクリプトには、「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿１」という名称が付与される。サブスクリプトに付与される名称は、同じ名称が重ならないように、一意に設定される。
【００６７】
同様に、（２）ステップのカーソル移動部分であるｓｃ８「ｋｅｙ  右キー」が抽出され、カーソル移動サブスクリプト１０２２が生成される。このサブスクリプトには、「ｓｃｒｉｐｔ＿ｍｏｖｅ＿２」という名称が付与される。そして、移動先で行う処理であるｓｃ９からｓｃ１１までが抽出され、非カーソル移動サブスクリプト１０３２が生成され、「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿２」という名称が付与される。以下、同様に、（３）から（７）ステップのサブスクリプトが生成される。
【００６８】
また、こうして生成されたサブスクリプトを呼び出す呼出元テストスクリプト１０１０も生成される。呼出元テストスクリプト１０１０では、（１）ステップとして、図４の仕様変更前画面２１０の画面要素２（２１２）を選択するカーソル移動サブスクリプト１０２１と、「１９９９」を入力する非カーソル移動サブスクリプト１０３１とを呼び出す。同様に、（２）ステップとして、仕様変更前画面２１０の画面要素３（２１３）を選択するカーソル移動サブスクリプト１０２２と、「７」を入力する非カーソル移動サブスクリプト１０３２とを呼び出す。
【００６９】
構造化処理の詳細は後述する。
図７は、構造化された呼出元テストスクリプト全体を示した図である。
呼出元テストスクリプト１０１０では、（１）ステップに対応し、「＃画面要素２を選択」操作を行う「ｓｃｒｉｐｔ＿ｍｏｖｅ＿１」と、「＃『１９９９』入力」操作を行う「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿１」とを呼び出す。（２）ステップに対応し、「＃画面要素３を選択」操作を行う「ｓｃｒｉｐｔ＿ｍｏｖｅ＿２」と、「＃『７』入力」操作を行う「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿２」とを呼び出す。（３）ステップに対応し、「＃画面要素４を選択」操作を行う「ｓｃｒｉｐｔ＿ｍｏｖｅ＿３」と、「＃『１０』入力」操作を行う「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿３」とを呼び出す。（４）ステップに対応し、「＃画面要素５を選択」操作を行う「ｓｃｒｉｐｔ＿ｍｏｖｅ＿４」と、「＃『１９３５』入力」操作を行う「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿４」とを呼び出す。（５）ステップに対応し、「＃画面要素６を選択」操作を行う「ｓｃｒｉｐｔ＿ｍｏｖｅ＿５」と、「＃『６』入力」操作を行う「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿５」とを呼び出す。（６）ステップに対応し、「＃画面要素７を選択」操作を行う「ｓｃｒｉｐｔ＿ｍｏｖｅ＿６」と、「＃『２０』入力」操作を行う「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿６」とを呼び出す。そして、（７）ステップに対応し、「＃画面要素１を選択」操作を行う「ｓｃｒｉｐｔ＿ｍｏｖｅ＿７」と、「＃ボタン押下」操作を行う「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿７」とを呼び出す。ここで、呼出元テストスクリプト１０１０において、「＃」で始まる行は説明のためのコメントであり、本発明の内容には影響を及びさない。
【００７０】
図８は、サブスクリプト全体を示した図である。
図７に示した呼出元テストスクリプト１０１０から呼び出されるサブスクリプトは、テストスクリプト本体１０００に含まれるカーソル移動サブスクリプトと、非カーソル移動サブスクリプトとがある。
【００７１】
カーソル移動サブスクリプトは、「ｓｃｒｉｐｔ＿ｍｏｖｅ＿１」１０２１、「ｓｃｒｉｐｔ＿ｍｏｖｅ＿２」１０２２、「ｓｃｒｉｐｔ＿ｍｏｖｅ＿３」１０２３、「ｓｃｒｉｐｔ＿ｍｏｖｅ＿４」１０２４、「ｓｃｒｉｐｔ＿ｍｏｖｅ＿５」１０２５、「ｓｃｒｉｐｔ＿ｍｏｖｅ＿６」１０２６及び「ｓｃｒｉｐｔ＿ｍｏｖｅ＿７」１０２７である。
【００７２】
非カーソル移動サブスクリプトは、「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿１」１０３１、「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿２」１０３２、「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿３」１０３３、「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿４」１０３４、「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿５」１０３５、「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿６」１０３６及び「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿７」１０３７である。
【００７３】
このように構造化することで、対象アプリケーションに変更があったときのテストスクリプト修正処理を容易にすることができる。
テストスクリプト修正部１１３では、このようにして生成したサブスクリプトに関するテストスクリプト管理情報を生成し、管理情報記憶手段１１に格納する。
【００７４】
図９は、テストスクリプト管理情報の一例を示した図である。
テストスクリプト管理情報１１００には、テストスクリプトを分割したサブテストスクリプトを管理するための管理情報が設定される。なお、テストスクリプト管理情報１１００には、一例として、図８に示したサブスクリプト群に関する情報が登録されている。
【００７５】
テストスクリプト管理情報１１００は、テストスクリプト名１１０１、実行順１１０２、サブスクリプト名１１０３、サブスクリプト種別フラグ１１０４、移動元１１０５及び移動先１１０６の情報項目を有する。
【００７６】
テストスクリプト名１１０１は、サブスクリプトが属するテストスクリプトの名称が登録される。図５に示したテストスクリプト本体に付与されている名称が設定される。ここでは、正常時の操作によりアプリケーションをテストする「正常系１」というテストスクリプト名が設定されているとする。
【００７７】
実行順１１０２には、サブスクリプトの実行順が設定される。ここで、テストスクリプト本体１０００が、上から順に実行されるとすると、上の行に相当するサブスクリプトから順に実行順が割り振られる。
【００７８】
サブスクリプト名１１０３には、各サブスクリプトに割り当てられた名称が設定される。ここでは、図８に示したサブスクリプトに付与されたサブスクリプト名が設定されている。
【００７９】
サブスクリプト種別フラグ１１０４には、このサブスクリプトがカーソル移動サブスクリプトであるか、非カーソル移動サブスクリプトであるかを示すフラグ情報が設定される。例えば、カーソル移動サブスクリプトに１、非カーソル移動サブスクリプトに０が設定される。
【００８０】
移動元１１０５には、サブスクリプトの種別がカーソル移動であるとき、このサブスクリプトが開始されるときにカーソルを持つ画面要素（移動元画面要素）が設定される。
移動先１１０６には、サブスクリプトの種別がカーソル移動であるとき、このサブスクリプトが終了したときにカーソルを持つ画面要素（移動元画面要素）が設定される。
【００８１】
ここで、テストスクリプト修正部１１３によるテストスクリプトの構造化（サブスクリプトの生成）処理と、テストスクリプト管理情報１１００生成処理について説明する。
テストスクリプト修正部１１３は、テストスクリプト本体１０００が入力されると、これを管理情報記憶部１１１に格納するとともに、構造化処理を開始する。
【００８２】
まず、カーソル取得部１２１ｂから画面上で現在のカーソルの位置情報を取得し、カーソルを持つ画面要素を特定する。ここでは、図４の仕様変更前画面２１０の画面要素１「診断」２１１がカーソルを持っていることが特定されたとする。特定された画面要素は、「カーソルを持つ画面要素」に一時保存する。
【００８３】
続いて、スクリプト解釈部１１５を介してテストスクリプトを１行実行させる。そして、実行後のカーソル位置をカーソル取得部１２１ｂより取得する。ここでは、ｓｃ１の「ｋｅｙ  下キー」が実行され、仕様変更前画面２１０の画面要素２「年」２１２にカーソルが移動したとする。なお、カーソルがどの画面要素に移動するかは、テスト対象アプリケーション１２１によって決まる。カーソル取得部１２１ｂの情報に基づいて、現在カーソルを持つ画面要素が画面要素２（２１２）であることが特定される。「カーソルを持つ画面要素」から、テストスクリプト実行前のカーソルを持つ画面要素を読み出し、現在カーソルを持つ画面要素と比較する。ここでは、画面要素１（２１１）から画面要素２（２１２）に変化しているのでカーソルが移動したと判断する。そして、「移動元」としてカーソルを持っていた画面要素１（２１１）を登録し、「カーソルを持つ画面要素」に画面要素２（２１２）を登録する。
【００８４】
続いて、スクリプト解釈部１１５を介してテストスクリプトを１行実行させ、実行後のカーソル位置をカーソル取得部１２１ｂより取得する。ここでは、ｓｃ２の「ｋｅｙ  決定キー」が実行されるが、カーソルは移動しない。カーソル取得部１２１ｂの情報に基づいて、現在カーソルを持つ画面要素が画面要素２（２１２）であることが特定される。「カーソルを持つ画面要素」に格納されるテストスクリプト実行前のカーソルを持つ画面要素と同じであるので、カーソルは移動していないと判断する。そして、「移動元」が登録されているかどうか確認する。ここでは、「移動元」に画面要素１（２１１）が登録されているので、「移動元」から現在の画面要素までカーソルの移動操作が行われたと判断する。そして、移動させた部分のテストスクリプトをカーソル移動サブスクリプトとし、名前を付与してテストスクリプト管理情報１１００に登録する。ここでは、ｓｃ１の「ｋｅｙ  下キー」が抽出され、カーソル移動サブスクリプト１０２１が生成される。こうして、カーソル移動サブスクリプト１０２１について、サブスクリプト名１１０３には「ｓｃｒｉｐｔ＿ｍｏｖｅ＿１」、サブスクリプト種別フラグ１１０４には「カーソル移動」、実行順１１０２には「１」が登録される。また、移動元１１０５には、「移動元」に登録される「画面要素１」が登録され、移動先１１０６には現在カーソルを持つ「画面要素２」が登録される。
【００８５】
こうして、サブスクリプトが登録された後は、「移動元」を未設定とし、次のテストスクリプトを実行する。スクリプト解釈部１１５を介してテストスクリプトを１行実行させ、実行後のカーソル位置をカーソル取得部１２１ｂより取得する。ここでは、ｓｃ３の「ｋｅｙ  １キー」が実行されるが、カーソルは移動しない。「移動元」を確認するが、未設定であるので、カーソル移動は発生していないと判断し、次の行のテストスクリプトを実行する。ｓｃ７までは、同様の処理が繰り返される。「カーソルを持つ画面要素」は、画面要素２（２１２）が保持されている。
【００８６】
続いて、スクリプト解釈部１１５を介してテストスクリプトｓｃ８、「ｋｅｙ  右キー」が実行される。実行後、カーソル取得部１２１ｂからの情報に基づいて、現在カーソルを持つ画面要素が画面要素３（２１３）であることが特定される。「カーソルを持つ画面要素」と比較し、画面要素２（２１２）から画面要素３（２１３）に変化しているのでカーソルが移動したと判断する。「移動元」は未設定であるので、「移動元」に前回の画面要素２（２１２）を登録する。
【００８７】
続いて、スクリプト解釈部１１５を介してテストスクリプトｓｃ９、「ｋｅｙ  決定キー」が実行される。実行後、カーソル取得部１２１ｂからの情報に基づいて、現在カーソルを持つ画面要素が画面要素３（２１３）であることが特定される。「カーソルを持つ画面要素」と比較し、カーソルが移動していないと判断される。「移動元」は、画面要素２（２１２）であるので、カーソル移動サブスクリプト１０２１と同様にして、カーソル移動サブスクリプト１０２２が生成される。サブスクリプト名は、「ｓｃｒｉｐｔ＿ｍｏｖｅ＿２」が設定される。ここで、カーソル移動サブスクリプト１０２２として抽出されるのは、「移動元」を登録時から前回までの間に実行されたｓｃ８と判断される。そこで、カーソル移動サブスクリプト１０２１から、カーソル移動サブスクリプト１０２２までのテストスクリプトを非カーソル移動サブスクリプトに設定する。そして、テストスクリプト管理情報１１００のカーソル移動サブスクリプト１０２１（ｓｃｒｉｐｔ＿ｍｏｖｅ＿１）の次の実行順に登録する。ここでは、カーソル移動サブスクリプト１０２１について、サブスクリプト名１１０３には「ｓｃｒｉｐｔ＿ｍａｎｉｐｕｌａｔｅ＿１」、サブスクリプト種別フラグ１１０４には「非カーソル移動」、実行順１１０２には「２」が登録される。移動元１１０５と、移動先１１０６は未設定になる。
【００８８】
以上の処理をテストスクリプト本体１０００の全行について行う。こうして、サブスクリプト群が設定され、テストスクリプト管理情報１１００が生成される。
次に、アプリケーションの仕様が変更され、テストスクリプトを修正する場合について説明する。なお、ここでの仕様変更は、画面要素の内容が大きく変わり、テスト内容自体が変わるような大幅な仕様変更ではなく、テスト内容自体は同様で画面要素の配置等が変更されたり、ごく一部の画面要素が追加あるいは削除されたりする変更を言う。
【００８９】
テストスクリプトを修正する試験担当者は、仕様変更前と仕様変更後の画面を比較し、画面要素の対応をとる。図４の仕様変更前画面２１０と、仕様変更後画面２２０とを比較し、画面要素の対応付けを行う場合で説明する。
【００９０】
例えば、「診断」ボタンを表す仕様変更前画面２１０の画面要素１（２１１）は、仕様変更後画面２２０の画面要素７（２２７）に対応する。同様に、相手の生年月日を入力するテキストボックスを構成する仕様変更前画面２１０の画面要素２（２１２）、画面要素３（２１３）、画面要素４（２１４）は、仕様変更後画面２２０では、それぞれ画面要素４（２２４）、画面要素５（２２５）、画面要素６（２２６）に対応する。自分の生年月日を入力するテキストボックスを構成する仕様変更前画面２１０の画面要素５（２１５）、画面要素６（２１６）、画面要素７（２１７）は、仕様変更後画面２２０では、それぞれ画面要素１（２２１）、画面要素２（２２２）、画面要素３（２２３）に対応する。そして、「戻る」ボタンを表す仕様変更前画面２１０の画面要素８（２１８）は、仕様変更後画面２２０の画面要素８（２２８）に対応する。
【００９１】
これらの対応付けは、試験担当者が行う。そして、対応をとるべき画面要素の対応関係が設定されると、画面要素関連付け情報が生成され、管理情報記憶部１１１に格納される。
【００９２】
図１０は、画面要素関連付け情報の一例を示した図である。
画面要素関連付け情報１２００は、仕様変更前画面要素１２０１と、仕様変更後画面要素１２０２と、が設定される。仕様変更前画面要素１２０１には、仕様変更前画面２１０の画面要素が設定される。仕様変更後画面要素１２０２には、各画面要素に対応する仕様変更後画面２２０の画面要素が設定されている。
【００９３】
このような画面要素関連付け情報１２００が設定された後、試験担当者は、テスト装置１００に対して修正対象のテストスクリプト名を指定し、テストスクリプト修正指示を行う。なお、エミュレータ部１２０には、仕様変更後画面２２０を表示する仕様変更後のテスト対象アプリケーションをロードしておく。
【００９４】
テストスクリプト修正部１１３は、修正対象のテストスクリプト名に基づいて、管理情報記憶部１１１からテストスクリプト管理情報１１００を読み出す。
そして、テストスクリプト管理情報１１００の実行順１１０２に従って、各サブスクリプトの情報を読み出す。サブスクリプト種別フラグ１１０４を確認し、非カーソル移動サブスクリプトであれば、スクリプト解釈部１１５を介してこのサブスクリプトを実行させる。カーソル移動サブスクリプトであれば、以下の修正処理を行う。上述のように、ここでの仕様変更は、テスト内容自体を変えるものではないので、テスト内容に関連する非カーソル移動サブスクリプトは変更する必要がない。しかし、画面要素の配置等が変更されると、カーソル移動サブスクリプトは修正しなければならない。
【００９５】
カーソル移動サブスクリプトの修正処理について説明する。
まず、テストスクリプト管理情報１１００の移動元１１０５から読み出した移動元画面要素と、移動先１１０６から読み出した移動先画面要素を、画面要素関連付け情報１２００に基づいて修正する。例えば、実行順７のサブスクリプト「ｓｃｒｉｐｔ＿ｍｏｖｅ＿４」の移動元画面要素は、「画面要素４」であるので、対応する仕様変更後画面要素の「画面要素６」に修正する。同様に、移動先画面要素の「画面要素５」は、仕様変更後画面要素の「画面要素１」に修正する。
【００９６】
続いて、仕様変更後画面要素に修正された移動元画面要素（上記の例では、画面要素６）から、移動先画面要素（上記の例では画面要素１）へのカーソル移動手順を探索する。
探索は、操作制御部１１４が行う。操作制御部１１４は、移動元画面要素を始点、移動先画面要素を目標点として指示されると、探索処理を開始する。
【００９７】
まず、カーソル取得部１２１ｂからカーソルの位置情報を取得し、現在カーソルを持つ画面要素を特定する。これを移動元画面要素と照合し、一致していないときは、移動元画面要素を特定された画面要素に修正する。多くの場合、カーソルを持つ画面要素は、画面要素関連付け情報１２００によって修正した移動元画面要素と同じになる。しかし、例えば、初期状態の画面では、画面要素１がカーソルを持つと設定されていたとする。仕様変更前画面２１０では、実行順１１０２が「１」のサブスクリプト名１１０３「ｓｃｒｉｐｔ＿ｍｏｖｅ＿１」は、移動元１１０５が「画面要素１」（２１１）、移動先１１０６が「画面要素２」（２１２）に設定されている。画面要素関連付け情報１２００を用いた修正では、移動元は、画面要素２１１に対応する仕様変更後画面２２０は「画面要素７」に修正される。しかし、実際には、仕様変更後画面２２０の「画面要素１」になる。また、画面要素の一部が削除または追加され、テストスクリプトの一部が変更されたような場合も、一致しないことが考えられる。このように、サブスクリプトを実行順に実行させ、カーソル移動サブスクリプト実行前にカーソルを持つ画面要素を確認することで、修正ミスを防ぐことができる。
【００９８】
上記のサブスクリプト「ｓｃｒｉｐｔ＿ｍｏｖｅ＿４」の移動元画面要素（画面要素６）は、前段のカーソル移動サブスクリプトによりカーソルは画面要素６に移動されているので、一致する。従って、移動元画面要素は、画面要素６のままとする。
【００９９】
移動元画面要素が決定された後、修正された移動先画面要素を目標点として、移動元から移動先へのカーソル移動手順が探索される。
探索では、現在カーソルを持つ画面要素を探索地点としてキー操作実行部１１６に対し、１つのキー操作で可能な移動が指示される。例えば、探索地点から上下左右の４方向についての移動が可能であるとする。順に、上キー操作をキー操作実行部１１６に指示し、対象アプリケーション１２１にカーソルを移動させる。そして、移動実行後にカーソル取得部１２１ｂの位置情報に基づいて、どこへ移動したのか、すなわちカーソルを持つ画面要素が特定される。これを探索着点とする。特定された探索着点と、行ったキー操作とは、操作履歴として探索地点に関連付けられ、キー操作及びカーソル移動先情報に設定される。探索地点を上記の画面要素６とすると、画面要素６に関連付けられ、キー操作「上キー」と、移動先「画面要素３」というように設定される。続いて、カーソル移動部１２１ｃに指示して、探索地点を元に戻し、下キー操作をキー操作実行部１１６に指示し、対象アプリケーション１２１にカーソルを移動させる。同様に、画面要素６に関連付けられ、キー操作「下キー」と、移動先「画面要素８」というように設定される。以下、順次、実施可能な操作キーの操作がエミュレートされる。
【０１００】
図１１は、キー操作及びカーソル移動先情報の一例を示した図である。
キー操作及びカーソル移動先情報１３００は、各画面要素について、該当画面要素にカーソルがある状態で、どの入力デバイス（キー）操作を実施したのか、また、実施したときはどの画面要素にカーソルが移動したかが設定される。図１１は、探索地点を画面要素６としたときの情報を示している。
【０１０１】
キー操作１３０１には、探索地点から行ったキー操作が設定される。キ−操作は、対象の組み込み機器が１つの操作でカーソルを移動させることができる種類の数だけ、設定される。上下左右の他に「右斜め上」等のキーがあれば探索対象となる。
【０１０２】
キー操作実施フラグ１３０２には、そのキー操作を行ったかどうかを示すフラグ情報である。実施または未実施がフラグ情報で設定される。
カーソル移動先１３０３には、そのキー操作を行ったとき、カーソルが移動した移動先の画面要素が設定される。移動先の画面要素は、カーソル取得部１２１ｂが取得したカーソルの位置情報に基づいて特定される。移動しなかったときは、自身の画面要素が設定される。
【０１０３】
探索フラグ１３０４には、カーソル移動先となった画面要素を探索地点としてさらに探索が行われたかどうかを示す。「探索済み」は、探索が行われたこと、すなわち、探索着点となったことがあることを示す。また、その先へ移動しないことが検出されたときも、「探索済み」となる。「未探索」は、まだ探索されていないことを示す。これにより、キー操作手順の探索が無限ループとなることを防止する。なお、「キー操作Ａが探索済み」とは、操作制御部１１４の出力であるカーソル移動手順にＡを含める試みが実施されたことを示す。
【０１０４】
ここで、キー操作及びカーソル移動先情報１３００に、目標点の移動先画面要素の「画面要素１」があるかどうかをチェックする。あれば、実行されたキー操作がカーソル移動手順になる。ないときは、カーソル移動先１３０３に設定される自身を除く画面要素を探索地点として、同様の処理が行われる。
【０１０５】
図１２は、連続する探索処理で生成されるキー操作及びカーソル移動先情報を示した図である。（Ａ）は、画面要素３を探索地点、（Ｂ）は画面要素２を探索地点とするキー操作及びカーソル移動先情報である。
【０１０６】
（Ａ）のキー操作及びカーソル移動先情報（画面要素３）１３００ａは、キー操作及びカーソル移動先情報１３００のカーソル移動先の１つである画面要素３を探索地点としたカーソル移動先情報である。処理は画面要素６の場合と同様であるので、説明は省略する。こうして設定されたカーソル移動先１３０３ａに、目標点の移動先画面要素の「画面要素１」があるかどうかをチェックする。あれば、実行されたキー操作がカーソル移動手順になる。ないときは、カーソル移動先１３０３に設定される自身を除く画面要素を探索地点として、同様の処理が行われる。ここでは、目標点の移動先画面要素はないので、画面要素２を探索地点として探索を続ける。なお、画面要素６は、これまでに通過してきた画面要素であるので、探索地点に指定しない。
【０１０７】
こうして、画面要素２を探索地点として生成されたのが、（Ｂ）のキー操作及びカーソル移動先情報（画面要素２）１３００ｂである。処理は画面要素６の場合と同様であるので、説明は省略する。こうして設定されたカーソル移動先１３０３ｂに、目標点の移動先画面要素の「画面要素１」があるかどうかをチェックする。ここでカーソル移動先に「画面要素１」が検出されるので、カーソル移動手順の探索は終了する。
【０１０８】
探索処理では、起点の移動元画面要素から１操作で移動可能なカーソル移動先を探索し、探索されたカーソル移動先を探索地点として再び探索を行うという処理を、カーソル移動先に目標点の移動先画面要素が検出されるまで続ける。そこで、探索地点を新たに設定するときは、探索地点に移動したキー操作と、移動元の探索地点とを、探索手順記録情報に記録する。
【０１０９】
図１３は、探索手順記録情報の一例を示した図である。
探索手順記録情報１４００は、操作制御部１１４が実施する画面要素間のカーソル移動手順探索時に、探索を試みているキー操作の内容と、実施順を保持する。
【０１１０】
実施順序１４０１には、探索においてキー操作を実施した順番が設定される。
移動元１４０２には、探索前に探索地点に設定された画面要素が設定される。
キー操作１４０３には、実施されたキー操作が設定される。キー操作は、キー操作の識別子でも、キー操作自身が記述されてもよい。
【０１１１】
移動先１４０４には、移動元１４０２に設定される探索地点から、キー操作１４０３に設定されるキー操作を行ったときにカーソルが移動した画面要素が設定される。
探索手順記録情報１４００の各行は、目標点の移動先画面要素に到達したとき、または、次の探索が可能な操作が検出されたとき、すなわち、探索地点が新たに設定されたときに登録される。
【０１１２】
例えば、実施順序１（１４００−１）は、画面要素６を始点として行われた探索結果に基づいて設定される。探索結果である図１１のキー操作及びカーソル移動先情報（画面要素６）１３００に基づいて、次の探索地点に画面要素３が設定されたときに登録が行われる。キー操作１４０３には、画面要素３に移動したときのキー操作である「上キー」が登録される。また、移動元１４０２には画面要素６、移動先１４０４には画面要素３が登録される。
【０１１３】
実施順序２（１４００−２）は、続いて画面要素３を探索地点として行われた探索結果に基づいて設定される。探索結果である図１２のキー操作及びカーソル移動先情報（画面要素３）１３００ａに基づいて、次の探索地点に画面要素２が設定されたときに登録が行われる。キー操作１４０３には、画面要素２に移動したときのキー操作である「左キー」が登録される。また、移動元１４０２には画面要素３、移動先１４０４には画面要素２が登録される。
【０１１４】
実施順序３（１４００−３）は、続いて画面要素２を探索地点として行われた探索結果に基づいて設定される。探索結果である図１２のキー操作及びカーソル移動先情報（画面要素２）１３００ｂに基づいて、目標点である画面要素１に到達したときに登録が行われる。キー操作１４０３には、画面要素１に移動したときのキー操作である「左キー」が登録される。また、移動元１４０２には画面要素２、移動先１４０４には画面要素１が登録される。
【０１１５】
図１３は、移動先に目標点の画面要素１が検出され、カーソル移動手順探索が終了した時点の状態を示している。このときまでに記録された探索手順記録情報１４００の実施順序１４０１の順にキー操作１４０３の操作を行うことがカーソル移動手順である。
【０１１６】
すなわち、始点の画面要素６から「上キー」操作によって画面要素３へ、画面要素３から「左キー」操作によって画面要素２へ、そして、画面要素２から「左キー」操作によって目標点の画面要素１へ、という手順がカーソル移動手順になる。
【０１１７】
なお、探索していたカーソル移動手順が途中で目標点の画面要素に到達できないと判定されたときは、キー操作及びカーソル移動先情報１３００に基づいて手順を戻り、探索地点の条件を満たし、かつ未探索の画面要素を検索し、新たな探索地点とする。新たな探索地点が検出されなかったときは、「カーソル移動手順なし」として、ユーザに通知する。
【０１１８】
また、上記では、始点から目標点のカーソル移動手順が１つ探索されるまでの探索処理について説明したが、場合によってはさらに他のカーソル移動手順が探索されてもよい。この場合、キー操作及びカーソル移動先情報１３００の探索フラグ１３０４が「未探索」のものを探索地点としてカーソル移動手順を探索することができる。
【０１１９】
以上のように、テスト装置１００では、移動元の画面要素を起点としてキー操作を実行し、カーソルの移動先を探索することによって、始点の画面要素から目標点の画面要素へのカーソル移動手順を検出することができる。また、アプリケーションの仕様が再度変更されて、テストスクリプトの修正が必要になった場合も、同様の探索を行うことによって、カーソル移動手順を検出できる。この際、ユーザは、網羅的にカーソル移動の手順を記したテーブルを用意する必要はない。また、考え得るカーソル移動手順を実行し録画を手作業で行うといった煩雑な作業も必要ない。この結果、テストスクリプト修正に要する作業を大幅に削減することができる。
【０１２０】
なお、カーソル移動手順探索処理では、さらに、カーソル移動手順の探索中に、この画面上の画面要素がカーソルを一度でも持ったかを確認する。
図１４は、移動可能画面要素情報を示した図である。
【０１２１】
移動可能画面要素情報１５００は、画面要素１５０１と、カーソル移動フラグ１５０２とを有する。
画面要素１５０１には、カーソル移動手順を探索した該当画面の画面要素が設定される。カーソル移動フラグ１５０２には、画面要素間のカーソル移動手順探索時に、画面要素が一度でもカーソルを持ったことがあるかどうかを示す。「移動」は、この画面要素がカーソルを一度でも持ったこと、すなわち、カーソル移動手順探索中にこの画面要素が探索されたことを表す。「未移動」は、探索中に一度もカーソルが到達しなかったことを表す。これらの情報は、テスト作成時に参照され、一度探索された画面要素が繰り返し探索されてしまうことを防止する。
【０１２２】
こうして、操作制御部１１４によってカーソル移動手順が検出され、テストスクリプト修正部１１３に通知される。テストスクリプト修正部１１３は、通知されたカーソル移動手順に基づいてテストスクリプトを修正する。
【０１２３】
例えば、サブスクリプト「ｓｃｒｉｐｔ＿ｍｏｖｅ＿４」１０２４、すなわち、仕様変更後の画面要素６から画面要素１へカーソルを移動する手順は、図１３に示したように、探索手順記録情報１４００から「上キー」、「左キー」、「左キー」に修正される。同様にして、各サブスクリプトを修正する。
【０１２４】
図１５は、修正後のサブスクリプトを示した図である。
修正対象となったのは、カーソル移動サブスクリプト１０２１ａ、１０２２ａ、１０２３ａ、１０２４ａ、１０２５ａ、１０２６ａ及び１０２７ａである。非カーソル移動サブスクリプトは、修正されない。
【０１２５】
この例では、「ｓｃｒｐｔ＿ｍｏｖｅ＿４」１０２４ａと、「ｓｃｒｉｐｔ＿ｍｏｖｅ＿７」１０２７ａの２つのサブスクリプトが修正されている。
こうして修正されたサブスクリプトをテストスクリプト本体１０００の該当部分と置き換えれば、テストスクリプト本体１０００も修正される。
【０１２６】
以下、テスト装置１００のテスト支援方法の処理手順について、フローチャートを用いて説明する。
図１６は、テストスクリプトを修正するテスト支援方法の処理手順を示したフローチャートである。
【０１２７】
［ステップＳ０１］  仕様変更前のアプリケーションについて、テストスクリプト管理情報を生成する。このため、仕様修正前のアプリケーションを用いて、修正前のテストスクリプトを実行し、サブスクリプトへの分割処理と、このサブスクリプトの種別フラグ、移動元、移動先等の情報を導出し、テストスクリプト管理情報に設定する。処理の詳細は後述する。
【０１２８】
［ステップＳ０２］  アプリケーションに仕様変更があり、テストスクリプトの修正が必要であるかどうかを判断する。例えば、アプリケーションの仕様変更を行った試験実施者の指示があったかどうかを判断する。テストスクリプトの修正を行うときは、処理をステップＳ０３に進める。テストスクリプトの修正を行わないときは、修正指示を待つ。
【０１２９】
［ステップＳ０３］  テストスクリプトの修正を行うときは、変更前のアプリケーションに基づく画面要素と、変更後のアプリケーションに基づく画面要素と、の関連付けを行う。画面要素の関連付け処理により、画面要素関連付け情報が生成される。処理の詳細は後述する。
【０１３０】
［ステップＳ０４］  画面要素の関連付け情報と、変更後のアプリケーションを用いて、修正前のテストスクリプトを変更後のアプリケーションに適合するように修正する。このテストスクリプト修正処理により、変更後のアプリケーションに適合したテストスクリプトが得られる。処理の詳細は後述する。処理終了後、ステップＳ０２に戻って、次のテストスクリプト修正の指示を待つ。
【０１３１】
以上の処理手順が実行されることにより、アプリケーションに変更があったときは、変更前のアプリケーションに対応するテストスクリプトを変更後のアプリケーションに適合するように修正される。なお、テストスクリプト管理情報生成処理（Ｓ０１）は、最初の１回のみ行えばよい。テストスクリプト修正処理（Ｓ０４）により、テストスクリプト管理情報は、変更後のアプリケーションに関する情報が設定される。次の修正処理は、このアプリケーションの変更時になるので、再度テストスクリプト管理情報を生成する必要はない。
【０１３２】
次に、テストスクリプト管理情報生成処理（Ｓ０１）の詳細を説明する。
図１７は、テストスクリプト管理情報生成処理の手順を示したフローチャートである。
テストスクリプト管理情報生成処理実行時にエミュレータ部１２０で動作させるアプリケーション本体１２１ａは、仕様変更前のアプリケーションである。試験実施者の指示で処理が開始される。
【０１３３】
［ステップＳ１１］  テストスクリプト修正部１１３が修正前のテストスクリプトを入力し、管理情報記憶部１１１に記憶する。このとき、テストスクリプトに一意なテストスクリプト名を付与する。また、エミュレータ部１２０を起動し、エミュレータの状態をテストスクリプトの実行開始時に想定している状態にしておく。そして、カーソル取得部１２１ｂに対し、現在のカーソル位置を取得するように、カーソル位置取得指示を送信する。カーソル取得部１２１ｂが取得した現在のカーソルの位置情報に基づき、現在カーソルを持つ画面要素を特定する。特定されたカーソルを持つ画面要素は、直前カーソル情報として記憶しておく。
【０１３４】
［ステップＳ１２］  未実行のテストスクリプトのうち、実行順が最も早いテストスクリプトを１行読み込む。
［ステップＳ１３］  ステップＳ１２で読み込まれた命令を解釈・実行させるため、読み込んだテストスクリプト中の操作命令をスクリプト解釈部１１５へ通知し、実行を指示する。スクリプト解釈部１１５及びキー操作実行部１１６が、テストスクリプト中の操作命令を解釈・実行し、テストスクリプトが１行実行される。
【０１３５】
［ステップＳ１４］  テストスクリプト修正部１１３は、カーソル取得部１２１ｂに対し、ステップＳ１３で操作命令が実行された後の現在のカーソル位置を取得するよう指示する。カーソル取得部１２１ｂが取得した現在のカーソル位置に基づき、現在カーソルを持つ画面要素を特定する。
【０１３６】
［ステップＳ１５］  移動元と推定される画面要素が一時的に保存される移動元情報を読み込み、「移動元」が登録されているか否かを判定する。移動元情報には、最近に読み込んだ操作命令に対する直前の連続するいくつかの操作命令でカーソルが移動している場合に、最も古い命令の実施時にカーソルを持っていた画面要素の識別子が保存される。「移動元」が設定されていたときは、処理をステップＳ１６に進める。「移動元」が設定されていなかったときは、処理をステップＳ１７に進める。
【０１３７】
［ステップＳ１６］  「移動元」が設定されていたときは、カーソル移動が継続しているかどうかを調べる。「移動元」が設定されていれば、少なくとも直前の操作命令はカーソル移動操作である。ステップＳ１４で取得された今回実行した操作命令後のカーソルを持つ画面要素と、直前カーソル情報に保存される直前のカーソルを持つ画面要素とを照合し、カーソルが移動したかどうかを判定する。判定後、直前カーソル情報は、操作命令後に取得されたカーソルを持つ画面要素に更新する。カーソルが移動していないときは、カーソル移動操作命令が終了したと判断し、処理をステップＳ２１に進める。移動しているときは、カーソル移動操作命令が継続していると判断し、処理をステップＳ２０に進める。
【０１３８】
［ステップＳ１７］  「移動元」が設定されていなかったときは、カーソルが移動しているかどうかを調べる。ステップＳ１４で取得された今回実行した操作命令後のカーソルを持つ画面要素と、直前カーソル情報に保存される直前のカーソルを持つ画面要素とを照合し、カーソルが移動したかどうかを判定する。判定後、直前カーソル情報は、操作命令後に取得されたカーソルを持つ画面要素に更新する。カーソルが移動しているときは、カーソル移動操作命令が実行されたと判断し、処理をステップＳ１９に進める。移動していないときは、非カーソル移動操作命令が継続していると判断し、処理をステップＳ１８に進める。
【０１３９】
［ステップＳ１８］  未読のテストスクリプト行があるかどうかを判定する。未読行があったときは、処理をステップＳ１２に進め、テストスクリプトの読み込みからの処理を行う。未読行がないときは、「移動元」がクリアされた時点の操作命令から最後のテストスクリプト行の操作命令までが非カーソル移動操作命令であると判断する。この非カーソル移動命令をまとめ、テストスクリプト管理情報１１００へ反映するため、処理をステップＳ１９へ進める。
【０１４０】
［ステップＳ１９］  「移動元」が設定されておらず、今回実行した操作命令でカーソルが移動しているときは、この命令はカーソル移動操作命令であり、この命令からカーソル移動操作が開始されたと判定できる。そこで、「移動元」に直前にカーソルのあった画面要素を設定する。「移動元」は、カーソル移動操作が継続している間に設定される情報であるので、「移動元」がクリアされた時点の操作命令から、今回実行された操作命令の直前の操作命令までを非カーソル移動サブスクリプトとしてまとめる。そして、サブスクリプト名を付与し、この非カーソル移動サブスクリプトに関する情報をテストスクリプト管理情報１１００に設定する。実行順１１０２には元のテストスクリプトにおける実行順が設定される。サブスクリプト名１１０３には、付与されたサブスクリプト名、サブスクリプト種別フラグ１１０４には、非カーソル移動が設定される。その後、処理をステップＳ２３に進める。
【０１４１】
［ステップＳ２０］  未読のテストスクリプト行があるかどうかを判定する。未読行があったときは、処理をステップＳ１２に進め、テストスクリプトの読み込みからの処理を行う。未読行がないときは、「移動元」がクリアされた時点の操作命令から最後のテストスクリプト行の操作命令までが非カーソル移動操作命令であると判断する。この非カーソル移動命令をまとめ、テストスクリプト管理情報１１００へ反映するため、処理をステップＳ２１へ進める。
【０１４２】
［ステップＳ２１］  「移動元」が設定され、今回実行した操作命令でカーソルが移動していないときは、この命令は非カーソル移動操作命令であり、直前の命令までカーソル移動操作命令であったと判定できる。そこで、「移動元」を最後に設定した際に実行された操作命令から、今回実行された操作命令の直前の操作命令までをカーソル移動サブスクリプトとしてまとめる。そして、サブスクリプト名を付与し、このカーソル移動サブスクリプトに関する情報をテストスクリプト管理情報１１００に設定する。実行順１１０２には元のテストスクリプトにおける実行順が設定される。サブスクリプト名１１０３には、付与されたサブスクリプト名、サブスクリプト種別フラグ１１０４には、カーソル移動が設定される。また、移動元１１０５には、「移動元」に設定されていた画面要素、移動先１１０６には、現在カーソルを持つ画面要素が設定される。
【０１４３】
［ステップＳ２２］  ステップＳ２１までの処理でカーソル移動サブスクリプトが抽出されたので、移動元情報の「移動元」をクリアする。
［ステップＳ２３］  未読のテストスクリプト行があるかどうかを判定する。未読行があったときは、処理をステップＳ１２に進め、テストスクリプトの読み込みからの処理を行う。未読行がないときは、処理を終了する。
【０１４４】
以上の処理手順が実行されることにより、テストスクリプトがカーソル移動サブスクリプトと、非カーソル移動サブスクリプトに分割され、テストスクリプト管理情報１１００が生成される。なお、上記の説明では、呼出元テストスクリプトの生成処理を省いたが、呼出元テストスクリプトは、サブスクリプト設定時各サブスクリプトが生成されるごとに対応行が適宜生成される。または、テストスクリプト管理情報生成処理が終了した時点でまとめて生成されるとしてもよい。
【０１４５】
次に、画面要素の関連付け処理（Ｓ０３）の詳細を説明する。
図１８は、画面要素の関連付け処理の手順を示したフローチャートである。
アプリケーションの仕様変更によって、テストスクリプトの修正が必要となったとき、試験実施者により起動される。
【０１４６】
［ステップＳ３１］  試験実施者によって、画面要素の関連付け指示が入力される。試験実施者によって、仕様変更前のアプリケーションに基づく画面の画面要素と、仕様変更後のアプリケーションに基づく画面の画面要素と、の対応が設定される。具体的には、対応する画面要素の識別子の組が与えられる。全ての画面要素について対応付けが設定されたときは、処理を次ステップに進める。
【０１４７】
［ステップＳ３２］  テストスクリプト修正部１１３は、ステップＳ３１において設定された仕様変更前と仕様変更後の画面要素を対応付けた画面要素関連付け情報１２００を管理情報記憶部１１１に格納し、処理を終了する。
【０１４８】
以上の処理手順が実行されることにより、画面要素関連付け情報１２００が生成される。なお、ステップＳ３１の処理を別装置で行い、テスト支援部１１０では、生成された面要素関連付け情報１２００を受け取るステップＳ３２の処理のみを行うとしてもよい。
【０１４９】
次に、テストスクリプト修正処理（Ｓ０４）の詳細を説明する。
図１９は、テストスクリプト修正処理の手順を示したフローチャートである。
テストスクリプト修正処理実行時にエミュレータ部１２０で動作させるアプリケーション本体１２１ａは、仕様変更後のアプリケーションである。試験実施者の指示で処理が開始される。
【０１５０】
［ステップＳ４１］  修正対象のテストスクリプト名とともに修正指示が入力され、処理が開始される。エミュレータ部１２０を起動し、エミュレータの状態をテストスクリプトの実行開始時に想定している状態にしておく。そして、対応するテストスクリプト管理情報１１００を読み出す。
【０１５１】
［ステップＳ４２］  ステップＳ４１で読み出したテストスクリプト管理情報１１００に記録されている全てのサブスクリプト及びテストスクリプト管理情報１１００の登録の修正が終了したかどうかを判定する。終了していないときは、処理をステップＳ４３に進める。終了しているときは、処理をステップＳ５２に進める。
【０１５２】
［ステップＳ４３］  サブスクリプトの修正が全て終了していないときは、修正が終了していないサブスクリプトで、実行順序的に最も早い順番のサブスクリプトを読み出す。また、読み出されたサブスクリプトに関する情報を、テストスクリプト管理情報１１００から読み出す。
【０１５３】
［ステップＳ４４］  ステップＳ４３で読み出したこのサブスクリプトに関するテストスクリプト管理情報１１００のサブスクリプト種別フラグを確認する。サブスクリプトが、カーソル移動サブスクリプトでなければ、処理をステップＳ４５に進める。カーソル移動サブスクリプトであれば、処理をステップＳ４６に進める。
【０１５４】
［ステップＳ４５］  対象のサブスクリプトがカーソル移動サブスクリプトでないときは、該当サブスクリプトの解釈と実行をスクリプト解釈部１１５に指示する。この非カーソル移動サブスクリプトは、スクリプト解釈部１１５及びキー操作実行部１１６を経由して、エミュレータ部１２０で実行される。サブスクリプトの実行結果が取得されると、処理をステップＳ４２に進め、次のサブスクリプトの有無のチェックからの処理を行う。
【０１５５】
［ステップＳ４６］  対象サブスクリプトが、カーソル移動サブスクリプトであれば、このサブスクリプトに関するテストスクリプト管理情報１１００の移動元１１０５の移動元画面要素と、移動先１１０６の移動先画面要素とを読み出す。そして、画面要素関連付け情報１２００に基づいて、移動元画面要素を仕様変更後のアプリケーションに対応する画面要素の識別子に修正する。同様に、移動先画面要素も、仕様変更後のアプリケーションに対応する画面要素の識別子に修正する。こうして、対象サブスクリプトに関するテストスクリプト管理情報の移動元１１０５及び移動先１１０６の画面要素が修正された識別子に更新される。
【０１５６】
［ステップＳ４７］  現時点のカーソル位置を取得するように、カーソル取得部１２１ｂに指示する。カーソル取得部１２１が検出した現時点のカーソルの位置情報を取得し、取得したカーソルの位置情報に基づき、現在カーソルを持つ画面要素を特定する。
【０１５７】
［ステップＳ４８］  ステップＳ４７で取得した現在カーソルを持つ画面要素と、ステップＳ４６で修正された移動元画面要素とを照合する。一致していないときは、処理をステップＳ４９に進める。一致しているときは、処理をステップＳ５０に進める。
【０１５８】
［ステップＳ４９］  検出された現在カーソルを持つ画面要素と、修正された移動元画面要素とが一致していないときは、移動元画面要素を、現在カーソルを持つ画面要素に修正する。このとき、テストスクリプト管理情報１１００の移動元１１０５の該当する箇所も修正しておく。
【０１５９】
［ステップＳ５０］  修正後の該当サブスクリプトにおける移動元画面要素に相当する現在カーソルを持つ画面要素を始点、移動先画面要素を目標点とし、始点から目標点までのカーソル移動手順を探索するカーソル移動手順探索処理を行う。カーソル移動手順探索処理は、テストスクリプト修正部１１３の指示を受けた操作制御部１１４が行う。処理の詳細は後述する。
【０１６０】
［ステップＳ５１］  ステップＳ５０のカーソル移動手順探索処理で探索されたカーソル移動手順を実行するように、該当サブスクリプトを修正する。なお、カーソル移動手順が探索できなかったときは、その旨の通知がある。このときは、エラーを通知するか、または、手動で手順を設定するように、試験実施者に報知する。該当サブスクリプトの修正後、処理をステップＳ４２に戻し、次のサブスクリプトの処理を行う。
【０１６１】
［ステップＳ５２］  全てのサブスクリプトの修正処理が終了したら、サブスクリプトをテストスクリプト管理情報１１００に記録される実行順に統合して、テストスクリプト本体１０００として管理情報記憶部１１１に保存する。これにより、テストスクリプトの修正が完了する。
【０１６２】
以上の処理手順が実行されることにより、カーソル移動サブスクリプトごとに、移動元画面要素から移動先画面要素へ移動するカーソル移動手順が探索される。探索結果に基づいて、カーソル移動サブスクリプトと、テストスクリプト管理情報１１００が修正され、このサブスクリプトが統合されて修正テストスクリプトが生成される。
【０１６３】
ここで、カーソル移動手順探索処理（Ｓ５０）について詳細に説明する。
図２０は、カーソル移動手順探索処理の手順を示したフローチャートである。
始点となる移動元画面要素と、目標点となる移動先画面要素とが指定されると、処理が開始される。なお、以下の処理では、探索において現在注目している画面要素の識別子を一時的に記憶する領域を「探索地点」として探索情報記憶部１１２に設ける。
【０１６４】
［ステップＳ５０１］  関連するファイルを初期化する。関連するファイルとは、例えば、移動可能画面要素情報１５００、キー操作及びカーソル移動先情報１３００及び探索手順記録情報１４００である。移動可能画面要素情報１５００は、クリアされた後、仕様変更後の画面に存在する全画面要素の識別子が設定される。また、それに対応するカーソル移動フラグの値として「未移動」であることを示す値が設定される。キー操作及びカーソル移動先情報１３００には、対象の画面に存在する画面要素ごとに、実施可能なキー操作が設定される。また、キー操作に対応付けて、キー操作実施フラグ、カーソルの移動先及び探索フラグに未実施または未探索が設定される。探索手順記録情報１４００は、何も記録されていない状態に設定される。
【０１６５】
［ステップＳ５０２］  操作制御部１１４は、カーソル取得部１２１ｂに指示し、現在カーソルを持つ画面要素を取得し、探索手順記録情報１４００の先頭レコードの実施順序１４０１に「１」を、移動元１４０２に取得した画面要素を記録する。該当レコードのキー操作１４０３と移動先１４０４は何も設定しない。そして、取得されたカーソルを持つ画面要素が、目標点の移動先画面要素であるかどうかを確認する。移動先画面要素でなければ、処理をステップＳ５０３に進める。移動先画面要素であれば、処理をステップＳ５１１に進める。
【０１６６】
［ステップＳ５０３］  カーソルを持つ画面要素が移動先画面要素でなければ、探索を開始する起点にカーソル取得部１２１ｂによって検出された現在カーソルを持つ画面要素を設定し、探索地点として登録する。
【０１６７】
［ステップＳ５０４］  キー操作実行部１１６及びカーソル移動部１２１ｃを制御し、探索地点から１キー操作で移動が可能な全ての操作を実施する。そして、その過程で目標点の移動先画面要素にカーソルが移動できたかどうかを判定する。移動ができなかったときは、処理をステップＳ５０５に進める。目標点の移動先画面要素へカーソルの移動ができたときは、処理をステップＳ５１２へ進める。目標点の移動先画面要素への移動操作を探索する探索処理１の詳細は後述する。
【０１６８】
［ステップＳ５０５］  ステップＳ５０４による判定で目標点の移動先画面要素へ移動できないと判定されたときは、１操作で未探索地点へ移動可能な移動操作の有無を判定する。未探索地点とは、これまでカーソルが移動したことがなかった画面要素（未探索地点）を指す。具体的には、探索地点に対応するキー操作及びカーソル移動ｓ機情報１３００の探索フラグ１３０４が「未検索」となるものを探す。未探索地点があれば、処理をステップＳ５０６に進める。未探索地点がなければ、処理をステップＳ５０８に進める。未探索地点の画面要素への移動操作を探索する探索処理２の詳細は後述する。
【０１６９】
［ステップＳ５０６］  １操作で未探索地点へ移動可能であれば、探索状態、すなわち、現在の探索地点と、探索手順記録情報１４００とを復元可能なように保存する。
［ステップＳ５０７］  探索手順記録情報１４００等、関連する探索情報を更新するとともに、次に移動可能な画面要素を検索するための準備を行う。その後処理をステップＳ５０３に戻し、次に移動可能な画面要素を探索の処理を行う。ステップＳ５０７で行う探索関連情報更新処理の詳細は後述する。
【０１７０】
［ステップＳ５０８］  到達したのが、未探索地点でなければ、探索地点の画面要素と、処理開始時の始点である移動元画面要素とが一致するかどうかを判定する。すなわち、現在のカーソルの位置が開始時点の位置であるかどうかを判定する。開始時点でなければ、処理をステップＳ５０９に進める。開始時点の位置であれば、処理をステップＳ５１０に進める。
【０１７１】
［ステップＳ５０９］  到達したのが、未探索地点ではないが、開始時点の画面要素でもないときは、探索状態を復帰させる。すなわち、探索手順記録情報１４００の最後のレコードを削除し、その直前のレコードのキー操作と移動先を空にする。そして、新たに、最後のレコードとなった移動元の画面要素を、現在カーソルを持つ画面要素とし、処理をステップＳ５０３に戻し、次に移動可能な画面要素を探索する処理を行う。探索復帰処理の詳細は後述する。
【０１７２】
［ステップＳ５１０］  到達したのが、未探索地点ではないが、開始時点の画面要素であるときは、到達手順なしとして、処理を終了する。
［ステップＳ５１１］  カーソル移動手順探索処理が開始されたとき、カーソルを持つ画面要素が移動先画面要素であったときは、既に目標点の移動先画面要素に到達しているので、カーソル移動手順を探索する必要はない。そこで、空の手順（カーソル移動手順無）を出力し、処理を終了する。
【０１７３】
［ステップＳ５１２］  移動した画面要素が、目標点の画面要素であったので、処理開始時に指定された目標点の移動元画面要素から移動先画面要素への移動を実際に達成された。そこで、探索手順記録情報１４００に基づき、カーソル移動手順を出力する。具体的には、目標点に到達した時点の探索手順記録情報１４００の最後のレコードのキー操作１４０３に今実施したキー操作を設定し、さらに移動先１４０４の目標点の画面要素である現在カーソルを持つ画面要素を設定する。続いて、今述べた処理を実施した結果得られた探索手順記録情報１４００のキー操作１４０３を取り出す。そして、実施順序１４０１の昇順に整列させたものを、移動元から移動先へのカーソル移動手順として出力する。図１３の探索手順記録情報１４００であれば、実施順序１の「上キー」、実施順序２の「左キー」、実施順序３の「左キー」が、画面要素６から画面要素１へのカーソル移動手順として出力される。カーソル移動手順出力後、処理を終了する。
【０１７４】
次に、探索処理１の手順を説明する。探索処理１は、図２０に示したカーソル移動手順探索処理において目標点の移動先画面要素に到達したかを判定（Ｓ５０４）するための処理を行う。
【０１７５】
図２１は、探索処理１の手順を示したフローチャートである。探索処理１は、１操作で目標点の移動先画面要素に到達するキー操作があるかどうかを探索する処理である。
探索地点に現在カーソルを持つ画面要素が設定され、処理が開始される。
【０１７６】
［ステップＳ５４０１］  実施すべき全キー操作を終了したかどうかを判定する。具体的には、この探索地点の画面要素に対応するキー操作及びカーソル移動先情報１３００を読み出し、キー操作実施フラグ１３０２の値が実施済みであるかどうかを判定する。未実施があれば、処理をステップＳ５４０２に進める。未実施がなければ、処理をステップＳ５４１１に進める。
【０１７７】
［ステップＳ５４０２］  未実施のキー操作が検出されたきは、検出された未実施のキー操作を１つ選んで実行する。すなわち、キー操作実行部１１６に指示し、選択したキー操作を行わせる。例えば、上キーが選択されたときは、上キーが操作されたときと同じように指令がエミュレータ部１２０に伝達され、テスト対象アプリケーション１２１がカーソルを上方向に動かす。
【０１７８】
［ステップＳ５４０３］  カーソル取得部１２１ｂに指示して移動後のカーソル位置を取得し、カーソルを持つ画面要素を特定し、探索地点の画面要素に対応するキー操作及びカーソル移動先情報１３００に記録する。ステップＳ５４０２で行ったキー操作１３０１に対応する行のキー操作実施フラグ１３０２を「実施」、カーソル移動先１３０３に特定されたカーソルを持つ画面要素の識別子を記録する。
【０１７９】
［ステップＳ５４０４］  現在カーソルを持つ画面要素へ初めて到達したのかどうかを判定する。移動可能画面要素情報１５００中の現在カーソルを持つ画面要素に対応するカーソル移動フラグ１５０２の値が「未移動」であるかどうかを判定する。現在カーソルを持つ画面要素にカーソルを初めて移動させた操作のみを注目するため、探索の冗長性がなくなり、例えば、同じ画面要素間でカーソルを移動させ続けるという事態を防ぐことができる。「未移動」、すなわち、初めて到達したのであれば、処理をステップＳ５４０５に進める。「移動」、すなわち、前に到達したことがあるときは、処理をステップＳ５４０７に進める。
【０１８０】
［ステップＳ５４０５］  現在カーソルを持つ画面要素に初めて到達したのであれば、探索地点に対応するキー操作及びカーソル移動先情報１３００の該当キー操作の探索フラグ１３０４に「未探索」を設定する。探索フラグ１３０４の値が「未探索」のキー操作は、カーソル移動手順の一部となり得る。
【０１８１】
［ステップＳ５４０６］  移動可能画面要素情報１５００の現在カーソルを持つ画面要素に対応するカーソル移動フラグ１５０２を、「移動」にし、処理をステップＳ５４０８に進める。
【０１８２】
［ステップＳ５４０７］  現在カーソルを持つ画面要素に初めて到達したのでなければ、探索地点に対応するキー操作及びカーソル移動先情報１３００の該当キー操作の探索フラグ１３０４に「探索済み」を設定する。探索フラグ１３０４の値が「探索済み」のキー操作は、カーソル移動手順に組み入れられることはなくなる。
【０１８３】
［ステップＳ５４０８］  現在カーソルを持つ画面要素が、目標点の移動先画面要素であるかどうかを判定する。目標点の移動先画面要素でなければ、処理をステップＳ５４０９に進める。目標点の移動先画面要素であれば、処理をステップＳ５４１０に進める。
【０１８４】
［ステップＳ５４０９］  カーソル移動部１２１ｃに指示してカーソルを移動させ、カーソルの位置を現在カーソルを持つ画面要素から探索地点の画面要素に戻す。その後、ステップＳ５４０１に戻って、次の未実施のキー操作の処理を行う。
【０１８５】
［ステップＳ５４１０］  目標点の移動先画面要素に到達したので、判定結果をＹｅｓとして処理を終了する。
［ステップＳ５４１１］  移動先に到達する操作が検出されずに、予めキー操作及びカーソル移動先情報１３００に登録される全キー操作が終了したときは、判定結果はＮｏとして処理を終了する。
【０１８６】
以上の処理手順により、図２０に示したカーソル移動手順探索処理における判定（ステップＳ５０５）を行うための探索が実行される。この探索処理により、探索地点から１キー操作で目標点の移動先画面要素へ移動可能な操作が探索され、探索された操作、または探索できなかった旨の通知が探索結果として出力される。
【０１８７】
次に、探索処理２について説明する。探索処理２は、上記のカーソル移動手順探索処理における判定（ステップＳ５０５）を行うための探索処理である。
図２２は、探索処理２の手順を示したフローチャートである。探索処理２は、１操作で未探索の画面要素に到達するキー操作があるかどうかを探索する処理である。
【０１８８】
探索地点は現在カーソルを持つ画面要素となっている。
［ステップＳ５５０１］  探索地点に対応するキー操作及びカーソル移動先情報１３００の中で、探索フラグ１３０４に「未探索」が設定されるキー操作があるかどうかを判定する。「未探索」があるときは、処理をステップＳ５５０２に進める。ないときは、処理をステップＳ５５０３に進める。
【０１８９】
［ステップＳ５５０２］  「未探索」があり、未探索地点に移動できるので、判定結果をＹｅｓとして処理を終了する。
［ステップＳ５５０３］  「未探索」がなく、未探索地点に移動できないので、判定結果はＮｏとして処理を終了する。
【０１９０】
以上の処理手順により、図２０に示したカーソル移動手順探索処理における判定（ステップＳ５０５）が行われる。この判定処理により、探索地点から１キー操作で未探索の画面要素へ移動可能な操作が存在する、または存在しない旨の通知が判定結果として出力される。未探索の画面要素へカーソルを移動させることができれば、この操作は、目標点の移動先画面要素に到達するカーソル移動手順の一部となる可能性がある。
【０１９１】
次に、探索関連情報更新処理について説明する。探索関連情報更新処理は、図２０に示したカーソル移動手順探索処理において探索地点の画面要素からカーソルの移動が可能な画面要素が検索されたとき行われる（Ｓ５０７）。
【０１９２】
図２３は、探索関連情報更新処理の手順を示したフローチャートである。
［ステップＳ５７０１］  探索地点に対応する画面要素に関するキー操作及びカーソル移動先情報１３００を取得する。
【０１９３】
［ステップＳ５７０２］  取得したキー操作及びカーソル移動先情報１３００の中で、対応するレコードの探索フラグ１３０４が「未探索」であるキー操作を選択し、実行させる。選択されたキー操作をキー操作実行部１１６に指示して実行させる。これにより、カーソルが、探索地点の画面要素から選択された未検索の画面要素に移動する。
【０１９４】
［ステップＳ５７０３］  選択されたキー操作に対応するレコードの探索フラグ１３０４を「探索済み」に更新する。カーソル移動先１３０３については、このキー操作実施後にカーソルを持った画面要素の識別子がステップＳ５０４で設定されている。また、キー操作実施フラグ１３０２についても、ステップＳ５０４で「実施」に設定されている。
【０１９５】
［ステップＳ５７０４］  探索手順記録情報１４００の最後のレコードに今回のカーソル移動に関する情報を登録する。移動元１４０２には、このキー操作実施前にカーソルを持っていた画面要素（探索地点）がすでに設定されている。キー操作１４０３には、実施したキー操作を登録する。さらに、移動先１４０４に、このキー操作実施後にカーソルを持っていた画面要素を設定し、キー操作１４０３及びカーソル移動先１３０３を空としたレコードを追加し、レコードの実施順序１４０１を追加したレコードに割り当てる。追加したレコードの移動元１４０２にはキー操作実施後にカーソルを持っていた画面要素を設定する。
【０１９６】
以上の処理手順が実行されることにより、図２０に示したカーソル移動手順探索処理において、次の探索地点が検出されたとき、キー操作及びカーソル移動先情報１３００及び探索手順記録情報１４００が更新される。
【０１９７】
次に、探索復帰処理について説明する。探索復帰処理は、図２０に示したカーソル移動手順探索処理において直前に探索地点とした画面要素を復帰させる処理である（Ｓ５０９）。カーソル移動手順探索処理において、目標点の移動元画面要素、または未探索の画面要素に移動する操作が検出されなかったときは、操作を一つ前に戻す。そして、直前に探索地点となっていた探索地点を復帰させ、今回の次の探索地点とは異なる移動先を探索させる。
【０１９８】
図２４は、探索復帰処理の手順を示したフローチャートである。
［ステップＳ５９０１］  探索手順記録情報１４００の実施順序１４０１が最後（最も大きい値）となるレコードを削除する。そして、新たに最終となる、すなわち、削除したレコードの直前となるレコードのキー操作１４０３と、移動先１４０４とを削除する。これにより、探索手順記録情報１４００は、未探索地点の画面要素が探索できなかった探索地点へ移動する操作手順が削除される。
【０１９９】
［ステップＳ５９０２］  ステップＳ５９０１で最終となったレコードの移動元１４０２に登録される画面要素を、新たな探索地点として復帰させる。
［ステップＳ５９０３］  カーソル移動部１２１ｃにこの画面要素へのカーソルの移動を指示する。カーソル移動部１２１ｃによって、カーソルが移動され、現在カーソルを持つ画面要素が、ステップＳ５９０２で指定された画面要素に変更される。
【０２００】
以上の処理手順が実行されることにより、図２０に示したカーソル移動手順探索処理において、直前に探索地点であった画面要素が探索地点に復帰される。
なお、今回レコードが削除された画面要素は、キー操作及びカーソル移動先情報１３００の探索フラグ１３０４が「探索済み」となっているため、この画面要素を経由するカーソル移動手順は以降探索されない。
【０２０１】
以上のように、テスト装置１００によれば、テスト対象アプリケーション１２１が画面配置の変更をともなう仕様変更がされたとき、仕様変更前の画面を操作するテストスクリプトを仕様変更後に適合するように修正することができる。
【０２０２】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、テスト支援装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【０２０３】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ（Digital Versatile Disc）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０２０４】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０２０５】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）  対象アプリケーションに対するユーザの操作に基づいて作成されるテストスクリプトを用いて実施されるアプリケーションテストを支援する処理を行うテスト支援プログラムにおいて、
コンピュータを、
前記対象アプリケーションの動作環境を再現する再現装置で表示される表示画面の画面要素を指示するカーソルの位置情報を取得するカーソル取得手段、
始点の画面要素と目標点の画面要素とが指定されると、前記カーソルの移動を前記対象アプリケーションに指示する操作実行手段を制御し、前記始点の画面要素を起点として前記カーソルを移動させるとともに前記カーソル取得手段によって取得される前記カーソルの位置情報に基づいて移動後の前記カーソルが指示する前記画面要素を確認する処理を繰り返し、確認された前記画面要素が前記目標点の画面要素に到達するまでのカーソル移動手順を探索する操作制御手段、
予め前記テストスクリプトのカーソル移動操作と、前記カーソル移動操作の実行前に前記カーソルが指示する移動元画面要素と、前記カーソル移動操作の実行後に前記カーソルが指示する移動先画面要素とを関連付けたテストスクリプト管理情報をテストスクリプト管理情報記憶手段に記憶しておき、前記対象アプリケーションが変更されるときは、前記対象アプリケーションの変更前と変更後の前記画面要素を関連付けた画面要素関連付け情報に基づいて、前記テストスクリプト管理情報記憶手段に格納される変更前の前記テストスクリプト管理情報に設定される前記移動元画面要素及び前記移動先画面要素を変更後の前記画面要素に応じた値に変換し、変換された前記移動元画面要素を前記始点の画面要素、変換された前記移動先画面要素を前記目標点の画面要素として前記操作制御手段に前記カーソル移動手順の探索を指示し、探索された前記カーソル移動手順に基づいて前記テストスクリプトの前記カーソル移動操作を修正し、前記テストスクリプトを変更後の前記対象アプリケーションに適合させる修正処理を行うテストスクリプト修正手段、
として機能させることを特徴とするテスト支援プログラム。
【０２０６】
（付記２）  前記操作制御手段は、前記カーソル取得手段によって特定された前記カーソルが指示する前記画面要素を探索地点として１つの操作で可能な前記カーソルの移動を順次実行させて実行後の前記カーソルが指示する移動先の前記画面要素を探索するとともに、探索された前記移動先の画面要素と前記移動先の画面要素への移動に対応する操作とを操作履歴として記録し、探索された前記移動先の画面要素のうち前記探索地点と異なり、かつこれまでに探索されていない前記画面要素を次の探索地点として、前記移動先の画面要素が前記目標点の画面要素になるまで探索処理を繰り返し、前記目標点の画面要素に到達するまでに通過した前記移動先の画面要素への移動に対応する操作を前記操作履歴より抽出し、前記カーソル移動手順とする、ことを特徴とする付記１記載のテスト支援プログラム。
【０２０７】
（付記３）  前記操作制御手段は、前記操作履歴として、次の探索地点を設定する際に、探索前に前記探索地点を移動元、前記次の探索地点となる探索着点を移動先、前記探索地点から前記探索着点に移動した操作に対応する操作を順に記録し、探索手順記録情報を生成する、ことを特徴とする付記２記載のテスト支援プログラム。
【０２０８】
（付記４）  前記テストスクリプト修正手段は、予め、変更前の前記テストスクリプトのカーソル移動操作を抽出し、前記カーソル移動操作の実行前に前記カーソル取得手段から前記カーソル移動操作の実行前の前記カーソルの位置情報を取得して前記移動元画面要素を特定し、前記カーソル移動操作を前記再現装置に実行させた後、前記カーソル取得手段から前記カーソルの位置情報を取得して前記移動先画面要素を特定し、特定された前記移動元画面要素と前記移動先画面要素とを前記カーソル移動操作に対応付けて前記テストスクリプト管理情報を生成し、前記管理情報記憶手段に格納する、
ことを特徴とする付記１記載のテスト支援プログラム。
【０２０９】
（付記５）  前記操作制御手段は、前記対象アプリケーションによって表示される前記画面要素ごとに、前記画面要素が探索されたかどうかを記憶する移動可能画面要素情報に基づき、既に探索されたことがある前記画面要素は、前記探索地点としない、ことを特徴とする付記１〜４記載のテスト支援プログラム。
【０２１０】
（付記６）  前記テストスクリプト修正手段は、前記ユーザの操作を列記した前記テストスクリプトを解析し、前記カーソル移動操作を含む操作群と、前記カーソル移動操作が含まれない操作群とに分割してサブスクリプトを生成するとともに、前記サブスクリプトを呼び出す呼出元テストスクリプトを生成し、前記テストスクリプトを前記呼出元テストスクリプトと、呼び出しされる前記サブスクリプトとから成る二層構造に構造化して管理する、
ことを特徴とする付記１〜４記載のテスト支援プログラム。
【０２１１】
（付記７）  前記テストスクリプト修正手段は、前記対象アプリケーションが変更されるときは、前記カーソル移動操作を含む前記サブスクリプトのみを修正対象として修正処理を行う、ことを特徴とする付記６記載のテスト支援プログラム。
（付記８）  前記カーソル取得手段は、前記再現装置上で動作することを特徴とする付記１記載のテスト支援プログラム。
【０２１２】
（付記９）  前記画面要素は、前記画面要素が配置される表示画面における前記画面要素の位置関係及び前記画面要素間の包含関係に基づいて前記画面要素を識別する識別子が付与される、ことを特徴とする付記１〜７記載のテスト支援プログラム。
【０２１３】
（付記１０）  対象アプリケーションに対するユーザの操作に基づいて作成されるテストスクリプトを用いて実施されるアプリケーションテストを支援するテスト支援方法において、
前記対象アプリケーションの動作環境を再現する再現装置で表示される表示画面の画面要素を指示するカーソルの位置情報を取得するカーソル取得手段を用いて、前記テストスクリプトのカーソル移動操作と、前記カーソル移動操作の実行前に前記カーソルが指示する移動元画面要素と、前記カーソル移動操作の実行後に前記カーソルが指示する移動先画面要素とを関連付けたテストスクリプト管理情報をテストスクリプト管理情報記憶手段に記憶しておくテストスクリプト管理情報生成手順と、
前記対象アプリケーションが変更されるときは、前記対象アプリケーションの変更前と変更後の前記画面要素を関連付けた画面要素関連付け情報に基づいて、前記テストスクリプト管理情報記憶手段に格納される変更前の前記テストスクリプト管理情報に設定される前記移動元画面要素及び前記移動先画面要素を変更後の前記画面要素に応じた値に変換し、変換された前記移動元画面要素を始点の画面要素、変換された前記移動先画面要素を目標点の画面要素として指定する手順と、
前記始点の画面要素と前記目標点の画面要素とが指定されると、前記始点の画面要素を起点とし、前記カーソルの移動を前記対象アプリケーションに指示する操作手段を制御して前記カーソルを移動させるとともに前記カーソル取得手段によって取得される前記カーソルの位置情報に基づいて移動後の前記カーソルが指示する前記画面要素を確認する処理を繰り返し、確認された前記画面要素が前記目標点の画面要素に到達するまでのカーソル移動手順を探索する操作制御手順と、
前記操作制御手順によって探索された前記カーソル移動手順に基づいて前記テストスクリプトの前記カーソル移動操作を修正し、前記テストスクリプトを変更後の前記対象アプリケーションに適合させる修正処理を行うテストスクリプト修正手順と、
を有することを特徴とするテスト支援方法。
【０２１４】
（付記１１）  対象アプリケーションに対するユーザの操作に基づいて作成されるテストスクリプトを用いて実施されるアプリケーションテストを支援するテスト支援装置において、
前記対象アプリケーションの動作環境を再現する再現装置で表示される表示画面の画面要素を指示するカーソルの位置情報を取得するカーソル取得手段と、
前記テストスクリプトのカーソル移動操作と、前記カーソル移動操作の実行前に前記カーソルが指示する移動元画面要素と、前記カーソル移動操作の実行後に前記カーソルが指示する移動先画面要素とを関連付けたテストスクリプト管理情報を記憶するテストスクリプト管理情報記憶手段と、
始点の画面要素と目標点の画面要素とが指定されると、前記カーソルの移動を前記対象アプリケーションに指示する操作実行手段を制御し、前記始点の画面要素を起点として前記カーソルを移動させるとともに前記カーソル取得手段によって取得される前記カーソルの位置情報に基づいて移動後の前記カーソルが指示する前記画面要素を確認する処理を繰り返し、確認された前記画面要素が前記目標点の画面要素に到達するまでのカーソル移動手順を探索する操作制御手段と、
前記対象アプリケーションが変更されるときは、前記対象アプリケーションの変更前と変更後の前記画面要素を関連付けた画面要素関連付け情報に基づいて、前記テストスクリプト管理情報記憶手段に格納される変更前の前記テストスクリプト管理情報に設定される前記移動元画面要素及び前記移動先画面要素を変更後の前記画面要素に応じた値に変換し、変換された前記移動元画面要素を前記始点の画面要素、変換された前記移動先画面要素を前記目標点の画面要素として前記操作制御手段に前記カーソル移動手順の探索を指示し、探索された前記カーソル移動手順に基づいて前記テストスクリプトの前記カーソル移動操作を修正し、前記テストスクリプトを変更後の前記対象アプリケーションに適合させる修正処理を行うテストスクリプト修正手段と、
を有することを特徴とするテスト支援装置。
【符号の説明】
【０２１５】
１１  管理情報記憶手段
１２  探索情報記憶手段
１３  テストスクリプト修正手段
１４  操作制御手段
１５  スクリプト解釈手段
１６  操作実行手段
１７  カーソル取得手段
１８  カーソル移動手段
２０  組み込み機器エミュレータ
２１  テスト対象アプリケーション
【図１】
2010218231.tif 000003
【図２】
2010218231.tif 000004
【図３】
2010218231.tif 000005
【図４】
2010218231.tif 000006
【図５】
2010218231.tif 000007
【図６】
2010218231.tif 000008
【図７】
2010218231.tif 000009
【図８】
2010218231.tif 000010
【図９】
2010218231.tif 000011
【図１０】
2010218231.tif 000012
【図１１】
2010218231.tif 000013
【図１２】
2010218231.tif 000014
【図１３】
2010218231.tif 000015
【図１４】
2010218231.tif 000016
【図１５】
2010218231.tif 000017
【図１６】
2010218231.tif 000018
【図１７】
2010218231.tif 000019
【図１８】
2010218231.tif 000020
【図１９】
2010218231.tif 000021
【図２０】
2010218231.tif 000022
【図２１】
2010218231.tif 000023
【図２２】
2010218231.tif 000024
【図２３】
2010218231.tif 000025
【図２４】
2010218231.tif 000026