説明

画面遷移グラフの自動生成方法およびその装置

【課題】検査対象ソフトウェアのみから、網羅的で且つ効率の良い画面遷移の回帰テストを実行可能な画面遷移グラフを自動生成すること。
【解決手段】入力されたGUIコンポーネントの属性変数の集合に基づいて、検査対象ソフトウェアの画面の状態を取得し(s2)、取得した画面の状態に関する情報から操作可能な全てのGUIコンポーネントを取得し(s3)、未操作のGUIコンポーネントを自動操作して画面遷移に関する情報を生成する(s5,s6,s7)とともに、現在の画面において未操作のGUIコンポーネントが存在しない場合(s4)は、現在の画面から未操作のGUIコンポーネントを有する画面への経路を探索して自動操作、あるいは検査対象ソフトウェアを再起動し、画面の状態の集合と画面遷移の集合とからなる画面遷移グラフを記憶装置に保存する(s9)。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェアの画面遷移に対する回帰テストの自動化技術に関する。
【背景技術】
【0002】
最近のソフトウェアは、その大部分がグラフィカル・ユーザ・インタフェース(以下、GUI)を備えている。GUIの多くは、Webアプリケーションに代表されるウインドウシステムを採用しており、ウインドウ内のボタンやテキストボックスなどのGUIコンポーネントを操作することで、ソフトウェアの表示画面が変化する。これを画面遷移と呼ぶ。ここでの操作とは、具体的にはユーザ(オペレータ)によるマウスクリックやキーボード入力などのことである。
【0003】
GUIコンポーネントへの操作による画面遷移が期待どおりに起こることを検査することは、ソフトウェア開発において必須の作業である。もし、このような操作による変化後の画面が期待どおりの画面ではなかった場合、これを画面遷移のエラーと言う。
【0004】
画面遷移のエラーを発見するためには、ソフトウェアの画面に対するあらゆる操作手順を実行し、操作後の画面を確認する必要がある。しかし、ソフトウェアの画面は多くのウインドウやGUIコンポーネントで構成されているため、その操作手順の組み合わせは膨大な数に及ぶ。よって、この確認を人手で行うと、その作業は膨大な工数を必要とする。
【0005】
ソフトウェアのバージョンアップ、ソフトウェアが動作するハードウェアやOSなどの動作環境の更改に伴い、これらバージョンアップの前後で、ソフトウェアの画面遷移に変化がない(但し、ソフトウェアのバージョンアップについては、当該バージョンアップと無関係な部分に関して)ことを確認することを画面遷移の回帰テストと呼ぶ。特に、企業の情報システムなどにおけるミッションクリティカルシステムにおいては重要な検査項目であり、自動化により検査の工数を削減することは、非常に大きな関心事となっている。
【0006】
[従来技術]
画面遷移の自動検査を実施するための従来技術としては、形式検証やテスト設計技術など数多く提案されている。
【0007】
例えば、非特許文献1においては、事前に、Webアプリケーションにおける画面遷移の仕様である画面遷移グラフとUML(Unified Modeling Language)のアクティビティ図やクラス図で記述されたプログラムの仕様とが与えられたとき、両者の整合性を自動検査する手法が提案されている。
【0008】
また、非特許文献2においては、画面遷移の回帰テストの自動化技術として、ユーザの操作の履歴を活用する技術が提案されている。これはバージョンアップ前に、事前に検査対象ソフトウェアのGUIへのユーザ操作の手順をモニタリングおよび記録しておき、これをテストケースとして利用する。つまり、バージョンアップ後において、ソフトウェアのGUIを自動操作するプログラムに、その記録された操作手順に沿って検査対象ソフトウェアを自動操作させる。このように、バージョンアップ前後で、操作手順に対する検査対象ソフトウェアの画面遷移を比較することで、回帰テストを自動化することができる。これ以降、コンピュータ上でGUIを自動操作するプログラムをエージェントと呼ぶ。
【0009】
上記の非特許文献1の技術では、画面遷移グラフやUMLなどの形式的な仕様記述が必要となり、また非特許文献2の技術では、操作履歴の蓄積が技術適用のために必要となるが、これらがあれば、テストケース設計や検査の実施コストを大きく削減することが可能になる。
【0010】
一方、非特許文献3の技術では、操作履歴を必要とせずに、検査対象のソフトウェアさえあれば回帰テストの自動化が可能である。この技術は、動作している検査対象ソフトウェアの画面から操作可能なGUIコンポーネントの集合をエージェントが抽出し、エージェント内部のスタックに追加する。操作可能なGUIコンポーネントとは、具体的にはボタンやコンボボックス、メニューボタンなどのことであり、単に表示しているだけのラベルなどは対象外である。例えば、図1のようにGUIコンポーネントとして、ボタンc1とラベルc2を含むウインドウで構成される画面を、検査対象ソフトウェアの初期画面とした場合、エージェントは、操作可能なGUIコンポーネントの集合としてO1={c1}を抽出し、内部のスタックに登録する。このときのスタックの状態を図2に示す。
【0011】
次に、抽出したGUIコンポーネントの集合に含まれる未操作のGUIコンポーネントを1つ選択して、エージェントがそのGUIコンポーネントを自動操作する。これによって、検査対象ソフトウェアの画面が変化する。例えば、図1の画面の例の場合、操作可能なGUIコンポーネントの集合O1に含まれるGUIコンポーネントのボタンc1が、エージェントにより自動的にクリックされ、画面遷移が発生する。このとき、操作後の画面において、GUIコンポーネントのボタンc3とc4を含む新規のウインドウが表示されるものとすると、その画面は、例えば図3に示すようになる。
【0012】
操作後の画面に対しても同様に、エージェントは、新規に表示された操作可能なGUIコンポーネントの集合を抽出し、内部のスタックに加えるとともに、その集合に含まれる未操作のGUIコンポーネントを自動操作する。即ち、図3の画面に対しては、操作可能なGUIコンポーネントがc1,c3,c4と3つあるが、エージェントは、新規に表示されたGUIコンポーネントのボタンc3,c4からなる集合O2={c3,c4}を内部のスタックに追加する。このときの内部のスタックの状態を図4に示す。そして、集合O2の要素であるGUIコンポーネントのボタンc3,c4はどちらも未操作なので、エージェントはどちらか一方を選択して自動操作する。なお、図4のGUIコンポーネントのボタンc1に付された丸印は、便宜上、当該GUIコンポーネントに対する操作が実施済であることを表すものである。
【0013】
操作後の画面が、自動操作の過程で過去に表示された画面と同一で、新規に表示されるGUIコンポーネントがない場合、エージェントは、操作後の画面から操作可能なGUIコンポーネントの集合として空集合を抽出し、この集合をスタックに追加する。この場合は、自動操作をする対象となるGUIコンポーネントが、抽出した操作可能なGUIコンポーネントの集合に存在しないため、エージェントは検査対象ソフトウェアを再起動し、表示画面を検査対象ソフトウェアの初期画面にする。さらに追加した操作可能なGUIコンポーネントの集合をスタックから削除する。
【0014】
例えば、図3の画面に対して、エージェントが未操作のGUIコンポーネントのボタンc3を選択して自動操作した結果、画面が変化しなかったとする。このとき、新規に表示されるGUIコンポーネントが存在しないため、エージェントは、操作可能なGUIコンポーネントの集合O3を空集合として内部のスタックに追加する。このときのスタックの状態を図5に示す。さらにエージェントは、検査対象ソフトウェアを再起動し、表示画面を図1の初期画面に戻し、GUIコンポーネントの集合O3をスタックから削除する。このときのスタックの状態を図6に示す。
【0015】
検査対象ソフトウェアを再起動した後は、エージェントは、検査対象ソフトウェアの画面を初期画面から未操作のGUIコンポーネントが表示されている画面に変化させた後、未操作のGUIコンポーネントを自動操作する。
【0016】
そのために、まず、エージェント内部のスタックに追加されている操作可能なGUIコンポーネントの集合を、より新しく追加された集合から順に検索し、未操作のGUIコンポーネントを求める。例えば、図6のスタックの状態においては、操作可能なGUIコンポーネントの集合O2,O1と順次検索していく。ここでは、操作可能なGUIコンポーネントの集合O2の要素であるGUIコンポーネントのボタンc4を発見することができる。
【0017】
次に、内部のスタックに対して、先ほど発見した未操作のGUIコンポーネントを要素とする操作可能なGUIコンポーネントの集合より以前にスタックに追加された集合を順次検索し、操作済のGUIコンポーネントを抽出する。例えば、図6の例では、発見した未操作のGUIコンポーネントのボタンc4が操作可能なGUIコンポーネントの集合O2の要素なので、それより前にスタックに追加された操作可能なGUIコンポーネントの集合O1から、操作済のGUIコンポーネントのボタンc1を抽出する。
【0018】
さらに、抽出した操作済のGUIコンポーネントを初期画面から順次、自動操作することで、発見した未操作のGUIコンポーネントが表示される画面に変化させることができ、変化後の画面に対して未操作のGUIコンポーネントを自動操作できるようになる。図6の場合には、図1の初期画面に対して、エージェントが抽出した操作済のGUIコンポーネントのボタンc1を自動操作し、図3の画面に変化させる。そして図3の画面に対して、発見した未操作のGUIコンポーネントのボタンc4を自動操作する。
【0019】
以上の処理を繰り返すことで、操作履歴を用いずとも、未操作のGUIコンポーネントを網羅的に自動操作することができるようになる。バージョンアップ前後で、この技術による網羅的な自動操作を実施し、検査対象ソフトウェアの画面遷移を比較することで、回帰テストを自動化できる。
【発明の概要】
【発明が解決しようとする課題】
【0020】
非特許文献1の検査技術は、画面遷移の検査を自動化するために、画面遷移グラフやUMLのアクティビティ図のような形式的な仕様が必要になる。しかしながら、現実のソフトウェア開発においては、必ずしも形式的な仕様が作成されるわけではなく、仕様が自然言語で記述されている場合も数多くある。この場合、自然言語で記述された仕様から形式的な仕様を人手で作成しなければならない。この作業を実施するためには、正確な仕様の理解や、形式的な仕様を記述するための専門的な知識、開発経験などが必要となるため、検査自体は自動化できても、形式的仕様を作成するために膨大な工数を要する場合がある。また、そのような専門知識を有する人材が開発プロジェクト内に存在しないときには、そもそもこの作業を実施できず、この技術を適用できない。よって、形式的な仕様の作成を伴わずに自動検査を実現するという課題を解決する必要がある。
【0021】
また、非特許文献2の検査技術は、検査対象ソフトウェアのGUIに対するユーザの操作履歴を記録し、それをテストケースとしてエージェントによりGUIを自動操作することで、検査の自動化を実現している。これらの技術においては、非特許文献1のような形式的な仕様を作成する作業は不要になるが、代わりにユーザの操作履歴を蓄積することが必要になる。さらにその蓄積された操作手順に対する検査しか実施できず、それ以外の手順で発生する画面遷移のエラーは検出できない。よって、より検査の品質を高めるためには、蓄積された操作手順以外の画面遷移も自動検査可能にするという課題を解決しなければならない。
【0022】
さらにまた、非特許文献3の検査技術は、エージェントが検査対象ソフトウェアの画面から操作可能なGUIコンポーネントを抽出し、その中から未操作のGUIコンポーネントを自動操作することによって、検査を自動化することができる。この技術では、形式的な仕様の作成は不要で、過去にユーザが操作していなかった操作手順についても検査が可能になる。しかし、以下の2点の課題がある。
【0023】
まず、1点目は検査の網羅性である。つまり、非特許文献3の技術では、自動操作した後の操作後の検査対象ソフトウェアの画面から、操作可能なGUIコンポーネントの集合を抽出するときに、その操作によって新規に表示されたGUIコンポーネントのみを抽出し、自動操作の対象としている。よって、操作前の画面において表示され、操作後の画面においても表示され且つ操作可能なGUIコンポーネントは自動操作の対象外となっている。即ち、操作可能な同一のGUIコンポーネントが表示されるいくつかの異なる画面があったとき、非特許文献3の技術では、その画面のどれか1つから、そのGUIコンポーネントを自動操作するが、それ以外の画面からは自動操作しないことを意味する。よって、自動操作しなかった画面においてそのGUIコンポーネントを操作したときに、画面遷移エラーが発生するような場合、非特許文献3の技術では、その画面遷移エラーを発見できない可能性がある。
【0024】
一般にソフトウェアの画面遷移は、ソフトウェア内部のメモリなどの状態によって決定されるため、同一のGUIコンポーネントに対する操作であっても、画面が異なればその画面遷移が変わる場合がある。よって、異なる画面ごとに未操作のGUIコンポーネントを網羅的に操作するという課題を解決する必要がある。
【0025】
前述の非特許文献3における従来技術の説明における例でも述べたが、例えば、検査対象ソフトウェアの図1の初期画面に対して、エージェントがGUIコンポーネントのボタンc1を自動操作し、図3の画面に変化したときを考える。なお、内部のスタックの状態は図2とする。このとき、エージェントは、図3の画面の操作可能なGUIコンポーネントのボタンc1,c3,c4と、既に図1の初期画面に対して抽出している操作可能なGUIコンポーネントの集合O1={c1}との差分をとり、操作可能なGUIコンポーネントの集合O2={c3,c4}を内部スタックに追加する(図4)。エージェントはGUIコンポーネントの集合O2から次に操作するGUIコンポーネントを選択するため、図3の画面からは、GUIコンポーネントのボタンc3もしくはc4が自動操作されることになり、GUIコンポーネントのボタンc1は自動操作の対象外となる。よって、図4の内部スタックの状態では、エージェントは、図3の画面でGUIコンポーネントのボタンc1を自動操作することができず、その画面遷移にエラーがあった場合は検出できない。
【0026】
仮に、非特許文献3で、単純にそのときの画面上で操作可能な全てのGUIコンポーネントからなる集合としてO2={c1,c3,c4}を内部スタックに追加すれば、確かに図3の画面においてもGUIコンポーネントのボタンc1を自動操作することが可能になる。しかし、この場合は、自動操作の過程で過去に表示された画面が再表示され、新規に表示されるGUIコンポーネントがないときでも、操作可能なGUIコンポーネントの集合は空集合としてスタックに登録されなくなる。よって、既にその画面において操作可能なGUIコンポーネントの全てが操作済であったとしても、自動操作を繰り返し行ってしまい、エージェントが停止しない場合が発生してしまう。
【0027】
2点目は検査の効率性である。一般にソフトウェアにおけるテスト期間は限られており、自動化技術においては、効率良く検査できることが必須の条件になる。非特許文献3の技術では、エージェントは、検査対象ソフトウェアの画面から新規に表示された操作可能なGUIコンポーネントを抽出し、それらが全て操作済のGUIコンポーネントだった場合に、検査対象ソフトウェアを再起動する。しかし、ソフトウェアの再起動は、単純にコマンド1行で実施でき、短時間で完了するものもあれば、複雑な手続きになる場合もある。企業などの情報システムのソフトウェアの場合、大抵はデータベースなどと連携しており、ソフトウェアの再起動の際は、データベースの初期化などで数時間を要するものもある。よって、検査対象ソフトウェアの再起動の回数が増加すると、自動検査の効率が悪化するため、再起動回数を減少させるという課題を解決する必要がある。
【0028】
前述の非特許文献3に対する従来技術の説明における例でも述べたが、検査対象ソフトウェアの表示画面が図3で、エージェントの内部スタックの状態が図4のときに、GUIコンポーネントのボタンc3を自動操作し、画面が変化しなかった場合を考える。
【0029】
このとき、新規に表示された操作可能なGUIコンポーネントが存在しないため、図5のように操作可能なGUIコンポーネントの集合O3={}を内部スタックに追加し、集合O3から選択可能なGUIコンポーネントがないため検査対象ソフトウェアを再起動する。エージェントは再起動後に、図1の初期画面から、過去にエージェントが操作した手順に従ってGUIコンポーネントのボタンc1を操作し、再度、検査対象ソフトウェアを図3の画面にした後、未操作のGUIコンポーネントのボタンc4を操作することになる。
【0030】
しかし、ここでの検査対象ソフトウェアの再起動は、未操作のGUIコンポーネントのボタンc4を操作するためには、本来不要な処理である。つまり、図3の画面において、エージェントがGUIコンポーネントのボタンc3に対して自動操作し、画面が変化しなかった場合、検査対象ソフトウェアを再起動することなく、そのまま未操作のGUIコンポーネントのボタンc4を自動操作すれば良く、これによって再起動に伴う時間を節約することができる。
【課題を解決するための手段】
【0031】
本発明では、非特許文献1のように形式的な仕様の作成や、非特許文献2のようにユーザの過去の操作履歴を必要とせずに、検査対象ソフトウェアが動作する環境のみで、ソフトウェアのバージョンアップなどに伴う画面遷移の回帰テストを自動化を実現する。
【0032】
本発明では、コンピュータによって、検査対象ソフトウェアを起動し、当該検査対象ソフトウェアの現在の表示画面を構成するウインドウの集合と、そのウインドウを構成するGUIコンポーネントの集合、つまり画面の状態に関する情報を取得する。さらに取得した画面の状態に関する情報から、過去に表示されたことのあるGUIコンポーネントも含めて操作可能な全てのGUIコンポーネントを取得する。
【0033】
本発明における操作可能なGUIコンポーネントとは、マウスのクリック操作が可能なGUIコンポーネントに限定される。例えば、ボタン、コンボボックス、チェックボックス、メニューボタンなどである。テキストボックスのように文字列入力操作が可能なGUIコンポーネントは対象外とする。
【0034】
次に、本発明では、コンピュータによって、前記取得した操作可能なGUIコンポーネントの中から、その画面において未操作のGUIコンポーネントを選択し、選択したGUIコンポーネントを自動操作する。
【0035】
非特許文献3においては、表示画面から取得する操作可能なGUIコンポーネントは、新規に表示されたGUIコンポーネントに限られていた。そのため、表示画面において操作可能でも、自動操作の過程で過去に表示したことがあるGUIコンポーネントは、取得対象外であり、エージェントは自動操作することができなかった。本発明では、現在の表示画面において操作可能な全てのGUIコンポーネントを取得するため、過去に表示されていたGUIコンポーネントも自動操作の対象とすることができ、非特許文献3の検査の網羅性を高めるという課題を解決することができる。
【0036】
さらに、本発明では、コンピュータは、操作後の表示画面に対して前記同様に画面の状態に関する情報を取得し、元画面(操作前の画面)の状態、操作対象GUIコンポーネントおよび操作後の画面の状態の組で構成される画面遷移に関する情報を生成する。
【0037】
コンピュータは、この操作後の表示画面に対して、画面の状態に関する情報および操作可能なGUIコンポーネントの取得、未操作のGUIコンポーネントの自動操作、画面遷移に関する情報の生成処理を繰り返す。これによって、生成された画面の状態に関する情報の集合と画面遷移に関する情報の集合とを記憶装置に保存し、画面遷移グラフを自動構築する。
【0038】
上記の処理を繰り返す過程で、もし、表示画面から取得した操作可能なGUIコンポーネントの集合に、その画面の状態において未操作のGUIコンポーネントが存在しない場合、コンピュータは、保持している画面遷移グラフである画面の状態に関する情報の集合と画面遷移に関する情報の集合の中に、現在の画面の状態から未操作のGUIコンポーネントを有する画面の状態への経路が存在するかを探索する。
【0039】
経路が見つかれば、コンピュータは、その経路に示される操作の手順に従って、検査対象ソフトウェアの表示画面を自動操作し、表示画面を未操作のGUIコンポーネントを有する画面の状態に変化させる。そして、その画面において、未操作のGUIコンポーネントに対する自動操作、画面遷移に関する情報の生成、操作後の画面の状態に関する情報および操作可能なGUIコンポーネントの取得処理を繰り返す。
【0040】
もし経路が見つからなければ、検査対象ソフトウェアを再起動し、初期画面に対して、画面の状態に関する情報および操作可能なGUIコンポーネントの取得、未操作のGUIコンポーネントの自動操作、画面遷移に関する情報の生成処理を繰り返す。
【0041】
非特許文献3では、このような画面の状態において未操作のGUIコンポーネントが存在しない場合は、一律、検査対象ソフトウェアを再起動してしまっていた。本発明では、保持する画面遷移グラフにおいて、現在の画面の状態から未操作のGUIコンポーネントが存在する画面の状態への経路が発見できた場合には、再起動を実施しない。これによって、検査対象ソフトウェアの再起動の回数を減らし、検査の効率化を実現するという課題を解決できる。
【0042】
入力として、属性変数の集合A={a1,・・・ak}と、検査対象ソフトウェアの起動スクリプトおよび再起動スクリプトとが与えられた場合に、入力装置、記憶装置および表示装置を備えたコンピュータを用いて本発明の画面遷移グラフの自動生成を行う方法を、図7〜図9の処理フローを用いて説明する。
【0043】
この手続きは、コンピュータに対する初期の入力として、属性変数の集合Aを入力装置から与える。属性変数の集合Aはk個の属性変数を持ち、A={a1,・・・ak}とする。但し、k≧1である。また、同様に、検査対象ソフトウェアの起動スクリプトおよび再起動スクリプトを例えば、ファイル形式で与える。
【0044】
この手続きは、最終的な処理結果として、画面遷移グラフのデータ表現形式である、画面の状態に関する情報の集合Gと画面遷移に関する情報の集合Tとを、図7のステップs9に示すように、記憶装置に出力する。
【0045】
なお、以下では、「画面の状態に関する情報」を「画面の状態」と、また、「画面遷移に関する情報」を「画面遷移」と略記するものとする。
【0046】
まず、コンピュータは、図7のステップs1のように、画面の状態の集合Gと、画面遷移の集合Tに空集合を設定する。さらに、入力された検査対象ソフトウェアの起動スクリプトを、前記コンピュータもしくは前記コンピュータにネットワークを介して接続された任意の動作環境上で実行して当該検査対象ソフトウェアを起動し、その初期画面を表示装置に表示する。
【0047】
次に、図7のステップs2のように検査対象ソフトウェアの表示画面に対して、画面の状態を取得し、変数vに代入する。特に、表示画面が初期画面の場合は、取得した画面の状態をg0とする。ソフトウェアの多くは、GUIとしてウインドウシステムを採用しており、ソフトウェアの画面は、いくつかのウインドウから構成される。従って、コンピュータが表示画面から取得する画面の状態をgとし、ウインドウ全体の有限集合をW、表示されているウインドウをw1,w2,・・・wn∈Wとすると、コンピュータは、画面の状態をg={w1,w2,・・・wn}というウインドウの集合Wの部分集合として取得する。
【0048】
ウインドウにはいくつかのGUIコンポーネント(タイトルバーやラベル、ボタン、コンボボックス、テキストボックス)などが存在する。よって、取得する画面の状態における各ウインドウw∈Wは、GUIコンポーネント全体の有限集合をCとし、ウインドウwに所属するGUIコンポーネントをc1,c2,・・・cm∈Cとすると、w={c1,c2,・・・cm}というGUIコンポーネントの集合Cの部分集合となる。
【0049】
GUIコンポーネントは、
・ラベル、ボタン、コンボボックス、タイトルバーなどのコンポーネントの種類
・コンポーネントの表示位置(絶対位置、相対位置など)
・コンポーネントの活性や非活性の状態
・ラベルの表示文字列やテキストボックスなどの設定文字列
・色や文字のサイズ
・キーボードフォーカスの状態
などに代表される様々な属性情報を有する。
【0050】
本発明では、画面の状態におけるGUIコンポーネントは、事前にコンピュータに入力として与えられた属性情報を表す変数(属性変数)に対する値の割り当ての組み合わせで定義する。属性変数の有限集合をA={a1,・・・ak}とし、各属性変数の取り得る値の有限集合をDとすると、GUIコンポーネントは、各変数に対する値の割り当て(a1=d1,・・・ak=dk)と表現する。但し、d1,・・・dn∈Dとする。
【0051】
例えば、図10に示すように、1つのウインドウに2つGUIコンポーネントが配置されている画面1および画面2を考える。画面1および画面2におけるウインドウをそれぞれw1,w2、画面1におけるラベルとボタンのGUIコンポーネントをそれぞれc1,c2、画面2におけるラベルとボタンのGUIコンポーネントをそれぞれc3,c4とする。
【0052】
このとき、画面1および画面2に対して、コンピュータが取得する画面の状態g1,g2はそれぞれ
1={w1}={{c1,c2}}
2={w2}={{c3,c4}}
のようになる。
【0053】
ここで、属性変数の集合として、A={a1}がコンピュータに与えられており、属性変数a1の取り得る値がGUIコンポーネントの表示文字列である場合を考えると、
1={{c1,c2}}={{(a1=画面1の例),(a1=A)}}
2={{c3,c4}}={{(a1=画面1の例),(a1=A)}}
になり、属性変数の集合Aのもとで、画面の状態g1とg2は等しくなる。もし、属性変数の集合の中にGUIコンポーネントの表示の絶対座標を表す変数を入れた場合には、画面の状態g1とg2が異なる画面の状態として識別される。以上のように、コンピュータは、事前に与えられた属性変数の集合Aに基づいて、検査対象ソフトウェアの画面の状態を取得する。
【0054】
コンピュータは、表示画面の状態を取得すると、図7のステップs3のように、表示画面の状態を代入した変数vが、画面の状態の集合Gの要素であるかを調べる。もし、変数vが画面の状態の集合Gの要素ではない場合、新規に取得した画面の状態ということになるので、コンピュータは図8に示す手続きを実施し、画面の状態の集合Gと画面遷移の集合Tを更新する。
【0055】
具体的には、図8のステップs31では、まずコンピュータは、変数vが示す画面の状態を画面の状態集合Gに追加する。さらに、図8のステップs32において、コンピュータは、変数vが示す画面の状態から操作可能な全てのGUIコンポーネントを抽出し、その集合を変数Oに代入する。但し、ここでの操作可能なGUIコンポーネントは、マウスクリック操作が可能なものを表し、例えば、ボタンやコンボボックス、チェックボックス、ラジオボタンなどが相当する。単なるラベルやテキストボックスのように文字列入力操作が可能なものは対象外とする。
【0056】
続いて、図8のステップs33〜s35によって、変数Oに代入された操作可能なGUIコンポーネントの集合の各要素に対する画面遷移を生成し、画面遷移の集合Tに追加する。ここで、画面遷移は、元画面(操作前の画面)の状態、操作対象GUIコンポーネント、操作後の画面の状態の組で表現され、例えば、元画面の状態をg、操作対象GUIコンポーネントをo、操作後の画面の状態をg’とすると、(g,o,g’)で表現する。但し、o∈Oとする。
【0057】
まず、図8のステップs33で、コンピュータは、変数Oに代入した操作可能なGUIコンポーネントの集合が空集合か判定し、空集合であれば図7のステップs4に進む。空集合でなければ、図8のステップs34で変数Oから操作可能なGUIコンポーネントを取り出し、そのGUIコンポーネントを変数oに代入する。さらに、図8のステップs35で、変数vが示す画面の状態と、変数oが示すGUIコンポーネントに対して、画面遷移(v,o,TBD)を生成し、画面遷移の集合Tに追加する。ここで、TBDは未決定を意味する定数であり、画面遷移(v,o,TBD)は、変数vが示す画面の状態において変数oの示すGUIコンポーネントの操作が未実施のため、操作後の画面の状態が未決定であることを意味している。このように、コンピュータは、図8のステップs34,s35を、操作可能なGUIコンポーネントの集合Oが空集合になるまで繰り返して画面の状態の集合Gと画面遷移の集合Tを更新し、図7のステップs4へ処理を進める。
【0058】
図7のステップs3において、変数vの示す取得した画面の状態が、既に取得済で画面の状態の集合Gの要素であった場合、もしくは図8の手続きを完了した場合は、コンピュータは図7のステップs4を実施する。図7のステップs4では、変数vが示す取得した画面の状態において、未操作のGUIコンポーネントを特定するための処理を実施する。即ち、画面遷移の集合Tの要素の中に、元画面が変数vの示す画面の状態で且つ操作後の画面の状態が定数TBDである画面遷移が存在するかを調べる。ここで、操作対象GUIコンポーネントを改めて変数oで表すと、そのような画面遷移はt=(v,o,TBD)と表現できる。
【0059】
もし、条件に合致する画面遷移tが画面遷移の集合Tの要素に存在する場合は、図7のステップs5のように、コンピュータは、画面遷移の集合Tからその画面遷移tを取り出し、検査対象ソフトウェアの表示画面に対して、画面遷移tにおける変数oの示すGUIコンポーネントを自動操作する。これによって、検査対象ソフトウェアの表示画面が変化する。検査対象ソフトウェアの表示画面が変化した後は、コンピュータは、図7のステップs6のように、操作後の表示画面の状態を取得し、変数v’に代入する。このように、変数vの示す画面の状態において、変数oの示すGUIコンポーネントを操作した場合の操作後の画面の状態が変数v’として決定されるため、続く図7のステップs7においてコンピュータは、画面遷移tを(v,o,v’)に更新して、画面遷移の集合Tに追加する。
【0060】
コンピュータは、さらに変数v’の示す画面の状態から、未操作のGUIコンポーネントを自動操作するために、図7のステップs8において、変数vに変数v’の示す画面の状態を代入し、図7のステップs3に戻って処理を繰り返す。これによって、コンピュータは、画面の状態に対する未操作のGUIコンポーネントを自動操作し、網羅的に画面遷移を生成することができる。
【0061】
もし、図7のステップs4において、画面遷移の集合Tの要素の中に、元画面が変数vの示す画面の状態で且つ操作後の画面の状態が定数TBDである画面遷移tが存在しない場合は、既にその画面の状態において、未操作のGUIコンポーネントが存在しないことになるため、図9に示す手続きを実施する。
【0062】
この場合、図9のステップs41,s42において、コンピュータは、画面の状態の集合Gと画面遷移の集合Tからなる画面遷移グラフに対して、変数vの示す画面の状態から未操作のGUIコンポーネントがある画面の状態への経路を探索する。ここでの経路とは、画面遷移の列t1,t2,t3,・・・tnのことであり、以下の条件を全てを満たすものである。
・nは1以上の整数である。
・1≦i≦nである任意のiに対して、画面遷移ti=(gi,oi,gi’)としたとき、元画面の状態giおよび操作後の画面の状態gi’は定数TBDではない。
・1≦i≦n−1である任意のiに対して、画面遷移ti=(gi,oi,gi’)としたとき、画面遷移tiにおける操作後の画面の状態gi’と画面遷移ti+1の元画面の状態gi+1は等しい。
・画面遷移t1=(g1,o1,g1’)とすると、元画面の状態g1が変数vの示す画面の状態と等しい。
・画面遷移tn=(gn,on,gn’)とすると、操作後の画面の状態gn’が未操作のGUIコンポーネントを有する。これは、画面の状態gn’を元画面の状態とし且つ操作後の画面の状態を定数TBDとする画面遷移(gn’,o,TBD)が画面遷移の集合Tに存在することを意味する。
【0063】
画面の状態の集合Gと画面遷移の集合Tからなる画面遷移グラフに対して、このような経路を求める方法は非特許文献4などに示されており、この技術を用いれば、経路を求めることが可能である。
【0064】
もし、図9のステップs41,s42で経路が発見できた場合、コンピュータは、図9のステップs43により、経路を構成する画面遷移t1,t2,・・・tnの操作対象GUIコンポーネントo1,o2,・・・onを先頭から順に表示画面に対して自動操作して、表示画面を未操作のGUIコンポーネントを有する画面の状態gn’に変化させる。そして、図9のステップs44により、変数vにその未操作のGUIコンポーネントを有する画面の状態gn’を代入し、図7のステップs3に戻り、処理を継続する。
【0065】
図9のステップs41,s42で経路が発見できなかった場合は、図9のステップs45で、変数vの示す画面の状態が、検査対象ソフトウェアの初期画面の状態と等しいか調べる。もし変数vの示す画面の状態が検査対象ソフトウェアの初期画面の状態と異なるのであれば、図9のステップs46により、コンピュータは、入力として与えられている検査対象ソフトウェアの再起動スクリプトを実行し、ソフトウェアの表示画面を初期画面に戻す。そして図7のステップs2に戻って処理を継続する。図9のステップs45により、変数vの示す画面の状態が初期画面の状態と等しければ、初期画面から画面遷移によって到達可能な画面の状態には、未操作のGUIコンポーネントが存在しないことになり、網羅的な自動操作が完了したことになる。よって、図7のステップs9において、コンピュータは、蓄積した画面の状態の集合Gと画面遷移の集合Tを記憶装置に出力し、手続きを完了する。
【0066】
図7のステップs4において、画面遷移の集合Tの要素の中に、元画面が変数vの示す画面の状態で且つ操作後の画面の状態が定数TBDである画面遷移tが存在しない場合は、非特許文献3では、一律、検査対象ソフトウェアを再起動させてしまっていた。しかし、本発明では、図9に示す手続きを実施し、保持する画面の状態の集合Gと画面遷移の集合Tにおいて、変数vの示す画面の状態から未操作のGUIコンポーネントを有する状態への経路が存在する場合には、検査対象ソフトウェアの再起動を実施しない。これによって、検査対象ソフトウェアの再起動の回数を減少させるという課題を解決することができる。
【発明の効果】
【0067】
本発明によれば、検査対象ソフトウェアの形式的な画面遷移やプログラムの仕様、あるいはユーザの操作履歴を必要とせず、ソフトウェアのバージョンアップや動作環境の更改などのバージョンアップ前後の検査対象ソフトウェアを自動操作することができる。これによって画面の状態の集合と画面遷移の集合を自動生成し、それぞれの画面遷移グラフを自動構築できる。バージョンアップ前後で、検査対象ソフトウェアに対してコンピュータが自動構築した画面遷移グラフ、即ち画面の状態の集合と画面遷移の集合をそれぞれ比較することで、バージョンアップ前後で異なる画面遷移を自動的に発見することができる。
【0068】
本発明では、画面の状態に対して操作可能な全てのGUIコンポーネントを自動操作の対象とすることで、非特許文献3に比べ検査の網羅性を向上させることができる。さらに、その画面の状態において未操作のGUIコンポーネントが抽出できない場合は、非特許文献3のように、一律、検査対象ソフトウェアを再起動しない。本発明では、保持する画面の状態の集合と画面遷移の集合において、未操作のGUIコンポーネントが存在する画面の状態までの経路を探索する。その結果、経路が発見できれば再起動を行わず、自動操作を継続できる。これによって、検査対象ソフトウェアの再起動にかかる時間を省くことができ、検査を効率的に実施できるようになる。
【図面の簡単な説明】
【0069】
【図1】検査対象ソフトウェアの表示画面の一例である。
【図2】非特許文献3におけるエージェント内部のスタックの状態の一例である。
【図3】検査対象ソフトウェアの表示画面の一例である。
【図4】非特許文献3におけるエージェント内部のスタックの状態の一例である。
【図5】非特許文献3におけるエージェント内部のスタックの状態の一例である。
【図6】非特許文献3におけるエージェント内部のスタックの状態の一例である。
【図7】本発明の画面遷移グラフの自動生成方法の処理フローである。
【図8】本発明の画面遷移グラフの自動生成方法の処理フローである。
【図9】本発明の画面遷移グラフの自動生成方法の処理フローである。
【図10】検査対象ソフトウェアの表示画面の一例である。
【図11】本発明の画面遷移グラフの自動生成装置の実施の形態の一例を示す構成図である。
【図12】実施例における検査対象ソフトウェアの動作例である。
【図13】検査対象ソフトウェアの表示画面の一例である。
【図14】実施例におけるハードウェア1で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図15】実施例におけるハードウェア1で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図16】実施例におけるハードウェア1で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図17】実施例におけるハードウェア1で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図18】実施例におけるハードウェア1で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図19】実施例におけるハードウェア1で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図20】実施例におけるハードウェア1で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図21】実施例におけるハードウェア1で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図22】実施例におけるハードウェア2で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図23】実施例におけるハードウェア2で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図24】実施例におけるハードウェア2で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図25】実施例におけるハードウェア2で動作する検査対象ソフトウェアに対して図7〜図9の処理フローを実施した場合の内部状態の一例である。
【図26】実施例における記憶装置に保存された画面の状態の集合と画面遷移の集合とからなるグラフの表示の一例である。
【図27】実施例における記憶装置に保存された画面の状態の集合と画面遷移の集合とからなるグラフの表示の他の例である。
【発明を実施するための形態】
【0070】
図11は本発明の画面遷移グラフの自動生成方法を実施する装置の実施の形態の一例、ここでは周知のコンピュータ上に実現した例を示すもので、図中、1は入力装置、2は記憶装置、3は表示装置、4はコンピュータである。
【0071】
入力装置1は、キーボード、マウス等からなり、ユーザがコンピュータ4に所定の情報、ここでは図7〜図9に示した手続きにおける属性変数の集合Aや、検査対象ソフトウェアの起動スクリプトおよび再起動スクリプトを入力するためのものである。記憶装置2は、コンピュータ4が実施する図7〜図9に示した手続きの出力結果である画面の状態の集合Gと画面遷移の集合Tとからなる画面遷移グラフを保存するためのものである。表示装置3は、液晶ディスプレイ、CRT等からなり、記憶装置2に保存されている画面遷移グラフを表示するためのものである。
【0072】
コンピュータ4は、図7〜図9に示した処理フローに対応する所定のプログラムに従い、各装置を制御するとともに、この際、画面状態取得装置5、画面自動操作装置6、経路探索装置7、制御装置8を構成する。
【0073】
画面状態取得装置5は、図7の手続きにおけるs2およびs6、並びに図9の手続におけるs44のステップにおいて、GUIコンポーネントの属性変数の集合に基づいて、検査対象ソフトウェアの画面の状態を取得する装置である。
【0074】
画面自動操作装置6は、図7の手続きにおけるs5、並びに図9の手続きにおけるs43のステップにおいて、検査対象ソフトウェアの画面に対して、GUIコンポーネントを自動操作する装置である。
【0075】
経路探索装置7は、図9の手続きにおけるs41,s42のステップにおいて、画面の状態の集合Gと画面遷移の集合Tとに対して、変数vの示す画面から未操作のGUIコンポーネントを有する画面への経路を探索する装置である。
【0076】
制御装置8は、入力装置1から入力された起動スクリプトにより検査対象ソフトウェアを起動する機能を有する。また、制御装置8は、入力装置1から入力されたGUIコンポーネントの属性変数の集合を画面状態取得装置5に渡し、当該画面状態取得装置5で取得した画面の状態を受け取る機能を有する。また、制御装置8は、前記画面の状態から、過去に表示されたことのあるGUIコンポーネントも含めて操作可能な全てのGUIコンポーネントを取得する機能を有する。また、制御装置8は、操作可能な全てのGUIコンポーネントを画面自動操作装置6に与えて未操作のGUIコンポーネントを自動操作させるとともに、画面遷移を生成する機能を有する。また、制御装置8は、現在の画面において未操作のGUIコンポーネントが存在しない場合は、経路探索装置7により現在の画面から未操作のGUIコンポーネントを有する画面への経路を探索させ、経路があればその結果を画面自動操作装置6に与えて自動操作させる機能を有する。また、制御装置8は、前記経路がなく、現在の画面が初期画面でなければ、入力装置1から入力された再起動スクリプトにより検査対象ソフトウェアを再起動する機能を有する。また、制御装置8は、前記経路がなく、現在の画面が初期画面であれば、前記取得した画面の状態の集合Gと前記生成した画面遷移の集合Tとからなる画面遷移グラフを記憶装置2に出力して保存する機能を有する。さらにまた、制御装置8は、記憶装置2に保存されている画面の状態の集合Gと画面遷移の集合Tを表示装置3に表示したり、記憶装置2に保存されている画面の状態の集合や画面遷移の集合を比較し、差分を表示装置3に表示する機能を有する。
【0077】
本装置により、検査対象ソフトウェアの形式的な画面遷移やプログラムの仕様、あるいはユーザの操作履歴を必要とせず、検査対象ソフトウェアを自動操作することができる。これによって、ソフトウェアのバージョンアップや動作環境の更改などのバージョンアップ前後において、画面の状態の集合と画面遷移の集合を自動生成し、それぞれの画面遷移グラフを自動構築できる。本装置が自動構築した画面遷移グラフ、即ち画面の状態の集合と画面遷移の集合をバージョンアップ前後でそれぞれ比較することで、バージョンアップ前後で異なる画面遷移を自動的に発見することができる。
【0078】
本装置は、画面の状態に対して操作可能な全てのGUIコンポーネントを自動操作の対象とすることで、非特許文献3に比べ検査の網羅性を向上させることができる。さらに、画面の状態において未操作のGUIコンポーネントが抽出できない場合は、非特許文献3のように、一律、検査対象ソフトウェアを再起動しない。本装置は、図11の経路探索装置7を備えることにより、保持する画面の状態の集合と画面遷移の集合において、未操作のGUIコンポーネントが存在する画面までの経路を探索することができる。その結果、経路が発見できれば再起動を行わず、自動操作を継続できる。これによって、検査対象ソフトウェアの再起動にかかる時間を省くことができ、検査を効率的に実施できるようになる。
【0079】
なお、前述した実施の形態では、画面状態取得装置5、画面自動操作装置6、経路探索装置7および制御装置8をコンピュータ上で実現した例を示したが、ハードウェアで実現しても良い。またこれら各装置が、適切な通信路で相互に接続された複数のハードウェア上に分散して存在し、相互に通信し合いながら実行することもできる。
【0080】
本発明の装置が検査対象とするソフトウェアは、コンピュータ4において動作しても良いし、適切な通信路で相互に接続された任意の動作環境上で動作していても良い。
【0081】
以下、本発明による画面遷移グラフの自動生成方法について例を挙げて説明する。
【実施例1】
【0082】
本実施例では、ハードウェアの更改前後で動作する同一のソフトウェアに対する画面遷移の回帰テストの例を示す。更改前のハードウェアをハードウェア1、更改後のハードウェアをハードウェア2とする。検査対象ソフトウェアは、図12の動作をするソフトウェアを仮定する。
【0083】
・ハードウェア1およびハードウェア2で動作する検査対象ソフトウェアの初期画面は、ともに図1の画面であり、図1の画面における操作可能なGUIコンポーネントはc1である。図1の画面においてGUIコンポーネントのボタンc1を操作すると、図3の画面に変化する。
【0084】
・図3の画面における操作可能なGUIコンポーネントはc1,c3,c4である。図3の画面においてボタンc1を操作すると、検査対象ソフトウェアがハードウェア1上で動作する場合は図1の画面に戻り、検査対象ソフトウェアがハードウェア2上で動作する場合は図13の画面に変化する。また、図3の画面においてGUIコンポーネントのボタンc3を操作すると、検査対象ソフトウェアがハードウェア1上で動作する場合もハードウェア2上で動作する場合も、ともに画面は変化せず、図3を表示する。また、図3の画面においてGUIコンポーネントのボタンc4を操作すると、検査対象ソフトウェアがハードウェア1上で動作する場合もハードウェア2上で動作する場合も、ともに図1の画面に戻る。
【0085】
・図13の画面はエラーメッセージが表示され、いかなるGUIコンポーネントも操作できないものとする。
【0086】
本実施例では、入力装置1から属性変数の集合Aを与える。ここでの属性変数の集合はA={a1}とし、a1はGUIコンポーネントの表示文字列とする。また、入力装置1から検査対象ソフトウェアの起動スクリプトおよび再起動スクリプトを与える。
【0087】
<検査対象ソフトウェアがハードウェア1上で動作する場合>
まず、ハードウェア1上で動作する検査対象ソフトウェアに対する本装置の動作を説明する。
【0088】
始めに、制御装置8は図7のステップs1を実行し、画面の状態の集合Gおよび画面遷移の集合Tとして空集合を設定するとともに、入力として与えられた起動スクリプトを用いて検査対象ソフトウェアをハードウェア1で起動する。また、制御装置8は図7のステップs2を実行し、画面状態取得装置5を用いて、起動した検査対象ソフトウェアの画面の状態を取得する。このとき、検査対象ソフトウェアが表示しているのは初期画面なので、取得した画面の状態は、g0={{c1,c2}}={{(a1=A),(a1=画面の例1)}}であり、これを変数vに代入する。このときの画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面を図14に示す。
【0089】
次に、制御装置8は図7のステップs3を実行し、変数vの示す画面の状態g0が画面の状態の集合Gに含まれるか調べる。このとき、図14に示すように集合Gは空集合であり、g0を含まないため、図8の手続きを実行する。
【0090】
制御装置8は図8のステップs31を実行し、変数vの示す画面の状態g0を画面の状態の集合Gに追加し、さらに図8のステップs32を実行し、画面の状態g0から操作可能なGUIコンポーネントの集合を抽出し、変数Oに代入する。これは、図12に示された図1の画面に対する操作可能なGUIコンポーネントのボタンc1を抽出することになり、O={c1}を取得する。
【0091】
また、制御装置8は図8のステップs33を実行し、変数Oの示す操作可能なGUIコンポーネントの集合は空集合ではないため、さらに図8のステップs34,s35を実行し、変数Oから操作可能なGUIコンポーネントを取り出し、画面遷移の集合Tに画面遷移を追加する。これを操作可能なGUIコンポーネントの集合Oが空集合になるまで繰り返す(s33)。ここでは、変数O={c1}なので、制御装置8は操作可能なGUIコンポーネントc1を取り出し、画面遷移t1=(g0,c1,TBD)を画面遷移の集合Tに追加する。そして図7のステップs4に戻る。このときの画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面を図15に示す。
【0092】
次に制御装置8は図7のステップs4を実行し、画面遷移の集合Tに、元画面の状態が変数vの示す画面の状態g0で且つ操作後の画面の状態が定数TBDである画面遷移が存在するか調べる。この場合、図15に示すとおり画面遷移t1が発見されるので、制御装置8は図7のステップs5を実行し、画面遷移の集合Tから画面遷移t1を取り出し、変数tに代入する。さらに制御装置8は検査対象ソフトウェアの現在の表示画面である図1の画面に対して、変数tが示す画面遷移t1の操作対象GUIコンポーネントであるボタンc1を、画面自動操作装置6を用いて自動操作する。これによって検査対象ソフトウェアの表示画面は、図12に示すように、図1の画面に対するGUIコンポーネントのボタンc1を操作した後の画面である図3に変化する。
【0093】
次に制御装置8は図7のステップs6を実行し、画面状態取得装置5を用いて、図3の画面の状態を取得する。取得した画面の状態をg1とすると、g1={{c1,c2},{c3,c4}}={{(a1=A),(a1=画面の例1)},{(a1=B),(a1=C)}}となり、これを変数v’に代入する。この画面の状態が、画面遷移t1における操作後の画面の状態となるので、制御装置8は図7のステップs7を実行し、変数tの示す画面遷移t1を(g0,c1,v’)=(g0,c1,g1)として、画面遷移の集合Tに追加する。さらに、この画面の状態g1における未操作のGUIコンポーネントを自動操作するために、制御装置8は図7のステップs8を実行し、変数vに変数v’の示す画面の状態g1を代入して、図7のステップs3に戻る。このときの、画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面を図16に示す。
【0094】
制御装置8は、さらに検査対象ソフトウェアが表示している図3の画面に対して、図7のステップs3を実行する。ここでは、図16に示すように、変数vの示す画面の状態g1が画面の状態の集合Gに含まれていないため、再び図8の手続きを実施する。図8の手続きにおいて、制御装置8は、図8のステップs31を実行し、変数vの示す画面の状態g1を画面の状態の集合Gに追加する。さらに、制御装置8は、図8のステップs32を実行して、変数vの示す画面の状態g1における操作可能なGUIコンポーネントの集合を取得し、変数Oに代入する。図12に示されているように、図3の画面に対する操作可能なGUIコンポーネントはc1,c3,c4なので、変数Oは{c1,c3,c4}となる。
【0095】
非特許文献3においては、図4のエージェント内部のスタックの状態が示すように、図3の画面において操作可能なGUIコンポーネントの集合O2は{c3,c4}であり、操作前に図1の画面で表示されていたGUIコンポーネントのボタンc1を取得対象外にしている。従って、図3の画面からGUIコンポーネントのボタンc1の自動操作が実施できない。
【0096】
制御装置8は、続く図8のステップs33〜s35を実行し、変数Oが示す操作可能なGUIコンポーネントの集合{c1,c3,c4}に対して、画面遷移の集合Tに、画面遷移t2=(g1,c1,TBD)、t3=(g1,c3,TBD),t4=(g1,c4,TBD)を追加して、図7のステップs4に戻る。このときの画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面を図17に示す。
【0097】
制御装置8は、続いて図7のステップs4を実行し、画面遷移の集合Tに、元画面の状態が変数vの示すg1で且つ操作後の画面の状態が定数TBDである画面遷移が存在するか調べる。この場合、図17に示すように、先ほど画面遷移の集合Tに追加した画面遷移t2,t3,t4が条件を満たす。よって、制御装置8は図7のステップs5を実行し、画面遷移の集合Tから画面遷移、例えばt2を取り出し、変数tに代入する。このときの変数tの示す画面遷移t2の操作対象GUIコンポーネントはボタンc1であり、制御装置8は画面自動操作装置6を用いて、検査対象ソフトウェアの現在の表示画面である図3の画面に対して、GUIコンポーネントのボタンc1を自動操作する。このように本発明では、非特許文献3とは異なり、元画面である図1の画面に表示されていたGUIコンポーネントのボタンc1を、図3の画面においても操作することができる。
【0098】
図12に示すように、ハードウェア1上で動作する検査対象ソフトウェアは、図3の画面においてGUIコンポーネントのボタンc1を操作すると、図1の画面を表示する。ここで、制御装置8は、図7のステップs6を実行する。つまり画面状態取得装置5を用いて、検査対象ソフトウェアが表示している図1の画面の状態を取得する。よって、ここでは図1の画面の状態として以前に取得したg0と同一の画面の状態が取得でき、g0を変数v’に代入する。画面の状態g1に対してGUIコンポーネントのボタンc1を操作したときの操作後の画面の状態が、変数v’の示す画面の状態g0なので、制御装置8は、図7のステップs7で、変数tの示す画面遷移t1を{g1,c1,g0}として画面遷移Tに追加する。さらに、表示している図1の画面において未操作のGUIコンポーネントを操作するために、制御装置8は図7のステップs8を実行し、変数vに変数v’の示す画面の状態g0を代入し、図7のステップs3に戻る。このときの画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面を図18に示す。
【0099】
制御装置8は、検査対象ソフトウェアが表示している図1の画面に対して、図7のステップs3を実行するが、ここでは、図18に示すように、変数vの示す画面の状態g0が画面の状態の集合Gに含まれているため、図7のステップs4に進む。制御装置8は、図7のステップs4を実行し、画面遷移の集合Tに、元画面の状態が変数vの示すg0で且つ操作後の画面の状態が定数TBDである画面遷移が存在するか調べる。この場合、図18に示すように画面遷移の集合Tにそのような画面遷移が存在しないため、図9の手続きを実行する。
【0100】
制御装置8は図9のステップs41,s42を実行し、経路探索装置7を用いて、画面の状態の集合Gと画面遷移の集合Tの中に、変数vの示す画面の状態g0から未操作のGUIコンポーネントを有する画面の状態への経路がないか探索する。この場合は、画面の状態g0からg1への経路として画面遷移の列t1が発見される。よって、制御装置8は図9のステップs43を実行し、画面自動操作装置6を用いて、発見した経路に出現する画面遷移の操作対象のGUIコンポーネントを順番に自動操作する。この場合は、t1における操作対象GUIコンポーネントのボタンc1を自動操作し、検査対象ソフトウェアの表示画面を未操作のGUIコンポーネントのボタンc3,c4を有する図3の画面に変化させる。
【0101】
制御装置8は、続く図9のステップs44を実行し、画面状態取得装置5を用いて、画面の状態を取得し、変数vに代入する。ここでは検査対象ソフトウェアは図3の画面を表示しているため、以前に取得した図3に対する画面の状態g1が変数vに代入され、図7のステップs3に戻る。このときの画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面を図19に示す。
【0102】
制御装置8は、図7のステップs3を実行し、変数vの示す画面の状態g1が画面の状態の集合Gに存在するか調べる。この場合は図19に示すように、画面の状態の集合Gに画面の状態g1が存在するので、図7のステップs4に進む。制御装置8は、図7のステップs4を実行し、画面遷移の集合Tに、元画面の状態が変数vの示す画面の状態g1で且つ操作後の画面の状態が定数TBDである画面遷移が存在するか調べる。その結果、図19に示すように画面遷移t3,t4が発見される。制御装置8は図7のステップs5を実行し、画面遷移の集合Tから画面遷移、ここではt3を取り出し、変数tに代入する。このときの変数tの示す画面遷移t3の操作対象GUIコンポーネントはボタンc3であり、制御装置8は画面自動操作装置6を用いて、検査対象ソフトウェアの現在の表示画面である図3の画面に対して、GUIコンポーネントのボタンc3を自動操作する。この自動操作によって検査対象ソフトウェアが表示する画面は、図12に示すように、図3の画面に対してGUIコンポーネントのボタンc3を操作しても、図3のまま変化しないことになる。
【0103】
制御装置8は図7のステップs6を実行し、画面状態取得装置5を用いて、操作後の画面の状態を取得、即ち図3の画面の状態であるg1を取得して、これを変数v’に代入する。そして、制御装置8は図7のステップs7を実行し、変数tの示す画面遷移t3=(g1,c3,g1)を画面遷移の集合Tに追加する。さらに、操作後の画面の状態であるg1から未操作のGUIコンポーネントを自動操作するために、制御装置8は図7のステップs8を実行し、変数vに変数v’の示す画面の状態g1を代入し、図7のステップs3に戻る。このときの画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面を図20に示す。
【0104】
制御装置8は、検査対象ソフトウェアが表示している図3の画面に対して、図7のステップs3を実行するが、ここでは、図20に示すように、変数vの示す画面の状態g1が画面の状態の集合Gに含まれるため、図7のステップs4に進む。制御装置8は、図7のステップs4を実行し、画面遷移の集合Tに、元画面の状態が変数vの示す画面の状態g1で且つ操作後の画面の状態が定数TBDである画面遷移が存在するか調べる。ここでは、図20に示すように画面遷移t4が発見されるので、制御装置8は図7のステップs5を実行し、画面遷移の集合Tから画面遷移t4を取り出し、変数tに代入する。このときの変数tの示す画面遷移t4の操作対象GUIコンポーネントはボタンc4であり、制御装置8は画面自動操作装置6を用いて、検査対象ソフトウェアが表示する図3の画面に対して、GUIコンポーネントのボタンc4を自動操作する。これによって、検査対象ソフトウェアが表示する画面は、図12に示されるように、図3に対するGUIコンポーネントのボタンc4への操作後の画面、つまり図1の画面に変化する。
【0105】
制御装置8は図7のステップs6を実行し、画面状態取得装置5を用いて、操作後の画面の状態を取得、即ち図1の画面の状態であるg0を取得して、これを変数v’に代入する。そして、制御装置8は図7のステップs7を実行し、変数tの示す画面遷移t4=(g1,c4,g0)を画面遷移の集合Tに追加する。さらに、操作後の画面の状態であるg0から未操作のGUIコンポーネントを自動操作するために、制御装置8は図7のステップs8を実行し、変数vに変数v’の示す画面の状態g0を代入し、図7のステップs3に戻る。このときの画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面を図21に示す。
【0106】
非特許文献3においては、エージェントが自動操作した結果、過去に表示した画面と同一の画面に変化した場合には、その画面に対する操作可能なGUIコンポーネントの集合を図5の集合O3のように空集合としてしまい、検査対象ソフトウェアを再起動してしまっていた。例えば、この実施例においては、ここまでの処理で、非特許文献3の場合は、図3の画面からGUIコンポーネントのボタンc1を自動操作した後と、図3の画面からGUIコンポーネントのボタンc3を自動操作した後の2回再起動することになる。それに対して、本発明では、一度も再起動していない。
【0107】
本発明においては、自動操作した結果、過去に表示した画面と同一の画面に変化した場合には、変化後の画面の状態が未操作のGUIコンポーネントを有するか調べ、未操作のGUIコンポーネント存在すれば、検査対象ソフトウェアを再起動することなく、未操作のGUIコンポーネントに対する自動操作を継続する。もし未操作のGUIコンポーネントが存在しない場合でも、画面の状態の集合Gと画面遷移の集合Tを保持しているため、現在の状態から未操作のGUIコンポーネントを有する画面の状態への経路を探索し、その経路が存在すれば、検査対象ソフトウェアを再起動することなく自動操作を継続できる。これにより、検査対象ソフトウェアの再起動の回数を非特許文献3より減少させることができ、検査時間を短縮し効率化できる。
【0108】
次に、制御装置8は、検査対象ソフトウェアが表示している図1の画面に対して、図7のステップs3を実行するが、ここでは、図21が示すように、変数vの示す画面の状態g0が画面の状態の集合Gに含まれているため、図7のステップs4に進む。制御装置8は、図7のステップs4を実行するが、この場合、元画面の状態が変数vの示すg0で且つ操作後の画面の状態が定数TBDである画面遷移が画面遷移の集合Tに存在しないため、図9の手続きを実施する。
【0109】
制御装置8は図9のステップs41,s42を実行し、経路探索装置7を用いて、画面の状態の集合Gと画面遷移の集合Tの中に、変数vの示す画面の状態g0から未操作のGUIコンポーネントを有する画面の状態への経路がないか探索する。この場合は、そのような経路が存在しないため、図9のステップs45に進む。制御装置8は、図9のステップs45を実行し、この場合、変数vの示す画面の状態が初期画面の状態g0であるため、図7のステップs9に進む。
【0110】
これは、初期画面の状態から未操作のGUIコンポーネントを有する画面の状態への経路が画面の状態の集合Gと画面遷移の集合Tに存在しない、つまり初期画面から遷移可能な全ての画面の状態において、未操作のGUIコンポーネントがないということになる。よって、制御装置8は、続く図7のステップs9を実行し、記憶装置2に、図21の画面の状態の集合Gと画面遷移の集合Tを保存し、手続きを終了する。
【0111】
<検査対象ソフトウェアがハードウェア2上で動作する場合>
次に、ハードウェア2上で動作する検査対象ソフトウェアに対する本装置の動作ついて説明する。この場合は、ハードウェア1上で動作する検査対象ソフトウェアに対する本装置の動作と同様に、制御装置8は、図7のステップs1を実行した後、検査対象ソフトウェアが初期画面である図1の画面を表示しているときに、図7のs2,s3、図8のs31,s32,s33,s34,s35,s33、図7のs4,s5,s6,s7,s8のステップを順次実施する。これにより図1の画面に対して、GUIコンポーネントのボタンc1を自動操作することができ、検査対象ソフトウェアは図3の画面を表示する。
【0112】
さらに、表示されている図3の画面に対しても、ハードウェア1上で動作する検査対象ソフトウェアに対する本装置の動作と同様に、制御装置8は、図7のs3、図8のs31,s32,s33,s34,s35,s33,s34,s35,s33,s34,s35,s33、図7のs4,s5,s6,s7,s8のステップを順次実施する。これにより図3の画面に対して、GUIコンポーネントのボタンc1を自動操作することができる。
【0113】
このとき、検査対象ソフトウェアが表示する操作後の画面は、ハードウェア1上で動作するときと異なる。つまり図12に示すように、図3の画面で操作可能なGUIコンポーネントのボタンc1を操作すると、図13の画面が表示されることになる。よって、前述の図7のステップs6において、制御装置8は、画面状態取得装置5によって、図13の画面の状態g2={{c5}}={{(a1=エラーメッセージ)}}を取得し、変数v’には画面の状態g2を代入して、図7のステップs7とs8を実行する。図7のステップs8を実行した後の画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面を図22に示す。
【0114】
続いて制御装置8は、検査対象ソフトウェアが表示している図13の画面に対して、図7のステップs3を実行し、変数vの示す画面の状態g2が画面の状態の集合Gに含まれるか調べる。このとき、図22に示すように、画面の状態の集合Gは画面の状態g2を含まないので、制御装置8は、図8のステップs31に進み、画面の状態の集合Gに変数vの示す画面の状態g2を追加する。
【0115】
さらに、制御装置8は、図8のステップs32を実行し、変数vの示す画面の状態g2で操作可能なGUIコンポーネントの集合を抽出する。このとき、図12に示すように、図13の画面において操作可能なGUIコンポーネントは存在しないので、制御装置8は、変数Oに空集合を代入する。制御装置8は、続いて図8のステップs33を実行するが、先に求めた変数Oが空集合なので、図8のステップs34およびs35は実施せず、図7のステップs4に戻る。このときの画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面を図23に示す。
【0116】
続いて制御装置8は図7のステップs4を実行し、画面遷移の集合Tに、元画面の状態が変数vの示す画面の状態g2で且つ操作後の画面の状態がTBDである画面遷移が存在するか調べる。この場合、図23に示すように、条件に合致する画面遷移が存在しないため、図9の手続きを実行する。
【0117】
制御装置8は、図9のステップs41,s42を実行し、経路探索装置7を用いて、画面の状態の集合Gと画面遷移の集合Tの中に、変数vの示す画面の状態g2から未操作のGUIコンポーネントを有する画面の状態への経路がないか探索する。ここでは、そもそも画面の状態g2、つまり図13の画面には操作可能なコンポーネントが存在しないため、経路は発見できず、図9のステップs45に進む。制御装置8は、図9のステップs45を実行し、この場合、変数vの示す画面の状態がg2であり、初期画面の状態g0ではないため、図9のステップs46に進む。制御装置8は、図9のステップs46を実行、即ち入力装置1から事前に入力されている再起動スクリプトによって、検査対象ソフトウェアを再起動し、検査対象ソフトウェアの表示画面を初期画面である図1にする。
【0118】
さらに、制御装置8は、図7のステップs2に戻り、画面状態取得装置5を用いて、再起動した検査対象ソフトウェアの画面の状態g0を取得し、変数vに代入する。このときの画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面を図24に示す。
【0119】
これ以降は、前述したハードウェア1上で動作する検査対象ソフトウェアに対する本装置の動作と同様の動作となり、最終的には画面の状態の集合G、画面遷移の集合T、変数v、検査対象ソフトウェアの画面は図25のようになる。制御装置8は、図7におけるステップs9を実行し、記憶装置2に、図25の画面の状態の集合Gと画面遷移の集合Tを保存し、手続きを終了する。
【0120】
制御装置8は、記憶装置2に保存されたハードウェア1およびハードウェア2上で動作する検査対象ソフトウェアの画面の状態の集合Gと画面遷移の集合Tとからなる画面遷移グラフを図11の表示装置3に表示することができる。その時の表示例を図26、図27に示す。
【0121】
図27は、画面の状態の集合と画面遷移の集合を模式的にグラフ表示したもので、円は画面の状態を表し、矢印は画面遷移を表す。制御装置8は、ハードウェア1およびハードウェア2の画面の状態の集合が同一か自動判定することができ、異なる画面の状態が存在する場合は、その画面の状態を強調表示することができる。例えば、この場合、図26、図27のハードウェア2に対する画面の状態g2を強調表示する。また、同様に制御装置8は、ハードウェア1およびハードウェア2の画面遷移の集合が同一か自動判定することができ、異なる画面遷移が存在する場合は、その画面遷移を強調表示することができる。例えば、この場合、図26、図27のハードウェア1およびハードウェア2に対する画面遷移t2を強調表示する。
【0122】
これによって、検査対象ソフトウェアが、ハードウェア1とハードウェア2で動作するときに、動作の異なる画面遷移、即ち画面遷移のエラーを自動的に特定することができる。
【0123】
非特許文献3においては、この実施例における画面の状態g1からGUIコンポーネントのボタンc1を自動操作できないため、画面遷移t2および画面の状態g2が保存されない。結果として、ハードウェア1とハードウェア2における画面の状態の集合と画面遷移の集合はそれぞれ同一になる。よって、この場合の図26や図27に画面遷移t2および画面の状態g2が表示されず、本発明が検出した画面遷移エラーを発見することができない。
【符号の説明】
【0124】
1:入力装置、2:記憶装置、3:表示装置、4:コンピュータ、5:画面状態取得装置、6:画面自動操作装置、7:経路探索装置、8:制御装置。
【先行技術文献】
【非特許文献】
【0125】
【非特許文献1】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
【非特許文献2】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
【非特許文献3】岡田、旭:『GUI設計の一貫性を評価するツール「GUIテスタII」の提案』、情報処理学会ヒューマンインタフェース研究会、97-HI-73、pp.7-12、1997
【非特許文献4】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

【特許請求の範囲】
【請求項1】
GUIコンポーネントの集合を含むウインドウの集合で構成される表示画面を備えた検査対象ソフトウェアの当該画面中の任意の操作可能なGUIコンポーネントに対する操作によって発生する当該画面の当該操作前後における変化である画面遷移が、当該検査対象ソフトウェアのバージョン又はその動作環境の変更の前後を通じて同一であることを確認するためのテストである画面遷移の回帰テストを行うための、画面の状態に関する情報の集合と画面遷移に関する情報の集合とからなる画面遷移グラフを、コンピュータを用いて自動生成する方法であって、
当該コンピュータが、
入力装置から入力された起動スクリプトにより検査対象ソフトウェアを起動する第1のステップと、
入力装置から入力されたGUIコンポーネントの属性変数の集合に基づいて、検査対象ソフトウェアの画面の状態に関する情報を取得する第2のステップと、
前記取得した画面の状態に関する情報から、過去に表示されたことのあるGUIコンポーネントも含めて操作可能な全てのGUIコンポーネントを取得する第3のステップと、
前記取得した操作可能なGUIコンポーネントのうち、未操作のGUIコンポーネントを自動操作し、画面遷移に関する情報を生成する第4のステップと、
現在の画面において未操作のGUIコンポーネントが存在しない場合は、現在の画面から未操作のGUIコンポーネントを有する画面への経路を探索して自動操作する、あるいは入力装置から入力された再起動スクリプトにより検査対象ソフトウェアを再起動する第5のステップと、
前記画面の状態に関する情報の集合と画面遷移に関する情報の集合とからなる画面遷移グラフを記憶装置に保存する第6のステップと、を具備する
ことを特徴とする画面遷移グラフの自動生成方法。
【請求項2】
請求項1に記載の画面遷移グラフの自動生成方法において、
前記第2のステップは、
入力装置から入力された属性変数に関する情報を取得し、表示画面におけるGUIコンポーネントの状態を決定し、ウインドウの状態をそのウインドウに含まれる前記GUIコンポーネントの状態の集合で構成し、画面の状態を検査対象ソフトウェアが表示する前記ウインドウの状態の集合で構成する
ことを特徴とする画面遷移グラフの自動生成方法。
【請求項3】
請求項1に記載の画面遷移グラフの自動生成方法において、
前記第4のステップは、
画面の状態に関する情報を取得した画面が新規の画面の場合には、当該画面の状態に関する情報から操作可能なGUIコンポーネントを抽出し、その中から1つを選択して自動操作するステップと、
画面の状態に関する情報を取得した画面が既出の画面の場合には、当該画面の状態に関する情報から未操作であるGUIコンポーネントを選択して自動操作するステップと、
操作前の画面の状態、操作対象GUIコンポーネントおよび操作後の画面の状態の情報で表される画面遷移に関する情報を生成するステップとを具備する
ことを特徴とする画面遷移グラフの自動生成方法。
【請求項4】
請求項1に記載の画面遷移グラフの自動生成方法において、
前記第5のステップは、
画面の状態に関する情報の集合と画面遷移に関する情報の集合とからなる画面遷移グラフに対して、現在の画面の状態から未操作のGUIコンポーネントを有する画面の状態への経路を探索するステップと、
発見した経路に沿ってGUIコンポーネントを自動操作し、現在の画面を未操作のGUIコンポーネントを有する画面に変化させるステップと、
経路が発見できない場合にのみ、再起動スクリプトにより検査対象ソフトウェアを再起動させるステップとを具備する
ことを特徴とする画面遷移グラフの自動生成方法。
【請求項5】
GUIコンポーネントの集合を含むウインドウの集合で構成される表示画面を備えた検査対象ソフトウェアの当該画面中の任意の操作可能なGUIコンポーネントに対する操作によって発生する当該画面の当該操作前後における変化である画面遷移が、当該検査対象ソフトウェアのバージョン又はその動作環境の変更の前後を通じて同一であることを確認するためのテストである画面遷移の回帰テストを行うための、画面の状態に関する情報の集合と画面遷移に関する情報の集合とからなる画面遷移グラフを自動生成する装置であって、
GUIコンポーネントの属性変数の集合に基づいて、検査対象ソフトウェアの画面の状態に関する情報を取得する画面状態取得装置と、
検査対象ソフトウェアの画面に対して、GUIコンポーネントを自動操作する画面自動操作装置と、
現在の画面から未操作のGUIコンポーネントを有する画面への経路を探索する経路探索装置と、
画面の状態に関する情報の集合と画面遷移に関する情報の集合とからなる画面遷移グラフを記録する記憶装置と、
入力装置から入力された起動スクリプトにより検査対象ソフトウェアを起動し、入力装置から入力されたGUIコンポーネントの属性変数の集合を画面状態取得装置に渡し、取得した画面の状態に関する情報を受け取って過去に表示されたことのあるGUIコンポーネントも含めて操作可能な全てのGUIコンポーネントを取得し、これを画面自動操作装置に与えて未操作のGUIコンポーネントを自動操作させるとともに、画面遷移に関する情報を生成し、現在の画面において未操作のGUIコンポーネントが存在しない場合は、経路探索装置により現在の画面から未操作のGUIコンポーネントを有する画面への経路を探索させ、その結果を画面自動操作装置に与えて自動操作させ、あるいは入力装置から入力された再起動スクリプトにより検査対象ソフトウェアを再起動し、さらに前記取得した画面の状態に関する情報の集合と前記生成した画面遷移に関する情報の集合とからなる画面遷移グラフを記憶装置に保存する制御装置とを少なくとも備えた
ことを特徴とする画面遷移グラフの自動生成装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate


【公開番号】特開2012−248097(P2012−248097A)
【公開日】平成24年12月13日(2012.12.13)
【国際特許分類】
【出願番号】特願2011−120799(P2011−120799)
【出願日】平成23年5月30日(2011.5.30)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】