(57)【要約】【課題】テストシナリオを再利用可能にする。【解決手段】実行手段１２は、シナリオＤＢ１１に記憶されるテストシナリオを読み出し、テストシナリオに基づく動作を試験対象の組み込み機器２０に実行させる。表示画面上のフォーカスの移動操作の実行時は、再実行手段１４が、操作結果情報に基づくフォーカスの移動先の部品が目的の部品と一致するか否かを判定する。一致しないと判定されたときは、フォーカスが目的の部品に移動するまで、組み込み機器２０にフォーカスの移動操作を実行させ、移動先の部品を確認する手順を繰り返す。【選択図】図１
2010231594.tif 000002
【特許請求の範囲】
【請求項１】
対象機器の試験手順を記述したテストシナリオに基づいて試験を行う試験プログラムにおいて、
コンピュータを、
表示画面上の部品のフォーカスを目的の部品に移動させる移動操作命令が前記目的の部品の識別情報に対応付けて記述されるテストシナリオを含むテストシナリオ群が記憶されるシナリオ記憶手段から前記テストシナリオを読み出し、前記テストシナリオに基づく動作を前記対象機器に実行させる実行手段、
前記実行手段によって前記フォーカスの移動操作が実行されたときは、前記移動操作実行後にフォーカスされた移動先の部品の識別情報を含む操作結果情報を前記対象機器より取得する操作結果取得手段、
前記操作結果取得手段が取得した前記操作結果情報に含まれる前記移動先の部品の識別情報と、前記テストシナリオに記述される前記目的の部品の識別情報とが一致するか否かを判定し、一致しないと判定されたときは、前記対象機器に前記フォーカスの移動操作を実行させ、前記操作結果取得手段を介して取得される前記操作結果情報に含まれる前記移動先の部品の識別情報と前記目的の部品の識別情報とを照合する手順を繰り返し、前記移動先の部品の識別情報と前記目的の部品の識別情報とを一致させる再実行手段、
として機能させることを特徴とする試験プログラム。
【請求項２】
前記移動操作命令を含む操作命令が対応付けられる前記目的の部品は、メニュー表示操作命令によって前記表示画面に表示されるメニュー画面内に配置されるメニューキーであり、
前記実行手段は、前記メニュー表示操作命令と、目的の操作に対応する前記メニューキー上の文字列とが記述される前記テストシナリオから前記メニュー表示操作命令を読み出したときは、前記対象機器に前記メニュー表示操作命令を行うとともに、前記再実行手段によって目的の操作に対応する前記メニューキーがフォーカスされた後に、前記メニューキーに対応する操作の実行命令を前記対象機器に出力し、
前記再実行手段は、前記操作結果取得手段が前記操作結果情報として取得した前記メニュー表示操作命令が実行されたことを通知する通知情報と、前記メニュー表示操作命令実行後にフォーカスされた前記メニューキーのフォーカスメニュー文字列とを取得し、前記通知情報に基づき、前記メニュー表示操作命令が実行されたことが検出されたときは、前記フォーカスメニュー文字列と、前記テストシナリオに記述される前記目的のメニューキーの文字列と、が一致しているか否かを判定し、一致するまで前記対象機器に前記フォーカスの移動操作を命令する、
ことを特徴とする請求項１記載の試験プログラム。
【請求項３】
前記メニュー画面は、前記テストシナリオに記述される前記メニュー表示操作命令によって最初に表示される第１のメニュー画面から前記目的のメニューキーが表示される前記メニュー画面までが、前記メニュー画面上の所定のメニューキーを操作することによって呼び出される階層構造をとるとき、前記テストシナリオに、前記第１のメニュー画面から前記目的のメニューキーが表示される前記メニュー画面までの呼び出し順に基づいて、次の階層の前記メニュー画面を呼び出す前記メニューキー上の文字列を所定の区切り記号で区切って呼び出し順に記述しておき、
前記実行手段は、前記メニュー画面が呼び出されて切り替わるごとに出力される前記通知情報に基づく前記メニュー画面の深さと、前記テストシナリオの記述に基づく前記メニュー画面の深さとを照合し、表示された前記メニュー画面が前記目的のメニューキーが表示される前記メニュー画面であるかどうかを確認することを特徴とする請求項２記載の試験プログラム。
【請求項４】
前記再実行手段は、前記メニュー画面が切り替わるごとに出力される前記通知情報が取得されたときに最初に検出された前記フォーカスメニュー文字列を先頭メニュー文字列として記憶するとともに、前記メニュー画面が切り替わるまでに取得された前記フォーカスメニュー文字列と、前記先頭メニュー文字列とを比較し、一致したときは、前記メニュー画面において前記目的のメニューキーが検出されないエラーと判断し、処理を中止するとともに、発生したエラーを通知する、
ことを特徴とする請求項２または３記載の試験プログラム。
【請求項５】
対象機器の試験手順を記述したテストシナリオに基づいて試験を行う試験装置において、
表示画面上の部品のフォーカスを目的の部品に移動させる移動操作命令が前記目的の部品の識別情報に対応付けて記述されるテストシナリオを含むテストシナリオ群が記憶されるシナリオ記憶手段と、
前記シナリオ記憶手段から前記テストシナリオを読み出し、前記テストシナリオに基づく動作を前記対象機器に実行させる実行手段と、
前記実行手段によって前記フォーカスの移動操作が実行されたときは、前記移動操作実行後にフォーカスされた移動先の部品の識別情報を含む操作結果情報を前記対象機器より取得する操作結果取得手段と、
前記操作結果取得手段が取得した前記操作結果情報に含まれる前記移動先の部品の識別情報と、前記テストシナリオに記述される前記目的の部品の識別情報とが一致するか否かを判定し、一致しないと判定されたときは、前記対象機器に前記フォーカスの移動操作を実行させ、前記操作結果取得手段を介して取得される前記操作結果情報に含まれる前記移動先の部品の識別情報と前記目的の部品の識別情報とを照合する手順を繰り返し、前記移動先の部品の識別情報と前記目的の部品の識別情報とを一致させる再実行手段と、
を有することを特徴とする試験装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、試験プログラム及び試験装置に関し、特に、対象機器の試験手順を記述したテストシナリオに基づいて試験を行う試験プログラム及び試験装置に関する。
【背景技術】
【０００２】
従来、携帯電話などの組み込み機器に搭載するソフトウェアの開発では、試験時間の短縮や開発費の削減を図るため、試験の自動化が進められていた。
試験を自動的に行う方法としては、試験対象の機器の試験手順を記述したテストシナリオと期待値とを事前に用意し、キー操作などを自動で実行する操作部と、試験対象の状態を抽出する測定部とを備えた試験装置に実行させる技術がある。このような試験装置では、操作部にテストシナリオを実行させ、測定部の観測したテストシナリオ実行結果を期待値と比較し、相違があればエラーとすることで、テストの実行から判定までを自動で実行可能としている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−１９６６７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、従来の試験装置では、テストシナリオの再利用が容易でないという問題点がある。
製品開発においては、搭載される機能の一部が異なる複数の機種が同時期に開発される場合がある。また、バージョンアップなどに伴う僅かな仕様変更が発生する場合もある。例えば、携帯電話では、機能の違いや時期により複数の機種を開発することが一般的である。このような場合には、同じアプリケーションでも、メニューの構成は搭載する機能の有無や仕様変更に応じて異なってしまう。
【０００５】
このように僅かに仕様が異なる機種が複数存在するとき、ある機種について一度作成されたテストシナリオを他の機種に再利用できれば、試験に要する負担を大幅に削減することができる。しかし、従来の試験装置では、仕様が僅かにでも異なると、テストシナリオの記述を修正しなければならず、再利用することは難しかった。
【０００６】
一例を挙げて説明する。機種Ａのメニュー画面は、「登録」と「削除」の操作ボタンが垂直方向に並べて配置されており、メニュー画面が開かれたときには、「登録」がフォーカスされるとする。以下、操作ボタンなど、対象機器に所定の処理を促す操作命令に対応付けられる表示画面上の所定の範囲を総称して、部品と表記する。また、フォーカスとは当該部品の操作が選択され指示可能な状態となっていることをいい、通常、部品あるいは部品上の文字列が強調表示されている。例えば、部品上の文字の色を他の部分と変える、文字列の下にカーソルが設定されるなど、選択されていることが利用者に容易にわかるような表示がされる。この機種Ａのメニュー画面で削除操作のテストを行う場合には、「登録」のフォーカスを下に配置される「削除」に移動させ、「削除」を選択して実行させるという手順が必要になる。このとき、テストシナリオは、「『下キー』を押下し、『決定』を押下する操作を行う。」と記述される。
【０００７】
ここで、次世代の機種Ｂとして、登録機能と削除機能に加え、編集機能を付加する仕様変更を行ったとする。登録機能と削除機能は機種Ａと同じである。機種Ｂのメニュー画面では、「登録」と「削除」との間に「編集」の操作ボタンが追加され、「登録」、「編集」、「削除」と上下方向に並べて配置される。この場合、上記のテストシナリオが実行されると、「下キー」操作で選択されるのは「編集」であり、編集機能が実行されてしまう。削除機能の試験を行うためには、テストシナリオを「下キー」を二度押下するように書き直さなければならなかった。この場合、テストシナリオは、例えば、「『下キー』を押下し、『下キー』を押下し、『決定』を押下する操作を行う。」と書き直される。このようなテストシナリオの修正は、機種ごとに手作業で行わなければならず、試験実施者の負担が大きかった。
【０００８】
このような問題点に鑑み、小規模な仕様の違いであれば、テストシナリオを再利用することが可能な試験プログラム及び試験装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、対象機器の試験手順を記述したテストシナリオに基づいて試験を行う試験プログラムが提供される。試験プログラムは、試験装置に適用され、コンピュータを実行手段、操作結果取得手段及び再実行手段として機能させる。実行手段は、表示画面上の部品のフォーカスを目的の部品に移動させる移動操作命令が目的の部品の識別情報に対応付けて記述されるテストシナリオを含むテストシナリオ群が記憶されるシナリオ記憶手段からテストシナリオを読み出す。そして、読み出したテストシナリオに基づく動作を対象機器に実行させる。操作結果取得手段は、実行手段によってフォーカスの移動操作が実行されたときは、移動操作実行後にフォーカスされた移動先の部品の識別情報を含む操作結果情報を対象機器より取得する。再実行手段は、操作結果取得手段が取得した操作結果情報に含まれる移動先の部品の識別情報と、テストシナリオに記述される目的の部品の識別情報とが一致するか否かを判定する。一致しないと判定されたときは、対象機器にフォーカスの移動操作を実行させ、操作結果取得手段を介して取得される操作結果情報に含まれる移動先の部品の識別情報と目的の部品の識別情報とを照合する手順を繰り返す。そして、移動先の部品の識別情報と目的の部品の識別情報とを一致させる。
【００１０】
このような試験プログラムを実行するコンピュータは、シナリオ記憶手段に記憶されるテストシナリオを読み出し、テストシナリオに基づく動作を対象機器に実行させる。実行される命令がフォーカスの移動操作であれば、フォーカスの移動先の部品の識別情報を操作結果情報から取得し、目的の部品の識別情報と一致するか否かを判定する。そして、一致しないと判定されたときは、対象機器にフォーカスの移動操作を実行させるとともに実行後の移動先の部品の識別情報を目的の部品の識別情報と照合する手順を繰り返し、移動先の部品を目的の部品に一致させる。
【発明の効果】
【００１１】
開示の試験プログラム及び試験装置によれば、テストシナリオに記述されるフォーカスの移動操作が実行されるときは、移動操作後にフォーカスされる移動先の部品を判別し、目的の部品がフォーカスされるまでフォーカスの移動操作が繰り返される。これにより、仕様変更などによって表示画面上の部品の配置が異なったときも、その違いを吸収し、目的の部品をフォーカスできるようになる。この結果、テストシナリオを複数の機種で再利用することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】発明の概要を示した図である。
【図２】テストシステムの構成例を示した図である。
【図３】テスト装置のハードウェア構成を示した図である。
【図４】メニュー画面とテストシナリオの一例を示した図である。
【図５】期待値データの一例を示した図である。
【図６】仕様変更後のメニュー画面を示した図である。
【図７】深さが２のメニュー画面とテストシナリオの一例を示した図である。
【図８】自動テストの処理手順を示したフローチャートである。
【図９】メニュー実行処理の手順を示したフローチャートである。
【図１０】コマンドメニュー文字列が存在しない場合を加味したメッセージ実行処理の手順を示したフローチャートである。
【図１１】テストシナリオのコマンド深さがメニューよりも大きかった場合を加味したメッセージ実行処理の手順を示したフローチャートである。
【図１２】テストシナリオのコマンド深さがメニューよりも小さかった場合を加味したメッセージ実行処理の手順を示したフローチャートである。
【発明を実施するための形態】
【００１３】
以下、実施の形態を図面を参照して説明する。まず、発明の概要について説明し、その後、具体的な内容を説明する。
図１は、発明の概要を示した図である。
【００１４】
試験装置１０は、組み込み機器２０のアプリケーション試験を自動で行う装置である。組み込み機器２０は、試験対象の装置である。なお、試験を実施するための装置であるため、機械的に製品と全く同一である必要はない。試験に関係のない一部の機能が省略されていても、組み込み機器２０そのものをコンピュータ上で仮想的に再現するエミュレータであってもよい。また、試験装置１０と、組み込み機器２０とは、図示しない情報伝達手段によって、情報を交換することができる。例えば、試験装置１０と組み込み機器２０が別装置であれば、通信手段を介して情報が交換される。同一装置内に存在するときは、共通のメモリなどを介して情報交換が行われる。
【００１５】
まず、試験対象の組み込み機器２０について説明する。組み込み機器２０は、アプリケーション処理部２１、入力手段２２、制御手段２３及び結果出力手段２４を有し、試験装置１０から入力される操作命令に応じた処理を実行する。
【００１６】
アプリケーション処理部２１は、制御手段２３に従ってアプリケーションプログラムを実行し、組み込み機器２０の所定のアプリケーション機能を実現する。
入力手段２２は、試験装置１０の実行手段１２及び再実行手段１４から操作命令を取得し、これを制御手段２３が解釈可能な形式に変換し、制御手段２３に送る。
【００１７】
制御手段２３は、組み込み機器２０全体を制御し、入力手段２２から入力された操作命令に応じた処理をアプリケーション処理部２１に実行させる。一部の処理は自身が行う。また、アプリケーション処理部２１によって表示される表示画面上でフォーカスされる部品を管理する管理処理も行う。フォーカスの管理処理では、フォーカスの移動操作命令を実行したとき、実行後にフォーカス対象となった部品を特定し、その識別情報を操作結果情報として結果出力手段２４を介して試験装置１０に通知する。通知は直接、試験装置１０に行うとしてもよい。
【００１８】
結果出力手段２４は、アプリケーション処理部２１や制御手段２３が動作した結果を記述した操作結果情報を試験装置１０に出力する。
次に、上記の組み込み機器２０を試験する試験装置１０について説明する。試験装置１０は、シナリオデータベース（以下、ＤＢとする）１１、実行手段１２、操作結果取得手段１３、再実行手段１４及び深さ出力注入手段１５を有する。
【００１９】
シナリオＤＢ１１には、試験対象の組み込み機器２０で実行される試験手順を記述されるテストシナリオが記憶されるシナリオ記憶手段である。テストシナリオには、組み込み機器２０に試験対象の動作を行わせるための操作命令と、操作命令によって実行された結果と期待値とを照合する判定命令とが記述される。さらに、操作命令には、表示画面上の部品のフォーカスを移動させる移動操作命令と、それ以外の操作命令とがある。移動操作命令は、所定の機能の実行を指示するために表示画面上に用意された部品へフォーカスを移動させる指示を行う。このため、テストシナリオに記述される移動操作命令は、フォーカスの移動先とする目的の部品の識別情報と対応付けられている。
【００２０】
実行手段１２は、シナリオＤＢ１１に格納されるテストシナリオを１行読み込む。そして読み込んだテストシナリオに基づく動作の実行命令を、組み込み機器２０の入力手段２２へ出力する。
【００２１】
操作結果取得手段１３は、組み込み機器２０の結果出力手段２４から出力される操作結果情報を取得する。操作結果情報には、組み込み機器２０がフォーカスの移動操作を実行した後、フォーカスが移動した移動先の部品の識別情報が含まれる。
【００２２】
再実行手段１４は、操作結果取得手段１３が取得した操作結果情報に含まれるフォーカスの移動先の部品の識別情報と、対応するテストシナリオに記述される移動操作命令の目的の部品の識別情報とを照合し、一致するか否かを判定する。一致すると判定されたときは、目的の部品がフォーカスされているので、特に処理は行わない。一致しないと判定されたときは、目的の部品がフォーカスされるように、フォーカスを移動させる。例えば、組み込み機器２０にフォーカスを移動させる方向を指示する方向キーが設けられていれば、方向キーが操作されたときと同様の操作命令を組み込み機器２０に指示する。組み込み機器２０は、この操作命令に応じて指定された方向にフォーカスを移動させる。制御手段２３は、この操作により移動したフォーカス対象の部品を特定し、その識別情報を操作結果情報に設定する。試験装置１０は、操作結果取得手段１３を介して入力される操作結果情報に基づいて、移動先の部品の識別情報を得る。そして、移動先の部品の識別情報と、目的の部品の識別情報とを照合し、一致していないときは、再び移動操作を実行させるという手順を繰り返す。この手順は、移動先の部品が目的の部品に一致するまで繰り返される。
【００２３】
深さ出力注入手段１５は、試験対象の組み込み機器２０のアプリケーション処理部２１の処理を実行させるアプリケーションプログラムを解析し、アプリケーションプログラム中に存在するメニュー表示命令を要求する命令を検出する。そして、検出されたメニュー表示命令に、メニューの深さを通知するメニュー呼び出しログの出力命令を注入する。ここでのメニューは、所定のアプリケーションに関する操作を行うため、このアプリケーション画面上に表示される操作メニューを指す。組み込み機器２０を操作する場合には、操作メニュー画面を開き、メニュー画面上に表示される操作に対応する部品を選択し、部品に対応する処理を起動させる。操作メニュー画面には、選択可能な操作が部品として一覧表示されている。なお、メニュー画面は、階層構造をとる場合がある。例えば、最初に表示されるメニュー画面で選択された操作についてより詳細な設定を行うため、最初のメニュー画面で部品が選択されたとき、この部品の操作に関するメニュー画面がさらに開く。この階層の数をメニューの深さと呼ぶ。メニュー表示命令に注入される出力命令は、アプリケーションプログラムに存在するメニュー表示命令すべてに対して設定される。そして、メニュー表示命令に出力命令が注入されたアプリケーションプログラムが、組み込み機器２０の記憶部に格納される。
【００２４】
このような構成の試験装置１０を用いた組み込み機器２０のアプリケーションテストについて説明する。
組み込み機器２０のアプリケーションテストでは、テストシナリオに沿って、利用者が組み込み機器２０の操作を行ったときと同様の操作命令を組み込み機器２０に出力し、テスト対象の動作を実行させる。操作指示は、メニュー画面を表示し、メニュー画面に表示される操作一覧から方向キーを操作して所望の操作に対応する部品を選択し、決定キーを操作して行う。
【００２５】
組み込み機器２０に搭載するアプリケーションプログラムは、深さ出力注入手段１５によって、メニュー表示命令が呼び出されたときに、メニューの深さを通知するメニュー呼び出しログの出力命令が注入された後、組み込み機器２０に転送される。また、シナリオＤＢ１１には、試験手順を記述したテストシナリオが格納される。このテストシナリオに含まれる移動操作命令には、目的の部品の識別情報が設定されている。
【００２６】
試験装置１０による組み込み機器２０のアプリケーションテストが開始されると、実行手段１２は、シナリオＤＢ１１からテストシナリオを読み出し、テストシナリオに基づく試験手順に沿った操作命令を組み込み機器２０に出力する。試験装置１０からの操作命令は、組み込み機器２０の入力手段２２が受け取り、制御手段２３に転送する。制御手段２３は、アプリケーション処理部２１に実行命令に対応する処理を実行させる。このとき、実行命令がメニュー表示要求であれば、アプリケーション処理部２１は、要求されたメニューを表示させるとともに、そのメニューの深さをメニュー呼び出しログとして、結果出力手段２４を介して試験装置１０に出力する。また、メニュー表示命令を含むフォーカスの移動を伴うフォーカスの移動操作命令であるときは、制御手段２３は命令実行後に移動されたフォーカス対象の部品の識別情報を結果出力手段２４経由で出力する。
【００２７】
試験装置１０は、操作結果取得手段１３が、組み込み機器２０の操作結果情報を取得し、再実行手段１４へ送る。再実行手段１４は、実行手段１２が組み込み機器２０に実行させた操作命令が、メニュー表示命令を含むフォーカスの移動操作命令であったときは、操作結果情報に含まれる移動先の部品の識別情報と、テストシナリオの目的の部品の識別情報とを比較する。一致していれば、現在フォーカスされている部品が目的の部品であると判断し、処理を終了する。一致しないときは、現在フォーカスされている部品が目的の部品でないと判断し、フォーカスを移動させる。フォーカスの移動操作命令を組み込み機器２０に送信するとともに、このフォーカスの移動操作命令実行後の操作結果情報を取得し、フォーカスの移動先の部品の識別情報を確認する。取得された移動先の部品の識別情報が目的の部品の識別情報と一致するまで、この手順を繰り返す。こうして、フォーカスされている部品が目的の部品となった後、再実行手段１４の処理は終了する。
【００２８】
続いて、実行手段１２は、シナリオＤＢ１１から次のテストシナリオを読み出し、上記の手順を繰り返す。
このように試験装置１０によれば、メニュー表示命令を含むフォーカスの移動を伴う移動操作命令が実行されるとき、フォーカスされる部品が監視され、再実行手段１４によって、目的の部品がフォーカスされるまでフォーカスの移動操作命令が繰り返される。こうして目的の部品がフォーカスされ、実行手段１２によって次の試験手順が実行される。
【００２９】
これにより、仕様変更などによって表示画面上の部品の配置がずれたときも、そのずれを吸収し、目的の部品をフォーカスできるようになり、テストシナリオの試験手順を継続させることが可能となる。そして、テストシナリオを複数の機種で再利用することが可能となる。このように、試験装置１０によれば、テストシナリオの作成、管理のための工数を削減することができ、テスト時間を短縮し、開発費を削減することが可能となる。この結果、早期に高品質の製品を提供することが可能となる。
【００３０】
次に、図１に示した試験装置１０を、携帯電話のアプリケーションのテストを行うテストシステムに適用した場合を例にとり、実施の形態について説明する。
図２は、テストシステムの構成例を示した図である。
【００３１】
テストシステムは、テストを実行するテスト装置１００、試験対象の携帯電話装置２００及び携帯電話装置２００の試験時に使用される機能を組み込んだアプリケーションプログラム４１０を生成する開発環境３００を有する。なお、図では、テスト装置１００、携帯電話装置２００、開発環境３００を別装置で構成するとしたが、それぞれの処理機能を同一のコンピュータ上で実現する構成とすることもできる。例えば、コンピュータ上にテスト装置１００の処理機能を実現するテスト部と、携帯電話装置２００の動作を再現するエミュレータ部と、アプリケーションプログラム４１０を生成する開発環境部、を実装する。各装置について説明する。
【００３２】
テスト装置１００は、シナリオＤＢ１１０、シナリオ駆動部１２０、期待値ＤＢ１３０及び測定部１４０を有する。
アプリケーションテストは、携帯電話装置２００に対し、利用者が操作を行った場合と同じように操作命令を入力し、操作に応じて実行された処理の結果が期待値と一致するか否かを判定して行う。シナリオＤＢ１１０には、携帯電話装置２００のアプリケーションテストの試験手順を記述したテストシナリオが記憶される。テストシナリオには、携帯電話装置２００に対する操作を表すコマンドと、コマンドに関連する情報とが記述される。メニュー画面を開いて操作を選択する手順であれば、メニュー画面の表示を指示するコマンドと、メニュー画面から選択される目的の部品の識別情報が設定される。なお、部品の識別情報は、部品上に表示される所定の操作を表す文字列であるとする。例えば、「削除」という文字列が表示される表示画面上の部品が選択されるときは、対応する情報を削除する操作命令が携帯電話装置２００で発生する。
【００３３】
シナリオ駆動部１２０は、実行手段１２、操作結果取得手段１３及び再実行手段１４を有し、シナリオＤＢ１１０のテストシナリオに基づく試験動作を順次実行させる。まず、シナリオＤＢ１１０に格納されるテストシナリオを１行ずつ読み出し、テストシナリオを解釈する。テストシナリオに基づいて、入力部２２０を介して携帯電話装置２００に対し、操作命令を行う。操作命令が、メニュー表示要求を含むフォーカスの移動操作命令のときは、移動操作命令を行った後、メニュー呼び出しログ５０１と、メニューログ５０２とに基づいて移動先の部品を確認する。そして、移動先の部品が目的の部品でないときは、フォーカスの移動操作と、移動先の部品が目的の部品であるか否かの判定とを繰り返し、フォーカスを目的の部品まで移動させる。
【００３４】
測定部１４０は、携帯電話装置２００の出力部２３０の出力情報を監視する。測定の方法としては、例えば、画面に表示される文字やグラフィックスを取得し、期待値ＤＢ１３０に格納される期待値データと比較する。比較結果は、テスト装置１００の表示部に表示される。
【００３５】
携帯電話装置２００は、ＯＳ（Operating System）２１０、入力部２２０及び出力部２３０及びアプリケーション部２４０を有する。
ＯＳ２１０には、一般的なオペレーティングシステムに加え、アプリケーションに汎用的な機能を提供するミドルウェア、フレームワーク、共通ライブラリといったプログラムも含まれており、携帯電話装置２００全体を制御する。特に、メニュー機構部２１１として、メニューが表示されているときに、選択されているメニューのテキスト情報をメニューログ５０２として出力する機能を備えている。メニューログ５０２には、少なくとも、メニュー表示画面でフォーカスされた部品上の文字列が記録される。
【００３６】
入力部２２０は、キーボードやタッチパネル等の利用者が操作をするための機構を言う。さらに、マイク等の音声を検出する装置、有線または無線による通信を介しての入力、ＧＰＳ（Global Positioning System）、加速度センサ等のセンサからの信号入力も含まれる。以下では、主として、利用者が操作指示を行うキーボードからの入力信号を対象として説明する。キーボードには、メニューを表示させるメニューキーと、フォーカスを移動させる方向を示す矢印キーと、フォーカスされた部品に対応する操作を起動させる決定キーとがあるとする。
【００３７】
出力部２３０は、画面出力、ＬＥＤなどの発光出力、音声、振動などの利用者に情報を通知する機構、及び通信による出力を言う。ここでは、主として画面出力を対象として説明する。
【００３８】
アプリケーション部２４０は、開発環境３００が生成したアプリケーションプログラム４１０に基づいて、アプリケーション処理を実行する。アプリケーション部２４０は、電話機能やアドレス帳など、個別の機能を提供する。その際に、開発の効率を向上し、統一感のある機能群を提供するために、ＯＳ２１０が提供する機能を利用してプログラムが作成される。例えば、アドレス帳のアプリケーションでは、メニューキーが押された際に、画面上にメニューを表示する場合、メニューキーハンドラ（プログラム）４１２が生成される。その中でＯＳ２１０のメニュー機構部２１１を呼び出すプログラムとしてメニュー表示命令４１１が作成される。これらのプログラムは、コンピュータを、それぞれメニューキーハンドラ２４２、メニュー表示命令２４１として動作させる。
【００３９】
開発環境３００は、深さ出力注入部３１０を備え、対象のアプリケーションプログラム４００に深さ出力命令を注入し、アプリケーションプログラム４１０を生成する。例えば、メニュー表示命令４０１は、メニュー機構部２１１にメニュー表示を要求する命令である。深さ出力注入部３１０では、その時点でのメニューの深さをメニューログ５０２に出力する深さ出力機能が追加され、メニュー表示命令４１１が生成される。この機能追加は、アプリケーションプログラム４００に含まれるメニュー表示命令４０１すべてに施される。機能追加の方法は、プリプロセッサとしてアプリケーションプログラム４００のソースプログラムを解析し、新しいアプリケーションプログラム４１０のソースコードとして生成することができる。また、アスペクト指向言語を用いてバイナリレベルで注入してもよい。
【００４０】
このようにして、メニュー表示命令４０１、メニューキーハンドラ４０２を含むアプリケーションプログラム４００から、深さ出力機能が追加されたメニュー表示命令４１１、メニューキーハンドラ４１２を含むアプリケーションプログラム４１０が作成される。
【００４１】
ここで、テスト装置１００のハードウェア構成について説明する。図３は、テスト装置のハードウェア構成を示した図である。
テスト装置１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ：Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、及び通信インタフェース１０６が接続されている。
【００４２】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションプログラムが格納される。グラフィック処理装置１０４には、モニタ１０８が接続されており、ＣＰＵ１０１からの命令に従って画像をモニタ１０８の画面に表示させる。入力インタフェース１０５には、キーボード１０９ａやマウス１０９ｂが接続されており、キーボード１０９ａやマウス１０９ｂから送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。通信インタフェース１０６は、図示しないネットワークに接続されており、ネットワークを介して他の装置との間でデータの送受信を行うことができる。
【００４３】
このようなハードウェア構成によって、テスト装置１００の処理機能を実現することができる。なお、図３には、テスト装置のハードウェア構成を示したが、開発環境３００及び携帯電話装置２００のハードウェア構成も同様である。
【００４４】
テストシステムによる携帯電話装置２００のアプリケーションテストを詳細に説明する。アプリケーションテストは、携帯電話装置２００が利用者の操作に応じて仕様通り動作するかどうかをテストする。利用者の手順は、メニューキーを押下し、操作メニューを呼び出し、表示された操作メニュー画面から所望の操作を選択するというものになる。この操作メニュー画面には、メニュー画面を開いたときに所望の操作が表示される場合と、さらにメニュー画面が階層構造を取っている場合がある。階層構造を取っている場合には、メニューキーを押下して表示される第１のメニュー画面に表示されるメニューキーを選択すると、第２のメニュー画面が開かれ、いくつかのメニューキーが表示される。階層構造をとるメニュー表示画面において、どの階層のメニュー画面が表示されているかを、深さというパラメータで表す。メニューキー押下によって表示される画面を深さ１とし、展開されるごとに深さの数値を増加させていく。なお、単階層は、深さ１の場合と同様と見なすことができる。
【００４５】
以下、第１の実施の形態として単階層（深さ１）のメニュー処理について説明し、第２の実施の形態として複階層のメニュー処理について説明する。
第１の実施の形態の単階層（深さ１）のメニュー画面のアプリケーションテストについて説明する。
【００４６】
アプリケーションテストは、以下のサイクルで実施される。
（１）ソースコードの作成、編集、コンパイル、ビルド、深さ出力機能の注入、携帯電話装置への展開
（２）テストシナリオ及び期待値の作成または再利用
（３）自動テストの実行
以下、各処理手順について順に説明する。
【００４７】
まず、（１）ソースコードの作成から携帯電話装置への展開までの処理を説明する。
アプリケーションプログラム４１０は、パーソナルコンピュータなどの開発環境３００で作成される。最初に、メニュー表示命令４０１及びメニューキーハンドラ（プログラムｂ）４０２を含む元のアプリケーションプログラム４００が用意される。開発環境３００では、開発環境３００の中に用意されたエディタ、コンパイラ、リンカを用いて、アプリケーションプログラム４００から実行形式ファイルを作成する。この際、深さ出力注入部３１０は、アプリケーションプログラム４００に含まれるメニュー表示命令４０１を検出し、現時点でのメニューの深さをメニュー呼び出しログに出力する機能を追加し、アプリケーションプログラム４１０を生成する。この処理は、アプリケーションプログラム４１０の実行形式のファイルが作成されるまでのいずれかの段階で行われる。そして、生成された実行形式のファイルは、携帯電話装置２００に転送される。
【００４８】
次に、（２）テストシナリオ及び期待値の作成または再利用までの処理を説明する。
図４は、メニュー画面とテストシナリオの一例を示した図である。図の例は、メニューの深さが１のメニュー画面を示している。
【００４９】
メニュー画面２０００は、アドレス一覧からアドレス情報を１件削除しようとして開いたメニューであるとする。例えば、アドレス一覧表示画面を表示中に、メニューキーを押下したとき、ポップアップ画面として表示される。メニュー画面２０００には、アドレス一覧に新たにアドレス情報を登録する機能を表す文字列「登録」を含む部品２００１と、アドレス一覧からアドレス情報を削除する操作を表す文字列「削除」を含む部品２００２と、が垂直方向に並べて配置される。以下、それぞれ「登録」２００１、「削除」２００２と表記する。また、フォーカスされた部品は、フォーカスメニュー文字列と表記する。
【００５０】
「登録」２００１がフォーカスされているときに決定キーが操作されると、登録処理のアプリケーションが起動され、入力されていたアドレス情報が登録される。「削除」２００２がフォーカスされているときに決定キーが操作されると、削除処理のアプリケーションが起動され、選択されていたアドレス情報が削除される。
【００５１】
テストシナリオ１０００は、アドレス一覧表示画面からメニュー画面を開き、１行削除することを指示する命令である。「Ｍｅｎｕ  メニューキー“削除”」１００１は、メニューキーを押下してメニュー画面を開き、メニュー画面の中から「削除」２００２を選択するという操作命令である。ここで、「Ｍｅｎｕ」は、メニュー画面の表示を要求するメニュー表示操作コマンドである。「メニューキー“削除”」は、表示されたメニューキーから「削除」を選択することを命令するコマンドである。なお、記号「“」「”」で区切られた文字列は、コマンドに記述された目的の操作命令を表す文字列であり、以下の説明では、コマンドメニュー文字列とする。
【００５２】
「Ａｓｓｅｒｔ  アドレス一覧」１００２は、「Ｍｅｎｕ  メニューキー“削除”」１００１の処理実行後の「アドレス一覧」画面が正しいかどうか、期待値と比較して一致するか否か判定するという判定命令である。
【００５３】
このように、テスト装置１００が用いるテストシナリオは、「下キー操作」といったメニューキーまでの実際のキー操作を示すものではなく、目的のメニューキーのみが記述され、途中のキー操作の手順は記述されない。
【００５４】
このときの期待値データについて説明する。
図５は、期待値データの一例を示した図である。さらに、図５では、測定部１４０が取得する結果も示している。
【００５５】
測定部１４０は、テストシナリオを実行して結果を取得すると、取得された結果２３００と、予め用意されている期待値データ１３００とを照合する。
期待値データ１３００は、予め、試験担当者によって作成され、期待値ＤＢ１３０に格納される。図の期待値データ１３００は、図４に示したテストシナリオ１０００の「Ａｓｓｅｒｔ  アドレス一覧」１００２が実行されるときに参照される。
【００５６】
画面１３０１には、テストシナリオに記述された画面名が登録される。ここでは、テストシナリオ１０００の「Ａｓｓｅｒｔ  アドレス一覧」１００２に対応する画面名「アドレス一覧」が設定されている。さらに、コントロール１３０２には対象の種別が記憶され、内容１３０３には、比較データの項目と、期待値データとが対応付けて記憶される。例えば、テーブルについて、その行数は４になることが期待値データ１３００に記述されている。
【００５７】
結果２３００には、テストシナリオ実行後に測定部１４０が取得した「アドレス一覧」画面の状態が設定されている。その項目は、期待値データ１３００の内容１３０３に対応する。
【００５８】
（３）自動テストの実行処理について説明する。
携帯電話装置２００には、メニュー呼び出しログ５０１の出力処理手順を含むアプリケーションプログラム４１０が格納されている。また、テスト装置１００のシナリオＤＢ１１０にはテストシナリオ１０００、期待値ＤＢ１３０には期待値データ１３００が格納されているとする。
【００５９】
テスト装置１００は、シナリオ駆動部１２０が、シナリオＤＢ１１０からテストシナリオを１行読み出し、これを解釈して携帯電話装置２００に実行命令を出す。「Ｍｅｎｕ  メニューキー“削除”」１００１が読み込まれると、まず、メニューキーを押下する指示を携帯電話装置２００に送信する。携帯電話装置２００では、メニューキー押下の命令は、入力部２２０を介してＯＳ２１０に伝達される。ＯＳ２１０は、アプリケーション部２４０のメニューキーハンドラ２４２を呼び出し、メニューキーハンドラ２４２によってメニュー表示命令２４１が実行される。メニュー表示命令２４１によってメニュー表示処理が実行される前に、メニュー呼び出しログ５０１にメニュー呼び出しメッセージが出力される。メニュー表示命令２４１が処理を実行すると、ＯＳ２１０のメニュー機構部２１１が呼び出され、メニューログ５０２にフォーカスメニュー文字列が出力される。これにより、携帯電話装置２００の表示画面には、図４に示したメニュー画面２０００が表示され、上段の「登録」２００１がフォーカスされる。
【００６０】
テスト装置１００のシナリオ駆動部１２０は、メニュー呼び出しログ５０１と、メニューログ５０２とを取得する。メニューログ５０２に基づき、現在のフォーカスメニュー文字列は、「登録」であることを検出する。このフォーカスメニュー文字列「登録」と、テストシナリオ「Ｍｅｎｕ  メニューキー“削除”」１００１のコマンドメニュー文字列「削除」とを照合する。ここでは一致しないので、フォーカス移動操作命令を携帯電話装置２００に出力する。例えば、下キー操作命令を入力部２２０に出力する。入力部２２０を介して下キー操作命令を受けたＯＳ２１０は、フォーカスを下へ移動する処理を行い、メニュー機構部２１１によってメニューログ５０２に「削除」が出力される。呼び出しログ５０１の利用については後述する。
【００６１】
シナリオ駆動部１２０は、メニューログ５０２のフォーカスメニュー文字列「削除」とテストシナリオ「Ｍｅｎｕ  メニューキー“削除”」１００１のコマンドメニュー文字列「削除」と照合する。ここでは一致するので、決定キーを操作する命令を携帯電話装置２００に出力し、削除処理を実行させる。
【００６２】
携帯電話装置２００は、決定キー操作命令を受け取り、ＯＳ２１０に従ってアプリケーション部２４０が削除処理を実行する。削除処理の詳細は省略する。
こうして、携帯電話装置２００の表示画面には、削除処理が実行されたアドレス一覧が表示される。
【００６３】
続いて、シナリオ駆動部１２０は、テストシナリオ１０００の次行を読み出す。「Ａｓｓｅｒｔ  アドレス一覧」１００２が読み出され、測定部１４０が出力部２３０から結果を取得する。図５に示した結果２３００が得られたとする。「Ａｓｓｅｒｔ  アドレス一覧」１００２に記述される「アドレス一覧」をキーとして期待値ＤＢ１３０を検索し、期待値データ１３００を抽出する。抽出された期待値データ１３００の内容１３０３と、実際に命令が実行されて得られた結果２３００とを照合し、内容が全て一致しているか否かを判定する。一致しているときは、その判定命令におけるテスト結果は、合格と判定される。しかし、１箇所でも期待値と違う箇所が検出されたときは、テストシナリオにおける判定命令の位置や、期待値における不一致箇所を記録する。また、その内容がテスト担当者に通知される。
【００６４】
期待値データ１３００の内容１３０３と、結果２３００とを照合すると、期待値データ１３００のラベル３の名前が「内野」であるのに対し、結果２３００では「海野」となっており、一致しない。そこで、一致しない箇所のそのデータなどをエラー情報として記録し、テスト担当者にエラー通知を行う。
【００６５】
シナリオ駆動部１２０は、シナリオＤＢ１１０から次のテストシナリオを読み出し、同様の手順を実行する。
このように、テスト装置１００は、メニュー表示命令と、目標とするフォーカス文字列と、が定義されるテストシナリオに基づき、該当するメニュー画面に表示される文字列のフォーカスを目標のメニューキーの文字列に移動させる。
【００６６】
なお、上記の説明では、テストシナリオと同じ文字列が検出されなかったときに、下キー操作を行うとしたが、操作可能な方向が適宜選択される。例えば、メニュー画面が横方向にもメニューキーが表示される構成であれば、下キー操作で検出されないときは、他の方向のキー操作が行われる。
【００６７】
ここで、この表示画面の仕様変更が発生したとする。図６は、仕様変更後のメニュー画面を示した図である。深さが１であることは、仕様変更前と同様である。
仕様変更後のメニュー画面２１００は、メニューとして「登録」２１０１、「編集」２１０２、「削除」２１０３が用意される。図４に示した仕様変更前のメニュー画面２０００から、「編集」２１０２が追加になっている。
【００６８】
テストシナリオ１１００は、テストの内容が変わらないため、仕様変更前のテストシナリオ１０００と同じものを再利用することができる。
テスト装置１００の（３）自動テストの実行処理について説明する。メニューキーを押下してメニュー画面２１００が開かれるまでの処理は、仕様変更前と同様であるので、説明は省略する。
【００６９】
仕様変更後のメニュー画面２１００が開かれたとき、携帯電話装置２００から出力されるメニューログ５０２のフォーカスメニュー文字列は、仕様変更前と同様に「登録」である。シナリオ駆動部１２０は、メニューログ５０２から取得した「登録」と、テストシナリオ「Ｍｅｎｕ  メニューキー“削除”」１１０１の「削除」と照合し、一致しないので、フォーカス移動操作を携帯電話装置２００に命令する。下キー操作命令を入力部２２０に出力するとする。入力部２２０を介して下キー操作命令を受けたＯＳ２１０は、フォーカスを下へ移動する処理が行われ、メニュー機構部２１１がメニューログ５０２に「編集」を出力する。
【００７０】
シナリオ駆動部１２０は、メニューログ５０２から取得した「編集」と、テストシナリオ「Ｍｅｎｕ  メニューキー“削除”」１１０１の「削除」と照合し、一致しないので、さらに、フォーカス移動操作を携帯電話装置２００に命令する。下キー操作命令を入力部２２０に出力する。入力部２２０を介して下キー操作命令を受けたＯＳ２１０によって、フォーカスを下へ移動する処理が行われ、メニュー機構部２１１がメニューログ５０２に「削除」を出力する。ここで、メニューログ５０２から取得したフォーカスメニュー文字列がテストシナリオのコマンドメニュー文字列と一致するので、シナリオ駆動部１２０は、決定キーを操作する命令を携帯電話装置２００に出力し、削除処理を実行させる。以降の処理は、仕様変更前と同様であるので、説明は省略する。
【００７１】
このように、テスト装置１００は、仕様変更があっても、フォーカスメニュー文字列と、テストシナリオに記述されたコマンドメニュー文字列とを照合し、コマンドメニュー文字列と一致する文字列をメニュー画面から検出することができる。このため、メニュー画面内の表示順序が変わっても、テストシナリオを修正することなく、自動テストを行うことが可能となる。これにより、テスト対象の機種が変更になってもテストシナリオがそのまま利用できるため、テストに要する項数を削減することができ、端末の開発費削減や早期集荷が可能となる。
【００７２】
次に、第２の実施の形態として、メニューの深さが２の場合について説明する。図７は、深さが２のメニュー画面とテストシナリオの一例を示した図である。
メニュー画面２２００は、メニューキーを押下したときに表示される第１のメニュー画面２２１０と、第１のメニュー画面で「削除」が選択されたときに表示される第２のメニュー画面２２２０とを有する。
【００７３】
第２のメニュー画面２２２０は、「キャンセル」２２２１、「１件」２２２２、「全件」２２２３のメニューキーを有する。「キャンセル」２２２１は、第１のメニュー画面２２１０で選択された「削除」をキャンセルする操作を選択するメニューキーである。「１件」２２２２は、アドレス一覧から選択された１件を削除する操作を選択するメニューキーである。「全件」２２２３は、アドレス一覧に登録されているすべてのアドレス情報を削除する操作を選択するメニューキーである。
【００７４】
テストシナリオ１２１０は、アドレス一覧表示画面から１行削除することを指示する命令である。「Ｍｅｎｕ  メニューキー“削除．  １件”」１２０１は、メニューキーを押下して第１のメニュー画面を開き、第１のメニュー画面の中から「削除」を選択し、第２のメニュー画面から「１件」を選択するという操作命令である。また、「Ａｓｓｅｒｔ  アドレス一覧」１２０２は、「Ｍｅｎｕ  メニューキー“削除．  １件”」１２０１の処理実行後の「アドレス一覧」画面が正しいかどうか、期待値と比較して一致するか否か判定するという判定命令である。
【００７５】
メニュー画面が階層構造をとる場合、メニューから操作を選択するテストシナリオは、選択する文字列を並べて記述する。この例では、階層の区切りを区切り文字「．」で区切って各階層の文字列を複数並べる。最初に記述される文字列が、第１の階層（メニューキー押下で開かれるメニュー画面）で選択される文字列である。区切り文字「．」の以降に順次展開されるメニュー画面（以下、サブメニューとする）で選択される文字列が記述される。例えば、「削除．  １件」であれば、最初に表示されるメニュー画面２２１０でメニューキー「削除」を選択し、次の階層のサブメニュー２２２０でメニューキー「１件」を選択することを表している。１階層目のメニュー画面２２１０が表示されているとき、メニューの深さを１とカウントする。次のサブメニュー２２２０が表示されているとき、メニューの深さを２とカウントする。ここでは、深さ２の場合を示したが、メニューそのものは、いくらでも深くすることができる。また、区切り文字は、「．」に限定されず、システムに応じて任意に設定することができる。
【００７６】
このようにメニュー画面が階層構造を有する場合の（３）自動テストの実行処理について説明する。
メニューキーを押下してメニュー画面２２１０が開かれた以降の処理について説明する。
【００７７】
携帯電話装置２００において、メニュー画面２２１０が開かれたとき、テスト装置１００のシナリオ駆動部１２０は、メニュー呼び出しログ５０１と、メニューログ５０２とを取得する。メニューログ５０２は、現在のフォーカスメニュー文字列は、「登録」であることを示す。メニュー呼び出しログ５０１は、コンピュータによる他のログメッセージと区別するため、メニューの呼び出し日時やＩＤ番号などを付加する。例えば、「２００８／９／２４  １０：３０：４１．７６８  Ｍｅｎｕ  ｃａｌｌｅｄ」というように、メニュー呼び出しがあったことに加え、その日時をミリ秒単位で付与し、他のログと区別できるようにする。シナリオ駆動部１２０は、現在のメニュー画面の階層を示す、「深さ変数」を一時的なデータを記憶する記憶領域に保存する。深さ変数は、最初のメニュー画面が表示されたことを示すメニュー呼び出しログ５０１を取得したとき、「１」が設定される。以降、メニュー呼び出しログ５０１によってメニューの階層が深くなったことが通知されるごとに、１ずつ増加される。
【００７８】
シナリオ駆動部１２０では、メニュー呼び出しログ５０１に基づいて、深さ変数に「１」を設定する。そして、メニューログ５０２に設定されているフォーカスメニュー文字列の「登録」と、テストシナリオ「Ｍｅｎｕ  メニューキー“削除．  １件”」１２０１の「削除」と照合し、一致しないので、フォーカス移動操作を携帯電話装置２００に命令する。なお、深さ変数から、現在のメニュー画面は１階層目であることがわかるので、１階層目の「削除」と照合される。続いて、下キー操作命令を入力部２２０に出力する。入力部２２０を介して下キー操作命令を受けたＯＳ２１０によって、フォーカスを下へ移動する処理が行われ、メニュー機構部２１１がメニューログ５０２に「削除」を出力する。メニューは呼び出されておらず、深さ変数は「１」の状態が継続されているので、テストシナリオ「Ｍｅｎｕ  メニューキー“削除．  １件”」１２０１のコマンドメニュー文字列「削除」と照合する。ここでは、一致する。シナリオ駆動部１２０は、決定キーを操作する命令を携帯電話装置２００に出力する。
【００７９】
携帯電話装置２００は、決定キー操作命令を受け取り、次の階層のサブメニュー２２２０を表示する。このとき、メニュー表示命令２４１によってメニュー呼び出しログ５０１に新たなメニュー呼び出しメッセージが出力される。また、メニューログ５０２には、フォーカスメニュー文字列として「キャンセル」が出力される。
【００８０】
シナリオ駆動部１２０は、メニュー呼び出しログ５０１に基づいて、深さ変数を１増加させ、「２」に設定する。深さ変数に基づいて、テストシナリオ「Ｍｅｎｕ  メニューキー“削除．  １件”」１２０１の２階層目のコマンドメニュー文字列「１件」と、メニューログ５０２のフォーカスメニュー文字列「キャンセル」とを比較する。一致しないので下キー操作命令を携帯電話装置２００に出力し、フォーカスを移動させる。次の操作が実行されると、メニューログ５０２から、フォーカスメニュー文字列「１件」が得られる。これは、テストシナリオの２階層目のコマンドメニュー文字列「１件」と一致するので、決定キー操作を命令し、削除処理を実行させる。
【００８１】
以上のように、メニューの深さが２の場合であっても、試験対象の部品を探索し、対応するメニューキーを検出することができる。
なお、上記の説明は、メニュー画面上にテストシナリオに記述されたコマンドメニュー文字列を有するメニューキーがあるとして処理が行われているが、メニュー画面上に該当メニューキーがない場合も想定される。そこで、メニュー画面で最初にフォーカスメニュー文字列として検出された文字列を記憶しておく。そして、フォーカスの移動操作を行って再度同じ文字列がフォーカスメニュー文字列として検出されたときは、エラーとする。
【００８２】
また、テストシナリオのコマンドの深さ（区切り文字列で記述されるメニューキーの文字列の個数）と、実際のメニューの深さが一致しない場合も想定される。例えば、テストシナリオが「Ｍｅｎｕ  メニューキー“削除．  １件”」となっているが、「削除」選択後にサブメニューが表示されない場合である。このような場合は、メニュー呼び出しログ５０１のメニュー呼び出しメッセージをずっと待ち続けてしまう。これを防止するため、一定時間の待ち時間を設ける。この時間が経過してもサブメニューが表示されないときは、エラーとする。
【００８３】
上記の例とは逆に、実際のメニューの深さが、テストシナリオのコマンドの深さよりも深い場合も想定される。例えば、テストシナリオが「Ｍｅｎｕ  メニューキー“削除”」となっているが、実際には、「削除」選択後にサブメニューが表示される場合である。削除が検出されたので、決定キーを操作するが、削除処理は実行されない。これを防止するため、シナリオ駆動部１２０は、メニュー呼び出しログ５０１を一定時間監視し、区切り文字が設定されていない階層でメニュー呼び出しログ５０１が呼び出されたときは、エラーとする。
【００８４】
なお、上記のそれぞれのエラーは、エラーの内容がわかるように、全て異なるエラーメッセージが出力される。
このように、メニュー命令実行中に発生し得る異常状態を的確に識別し、それぞれ異なるエラーメッセージを出力してテスト実行者に通知を行い、テストを中止させることができる。
【００８５】
次に、テスト装置１００の自動テストの処理手順を、フローチャートを用いて説明する。
図８は、自動テストの処理手順を示したフローチャートである。
【００８６】
あるテストケースについての自動テスト実行が指示され、処理が開始される。
［ステップＳ１１］  処理が開始されると、まず、現在のメニュー画面の階層がいくつであるかを表す「深さ変数」を０に初期化する。「深さ変数」は、記憶手段に一時的に保存される。
【００８７】
［ステップＳ１２］  シナリオＤＢ１１０に格納される対象のテストケースのテストシナリオを１行読み出す。このとき、未実行のテストシナリオのうち、最も実行順が早いテストシナリオが読み出される。
【００８８】
［ステップＳ１３］  ステップＳ１２で読み出したテストシナリオが最後の行であるかどうかを判定する。最後の行には、例えば「終了」や「結果表示」など、テストの終了を指示するコマンドが記述されているとする。最後の行であれば、処理をステップＳ１４に進める。最後の行でないときは、処理をステップＳ１５に進める。
【００８９】
［ステップＳ１４］  ステップＳ１２で読み出した行が最後の行であったので、テスト結果を表示画面に表示し、このテストケースのテストを終了する。
［ステップＳ１５］  ステップＳ１２で読み出した行が最後の行でないときは、読み出したテストシナリオがどのようなコマンドであるかを解釈する。
【００９０】
［ステップＳ１６］  ステップＳ１５においてテストシナリオから解釈されたコマンドが操作命令であるかどうかが判定される。操作命令と判定されたときは、処理をステップＳ１７に進める。操作命令と判定されなかったときは、処理をステップＳ２０に進める。
【００９１】
［ステップＳ１７］  コマンドが移動操作命令と判定されたときは、コマンドが、メニュー表示命令であるかどうかを判定する。ここでは、読み込んだテストシナリオのコマンドが、「Ｍｅｎｕ」であるかどうかを判定する。メニュー表示命令であれば、ステップＳ１８に処理を進め、メニュー処理を実行させる。メニュー表示命令でなければ、処理をステップＳ１９に進め、メニュー処理を実行させない。
【００９２】
［ステップＳ１８］  読み込んだコマンドがメニュー表示命令であるときは、メニュー画面を表示し、メニュー表示画面に表示されるメニューキーを選択する処理を行う。そして、表示されたメニューキーのうち、メニュー表示命令のコマンドメニュー文字列に相当するメニューキーへフォーカスを移動させる。メニュー実行処理の詳細は、後述する。メニュー実行処理により、フォーカスが、所望の操作の実行を指示するメニューキーに設定される。終了後、処理をステップＳ１２に戻し、次のテストシナリオ行の処理を行う。
【００９３】
［ステップＳ１９］  対象の携帯電話装置２００に対し、テストシナリオに記述される処理の実行命令を出力する。終了後、処理をステップＳ１２に戻し、次のテストシナリオ行の処理を行う。
【００９４】
［ステップＳ２０］  コマンドが操作命令と判定されなかったときは、判定命令であるので、測定部１４０で出力情報を取得する。
［ステップＳ２１］  テストシナリオに記述されるテスト項目に対応する期待値データを期待値ＤＢ１３０から取得する。
【００９５】
［ステップＳ２２］  ステップＳ２０で取得した測定結果と、ステップＳ２１で取得した期待値データとを照合する。すべて一致すれば、このテスト項目は合格と判定される。１箇所でも一致しないときは、このテスト項目はエラーと判定される。判定後、処理をステップＳ１２に戻し、テストシナリオの次の行の処理を行う。
【００９６】
上記の処理手順が実行されることにより、テストシナリオに基づいて、操作命令と、判定命令とが順次実行され、携帯電話装置２００の自動テストが実行される。
続いて、メニュー実行処理の詳細を説明する。
【００９７】
図９は、メニュー実行処理の手順を示したフローチャートである。
読み出されたテストシナリオがメニュー表示命令であったとき、実行される。
［ステップＳ１０１］  メニューを呼び出すメニューキーを押下する操作命令を携帯電話装置２００に出力する。携帯電話装置２００では、アプリケーション部２４０のメニュー表示命令２４１が実行されるとき、メニュー呼び出しログ５０１に新たなメニュー呼び出しメッセージが出力される。また、メニュー機構部２１１が、メニューログ５０２として、現時点でフォーカスされているフォーカスメニュー文字列を出力する。
【００９８】
［ステップＳ１０２］  シナリオ駆動部１２０は、メニュー呼び出しログ５０１の出力を監視し、メニュー呼び出しメッセージが新たに出力されたことを検知する。新たなメニュー呼び出しメッセージが検出されたときは、深さ変数に１を加算する。
【００９９】
［ステップＳ１０３］  シナリオ駆動部１２０は、メニューログ５０２からフォーカスメニュー文字列を抽出する。
［ステップＳ１０４］  深さ変数に基づき、テストシナリオから該当するメニュー階層に設定されるコマンドメニュー文字列を取得する。深さ変数が「１」のときは、最初に記述されるコマンドメニュー文字列が読み出される。深さ変数が「２」のときは、区切り文字「．」で区切られた次のコマンドメニュー文字列を読み出す。
【０１００】
［ステップＳ１０５］  ステップＳ１０３で取得されたフォーカスメニュー文字列と、ステップＳ１０４で取得されたコマンドメニュー文字列とを照合する。一致すると判定されたときは、処理をステップＳ１０６に進める。一致しないときは、処理をステップＳ１０９に進める。
【０１０１】
［ステップＳ１０６］  フォーカスメニュー文字列と、コマンドメニュー文字列とが一致したときは、目的のメニュー文字列がフォーカスされているので、決定キーを押下する操作命令を携帯電話装置２００に出力する。
【０１０２】
［ステップＳ１０７］  深さ変数と、コマンド深さ変数とが一致するか否かを判定する。深さ変数は、ステップＳ１０２によって、メニュー呼び出しログ５０１に新たなメニュー呼び出しが記録されるごとにカウントされる値である。コマンド深さ変数は、テストシナリオのコマンドから抽出される深さ変数である。コマンドメニュー文字列は、階層ごとに区切り文字で区切られているので、コマンドメニュー文字列の個数がコマンド深さ変数に対応する。深さ変数と、コマンド深さ変数とが一致するときは、処理をステップＳ１０８に進める。一致しないときは、ステップＳ１０２に戻って、次の階層のメニューが呼び出されるのを待ち、メニュー呼び出しログ５０１の監視からの処理を行う。
【０１０３】
［ステップＳ１０８］  深さ変数とコマンド深さ変数とが一致したときは、深さ変数を０にリセットする。フォーカスメニュー文字列はコマンドメニュー文字列と一致したので、表示されているメニュー画面上のフォーカスメニュー文字列の対応処理を開始するため、処理を終了する。
【０１０４】
［ステップＳ１０９］  フォーカスメニュー文字列と、コマンドメニュー文字列とが一致しないときは、フォーカスを移動させる矢印キーを押下する処理を携帯電話装置２００に出力する。そして、ステップＳ１０３に戻って、フォーカスメニュー文字列の抽出からの処理を行う。
【０１０５】
以上の処理手順が実行されることにより、テストシナリオに記述された目的の操作に対応するコマンドメニュー文字列がフォーカスされるようになる。
図９に示した処理手順は、コマンドメニュー文字列に該当する文字列が必ずメニュー画面に存在することを前提としている。しかし、存在しない場合もあると想定される。そこで、コマンドメニュー文字列がメニュー画面で検出されなかった場合の処理を加えたメニュー実行処理について説明する。
【０１０６】
図１０は、コマンドメニュー文字列が存在しない場合を加味したメッセージ実行処理の手順を示したフローチャートである。
読み出されたテストシナリオがフォーカスの移動操作命令であったとき、実行される。
【０１０７】
［ステップＳ２０１］  メニューを呼び出すメニューキーを押下する操作命令を携帯電話装置２００に出力する。携帯電話装置２００では、アプリケーション部２４０のメニュー表示命令２４１が実行されるとき、メニュー呼び出しログ５０１に新たなメニュー呼び出しメッセージが出力される。また、メニュー機構部２１１が、メニューログ５０２として、現時点でフォーカスされているフォーカスメニュー文字列を出力する。
【０１０８】
［ステップＳ２０２］  シナリオ駆動部１２０は、メニュー呼び出しログ５０１の出力を監視し、メニュー呼び出しメッセージが新たに出力されたことを検知する。新たなメニュー呼び出しメッセージが検出されたときは、深さ変数に１を加算する。
【０１０９】
［ステップＳ２０３］  メニュー呼び出しメッセージが新たに検出されたとき、先頭メニュー文字列をリセットして初期化する。先頭メニュー文字列は、新たなメニュー画面が表示されたとき、そのメニュー画面で最初に検出されたフォーカスメニュー文字列である。一時的な情報として記憶手段に記憶される。
【０１１０】
［ステップＳ２０４］  シナリオ駆動部１２０は、メニューログ５０２からフォーカスメニュー文字列を抽出する。
［ステップＳ２０５］  先頭メニュー文字列に格納されるメニュー画面が開かれたとき、最初に検出されたフォーカスメニュー文字列と、ステップＳ２０４で検出された現時点のフォーカスメニュー文字列とを照合し、一致しているか否かを判定する。一致しているときは、このメニュー画面において、コマンドメニュー文字列の検索が一巡しても該当する文字列が検出されなかったと判断される。そこで、「コマンドメニュー文字列に対応するメニューが存在しない」と判定し、処理をステップＳ２０６に進める。一致しないときは、処理をステップＳ２０７に進める。
【０１１１】
［ステップＳ２０６］  フォーカスメニュー文字列と、先頭メニュー文字列とが一致したときは、テスト結果を失敗にセットし、自動テスト処理を中断し、図８に示した分岐点Ａへ処理を進める。以降の処理では、エラー理由として「コマンドメニュー文字列に対応するメニューが存在しない」旨の通知を出力し、テストシナリオ内でのエラー発生を表示画面などに表示する。
【０１１２】
［ステップＳ２０７］  フォーカスメニュー文字列と、先頭メニュー文字列とが一致しないときは、先頭メニュー文字列が空白であれば、ステップＳ２０４で取得したフォーカスメニュー文字列を先頭メニュー文字列に設定する。
【０１１３】
［ステップＳ２０８］  深さ変数に基づき、テストシナリオから該当するメニュー階層に設定されるコマンドメニュー文字列を取得する。
［ステップＳ２０９］  ステップＳ２０３で取得されたフォーカスメニュー文字列と、ステップＳ２０８で取得されたコマンドメニュー文字列とを照合する。一致すると判定されたときは、処理をステップＳ２１０に進める。一致しないときは、処理をステップＳ２１３に進める。
【０１１４】
［ステップＳ２１０］  フォーカスメニュー文字列と、コマンドメニュー文字列とが一致したときは、目的のメニューキーがフォーカスされているので、決定キーを押下する操作命令を携帯電話装置２００に出力する。
【０１１５】
［ステップＳ２１１］  深さ変数と、コマンド深さ変数とが一致するか否かを判定する。深さ変数と、コマンド深さ変数とが一致するときは、処理をステップＳ２１２に進める。一致しないときは、ステップＳ２０２に戻って、次の階層のメニューが呼び出されるのを待つメニュー呼び出しログ５０１の監視からの処理を行う。
【０１１６】
［ステップＳ２１２］  深さ変数とコマンド深さ変数とが一致したときは、深さ変数を０にリセットする。フォーカスメニュー文字列はコマンドメニュー文字列と一致したので、表示されているメニュー画面上のフォーカスメニュー文字列の対応処理を開始するため、処理を終了する。
【０１１７】
［ステップＳ２１３］  フォーカスメニュー文字列と、コマンドメニュー文字列とが一致しないときは、フォーカスを移動させる矢印キーを押下する処理を携帯電話装置２００に出力する。そして、ステップＳ２０４に戻って、フォーカスメニュー文字列の抽出からの処理を行う。
【０１１８】
以上の処理手順が実行されることにより、図９に示したメニュー実行処理に加え、メニュー画面でメニューキーを一巡してもコマンドメニュー文字列と一致するメニューキーが検索されないとき、エラーがテスト実行者に通知される。これにより、コマンドメニュー文字列が無限に検索されてしまうことを防止することができる。
【０１１９】
また、テストシナリオのコマンドの深さと、実際のメニューの深さが一致しない場合もある。
図１１は、テストシナリオのコマンド深さがメニューよりも大きかった場合を加味したメッセージ実行処理の手順を示したフローチャートである。
【０１２０】
読み出されたテストシナリオがフォーカスの移動操作命令であったとき、実行される。  ［ステップＳ３０１］  メニューを呼び出すメニューキーを押下する操作命令を携帯電話装置２００に出力する。また、タイマを起動し、メニュー呼び出しメッセージが出力されるまでの待ち時間を設定する。携帯電話装置２００では、アプリケーション部２４０のメニュー表示命令２４１が実行されるとき、メニュー呼び出しログ５０１に新たなメニュー呼び出しメッセージが出力される。また、メニュー機構部２１１が、メニューログ５０２として、現時点でフォーカスされているフォーカスメニュー文字列を出力する。
【０１２１】
［ステップＳ３０２］  ステップＳ３０１で設定された待ち時間が経過したかどうかが判定される。待ち時間が経過したときは、処理をステップＳ３０３に進める。待ち時間が経過していないときは、処理をステップＳ３０４に進める。
【０１２２】
［ステップＳ３０３］  待ち時間が経過したときは、次の階層のメニュー画面は表示されないと判断する。テスト結果を失敗にセットし、自動テスト処理を中断し、図８に示した分岐点Ａへ処理を進める。以降の処理では、エラー理由として「メニューが表示されない」旨の通知を出力し、テストシナリオ内でのエラー発生を表示画面などに表示する。
【０１２３】
［ステップＳ３０４］  待ち時間が経過していないときは、シナリオ駆動部１２０は、メニュー呼び出しログ５０１の出力を監視し、メニュー呼び出しメッセージが新たに出力されたことを検知する。新たなメニュー呼び出しメッセージが検出されたときは、深さ変数に１を加算する。
【０１２４】
［ステップＳ３０５］  メニュー呼び出しログ５０１からメニュー呼び出しメッセージが新たに検出されたとき、シナリオ駆動部１２０は、メニューログ５０２からフォーカスメニュー文字列を抽出する。
【０１２５】
［ステップＳ３０６］  深さ変数に基づき、テストシナリオから該当するメニュー階層に設定されるコマンドメニュー文字列を取得する。
［ステップＳ３０７］  ステップＳ３０５で取得されたフォーカスメニュー文字列と、ステップＳ３０６で取得されたコマンドメニュー文字列とを照合する。一致すると判定されたときは、処理をステップＳ３０８に進める。一致しないと判定されたときは、処理をステップＳ３１１に進める。
【０１２６】
［ステップＳ３０８］  フォーカスメニュー文字列と、コマンドメニュー文字列とが一致したときは、目的のメニューキーがフォーカスされているので、決定キーを押下する操作命令を携帯電話装置２００に出力する。
【０１２７】
［ステップＳ３０９］  深さ変数と、コマンド深さ変数とが一致するか否かを判定する。深さ変数と、コマンド深さ変数とが一致するときは、処理をステップＳ３１０に進める。一致しないときは、ステップＳ３０２に戻って、次の階層のメニューが呼び出されるのを待つメニュー呼び出しログ５０１の監視からの処理を行う。
【０１２８】
［ステップＳ３１０］  深さ変数とコマンド深さ変数とが一致したときは、深さ変数を０にリセットする。フォーカスメニュー文字列はコマンドメニュー文字列と一致したので、フォーカスされているメニューキーの対応処理を開始するため、処理を終了する。
【０１２９】
［ステップＳ３１１］  フォーカスメニュー文字列と、コマンドメニュー文字列とが一致しないときは、フォーカスを移動させる矢印キーを押下する処理を携帯電話装置２００に出力する。そして、ステップＳ３０５に戻って、フォーカスメニュー文字列の抽出からの処理を行う。
【０１３０】
以上の処理手順が実行されることにより、図９に示したメニュー実行処理に加え、テストシナリオのコマンドの深さがメニューの深さよりも大きいとき、エラーがテスト実行者に通知される。これにより、シナリオ駆動部１２０が、次の階層のメニュー画面を待ち続けるという状態を防止することができる。
【０１３１】
逆に、テストシナリオのコマンドの深さがメニューよりも小さい場合もある。
図１２は、テストシナリオのコマンド深さがメニューよりも小さかった場合を加味したメッセージ実行処理の手順を示したフローチャートである。
【０１３２】
読み出されたテストシナリオがフォーカスの移動操作命令であったとき、実行される。
［ステップＳ４０１］  メニューを呼び出すメニューキーを押下する操作命令を携帯電話装置２００に出力する。携帯電話装置２００では、アプリケーション部２４０のメニュー表示命令２４１が実行されるとき、メニュー呼び出しログ５０１に新たなメニュー呼び出しメッセージが出力される。また、メニュー機構部２１１が、メニューログ５０２として、現時点でフォーカスされているフォーカスメニュー文字列を出力する。
【０１３３】
［ステップＳ４０２］  シナリオ駆動部１２０は、メニュー呼び出しログ５０１の出力を監視し、メニュー呼び出しメッセージが新たに出力されたことを検知する。新たなメニュー呼び出しメッセージが検出されたときは、深さ変数に１を加算する。
【０１３４】
［ステップＳ４０３］  シナリオ駆動部１２０は、メニューログ５０２からフォーカスメニュー文字列を抽出する。
［ステップＳ４０４］  深さ変数に基づき、テストシナリオから該当するメニュー階層に設定されるコマンドメニュー文字列を取得する。
【０１３５】
［ステップＳ４０５］  ステップＳ４０３で取得されたフォーカスメニュー文字列と、ステップＳ４０４で取得されたコマンドメニュー文字列とを照合する。一致すると判定されたときは、処理をステップＳ４０６に進める。一致しないときは、処理をステップＳ４１２に進める。
【０１３６】
［ステップＳ４０６］  フォーカスメニュー文字列と、コマンドメニュー文字列とが一致したときは、目的のメニュー文字列がフォーカスされているので、決定キーを押下する操作命令を携帯電話装置２００に出力する。
【０１３７】
［ステップＳ４０７］  深さ変数と、コマンド深さ変数とが一致するか否かを判定する。深さ変数と、コマンド深さ変数とが一致するときは、処理をステップＳ４０８に進める。一致しないときは、ステップＳ４０２に戻って、次の階層のメニューが呼び出されるのを待つメニュー呼び出しログ５０１の監視からの処理を行う。
【０１３８】
［ステップＳ４０８］  深さ変数とコマンド深さ変数とが一致したときは、メニュー呼び出しログ５０１を監視し、新たに呼び出しメッセージが検知されたかどうかを確認する。検知されたときは、処理をステップＳ４０９に進める。検知されないときは、処理をステップＳ４１０に進める。
【０１３９】
［ステップＳ４０９］  深さ変数とコマンド深さ変数とが一致しているのに、さらにメニュー呼び出しメッセージが検知されたときは、コマンドに記述されていない次の階層のメニュー画面があると判断する。テスト結果を失敗にセットし、自動テスト処理を中断し、図８に示した分岐点Ａへ処理を進める。以降の処理では、エラー理由として「メニューの深さがコマンドよりも深い」旨の通知を出力し、テストシナリオ内でのエラー発生を表示画面などに表示する。
【０１４０】
［ステップＳ４１０］  深さ変数とコマンド深さ変数とが一致し、メニュー呼び出しメッセージが検知されないときは、決定キーを押下する操作命令から一定時間が経過したかどうかを判定する。一定時間が経過したときは、処理をステップＳ４１１に進める。一定時間が経過していないときは、処理をステップＳ４０８に戻し、メニュー呼び出しメッセージの監視からの処理を行う。
【０１４１】
［ステップＳ４１１］  一定時間経過しても、新たなメニュー呼び出しメッセージが検知されないので、メニューの深さと、コマンドの深さとは一致していると判断する。そして、深さ変数を０にリセットする。また、フォーカスメニュー文字列はコマンドメニュー文字列と一致したので、表示されているメニュー画面上のフォーカスメニュー文字列の対応処理を開始するため、処理を終了する。
【０１４２】
［ステップＳ４１２］  フォーカスメニュー文字列と、コマンドメニュー文字列とが一致しないときは、フォーカスを移動させる矢印キーを押下する処理を携帯電話装置２００に出力する。そして、ステップＳ４０３に戻って、フォーカスメニュー文字列の抽出からの処理を行う。
【０１４３】
以上の処理手順が実行されることにより、図９に示したメニュー実行処理に加え、テストシナリオのコマンドの深さがメニューの深さよりも小さいとき、エラーがテスト実行者に通知される。これにより、シナリオ駆動部１２０が、次の階層のメニュー画面に進んでいるのに、前の階層のメニュー画面として処理を行う状態を防止することができる。
【０１４４】
上記の説明では、それぞれのエラー検出処理を個別に説明したが、これらを適宜組み合わせてエラー検出を行うとしてもよい。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、試験装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【０１４５】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ（Digital Versatile Disc）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１４６】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１４７】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）  対象機器の試験手順を記述したテストシナリオに基づいて試験を行う試験プログラムにおいて、
コンピュータを、
表示画面上の部品のフォーカスを目的の部品に移動させる移動操作命令が前記目的の部品の識別情報に対応付けて記述されるテストシナリオを含むテストシナリオ群が記憶されるシナリオ記憶手段から前記テストシナリオを読み出し、前記テストシナリオに基づく動作を前記対象機器に実行させる実行手段、
前記実行手段によって前記フォーカスの移動操作が実行されたときは、前記移動操作実行後にフォーカスされた移動先の部品の識別情報を含む操作結果情報を前記対象機器より取得する操作結果取得手段、
前記操作結果取得手段が取得した前記操作結果情報に含まれる前記移動先の部品の識別情報と、前記テストシナリオに記述される前記目的の部品の識別情報とが一致するか否かを判定し、一致しないと判定されたときは、前記対象機器に前記フォーカスの移動操作を実行させ、前記操作結果取得手段を介して取得される前記操作結果情報に含まれる前記移動先の部品の識別情報と前記目的の部品の識別情報とを照合する手順を繰り返し、前記移動先の部品の識別情報と前記目的の部品の識別情報とを一致させる再実行手段、
として機能させることを特徴とする試験プログラム。
【０１４８】
（付記２）  前記実行手段及び前記再実行手段は、前記対象機器に搭載される操作を指示する操作キーの押下に対応する操作命令を前記対象機器に出力する、
ことを特徴とする付記１記載の試験プログラム。
【０１４９】
（付記３）  前記対象機器は、前記対象機器の少なくとも一部の機能をコンピュータ上で実現するエミュレータ上に構築されている、
ことを特徴とする付記１記載の試験プログラム。
【０１５０】
（付記４）  前記移動操作命令を含む操作命令が対応付けられる前記目的の部品は、メニュー表示操作命令によって前記表示画面に表示されるメニュー画面内に配置されるメニューキーであり、
前記実行手段は、前記メニュー表示操作命令と、目的の操作に対応する前記メニューキー上の文字列とが記述される前記テストシナリオから前記メニュー表示操作命令を読み出したときは、前記対象機器に前記メニュー表示操作命令を行うとともに、前記再実行手段によって目的の操作に対応する前記メニューキーがフォーカスされた後に、前記メニューキーに対応する操作の実行命令を前記対象機器に出力し、
前記再実行手段は、前記操作結果取得手段が前記操作結果情報として取得した前記メニュー表示操作命令が実行されたことを通知する通知情報と、前記メニュー表示操作命令実行後にフォーカスされた前記メニューキーのフォーカスメニュー文字列とを取得し、前記通知情報に基づき、前記メニュー表示操作命令が実行されたことが検出されたときは、前記フォーカスメニュー文字列と、前記テストシナリオに記述される前記目的のメニューキーの文字列と、が一致しているか否かを判定し、一致するまで前記対象機器に前記フォーカスの移動操作を命令する、
ことを特徴とする付記１記載の試験プログラム。
【０１５１】
（付記５）  前記コンピュータを、前記対象機器のプログラムを取得して解析し、前記メニュー表示操作命令に応じて前記メニュー画面を表示する前記プログラムにおけるメニュー表示命令を検出し、該メニュー表示命令に前記メニュー画面が呼び出されるごとに前記メニュー画面の呼び出し通知を出力する通知処理を追加するとともに、前記通知処理が追加された前記プログラムを前記対象機器に転送する深さ出力注入手段、
として機能させることを特徴とする付記４記載の試験プログラム。
【０１５２】
（付記６）  前記メニュー画面は、前記テストシナリオに記述される前記メニュー表示操作命令によって最初に表示される第１のメニュー画面から前記目的のメニューキーが表示される前記メニュー画面までが、前記メニュー画面上の所定のメニューキーを操作することによって呼び出される階層構造をとるとき、前記テストシナリオに、前記第１のメニュー画面から前記目的のメニューキーが表示される前記メニュー画面までの呼び出し順に基づいて、次の階層の前記メニュー画面を呼び出す前記メニューキー上の文字列を所定の区切り記号で区切って呼び出し順に記述しておき、
前記実行手段は、前記メニュー画面が呼び出されて切り替わるごとに出力される前記通知情報に基づく前記メニュー画面の深さと、前記テストシナリオの記述に基づく前記メニュー画面の深さとを照合し、表示された前記メニュー画面が前記目的のメニューキーが表示される前記メニュー画面であるかどうかを確認することを特徴とする付記４記載の試験プログラム。
【０１５３】
（付記７）  前記再実行手段は、前記メニュー画面が切り替わるごとに出力される前記通知情報が取得されたときに最初に検出された前記フォーカスメニュー文字列を先頭メニュー文字列として記憶するとともに、前記メニュー画面が切り替わるまでに取得された前記フォーカスメニュー文字列と、前記先頭メニュー文字列とを比較し、一致したときは、前記メニュー画面において前記目的のメニューキーが検出されないエラーと判断し、処理を中止するとともに、発生したエラーを通知する、
ことを特徴とする付記４〜６記載の試験プログラム。
【０１５４】
（付記８）  前記再実行手段は、他の階層の前記メニュー画面が呼び出す前記メニューキーが選択されてから所定の待ち時間を経過しても前記対象機器から前記メニュー画面の呼び出し通知が取得できなかったときは、前記メニュー画面がないエラーと判断し、処理を中止するとともに、発生したエラーを通知する、
ことを特徴とする付記４〜６記載の試験プログラム。
【０１５５】
（付記９）  前記再実行手段は、前記目的のメニューキーが選択されてから一定時間が経過するまで前記メニュー画面の呼び出し通知の出力を監視し、前記メニュー画面の呼び出し通知を取得したときは、前記メニュー画面の深さが前記テストシナリオに記述される前記メニュー画面の深さよりも深いというエラーと判断し、処理を中止するとともに、発生したエラーを通知する、
ことを特徴とする付記４〜６記載の試験プログラム。
【０１５６】
（付記１０）  対象機器の試験手順を記述したテストシナリオに基づいて試験を行う試験装置において、
表示画面上の部品のフォーカスを目的の部品に移動させる移動操作命令が前記目的の部品の識別情報に対応付けて記述されるテストシナリオを含むテストシナリオ群が記憶されるシナリオ記憶手段と、
前記シナリオ記憶手段から前記テストシナリオを読み出し、前記テストシナリオに基づく動作を前記対象機器に実行させる実行手段と、
前記実行手段によって前記フォーカスの移動操作が実行されたときは、前記移動操作実行後にフォーカスされた移動先の部品の識別情報を含む操作結果情報を前記対象機器より取得する操作結果取得手段と、
前記操作結果取得手段が取得した前記操作結果情報に含まれる前記移動先の部品の識別情報と、前記テストシナリオに記述される前記目的の部品の識別情報とが一致するか否かを判定し、一致しないと判定されたときは、前記対象機器に前記フォーカスの移動操作を実行させ、前記操作結果取得手段を介して取得される前記操作結果情報に含まれる前記移動先の部品の識別情報と前記目的の部品の識別情報とを照合する手順を繰り返し、前記移動先の部品の識別情報と前記目的の部品の識別情報とを一致させる再実行手段と、
を有することを特徴とする試験装置。
【符号の説明】
【０１５７】
１０  試験装置
１１  シナリオデータベース（ＤＢ）
１２  実行手段
１３  操作結果取得手段
１４  再実行手段
１５  深さ出力注入手段
２０  組み込み機器
２１  アプリケーション処理部
２２  入力手段
２３  制御手段
２４  結果出力手段
【図１】
2010231594.tif 000003
【図２】
2010231594.tif 000004
【図３】
2010231594.tif 000005
【図４】
2010231594.tif 000006
【図５】
2010231594.tif 000007
【図６】
2010231594.tif 000008
【図７】
2010231594.tif 000009
【図８】
2010231594.tif 000010
【図９】
2010231594.tif 000011
【図１０】
2010231594.tif 000012
【図１１】
2010231594.tif 000013
【図１２】
2010231594.tif 000014