(57)【特許請求の範囲】
【請求項１】
ＧＵＩコンポーネントの集合を含むウインドウの集合で構成される表示画面を備えた検査対象ソフトウェアの当該画面中の任意の操作可能なＧＵＩコンポーネントに対する操作によって発生する当該画面の当該操作前後における変化である画面遷移が、当該検査対象ソフトウェアのバージョン又はその動作環境の変更の前後を通じて同一であることを確認するためのテストである画面遷移の回帰テストを行うための、画面の状態に関する情報の集合と画面遷移に関する情報の集合とからなる画面遷移グラフを、コンピュータを用いて自動生成する方法であって、
当該コンピュータが、
入力装置から入力された起動スクリプトにより検査対象ソフトウェアを起動する第１のステップと、
入力装置から入力されたＧＵＩコンポーネントの属性変数の集合に基づいて、検査対象ソフトウェアの画面の状態に関する情報を取得する第２のステップと、
前記取得した画面の状態に関する情報から、過去に表示されたことのあるＧＵＩコンポーネントも含めて操作可能な全てのＧＵＩコンポーネントを自動操作の対象とするＧＵＩコンポーネントとして取得する第３のステップと、
前記取得した操作可能なＧＵＩコンポーネントのうち、未操作のＧＵＩコンポーネントを自動操作し、画面遷移に関する情報を生成する第４のステップと、
現在の画面が既出の画面と同一の場合において未操作のＧＵＩコンポーネントが存在しないときは、現在の画面から未操作のＧＵＩコンポーネントを有する画面への経路を探索して自動操作する、あるいは入力装置から入力された再起動スクリプトにより検査対象ソフトウェアを再起動する第５のステップと、
前記画面の状態に関する情報の集合と画面遷移に関する情報の集合とからなる画面遷移グラフを記憶装置に保存する第６のステップと、を具備する
ことを特徴とする画面遷移グラフの自動生成方法。
【請求項２】
請求項１に記載の画面遷移グラフの自動生成方法において、
前記第２のステップは、
入力装置から入力された属性変数に関する情報を取得し、表示画面におけるＧＵＩコンポーネントの状態を決定し、ウインドウの状態をそのウインドウに含まれる前記ＧＵＩコンポーネントの状態の集合で構成し、画面の状態を検査対象ソフトウェアが表示する前記ウインドウの状態の集合で構成する
ことを特徴とする画面遷移グラフの自動生成方法。
【請求項３】
請求項１に記載の画面遷移グラフの自動生成方法において、
前記第４のステップは、
画面の状態に関する情報を取得した画面が新規の画面の場合には、当該画面の状態に関する情報から操作可能なＧＵＩコンポーネントを抽出し、その中から１つを選択して自動操作するステップと、
画面の状態に関する情報を取得した画面が既出の画面の場合には、当該画面の状態に関する情報から未操作であるＧＵＩコンポーネントを選択して自動操作するステップと、
操作前の画面の状態、操作対象ＧＵＩコンポーネントおよび操作後の画面の状態の情報で表される画面遷移に関する情報を生成するステップとを具備する
ことを特徴とする画面遷移グラフの自動生成方法。
【請求項４】
請求項１に記載の画面遷移グラフの自動生成方法において、
前記第５のステップは、
画面の状態に関する情報の集合と画面遷移に関する情報の集合とからなる画面遷移グラフに対して、現在の画面の状態から未操作のＧＵＩコンポーネントを有する画面の状態への経路を探索するステップと、
発見した経路に沿ってＧＵＩコンポーネントを自動操作し、現在の画面を未操作のＧＵＩコンポーネントを有する画面に変化させるステップと、
経路が発見できない場合にのみ、再起動スクリプトにより検査対象ソフトウェアを再起動させるステップとを具備する
ことを特徴とする画面遷移グラフの自動生成方法。
【請求項５】
ＧＵＩコンポーネントの集合を含むウインドウの集合で構成される表示画面を備えた検査対象ソフトウェアの当該画面中の任意の操作可能なＧＵＩコンポーネントに対する操作によって発生する当該画面の当該操作前後における変化である画面遷移が、当該検査対象ソフトウェアのバージョン又はその動作環境の変更の前後を通じて同一であることを確認するためのテストである画面遷移の回帰テストを行うための、画面の状態に関する情報の集合と画面遷移に関する情報の集合とからなる画面遷移グラフを自動生成する装置であって、
ＧＵＩコンポーネントの属性変数の集合に基づいて、検査対象ソフトウェアの画面の状態に関する情報を取得する画面状態取得装置と、
検査対象ソフトウェアの画面に対して、ＧＵＩコンポーネントを自動操作する画面自動操作装置と、
現在の画面から未操作のＧＵＩコンポーネントを有する画面への経路を探索する経路探索装置と、
画面の状態に関する情報の集合と画面遷移に関する情報の集合とからなる画面遷移グラフを記録する記憶装置と、
入力装置から入力された起動スクリプトにより検査対象ソフトウェアを起動し、入力装置から入力されたＧＵＩコンポーネントの属性変数の集合を画面状態取得装置に渡し、取得した画面の状態に関する情報を受け取って過去に表示されたことのあるＧＵＩコンポーネントも含めて操作可能な全てのＧＵＩコンポーネントを自動操作の対象とするＧＵＩコンポーネントとして取得し、これを画面自動操作装置に与えて未操作のＧＵＩコンポーネントを自動操作させるとともに、画面遷移に関する情報を生成し、現在の画面が既出の画面と同一の場合において未操作のＧＵＩコンポーネントが存在しないときは、経路探索装置により現在の画面から未操作のＧＵＩコンポーネントを有する画面への経路を探索させ、その結果を画面自動操作装置に与えて自動操作させ、あるいは入力装置から入力された再起動スクリプトにより検査対象ソフトウェアを再起動し、さらに前記取得した画面の状態に関する情報の集合と前記生成した画面遷移に関する情報の集合とからなる画面遷移グラフを記憶装置に保存する制御装置とを少なくとも備えた
ことを特徴とする画面遷移グラフの自動生成装置。                                                                              
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの画面遷移に対する回帰テストの自動化技術に関する。
【背景技術】
【０００２】
最近のソフトウェアは、その大部分がグラフィカル・ユーザ・インタフェース（以下、ＧＵＩ）を備えている。ＧＵＩの多くは、Ｗｅｂアプリケーションに代表されるウインドウシステムを採用しており、ウインドウ内のボタンやテキストボックスなどのＧＵＩコンポーネントを操作することで、ソフトウェアの表示画面が変化する。これを画面遷移と呼ぶ。ここでの操作とは、具体的にはユーザ（オペレータ）によるマウスクリックやキーボード入力などのことである。
【０００３】
ＧＵＩコンポーネントへの操作による画面遷移が期待どおりに起こることを検査することは、ソフトウェア開発において必須の作業である。もし、このような操作による変化後の画面が期待どおりの画面ではなかった場合、これを画面遷移のエラーと言う。
【０００４】
画面遷移のエラーを発見するためには、ソフトウェアの画面に対するあらゆる操作手順を実行し、操作後の画面を確認する必要がある。しかし、ソフトウェアの画面は多くのウインドウやＧＵＩコンポーネントで構成されているため、その操作手順の組み合わせは膨大な数に及ぶ。よって、この確認を人手で行うと、その作業は膨大な工数を必要とする。
【０００５】
ソフトウェアのバージョンアップ、ソフトウェアが動作するハードウェアやＯＳなどの動作環境の更改に伴い、これらバージョンアップの前後で、ソフトウェアの画面遷移に変化がない（但し、ソフトウェアのバージョンアップについては、当該バージョンアップと無関係な部分に関して）ことを確認することを画面遷移の回帰テストと呼ぶ。特に、企業の情報システムなどにおけるミッションクリティカルシステムにおいては重要な検査項目であり、自動化により検査の工数を削減することは、非常に大きな関心事となっている。
【０００６】
［従来技術］
画面遷移の自動検査を実施するための従来技術としては、形式検証やテスト設計技術など数多く提案されている。
【０００７】
例えば、非特許文献１においては、事前に、Ｗｅｂアプリケーションにおける画面遷移の仕様である画面遷移グラフとＵＭＬ（Unified Modeling Language）のアクティビティ図やクラス図で記述されたプログラムの仕様とが与えられたとき、両者の整合性を自動検査する手法が提案されている。
【０００８】
また、非特許文献２においては、画面遷移の回帰テストの自動化技術として、ユーザの操作の履歴を活用する技術が提案されている。これはバージョンアップ前に、事前に検査対象ソフトウェアのＧＵＩへのユーザ操作の手順をモニタリングおよび記録しておき、これをテストケースとして利用する。つまり、バージョンアップ後において、ソフトウェアのＧＵＩを自動操作するプログラムに、その記録された操作手順に沿って検査対象ソフトウェアを自動操作させる。このように、バージョンアップ前後で、操作手順に対する検査対象ソフトウェアの画面遷移を比較することで、回帰テストを自動化することができる。これ以降、コンピュータ上でＧＵＩを自動操作するプログラムをエージェントと呼ぶ。
【０００９】
上記の非特許文献１の技術では、画面遷移グラフやＵＭＬなどの形式的な仕様記述が必要となり、また非特許文献２の技術では、操作履歴の蓄積が技術適用のために必要となるが、これらがあれば、テストケース設計や検査の実施コストを大きく削減することが可能になる。
【００１０】
一方、非特許文献３の技術では、操作履歴を必要とせずに、検査対象のソフトウェアさえあれば回帰テストの自動化が可能である。この技術は、動作している検査対象ソフトウェアの画面から操作可能なＧＵＩコンポーネントの集合をエージェントが抽出し、エージェント内部のスタックに追加する。操作可能なＧＵＩコンポーネントとは、具体的にはボタンやコンボボックス、メニューボタンなどのことであり、単に表示しているだけのラベルなどは対象外である。例えば、図１のようにＧＵＩコンポーネントとして、ボタンｃ1とラベルｃ2を含むウインドウで構成される画面を、検査対象ソフトウェアの初期画面とした場合、エージェントは、操作可能なＧＵＩコンポーネントの集合としてＯ1＝｛ｃ1｝を抽出し、内部のスタックに登録する。このときのスタックの状態を図２に示す。
【００１１】
次に、抽出したＧＵＩコンポーネントの集合に含まれる未操作のＧＵＩコンポーネントを１つ選択して、エージェントがそのＧＵＩコンポーネントを自動操作する。これによって、検査対象ソフトウェアの画面が変化する。例えば、図１の画面の例の場合、操作可能なＧＵＩコンポーネントの集合Ｏ1に含まれるＧＵＩコンポーネントのボタンｃ1が、エージェントにより自動的にクリックされ、画面遷移が発生する。このとき、操作後の画面において、ＧＵＩコンポーネントのボタンｃ3とｃ4を含む新規のウインドウが表示されるものとすると、その画面は、例えば図３に示すようになる。
【００１２】
操作後の画面に対しても同様に、エージェントは、新規に表示された操作可能なＧＵＩコンポーネントの集合を抽出し、内部のスタックに加えるとともに、その集合に含まれる未操作のＧＵＩコンポーネントを自動操作する。即ち、図３の画面に対しては、操作可能なＧＵＩコンポーネントがｃ1，ｃ3，ｃ4と３つあるが、エージェントは、新規に表示されたＧＵＩコンポーネントのボタンｃ3，ｃ4からなる集合Ｏ2＝｛ｃ3，ｃ4｝を内部のスタックに追加する。このときの内部のスタックの状態を図４に示す。そして、集合Ｏ2の要素であるＧＵＩコンポーネントのボタンｃ3，ｃ4はどちらも未操作なので、エージェントはどちらか一方を選択して自動操作する。なお、図４のＧＵＩコンポーネントのボタンｃ1に付された丸印は、便宜上、当該ＧＵＩコンポーネントに対する操作が実施済であることを表すものである。
【００１３】
操作後の画面が、自動操作の過程で過去に表示された画面と同一で、新規に表示されるＧＵＩコンポーネントがない場合、エージェントは、操作後の画面から操作可能なＧＵＩコンポーネントの集合として空集合を抽出し、この集合をスタックに追加する。この場合は、自動操作をする対象となるＧＵＩコンポーネントが、抽出した操作可能なＧＵＩコンポーネントの集合に存在しないため、エージェントは検査対象ソフトウェアを再起動し、表示画面を検査対象ソフトウェアの初期画面にする。さらに追加した操作可能なＧＵＩコンポーネントの集合をスタックから削除する。
【００１４】
例えば、図３の画面に対して、エージェントが未操作のＧＵＩコンポーネントのボタンｃ3を選択して自動操作した結果、画面が変化しなかったとする。このとき、新規に表示されるＧＵＩコンポーネントが存在しないため、エージェントは、操作可能なＧＵＩコンポーネントの集合Ｏ3を空集合として内部のスタックに追加する。このときのスタックの状態を図５に示す。さらにエージェントは、検査対象ソフトウェアを再起動し、表示画面を図１の初期画面に戻し、ＧＵＩコンポーネントの集合Ｏ3をスタックから削除する。このときのスタックの状態を図６に示す。
【００１５】
検査対象ソフトウェアを再起動した後は、エージェントは、検査対象ソフトウェアの画面を初期画面から未操作のＧＵＩコンポーネントが表示されている画面に変化させた後、未操作のＧＵＩコンポーネントを自動操作する。
【００１６】
そのために、まず、エージェント内部のスタックに追加されている操作可能なＧＵＩコンポーネントの集合を、より新しく追加された集合から順に検索し、未操作のＧＵＩコンポーネントを求める。例えば、図６のスタックの状態においては、操作可能なＧＵＩコンポーネントの集合Ｏ2，Ｏ1と順次検索していく。ここでは、操作可能なＧＵＩコンポーネントの集合Ｏ2の要素であるＧＵＩコンポーネントのボタンｃ4を発見することができる。
【００１７】
次に、内部のスタックに対して、先ほど発見した未操作のＧＵＩコンポーネントを要素とする操作可能なＧＵＩコンポーネントの集合より以前にスタックに追加された集合を順次検索し、操作済のＧＵＩコンポーネントを抽出する。例えば、図６の例では、発見した未操作のＧＵＩコンポーネントのボタンｃ4が操作可能なＧＵＩコンポーネントの集合Ｏ2の要素なので、それより前にスタックに追加された操作可能なＧＵＩコンポーネントの集合Ｏ1から、操作済のＧＵＩコンポーネントのボタンｃ1を抽出する。
【００１８】
さらに、抽出した操作済のＧＵＩコンポーネントを初期画面から順次、自動操作することで、発見した未操作のＧＵＩコンポーネントが表示される画面に変化させることができ、変化後の画面に対して未操作のＧＵＩコンポーネントを自動操作できるようになる。図６の場合には、図１の初期画面に対して、エージェントが抽出した操作済のＧＵＩコンポーネントのボタンｃ1を自動操作し、図３の画面に変化させる。そして図３の画面に対して、発見した未操作のＧＵＩコンポーネントのボタンｃ4を自動操作する。
【００１９】
以上の処理を繰り返すことで、操作履歴を用いずとも、未操作のＧＵＩコンポーネントを網羅的に自動操作することができるようになる。バージョンアップ前後で、この技術による網羅的な自動操作を実施し、検査対象ソフトウェアの画面遷移を比較することで、回帰テストを自動化できる。
【発明の概要】
【発明が解決しようとする課題】
【００２０】
非特許文献１の検査技術は、画面遷移の検査を自動化するために、画面遷移グラフやＵＭＬのアクティビティ図のような形式的な仕様が必要になる。しかしながら、現実のソフトウェア開発においては、必ずしも形式的な仕様が作成されるわけではなく、仕様が自然言語で記述されている場合も数多くある。この場合、自然言語で記述された仕様から形式的な仕様を人手で作成しなければならない。この作業を実施するためには、正確な仕様の理解や、形式的な仕様を記述するための専門的な知識、開発経験などが必要となるため、検査自体は自動化できても、形式的仕様を作成するために膨大な工数を要する場合がある。また、そのような専門知識を有する人材が開発プロジェクト内に存在しないときには、そもそもこの作業を実施できず、この技術を適用できない。よって、形式的な仕様の作成を伴わずに自動検査を実現するという課題を解決する必要がある。
【００２１】
また、非特許文献２の検査技術は、検査対象ソフトウェアのＧＵＩに対するユーザの操作履歴を記録し、それをテストケースとしてエージェントによりＧＵＩを自動操作することで、検査の自動化を実現している。これらの技術においては、非特許文献１のような形式的な仕様を作成する作業は不要になるが、代わりにユーザの操作履歴を蓄積することが必要になる。さらにその蓄積された操作手順に対する検査しか実施できず、それ以外の手順で発生する画面遷移のエラーは検出できない。よって、より検査の品質を高めるためには、蓄積された操作手順以外の画面遷移も自動検査可能にするという課題を解決しなければならない。
【００２２】
さらにまた、非特許文献３の検査技術は、エージェントが検査対象ソフトウェアの画面から操作可能なＧＵＩコンポーネントを抽出し、その中から未操作のＧＵＩコンポーネントを自動操作することによって、検査を自動化することができる。この技術では、形式的な仕様の作成は不要で、過去にユーザが操作していなかった操作手順についても検査が可能になる。しかし、以下の２点の課題がある。
【００２３】
まず、１点目は検査の網羅性である。つまり、非特許文献３の技術では、自動操作した後の操作後の検査対象ソフトウェアの画面から、操作可能なＧＵＩコンポーネントの集合を抽出するときに、その操作によって新規に表示されたＧＵＩコンポーネントのみを抽出し、自動操作の対象としている。よって、操作前の画面において表示され、操作後の画面においても表示され且つ操作可能なＧＵＩコンポーネントは自動操作の対象外となっている。即ち、操作可能な同一のＧＵＩコンポーネントが表示されるいくつかの異なる画面があったとき、非特許文献３の技術では、その画面のどれか１つから、そのＧＵＩコンポーネントを自動操作するが、それ以外の画面からは自動操作しないことを意味する。よって、自動操作しなかった画面においてそのＧＵＩコンポーネントを操作したときに、画面遷移エラーが発生するような場合、非特許文献３の技術では、その画面遷移エラーを発見できない可能性がある。
【００２４】
一般にソフトウェアの画面遷移は、ソフトウェア内部のメモリなどの状態によって決定されるため、同一のＧＵＩコンポーネントに対する操作であっても、画面が異なればその画面遷移が変わる場合がある。よって、異なる画面ごとに未操作のＧＵＩコンポーネントを網羅的に操作するという課題を解決する必要がある。
【００２５】
前述の非特許文献３における従来技術の説明における例でも述べたが、例えば、検査対象ソフトウェアの図１の初期画面に対して、エージェントがＧＵＩコンポーネントのボタンｃ1を自動操作し、図３の画面に変化したときを考える。なお、内部のスタックの状態は図２とする。このとき、エージェントは、図３の画面の操作可能なＧＵＩコンポーネントのボタンｃ1，ｃ3，ｃ4と、既に図１の初期画面に対して抽出している操作可能なＧＵＩコンポーネントの集合Ｏ1＝｛ｃ1｝との差分をとり、操作可能なＧＵＩコンポーネントの集合Ｏ2＝｛ｃ3，ｃ4｝を内部スタックに追加する（図４）。エージェントはＧＵＩコンポーネントの集合Ｏ2から次に操作するＧＵＩコンポーネントを選択するため、図３の画面からは、ＧＵＩコンポーネントのボタンｃ3もしくはｃ4が自動操作されることになり、ＧＵＩコンポーネントのボタンｃ1は自動操作の対象外となる。よって、図４の内部スタックの状態では、エージェントは、図３の画面でＧＵＩコンポーネントのボタンｃ1を自動操作することができず、その画面遷移にエラーがあった場合は検出できない。
【００２６】
仮に、非特許文献３で、単純にそのときの画面上で操作可能な全てのＧＵＩコンポーネントからなる集合としてＯ2＝｛ｃ1，ｃ3，ｃ4｝を内部スタックに追加すれば、確かに図３の画面においてもＧＵＩコンポーネントのボタンｃ1を自動操作することが可能になる。しかし、この場合は、自動操作の過程で過去に表示された画面が再表示され、新規に表示されるＧＵＩコンポーネントがないときでも、操作可能なＧＵＩコンポーネントの集合は空集合としてスタックに登録されなくなる。よって、既にその画面において操作可能なＧＵＩコンポーネントの全てが操作済であったとしても、自動操作を繰り返し行ってしまい、エージェントが停止しない場合が発生してしまう。
【００２７】
２点目は検査の効率性である。一般にソフトウェアにおけるテスト期間は限られており、自動化技術においては、効率良く検査できることが必須の条件になる。非特許文献３の技術では、エージェントは、検査対象ソフトウェアの画面から新規に表示された操作可能なＧＵＩコンポーネントを抽出し、それらが全て操作済のＧＵＩコンポーネントだった場合に、検査対象ソフトウェアを再起動する。しかし、ソフトウェアの再起動は、単純にコマンド１行で実施でき、短時間で完了するものもあれば、複雑な手続きになる場合もある。企業などの情報システムのソフトウェアの場合、大抵はデータベースなどと連携しており、ソフトウェアの再起動の際は、データベースの初期化などで数時間を要するものもある。よって、検査対象ソフトウェアの再起動の回数が増加すると、自動検査の効率が悪化するため、再起動回数を減少させるという課題を解決する必要がある。
【００２８】
前述の非特許文献３に対する従来技術の説明における例でも述べたが、検査対象ソフトウェアの表示画面が図３で、エージェントの内部スタックの状態が図４のときに、ＧＵＩコンポーネントのボタンｃ3を自動操作し、画面が変化しなかった場合を考える。
【００２９】
このとき、新規に表示された操作可能なＧＵＩコンポーネントが存在しないため、図５のように操作可能なＧＵＩコンポーネントの集合Ｏ3＝｛｝を内部スタックに追加し、集合Ｏ3から選択可能なＧＵＩコンポーネントがないため検査対象ソフトウェアを再起動する。エージェントは再起動後に、図１の初期画面から、過去にエージェントが操作した手順に従ってＧＵＩコンポーネントのボタンｃ1を操作し、再度、検査対象ソフトウェアを図３の画面にした後、未操作のＧＵＩコンポーネントのボタンｃ4を操作することになる。
【００３０】
しかし、ここでの検査対象ソフトウェアの再起動は、未操作のＧＵＩコンポーネントのボタンｃ4を操作するためには、本来不要な処理である。つまり、図３の画面において、エージェントがＧＵＩコンポーネントのボタンｃ3に対して自動操作し、画面が変化しなかった場合、検査対象ソフトウェアを再起動することなく、そのまま未操作のＧＵＩコンポーネントのボタンｃ4を自動操作すれば良く、これによって再起動に伴う時間を節約することができる。
【課題を解決するための手段】
【００３１】
本発明では、非特許文献１のように形式的な仕様の作成や、非特許文献２のようにユーザの過去の操作履歴を必要とせずに、検査対象ソフトウェアが動作する環境のみで、ソフトウェアのバージョンアップなどに伴う画面遷移の回帰テストを自動化を実現する。
【００３２】
本発明では、コンピュータによって、検査対象ソフトウェアを起動し、当該検査対象ソフトウェアの現在の表示画面を構成するウインドウの集合と、そのウインドウを構成するＧＵＩコンポーネントの集合、つまり画面の状態に関する情報を取得する。さらに取得した画面の状態に関する情報から、過去に表示されたことのあるＧＵＩコンポーネントも含めて操作可能な全てのＧＵＩコンポーネントを取得する。
【００３３】
本発明における操作可能なＧＵＩコンポーネントとは、マウスのクリック操作が可能なＧＵＩコンポーネントに限定される。例えば、ボタン、コンボボックス、チェックボックス、メニューボタンなどである。テキストボックスのように文字列入力操作が可能なＧＵＩコンポーネントは対象外とする。
【００３４】
次に、本発明では、コンピュータによって、前記取得した操作可能なＧＵＩコンポーネントの中から、その画面において未操作のＧＵＩコンポーネントを選択し、選択したＧＵＩコンポーネントを自動操作する。
【００３５】
非特許文献３においては、表示画面から取得する操作可能なＧＵＩコンポーネントは、新規に表示されたＧＵＩコンポーネントに限られていた。そのため、表示画面において操作可能でも、自動操作の過程で過去に表示したことがあるＧＵＩコンポーネントは、取得対象外であり、エージェントは自動操作することができなかった。本発明では、現在の表示画面において操作可能な全てのＧＵＩコンポーネントを取得するため、過去に表示されていたＧＵＩコンポーネントも自動操作の対象とすることができ、非特許文献３の検査の網羅性を高めるという課題を解決することができる。
【００３６】
さらに、本発明では、コンピュータは、操作後の表示画面に対して前記同様に画面の状態に関する情報を取得し、元画面（操作前の画面）の状態、操作対象ＧＵＩコンポーネントおよび操作後の画面の状態の組で構成される画面遷移に関する情報を生成する。
【００３７】
コンピュータは、この操作後の表示画面に対して、画面の状態に関する情報および操作可能なＧＵＩコンポーネントの取得、未操作のＧＵＩコンポーネントの自動操作、画面遷移に関する情報の生成処理を繰り返す。これによって、生成された画面の状態に関する情報の集合と画面遷移に関する情報の集合とを記憶装置に保存し、画面遷移グラフを自動構築する。
【００３８】
上記の処理を繰り返す過程で、もし、表示画面から取得した操作可能なＧＵＩコンポーネントの集合に、その画面の状態において未操作のＧＵＩコンポーネントが存在しない場合、コンピュータは、保持している画面遷移グラフである画面の状態に関する情報の集合と画面遷移に関する情報の集合の中に、現在の画面の状態から未操作のＧＵＩコンポーネントを有する画面の状態への経路が存在するかを探索する。
【００３９】
経路が見つかれば、コンピュータは、その経路に示される操作の手順に従って、検査対象ソフトウェアの表示画面を自動操作し、表示画面を未操作のＧＵＩコンポーネントを有する画面の状態に変化させる。そして、その画面において、未操作のＧＵＩコンポーネントに対する自動操作、画面遷移に関する情報の生成、操作後の画面の状態に関する情報および操作可能なＧＵＩコンポーネントの取得処理を繰り返す。
【００４０】
もし経路が見つからなければ、検査対象ソフトウェアを再起動し、初期画面に対して、画面の状態に関する情報および操作可能なＧＵＩコンポーネントの取得、未操作のＧＵＩコンポーネントの自動操作、画面遷移に関する情報の生成処理を繰り返す。
【００４１】
非特許文献３では、このような画面の状態において未操作のＧＵＩコンポーネントが存在しない場合は、一律、検査対象ソフトウェアを再起動してしまっていた。本発明では、保持する画面遷移グラフにおいて、現在の画面の状態から未操作のＧＵＩコンポーネントが存在する画面の状態への経路が発見できた場合には、再起動を実施しない。これによって、検査対象ソフトウェアの再起動の回数を減らし、検査の効率化を実現するという課題を解決できる。
【００４２】
入力として、属性変数の集合Ａ＝｛ａ1，・・・ａk｝と、検査対象ソフトウェアの起動スクリプトおよび再起動スクリプトとが与えられた場合に、入力装置、記憶装置および表示装置を備えたコンピュータを用いて本発明の画面遷移グラフの自動生成を行う方法を、図７〜図９の処理フローを用いて説明する。
【００４３】
この手続きは、コンピュータに対する初期の入力として、属性変数の集合Ａを入力装置から与える。属性変数の集合Ａはｋ個の属性変数を持ち、Ａ＝｛ａ1，・・・ａk｝とする。但し、ｋ≧１である。また、同様に、検査対象ソフトウェアの起動スクリプトおよび再起動スクリプトを例えば、ファイル形式で与える。
【００４４】
この手続きは、最終的な処理結果として、画面遷移グラフのデータ表現形式である、画面の状態に関する情報の集合Ｇと画面遷移に関する情報の集合Ｔとを、図７のステップｓ９に示すように、記憶装置に出力する。
【００４５】
なお、以下では、「画面の状態に関する情報」を「画面の状態」と、また、「画面遷移に関する情報」を「画面遷移」と略記するものとする。
【００４６】
まず、コンピュータは、図７のステップｓ１のように、画面の状態の集合Ｇと、画面遷移の集合Ｔに空集合を設定する。さらに、入力された検査対象ソフトウェアの起動スクリプトを、前記コンピュータもしくは前記コンピュータにネットワークを介して接続された任意の動作環境上で実行して当該検査対象ソフトウェアを起動し、その初期画面を表示装置に表示する。
【００４７】
次に、図７のステップｓ２のように検査対象ソフトウェアの表示画面に対して、画面の状態を取得し、変数ｖに代入する。特に、表示画面が初期画面の場合は、取得した画面の状態をｇ0とする。ソフトウェアの多くは、ＧＵＩとしてウインドウシステムを採用しており、ソフトウェアの画面は、いくつかのウインドウから構成される。従って、コンピュータが表示画面から取得する画面の状態をｇとし、ウインドウ全体の有限集合をＷ、表示されているウインドウをｗ1，ｗ2，・・・ｗn∈Ｗとすると、コンピュータは、画面の状態をｇ＝｛ｗ1，ｗ2，・・・ｗn｝というウインドウの集合Ｗの部分集合として取得する。
【００４８】
ウインドウにはいくつかのＧＵＩコンポーネント（タイトルバーやラベル、ボタン、コンボボックス、テキストボックス）などが存在する。よって、取得する画面の状態における各ウインドウｗ∈Ｗは、ＧＵＩコンポーネント全体の有限集合をＣとし、ウインドウｗに所属するＧＵＩコンポーネントをｃ1，ｃ2，・・・ｃm∈Ｃとすると、ｗ＝｛ｃ1，ｃ2，・・・ｃm｝というＧＵＩコンポーネントの集合Ｃの部分集合となる。
【００４９】
ＧＵＩコンポーネントは、
・ラベル、ボタン、コンボボックス、タイトルバーなどのコンポーネントの種類
・コンポーネントの表示位置（絶対位置、相対位置など）
・コンポーネントの活性や非活性の状態
・ラベルの表示文字列やテキストボックスなどの設定文字列
・色や文字のサイズ
・キーボードフォーカスの状態
などに代表される様々な属性情報を有する。
【００５０】
本発明では、画面の状態におけるＧＵＩコンポーネントは、事前にコンピュータに入力として与えられた属性情報を表す変数（属性変数）に対する値の割り当ての組み合わせで定義する。属性変数の有限集合をＡ＝｛ａ1，・・・ａk｝とし、各属性変数の取り得る値の有限集合をＤとすると、ＧＵＩコンポーネントは、各変数に対する値の割り当て（ａ1＝ｄ1，・・・ａk＝ｄk）と表現する。但し、ｄ1，・・・ｄn∈Ｄとする。
【００５１】
例えば、図１０に示すように、１つのウインドウに２つＧＵＩコンポーネントが配置されている画面１および画面２を考える。画面１および画面２におけるウインドウをそれぞれｗ1，ｗ2、画面１におけるラベルとボタンのＧＵＩコンポーネントをそれぞれｃ1，ｃ2、画面２におけるラベルとボタンのＧＵＩコンポーネントをそれぞれｃ3，ｃ4とする。
【００５２】
このとき、画面１および画面２に対して、コンピュータが取得する画面の状態ｇ1，ｇ2はそれぞれ
ｇ1＝｛ｗ1｝＝｛｛ｃ1，ｃ2｝｝
ｇ2＝｛ｗ2｝＝｛｛ｃ3，ｃ4｝｝
のようになる。
【００５３】
ここで、属性変数の集合として、Ａ＝｛ａ1｝がコンピュータに与えられており、属性変数ａ1の取り得る値がＧＵＩコンポーネントの表示文字列である場合を考えると、
ｇ1＝｛｛ｃ1，ｃ2｝｝＝｛｛（ａ1＝画面１の例），（ａ1＝Ａ）｝｝
ｇ2＝｛｛ｃ3，ｃ4｝｝＝｛｛（ａ1＝画面１の例），（ａ1＝Ａ）｝｝
になり、属性変数の集合Ａのもとで、画面の状態ｇ1とｇ2は等しくなる。もし、属性変数の集合の中にＧＵＩコンポーネントの表示の絶対座標を表す変数を入れた場合には、画面の状態ｇ1とｇ2が異なる画面の状態として識別される。以上のように、コンピュータは、事前に与えられた属性変数の集合Ａに基づいて、検査対象ソフトウェアの画面の状態を取得する。
【００５４】
コンピュータは、表示画面の状態を取得すると、図７のステップｓ３のように、表示画面の状態を代入した変数ｖが、画面の状態の集合Ｇの要素であるかを調べる。もし、変数ｖが画面の状態の集合Ｇの要素ではない場合、新規に取得した画面の状態ということになるので、コンピュータは図８に示す手続きを実施し、画面の状態の集合Ｇと画面遷移の集合Ｔを更新する。
【００５５】
具体的には、図８のステップｓ３１では、まずコンピュータは、変数ｖが示す画面の状態を画面の状態集合Ｇに追加する。さらに、図８のステップｓ３２において、コンピュータは、変数ｖが示す画面の状態から操作可能な全てのＧＵＩコンポーネントを抽出し、その集合を変数Ｏに代入する。但し、ここでの操作可能なＧＵＩコンポーネントは、マウスクリック操作が可能なものを表し、例えば、ボタンやコンボボックス、チェックボックス、ラジオボタンなどが相当する。単なるラベルやテキストボックスのように文字列入力操作が可能なものは対象外とする。
【００５６】
続いて、図８のステップｓ３３〜ｓ３５によって、変数Ｏに代入された操作可能なＧＵＩコンポーネントの集合の各要素に対する画面遷移を生成し、画面遷移の集合Ｔに追加する。ここで、画面遷移は、元画面（操作前の画面）の状態、操作対象ＧＵＩコンポーネント、操作後の画面の状態の組で表現され、例えば、元画面の状態をｇ、操作対象ＧＵＩコンポーネントをｏ、操作後の画面の状態をｇ’とすると、（ｇ，ｏ，ｇ’）で表現する。但し、ｏ∈Ｏとする。
【００５７】
まず、図８のステップｓ３３で、コンピュータは、変数Ｏに代入した操作可能なＧＵＩコンポーネントの集合が空集合か判定し、空集合であれば図７のステップｓ４に進む。空集合でなければ、図８のステップｓ３４で変数Ｏから操作可能なＧＵＩコンポーネントを取り出し、そのＧＵＩコンポーネントを変数ｏに代入する。さらに、図８のステップｓ３５で、変数ｖが示す画面の状態と、変数ｏが示すＧＵＩコンポーネントに対して、画面遷移（ｖ，ｏ，ＴＢＤ）を生成し、画面遷移の集合Ｔに追加する。ここで、ＴＢＤは未決定を意味する定数であり、画面遷移（ｖ，ｏ，ＴＢＤ）は、変数ｖが示す画面の状態において変数ｏの示すＧＵＩコンポーネントの操作が未実施のため、操作後の画面の状態が未決定であることを意味している。このように、コンピュータは、図８のステップｓ３４，ｓ３５を、操作可能なＧＵＩコンポーネントの集合Ｏが空集合になるまで繰り返して画面の状態の集合Ｇと画面遷移の集合Ｔを更新し、図７のステップｓ４へ処理を進める。
【００５８】
図７のステップｓ３において、変数ｖの示す取得した画面の状態が、既に取得済で画面の状態の集合Ｇの要素であった場合、もしくは図８の手続きを完了した場合は、コンピュータは図７のステップｓ４を実施する。図７のステップｓ４では、変数ｖが示す取得した画面の状態において、未操作のＧＵＩコンポーネントを特定するための処理を実施する。即ち、画面遷移の集合Ｔの要素の中に、元画面が変数ｖの示す画面の状態で且つ操作後の画面の状態が定数ＴＢＤである画面遷移が存在するかを調べる。ここで、操作対象ＧＵＩコンポーネントを改めて変数ｏで表すと、そのような画面遷移はｔ＝（ｖ，ｏ，ＴＢＤ）と表現できる。
【００５９】
もし、条件に合致する画面遷移ｔが画面遷移の集合Ｔの要素に存在する場合は、図７のステップｓ５のように、コンピュータは、画面遷移の集合Ｔからその画面遷移ｔを取り出し、検査対象ソフトウェアの表示画面に対して、画面遷移ｔにおける変数ｏの示すＧＵＩコンポーネントを自動操作する。これによって、検査対象ソフトウェアの表示画面が変化する。検査対象ソフトウェアの表示画面が変化した後は、コンピュータは、図７のステップｓ６のように、操作後の表示画面の状態を取得し、変数ｖ’に代入する。このように、変数ｖの示す画面の状態において、変数ｏの示すＧＵＩコンポーネントを操作した場合の操作後の画面の状態が変数ｖ’として決定されるため、続く図７のステップｓ７においてコンピュータは、画面遷移ｔを（ｖ，ｏ，ｖ’）に更新して、画面遷移の集合Ｔに追加する。
【００６０】
コンピュータは、さらに変数ｖ’の示す画面の状態から、未操作のＧＵＩコンポーネントを自動操作するために、図７のステップｓ８において、変数ｖに変数ｖ’の示す画面の状態を代入し、図７のステップｓ３に戻って処理を繰り返す。これによって、コンピュータは、画面の状態に対する未操作のＧＵＩコンポーネントを自動操作し、網羅的に画面遷移を生成することができる。
【００６１】
もし、図７のステップｓ４において、画面遷移の集合Ｔの要素の中に、元画面が変数ｖの示す画面の状態で且つ操作後の画面の状態が定数ＴＢＤである画面遷移ｔが存在しない場合は、既にその画面の状態において、未操作のＧＵＩコンポーネントが存在しないことになるため、図９に示す手続きを実施する。
【００６２】
この場合、図９のステップｓ４１，ｓ４２において、コンピュータは、画面の状態の集合Ｇと画面遷移の集合Ｔからなる画面遷移グラフに対して、変数ｖの示す画面の状態から未操作のＧＵＩコンポーネントがある画面の状態への経路を探索する。ここでの経路とは、画面遷移の列ｔ1，ｔ2，ｔ3，・・・ｔnのことであり、以下の条件を全てを満たすものである。
・ｎは１以上の整数である。
・１≦ｉ≦ｎである任意のｉに対して、画面遷移ｔi＝（ｇi，ｏi，ｇi’）としたとき、元画面の状態ｇiおよび操作後の画面の状態ｇi’は定数ＴＢＤではない。
・１≦ｉ≦ｎ−１である任意のｉに対して、画面遷移ｔi＝（ｇi，ｏi，ｇi’）としたとき、画面遷移ｔiにおける操作後の画面の状態ｇi’と画面遷移ｔi+1の元画面の状態ｇi+1は等しい。
・画面遷移ｔ1＝（ｇ1，ｏ1，ｇ1’）とすると、元画面の状態ｇ1が変数ｖの示す画面の状態と等しい。
・画面遷移ｔn＝（ｇn，ｏn，ｇn’）とすると、操作後の画面の状態ｇn’が未操作のＧＵＩコンポーネントを有する。これは、画面の状態ｇn’を元画面の状態とし且つ操作後の画面の状態を定数ＴＢＤとする画面遷移（ｇn’，ｏ，ＴＢＤ）が画面遷移の集合Ｔに存在することを意味する。
【００６３】
画面の状態の集合Ｇと画面遷移の集合Ｔからなる画面遷移グラフに対して、このような経路を求める方法は非特許文献４などに示されており、この技術を用いれば、経路を求めることが可能である。
【００６４】
もし、図９のステップｓ４１，ｓ４２で経路が発見できた場合、コンピュータは、図９のステップｓ４３により、経路を構成する画面遷移ｔ1，ｔ2，・・・ｔnの操作対象ＧＵＩコンポーネントｏ1，ｏ2，・・・ｏnを先頭から順に表示画面に対して自動操作して、表示画面を未操作のＧＵＩコンポーネントを有する画面の状態ｇn’に変化させる。そして、図９のステップｓ４４により、変数ｖにその未操作のＧＵＩコンポーネントを有する画面の状態ｇn’を代入し、図７のステップｓ３に戻り、処理を継続する。
【００６５】
図９のステップｓ４１，ｓ４２で経路が発見できなかった場合は、図９のステップｓ４５で、変数ｖの示す画面の状態が、検査対象ソフトウェアの初期画面の状態と等しいか調べる。もし変数ｖの示す画面の状態が検査対象ソフトウェアの初期画面の状態と異なるのであれば、図９のステップｓ４６により、コンピュータは、入力として与えられている検査対象ソフトウェアの再起動スクリプトを実行し、ソフトウェアの表示画面を初期画面に戻す。そして図７のステップｓ２に戻って処理を継続する。図９のステップｓ４５により、変数ｖの示す画面の状態が初期画面の状態と等しければ、初期画面から画面遷移によって到達可能な画面の状態には、未操作のＧＵＩコンポーネントが存在しないことになり、網羅的な自動操作が完了したことになる。よって、図７のステップｓ９において、コンピュータは、蓄積した画面の状態の集合Ｇと画面遷移の集合Ｔを記憶装置に出力し、手続きを完了する。
【００６６】
図７のステップｓ４において、画面遷移の集合Ｔの要素の中に、元画面が変数ｖの示す画面の状態で且つ操作後の画面の状態が定数ＴＢＤである画面遷移ｔが存在しない場合は、非特許文献３では、一律、検査対象ソフトウェアを再起動させてしまっていた。しかし、本発明では、図９に示す手続きを実施し、保持する画面の状態の集合Ｇと画面遷移の集合Ｔにおいて、変数ｖの示す画面の状態から未操作のＧＵＩコンポーネントを有する状態への経路が存在する場合には、検査対象ソフトウェアの再起動を実施しない。これによって、検査対象ソフトウェアの再起動の回数を減少させるという課題を解決することができる。
【発明の効果】
【００６７】
本発明によれば、検査対象ソフトウェアの形式的な画面遷移やプログラムの仕様、あるいはユーザの操作履歴を必要とせず、ソフトウェアのバージョンアップや動作環境の更改などのバージョンアップ前後の検査対象ソフトウェアを自動操作することができる。これによって画面の状態の集合と画面遷移の集合を自動生成し、それぞれの画面遷移グラフを自動構築できる。バージョンアップ前後で、検査対象ソフトウェアに対してコンピュータが自動構築した画面遷移グラフ、即ち画面の状態の集合と画面遷移の集合をそれぞれ比較することで、バージョンアップ前後で異なる画面遷移を自動的に発見することができる。
【００６８】
本発明では、画面の状態に対して操作可能な全てのＧＵＩコンポーネントを自動操作の対象とすることで、非特許文献３に比べ検査の網羅性を向上させることができる。さらに、その画面の状態において未操作のＧＵＩコンポーネントが抽出できない場合は、非特許文献３のように、一律、検査対象ソフトウェアを再起動しない。本発明では、保持する画面の状態の集合と画面遷移の集合において、未操作のＧＵＩコンポーネントが存在する画面の状態までの経路を探索する。その結果、経路が発見できれば再起動を行わず、自動操作を継続できる。これによって、検査対象ソフトウェアの再起動にかかる時間を省くことができ、検査を効率的に実施できるようになる。
【図面の簡単な説明】
【００６９】
【図１】検査対象ソフトウェアの表示画面の一例である。
【図２】非特許文献３におけるエージェント内部のスタックの状態の一例である。
【図３】検査対象ソフトウェアの表示画面の一例である。
【図４】非特許文献３におけるエージェント内部のスタックの状態の一例である。
【図５】非特許文献３におけるエージェント内部のスタックの状態の一例である。
【図６】非特許文献３におけるエージェント内部のスタックの状態の一例である。
【図７】本発明の画面遷移グラフの自動生成方法の処理フローである。
【図８】本発明の画面遷移グラフの自動生成方法の処理フローである。
【図９】本発明の画面遷移グラフの自動生成方法の処理フローである。
【図１０】検査対象ソフトウェアの表示画面の一例である。
【図１１】本発明の画面遷移グラフの自動生成装置の実施の形態の一例を示す構成図である。
【図１２】実施例における検査対象ソフトウェアの動作例である。
【図１３】検査対象ソフトウェアの表示画面の一例である。
【図１４】実施例におけるハードウェア１で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図１５】実施例におけるハードウェア１で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図１６】実施例におけるハードウェア１で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図１７】実施例におけるハードウェア１で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図１８】実施例におけるハードウェア１で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図１９】実施例におけるハードウェア１で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図２０】実施例におけるハードウェア１で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図２１】実施例におけるハードウェア１で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図２２】実施例におけるハードウェア２で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図２３】実施例におけるハードウェア２で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図２４】実施例におけるハードウェア２で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図２５】実施例におけるハードウェア２で動作する検査対象ソフトウェアに対して図７〜図９の処理フローを実施した場合の内部状態の一例である。
【図２６】実施例における記憶装置に保存された画面の状態の集合と画面遷移の集合とからなるグラフの表示の一例である。
【図２７】実施例における記憶装置に保存された画面の状態の集合と画面遷移の集合とからなるグラフの表示の他の例である。
【発明を実施するための形態】
【００７０】
図１１は本発明の画面遷移グラフの自動生成方法を実施する装置の実施の形態の一例、ここでは周知のコンピュータ上に実現した例を示すもので、図中、１は入力装置、２は記憶装置、３は表示装置、４はコンピュータである。
【００７１】
入力装置１は、キーボード、マウス等からなり、ユーザがコンピュータ４に所定の情報、ここでは図７〜図９に示した手続きにおける属性変数の集合Ａや、検査対象ソフトウェアの起動スクリプトおよび再起動スクリプトを入力するためのものである。記憶装置２は、コンピュータ４が実施する図７〜図９に示した手続きの出力結果である画面の状態の集合Ｇと画面遷移の集合Ｔとからなる画面遷移グラフを保存するためのものである。表示装置３は、液晶ディスプレイ、ＣＲＴ等からなり、記憶装置２に保存されている画面遷移グラフを表示するためのものである。
【００７２】
コンピュータ４は、図７〜図９に示した処理フローに対応する所定のプログラムに従い、各装置を制御するとともに、この際、画面状態取得装置５、画面自動操作装置６、経路探索装置７、制御装置８を構成する。
【００７３】
画面状態取得装置５は、図７の手続きにおけるｓ２およびｓ６、並びに図９の手続におけるｓ４４のステップにおいて、ＧＵＩコンポーネントの属性変数の集合に基づいて、検査対象ソフトウェアの画面の状態を取得する装置である。
【００７４】
画面自動操作装置６は、図７の手続きにおけるｓ５、並びに図９の手続きにおけるｓ４３のステップにおいて、検査対象ソフトウェアの画面に対して、ＧＵＩコンポーネントを自動操作する装置である。
【００７５】
経路探索装置７は、図９の手続きにおけるｓ４１，ｓ４２のステップにおいて、画面の状態の集合Ｇと画面遷移の集合Ｔとに対して、変数ｖの示す画面から未操作のＧＵＩコンポーネントを有する画面への経路を探索する装置である。
【００７６】
制御装置８は、入力装置１から入力された起動スクリプトにより検査対象ソフトウェアを起動する機能を有する。また、制御装置８は、入力装置１から入力されたＧＵＩコンポーネントの属性変数の集合を画面状態取得装置５に渡し、当該画面状態取得装置５で取得した画面の状態を受け取る機能を有する。また、制御装置８は、前記画面の状態から、過去に表示されたことのあるＧＵＩコンポーネントも含めて操作可能な全てのＧＵＩコンポーネントを取得する機能を有する。また、制御装置８は、操作可能な全てのＧＵＩコンポーネントを画面自動操作装置６に与えて未操作のＧＵＩコンポーネントを自動操作させるとともに、画面遷移を生成する機能を有する。また、制御装置８は、現在の画面において未操作のＧＵＩコンポーネントが存在しない場合は、経路探索装置７により現在の画面から未操作のＧＵＩコンポーネントを有する画面への経路を探索させ、経路があればその結果を画面自動操作装置６に与えて自動操作させる機能を有する。また、制御装置８は、前記経路がなく、現在の画面が初期画面でなければ、入力装置１から入力された再起動スクリプトにより検査対象ソフトウェアを再起動する機能を有する。また、制御装置８は、前記経路がなく、現在の画面が初期画面であれば、前記取得した画面の状態の集合Ｇと前記生成した画面遷移の集合Ｔとからなる画面遷移グラフを記憶装置２に出力して保存する機能を有する。さらにまた、制御装置８は、記憶装置２に保存されている画面の状態の集合Ｇと画面遷移の集合Ｔを表示装置３に表示したり、記憶装置２に保存されている画面の状態の集合や画面遷移の集合を比較し、差分を表示装置３に表示する機能を有する。
【００７７】
本装置により、検査対象ソフトウェアの形式的な画面遷移やプログラムの仕様、あるいはユーザの操作履歴を必要とせず、検査対象ソフトウェアを自動操作することができる。これによって、ソフトウェアのバージョンアップや動作環境の更改などのバージョンアップ前後において、画面の状態の集合と画面遷移の集合を自動生成し、それぞれの画面遷移グラフを自動構築できる。本装置が自動構築した画面遷移グラフ、即ち画面の状態の集合と画面遷移の集合をバージョンアップ前後でそれぞれ比較することで、バージョンアップ前後で異なる画面遷移を自動的に発見することができる。
【００７８】
本装置は、画面の状態に対して操作可能な全てのＧＵＩコンポーネントを自動操作の対象とすることで、非特許文献３に比べ検査の網羅性を向上させることができる。さらに、画面の状態において未操作のＧＵＩコンポーネントが抽出できない場合は、非特許文献３のように、一律、検査対象ソフトウェアを再起動しない。本装置は、図１１の経路探索装置７を備えることにより、保持する画面の状態の集合と画面遷移の集合において、未操作のＧＵＩコンポーネントが存在する画面までの経路を探索することができる。その結果、経路が発見できれば再起動を行わず、自動操作を継続できる。これによって、検査対象ソフトウェアの再起動にかかる時間を省くことができ、検査を効率的に実施できるようになる。
【００７９】
なお、前述した実施の形態では、画面状態取得装置５、画面自動操作装置６、経路探索装置７および制御装置８をコンピュータ上で実現した例を示したが、ハードウェアで実現しても良い。またこれら各装置が、適切な通信路で相互に接続された複数のハードウェア上に分散して存在し、相互に通信し合いながら実行することもできる。
【００８０】
本発明の装置が検査対象とするソフトウェアは、コンピュータ４において動作しても良いし、適切な通信路で相互に接続された任意の動作環境上で動作していても良い。
【００８１】
以下、本発明による画面遷移グラフの自動生成方法について例を挙げて説明する。
【実施例１】
【００８２】
本実施例では、ハードウェアの更改前後で動作する同一のソフトウェアに対する画面遷移の回帰テストの例を示す。更改前のハードウェアをハードウェア１、更改後のハードウェアをハードウェア２とする。検査対象ソフトウェアは、図１２の動作をするソフトウェアを仮定する。
【００８３】
・ハードウェア１およびハードウェア２で動作する検査対象ソフトウェアの初期画面は、ともに図１の画面であり、図１の画面における操作可能なＧＵＩコンポーネントはｃ1である。図１の画面においてＧＵＩコンポーネントのボタンｃ1を操作すると、図３の画面に変化する。
【００８４】
・図３の画面における操作可能なＧＵＩコンポーネントはｃ1，ｃ3，ｃ4である。図３の画面においてボタンｃ1を操作すると、検査対象ソフトウェアがハードウェア１上で動作する場合は図１の画面に戻り、検査対象ソフトウェアがハードウェア２上で動作する場合は図１３の画面に変化する。また、図３の画面においてＧＵＩコンポーネントのボタンｃ3を操作すると、検査対象ソフトウェアがハードウェア１上で動作する場合もハードウェア２上で動作する場合も、ともに画面は変化せず、図３を表示する。また、図３の画面においてＧＵＩコンポーネントのボタンｃ4を操作すると、検査対象ソフトウェアがハードウェア１上で動作する場合もハードウェア２上で動作する場合も、ともに図１の画面に戻る。
【００８５】
・図１３の画面はエラーメッセージが表示され、いかなるＧＵＩコンポーネントも操作できないものとする。
【００８６】
本実施例では、入力装置１から属性変数の集合Ａを与える。ここでの属性変数の集合はＡ＝｛ａ1｝とし、ａ1はＧＵＩコンポーネントの表示文字列とする。また、入力装置１から検査対象ソフトウェアの起動スクリプトおよび再起動スクリプトを与える。
【００８７】
＜検査対象ソフトウェアがハードウェア１上で動作する場合＞
まず、ハードウェア１上で動作する検査対象ソフトウェアに対する本装置の動作を説明する。
【００８８】
始めに、制御装置８は図７のステップｓ１を実行し、画面の状態の集合Ｇおよび画面遷移の集合Ｔとして空集合を設定するとともに、入力として与えられた起動スクリプトを用いて検査対象ソフトウェアをハードウェア１で起動する。また、制御装置８は図７のステップｓ２を実行し、画面状態取得装置５を用いて、起動した検査対象ソフトウェアの画面の状態を取得する。このとき、検査対象ソフトウェアが表示しているのは初期画面なので、取得した画面の状態は、ｇ0＝｛｛ｃ1，ｃ2｝｝＝｛｛（ａ1＝Ａ），（ａ1＝画面の例１）｝｝であり、これを変数ｖに代入する。このときの画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面を図１４に示す。
【００８９】
次に、制御装置８は図７のステップｓ３を実行し、変数ｖの示す画面の状態ｇ0が画面の状態の集合Ｇに含まれるか調べる。このとき、図１４に示すように集合Ｇは空集合であり、ｇ0を含まないため、図８の手続きを実行する。
【００９０】
制御装置８は図８のステップｓ３１を実行し、変数ｖの示す画面の状態ｇ0を画面の状態の集合Ｇに追加し、さらに図８のステップｓ３２を実行し、画面の状態ｇ0から操作可能なＧＵＩコンポーネントの集合を抽出し、変数Ｏに代入する。これは、図１２に示された図１の画面に対する操作可能なＧＵＩコンポーネントのボタンｃ1を抽出することになり、Ｏ＝｛ｃ1｝を取得する。
【００９１】
また、制御装置８は図８のステップｓ３３を実行し、変数Ｏの示す操作可能なＧＵＩコンポーネントの集合は空集合ではないため、さらに図８のステップｓ３４，ｓ３５を実行し、変数Ｏから操作可能なＧＵＩコンポーネントを取り出し、画面遷移の集合Ｔに画面遷移を追加する。これを操作可能なＧＵＩコンポーネントの集合Ｏが空集合になるまで繰り返す（ｓ３３）。ここでは、変数Ｏ＝｛ｃ1｝なので、制御装置８は操作可能なＧＵＩコンポーネントｃ1を取り出し、画面遷移ｔ1＝（ｇ0，ｃ1，ＴＢＤ）を画面遷移の集合Ｔに追加する。そして図７のステップｓ４に戻る。このときの画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面を図１５に示す。
【００９２】
次に制御装置８は図７のステップｓ４を実行し、画面遷移の集合Ｔに、元画面の状態が変数ｖの示す画面の状態ｇ0で且つ操作後の画面の状態が定数ＴＢＤである画面遷移が存在するか調べる。この場合、図１５に示すとおり画面遷移ｔ1が発見されるので、制御装置８は図７のステップｓ５を実行し、画面遷移の集合Ｔから画面遷移ｔ1を取り出し、変数ｔに代入する。さらに制御装置８は検査対象ソフトウェアの現在の表示画面である図１の画面に対して、変数ｔが示す画面遷移ｔ1の操作対象ＧＵＩコンポーネントであるボタンｃ1を、画面自動操作装置６を用いて自動操作する。これによって検査対象ソフトウェアの表示画面は、図１２に示すように、図１の画面に対するＧＵＩコンポーネントのボタンｃ1を操作した後の画面である図３に変化する。
【００９３】
次に制御装置８は図７のステップｓ６を実行し、画面状態取得装置５を用いて、図３の画面の状態を取得する。取得した画面の状態をｇ1とすると、ｇ1＝｛｛ｃ1，ｃ2｝，｛ｃ3，ｃ4｝｝＝｛｛（ａ1＝Ａ），（ａ1＝画面の例１）｝，｛（ａ1＝Ｂ），（ａ1＝Ｃ）｝｝となり、これを変数ｖ’に代入する。この画面の状態が、画面遷移ｔ1における操作後の画面の状態となるので、制御装置８は図７のステップｓ７を実行し、変数ｔの示す画面遷移ｔ1を（ｇ0，ｃ1，ｖ’）＝（ｇ0，ｃ1，ｇ1）として、画面遷移の集合Ｔに追加する。さらに、この画面の状態ｇ1における未操作のＧＵＩコンポーネントを自動操作するために、制御装置８は図７のステップｓ８を実行し、変数ｖに変数ｖ’の示す画面の状態ｇ1を代入して、図７のステップｓ３に戻る。このときの、画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面を図１６に示す。
【００９４】
制御装置８は、さらに検査対象ソフトウェアが表示している図３の画面に対して、図７のステップｓ３を実行する。ここでは、図１６に示すように、変数ｖの示す画面の状態ｇ1が画面の状態の集合Ｇに含まれていないため、再び図８の手続きを実施する。図８の手続きにおいて、制御装置８は、図８のステップｓ３１を実行し、変数ｖの示す画面の状態ｇ1を画面の状態の集合Ｇに追加する。さらに、制御装置８は、図８のステップｓ３２を実行して、変数ｖの示す画面の状態ｇ1における操作可能なＧＵＩコンポーネントの集合を取得し、変数Ｏに代入する。図１２に示されているように、図３の画面に対する操作可能なＧＵＩコンポーネントはｃ1，ｃ3，ｃ4なので、変数Ｏは｛ｃ1，ｃ3，ｃ4｝となる。
【００９５】
非特許文献３においては、図４のエージェント内部のスタックの状態が示すように、図３の画面において操作可能なＧＵＩコンポーネントの集合Ｏ2は｛ｃ3，ｃ4｝であり、操作前に図１の画面で表示されていたＧＵＩコンポーネントのボタンｃ1を取得対象外にしている。従って、図３の画面からＧＵＩコンポーネントのボタンｃ1の自動操作が実施できない。
【００９６】
制御装置８は、続く図８のステップｓ３３〜ｓ３５を実行し、変数Ｏが示す操作可能なＧＵＩコンポーネントの集合｛ｃ1，ｃ3，ｃ4｝に対して、画面遷移の集合Ｔに、画面遷移ｔ2＝（ｇ1，ｃ1，ＴＢＤ）、ｔ3＝（ｇ1，ｃ3，ＴＢＤ），ｔ4＝（ｇ1，ｃ4，ＴＢＤ）を追加して、図７のステップｓ４に戻る。このときの画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面を図１７に示す。
【００９７】
制御装置８は、続いて図７のステップｓ４を実行し、画面遷移の集合Ｔに、元画面の状態が変数ｖの示すｇ1で且つ操作後の画面の状態が定数ＴＢＤである画面遷移が存在するか調べる。この場合、図１７に示すように、先ほど画面遷移の集合Ｔに追加した画面遷移ｔ2，ｔ3，ｔ4が条件を満たす。よって、制御装置８は図７のステップｓ５を実行し、画面遷移の集合Ｔから画面遷移、例えばｔ2を取り出し、変数ｔに代入する。このときの変数ｔの示す画面遷移ｔ2の操作対象ＧＵＩコンポーネントはボタンｃ1であり、制御装置８は画面自動操作装置６を用いて、検査対象ソフトウェアの現在の表示画面である図３の画面に対して、ＧＵＩコンポーネントのボタンｃ1を自動操作する。このように本発明では、非特許文献３とは異なり、元画面である図１の画面に表示されていたＧＵＩコンポーネントのボタンｃ1を、図３の画面においても操作することができる。
【００９８】
図１２に示すように、ハードウェア１上で動作する検査対象ソフトウェアは、図３の画面においてＧＵＩコンポーネントのボタンｃ1を操作すると、図１の画面を表示する。ここで、制御装置８は、図７のステップｓ６を実行する。つまり画面状態取得装置５を用いて、検査対象ソフトウェアが表示している図１の画面の状態を取得する。よって、ここでは図１の画面の状態として以前に取得したｇ0と同一の画面の状態が取得でき、ｇ0を変数ｖ’に代入する。画面の状態ｇ1に対してＧＵＩコンポーネントのボタンｃ1を操作したときの操作後の画面の状態が、変数ｖ’の示す画面の状態ｇ0なので、制御装置８は、図７のステップｓ７で、変数ｔの示す画面遷移ｔ1を｛ｇ1，ｃ1，ｇ0｝として画面遷移Ｔに追加する。さらに、表示している図１の画面において未操作のＧＵＩコンポーネントを操作するために、制御装置８は図７のステップｓ８を実行し、変数ｖに変数ｖ’の示す画面の状態ｇ0を代入し、図７のステップｓ３に戻る。このときの画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面を図１８に示す。
【００９９】
制御装置８は、検査対象ソフトウェアが表示している図１の画面に対して、図７のステップｓ３を実行するが、ここでは、図１８に示すように、変数ｖの示す画面の状態ｇ0が画面の状態の集合Ｇに含まれているため、図７のステップｓ４に進む。制御装置８は、図７のステップｓ４を実行し、画面遷移の集合Ｔに、元画面の状態が変数ｖの示すｇ0で且つ操作後の画面の状態が定数ＴＢＤである画面遷移が存在するか調べる。この場合、図１８に示すように画面遷移の集合Ｔにそのような画面遷移が存在しないため、図９の手続きを実行する。
【０１００】
制御装置８は図９のステップｓ４１，ｓ４２を実行し、経路探索装置７を用いて、画面の状態の集合Ｇと画面遷移の集合Ｔの中に、変数ｖの示す画面の状態ｇ0から未操作のＧＵＩコンポーネントを有する画面の状態への経路がないか探索する。この場合は、画面の状態ｇ0からｇ1への経路として画面遷移の列ｔ1が発見される。よって、制御装置８は図９のステップｓ４３を実行し、画面自動操作装置６を用いて、発見した経路に出現する画面遷移の操作対象のＧＵＩコンポーネントを順番に自動操作する。この場合は、ｔ1における操作対象ＧＵＩコンポーネントのボタンｃ1を自動操作し、検査対象ソフトウェアの表示画面を未操作のＧＵＩコンポーネントのボタンｃ3，ｃ4を有する図３の画面に変化させる。
【０１０１】
制御装置８は、続く図９のステップｓ４４を実行し、画面状態取得装置５を用いて、画面の状態を取得し、変数ｖに代入する。ここでは検査対象ソフトウェアは図３の画面を表示しているため、以前に取得した図３に対する画面の状態ｇ1が変数ｖに代入され、図７のステップｓ３に戻る。このときの画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面を図１９に示す。
【０１０２】
制御装置８は、図７のステップｓ３を実行し、変数ｖの示す画面の状態ｇ1が画面の状態の集合Ｇに存在するか調べる。この場合は図１９に示すように、画面の状態の集合Ｇに画面の状態ｇ1が存在するので、図７のステップｓ４に進む。制御装置８は、図７のステップｓ４を実行し、画面遷移の集合Ｔに、元画面の状態が変数ｖの示す画面の状態ｇ1で且つ操作後の画面の状態が定数ＴＢＤである画面遷移が存在するか調べる。その結果、図１９に示すように画面遷移ｔ3，ｔ4が発見される。制御装置８は図７のステップｓ５を実行し、画面遷移の集合Ｔから画面遷移、ここではｔ3を取り出し、変数ｔに代入する。このときの変数ｔの示す画面遷移ｔ3の操作対象ＧＵＩコンポーネントはボタンｃ3であり、制御装置８は画面自動操作装置６を用いて、検査対象ソフトウェアの現在の表示画面である図３の画面に対して、ＧＵＩコンポーネントのボタンｃ3を自動操作する。この自動操作によって検査対象ソフトウェアが表示する画面は、図１２に示すように、図３の画面に対してＧＵＩコンポーネントのボタンｃ3を操作しても、図３のまま変化しないことになる。
【０１０３】
制御装置８は図７のステップｓ６を実行し、画面状態取得装置５を用いて、操作後の画面の状態を取得、即ち図３の画面の状態であるｇ1を取得して、これを変数ｖ’に代入する。そして、制御装置８は図７のステップｓ７を実行し、変数ｔの示す画面遷移ｔ3＝（ｇ1，ｃ3，ｇ1）を画面遷移の集合Ｔに追加する。さらに、操作後の画面の状態であるｇ1から未操作のＧＵＩコンポーネントを自動操作するために、制御装置８は図７のステップｓ８を実行し、変数ｖに変数ｖ’の示す画面の状態ｇ1を代入し、図７のステップｓ３に戻る。このときの画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面を図２０に示す。
【０１０４】
制御装置８は、検査対象ソフトウェアが表示している図３の画面に対して、図７のステップｓ３を実行するが、ここでは、図２０に示すように、変数ｖの示す画面の状態ｇ1が画面の状態の集合Ｇに含まれるため、図７のステップｓ４に進む。制御装置８は、図７のステップｓ４を実行し、画面遷移の集合Ｔに、元画面の状態が変数ｖの示す画面の状態ｇ1で且つ操作後の画面の状態が定数ＴＢＤである画面遷移が存在するか調べる。ここでは、図２０に示すように画面遷移ｔ4が発見されるので、制御装置８は図７のステップｓ５を実行し、画面遷移の集合Ｔから画面遷移ｔ4を取り出し、変数ｔに代入する。このときの変数ｔの示す画面遷移ｔ4の操作対象ＧＵＩコンポーネントはボタンｃ4であり、制御装置８は画面自動操作装置６を用いて、検査対象ソフトウェアが表示する図３の画面に対して、ＧＵＩコンポーネントのボタンｃ4を自動操作する。これによって、検査対象ソフトウェアが表示する画面は、図１２に示されるように、図３に対するＧＵＩコンポーネントのボタンｃ4への操作後の画面、つまり図１の画面に変化する。
【０１０５】
制御装置８は図７のステップｓ６を実行し、画面状態取得装置５を用いて、操作後の画面の状態を取得、即ち図１の画面の状態であるｇ0を取得して、これを変数ｖ’に代入する。そして、制御装置８は図７のステップｓ７を実行し、変数ｔの示す画面遷移ｔ4＝（ｇ1，ｃ4，ｇ0）を画面遷移の集合Ｔに追加する。さらに、操作後の画面の状態であるｇ0から未操作のＧＵＩコンポーネントを自動操作するために、制御装置８は図７のステップｓ８を実行し、変数ｖに変数ｖ’の示す画面の状態ｇ0を代入し、図７のステップｓ３に戻る。このときの画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面を図２１に示す。
【０１０６】
非特許文献３においては、エージェントが自動操作した結果、過去に表示した画面と同一の画面に変化した場合には、その画面に対する操作可能なＧＵＩコンポーネントの集合を図５の集合Ｏ3のように空集合としてしまい、検査対象ソフトウェアを再起動してしまっていた。例えば、この実施例においては、ここまでの処理で、非特許文献３の場合は、図３の画面からＧＵＩコンポーネントのボタンｃ1を自動操作した後と、図３の画面からＧＵＩコンポーネントのボタンｃ3を自動操作した後の２回再起動することになる。それに対して、本発明では、一度も再起動していない。
【０１０７】
本発明においては、自動操作した結果、過去に表示した画面と同一の画面に変化した場合には、変化後の画面の状態が未操作のＧＵＩコンポーネントを有するか調べ、未操作のＧＵＩコンポーネント存在すれば、検査対象ソフトウェアを再起動することなく、未操作のＧＵＩコンポーネントに対する自動操作を継続する。もし未操作のＧＵＩコンポーネントが存在しない場合でも、画面の状態の集合Ｇと画面遷移の集合Ｔを保持しているため、現在の状態から未操作のＧＵＩコンポーネントを有する画面の状態への経路を探索し、その経路が存在すれば、検査対象ソフトウェアを再起動することなく自動操作を継続できる。これにより、検査対象ソフトウェアの再起動の回数を非特許文献３より減少させることができ、検査時間を短縮し効率化できる。
【０１０８】
次に、制御装置８は、検査対象ソフトウェアが表示している図１の画面に対して、図７のステップｓ３を実行するが、ここでは、図２１が示すように、変数ｖの示す画面の状態ｇ0が画面の状態の集合Ｇに含まれているため、図７のステップｓ４に進む。制御装置８は、図７のステップｓ４を実行するが、この場合、元画面の状態が変数ｖの示すｇ0で且つ操作後の画面の状態が定数ＴＢＤである画面遷移が画面遷移の集合Ｔに存在しないため、図９の手続きを実施する。
【０１０９】
制御装置８は図９のステップｓ４１，ｓ４２を実行し、経路探索装置７を用いて、画面の状態の集合Ｇと画面遷移の集合Ｔの中に、変数ｖの示す画面の状態ｇ0から未操作のＧＵＩコンポーネントを有する画面の状態への経路がないか探索する。この場合は、そのような経路が存在しないため、図９のステップｓ４５に進む。制御装置８は、図９のステップｓ４５を実行し、この場合、変数ｖの示す画面の状態が初期画面の状態ｇ0であるため、図７のステップｓ９に進む。
【０１１０】
これは、初期画面の状態から未操作のＧＵＩコンポーネントを有する画面の状態への経路が画面の状態の集合Ｇと画面遷移の集合Ｔに存在しない、つまり初期画面から遷移可能な全ての画面の状態において、未操作のＧＵＩコンポーネントがないということになる。よって、制御装置８は、続く図７のステップｓ９を実行し、記憶装置２に、図２１の画面の状態の集合Ｇと画面遷移の集合Ｔを保存し、手続きを終了する。
【０１１１】
＜検査対象ソフトウェアがハードウェア２上で動作する場合＞
次に、ハードウェア２上で動作する検査対象ソフトウェアに対する本装置の動作ついて説明する。この場合は、ハードウェア１上で動作する検査対象ソフトウェアに対する本装置の動作と同様に、制御装置８は、図７のステップｓ１を実行した後、検査対象ソフトウェアが初期画面である図１の画面を表示しているときに、図７のｓ２，ｓ３、図８のｓ３１，ｓ３２，ｓ３３，ｓ３４，ｓ３５，ｓ３３、図７のｓ４，ｓ５，ｓ６，ｓ７，ｓ８のステップを順次実施する。これにより図１の画面に対して、ＧＵＩコンポーネントのボタンｃ1を自動操作することができ、検査対象ソフトウェアは図３の画面を表示する。
【０１１２】
さらに、表示されている図３の画面に対しても、ハードウェア１上で動作する検査対象ソフトウェアに対する本装置の動作と同様に、制御装置８は、図７のｓ３、図８のｓ３１，ｓ３２，ｓ３３，ｓ３４，ｓ３５，ｓ３３，ｓ３４，ｓ３５，ｓ３３，ｓ３４，ｓ３５，ｓ３３、図７のｓ４，ｓ５，ｓ６，ｓ７，ｓ８のステップを順次実施する。これにより図３の画面に対して、ＧＵＩコンポーネントのボタンｃ1を自動操作することができる。
【０１１３】
このとき、検査対象ソフトウェアが表示する操作後の画面は、ハードウェア１上で動作するときと異なる。つまり図１２に示すように、図３の画面で操作可能なＧＵＩコンポーネントのボタンｃ1を操作すると、図１３の画面が表示されることになる。よって、前述の図７のステップｓ６において、制御装置８は、画面状態取得装置５によって、図１３の画面の状態ｇ2＝｛｛ｃ5｝｝＝｛｛（ａ1＝エラーメッセージ）｝｝を取得し、変数ｖ’には画面の状態ｇ2を代入して、図７のステップｓ７とｓ８を実行する。図７のステップｓ８を実行した後の画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面を図２２に示す。
【０１１４】
続いて制御装置８は、検査対象ソフトウェアが表示している図１３の画面に対して、図７のステップｓ３を実行し、変数ｖの示す画面の状態ｇ2が画面の状態の集合Ｇに含まれるか調べる。このとき、図２２に示すように、画面の状態の集合Ｇは画面の状態ｇ2を含まないので、制御装置８は、図８のステップｓ３１に進み、画面の状態の集合Ｇに変数ｖの示す画面の状態ｇ2を追加する。
【０１１５】
さらに、制御装置８は、図８のステップｓ３２を実行し、変数ｖの示す画面の状態ｇ2で操作可能なＧＵＩコンポーネントの集合を抽出する。このとき、図１２に示すように、図１３の画面において操作可能なＧＵＩコンポーネントは存在しないので、制御装置８は、変数Ｏに空集合を代入する。制御装置８は、続いて図８のステップｓ３３を実行するが、先に求めた変数Ｏが空集合なので、図８のステップｓ３４およびｓ３５は実施せず、図７のステップｓ４に戻る。このときの画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面を図２３に示す。
【０１１６】
続いて制御装置８は図７のステップｓ４を実行し、画面遷移の集合Ｔに、元画面の状態が変数ｖの示す画面の状態ｇ2で且つ操作後の画面の状態がＴＢＤである画面遷移が存在するか調べる。この場合、図２３に示すように、条件に合致する画面遷移が存在しないため、図９の手続きを実行する。
【０１１７】
制御装置８は、図９のステップｓ４１，ｓ４２を実行し、経路探索装置７を用いて、画面の状態の集合Ｇと画面遷移の集合Ｔの中に、変数ｖの示す画面の状態ｇ2から未操作のＧＵＩコンポーネントを有する画面の状態への経路がないか探索する。ここでは、そもそも画面の状態ｇ2、つまり図１３の画面には操作可能なコンポーネントが存在しないため、経路は発見できず、図９のステップｓ４５に進む。制御装置８は、図９のステップｓ４５を実行し、この場合、変数ｖの示す画面の状態がｇ2であり、初期画面の状態ｇ0ではないため、図９のステップｓ４６に進む。制御装置８は、図９のステップｓ４６を実行、即ち入力装置１から事前に入力されている再起動スクリプトによって、検査対象ソフトウェアを再起動し、検査対象ソフトウェアの表示画面を初期画面である図１にする。
【０１１８】
さらに、制御装置８は、図７のステップｓ２に戻り、画面状態取得装置５を用いて、再起動した検査対象ソフトウェアの画面の状態ｇ0を取得し、変数ｖに代入する。このときの画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面を図２４に示す。
【０１１９】
これ以降は、前述したハードウェア１上で動作する検査対象ソフトウェアに対する本装置の動作と同様の動作となり、最終的には画面の状態の集合Ｇ、画面遷移の集合Ｔ、変数ｖ、検査対象ソフトウェアの画面は図２５のようになる。制御装置８は、図７におけるステップｓ９を実行し、記憶装置２に、図２５の画面の状態の集合Ｇと画面遷移の集合Ｔを保存し、手続きを終了する。
【０１２０】
制御装置８は、記憶装置２に保存されたハードウェア１およびハードウェア２上で動作する検査対象ソフトウェアの画面の状態の集合Ｇと画面遷移の集合Ｔとからなる画面遷移グラフを図１１の表示装置３に表示することができる。その時の表示例を図２６、図２７に示す。
【０１２１】
図２７は、画面の状態の集合と画面遷移の集合を模式的にグラフ表示したもので、円は画面の状態を表し、矢印は画面遷移を表す。制御装置８は、ハードウェア１およびハードウェア２の画面の状態の集合が同一か自動判定することができ、異なる画面の状態が存在する場合は、その画面の状態を強調表示することができる。例えば、この場合、図２６、図２７のハードウェア２に対する画面の状態ｇ2を強調表示する。また、同様に制御装置８は、ハードウェア１およびハードウェア２の画面遷移の集合が同一か自動判定することができ、異なる画面遷移が存在する場合は、その画面遷移を強調表示することができる。例えば、この場合、図２６、図２７のハードウェア１およびハードウェア２に対する画面遷移ｔ2を強調表示する。
【０１２２】
これによって、検査対象ソフトウェアが、ハードウェア１とハードウェア２で動作するときに、動作の異なる画面遷移、即ち画面遷移のエラーを自動的に特定することができる。
【０１２３】
非特許文献３においては、この実施例における画面の状態ｇ1からＧＵＩコンポーネントのボタンｃ1を自動操作できないため、画面遷移ｔ2および画面の状態ｇ2が保存されない。結果として、ハードウェア１とハードウェア２における画面の状態の集合と画面遷移の集合はそれぞれ同一になる。よって、この場合の図２６や図２７に画面遷移ｔ2および画面の状態ｇ2が表示されず、本発明が検出した画面遷移エラーを発見することができない。
【符号の説明】
【０１２４】
１：入力装置、２：記憶装置、３：表示装置、４：コンピュータ、５：画面状態取得装置、６：画面自動操作装置、７：経路探索装置、８：制御装置。
【先行技術文献】
【非特許文献】
【０１２５】
【非特許文献１】E. Choi and H. Watanabe："Model Checking Class Specifications for Web Applications", Proc. of the 12th Asia-Pacific Software Engineering Conference, IEEE, pp. 67-75, 2005
【非特許文献２】P. A. Brooks and A. M. Memon："Automated GUI Testing Guided By Usage Profiles", Proc of the 22nd International Conference on Automated Software Engineering, pp.333-342, 2007
【非特許文献３】岡田、旭：『ＧＵＩ設計の一貫性を評価するツール「ＧＵＩテスタII」の提案』、情報処理学会ヒューマンインタフェース研究会、97-HI-73、pp.7-12、1997
【非特許文献４】A. Biere，A. Cimatti, E. Clarke and Y. Zhu："Symbolic Model Checking without BDDs", In Lecture Notes of Computer Science 1579, TACAS/ETAPS'99, Springer-Verlag, pp.193-207, 1999
【図１】
0005633904.tif 000002
【図２】
0005633904.tif 000003
【図３】
0005633904.tif 000004
【図４】
0005633904.tif 000005
【図５】
0005633904.tif 000006
【図６】
0005633904.tif 000007
【図７】
0005633904.tif 000008
【図８】
0005633904.tif 000009
【図９】
0005633904.tif 000010
【図１０】
0005633904.tif 000011
【図１１】
0005633904.tif 000012
【図１２】
0005633904.tif 000013
【図１３】
0005633904.tif 000014
【図１４】
0005633904.tif 000015
【図１５】
0005633904.tif 000016
【図１６】
0005633904.tif 000017
【図１７】
0005633904.tif 000018
【図１８】
0005633904.tif 000019
【図１９】
0005633904.tif 000020
【図２０】
0005633904.tif 000021
【図２１】
0005633904.tif 000022
【図２２】
0005633904.tif 000023
【図２３】
0005633904.tif 000024
【図２４】
0005633904.tif 000025
【図２５】
0005633904.tif 000026
【図２６】
0005633904.tif 000027
【図２７】
0005633904.tif 000028