(57)【要約】【課題】  GUIプログラムのテスト作業において、自動的にテストケースを生成し、テストの自動実行を実現することで網羅的かつ効率的なプログラムテストを実現する。【解決手段】  プログラム制御部１１により被テスト対象プログラム１を起動し、アクティブなウィンドウとその上の操作部品を操作部品検出部１２により検出し、操作部品記憶装置１３に格納する。テストデータ生成部１６は、予め登録された設計情報及びテストパターンを元に、検出された操作部品ごとに適切なテストデータを生成する。テストケース生成部１７は、生成されたテストデータと現在の状態までの遷移を発生させるテストケースを元に新たなテストケースを生成し、テストケース記憶装置１８に登録する。プログラム制御部１１は、テストケース記憶装置１８に登録されたテストケースを元に被テスト対象プログラム１を操作し、その出力結果をテスト結果記憶装置１９に格納する。【選択図】  図１
2006244195.tif 000002
【特許請求の範囲】
【請求項１】
GUIによる入出力操作を行う対話型プログラムである被テスト対象プログラムのテストを支援するプログラムテスト支援装置において、
画面遷移を発生させない操作部品を含め各操作部品のテストデータを、設計情報記憶手段に記憶された各操作部品の設計情報とテストパターン記憶手段に記憶されたテストパターンとに基づいて生成するテストデータ生成手段と、
画面遷移を発生しない操作部品について生成されたテストデータと画面遷移を発生する操作部品について生成されたテストデータとを組み合わせたテストケースを生成してテストケース記憶手段に記憶するテストケース生成手段と、
前記テストケース記憶手段に記憶されたテストケースに基づいて、被テスト対象プログラムの操作部品に対する操作を実行し、その実行結果をテスト結果記憶手段に記憶するプログラム制御手段とを備えたことを特徴とするプログラムテスト支援装置。
【請求項２】
GUIによる入出力操作を行う対話型プログラムである被テスト対象プログラムのテストを支援するプログラムテスト支援装置において、
前記被テスト対象プログラムの出力画面に含まれる操作部品の有効な操作範囲に関する情報を記述した設計情報を記憶する設計情報記憶手段と、
テストデータの生成規則を記述したテストパターンを記憶するテストパターン記憶手段と、
前記テスト対象プログラムのテスト対象とする出力画面に存在する操作部品を検出する操作部品検出手段と、
前記操作部品検出手段で検出された操作部品の情報を記憶する操作部品記憶手段と、
前記操作部品記憶手段に記憶された操作部品について、前記設計情報記憶手段に記憶された当該操作部品の有効な操作範囲に関する情報と前記テストパターン記憶手段に記憶されたテストデータの生成規則に基づいて、テストデータを生成するテストデータ生成手段と、
前記操作部品記憶手段に記憶された操作部品のうち、画面遷移を発生しない操作部品について前記テストデータ生成手段で生成されたテストデータと、画面遷移を発生する操作部品について前記テストデータ生成手段で生成されたテストデータとを組み合わせたテストケースを生成するテストケース生成手段と、
前記テストケース生成手段で生成されたテストケースを記憶するテストケース記憶手段と、
前記テストケース記憶手段からテストケースを読み出し、該読み出したテストケースに基づいて、前記テスト対象プログラムの操作部品に対する操作を実行するプログラム制御手段と、
前記プログラム制御手段によって操作部品に対する操作が実行された前記テスト対象プログラムから出力された新たな出力画面を含むテスト結果を記憶するテスト結果記憶手段とを備えることを特徴とするプログラムテスト支援装置。
【請求項３】
前記テストデータ生成手段は、正常系のテストデータと異常系のテストデータの双方を生成するものであることを特徴とする請求項２記載のプログラムテスト支援装置。
【請求項４】
前記テスト結果記憶手段に記憶された新たな出力画面をテスト対象の出力画面に設定して、テストを再帰的に繰り返す構成を有することを特徴とする請求項２または３記載のプログラムテスト支援装置。
【請求項５】
GUIによる入出力操作を行う対話型プログラムである被テスト対象プログラムのテストを支援するプログラムテスト支援方法において、
ａ）操作部品検出手段が、前記テスト対象プログラムのテスト対象とする出力画面に存在する操作部品を検出し、検出した操作部品の情報を操作部品記憶手段に記憶するステップ、
ｂ）テストデータ生成手段が、前記操作部品記憶手段に記憶された操作部品について、前記被テスト対象プログラムの出力画面に含まれる操作部品の有効な操作範囲に関する情報を記述した設計情報を記憶する設計情報記憶手段に記憶された当該操作部品の有効な操作範囲に関する情報と、テストデータの生成規則を記述したテストパターンを記憶するテストパターン記憶手段に記憶された前記テストデータの生成規則とに基づいて、テストデータを生成するステップ、
ｃ）テストケース生成手段が、前記操作部品記憶手段に記憶された操作部品のうち、画面遷移を発生しない操作部品について前記テストデータ生成手段で生成されたテストデータと、画面遷移を発生する操作部品について前記テストデータ生成手段で生成されたテストデータとを組み合わせたテストケースを生成し、該生成したテストケースをテストケース記憶手段に記憶するステップ、
ｄ）プログラム制御手段が、前記テストケース記憶手段からテストケースを読み出し、該読み出したテストケースに基づいて、前記テスト対象プログラムの操作部品に対する操作を実行し、前記テスト対象プログラムから出力された新たな出力画面を含むテスト結果をテスト結果記憶手段に記憶するステップ、
を含むことを特徴とするプログラムテスト支援方法。
【請求項６】
前記ステップｂにおいて、前記テストデータ生成手段は、正常系のテストデータと異常系のテストデータの双方を生成することを特徴とする請求項５記載のプログラムテスト支援方法。
【請求項７】
前記テスト結果記憶手段に記憶された新たな出力画面をテスト対象の出力画面に設定して、前記ステップａ〜ｄの処理を繰り返すことを特徴とする請求項５または６記載のプログラムテスト支援方法。
【請求項８】
GUIによる入出力操作を行う対話型プログラムである被テスト対象プログラムのテストを支援するプログラムテスト支援装置を構成するコンピュータを、
前記テスト対象プログラムのテスト対象とする出力画面に存在する操作部品を検出し、検出した操作部品の情報を操作部品記憶手段に記憶する操作部品検出手段、
前記操作部品記憶手段に記憶された操作部品について、前記被テスト対象プログラムの出力画面に含まれる操作部品の有効な操作範囲に関する情報を記述した設計情報を記憶する設計情報記憶手段に記憶された当該操作部品の有効な操作範囲に関する情報と、テストデータの生成規則を記述したテストパターンを記憶するテストパターン記憶手段に記憶された前記テストデータの生成規則とに基づいて、テストデータを生成するテストデータ生成手段、
前記操作部品記憶手段に記憶された操作部品のうち、画面遷移を発生しない操作部品について前記テストデータ生成手段で生成されたテストデータと、画面遷移を発生する操作部品について前記テストデータ生成手段で生成されたテストデータとを組み合わせたテストケースを生成し、該生成したテストケースをテストケース記憶手段に記憶するテストケース生成手段、
前記テストケース記憶手段からテストケースを読み出し、該読み出したテストケースに基づいて、前記テスト対象プログラムの操作部品に対する操作を実行し、前記テスト対象プログラムから出力された新たな出力画面を含むテスト結果をテスト結果記憶手段に記憶するプログラム制御手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、GUI（Graphical User Interface）を有する対話型プログラムのバグ検出のためのテストを支援する装置に関し、特に、テストの自動化による支援を行う装置に関する。
【背景技術】
【０００２】
GUIプログラムを自動的にテストする装置として、大量のデータを自動的に入力する方法を用いたプログラムテスト支援装置が特許文献１および特許文献２に記載されている。これらのプログラムテスト支援装置では、利用者が行った操作を記録し、操作の中から入力項目を抽出し、抽出した入力項目に対してテストすべき一つあるいは複数のデータを利用者が設定し、これをプログラムテスト支援装置が自動的に組み合わせ、記録した操作と組み合わせたデータを元に自動的にテストを行う。また特許文献１のプログラムテスト支援装置では、あらかじめ利用者により登録されたエラーチェックのための条件を元に自動的にエラーチェックを行い、エラーとなった結果に対し分析を行い、エラーの原因となった入力項目を自動的に抽出することができる。さらに特許文献２のプログラムテスト支援装置では、CASEツール等を用いて作成される上位設計情報を元にエラーチェックのための条件を自動的に生成することができる。
【０００３】
また、GUIプログラムの操作部品を自動的に抽出してGUI画面の遷移を網羅的に行う方法を用いたプログラムテスト支援装置が特許文献３に記載されている。このプログラムテスト支援装置では、GUI操作部品の識別子を表スタックに格納し、各操作部品に対し順に所定の操作を行うとともに、各操作によるGUI画面の遷移を保存し、GUI画面の状態に変化があった場合、再帰的にGUI操作部品の識別子の表スタックへの格納を行うことで、すべてのGUI操作部品のプロパティを走査し、各GUI操作部品のプロパティを比較することで、GUIプログラムの設計の統一感を自動的に調べることができる。
【０００４】
さらに、特許文献４には、プログラムのテスト実行用テストデータを作成する方法として、プログラム仕様書やレコード仕様書に基づいて、データ項目のタイプ、桁数に合致したテストデータを生成することが記載されている。
【特許文献１】特開2000-112784
【特許文献２】特開2003-228493
【特許文献３】特開平10-198586
【特許文献４】特開平6-110733
【発明の開示】
【発明が解決しようとする課題】
【０００５】
特許文献１または特許文献２に記載のプログラムテスト支援装置では、テストデータの入力を利用者が一つ一つ行う必要がある。このため利用者自身が各入力項目に対して、有用であるテストデータを考える必要があり、利用者の作業が煩雑になり、かつ、適切なテストデータを用意できない恐れがある。また、始めに一通り人の手による操作を行わなくてはならず、操作経路自体までは自動的に判別できない。
【０００６】
特許文献３には、GUIプログラムの操作部品を抽出して操作することでGUI画面の遷移を網羅的に行う方法が記載されているので、その技術を特許文献１または特許文献２に記載のプログラムテスト支援装置に適用すれば、始めに一通り人の手による操作を行う必要はなくなる。しかし、特許文献３において抽出する操作部品は、メニュー、サブメニュー、オプションボタン、プッシュボタンといった画面遷移を発生させる操作部品に限定されており（0037段落）、テキストボックスなど画面遷移を発生させない操作部品は考慮されていない。GUIプログラムによっては、テキストボックスに所定の値を入力してからプッシュボタンを操作しないと次の状態に遷移しない場合があるため、そのようなGUIプログラムのテストを十分に実施することができない。
【０００７】
また特許文献４にテストデータを自動生成する技術が記載されているので、その技術を特許文献１または特許文献２に記載のプログラムテスト支援装置に適用すれば、テストデータの入力を利用者が行う必要はなくなる。しかし、特許文献４では、データ項目のタイプ、桁数に合致した正常なテストデータを生成するだけである。プログラムテストでは不正な値によるテストも必要であり、そのような不正な値を使用したテストを実行する場合、依然として利用者が入力する必要がある。
【０００８】
本発明の目的は、被テスト対象プログラムの画面遷移を発生させる操作部品に加えてテキストボックスなど画面遷移を発生させない操作部品も自動的に操作しながらGUIプログラムのバグ検出のためのテストを自動で実行することができるプログラムテスト支援装置および方法を提供することにある。
【０００９】
本発明の別の目的は、正常系のテストデータに加えて異常系のテストデータを自動的に発生しながらGUIプログラムのバグ検出のためのテストを自動で実行することができるプログラムテスト支援装置および方法を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の第１のプログラムテスト支援装置は、GUIによる入出力操作を行う対話型プログラムである被テスト対象プログラムのテストを支援するプログラムテスト支援装置において、画面遷移を発生させない操作部品を含め各操作部品のテストデータを、設計情報記憶手段に記憶された各操作部品の設計情報とテストパターン記憶手段に記憶されたテストパターンとに基づいて生成するテストデータ生成手段と、画面遷移を発生しない操作部品について生成されたテストデータと画面遷移を発生する操作部品について生成されたテストデータとを組み合わせたテストケースを生成してテストケース記憶手段に記憶するテストケース生成手段と、前記テストケース記憶手段に記憶されたテストケースに基づいて、被テスト対象プログラムの操作部品に対する操作を実行し、その実行結果をテスト結果記憶手段に記憶するプログラム制御手段とを備えたことを特徴とする。
【００１１】
本発明の第２のプログラムテスト支援装置は、GUIによる入出力操作を行う対話型プログラムである被テスト対象プログラムのテストを支援するプログラムテスト支援装置において、前記被テスト対象プログラムの出力画面に含まれる操作部品の有効な操作範囲に関する情報を記述した設計情報を記憶する設計情報記憶手段と、テストデータの生成規則を記述したテストパターンを記憶するテストパターン記憶手段と、前記テスト対象プログラムのテスト対象とする出力画面に存在する操作部品を検出する操作部品検出手段と、前記操作部品検出手段で検出された操作部品の情報を記憶する操作部品記憶手段と、前記操作部品記憶手段に記憶された操作部品について、前記設計情報記憶手段に記憶された当該操作部品の有効な操作範囲に関する情報と前記テストパターン記憶手段に記憶されたテストデータの生成規則に基づいて、テストデータを生成するテストデータ生成手段と、前記操作部品記憶手段に記憶された操作部品のうち、画面遷移を発生しない操作部品について前記テストデータ生成手段で生成されたテストデータと、画面遷移を発生する操作部品について前記テストデータ生成手段で生成されたテストデータとを組み合わせたテストケースを生成するテストケース生成手段と、前記テストケース生成手段で生成されたテストケースを記憶するテストケース記憶手段と、前記テストケース記憶手段からテストケースを読み出し、該読み出したテストケースに基づいて、前記テスト対象プログラムの操作部品に対する操作を実行するプログラム制御手段と、前記プログラム制御手段によって操作部品に対する操作が実行された前記テスト対象プログラムから出力された新たな出力画面を含むテスト結果を記憶するテスト結果記憶手段とを備えることを特徴とする。
【００１２】
本発明の第３のプログラムテスト支援装置は、第２のプログラムテスト支援装置において、前記テストデータ生成手段は、正常系のテストデータと異常系のテストデータの双方を生成するものであることを特徴とする。
【００１３】
本発明の第４のプログラムテスト支援装置は、第２または第３のプログラムテスト支援装置において、前記テスト結果記憶手段に記憶された新たな出力画面をテスト対象の出力画面に設定して、テストを再帰的に繰り返す構成を有することを特徴とする。
【００１４】
本発明の第１のプログラムテスト支援方法は、GUIによる入出力操作を行う対話型プログラムである被テスト対象プログラムのテストを支援するプログラムテスト支援方法において、ａ）操作部品検出手段が、前記テスト対象プログラムのテスト対象とする出力画面に存在する操作部品を検出し、検出した操作部品の情報を操作部品記憶手段に記憶するステップ、ｂ）テストデータ生成手段が、前記操作部品記憶手段に記憶された操作部品について、前記被テスト対象プログラムの出力画面に含まれる操作部品の有効な操作範囲に関する情報を記述した設計情報を記憶する設計情報記憶手段に記憶された当該操作部品の有効な操作範囲に関する情報と、テストデータの生成規則を記述したテストパターンを記憶するテストパターン記憶手段に記憶された前記テストデータの生成規則とに基づいて、テストデータを生成するステップ、ｃ）テストケース生成手段が、前記操作部品記憶手段に記憶された操作部品のうち、画面遷移を発生しない操作部品について前記テストデータ生成手段で生成されたテストデータと、画面遷移を発生する操作部品について前記テストデータ生成手段で生成されたテストデータとを組み合わせたテストケースを生成し、該生成したテストケースをテストケース記憶手段に記憶するステップ、ｄ）プログラム制御手段が、前記テストケース記憶手段からテストケースを読み出し、該読み出したテストケースに基づいて、前記テスト対象プログラムの操作部品に対する操作を実行し、前記テスト対象プログラムから出力された新たな出力画面を含むテスト結果をテスト結果記憶手段に記憶するステップ、を含むことを特徴とする。
【００１５】
本発明の第２のプログラムテスト支援方法は、第１のプログラムテスト支援方法において、前記ステップｂにおいて、前記テストデータ生成手段は、正常系のテストデータと異常系のテストデータの双方を生成することを特徴とする。
【００１６】
本発明の第３のプログラムテスト支援方法は、第１または第２のプログラムテスト支援方法において、前記テスト結果記憶手段に記憶された新たな出力画面をテスト対象の出力画面に設定して、前記ステップａ〜ｄの処理を繰り返すことを特徴とする。
【００１７】
『作用』
本発明にあっては、設計情報記憶手段が被テスト対象プログラムの出力画面に含まれる操作部品の有効な操作範囲に関する情報を記述した設計情報を記憶すると共に、テストパターン記憶手段がテストデータの生成規則を記述したテストパターンを記憶しており、被テスト対象プログラムのテストに際して、操作部品検出手段が、テスト対象プログラムのテスト対象とする出力画面に存在する操作部品を検出して操作部品記憶手段に記憶し、テストデータ生成手段が、操作部品記憶手段に記憶された操作部品について、設計情報記憶手段に記憶された当該操作部品の有効な操作範囲に関する情報とテストパターン記憶手段に記憶されたテストデータの生成規則に基づいて、テストデータを生成し、テストパターン生成手段が、操作部品記憶手段に記憶された操作部品のうち、画面遷移を発生しない操作部品についてテストデータ生成手段で生成されたテストデータと、画面遷移を発生する操作部品についてテストデータ生成手段で生成されたテストデータとを組み合わせたテストケースを生成してテストケース記憶手段に記憶し、プログラム制御手段が、テストケース記憶手段からテストケースを読み出し、この読み出したテストケースに基づいて、テスト対象プログラムの操作部品に対する操作を実行し、テスト対象プログラムから出力された新たな出力画面を含むテスト結果をテスト結果記憶手段に記憶する。
【発明の効果】
【００１８】
本発明によれば、テキストボックスなど画面遷移を発生させない操作部品に値を入力してからプッシュボタンなど画面遷移を発生させる操作部品を操作しないと次の状態に画面が遷移しない被テスト対象プログラムであっても、テストを自動的に実施することができる。その理由は、画面遷移を発生させない操作部品を含め各操作部品のテストデータを各操作部品の設計情報とテストパターンとに基づいて自動で生成し、画面遷移を発生しない操作部品について生成されたテストデータと画面遷移を発生する操作部品について生成されたテストデータとを組み合わせたテストケースを生成し、この生成されたテストケースに基づいてテスト対象プログラムの操作部品に対する操作を実行するからである。
【発明を実施するための最良の形態】
【００１９】
次に、本発明を実施するための最良の形態について図面を参照して詳細に説明する。
【００２０】
図１を参照すると、本発明の実施の形態のGUIプログラムテスト支援装置１０は、プログラム制御部１１と、操作部品検出部１２と、操作部品記憶装置１３と、設計情報記憶装置１４と、テストパターン記憶装置１５と、テストデータ生成部１６と、テストケース生成部１７と、テストケース記憶装置１８と、テスト結果記憶装置１９と、設計情報入力装置２０と、テストパターン入力装置２１とを備え、GUIによる入出力操作を行う対話型の被テスト対象プログラム１および出力手段２に接続されている。
【００２１】
被テスト対象プログラム１は、例えばPC(パーソナルコンピュータ)やWS(ワークステーション)等のハードウェア計算資源上で動作するOS(オペレーティングシステム)によって制御されるプログラムである。出力手段２は、被テスト対象プログラム１から出力されるウィンドウなどの表示画面を出力する例えばＬＣＤ等の表示装置である。
【００２２】
GUIプログラムテスト支援装置１０の構成要素のうち、プログラム制御部１１、操作部品検出部１２、テストデータ生成部１６、およびテストケース生成部１７は、例えばPCやWS等のハードウェア計算資源上で動作するOSによって制御されるプログラムで実現される。また、操作部品記憶装置１３、設計情報記憶装置１４、テストパターン記憶装置１５、テストケース記憶装置１８、およびテスト結果記憶装置１９は、メモリやハードディスク等に代表される記憶手段で構成される。設計情報入力装置２０およびテストパターン入力装置２１は、マウスやキーボード等の図示しない入力装置による入力情報を受け取り、処理を行うプログラムである。これらの動作の概略を以下に示す。
【００２３】
プログラム制御部１１は、被テスト対象プログラム１の実行環境（OSなど）の機能を用いて、被テスト対象プログラム１の起動や終了、被テスト対象プログラム１の出力画面（ウィンドウ）に存在する操作可能な操作部品（メニューやプッシュボタンなど）に対する操作等といった、被テスト対象プログラム１に関する制御を行うと共に、GUIプログラムテスト支援装置１０全体の制御を司る。
【００２４】
操作部品検出部１２は、プログラム制御部１１が制御している被テスト対象プログラム１の出力画面から、操作対象となりうる操作部品を検出する。被テスト対象プログラム１から出力された画面はテスト結果記憶装置１９に記憶されるようになっており、操作部品検出部１２はテスト結果記憶装置１９に記憶された出力画面から操作部品を検出することも可能である。
【００２５】
操作部品記憶装置１３は、操作部品検出部１２により検出された被テスト対象プログラム１の操作部品に関する情報をファイルなどの形式で格納する。格納される情報には、操作部品検出部１２により検出された操作部品がどの画面（ウィンドウ）上に存在するかを示す情報、その操作部品の種類、位置、サイズ、キャプション等の情報が含まれる。
【００２６】
設計情報入力装置２０は、被テスト対象プログラム１の開発の際に、開発者が作成する設計情報を入力するための装置である。入力される設計情報には、被テスト対象プログラム１が出力画面に表示する各操作部品について、その操作部品がどの画面（ウィンドウ）上に存在するかを示す情報、その操作部品の種類、有効な操作の種類や範囲に関する情報が含まれている。入力された設計情報は内部形式に変換され、設計情報記憶装置１４に格納される。
【００２７】
テストパターン入力装置２１は、限界値テスト等の一般的なテスト手法において採用されるテストパターン（テストデータの生成規則）を利用者が入力するための装置である。入力された情報はテストパターン記憶装置１５に格納される。
【００２８】
テストデータ生成部１６は、操作部品記憶装置１３、設計情報記憶装置１４、およびテストパターン記憶装置１５からそれぞれ操作部品、設計情報、およびテストパターンに関する情報を取り出し、各操作部品に対するテストデータを１つもしくは複数個作成する。操作部品に対するテストデータとは、例えば操作部品がメニューである場合のクリック操作、操作部品がテキストボックスである場合の数値の入力操作などのことである。テストデータは、設計情報に合致する正常なものと、そうでないものとの双方が生成される。前者を正常系のテストデータ、後者を異常系のテストデータと呼ぶ。例えば、或るテキストボックスの入力値の条件が０から１００までの整数であることが設計情報に示されているとき、０から１００までの任意の整数をそのテキストボックスに入力するテストデータは正常系であり、０から１００までの整数以外の値をそのテキストボックスに入力するテストデータは異常系である。
【００２９】
テストケース生成部１７は、テストデータ生成部１６により生成された各操作部品ごとのテストデータと、操作部品記憶装置１３に格納されている操作部品に関する情報と、以前に自らが生成してテストケース記憶装置１８に記憶した既存のテストケースとから、画面の遷移を含めたテストケースを網羅的に生成する。このテストケース生成部１７の動作を図２を参照して説明する。
【００３０】
図２は被テスト対象プログラム１の出力画面の遷移の一例を示す。この例では、被テスト対象プログラム１は起動されると、まずウィンドウW1を出力する。次に、ウィンドウW1に存在する操作部品B12に値aが入力されて操作部品B11がクリックされると、新たなウィンドウW2を出力する。更に、このウィンドウW2に存在する操作部品B22に値bが入力されて操作部品B21がクリックされると、新たなウィンドウW3を出力する。また、ウィンドウW2に存在する操作部品B22に値cが入力されて操作部品B21がクリックされると、エラーE1となる。テストケース生成部１７が生成するテストケースとは、図２のウィンドウW1からウィンドウW2への画面遷移を起こさせるテストデータ（B12=a,B11=クリック）や、ウィンドウW1からウィンドウW3までの画面遷移を起こさせるテストデータの列｛（B12=a,B11=クリック）、（B22=b,B21=クリック）｝や、ウィンドウW1からエラーE1までの画面遷移を起こさせるテストデータの列｛（B12=a,B11=クリック）、（B22=c,B21=クリック）｝のことである。
【００３１】
テストデータ（B12=a,B11=クリック）によるテストケースT11は、プログラム制御部１１が被テスト対象プログラム１を起動した直後に表示されるウィンドウW1を出発点として次の画面遷移を起こさせるものであり、操作部品B11,B12に対する別のテストデータを用いる他のテストケースT12〜T1mと共に最初に生成されてテストケース記憶装置１８に記憶され、プログラム制御部１１により実行される。テストデータの列｛（B12=a,B11=クリック）、（B22=b,B21=クリック）｝によるテストケースT21および操作部品B21,B22に対する別のテストデータを用いる他のテストケースT22〜T2nは、テストデータ生成部１６で生成された操作部品B21のテストデータ（b,c等）と操作部品B22のテストデータ（クリック等）とを組み合わせて生成したテストケース（B22=b,B21=クリック）や（B22=c,B21=クリック）などと、テストケース記憶装置１８に記憶された既存のテストケースT11（B12=a,B11=クリック）とを転結して生成される。
【００３２】
テストデータ生成部１６で生成された操作部品B21,B22のテストデータを組み合わせる場合、遷移が発生しない操作部品B22への操作が時間的に先に実施され、遷移が発生する操作部品B21への操作が時間的に後に実施されるように組み合わされる。遷移が発生する操作部品であるかどうかは、操作部品記憶部１３に記憶されている操作部品の種類によって判断される。
【００３３】
再び図１を参照すると、テストケース記憶装置１８は、テストケース生成部１７により生成されたテストケースを格納する。テストケース記憶装置１８に格納されたテストケースはプログラム制御部１１に渡され、自動テスト実行時にはこのテストケースを元に順に被テスト対象プログラム１を自動操作し、その結果を出力手段２に出力させる。
【００３４】
テスト結果記憶装置１９は、テストケース記憶装置１８に格納されたテストケースを元にプログラム制御部１１が被テスト対象プログラム１を自動的にテストし、出力された画面を含むテスト結果を格納する。
【００３５】
次に、図１及び図２、並びに図３のフローチャートを参照して本実施の形態の全体の動作について詳細に説明する。
【００３６】
まず、プログラム制御部１１は、被テスト対象プログラム１を起動する（図３のステップST1）。起動された被テスト対象プログラム１はGUI画面を出力手段２に表示する。次に、操作部品検出部１２は、起動された被テスト対象プログラム１のGUI画面の中で、アクティブなウィンドウ、すなわちユーザからの入力を受け付ける状態になっているウィンドウを検出し、操作部品記憶装置１３に登録する（ステップST2）。図２の例ではウィンドウW1が検出される。この際登録される情報は、たとえばウィンドウ名等の、GUI画面上でプログラム制御部１１がウィンドウを識別するための情報と、本プログラムテスト支援装置１０内でウィンドウの関係を識別するためのIDとがある。同じウィンドウであっても、その上にある操作部品に違いがある場合は、その情報を付与する。
【００３７】
次に操作部品検出部１２は、アクティブなウィンドウから、操作部品をすべて検出して操作部品記憶装置１３に登録する（ステップST3〜ST6）。具体的には、検出された操作部品それぞれに対し、操作部品検出部１２は操作部品記憶装置１３にすでに登録されている操作部品であるかどうかを確認し、登録されていない場合は、これを操作部品記憶装置１３に登録する。この際登録される情報は、各操作部品の種類やサイズ、キャプションの内容等といった、操作部品自体の情報や、どのウィンドウ上に配置されているかという情報を含めた、GUI画面上でプログラム制御部１１が登録される操作部品を識別するための情報である。図２の例では、操作部品B11,B12が登録される。
【００３８】
次にテストデータ生成部１６は、テストパターン入力装置２１により事前に登録されているテストパターンと、あらかじめ開発者が設計情報入力装置２０により登録する設計情報と、ステップST2〜ST6により登録された操作部品の情報とを、それぞれ設計情報記憶装置１４、テストパターン記憶装置１５、および操作部品記憶装置１３から取り出し、各操作部品に対し設計情報を元にテストパターンを適用し、各操作部品に対するテストデータを生成する（ステップST7）。
【００３９】
次にテストケース生成部１７は、操作部品記憶装置１３から現在どのウィンドウを対象としているかという情報を取り出し、テストケース記憶装置１８から、そのウィンドウがアクティブになるまでの遷移を行った既存のテストケースを取り出し、取り出されたテストケースに対し次のテストステップとして、テストデータ生成部１６により生成されたテストデータの組み合わせを追加して、新しいテストケースを複数生成し、テストケース記憶装置１８に記憶する（ステップST8)。
【００４０】
次にプログラム制御部１１は、前記生成した新たなテストケースをテストケース記憶装置１８から１つずつ取り出し、このテストケースに従ってテストを自動的に行う(ステップST9)。具体的には、取り出したテストケースが例えば図２のテストケースT11であれば、被テスト対象プログラム１を再起動し、利用者がGUI画面上の操作部品B12に値aを入力する操作を行った場合に発生するのと同じイベントを発生させ、次に利用者がGUI画面上の操作部品B11をクリックした場合に発生するのと同じイベントを発生させる。そして、このときの被テスト対象プログラム１の出力画面を、当該テストケースのテスト結果の一部としてテスト結果記憶装置１９に記憶する。ステップST9では、ステップST8で生成されたすべてのテストケースによるテストを繰り返す。
【００４１】
上記のテストケースによるテストで行われる操作部品に対する操作の種類によっては、図２のウィンドウW3のように新しいウィンドウが生成される場合がある。次のステップST10では、テスト結果記憶装置１９に記憶された既実行テストケースに対応するテスト結果に含まれるウィンドウのうち、未だテストの対象としていないものがあるかどうかを判定する。そして、未だテストの対象としていないウィンドウがあれば、その１つのウィンドウをアクティブなウィンドウとし（ステップST2）、前述と同様なテストを繰り返す。なお、テスト対象とするウィンドウが複数存在する場合、遷移の階層上でルートにより近いものを優先する。例えば、図２のウィンドウW2をテスト対象とした場合、その終了時にはウィンドウW3が生成されるが、ウィンドウW1をテスト対象とした場合にウィンドウW2と同階層の図示しない他のウィンドウが生成されていたならば、それをウィンドウW2よりも優先的に選択する、いわゆる幅優先選択を行う。また、生成された全てのウィンドウをテスト対象としたならば、被テスト対象プログラム１のテストを終了する（ステップST11）。
【００４２】
次に本実施の形態の効果を説明する。
【００４３】
本実施の形態によれば、テストデータ生成部１６が、画面遷移を発生させない操作部品を含め各操作部品のテストデータを各操作部品の設計情報とテストパターンとに基づいて自動で生成し、テストケース生成部１７が、画面遷移を発生しない操作部品について生成されたテストデータと画面遷移を発生する操作部品について生成されたテストデータとを組み合わせたテストケースを生成し、プログラム制御部１１が、この生成されたテストケースに基づいて被テスト対象プログラム１の操作部品に対する操作を実行するため、画面遷移を発生させない操作部品に値を入力してから画面遷移を発生させる操作部品を操作しないと次の状態に画面が遷移しないような被テスト対象プログラム１であっても、テストを自動的に実施することができる。
【００４４】
また本実施の形態によれば、テストデータ生成部１６は、正常系のテストデータと異常系のテストデータの双方を生成するため、正常な値だけでなく不正な値を使用したテストを自動で実行することができる。
【００４５】
また本実施の形態によれば、テスト結果記憶装置１９に記憶された新たな出力画面をテスト対象の出力画面に設定して、テストを再帰的に繰り返すため、網羅的なテストが可能になる。
【実施例】
【００４６】
次に、具体的な実施例を用いて本実施の形態の動作を説明する。
【００４７】
プログラム制御部１１により起動された被テスト対象プログラム１の初期画面のイメージ例を図４に示す。図４において、１００は起動された被テスト対象プログラム１のウィンドウであり、タイトルバー１０１の文字列（ここでは"Main"）がウィンドウ１００のタイトルである。また、１０２および１０３はメニューであり、それぞれ操作部品である。
【００４８】
操作部品検出部１２は、画面上でアクティブとなっているウィンドウ１００を検知し、その情報を操作部品記憶装置１３に登録する。図５は登録されたウィンドウの情報である。また、操作部品検出部１２は、画面上でアクティブになっているウィンドウ１００上の操作部品１０２および１０３を検知し、これを操作部品記憶装置１３に登録する。図６は登録された操作部品の情報である。操作部品を識別するためのID、操作部品が存在するウィンドウのID、操作部品の種類、キャプション、レイアウト情報が登録されている。ここではレイアウト情報として、メニューの並びを基にした情報を登録しているが、操作部品の種類によっては位置やサイズ等の情報により識別することも有用であるため、これらの情報を格納することも可能である。また、図６では最低限の情報としての登録例を挙げているが、これら以外でも操作部品の識別やテストに有用となる情報があれば、それらも自動的に登録する。
【００４９】
設計情報記憶装置１４には、あらかじめ被テスト対象プログラムの設計情報が例えば図７のように格納されている。この情報は開発者が開発時に設計した情報を、設計情報入力装置２０により入力したものである。入力には人の手による直接入力だけでなく、CASEツールなどで設計を行った場合のデータファイルなどから入力することも可能である。格納されている設計情報には、各操作部品に対して行われるべき操作内容や制限が記載されている。たとえば、図７で指定されている"Click()"は操作部品に対してマウス等のポインタデバイスによるシングルクリックを示しており、"Input(regexp(".*"))"は正規表現で指定された文字列を入力対象とする。
【００５０】
またテストパターン記憶装置１５には、あらかじめ一般的なテスト手法のロジックが登録されている。例えば、限界値テストのロジックでは、限界値として或る値を決めると、その前後する値も入力値として用いるという規則が記載されている。その一例を図８に示す。図８の例では、単一の整数Nのみを有効な入力値とする場合、N-1,N,N+1の３種類のデータをテストデータとして生成すること、および、整数の或る範囲（M〜N）を有効な入力値とする場合、M-1,M,N,N+1の４種類のデータをテストデータとして生成するという規則が記載されている。
【００５１】
テストデータ生成部１６では、これら設計情報記憶装置１４とテストパターン記憶装置１５に登録されている情報を元に、操作部品記憶装置１３に登録された各操作部品に対して、適切なテストデータを生成する（ステップST7）。ステップST7の詳細を図９に示す。図９を参照すると、テストデータ生成部１６は、操作部品記憶装置１３から操作部品を順番に取り出し（ステップST7-1,ST7-2）、それぞれの操作部品について設計情報記憶装置１４から対応する設計情報（操作内容や制限）を抽出する（ステップST7-3）。そして、テストパターン記憶装置１５からテストパターン情報を順番に取り出し（ステップST7-4,ST7-5）、ステップST7-3で抽出した設計情報に応じてテストデータを生成する（ステップST7-6）。例えば、操作部品記憶装置１３に登録された後述する図１８のような操作部品中のIDが３である操作部品（テキストボックス）を選択した場合、この操作部品の設計情報として設計情報記憶装置１４に登録されている図７の設計情報から「Input(integer(1-100)」が抽出され、この設計情報は「０〜１００の整数値を有効な入力値とする」ということを示しているので、テストパターン記憶装置１５に登録されている図８の限界値テストのテストパターンに基づいて、テストデータとして図１０に示すように、”−１”、”０”、”１００”、”１０１”を生成する。
【００５２】
次にテストケース生成部１７は、テストデータ生成部１６により生成されたテストデータを元に、テストケースを生成する（ステップST8）。ステップST8の詳細を図１１に示す。図１１を参照すると、操作部品記憶装置１３から操作部品を順番に取り出し（ST8-1,ST8-2）、それぞれの操作部品に対し、テストデータ生成部１６により生成されたテストデータを組み合わせ（ST8-3,ST8-4）、テストケースを生成する（ST8-5）。図１２は図４のウィンドウに対し生成されたテストケースである。図４のウィンドウでは操作部品が二つのみで、それぞれ有効な操作がシングルクリックのみであるため、それぞれのメニューに対してシングルクリックの操作を行うテストケースが生成される。また、例えばテストパターン記憶装置１５に登録されているテストパターンに、「ポインティングデバイスによる異なる操作方法によるテスト」という、ドラッグアンドドロップ等の操作方法をテストするパターンのロジックが登録されている場合、図１３のようなテストケースが生成される。テストケースIDには、同じ操作部品に対する異なる操作を識別するための値が設定される。なお、図１２および図１３中の妥当性とは、各操作部品に対して有効な値を設定するテスト項目であるかどうかを示すフラグであり、○であれば正常系のテスト、×であれば異常系のテストであることを示す。また遷移先ウィンドウIDの項目は、そのテストケースの実行結果が新たなウィンドウ画面への遷移等であった場合に、遷移先のウィンドウIDを設定する欄であり、この時点では全てNULLとされる。生成されたテストケースはテストケース記憶装置１８に格納される。
【００５３】
プログラム制御部１１は、一旦被テスト対象プログラム１をリセットし、テストケース記憶装置１８に記憶されているテストケースを１つずつ読み出し、１つのテストケースの実行が終わる毎に被テスト対象プログラム１をリセットしながら、順に複数のテストケースを実行する。それぞれのテストケースの実行結果は出力手段２に出力され、テストケース情報とともにテスト結果記憶装置１９に格納される。利用者はテスト結果記憶装置１９に格納されたテスト結果を出力手段２から出力して参照することで、プログラムのバグを発見することができる。すなわち、正常系のテストであるのに出力結果としてエラーが記録されていたり、異常系のテストであるのにエラーが記録されていないなどを確認することで、被テスト対象プログラム１のバグを発見することができる。
【００５４】
また、各テストケースの実行結果が新たなウィンドウ画面への遷移であったり、同じウィンドウ内での操作部品の追加、削除、サイズや位置の変更等が発生した場合、テストケース記憶装置１９に格納した図１２および図１３のテストケースの情報における遷移先ウィンドウIDの欄にその旨を示すフラグの役目を果たすウィンドウIDを設定する。フラグを立てた状態を図１４に示す。図４のウィンドウの場合、メニュー１０２および１０３に対する操作を実行した結果、それぞれ図１５および図１６のように新たにウィンドウが生成される。従ってこれらの結果をテスト結果記憶装置１９に格納するとともに、テストケース記憶装置１８に格納されているテストケースを一通り実施した後に、テスト結果記憶装置１９に格納されている情報から、新たな遷移や操作部品への変更があったテストケースを呼び出し、操作部品検出部１２により検出を行う。つまり、プログラム制御部１１は、被テスト対象プログラム１を一旦リセットし、次に、新たなウィンドウ画面をテスト対象とすべく、その新たなウィンドウ画面がアクティブになるまでの遷移を行った既存のテストケースを取り出して実行し、このアクティブなウィンドウ画面についてステップST2からの処理を再帰的に繰り返す。
【００５５】
図１５のウィンドウに対するテストケースの実行まで完了した際の、生成されるウィンドウ情報、操作部品情報、テストケース情報はそれぞれ図１７、図１８、図１９の通りである。図１９に示すテストケース情報を元にプログラム制御部１１がプログラムテストを実施する場合、始めにウィンドウIDが１のウィンドウ１００に対し、メニュー１０２にClick()の操作が行われ、その結果ウィンドウIDが２のウィンドウ２００に対し、操作部品２０１〜２０６へ、それぞれの操作が行われる。操作は各操作部品ごとのテストケースを組み合わせる形で行われる。この際、遷移が発生しない操作部品（２０１〜２０４）への操作については先にすべて行われ、その後で遷移が発生する操作部品（２０５または２０６）への操作が行われるような組み合わせとなる。また、操作部品IDが７、テストケースIDがaの操作を行った場合、図２０に示すようにウィンドウ１００にテーブルが追加された新しいウィンドウ３００が生成されるため、このウィンドウとテーブルを新たにウィンドウ情報および操作部品情報として格納する。この際、ベースとなるウィンドウはウィンドウ１００とウィンドウ３００で同じであるため、IDは枝番号を付与する形となる。更新されたウィンドウ情報および操作部品情報を図２１および図２２に示す。
【００５６】
以後、利用者からテストの停止が指示されるか、もしくはあらかじめ利用者が定めた段階まで達するか、あるいは全てのテストケースの実行が終了すると、テストが終了する。
【図面の簡単な説明】
【００５７】
【図１】本発明の実施の形態の構成を示すブロック図である。
【図２】被テスト対象プログラムの出力画面の遷移例を示す図である。
【図３】本発明の実施の形態の動作を示すフローチャートである。
【図４】被テスト対象プログラムの画面表示例を示す図である。
【図５】ウィンドウ情報の内容例を示す図である。
【図６】操作部品情報の内容例を示す図である。
【図７】設計情報の内容例を示す図である。
【図８】テストパターンの内容例を示す図である。
【図９】テストデータ生成部の処理例を示すフローチャートである。
【図１０】生成されるテストデータの内容例を示す図である。
【図１１】テストケース生成部の処理例を示すフローチャートである。
【図１２】生成されるテストケースの内容例を示す図である。
【図１３】生成されるテストケースの内容例を示す図である。
【図１４】生成されるテストケースの内容例を示す図である。
【図１５】被テスト対象プログラムの画面表示例を示す図である。
【図１６】被テスト対象プログラムの画面表示例を示す図である。
【図１７】ウィンドウ情報の内容例を示す図である。
【図１８】操作部品情報の内容例を示す図である。
【図１９】生成されるテストケースの内容例を示す図である。
【図２０】被テスト対象プログラムの画面表示例を示す図である。
【図２１】ウィンドウ情報の内容例を示す図である。
【図２２】操作部品情報の内容例を示す図である。
【符号の説明】
【００５８】
１…被テスト対象プログラム
２…出力手段
１０…GUIプログラムテスト支援装置
１１…プログラム制御部
１２…操作部品検出部
１３…操作部品記憶装置
１４…設計情報記憶装置
１５…テストパターン記憶装置
１６…テストデータ生成部
１７…テストケース生成部
１８…テストケース記憶装置
１９…テスト結果記憶装置
２０…設計情報入力装置
２１…テストパターン入力装置
１００…ウィンドウ
１０１…ウィンドウタイトル
１０２…メニュー
１０３…メニュー
２００…ウィンドウ
２０１…テキストボックス
２０２…リストボックス
２０３…チェックボックス
２０４…チェックボックス
２０５…ボタン
２０６…ボタン
３００…ウィンドウ
【図１】
2006244195.tif 000003
【図２】
2006244195.tif 000004
【図３】
2006244195.tif 000005
【図４】
2006244195.tif 000006
【図５】
2006244195.tif 000007
【図６】
2006244195.tif 000008
【図７】
2006244195.tif 000009
【図８】
2006244195.tif 000010
【図９】
2006244195.tif 000011
【図１０】
2006244195.tif 000012
【図１１】
2006244195.tif 000013
【図１２】
2006244195.tif 000014
【図１３】
2006244195.tif 000015
【図１４】
2006244195.tif 000016
【図１５】
2006244195.tif 000017
【図１６】
2006244195.tif 000018
【図１７】
2006244195.tif 000019
【図１８】
2006244195.tif 000020
【図１９】
2006244195.tif 000021
【図２０】
2006244195.tif 000022
【図２１】
2006244195.tif 000023
【図２２】
2006244195.tif 000024