(57)【要約】【課題】表示されているＧＵＩの状態に未操作のＧＵＩ要素が存在しない場合であっても、未操作のＧＵＩ要素が存在する状態へＧＵＩを確実に遷移させる。【解決手段】網羅操作制御部５は、表示されたＧＵＩの状態において未操作のＧＵＩ要素が存在せず且つこれまで取得した他のＧＵＩの状態に未操作のＧＵＩ要素が存在する場合には、予め記憶装置３に記憶した状態遷移グラフ利用フラグの値に基づき状態遷移グラフ探索部８又は実行パス集合探索部９を用いて、表示されたＧＵＩの状態から未操作のＧＵＩ要素が存在するＧＵＩの状態へ到達するパスを抽出し、パスに沿ってＧＵＩ要素を自動操作することでＧＵＩを未操作のＧＵＩ要素が存在する状態に変化させ、変化した状態に対して処理を再帰的に継続する。【選択図】図１２
2014044615.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ上で動作するテスト対象アプリケーションのグラフィカルユーザインタフェース（ＧＵＩ）の状態を網羅的に自動操作する方法であって、
入力された状態遷移グラフ利用フラグ及びテスト対象アプリケーションの起動ファイルとを予め記憶手段に記憶しておく第１のステップと、
起動ファイルを実行することによりテスト対象アプリケーションを起動する第２のステップと、
コンピュータの表示手段に表示されているＧＵＩ状態を取得する第３のステップと、
表示されたＧＵＩの状態がこれまで取得したことのない場合に該ＧＵＩ状態において操作可能なすべてのＧＵＩ要素を取得する第４のステップと、
テスト対象アプリケーションが終了した状態であった場合に、起動ファイルを実行することでテスト対象アプリケーションを再起動し、表示されたＧＵＩの状態に対して再帰的に処理を継続する第５のステップと、
表示されたＧＵＩの状態において未操作のＧＵＩ要素が存在する場合に、該ＧＵＩ要素を自動操作しテスト対象アプリケーションのＧＵＩを状態遷移させ、遷移後の状態に対して処理を再帰的に継続する第６のステップと、
表示されたＧＵＩの状態において未操作のＧＵＩ要素が存在せず且つこれまで取得した他のＧＵＩの状態に未操作のＧＵＩ要素が存在する場合に、表示されたＧＵＩの状態から未操作のＧＵＩ要素が存在するＧＵＩの状態へ到達するパスを抽出し、パスに沿ってＧＵＩ要素を自動操作することでＧＵＩを未操作のＧＵＩ要素が存在する状態に変化させ、変化した状態に対して処理を再帰的に継続する第７のステップと、
取得したすべてのＧＵＩの状態において未操作のＧＵＩ要素が存在しない場合に処理を終了させる第８のステップとを備え、
前記第７のステップでは、状態遷移グラフ利用フラグの値に基づき、これまでに取得したＧＵＩの状態の遷移を表す状態遷移グラフに基づきパスを抽出するか、又は、これまでの処理で実行した状態遷移の列である実行パスの集合からパスを抽出するかを切り替える
ことを特徴とするグラフィカルユーザインタフェースの自動操作方法。
【請求項２】
前記第７のステップにおいては、表示されたＧＵＩがテスト対象アプリケーションを再起動後の初期状態でなく且つ状態遷移グラフ利用フラグがｔｒｕｅである場合は状態遷移グラフからパスを探索し、それ以外の場合は実行パスの集合からパスを探索する
ことを特徴とする請求項１記載のグラフィカルユーザインタフェースの自動操作方法。
【請求項３】
前記第７のステップは、
パスが存在しない場合又はパスに沿ってＧＵＩ要素を自動操作しＧＵＩを未操作のＧＵＩ要素が存在する状態に変化させることができなかった場合、起動ファイルを実行することでテスト対象アプリケーションを再起動し、表示されたＧＵＩの状態に対して再帰的に処理を継続するステップと、
パスが存在し且つパスに沿ってＧＵＩ要素を自動操作しＧＵＩを未操作のＧＵＩ要素が存在する状態に変化させることができた場合、その状態に対して再帰的に処理を継続するステップとを含む
ことを特徴とする請求項１記載のグラフィカルユーザインタフェースの自動操作方法。
【請求項４】
コンピュータ上で動作するテスト対象アプリケーションのグラフィカルユーザインタフェース（ＧＵＩ）の状態を網羅的に自動操作する装置であって、
コンピュータの表示手段に表示されているＧＵＩからＧＵＩの状態を取得するＧＵＩ状態取得手段と、
ＧＵＩ要素を操作してＧＵＩの状態を遷移させるＧＵＩ自動操作手段と、
取得したＧＵＩの状態の遷移を表す状態遷移グラフに基づき第１の状態から第２の状態へのパスを抽出する状態遷移グラフ探索手段と、
これまでの処理で実行した状態遷移の列である実行パスの集合に基づき第１の状態から第２の状態へのパスを抽出する実行パス集合探索手段と、
予め記憶手段に記憶した起動ファイルを実行することによりテスト対象アプリケーションを起動させ、コンピュータの表示手段に表示されているＧＵＩ状態をＧＵＩ状態取得手段により取得し、表示されたＧＵＩの状態がこれまで取得したことのない場合に該ＧＵＩ状態において操作可能なすべてのＧＵＩ要素を取得し、テスト対象アプリケーションが終了した状態であった場合に、起動ファイルを実行することでテスト対象アプリケーションを再起動し、表示されたＧＵＩの状態に対して再帰的に処理を継続し、表示されたＧＵＩの状態において未操作のＧＵＩ要素が存在する場合に、ＧＵＩ自動操作手段により該ＧＵＩ要素を自動操作しテスト対象アプリケーションのＧＵＩを状態遷移させ、遷移後の状態に対して処理を再帰的に継続し、表示されたＧＵＩの状態において未操作のＧＵＩ要素が存在せず且つこれまで取得した他のＧＵＩの状態に未操作のＧＵＩ要素が存在する場合には、予め記憶手段に記憶した状態遷移グラフ利用フラグの値に基づき状態遷移グラフ探索手段又は実行パス集合探索手段を用いて、表示されたＧＵＩの状態から未操作のＧＵＩ要素が存在するＧＵＩの状態へ到達するパスを抽出し、パスに沿ってＧＵＩ要素を自動操作することでＧＵＩを未操作のＧＵＩ要素が存在する状態に変化させ、変化した状態に対して処理を再帰的に継続する網羅操作制御手段とを備えた
ことを特徴とするグラフィカルユーザインタフェースの自動操作装置。
【請求項５】
コンピュータを請求項４記載の各手段として機能させる
ことを特徴とするグラフィカルユーザインタフェースの自動操作プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフィカルユーザインタフェースの動作を表す状態遷移グラフを生成する技術に関する。
【背景技術】
【０００２】
最近のソフトウェアの大部分はグラフィカルユーザインタフェース（以下ＧＵＩ）を備えており、ＧＵＩへの操作によってＧＵＩが期待通りに変化することのテストは、ソフトウェア開発において必須の作業である。ＧＵＩの多くはウインドウシステムを採用しており、ウインドウ内のボタンやテキストボックスなどＧＵＩ要素を操作することでＧＵＩが変化する。これをＧＵＩの状態遷移と呼ぶ。ここでの操作とは具体的には、マウスクリックやキーボード入力などのことである。もし、このような操作による変化後のＧＵＩが期待どおりの状態ではなかった場合、これをＧＵＩのエラーと言う。
【０００３】
ＧＵＩのエラーを発見するためには、ＧＵＩに対するあらゆる操作手順を実行し、操作後のＧＵＩを確認する必要がある。しかし、ＧＵＩは多くのＧＵＩ要素で構成されているため、その操作順番の組合せは膨大な数に及ぶ。よってこの確認を人手で行うと、その作業は膨大な工数を必要とする。
【０００４】
従来技術として、ＧＵＩの要素を自動操作し実際にＧＵＩを遷移させ、さらに遷移したＧＵＩに対して自動操作を再帰的に繰り返す技術が提案されている。このような自動操作の結果、ＧＵＩ要素の操作に対するＧＵＩの遷移を表現する状態遷移グラフを生成することができる。このような状態遷移グラフを使ってＧＵＩのエラーの検出や、ＧＵＩをテストするためのテストケース生成が可能となる。ここでは、それら自動操作の従来技術とその問題点を説明する。
【０００５】
非特許文献１では、初期のＧＵＩとして表示されている複数のウインドウ内のＧＵＩ要素を順次自動的に操作する。ＧＵＩ要素を操作すると新規にウインドウが表示される（あるいはブラウザ等をベースとしたＧＵＩの場合は、別のＧＵＩ要素で構成されるＧＵＩに表示が切り替わる）場合があり、その場合は、新規ウインドウ内のＧＵＩ要素に対して同様の処理を再帰的に繰り返す。例えば図１のように初期のＧＵＩが１つのウインドウで構成され、そのウインドウ内のＧＵＩ要素として２つのラジオボタンと１つのボタンが存在する場合を考える。ボタンを押すとラジオボタンの選択状態に応じて、ＧＵＩが（ａ），（ｂ）あるいは（ｃ）へと切り替わる。このようなＧＵＩに対して非特許文献１の技術を適用すると、以下のような手順で自動操作する。
【０００６】
１．ラジオボタン１を操作（ラジオボタン１が選択状態になる）
２．ラジオボタン２を操作（ラジオボタン２が選択状態になる。ラジオボタン１の選択状態は解除される。）
３．ボタン１を操作（ＧＵＩが（ｃ）に切り替わる。）
４．ＧＵＩ（ｃ）のＧＵＩ要素（キャプションがＹｅｓ，Ｎｏのボタン）を操作。
【０００７】
非特許文献１の問題は、自動操作の過程で出現する各ＧＵＩ要素を１度しか操作しない点である。結果として先ほどの自動操作の手順のように、（ａ）や（ｂ）のＧＵＩへ遷移することができず、生成される状態遷移グラフも（ａ）や（ｂ）への遷移が欠けた不完全なものとなる。
【０００８】
このような非特許文献１の問題に対して、非特許文献２のようにＧＵＩの状態に対して網羅的に自動操作することでより精密なＧＵＩの状態遷移グラフを生成する技術が提案されている。ＧＵＩの状態とは、ＧＵＩとして表示されているＧＵＩ要素の構造を表現した情報である。ＧＵＩ要素はキャプションや活性状態、選択状態等のプロパティとその値の情報を保持している。ＧＵＩを構成する要素の状態は、ＧＵＩ要素名，プロパティ，プロパティの値という組の集合で表現できる。図２に図１の初期のＧＵＩの各要素の状態の例を示す。ＧＵＩは複数のウインドウで構成される。よって各ウインドウの状態とはそれらウインドウを構成するＧＵＩ要素の状態の集合である。そしてＧＵＩの状態は各ウインドウの状態の集合で表現することができる。非特許文献２では、ＧＵＩの状態をＤＯＭ（Document Object Model）で表現しているが本説明の状態表現と表現形式が異なるだけで意味は同じである。
【０００９】
例えば、図１の初期のＧＵＩはラジオボタンの選択に応じて異なる状態として表現することができる。ラジオボタン１とラジオボタン２ともに未選択の場合、ラジオボタン１を選択した場合、ラジオボタン２を選択した場合のＧＵＩの状態を図３に示す。このＧＵＩではウインドウは１つしか存在しないため、それぞれのウインドウの状態をｗ0，ｗ1，ｗ2とすると、各ＧＵＩの状態は｛ｗ0｝，｛ｗ1｝，｛ｗ2｝となる。
【００１０】
非特許文献２では、まずテスト対象のアプリケーションを起動し、初期のＧＵＩを表示させる。初期のＧＵＩからＧＵＩの状態を取得し、操作可能なＧＵＩ要素を自動操作する。この処理によって表示されているＧＵＩの状態が変化するため、変化したＧＵＩの状態に対して同様の処理を再帰的に繰り返す。このようにすることで、例えば、図３の各状態においてボタン１を自動操作すれば、図１のＧＵＩ（ａ）（ｂ）（ｃ）へ遷移することが可能になるため、非特許文献１より精密な状態遷移グラフが構築できる。
【００１１】
このように出現したすべてのＧＵＩの状態に対して網羅的にＧＵＩ要素を自動操作するためには、自動操作の過程で出現したＧＵＩの状態と、そのＧＵＩの状態において操作したＧＵＩ要素を記憶しておく必要がある。記憶しなかった場合、同じＧＵＩの状態が出現したときに、過去に操作したことのあるＧＵＩ要素を繰り返し操作してしまい、無限ループに陥る可能性がある。そこで、非特許文献２では、ＧＵＩの状態の集合Ｓと状態遷移の集合Ｔに対して、出現したＧＵＩの状態や発生した状態遷移をそれぞれの集合に追加し記憶する。
【００１２】
具体的には、現在表示されているＧＵＩの状態を取得し、そのＧＵＩの状態が過去に出現したことがあるか、すなわちＧＵＩ状態の集合Ｓに現在のＧＵＩ状態が含まれるか調べる。もし含まれなければ、そのＧＵＩの状態をＧＵＩ状態の集合Ｓに追加する。さらに現在のＧＵＩ状態において可能な状態遷移を状態遷移の集合Ｔに追加する。状態遷移とは形式的には、操作前の状態，操作するＧＵＩ要素，操作後の状態の組で表現できる。
【００１３】
例えば、図１の初期のＧＵＩに対して、非特許文献２による自動操作を実施した場合を考える。まずディスプレイには初期のＧＵＩが表示されるため、初期ＧＵＩの状態ｓ0＝｛ｗ0｝を取得する。ＧＵＩ状態ｓ0は状態の集合Ｓにまだ登録されていないため、集合ＳにＧＵＩ状態ｓ0を追加する。さらにこのＧＵＩ状態ではラジオボタン１，ラジオボタン２，ボタン１が操作可能であるため、状態遷移として（ｓ0，ラジオボタン１，ＴＢＤ），（ｓ0，ラジオボタン２，ＴＢＤ），（ｓ0，ボタン１，ＴＢＤ）を集合Ｔに追加する（図４）。図４の状態遷移の集合Ｔを示す表の各行が追加した状態遷移に対応する。状態遷移における操作後の状態がＴＢＤであるのは、まだ未操作であるため、操作後の状態が未決定（To Be Determined）であることを意味する。これ以降ではＧＵＩの状態のことを単に状態と呼ぶ。
【００１４】
次に現在の状態ｓ0において未操作である遷移を１つ選択し、そのＧＵＩ要素を自動操作する。例えばここでは、図４の集合Ｔからラジオボタン１を自動操作したとする。その結果、ＧＵＩは図５のように変化する。このＧＵＩの状態をｓ1とすると先ほど選択した状態遷移（ｓ0，ラジオボタン１，ＴＢＤ）を（ｓ0，ラジオボタン１，ｓ1）に置き換える。以降はこれまでの処理を再帰的に現在の状態ｓ1に対して繰り返す。すなわち状態ｓ1が集合Ｓに含まれるか調べ、含まれていないため集合Ｓにｓ1を追加する。さらに状態ｓ1に対して可能な遷移を集合Ｔに追加する。そして、状態ｓ1で可能な遷移を１つ選択し、例えばラジオボタン１を自動操作する。このときの状態の集合Ｓと状態遷移の集合Ｔを図６に示す。
【００１５】
このように初期のＧＵＩから自動操作処理を繰り返したときのＧＵＩの状態遷移を図７に示す。ＧＵＩの状態はｓ0，ｓ1，ｓ1，ｓ2，ｓ1，ｓ3，のように遷移し、状態ｓ3において終了ボタン（ボタン２）を押してアプリケーションが終了するまで継続される。この時点でのＧＵＩ状態の集合Ｓと状態遷移の集合Ｔを図８に示す。アプリケーションが終了してしまった場合、非特許文献２はアプリケーションを再起動し初期のＧＵＩを表示し処理を繰り返す。
【００１６】
非特許文献２はこのような自動操作の結果、状態遷移グラフを生成することができる。状態遷移グラフとは形式的には、ＧＵＩ状態の集合と状態遷移の集合の対＜Ｓ、Ｔ＞で表現する。状態遷移グラフを図形式で表現するとき、Ｓに含まれる状態をノードで表現し、状態遷移はノード間の有向エッジとして表現する。すなわち、Ｔに含まれる遷移において操作前の状態と対応するノードから操作後の状態と対応するノードへエッジを引く。さらにエッジには遷移のＧＵＩ要素をラベルとして記述する。図８のＧＵＩの状態集合Ｓと状態遷移Ｔの状態遷移グラフの図形式を図９に示す。図中のエッジで先がノードを示していないもの、例えばノードｓ0のラジオボタン２やボタン１というラベルのエッジは、操作後の状態がＴＢＤである状態遷移を意味している。
【００１７】
このように自動操作処理を継続していくと、表示されているＧＵＩ状態ｓにおいて未操作のＧＵＩ要素が存在しない場合がある。もしこのとき、他のＧＵＩの状態ｓ’に未操作のＧＵＩ要素が存在するならば、自動操作によって状態ｓから状態ｓ’にＧＵＩを遷移させ、未操作のＧＵＩ要素を操作する必要がある。例えば、表示されているＧＵＩの状態がｓ1だった場合、図９の状態遷移グラフが示すようにｓ1には未操作の状態遷移が存在しない。よって、例えば未操作の状態遷移が存在する状態ｓ2にＧＵＩを遷移させる必要がある。
【００１８】
非特許文献２では状態ｓから状態ｓ’にＧＵＩを遷移させるために、この状態遷移グラフ上で状態ｓから状態ｓ’へ到達するパスを利用する。パスとは、状態遷移をｔ1，ｔ2，ｔ3，…，ｔnとするとき、状態遷移の有限列ｔ1ｔ2ｔ3…ｔnのことである。ただし、ｔ1の操作前の状態はｓで、ｔnの操作後の状態はｓ’でなければならない。さらに、１≦ｉ≦ｎ−１に対して、状態遷移ｔiの操作後の状態とｔi+1の操作前の状態が等しい必要がある。例えば、状態ｓ1からｓ2へのパスは（ｓ1，ラジオボタン２，ｓ2）となる。パスの状態遷移ｔ1からｔnまでのＧＵＩ要素を順次自動操作することでＧＵＩの状態をｓ’に遷移させることができる。
【００１９】
しかし、現実的には必ずＧＵＩの状態ｓをｓ’に遷移させることができるとは限らない。例えば状態ｓからｓ’へのパスが見つからない場合がある。その場合には、初期状態からは必ず任意の状態へのパスを発見することができるため、アプリケーションを再起動して、初期のＧＵＩ状態から状態ｓ’へのパスを状態遷移グラフ上で求める。そしてパスに沿ってＧＵＩ要素を自動操作し状態ｓ’に遷移させる。このように非特許文献２は、これまでの処理をすべてのＧＵＩの状態に対して、未操作のＧＵＩ要素が存在しなくなるまで繰り返す。これによってＧＵＩの状態に対して網羅的に自動操作することが可能となり、非特許文献１に比べてより精密な状態遷移グラフを生成することができる。
【先行技術文献】
【非特許文献】
【００２０】
【非特許文献１】A. Memon, I. Banerjee and A. Nagarajan, " GUI Ripping: Reverse Engineering of Graphical User Interfaces for Testing", In proc. of the 10th Working Conference on Reverse Engineering (WCRE 2003), IEEE, pp. 260-269, 2003
【非特許文献２】A. Mesbah, E. Bozdag and A. Deursen, "Crawling AJAX Inferring User Interface State Changes", In proc. of the 8th International Conference on Web Engineering (ICWE 2008), IEEE, pp.122-134, 2008
【発明の概要】
【発明が解決しようとする課題】
【００２１】
非特許文献２では、表示されたＧＵＩの状態ｓにおいて未操作のＧＵＩ要素が存在しない場合に、未操作のＧＵＩ要素が存在するＧＵＩの状態ｓ’へＧＵＩを遷移させるために、状態遷移グラフ上の状態ｓからｓ’へのパスを利用していた。また、状態ｓからｓ’へのパスが発見できなかった場合には、アプリケーションを再起動して初期ＧＵＩの状態から状態ｓ’への状態遷移グラフ上でのパスを使って表示されたＧＵＩを状態ｓ’へ遷移させる。ところが、実際には状態遷移グラフ上で発見したパスに沿って、ＧＵＩ要素を自動操作したとしても状態ｓ’へＧＵＩが遷移しない場合がある。ＧＵＩを状態ｓ’へ遷移できなかった場合、状態ｓ’における未操作のＧＵＩ要素を操作できないことになり、すべての状態に対して網羅的に自動操作できず、不完全な状態遷移グラフが生成されてしまう。
【００２２】
例えば、図１０のようなアプリケーションを考える。このアプリケーションは、終了メニューをチェックした場合と、チェックしない場合とで、状態ｓ0から実行ボタンを操作したときのＧＵＩの遷移が異なる。非特許文献２の技術により状態ｓ0，ｓ1，ｓ0，ｓ2とＧＵＩを遷移させ、さらに状態ｓ0，ｓ1，ｓ0，ｓ3とＧＵＩを遷移させた場合、自動操作の過程で蓄積されるＧＵＩ状態の集合Ｓと状態遷移の集合Ｔの状態遷移グラフは図１１のようになる。今、表示されているＧＵＩが状態ｓ0で、状態ｓ2に未操作のＧＵＩ要素が存在すると仮定し、図１１の状態遷移グラフ上でのｓ0からｓ2へのパスを使って、状態をｓ2に遷移させることを考える。この場合、例えば、状態ｓ0から実行ボタンを操作して状態ｓ2へ至るパスが発見される。しかし、実際は状態ｓ0における実行ボタンの動作は、それまでの操作の終了メニューのチェック有無によって変化する。もしチェックされていない状態だとするなら、発見したパスに沿って自動操作しても状態ｓ2に遷移せず、状態ｓ3へ遷移してしまうことになる。このように状態遷移グラフのパスを利用すると、目的とする状態へＧＵＩを変化させることができない状況が発生する。
【００２３】
そこで本発明は、ＧＵＩの状態に対して網羅的に自動操作する技術において、表示されているＧＵＩの状態に未操作のＧＵＩ要素が存在しない場合であっても、未操作のＧＵＩ要素が存在する状態へＧＵＩを確実に遷移させ、これにより従来よりも精密なＧＵＩの状態遷移グラフを生成することを目的とする。
【課題を解決するための手段】
【００２４】
上記目的を達成するために、本願発明は、コンピュータ上で動作するテスト対象アプリケーションのグラフィカルユーザインタフェース（ＧＵＩ）の状態を網羅的に自動操作する方法であって、入力された状態遷移グラフ利用フラグ及びテスト対象アプリケーションの起動ファイルとを予め記憶手段に記憶しておく第１のステップと、起動ファイルを実行することによりテスト対象アプリケーションを起動する第２のステップと、コンピュータの表示手段に表示されているＧＵＩ状態を取得する第３のステップと、表示されたＧＵＩの状態がこれまで取得したことのない場合に該ＧＵＩ状態において操作可能なすべてのＧＵＩ要素を取得する第４のステップと、テスト対象アプリケーションが終了した状態であった場合に、起動ファイルを実行することでテスト対象アプリケーションを再起動し、表示されたＧＵＩの状態に対して再帰的に処理を継続する第５のステップと、表示されたＧＵＩの状態において未操作のＧＵＩ要素が存在する場合に、該ＧＵＩ要素を自動操作しテスト対象アプリケーションのＧＵＩを状態遷移させ、遷移後の状態に対して処理を再帰的に継続する第６のステップと、表示されたＧＵＩの状態において未操作のＧＵＩ要素が存在せず且つこれまで取得した他のＧＵＩの状態に未操作のＧＵＩ要素が存在する場合に、表示されたＧＵＩの状態から未操作のＧＵＩ要素が存在するＧＵＩの状態へ到達するパスを抽出し、パスに沿ってＧＵＩ要素を自動操作することでＧＵＩを未操作のＧＵＩ要素が存在する状態に変化させ、変化した状態に対して処理を再帰的に継続する第７のステップと、取得したすべてのＧＵＩの状態において未操作のＧＵＩ要素が存在しない場合に処理を終了させる第８のステップとを備え、前記第７のステップでは、状態遷移グラフ利用フラグの値に基づき、これまでに取得したＧＵＩの状態の遷移を表す状態遷移グラフに基づきパスを抽出するか、又は、これまでの処理で実行した状態遷移の列である実行パスの集合からパスを抽出するかを切り替えることを特徴とする。
【００２５】
本発明の好適な態様の一例としては、前記第７のステップにおいては、表示されたＧＵＩがテスト対象アプリケーションを再起動後の初期状態でなく且つ状態遷移グラフ利用フラグがｔｒｕｅである場合は状態遷移グラフからパスを探索し、それ以外の場合は実行パスの集合からパスを探索することを特徴とするものが挙げられる。
【００２６】
また本発明の好適な態様の他の例としては、前記第７のステップは、パスが存在しない場合又はパスに沿ってＧＵＩ要素を自動操作しＧＵＩを未操作のＧＵＩ要素が存在する状態に変化させることができなかった場合、起動ファイルを実行することでテスト対象アプリケーションを再起動し、表示されたＧＵＩの状態に対して再帰的に処理を継続するステップと、パスが存在し且つパスに沿ってＧＵＩ要素を自動操作しＧＵＩを未操作のＧＵＩ要素が存在する状態に変化させることができた場合、その状態に対して再帰的に処理を継続するステップとを含むことを特徴とするものが挙げられる。
【発明の効果】
【００２７】
本発明によれば、テスト対象アプリケーションのＧＵＩを網羅的に自動操作してＧＵＩの状態遷移グラフを生成するときに、表示されているＧＵＩの状態において未操作のＧＵＩ要素が存在しない場合であっても、未操作のＧＵＩ要素が存在する状態へＧＵＩを確実に遷移させることが可能となり、より精密な状態遷移グラフを得ることが可能になる。
【図面の簡単な説明】
【００２８】
【図１】ＧＵＩの一例
【図２】図１の初期のＧＵＩの各要素の状態の例
【図３】ＧＵＩの状態遷移の一例
【図４】ＧＵＩの状態遷移の一例
【図５】ＧＵＩの状態遷移の一例
【図６】ＧＵＩの状態遷移の一例
【図７】ＧＵＩの状態遷移の一例
【図８】ＧＵＩの状態遷移の一例
【図９】状態遷移グラフの一例
【図１０】ＧＵＩの状態遷移の一例
【図１１】状態遷移グラフの一例
【図１２】本実施の形態に係るグラフィカルユーザインタフェースの状態装置の構成図
【図１３】起動ファイルの一例
【図１４】網羅操作制御部の動作を説明するフローチャート
【図１５】網羅操作制御部の動作を説明するフローチャート
【図１６】網羅操作制御部の動作を説明するフローチャート
【図１７】網羅操作制御部の動作を説明するフローチャート
【図１８】パス探索を説明する図
【図１９】実施例に係るＧＵＩの状態遷移を説明する図
【図２０】実施例に係るＧＵＩの状態遷移を説明する図
【図２１】実施例に係るＧＵＩの状態遷移を説明する図
【図２２】実施例に係る状態取得条件を説明する図
【図２３】実施例に係るＧＵＩの状態遷移を説明する図
【図２４】実施例に係るＧＵＩの状態遷移を説明する図
【図２５】実施例に係るＧＵＩの状態遷移を説明する図
【図２６】実施例に係るＧＵＩの状態遷移を説明する図
【図２７】実施例に係るＧＵＩの状態遷移を説明する図
【図２８】実施例に係るＧＵＩの状態遷移を説明する図
【図２９】実施例に係るＧＵＩの状態遷移を説明する図
【図３０】実施例に係るＧＵＩの状態遷移を説明する図
【図３１】実施例に係るＧＵＩの状態遷移を説明する図
【図３２】実施例に係るＧＵＩの状態遷移を説明する図
【発明を実施するための形態】
【００２９】
本発明の一実施の形態に係るグラフィカルユーザインタフェースの網羅的な自動操作方法を実施する装置について図１２を参照して説明する。ここでは周知のコンピュータ上に実現した例を示すもので、図中、１は入力装置、２はコンピュータ本体、３は記憶装置、４は表示装置である。
【００３０】
入力装置１は、キーボード、マウス等からなり、ユーザがコンピュータ本体２に所定の情報、ここでは起動ファイルと状態遷移グラフ利用フラグを入力するためのものである。起動ファイル及び状態遷移グラフ利用フラグについては後述する。
【００３１】
記憶装置３は、入力装置１から入力された起動ファイル及び状態遷移グラフ利用フラグや、網羅操作制御部５が実施する図１４から図１７の手続の出力結果であるＧＵＩ状態の集合Ｓと状態遷移の集合Ｔ、実行パスの集合Ｐを記憶保存するとともに、各種処理において必要な情報の一次記憶を行う装置である。
【００３２】
表示装置４は、液晶ディスプレイ、ＣＲＴ等画像表示装置等からなり、網羅操作制御部５が実施する図１４から図１７の手続の過程で起動ファイルを実行することによって、起動されるアプリケーションのＧＵＩを表示するためのものである。また、記憶装置３に保存されているＧＵＩ状態の集合Ｓと状態遷移の集合Ｔ、実行パスの集合Ｐの内容を表示することができる。また状態遷移グラフ＜Ｓ，Ｔ＞を図形式で表示することができる。
【００３３】
コンピュータ本体２は、各装置を制御するとともに、網羅操作制御部５、ＧＵＩ状態取得部６、ＧＵＩ自動操作部７、状態遷移グラフ探索部８、実行パス集合探索部９を構成する。なお、コンピュータ本体２の各部は、ハードウェアにより構成してもよいし、コンピュータ本体２にプログラムをインストールすることによって構成してもよい。なお該プログラムは、記録媒体に記録することも、ネットワークを通して提供することも可能である。
【００３４】
網羅操作制御部５は、テスト対象アプリケーションの全てのＧＵＩの状態を網羅的に取得する処理を制御するものであり、入力装置１より与えられた起動ファイルを実行することでテスト対象アプリケーションを起動し、ＧＵＩ状態取得部６によりＧＵＩの状態を取得し、ＧＵＩ自動操作部７により未操作のＧＵＩ要素を自動操作する。この自動操作によってＧＵＩ状態が遷移するため、遷移したＧＵＩの状態に対してこれらの処理を再帰的に繰り返す。網羅操作制御部５の動作については後述する。
【００３５】
ＧＵＩ状態取得部６は、表示装置４に表示されているアプリケーションのＧＵＩの状態を取得することができる。ＧＵＩ状態取得部６は、網羅操作制御部５が図１４から図１７の手続を実施するにあたって、ステップＳ４，Ｓ５９６，Ｓ５９９８において呼び出される。
【００３６】
ＧＵＩ自動操作部７は、網羅操作制御部５が指定するＧＵＩ要素を表示装置４が表示するＧＵＩに対して自動操作することができる。ＧＵＩ自動操作部７は、網羅操作制御部５が図１４から図１７の手続を実施するにあたって、ステップＳ５９５，Ｓ５９９７において呼び出される。
【００３７】
状態遷移グラフ探索部８は、網羅操作制御部５が指定するＧＵＩの状態から未操作のＧＵＩ要素が存在する状態へのパスを探索する。このとき本発明による網羅操作の過程で蓄積されるＧＵＩ状態の集合Ｓと状態遷移の集合Ｔからなる状態遷移グラフ＜Ｓ，Ｔ＞を対象にパスを探索する。状態遷移グラフ上のパスの探索は公知の技術によって実現できる。状態遷移グラフ探索部８は、網羅操作制御部５が図１４から図１７の手続を実施するにあたって、ステップＳ５９９２において呼び出される。
【００３８】
実行パス集合探索部９は、網羅操作制御部５が指定するＧＵＩの状態から未操作のＧＵＩ要素が存在する状態へのパスを探索する。このとき本発明による網羅操作の過程で蓄積される実行パスの集合Ｐを対象にパスを探索する。実行パスの集合からパスを探索することは公知の技術によって実現できる。実行パス集合探索部９は、網羅操作制御部５が図１４から図１７の手続を実施するにあたって、ステップＳ５９９３において呼び出す。
【００３９】
次に、前述の起動ファイルについて説明する。起動ファイルとは、テスト対象アプリケーションを起動するためのコマンドが記述されたものであり、Microsoft社のWindows（登録商標）のバッチファイルや、Linux（登録商標）などのシェルスクリプトなどからなる。起動ファイルを実行することで、テスト対象のアプリケーションを起動することができる。起動ファイルには、テスト対象アプリケーションを起動するコマンドだけでなく、そのアプリケーションが実行中にデータを書き込む場合には、そのデータを初期化するコマンドも記述する必要がある。代表的なオペレーティングシステムであるMicrosoft社のWindows（登録商標）標準付属のメモ帳の起動ファイルの例を図１３に示す。メモ帳はデータをオペレーティングシステムのレジストリに書き込むことから、reg addコマンドによりそのデータを初期化している。またstartコマンドによりメモ帳を起動することができる。
【００４０】
次に、前述の状態遷移グラフ利用フラグについて説明する。本実施の形態では、あるＧＵＩの状態から未操作のＧＵＩ要素が存在する状態へのパスを探索するために、状態遷移グラフ探索部８と実行パス集合探索部９とを備えている。両探索部８，９はアルゴリズムが異なるものであり、探索時の状況やＧＵＩの状態の特性等によっては、状態遷移グラフ探索部８では解が求まる場合であっても他方の実行パス集合探索部９では解が求まらない場合がある。他方、状態遷移グラフ探索部８の処理時間は、実行パス集合探索部９よりも長くなる場合がある。そこで本発明では、状況や特性等に応じて状態遷移グラフ利用フラグとしてｔｒｕｅ又はｆａｌｓｅの何れかを適宜設定することにより、状態遷移グラフ利用フラグの値に応じて状態遷移グラフ探索部８と実行パス集合探索部９の利用を選択可能にしている。状態遷移グラフ利用フラグの値によってどのように動作が変化するかについては、下記の網羅操作制御部５についての動作説明において明らかになる。
【００４１】
次に網羅操作制御部５の動作について詳述する。網羅操作制御部５は、図１４の手続を実施する。図１４の手続では、入力装置１より与えられた起動ファイルを実行することでテスト対象アプリケーションを起動し（ステップＳ１）、初期のＧＵＩ画面を表示装置４へ表示する。さらにＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐを空集合に設定する（ステップＳ２）。実行パスとは自動操作によって実際に変化した状態遷移の列のことである。状態遷移グラフ上のパスと区別して実行パスと呼ぶことにする。次いで実行パスπに、長さ０の列を意味する定数εを設定する（ステップＳ３）。ＧＵＩ状態取得部６を利用して現在表示されているＧＵＩの状態を取得し、これをｓ0とおく。また現在の状態を表す変数ｓにｓ0を代入する（ステップＳ４）。最後に図１５の手続を実施する（ステップＳ５）。
【００４２】
図１５の手続においては、まず、現在の状態ｓが状態の集合Ｓに含まれるか調べる（ステップＳ５１）。もし含まれない場合には、現在の状態ｓを集合Ｓに追加する（ステップＳ５２）。さらに現在の状態ｓから操作可能なＧＵＩ要素の集合Ｅを抽出する（ステップＳ５３）。そしてＥに含まれるＧＵＩ要素をｅとするとき、すべてのＧＵＩ要素に対して、状態遷移（ｓ，ｅ，ＴＢＤ）を状態遷移の集合Ｔに追加する（ステップＳ５４，Ｓ５５，Ｓ５６）。このような状態遷移の追加処理が完了した場合、あるいは、ステップＳ５１にて現在の状態ｓが状態の集合Ｓに含まれている場合は、状態遷移の集合Ｔに操作後の状態がＴＢＤである状態遷移が存在しないか調べる（ステップＳ５７）。存在しない場合は、網羅的な自動操作が完了したことになるため、それまで蓄積したＧＵＩ状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐを記憶装置に出力し（ステップＳ５８）、手続を終了する。ステップＳ５７にてＴＢＤである状態遷移が存在する場合は、図１６の手続を実行する（ステップＳ５９）。
【００４３】
図１６の手続においては、まずアプリケーションが終了していて、ＧＵＩが何も表示されていないか調べる（ステップＳ５９１）。もし終了している場合には、起動ファイルを使ってアプリケーションを再起動する（ステップＳ５９２）。さらに、実行パスπを実行パスの集合Ｐへ追加し、πに長さが０の列を意味する定数εを代入し、現在の状態を示す変数ｓに初期状態ｓ0を代入する（ステップＳ５９３）。そして図１５の手続のステップＳ５１に戻る。もしステップＳ５９１でアプリケーションが終了していない場合には、変数ｓの示す現在の状態において未操作のＧＵＩ要素が存在するか調べる。すなわち状態遷移の集合Ｔの中に操作前の状態がｓで、操作後の状態がＴＢＤであるような状態遷移ｔを探し出す（ステップＳ５９４）。状態遷移ｔのＧＵＩ要素をｅとすれば、ｔ＝（ｓ，ｅ，ＴＢＤ）と表現することができる。このような状態遷移ｔが存在する場合、ＧＵＩ自動操作部７によってｔのＧＵＩ要素ｅを自動操作し（ステップＳ５９５）、ＧＵＩを遷移させる。さらに遷移したＧＵＩの状態をＧＵＩ状態取得部６を利用して取得し、変数ｓ’に代入する（ステップＳ５９６）。この処理によって状態遷移ｔの操作後の状態が決定するため、ｔを（ｓ，ｅ，ｓ’）で置き換える（ステップＳ５９７）。実行パスπの末尾に状態遷移ｔを追加し、現在の状態を示す変数ｓをｓ’に置き換える（ステップＳ５９８）。そして図１５の手続のＳ５１へ戻る。もし、ステップＳ５９４にて、状態遷移ｔが発見できない場合には、図１７の手続を実施する（ステップＳ５９９）。
【００４４】
図１７の手続においては、入力装置１から与えられた状態遷移利用フラグの値と、現在の状態を示す変数ｓの値を調べる（ステップＳ５９９１）。変数ｓがアプリケーションを再起動した直後の初期状態ｓ0でない場合には状態遷移グラフ利用フラグがｔｒｕｅであれば、状態遷移グラフ探索部８によって状態遷移グラフ＜Ｓ，Ｔ＞上で、変数ｓが示す状態から未操作のＧＵＩ要素が存在する状態ｓ’へのパスｐを探索する（ステップＳ５９９２）。もし状態遷移グラフ利用フラグがｆａｌｓｅであれば、実行パス集合探索部９によって実行パスの集合Ｐ∪｛π｝から同様のパスｐを探索する（ステップＳ５９９３）。次いでステップＳ５９９２あるいはステップＳ５９９３にてパスｐが発見できたか調べる（ステップＳ５９９４）。もし発見できなければ、変数ｓの示す状態（ただし、アプリケーション再起動後の初期状態ではない）から状態ｓ’へＧＵＩを遷移することができない。よってアプリケーションを再起動して手続を継続するために、図１６のステップＳ５９２に戻る。もしパスｐが発見できた場合には、パスｐの先頭の状態遷移をｔ＝（ｓt，ｅt，ｓt’）として取り出し（ステップＳ５９９６）、ＧＵＩ自動操作部７がＧＵＩ要素ｅtを操作する（ステップＳ５９９７）。それによってＧＵＩが遷移するためＧＵＩ状態取得部６を利用してＧＵＩの状態を取得し、現在の状態を示す変数ｓに代入する（ステップＳ５９９８）。さらにパスπの末尾に状態遷移（ｓt，ｅt，ｓ）を追加し、状態遷移の集合Ｔへ状態遷移（ｓt，ｅt，ｓ）を追加する（ステップＳ５９９９）。このとき変数ｓの示す現在の状態がＧＵＩ状態の集合Ｓに含まれている、あるいは、その状態において未操作のＧＵＩ要素が存在するか調べる（ステップＳ５９９１０）。もしこの条件に合致しない場合には、ステップＳ５９９５に戻って、パスｐの次の先頭を取り出しステップＳ５９９５からＳ５９９１０を実行する。パスｐに含まれていたすべての状態遷移に対してステップＳ５９９５からＳ５９９１０を実行し、ステップＳ５９９５でパスの長さが０になっていたら、パスｐに沿ってＧＵＩ要素を自動操作しても、未操作のＧＵＩ要素を持つ状態へ到達できないことになる。よってテスト対象アプリケーションを再起動し処理を継続するために図１６のステップＳ５９２へ戻る。
【００４５】
もしパスｐの先頭の状態遷移ｔ＝（ｓt，ｅt，ｓt’）に対してステップＳ５９９５からＳ５９９１０を実行し、ＧＵＩ要素ｅtを操作してＧＵＩの状態が集合Ｓに含まれていない、あるいは、そのＧＵＩの状態において未操作のＧＵＩ要素が存在する場合には、図１５のステップＳ５１に戻る。
【００４６】
このように図１７のステップＳ５９９１において、変数ｓがアプリケーション再起動後の初期状態ｓ0でない場合には、状態遷移グラフ上のパス、あるいは実行パスの集合に含まれるパスを利用したとしても、未操作のＧＵＩ要素を持つ状態ｓ’にＧＵＩを遷移させることができない可能性がある点に注意されたい。したがって、本発明を利用するユーザがどちらのパスを利用するかは、状態遷移グラフ利用フラグの値を入力装置１から指定することで、アプリケーションの特性に応じて自由に選択することができる。
【００４７】
例えば、今、実行パスの集合に、ｓ1，ｓ2，ｓ3と状態が遷移したときの実行パスと、ｓ4，ｓ2，ｓ5と遷移したときの実行パスが存在する場合を考える。このときの実行パスの集合Ｐと状態遷移グラフを図１８に示す。今、表示されているＧＵＩの状態がｓ1で、状態ｓ5に未操作のＧＵＩ要素が存在すると仮定する。状態ｓ1から状態ｓ5へのパスを状態遷移グラフ上から発見しようとすると、ｓ1，ｓ2，ｓ5というパスを見つけることができる。一方、実行パスの集合から発見しようとすると、状態ｓ1から状態ｓ5へのパスは見つけることができない。状態遷移グラフ上で見つけたｓ1，ｓ2，ｓ5と状態が遷移する予定のパスに沿ってＧＵＩ要素を自動操作すると、不確実ではあるがアプリケーションによっては適切にＧＵＩの状態をｓ5へ遷移させることができる場合がある。しかし、逆に状態ｓ5へ遷移させることができないこともあり、その場合はパスに沿ってＧＵＩ要素を自動操作することが無駄な処理となる。よって網羅的な自動操作の処理時間が実行パスからパスを探索する場合と比べて長くなることがある。このように本発明を利用するユーザは、アプリケーションの特性に応じて状態遷移グラフ上からパスを探索するか、それとも実行パスの集合からパスを探索するか選択することができる。
【００４８】
図１７のステップＳ５９９１において、現在の状態を示す変数ｓがアプリケーションを再起動した後の初期状態ｓ0である場合は、状態遷移グラフ利用フラグの値がｔｒｕｅかｆａｌｓｅかに関わらず、実行パスの集合からパスを探索するためにステップＳ５９９３に進む。ＧＵＩ状態が状態の集合Ｓに含まれているということは、過去に初期状態からＧＵＩ要素を操作することでその状態へ変化したということなので、初期状態から集合Ｓに含まれる任意にＧＵＩ状態へのパスは実行パスの集合の中に必ず存在する。また再起動後の初期状態では、起動ファイルの実行により書き込まれたデータすべてが初期化されている。よって  実行パスの集合から見つけたパスに沿ってＧＵＩ要素を操作すれば、必ずそのパスと同様にＧＵＩを状態遷移させることが可能となる。よって、ステップＳ５９９１において、現在の状態を示す変数ｓがアプリケーションを再起動した後の初期状態ｓ0である場合は、ステップＳ５９９３に進んだあと、ステップＳ５９９４やステップＳ５９９５で図１６のステップＳ５９２に戻ることはありえない。このように未操作のＧＵＩ要素を持つ状態へ、必ず遷移することができるようになるためより精密なＧＵＩの状態遷移グラフを生成することができる。
【００４９】
このように本発明により、ＧＵＩの状態に対してＧＵＩ要素を網羅的に操作しようとして、未操作のＧＵＩ要素が存在しない状態のときに、まず状態遷移グラフ利用有無フラグの指定に応じて、状態遷移グラフあるいは実行パスの集合から未操作のＧＵＩ要素が存在するＧＵＩ状態へのパスを見つけ、そのパスに沿ってＧＵＩ要素を操作することで、未操作のＧＵＩ要素が存在する状態へＧＵＩを遷移させることができ、未操作のＧＵＩ要素を操作することが可能になる。
【００５０】
もしパスが発見できない、あるいはパスを発見しパスに沿ってＧＵＩ要素を操作した結果、未操作のＧＵＩ要素が存在する状態へＧＵＩが遷移しなかった場合でも、起動ファイルを実行してアプリケーションを再起動し初期のＧＵＩを表示し、実行パスの集合に対して初期のＧＵＩ状態から未操作のＧＵＩ要素を持つＧＵＩ状態へのパスを見つけ、そのパスに沿ってＧＵＩ要素を操作することで、未操作のＧＵＩ要素を持つ状態へＧＵＩを遷移させ、未操作のＧＵＩ要素を操作することが可能になる。アプリケーションを再起動後の初期のＧＵＩ状態からは未操作のＧＵＩ要素を持つＧＵＩ状態へのパスは、ＧＵＩ状態の集合Ｓに未操作のＧＵＩ要素を持つＧＵＩ状態が存在するならば必ず実行パスの集合Ｐに存在し、かつそのパスに沿ってＧＵＩ要素を操作すると必ず未操作のＧＵＩ要素を持つ状態へＧＵＩを遷移させることができる。よって、本発明によりＧＵＩの状態に対して網羅的にかつ確実にＧＵＩ要素を操作することができ、従来技術より精密な状態遷移グラフを生成することができる。
【００５１】
なお、前述した実施形態では、網羅操作制御部５、ＧＵＩ状態取得部６、ＧＵＩ自動操作部７、状態遷移グラフ探索部８、実行パス集合探索部９をコンピュータ上で実現した例を示したが、ハードウェアで実現してもよい。またこれら各装置が、適切な通信路で相互に接続された複数のハードウェア上に分散して存在し、相互に通信し合いながら実行することもできる。
【００５２】
本発明の装置がテスト対象とするアプリケーションは、コンピュータ本体２において動作してもよいし、適切な通信路で相互に接続されたハードウェア上で動作していてもよい。
【実施例】
【００５３】
本発明による網羅的なＧＵＩの自動操作の実施例について図１９〜図３２を参照して説明する。
【００５４】
図１９は本実施例におけるテスト対象アプリケーションの動作である。このアプリケーションは起動すると状態ｓ0のＧＵＩが表示される。状態ｓ0では操作可能なＧＵＩ要素は、メニューと、実行ボタンの２つである。メニューをクリックした場合には、状態ｓ1やｓ2のようにサブメニューとして終了メニューが表示される。終了メニューにはチェックボックスが存在し終了メニューをクリックすることでチェックやチェックを外すことができる。状態ｓ1は終了メニューのチェックが外れている状態であり、状態ｓ2はチェックされている状態である。ｓ1の状態から終了メニューをクリックすると、チェックされた状態ｓ2へ遷移し、ｓ2の状態から終了メニュ−をクリックするとチェックが外れ状態ｓ1へ遷移する。状態ｓ1およびｓ2において、メニューをクリックすると状態ｓ0へ戻ることができる。状態ｓ0においてメニューをクリックするとき、もし事前に終了メニューが未チェックであるならば、状態はｓ1へ遷移する。また終了メニューがチェック済みであるならば状態ｓ2へ遷移する。状態ｓ0において実行ボタンをクリックしたとき、もし事前に終了メニューをクリックしチェックした状態であるなら状態ｓ3へ遷移する。状態ｓ3からＹｅｓボタンをクリックすれば、アプリケーションは終了する。アプリケーションが終了し、ＧＵＩが表示されていない状態をｓ5とする。状態ｓ3からＮｏボタンをクリックした場合には状態ｓ0へ戻る。もし状態ｓ0において実行ボタンをクリックしたとき、事前に終了メニューのチェックを外した状態であるなら状態ｓ4へ遷移する。状態ｓ4において確認ボタンをクリックすると状態ｓ0へ戻る。また状態ｓ4において終了ボタンをクリックするとアプリケーションが終了し状態ｓ5へ遷移する。
【００５５】
本発明による網羅的なＧＵＩの自動操作の実施例では、まず入力装置１から起動ファイルと状態遷移グラフ利用フラグを入力する。ここで入力される起動ファイルを実行しテスト対象アプリケーションを起動した場合、ＧＵＩとして状態ｓ0が表示され、そのとき必ず終了メニューはチェック済の状態で起動されるものとする。本発明では、網羅操作制御部５が図１４から図１７の手続を実施する。まず図１４のステップＳ１にて起動ファイルを実行しテストアプリケーションを起動する。このとき表示装置４にはＧＵＩとして状態ｓ0が表示される。次いでステップＳ２でＧＵＩ状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合を空集合で初期化し、さらにステップＳ３で実行パスπに長さが０の列であるεを設定する。そしてステップＳ４で表示されているＧＵＩの状態ｓ0をＧＵＩ状態取得部６によって取得し、現在のＧＵＩの状態を示す変数ｓに代入する。以降では図１５の手続を実行しようとするが、その過程で変化するＧＵＩの状態遷移と、各遷移におけるＧＵＩ状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２０に示す。
【００５６】
まず図１５の手続のステップＳ５１にて初期状態ｓ0が代入された変数ｓが、ＧＵＩの状態の集合Ｓに含まれているか調べる。集合Ｓは空集合でありｓ0が含まれていないためステップＳ５２に進み、集合Ｓに変数ｓが示す初期状態ｓ0が追加される。次にステップＳ５３で変数ｓの示す状態において操作可能なＧＵＩ要素の集合Ｅが取り出される。このとき変数ｓは初期状態ｓ0を示しているためＥ＝｛メニュークリック，実行ボタンクリック｝となる。ステップＳ５４からＳ５６にて集合Ｅの各要素に対して、操作後の状態がＴＢＤである状態遷移を作成し状態遷移の集合Ｔに追加される。すなわち集合Ｔは空集合であるため、状態遷移ｔ0＝（ｓ0，メニュークリック，ＴＢＤ）とｔ1＝（ｓ0，実行ボタンクリック，ＴＢＤ）が追加され、Ｔ＝｛ｔ0，ｔ1｝となる。さらにステップＳ５７では、集合Ｔに操作後の状態がＴＢＤである状態遷移が存在しないか調べる。ここでは存在するため図１６の手続に進む。図１６の手続のステップＳ５９１ではアプリケーションが終了しているか調べ、終了していないためステップＳ５９４に進む。ステップＳ５９４では、操作前の状態が変数ｓの示す初期状態ｓ0であり、操作後の状態がＴＢＤである状態遷移が集合Ｔに存在するか調べる。ｔ0，ｔ1が該当するがここでは状態遷移ｔをｔ0としてステップＳ５９５に進む。ステップＳ５９５では、状態遷移ｔのＧＵＩ要素、すなわち状態遷移ｔ0のＧＵＩ要素であるメニュークリックをＧＵＩ自動操作部７によって自動操作する。その結果、テスト対象アプリケーションのＧＵＩは状態ｓ2へ遷移することになる。そこでステップＳ５９６、Ｓ５９７では変数ｓ’に遷移後の状態ｓ2を代入し、状態遷移ｔ0の操作後の状態をＧＵＩ状態ｓ2に置き換えｔ0＝（ｓ0，メニュークリック，ｓ2）とする。ステップＳ５９８では実行パスπの末尾に状態遷移ｔ0を追加し、変数ｓに変数ｓ’が示す状態ｓ2を代入する。そして図１５のステップＳ５１に戻る。この時点でのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２０の（Ａ）に示す。
【００５７】
図１５のステップＳ５１からは状態ｓ2を示す変数ｓに対して同様の処理を実施する。すなわち、ステップＳ５１，Ｓ５２，Ｓ５３，Ｓ５４，Ｓ５５，Ｓ５６，Ｓ５４，Ｓ５５，Ｓ５６，Ｓ５４，Ｓ５７，Ｓ５９，Ｓ５９１，Ｓ５９４，Ｓ５９５，Ｓ５９６，Ｓ５９７，Ｓ５９８を実行し、結果としてｓ2において操作可能なＧＵＩ要素であるメニュークリックが自動操作され、ＧＵＩは状態ｓ0へ遷移し、変数ｓには状態ｓ0が代入される。この時点でのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２０の（Ｂ）に示す。
【００５８】
次に状態ｓ0を示す変数ｓに対して図１５のステップＳ５１を実行する。この時、状態ｓ0は既に集合Ｓに含まれているためステップＳ５７へ進む。これ以降はＳ５９，Ｓ５９１，Ｓ５９４と進み、状態遷移ｔは操作前の状態がｓ0で操作後の状態がＴＢＤである状態遷移ｔ1となる。Ｓ５９５，Ｓ５９６，Ｓ５９７，Ｓ５９８では、ｔ1のＧＵＩ要素である実行ボタンクリックが自動操作され、ＧＵＩの状態がｓ1からｓ3へ変化する。その結果、ｔ1が（ｓ1，実行ボタンクリック，ｓ3）に更新され、変数ｓに状態ｓ3が代入される。この時点でのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２０の（Ｃ）に示す。
【００５９】
さらに状態ｓ3を示す変数ｓに対して図１５のステップＳ５１が繰り返される。すなわち、ステップＳ５１，Ｓ５２，Ｓ５３，Ｓ５４，Ｓ５５，Ｓ５６，Ｓ５４，Ｓ５５，Ｓ５６，Ｓ５４，Ｓ５７，Ｓ５９，Ｓ５９１，Ｓ５９４，Ｓ５９５，Ｓ５９６，Ｓ５９７，Ｓ５９８を実行し、結果としてｓ3において操作可能なＧＵＩ要素であるＹｅｓボタンクリックが自動操作され、アプリケーションが終了する。アプリケーションが終了しているときのＧＵＩは状態ｓ5となるため、状態遷移ｔ4が（ｓ3，Ｙｅｓボタンクリック，ｓ5）、変数ｓには状態ｓ5が代入される。この時点でのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２０の（Ｄ）に示す。
【００６０】
アプリケーションが終了した状態であるｓ5を示す変数ｓに対して図１５のステップＳ５１を実行すると、まず状態ｓ5は集合Ｓに含まれていないため、ステップＳ５２で集合Ｓへ追加される。ステップＳ５３では操作可能なＧＵＩ要素は存在しないため集合Ｅは空集合となる。そのためステップＳ５４からステップＳ５７に進み、操作後の状態がＴＢＤである状態遷移は集合Ｔに存在する（図２０（Ｄ）のｔ3やｔ5）ためステップＳ５９へ進み図１６の手続が実行される。図１６のステップＳ５９１では、アプリケーションが終了しているため、ステップＳ５９２へ進み起動ファイルを実行してテスト対象アプリケーションを再起動する。その結果、表示装置にＧＵＩとして初期状態ｓ0が表示される。ステップＳ５９３では、実行パスの集合Ｐに実行パスπ＝ｔ0ｔ2ｔ1ｔ4が追加されＰ＝｛ｔ0ｔ2ｔ1ｔ4｝となる。また変数ｓに初期状態ｓ0を代入し、実行パスπに長さ０の列を示すεが代入され、図１５のステップＳ５１に戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２０の（Ｅ）に示す。ただし、状態遷移の集合Ｔは（Ｄ）と同じなので割愛する。
【００６１】
続いて図１５のステップＳ５１に戻ってから図１５，図１６，図１７の手続を実行したとき、その過程で変化するＧＵＩの状態遷移と、各遷移におけるＧＵＩ状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２１に示す。図１５のステップＳ５１において変数ｓの示す状態ｓ0は集合Ｓに含まれていて、ステップＳ５７で操作後の状態がＴＢＤである状態遷移が集合Ｔには存在するため、ステップＳ５９へと進み図１６の手続が実行される。図１６のステップＳ５９１ではアプリケーションが終了していないため、ステップＳ５９４に進む。ステップＳ５９４では操作前の状態が変数ｓの示す状態ｓ0で、操作後の状態がＴＢＤである状態遷移が集合Ｔに存在するか調べる。図２１（Ｆ）が示すように、ここでは操作前の状態がｓ0である状態遷移はｔ0とｔ1であるが、どちらも操作後の状態はＴＢＤではない。よってステップＳ５９９へと進み図１７の手続が実行される。図１７のステップＳ５９９１では、入力として与えられた状態遷移グラフ利用フラグがｔｒｕｅであり、かつ変数ｓが再起動した直後の状態ｓ0ではないことを調べる。ここでは状態遷移グラフ利用フラグがｔｒｕｅ，ｆａｌｓｅどちらの値で与えられていても、変数ｓの示す状態が再起動した直後の状態ｓ0であるためステップＳ５９９３へ進む。ステップＳ５９９３では、実行パスの集合Ｐに対して、変数ｓが示す状態ｓ0から未操作のＧＵＩ要素が存在する状態へのパスｐが存在するか調べる。未操作のＧＵＩ要素が存在する状態とは、操作後の状態がＴＢＤである状態遷移の操作前の状態のことである。よって図２１（Ｆ）の状態遷移の集合Ｔが示すように状態遷移ｔ3，ｔ5の操作前の状態であるｓ2やｓ3が該当する。ここで集合Ｐは｛ｔ0ｔ2ｔ1ｔ4｝であるため、状態ｓ2へのパスｐとしてｔ0、すなわち（ｓ0，メニュークリック，ｓ2）が抽出されたとする。抽出されたパスｐの先頭の状態遷移のＧＵＩ要素を順番に自動操作するために、ステップＳ５９９４，Ｓ５９９５，Ｓ５９９６，Ｓ５９９７へと進み、パスｐから先頭の状態遷移ｔ0を取り出し、そのＧＵＩ要素であるメニュークリックがＧＵＩ自動操作部７により自動操作される。その結果、表示装置に表示されたＧＵＩが状態ｓ2へと遷移し、ステップＳ５９９８にてＧＵＩ状態取得部６を利用して状態を取得し変数ｓに状態ｓ2を代入する。さらにステップＳ５９９９で実行パスπに状態遷移ｔ0＝（ｓ0，メニュークリック，ｓ2）を追加してπ＝ｔ0となる。また集合Ｔに状態遷移（ｓ0，メニュークリック，ｓ2）を追加するが、結果として同じ状態遷移ｔ0が集合Ｔに存在するため追加されない。ステップＳ５９９１０にて変数ｓの示す状態ｓ2が集合Ｓに含まれていない、もしくは状態ｓ2に未操作のＧＵＩ要素が存在するか調べる。ここでは、状態遷移ｔ3のＧＵＩ要素である終了メニュークリックが状態ｓ2において未操作であるため、図１５のＳ５１のステップに戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２１の（Ｆ）に示す。
【００６２】
さらに状態ｓ2を示す変数ｓに対して図１５のステップＳ５１を実行すると、状態ｓ2は集合Ｓに登録されているため、ステップＳ５７に進む。ステップＳ５７では、状態遷移の集合Ｔに操作後の状態がＴＢＤである状態遷移がまだ存在するため、ステップＳ５９へ進み図１６の手続が実施される。図１６のステップＳ５９１ではアプリケーションが終了していないためステップＳ５９４へ進み、変数ｓが示す状態ｓ2が操作前の状態で、操作後の状態がＴＢＤである状態遷移ｔ3が集合Ｔに存在するため、ステップＳ５９５にてｔ3のＧＵＩ要素である終了メニュークリックを自動操作する。その結果、ＧＵＩが状態ｓ1へ遷移するので、Ｓ５９６ならびにステップＳ５９７を実行し、状態遷移ｔ3を（ｓ2，終了メニュークリック，ｓ1）に更新する。ステップＳ５９８では、実行パスπの末尾に状態遷移ｔ3を追加し、さらに変数ｓに状態ｓ1を代入し、図１５のステップＳ５１へ戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２１の（Ｇ）に示す。
【００６３】
図１５のステップＳ５１にて変数ｓの示す状態ｓ1は集合Ｓに含まれていないため、集合Ｓに状態ｓ1が加えられる。ステップＳ５３にて操作可能なＧＵＩ要素としてメニュークリックと終了メニュークリックが集合Ｅの要素として抽出される。よってステップＳ５４，Ｓ５５，Ｓ５６が繰り返し実行され、結果として集合Ｔに状態遷移ｔ6＝（ｓ1，メニュークリック，ＴＢＤ）とｔ7＝（ｓ1，終了メニュークリック，ＴＢＤ）が加えられ、ステップＳ５７に進む。さらに集合Ｔに操作後の状態がＴＢＤである状態遷移が存在するためステップＳ５９に進み、図１６の手続を実施する。図１６のステップＳ５９１では、アプリケーションは終了していないためステップＳ５９４に進む。ステップＳ５９４では、操作前の状態が変数ｓの示す状態ｓ1で操作後の状態がＴＢＤである状態遷移が集合Ｔに存在するか調べ、ここではｔ6＝（ｓ1，メニュークリック，ＴＢＤ）が存在するので、ステップＳ５９５でＧＵＩ要素であるメニュークリックを自動操作する。その結果、表示装置に表示されるＧＵＩは状態ｓ0へと遷移する。Ｓ５９６ならびにステップＳ５９７で状態遷移ｔ6を（ｓ1，メニュークリック，ｓ0）へと置き換える。そして、ステップＳ５９８で実行パスπの末尾に状態遷移ｔ6を追加し、図１５のステップＳ５１に戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２１の（Ｈ）に示す。
【００６４】
変数ｓの示す状態ｓ0は集合Ｓに含まれており、集合Ｔに操作後の状態がＴＢＤである状態遷移も存在し、アプリケーションも終了していない。さらに操作前の状態が状態ｓ0で操作後の状態がＴＢＤである状態遷移が集合Ｔには存在しないため、図１５のステップＳ５１，Ｓ５７，Ｓ５９，図１６のステップＳ５９１，Ｓ５９４，Ｓ５９９，図１７のステップＳ５９９１を順次実行する。ステップＳ５９９１では、変数ｓの示す状態ｓ0は初期状態ではあるものの、テスト対象アプリケーションを再起動して直後に表示されたＧＵＩではないため、入力された状態遷移グラフ利用フラグの値に応じて、ステップＳ５９９２あるいはステップＳ５９９３へと進む。状態遷移グラフ利用フラグがｔｒｕｅの場合はステップＳ５９９２で、状態遷移グラフ探索部８の利用によって、これまで蓄積したＧＵＩ状態の集合Ｓと状態遷移の集合Ｔで構成される状態遷移グラフから未操作のＧＵＩ要素が存在する状態へのパスｐを抽出する。一方、状態遷移グラフ利用フラグがｆａｌｓｅの場合は、ステップＳ５９９３で実行パス集合探索部９を利用して、これまで蓄積した実行パスの集合Ｐと実行パスπから未操作のＧＵＩ要素が存在する状態へのパスｐを抽出する。ここでは、状態ｓ0から未操作のＧＵＩ要素を持つ状態であるｓ3へのパスｐを見つける場合を考える。もし、状態遷移グラフ利用フラグがｔｒｕｅの場合はステップＳ５９９２で、図２２に示すように状態遷移グラフからパスｐとしてｔ1を抽出することができる。状態遷移グラフ利用フラグがｆａｌｓｅの場合はステップＳ５９９３で、図２３に示すように実行パスの集合Ｐと実行パスπからパスｐとしてｔ0ｔ2ｔ1が抽出される。ここでは、状態遷移グラフ利用フラグがｔｒｕｅであったと仮定して、パスｐ＝ｔ1が抽出されステップＳ５９９４に進んだ場合を考える。ステップＳ５９９４，Ｓ５９９５，Ｓ５９９６，Ｓ５９９７へと進んだとき、パスｐの先頭の状態遷移であるｔ1のＧＵＩ要素である実行ボタンクリックを操作する。しかしこの場合、事前にＧＵＩの状態ｓ2から終了メニューをクリックし状態ｓ1を経由しているため、ＧＵＩの状態はｓ3ではなく、ｓ4へ遷移する。結果としてステップＳ５９９８では変数ｓに状態ｓ4が代入される。状態遷移（ｓ0，実行ボタンクリック，ｓ4）をｔ8としたとき、ステップＳ５９９９では、実行パスπの末尾にｔ8を追加しｔ0ｔ3ｔ6ｔ8となる。また状態遷移の集合Ｔにｔ8を追加する。続くステップＳ５９９１０では、変数ｓの示す状態ｓ4が集合Ｓに含まれていない、あるいは状態ｓ4に未操作のＧＵＩ要素が存在するか調べる。ここでは、状態ｓ4が集合Ｓに含まれていないため、図１５のステップＳ５１へ戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２４の（Ｉ）に示す。
【００６５】
変数ｓの示す状態ｓ4に対して図１５のステップＳ５１から処理を継続すると、ステップＳ５１，Ｓ５２，Ｓ５３，Ｓ５４，Ｓ５５，Ｓ５６，Ｓ５４，Ｓ５５，Ｓ５６，Ｓ５４，Ｓ５７，Ｓ５９，Ｓ５９１，Ｓ５９４，Ｓ５９５，Ｓ５９６，Ｓ５９７，Ｓ５９８を実行し、結果としてｓ4において操作可能なＧＵＩ要素である確認ボタンクリックが自動操作され、ＧＵＩは状態ｓ0へ遷移し、変数ｓには状態ｓ0が代入される。この時点でのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２４の（Ｊ）に示す。
【００６６】
変数ｓの示す状態ｓ0は集合Ｓに含まれており、集合Ｔに操作後の状態がＴＢＤである状態遷移も存在し、アプリケーションも終了していない。さらに操作前の状態が状態ｓ0で操作後の状態がＴＢＤである状態遷移が集合Ｔには存在しないため、図１５のステップＳ５１，Ｓ５７，Ｓ５９，図１６のステップＳ５９１，Ｓ５９４，Ｓ５９９，図１７のステップＳ５９９１を順次実行する。ステップＳ５９９１では、変数ｓの示す状態ｓ0は初期状態ではあるものの、テスト対象アプリケーションを再起動して直後に表示されたＧＵＩではないため、入力された状態遷移グラフ利用フラグの値をｔｒｕｅとした場合、ステップＳ５９９２へと進む。ステップＳ５９９２ではこれまでの状態遷移グラフ＜Ｓ，Ｔ＞上で未操作のＧＵＩ要素を持つ状態へのパスを探索する。ここでは、状態ｓ0から状態ｓ1へのパスを探索するものとする。このときの状態遷移グラフは図２５のようになり、パスｐとしてｔ0ｔ3が取得できる。ステップＳ５９９４，Ｓ５９９５，Ｓ５９９６，Ｓ５９９７へと進み、状態遷移ｔ0のＧＵＩ要素メニュークリックを自動操作する。このとき終了メニューのチェックが外れている状態であるため、ｔ0と同様のＧＵＩの遷移が発生せず、状態ｓ2ではなく状態ｓ1へと遷移する。ステップＳ５９９８，Ｓ５９９９で変数ｓに状態ｓ1を代入し、このとき状態遷移（ｓ0，メニュークリック，ｓ1）をｔ11と置くと、実行パスπの末尾にｔ11を追加し、状態遷移の集合Ｔにｔ11を追加する。変数ｓの示す状態ｓ1においては未操作のＧＵＩ要素である終了メニュークリックが存在するため、ステップＳ５９９１０から図１５のステップＳ５１へと戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２６の（Ｋ）に示す。
【００６７】
変数ｓの示す状態ｓ1は集合Ｓに含まれており、かつ未操作のＧＵＩ要素が存在するため、図１５のＳ５１，Ｓ５７，Ｓ５９，図１６のＳ５９１，Ｓ５９４，Ｓ５９５，Ｓ５９６，Ｓ５９７，Ｓ５９８へと進み、状態遷移ｔ7のＧＵＩ要素である終了メニュークリックが自動操作されＧＵＩが状態ｓ2に遷移する。よって変数ｓに状態ｓ2が代入され、図１５のステップＳ５１へと戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２６の（Ｌ）に示す。
【００６８】
変数ｓの示す状態ｓ2は集合Ｓに含まれており、かつ未操作のＧＵＩ要素が存在しないため、図１５のステップＳ５１，Ｓ５７，Ｓ５９，図１６のステップＳ５９１，Ｓ５９４，Ｓ５９９へと進み、図１７のステップＳ５９９１が実行される。変数ｓが状態ｓ0ではなく、状態遷移グラフ利用フラグがｔｒｕｅであるためステップＳ５９９２へと進み、状態遷移グラフ上の状態ｓ2から未操作のＧＵＩ要素を持つ状態ｓ4へのパスｐを探索する。ここでは、状態遷移グラフは図２７のようになっているため、パスｐとしてｔ2ｔ8を得ることができる。続く、ステップＳ５９９４，Ｓ５９９５，Ｓ５９９６，Ｓ５９９７，Ｓ５９９８，Ｓ５９９９，Ｓ５９９１０を繰り返すと、状態遷移ｔ2のＧＵＩ要素であるメニュークリックを自動操作しＧＵＩが状態ｓ0へと遷移し、さらに状態遷移ｔ8のＧＵＩ要素である実行ボタンクリックを自動操作すると、ＧＵＩは状態ｓ4ではなく状態ｓ3へと遷移する。これは実行ボタンを操作する前に状態ｓ2を経由しており終了メニューがチェック済みのためである。変数ｓに状態ｓ3を代入すると、状態ｓ3では未操作のＧＵＩ要素が存在するため、ステップＳ５９９１０から図１５のステップＳ５１へと戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２８の（Ｍ）に示す。
【００６９】
変数ｓの示す状態ｓ3は集合Ｓに含まれており、かつ未操作のＧＵＩ要素が存在するため、図１５のステップＳ５１，Ｓ５７，Ｓ５９，図１６のステップＳ５９１，Ｓ５９４，Ｓ５９５，Ｓ５９６，Ｓ５９７，Ｓ５９８へと進み、状態遷移ｔ5のＧＵＩ要素であるＮｏボタンクリックが自動操作されＧＵＩが状態ｓ0に遷移する。よって変数ｓに状態ｓ0が代入され、図１５のステップＳ５１へと戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図２８の（Ｎ）に示す。
【００７０】
変数ｓの示す状態ｓ0は集合Ｓに含まれており、かつ未操作のＧＵＩ要素が存在しないため、図１５のステップＳ５１，Ｓ５７，Ｓ５９，図１６のステップＳ５９１，Ｓ５９４，Ｓ５９９へと進み、図１７のステップＳ５９９１が実行される。変数ｓはテスト対象アプリケーションを再起動した直後の状態ｓ0ではなく、状態遷移グラフ利用フラグがｔｒｕｅであるためステップＳ５９９２へと進み、状態遷移グラフ上の状態ｓ0から未操作のＧＵＩ要素を持つ状態ｓ4へのパスｐを探索する。ここでは、状態遷移グラフは図２９のようになっているため、パスｐとしてｔ8を得ることができる。続くステップＳ５９９４，Ｓ５９９５，Ｓ５９９６，Ｓ５９９７，Ｓ５９９８，Ｓ５９９９，Ｓ５９９１０によって、状態遷移ｔ8のＧＵＩ要素である実行ボタンクリックを自動操作すると、ＧＵＩは状態ｓ4ではなく状態ｓ3へと遷移する。これは実行ボタンを操作する前に状態ｓ2を経由しており終了メニューがチェック済みのためである。変数ｓに状態ｓ3を代入すると、状態ｓ3ではＧＵＩ要素が存在しないため、ステップＳ５９９１０からステップＳ５９９５へと戻り、パスに含まれる状態遷移すべてに対して処理を実行したため、図１６のステップＳ５９２に戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図３０の（Ｏ）に示す。
【００７１】
図１６のステップＳ５９２，Ｓ５９３では、起動ファイルを実行しアプリケーションを再起動し、ＧＵＩの初期状態であるｓ0を表示装置に表示する。さらに変数ｓに状態ｓ0を代入し、図１５のステップＳ５１へと戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図３０の（Ｐ）に示す。ただし、状態遷移の集合は図３０の（Ｏ）と等しいため省略する。
【００７２】
変数ｓの示す状態ｓ0が操作前の状態で、操作後の状態がＴＢＤである状態遷移が存在しないため、図１５のステップＳ５１，Ｓ５７，Ｓ５９，図１６のステップＳ５９１，Ｓ５９４，Ｓ５９９と進み、図１７のステップＳ５９９１が実行される。変数ｓの示す状態ｓ0が、テスト対象アプリケーション再起動直後の状態であるため、ステップＳ５９９３へと進む。ステップＳ５９９３では実行パス集合探索部９によって実行パスの集合Ｐおよび実行パスπから未操作へのＧＵＩ要素が存在する状態へのパスｐが探索される。ここでは状態ｓ0から状態ｓ4へのパスを探索すると、図３１に示すように、ｐ＝ｔ0ｔ3ｔ6ｔ8が抽出される。ステップＳ５９９４，Ｓ５９９５へと進みステップＳ５９９５からステップＳ５９９１０を繰り返し実行して、パスに含まれる状態遷移のＧＵＩ要素を先頭から順次、操作することによって、ＧＵＩは状態ｓ4へ遷移する。変数ｓが示す状態ｓ4では未操作のＧＵＩ要素が存在するためステップＳ５９９１０から図１５のステップＳ５１へと戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図３０の（Ｑ）に示す。ただし、状態遷移の集合は図３０の（Ｏ）と等しいため省略する。
【００７３】
本発明では、ステップＳ５９９１にて変数ｓの示す状態が、テスト対象アプリケーション再起動直後の状態である場合にはステップＳ５９９３に進み、実行パスの集合Ｐと実行パスπから未操作のＧＵＩ要素を持つ状態へのパスを探索する。ここでは非特許文献２と同様に状態遷移グラフ＜Ｓ，Ｔ＞から同様のパスを探索する場合を考える。このときの状態遷移グラフは図２９のようになるため、例えばパスｐとしてｔ8が抽出される。表示装置に表示されているＧＵＩはテスト対象アプリケーションを再起動直後の状態であり、終了メニューがチェック済みの状態である。よって、ｔ8のＧＵＩ要素である実行ボタンを操作してもＧＵＩは状態ｓ4ではなくｓ3へ遷移してしまう。結果として、どんなに処理を繰り返しても状態ｓ4の未操作のＧＵＩ要素を操作することができず、取得する状態遷移グラフは状態や遷移の欠けが多いものになってしまう。本発明では、変数ｓの示す状態がテスト対象アプリケーション再起動直後の状態である場合には、実行パスの集合Ｐと実行パスπから抽出した未操作のＧＵＩ要素を持つ状態へのパスに沿ってＧＵＩ要素を操作する。それによって確実に未操作のＧＵＩ要素を持つ状態へＧＵＩを変化させ未操作のＧＵＩ要素を漏れなく自動操作することができ、欠けのない状態遷移グラフを取得することができる。
【００７４】
変数ｓの示す状態ｓ4において、これ以降はステップＳ５１，Ｓ５７，Ｓ５９，図１６のステップＳ５９１，Ｓ５９４，Ｓ５９５，Ｓ５９６，Ｓ５９７，Ｓ５９８を実行し、状態ｓ4において未操作である終了ボタンクリックを操作してＧＵＩの状態はｓ5へと遷移する。変数ｓは状態ｓ5を示し図１５のステップＳ５１へと戻る。このときのＧＵＩの状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐ、実行パスπを図３２の（Ｒ）に示す。
【００７５】
変数ｓの示す状態ｓ5において図１５のステップＳ５１を実行すると、集合Ｓに含まれており、状態遷移の集合Ｔには、操作後の状態がＴＢＤである状態遷移は存在しない。よって、ステップＳ５１，Ｓ５７，Ｓ５８へと進み、記憶装置にＧＵＩ状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐと実行パスπが記録される。最終的に記憶装置に記録されるＧＵＩ状態の集合Ｓ、状態遷移の集合Ｔ、実行パスの集合Ｐと実行パスπは図３２の（Ｒ）となる。
【００７６】
このようにＧＵＩの状態に対して網羅的に操作を実施し、精密な状態遷移グラフを取得することができる。
【符号の説明】
【００７７】
１…入力装置、２…コンピュータ本体、３…記憶装置、４…表示装置、５…網羅操作制御部、６…ＧＵＩ状態取得部、７…ＧＵＩ自動操作部、８…状態遷移グラフ探索部、９…実行パス集合探索部
【図１】
2014044615.tif 000003
【図２】
2014044615.tif 000004
【図３】
2014044615.tif 000005
【図４】
2014044615.tif 000006
【図５】
2014044615.tif 000007
【図６】
2014044615.tif 000008
【図７】
2014044615.tif 000009
【図８】
2014044615.tif 000010
【図９】
2014044615.tif 000011
【図１０】
2014044615.tif 000012
【図１１】
2014044615.tif 000013
【図１２】
2014044615.tif 000014
【図１３】
2014044615.tif 000015
【図１４】
2014044615.tif 000016
【図１５】
2014044615.tif 000017
【図１６】
2014044615.tif 000018
【図１７】
2014044615.tif 000019
【図１８】
2014044615.tif 000020
【図１９】
2014044615.tif 000021
【図２０】
2014044615.tif 000022
【図２１】
2014044615.tif 000023
【図２２】
2014044615.tif 000024
【図２３】
2014044615.tif 000025
【図２４】
2014044615.tif 000026
【図２５】
2014044615.tif 000027
【図２６】
2014044615.tif 000028
【図２７】
2014044615.tif 000029
【図２８】
2014044615.tif 000030
【図２９】
2014044615.tif 000031
【図３０】
2014044615.tif 000032
【図３１】
2014044615.tif 000033
【図３２】
2014044615.tif 000034