(57)【要約】【課題】モバイルアプリケーションの自動的な特徴駆動型テスト及び品質チェックを可能にすること。【解決手段】１つ又は複数のコンピューティングデバイスによる特徴駆動型のテスト方法は、アプリケーションについてのグラフィカルユーザインタフェース（ＧＵＩ）を決定するステップと、プラットフォームについてのアプリケーション独立の特徴を決定するステップと、アプリケーション独立の特徴を反映するようにＧＵＩモデルを増補して、増補されたモデルにするステップと、増補されたモデルからテストケースを決定するステップとを含む。テストケースは、アプリケーション独立の特徴を含む。アプリケーションは、プラットフォーム上で実行されるものである。ＧＵＩモデルは、状態及び遷移を含む。【選択図】図１
2014191830.tif 000002
【特許請求の範囲】
【請求項１】
１つ又は複数のコンピューティングデバイスによる特徴駆動型のテスト方法であって、
アプリケーションについてのグラフィカルユーザインタフェース（ＧＵＩ）モデルを決定するステップであって、前記アプリケーションはプラットフォームにおいて実行されるものであり、前記ＧＵＩモデルは、状態と遷移とを含む、ステップと、
前記プラットフォームについてのアプリケーション独立の特徴を決定するステップと、
前記アプリケーション独立の特徴を反映するよう前記ＧＵＩモデルを増補して、増補されたモデルを得るステップと、
前記増補されたモデルからテストケースを決定するステップであって、前記テストケースは前記アプリケーション独立の特徴を含む、ステップと
を有する方法。
【請求項２】
前記ＧＵＩモデルを増補することは、前記アプリケーション独立の特徴のオペレーションを反映する遷移を追加することを含む、請求項１に記載の方法。
【請求項３】
前記増補されたモデルの状態は、前記ＧＵＩモデルの状態に実質的に等しい、請求項１に記載の方法。
【請求項４】
前記ＧＵＩモデルを増補することは、前記アプリケーション独立の特徴のオペレーションを反映する新たな遷移を追加することを含み、
前記増補されたモデルからテストケースを決定することは、前記増補モデルのトラバースの間、前記新たな遷移を、前記ＧＵＩモデルの遷移に対して優先することを含む、請求項１に記載の方法。
【請求項５】
前記増補されたモデルからテストケースを決定することは、前記ＧＵＩモデル内に存在していた遷移のみを含むトラバースのパスを破棄することを含む、請求項１に記載の方法。
【請求項６】
前記プラットフォームについての前記アプリケーション独立の特徴はオペレーションを含み、
前記ＧＵＩモデルの第１の状態における前記オペレーションは、前記ＧＵＩモデルを前記第１の状態のままに留め、
前記ＧＵＩモデルの第２の状態における前記オペレーションは、前記ＧＵＩモデルの前記第２の状態のままに留める、請求項１に記載の方法。
【請求項７】
前記プラットフォームについての前記アプリケーション独立の特徴はオペレーションを含み、
前記ＧＵＩモデルの第１の状態における前記オペレーションは、前記ＧＵＩモデルを第２の状態に遷移させ、
前記ＧＵＩモデルの第３の状態における前記オペレーションは、前記ＧＵＩモデルの前記第２の状態に遷移させる、請求項１に記載の方法。
【請求項８】
前記ＧＵＩモデルを増補することは、前記アプリケーション独立の特徴のオペレーションを反映する新たな遷移を追加することを含み、
前記増補されたモデルからテストケースを決定することは、前記テストケースのうち、前記アプリケーション独立の特徴を含む状態の後の部分を削除することを含む、請求項１に記載の方法。
【請求項９】
前記増補されたモデルから１つ又は複数の追加のテストケースを決定するステップであって、該追加のテストケースは、前記プラットフォームについての１つ又は複数の追加のアプリケーション独立の特徴を含み、前記テストケース及び追加のテストケースがテストスイートを形成する、ステップと、
前記テストスイート内のテストケースのカウント及び前記テストスイート内の各テストケースの個々の長さに関して、前記テストスイートを最適化するステップと
をさらに含む、請求項１に記載の方法。
【請求項１０】
前記増補されたモデルからテストケースを決定することは、
前記増補されたモデルの状態を、前記増補されたモデルのルートからの距離に関してソートすることと、
前記増補されたモデルの所与の状態について、
前記ルートから前記状態へのパスをプレフィックスとして決定することと、
前記状態から終端状態へのパスをサフィックスとして決定することと、
既に考慮された全ての遷移について、
前記プレフィックスと前記サフィックスとを追加して、テストケースを取得することと
を含む、請求項１に記載の方法。
【請求項１１】
コンピュータ実行可能命令を備えたコンピュータ読取可能媒体と、
前記コンピュータ読取可能媒体に結合され、前記命令を読み取って実行するように動作可能な１つ又は複数のプロセッサと
を備えたシステムであって、
前記１つ又は複数のプロセッサは、前記命令を実行すると、
アプリケーションについてのグラフィカルユーザインタフェース（ＧＵＩ）モデルを決定するステップであって、前記アプリケーションはプラットフォームにおいて実行されるものであり、前記ＧＵＩモデルは、状態と遷移とを含む、ステップと、
前記プラットフォームについてのアプリケーション独立の特徴を決定するステップと、
前記アプリケーション独立の特徴を反映するよう前記ＧＵＩモデルを増補して、増補されたモデルを得るステップと、
前記増補されたモデルからテストケースを決定するステップであって、前記テストケースは前記アプリケーション独立の特徴を含む、ステップと
を実行するように動作可能である、システム。
【請求項１２】
前記ＧＵＩモデルを増補することは、前記アプリケーション独立の特徴のオペレーションを反映する遷移を追加することを含む、請求項１１に記載のシステム。
【請求項１３】
前記増補されたモデルの状態は、前記ＧＵＩモデルの状態に実質的に等しい、請求項１１に記載のシステム。
【請求項１４】
前記ＧＵＩモデルを増補することは、前記アプリケーション独立の特徴のオペレーションを反映する新たな遷移を追加することを含み、
前記増補されたモデルからテストケースを決定することは、前記増補モデルのトラバースの間、前記新たな遷移を、前記ＧＵＩモデルの遷移に対して優先することを含む、請求項１１に記載のシステム。
【請求項１５】
前記増補されたモデルからテストケースを決定することは、前記ＧＵＩモデル内に存在していた遷移のみを含むトラバースのパスを破棄することを含む、請求項１１に記載のシステム。
【請求項１６】
前記プラットフォームについての前記アプリケーション独立の特徴はオペレーションを含み、
前記ＧＵＩモデルの第１の状態における前記オペレーションは、前記ＧＵＩモデルを前記第１の状態のままに留め、
前記ＧＵＩモデルの第２の状態における前記オペレーションは、前記ＧＵＩモデルの前記第２の状態のままに留める、請求項１１に記載のシステム。
【請求項１７】
前記プラットフォームについての前記アプリケーション独立の特徴はオペレーションを含み、
前記ＧＵＩモデルの第１の状態における前記オペレーションは、前記ＧＵＩモデルを第２の状態に遷移させ、
前記ＧＵＩモデルの第３の状態における前記オペレーションは、前記ＧＵＩモデルの前記第２の状態に遷移させる、請求項１１に記載のシステム。
【請求項１８】
前記ＧＵＩモデルを増補することは、前記アプリケーション独立の特徴のオペレーションを反映する新たな遷移を追加することを含み、
前記増補されたモデルからテストケースを決定することは、前記テストケースのうち、前記アプリケーション独立の特徴を含む状態の後の部分を削除することを含む、請求項１１に記載のシステム。
【請求項１９】
前記１つ又は複数のプロセッサは更に、
前記増補されたモデルから１つ又は複数の追加のテストケースを決定するステップであって、該追加のテストケースは、前記プラットフォームについての１つ又は複数の追加のアプリケーション独立の特徴を含み、前記テストケース及び追加のテストケースがテストスイートを形成する、ステップと、
前記テストスイート内のテストケースのカウント及び前記テストスイート内の各テストケースの個々の長さに関して、前記テストスイートを最適化するステップと
を実行するように動作可能である、請求項１１に記載のシステム。
【請求項２０】
前記１つ又は複数のプロセッサは更に、
前記増補されたモデルの状態を、前記増補されたモデルのルートからの距離に関してソートし、
前記増補されたモデルの所与の状態について、
前記ルートから前記状態へのパスをプレフィックスとして決定し、
前記状態から終端状態へのパスをサフィックスとして決定し、
既に考慮された全ての遷移について、
前記プレフィックスと前記サフィックスとを追加して、テストケースを取得する
ように動作可能である、請求項１１に記載のシステム。
【請求項２１】
コンピュータ読取可能媒体と、
前記コンピュータ読取可能媒体内に担持されるコンピュータ実行可能命令と
を備えた製品であって、
前記命令は、プロセッサによって読み取り可能であり、プロセッサによって読み取られて実行されると、該プロセッサに、
アプリケーションについてのグラフィカルユーザインタフェース（ＧＵＩ）モデルを決定するステップであって、前記アプリケーションはプラットフォームにおいて実行されるものであり、前記ＧＵＩモデルは、状態と遷移とを含む、ステップと、
前記プラットフォームについてのアプリケーション独立の特徴を決定するステップと、
前記アプリケーション独立の特徴を反映するよう前記ＧＵＩモデルを増補して、増補されたモデルを得るステップと、
前記増補されたモデルからテストケースを決定するステップであって、前記テストケースは前記アプリケーション独立の特徴を含む、ステップと
を実行させる、製品。
【請求項２２】
前記ＧＵＩモデルを増補することは、前記アプリケーション独立の特徴のオペレーションを反映する遷移を追加することを含む、請求項２１に記載の製品。
【請求項２３】
前記増補されたモデルの状態は、前記ＧＵＩモデルの状態に実質的に等しい、請求項２１に記載の製品。
【請求項２４】
前記ＧＵＩモデルを増補することは、前記アプリケーション独立の特徴のオペレーションを反映する新たな遷移を追加することを含み、
前記増補されたモデルからテストケースを決定することは、前記増補モデルのトラバースの間、前記新たな遷移を、前記ＧＵＩモデルの遷移に対して優先することを含む、請求項２１に記載の製品。
【請求項２５】
前記増補されたモデルからテストケースを決定することは、前記ＧＵＩモデル内に存在していた遷移のみを含むトラバースのパスを破棄することを含む、請求項２１に記載の製品。
【請求項２６】
前記プラットフォームについての前記アプリケーション独立の特徴はオペレーションを含み、
前記ＧＵＩモデルの第１の状態における前記オペレーションは、前記ＧＵＩモデルを前記第１の状態のままに留め、
前記ＧＵＩモデルの第２の状態における前記オペレーションは、前記ＧＵＩモデルの前記第２の状態のままに留める、請求項２１に記載の製品。
【請求項２７】
前記プラットフォームについての前記アプリケーション独立の特徴はオペレーションを含み、
前記ＧＵＩモデルの第１の状態における前記オペレーションは、前記ＧＵＩモデルを第２の状態に遷移させ、
前記ＧＵＩモデルの第３の状態における前記オペレーションは、前記ＧＵＩモデルの前記第２の状態に遷移させる、請求項２１に記載の製品。
【請求項２８】
前記ＧＵＩモデルを増補することは、前記アプリケーション独立の特徴のオペレーションを反映する新たな遷移を追加することを含み、
前記増補されたモデルからテストケースを決定することは、前記テストケースのうち、前記アプリケーション独立の特徴を含む状態の後の部分を削除することを含む、請求項２１に記載の製品。
【請求項２９】
前記プロセッサに、
前記増補されたモデルから１つ又は複数の追加のテストケースを決定するステップであって、該追加のテストケースは、前記プラットフォームについての１つ又は複数の追加のアプリケーション独立の特徴を含み、前記テストケース及び追加のテストケースがテストスイートを形成する、ステップと、
前記テストスイート内のテストケースのカウント及び前記テストスイート内の各テストケースの個々の長さに関して、前記テストスイートを最適化するステップと
を実行させる命令をさらに備える、請求項２１に記載の製品。
【請求項３０】
前記プロセッサに、
前記増補されたモデルの状態を、前記増補されたモデルのルートからの距離に関してソートさせ、
前記増補されたモデルの所与の状態について、
前記ルートから前記状態へのパスをプレフィックスとして決定させ、
前記状態から終端状態へのパスをサフィックスとして決定させ、
既に考慮された全ての遷移について、
前記プレフィックスと前記サフィックスとを追加して、テストケースを取得させる
命令を更に備える、請求項２１に記載の製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ソフトウェアの検証に関し、より具体的には、アプリケーションの自動的な特徴駆動型（feature  driven）のテスト及び品質チェックに関する。
【背景技術】
【０００２】
ソフトウェアアプリケーションは、任意の数のモジュール（例えばクラス、関数、プロシージャ、サブルーチン又はコードブロック）を含むことがあり、各モジュールは個々にテストされるか、検証される。ソフトウェアモジュールは、手動又は自動でテスト又は検証される。前者の場合、人（例えばソフトウェアをテストする技術者）は、ソフトウェアモジュールのテストケースを、モジュールの設計仕様書に基づいて手動で設計し、モジュールをテストケースの下で実行し、テストケースを介して仕様書に一致しないモジュールの挙動又は出力をチェックする。後者の場合、コンピュータソフトウェア又はハードウェアとして実装されるソフトウェアテストツールが、テスト対象のソフトウェアモジュールのテストケースを自動的に設計し、テストケースをシミュレートしている間にテスト対象のモジュールを実行し、テストケースに一致しないモジュールの挙動又は出力をチェックする。最近のソフトウェアの完全な複雑性は、しばしば、ソフトウェアを完全にテストするために不適切なテストケースの手動の生成又は設計を招く。
【０００３】
イベント駆動型（event-driven）のプログラム、すなわち、プログラムの流れがイベントによって決まるプログラムが、ますます一般的になってきている。イベント駆動型のプログラムは、一般に、グラフィカルユーザインタフェース（ＧＵＩ）を提供するアプリケーションなどのユーザアプリケーションにおいて使用される。さらに、イベント駆動型のプログラムは、スマートフォンやタブレットなどのモバイルデバイス上で動作するモバイルアプリケーションにおいて使用され、ユーザにＧＵＩ及び他の機能を提供することもある。イベント駆動型のプログラムは、ユーザに対してモバイルデバイス及び他のデバイスの使用を容易にする可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、モバイルアプリケーションの自動的な特徴駆動型テスト及び品質チェックを提供することを目的とする。
【課題を解決するための手段】
【０００５】
一実施形態に係る１つ又は複数のコンピューティングデバイスによる特徴駆動型のテストの方法は、アプリケーションについてのグラフィカルユーザインタフェース（ＧＵＩ）モデルを決定するステップと、プラットフォームについてのアプリケーション独立の特徴を決定するステップと、前記アプリケーション独立の特徴を反映するように前記ＧＵＩモデルを増補して、増補されたモデルを得るステップと、前記増補されたモデルからテストケースを決定するステップとを有する。テストケースは、アプリケーション独立（application-independent）の特徴を含む。アプリケーションは、前記プラットフォームで実行されるものである。ＧＵＩモデルは、状態（state）と遷移（transition）を含む。
【０００６】
別の実施形態に係るシステムは、コンピュータ実行可能命令を含むコンピュータ読取可能媒体と、該コンピュータ読取可能媒体に結合され、コンピュータ実行可能命令を読み取って実行するように動作可能な１つ又は複数のプロセッサを含む。１つ又は複数のプロセッサは、命令を実行すると、アプリケーションについてのグラフィカルユーザインタフェース（ＧＵＩ）モデルを決定し、プラットフォームについてのアプリケーション独立の特徴を決定し、前記アプリケーション独立の特徴を反映するように前記ＧＵＩモデルを増補して、増補されたモデルとし、前記増補されたモデルからテストケースを決定するように動作する。テストケースは、アプリケーション独立の特徴を含む。アプリケーションは、前記プラットフォームで実行されるものである。ＧＵＩモデルは、状態と遷移を含む。
【０００７】
さらに別の実施形態に係る製品は、コンピュータ読取可能媒体と、該コンピュータ読取可能媒体上に担持されるコンピュータ実行可能命令を含む。該命令は、プロセッサによって読み取り可能である。命令は、読み取られて実行されると、プロセッサに、アプリケーションのグラフィカルユーザインタフェース（ＧＵＩ）モデルを決定させ、プラットフォームのアプリケーション独立の特徴を決定させ、前記アプリケーション独立の特徴を反映するように前記ＧＵＩモデルを増補させて、増補されたモデルとし、前記増補されたモデルからテストケースを決定させる。テストケースは、アプリケーション独立の特徴を含む。アプリケーションは、前記プラットフォームで実行されるものである。ＧＵＩモデルは、状態と遷移を含む。
【０００８】
本発明の目的及び利点は、特に特許請求の範囲において示される要素及び組み合わせによって実現され、達成されることとなる。上記の一般的な説明及び下記の詳細な説明の双方とも、例示及び説明上のものであり、特許請求に係る本発明を限定するものではないことを理解されたい。
【０００９】
本発明及び本発明の特徴と利点のより完全な理解のために、下記の説明は添付の図面とともに参照される。
【図面の簡単な説明】
【００１０】
【図１】アプリケーションの自動的な特徴駆動型のテスト及び品質チェックシステムの例示的な実施形態を示す図である。
【図２】増補されたグラフィカルユーザインタフェースモデルの例示的な実施形態を示す図である。
【図３】テストスイート（test  suite）抽出の例示的な方法を示す図である。
【図４】所与のノードに対する新たなテスト経路を決定する方法の例示的な実施形態を示す図である。
【図５】アプリケーションの自動的な特徴駆動型のテスト及び品質チェックの方法の例示的な実施形態を示す図である。
【発明を実施するための形態】
【００１１】
図１は、アプリケーションについての自動的な特徴駆動型のテスト及び品質チェックのためのシステム１００の例示的な実施形態を示す図である。このようなアプリケーションは、例えば固有のターゲットプラットフォームでの使用のために設計されたアプリケーションを含んでもよい。このアプリケーションは、例えば固有のモバイルオペレーティングシステム又はデバイスのカテゴリ用のモバイルアプリケーションを含んでもよい。所与のアプリケーションは、該アプリケーションに固有のプログラム機能により開発され得る。しかしながら、アプリケーションは、該アプリケーションが開発されることとなるプラットフォームに関連する特徴、機能又は他の態様も含むことがある。そのような特徴、機能又は他の態様は、システムに対して展開されることとなる固有のアプリケーションと独立のものとしてもよく、したがって、そのような全てのアプリケーションは、どのようなアプリケーションが使用されているかを問わず同じ又は同様の手法で動作するように、これらの特徴、機能又は他の態様を実装してもよい。これらの特徴、機能又は態様は、それぞれのアプリケーションによって実装される必要があるが、そのような特徴は、アプリケーションの基礎となるオペレーションを変更しない。システム１００は、プラットフォーム固有の特徴及び同等物が多くの異なるアプリケーションにわたってテストされるように、アプリケーションのテスト及び品質チェックを提供する。
【００１２】
システム１００は、分析モジュール１０２を含む。分析モジュール１０２は、アプリケーション、関数、コード、共有ライブラリ、スクリプト、実行可能ファイル、オブジェクトコード、命令、ハードウェア、ソフトウェア又はこれらの任意の適切な組み合わせなどの任意の適切な手法で実装される。分析モジュール１０２は、電子デバイス１０４などの任意の適切なデバイス上で実行するように構成される。電子デバイス１０４は、例えばコンピュータ、モバイルデバイス、サーバ、ブレード又は他の適切なエンティティを含んでもよい。単一の電子デバイス１０４のみが図１では示されているが、システム１００は、システム１００の構成及びオペレーションを実行するための任意の適切な種類又は数の電子デバイスを含んでもよい。
【００１３】
電子デバイス１０４は、メモリ１１２に結合されるプロセッサ１１０を含むことが可能である。分析モデル１０２の一部又は全てを、プロセッサ１１０による実行のために、メモリ１１２内に存在するロジック又は命令で具現化することがきる。プロセッサ１１０は、例えばマイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、あるいはプログラム命令を解釈及び／又は実行し、及び／又はデータを処理するように構成された任意の他のデジタル又はアナログの回路を含む可能性がある。プロセッサ１１０は、メモリ１１２内に格納されたプログラム命令を解釈及び／又は実行するか、及び／又はデータを処理することが可能である。メモリ１１２は、プログラム命令及び／又はデータを、ある期間の間保持するように構成された任意のシステム、デバイス又は装置を備えてもよい（例えばコンピュータ読取可能媒体）。
【００１４】
分析モジュール１０２は、グラフィカルユーザインタフェース（ＧＵＩ）モデル１０６を入力として受け入れるように構成される。分析モジュール１０２は、テストスイート１０８をその出力として提供するように構成される。分析モジュール１０２は、ＧＵＩモデル１０６を分析し、そして該分析に基づいてテストスイート１０８を生成するように構成される。ＧＵＩモデル１０６に基づくこのようなテストは、ＧＵＩモデル１０６によって表されるアプリケーションの開発において使用される可能性がある。テストを実行して、ＧＵＩモジュール１０６によって表されるアプリケーションは、該アプリケーションの開発者によって期待又は望まれるような機能及び特徴を含むかどうかを判断する可能性がある。したがって、ＧＵＩモデル１０６の分析を使用して、基礎となるアプリケーションについて、望み通りに機能せず、このためアプリケーションが望み通りに機能するよう修正される可能性がある、１つ又は複数の特徴を識別することが可能である。分析モジュール１０２によって識別される特徴は、基礎となるアプリケーションのオペレーションの残りの部分とは独立の特徴を含み、所与のプラットフォームの全てのアプリケーションに共通の特徴を含む。
【００１５】
ＧＵＩモデル１０６は、アプリケーションについてのオペレーションの抽象化を含むことがある。そのようなアプリケーションは、イベント駆動型のアプリケーションを含んでもよい。イベント駆動型のアプリケーションの場合、様々なユーザ入力又は他のイベントがあると、アプリケーションはその状態を変える。ＧＵＩモデル１０６は、オペレーションの１つ又は複数の状態の指示（indication）を含んでもよい。オペレーションのそのような状態の間で、ＧＵＩモデル１０６は、アプリケーションの状態によりオペレーションを変化させる、ユーザ入力又は他のアクションを示すエッジ（edge）又は遷移を含んでもよい。したがって、ＧＵＩモデル１０６は、基礎となるアプリケーションのＧＵＩ挙動の有限状態モデルを含んでもよい。オペレーションの各状態は、アプリケーションを使用している間にユーザが対話するスクリーンの抽象表現又はスクリーンの状態を示す可能性がある。
【００１６】
ＧＵＩモデル１０６は、該モデルが基づいているアプリケーションに関連付けられたアプリケーション固有のオペレーションに基づいて作成される。一実施形態において、ＧＵＩモデル１０６は、プラットフォームレベルのアクションに関するオペレーションを含まないことがある。そのようなプラットフォームレベルのアクションは、以下でさらに詳細に説明される。ＧＵＩモデル１０６はそのようなプラットフォームレベルのアクションを除外するが、これは、これらのプラットフォームレベルのアクションを含むことにより、ＧＵＩモデルが、分析用には扱いにくく、面倒なものとなりすぎるからである。
【００１７】
ＧＵＩモデル１０６は、任意の適切な手法により決定される。例えばＧＵＩモデル１０６は、アプリケーション１１４など、ＧＵＩモデル１０６によって表されるアプリケーションの開発者によって決定又は設定されることがある。別の例において、ＧＵＩモデル１０６は、状態グラフ、状態マシン又はアプリケーションの他の表現を、そのようなアプリケーションのコードに基づいて生成するように構成されたモジュールの出力としてもよい。そのようなモジュールには、例えばＧＵＩモデラ１１６が含まれる。ＧＵＩモデラ１１６は、ＧＵＩモジュール１０６をアプリケーション１１４に基づいて生成するための任意の適切な方法又は手法で実装される。ＧＵＩモデラ１１６を、システム１００内で実装してもよく、電子デバイス１０２上で実装してもよく、あるいは任意の適切なデバイス又は位置で実装してもよい。
【００１８】
アプリケーション１１４は、分析モジュール１０２がプラットフォームレベルの分析を提供する任意の適切なアプリケーションを含む。アプリケーション１１４は、例えばアプリケーション、関数、コード、共有ライブラリ、スクリプト、実行可能ファイル、オブジェクトコード、命令、ソフトウェア又はこれらの任意の適切な組み合わせによって実装され得る。アプリケーション１１４は、イベント駆動型のオペレーション、ユーザタッチスクリーン又は他の特徴を含む可能性がある。一実施形態において、アプリケーション１１４は、モバイルアプリケーションを含むことがある。別の実施形態において、アプリケーション１１４は、プラットフォーム固有のアプリケーションを含むことがある。したがって、アプリケーション１１４は、特定のタイプ又はクラスのデバイス又は環境において動作するように構成されることがある。アプリケーション１１４は、固有のデバイスまたはデバイスの固有のサブクラスにおいて動作するように構成されることもある。例えばアプリケーション１１４は、ＡＮＤＲＯＩＤ（登録商標）ベースのスマートフォン、ＡＮＤＲＯＩＤベースのタブレット、ＩＯＳベースのスマートフォン、ＩＯＳベースのタブレット、ＷＩＮＤＯＷＳ（登録商標）ベースのコンピュータ、ＷＩＮＤＯＷＳベースのタブレット、又はＷＩＮＤＯＷＳベースのスマートフォン上で動作するように構成されることがある。アプリケーション１１４のためのプラットフォームは、ナビゲーションシステム、エンターテイメントシステム又は自動車などの車両も含む可能性がある。これらは単に例示の目的で与えられる。アプリケーション１１４はＧＵＩモデラ１１６に入力され、その結果、ＧＵＩモジュール１０６となる。
【００１９】
そのオペレーションを実行する際に、分析モジュール１０２は、テストスイート１０８をテスタ１１８に出力する。テストスイート１０８は、シーケンスのセットを含んでもよく、各シーケンスは、アプリケーション１１４に対して実行されるコマンド、オペレーション又は他のアクションの指示を含むことがある。さらに、そのようなシーケンスはそれぞれ、期待される出力を含む可能性がある。テスタ１１８は、これらのシーケンスを実行して、アプリケーション１１４のオペレーションが指定又は期待される挙動に合致するかどうかを評価するように構成される。一実施形態において、テスタ１１８は、アプリケーション１１４の全ての挙動を評価するように構成される。別の実施形態において、テスタ１１８は、アプリケーション１１４の固有の機能とは独立の、プラットフォーム固有のオペレーションを評価するように構成される。テスタ１１８は、実行する評価を、テストスイート１０８のコンテンツに基づいて決定することが可能である。したがって、テストスイート１０８は、アプリケーション１１４の固有の機能とは独立のプラットフォーム固有のオペレーションを含むように生成される。テスタ１１８は、テストスイート１０８をテストし、その結果を出力するための任意の適切な手法又は方法により実装される。テスタ１１８は、システム１００内で実装されても、電子デバイス１０２上に実装されてもよく、任意の他の適切なデバイス又は位置に実装されてもよい。
【００２０】
ＧＵＩモデル１０６を、アプリケーション独立であってプラットフォームワイドな特徴及びオペレーションをテストするためのシーケンスを有するテストスイート１０８に変換するために、分析モジュール１０２は、ＧＵＩモデル１０６を拡張し、増大させ、あるいはそうでなくとも増補するように構成される。分析モジュール１０２は、ＧＵＩモデル１０６を、例えば増補されたＧＵＩモデル１２８に変換するように構成される。このような増補されたＧＵＩモデル１２８に基づいて、分析モジュール１０２は、ＧＵＩモデル１０６と比して、増補されたＧＵＩモデル１２８に行われた拡張（enhancement）からテストシーケンスを抽出するように構成され、その結果、アプリケーション独立でプラットフォームワイドな特徴及びオペレーションが、テストスイート１０８よってテストされる。
【００２１】
分析モジュール１０２は、ＧＵＩモデル１０６の分析を実行する任意の適切な数及び種類のコンポーネントを含む可能性がある。例えば分析モジュール１０２は、モデル増補モジュール１２０、特徴リスト１２２、テストオラクルモジュール１２４及びテストスイート抽出モジュール１２６を含む可能性がある。モデル増補モジュール１２０、特徴リスト１２２、テストオラクルモジュール１２４及びテストスイート抽出モデル１２６をそれぞれ、電子デバイス１０２上に配置してもよく、又は分析モジュール１０２に通信可能に結合される任意の他の適切な電子デバイス上に配置してもよい。さらに、モデル増補モジュール１２０、特徴リスト１２２、テストオラクルモジュール１２４及びテストスイート抽出モデル１２６をそれぞれ、アプリケーション、関数、コード、共有ライブラリ、スクリプト、実行ファイル、データ構造、ファイル、データベース、オブジェクトコード、命令、ハードウェア、ソフトウェア又はこれらの任意の適切な組み合わせなどによる、任意の適切な手法で実装することが可能である。モデル増補モジュール１２０、特徴リスト１２２、テストオラクルモジュール１２４及びテストスイート抽出モデル１２６の一部又は全ては、本明細書で説明される機能を提供するためにプロセッサ１１０によって実行するためのコード、命令、又はメモリ１１２上に存在する他のデータを含んでもよい。さらに、モデル増補モジュール１２０、特徴リスト１２２、テストオラクルモジュール１２４及びテストスイート抽出モデル１２６はそれぞれ、プロセッサ１１０又は別の適切なプロセッサによる実行のために他のメモリ上に存在する上記コードを含んでもよい。
【００２２】
モデル増補モジュール１２０は、ＧＵＩモデル１０６を受け取り、プラットフォームベースの挙動のモデリングを追加するようにＧＵＩモデル１０６を拡張し、増補し、あるいは増大させるように構成される。そのような挙動は、ＧＵＩモデル１０６が表す固有のアプリケーションとは独立のものとしてもよい。
【００２３】
プラットフォームベースの挙動には、プラットフォーム上で所与のアプリケーションの固有の挙動とは独立に実行されるオペレーション、コマンド又は他のアクティビティが含まれることがある。したがって、これらの挙動は、アプリケーション独立であると考えられるので、その挙動の結果として起こるオペレーションは、プラットフォーム上でどのアプリケーションが実行しているかを問わず、一部の例ではアプリケーションのどのスクリーンが実行しているかを問わず、同じであるべきである。これらの挙動は、固有のアプリケーションとは独立であり、したがってＧＵＩモデル１０６内に含まれない可能性があるプラットフォーム又はデバイスによってサポートされるアプリケーションと対話するモードを表してもよい。したがって挙動は、ＧＵＩとの対話に関して定義される可能性がある。挙動は、アプリケーション内におけるコード、枝等のアプリケーション固有のライン内では反映されない。
【００２４】
そのようなプラットフォームベースの挙動には、例えばスクロール、スクリーンをスワイプすること、スクリーンをピンチインすること（ズームアウト）、スクリーンをスプレッドすること（ズームイン）などのタッチスクリーンジェスチャ；デバイスの物理的な位置又は回転に基づく、スクリーンの回転；デバイスのボタンの押下に基づいてアプリケーションをリスタートし、ストップし、中止し、又は一時停止すること；プラットフォームワイドな「戻る」ボタンをアクティブ化すること；あるいはプラットフォームメニューをアクティブ化することなどが含まれる。これらの挙動はしばしば、プラットフォームのプレゼンテーション又はナビゲーションのコントロールに関連する。さらに、これらの挙動は、基礎となる機能のコアロジックとはリンクされない。これらの挙動は、多くの異なるアプリケーションにわたってチェックされるアプリケーションには依存しない（application-agnostic）、すなわちアプリケーション独立のオペレーションを含む可能性がある。例えばスクリーンを２回回転させることにより、元のスクリーンを提示することになる。そのような回転オペレーション及びチェックが、任意のアプリケーション又はそのサブスクリーンに適用されてもよい。別の例では、戻るボタンを押すことにより、アプリケーションを前の画面に戻すべきであり、これは、任意のアプリケーション又はそのサブスクリーンに適用される。これらの挙動は、プラットフォームによって定義されるが、プラットフォームに関するアプリケーションは、これらの特徴を集合的にサポートするように期待される。
【００２５】
モデル増補モジュール１２０は、特徴リスト１２２２及びテストオラクルモジュール１２４にアクセスして、所与のアプリケーション又はそのスクリーンについて、どのアプリケーション独立の特徴をテストするか、及び更には、そのアプリケーション独立の特徴をどのようにテストするかを決定するように構成される。特徴リスト１２２は、テストオラクルモジュール１２４にアクセスし、このテストオラクルモジュール１２４は、実際にテストを実行して、所与の特徴をどのようにテストするかを決定するのに使用される。特徴リスト１２２は、表現がＧＵＩモデル１０６に追加される特徴のリストを返す。特徴を、例えば該特徴が適用可能なＧＵＩモデル内の状態の指示又は状態の種類によって定義してもよい。例えば中止オプションは、ある特定の保護された状態では利用可能ではない。さらに、一部のスクリーンは、回転又はズームされないように設計される。加えて、戻るコマンドは、アプリケーションのルート状態に対して適用可能でない。特徴は、その特徴を機能させる述語となり得るコマンドアクションのシーケンスによって更に定義されることもある。加えて、特徴は、所与の特徴に関して期待される挙動を定義する可能性がある、テストオラクルモジュール１２４の１つ又は複数によって更に定義されることもある。そのような定義は、複数のアプリケーションにわたって適用可能であり、所与のアプリケーション又はそのスクリーンと独立にしてもよい。
【００２６】
所与の特徴（並びにその状態、述語のシーケンス及び論理ルール）に関して、モデル増補モジュール１２０は、その特徴に基づいて追加の遷移を組み込むようＧＵＩモデル１０６を増補するように構成される。その結果、増補されたＧＵＩモデル１２８を含む可能性がある。一実施形態において、増補されたＧＵＩモデル１２８は、いかなる追加の状態もＧＵＩモデル１２８に追加しないこともある。
【００２７】
図２は、増補されたＧＵＩモデル１２８の例示的な実施形態の図である。図２では、例示の目的で、増補されたＧＵＩモデル１２８は、ノートパッドアプリケーションなどのアプリケーションに基づくものとしてもよい。増補されたＧＵＩモデル１２８は、１つ又は複数の状態２０２、２０４、２０６、２０８、２１０、２１２を含んでもよい。さらに、増補されたＧＵＩモデル１２８は、そのような状態間において、ＧＵＩモデル１０６内に元々存在していた１つ又は複数の遷移２１４を含んでもよい。加えて、増補されたＧＵＩモデル１２８は、ＧＵＩモデル１０６から増補されたＧＵＩモデル１２８を作成するモデル増補モジュール１２０のオペレーションの間に追加された、追加の遷移２１６を含む可能性がある。したがって、ＧＵＩモデル１０６は、状態２０２、２０４、２０６、２０８、２１０、２１２、及び遷移２１４を含む可能性がある。
【００２８】
状態２０２、２０４、２０６、２０８、２１０、２１２のいずれか１つの間の各遷移２１４は、ノートパッドアプリケーションにおいてユーザによって選択されたＧＵＩアクションを表す可能性がある。例えば状態Ｓ０  ２０２のノードパッドアプリケーションの初期スクリーン又は初期状態から、ユーザは、メモを追加する「Ａｄｄ  ｎｏｔｅ」オプションをクリックして、オペレーションを状態Ｓ１  ２０４に移すこと；Ｎｏｔｅ０のオプションを選択して、オペレーションを状態Ｓ２  ２０６に移すこと；削除するテキストをクリックして、オペレーションを状態Ｓ５  ２１０に移すこと；又はしばらくの間「Ｎｏｔｅ０」をクリックしてオペレーションを状態Ｓ５  ２１０に移すことが可能である。
【００２９】
状態Ｓ１  ２０４において、ユーザは、キーをタイプして、オペレーションを状態Ｓ１  ２０４に留めること；「保存」ボタンをクリックして、オペレーションを状態０  ２０２に移すこと；又は「破棄」ボタンをクリックして、オペレーションを状態０  ２０２に移すことが可能である。
【００３０】
状態Ｓ２  ２０６において、ユーザは、キーをタイプして、オペレーションを状態Ｓ２  ２０６に留めること；「タイトル編集」ボタンを押して、オペレーションを状態Ｓ３  ２０８に移すこと；「保存」ボタンをクリックして、オペレーションを状態Ｓ０  ２０２に移すこと；「削除」ボタンをクリックして、オペレーションを状態Ｓ０  ２０２に移すこと；「変更を元に戻す（revert）」ボタンをクリックして、オペレーションを状態Ｓ０  ２０２に移すことが可能である。
【００３１】
状態Ｓ３  ２０８において、ユーザは、キーをタイプして、オペレーションを状態Ｓ３  ２０８に留めること；又は「ＯＫ」ボタンを押して、オペレーションを状態Ｓ２  ２０６に移すことが可能である。
【００３２】
状態Ｓ５  ２１０において、ユーザは、キーをタイプして、オペレーションを状態Ｓ５  ２１０に留めること；「テキストを開く」ボタンをクリックして、オペレーションを状態Ｓ２  ２０６に移すこと；又は「タイトルをテキスト編集」ボタンをクリックして、オペレーションを状態Ｓ４  ２１２に移すことが可能である。
【００３３】
状態Ｓ４  ２１２において、ユーザは、キーをタイプして、オペレーションを状態Ｓ４  ２１２に留めること；又は「ＯＫ」ボタンを押して、オペレーションを状態Ｓ０  ２０２に移すことが可能である。
【００３４】
これらは、ＧＵＩモデル１０６のコンテンツを表す。ＧＵＩモデル１０６を受け取ると、モデル増補モジュール１２０は、特徴リスト１２０から、ＧＵＩモデル１０６に適用される１つ又は複数の特徴遷移を決定する。そのような追加される遷移２１６は、回転及び戻るボタンを押すことに関連付けられるオペレーションを含む。特徴リスト１２２は、所与の状態において、２つの回転オペレーションにより同じ状態が得られるべきことを定義する。さらに、特徴リスト１２２は、戻るボタンの一回押下により、その前の状態に戻った状態にすると定義してもよい。加えて、特徴リスト１２２は、戻るボタンの２回押下により、２つ前に呼び出された状態に戻った状態にすると定義してもよい。一部の場合において、戻るボタンの２回押下により、アプリケーションがそのルート状態に戻ることがある。
【００３５】
増補されたＧＵＩモデル１２８は、アプリケーション独立のプラットフォームオペレーションを反映する、これらの追加された遷移２１６を示す。モデル増補モジュール１２０は、既存の遷移を評価する必要はないが、状態の評価にのみ従って、ルートとして又は非ルートとして追加の遷移２１６をＧＵＩモデル１０６内に配置している。
【００３６】
したがって、状態Ｓ０  ２０２において、ユーザは、状態Ｓ０  ２０２のオペレーションの間に回転を２回行ってもよく、その結果、オペレーションは状態Ｓ０  ２０２に留まる。状態Ｓ１  ２０４において、ユーザは、状態Ｓ１  ２０４のオペレーションの間に回転を２回行ってもよく、その結果、オペレーションは状態Ｓ１  ２０４に留まる。状態Ｓ２  ２０６において、ユーザは、状態Ｓ２  ２０６のオペレーションの間に回転を２回行ってもよく、その結果、オペレーションは状態Ｓ２  ２０６に留まる。状態Ｓ３  ２０８において、ユーザは、状態Ｓ３  ２０８のオペレーションの間に回転を２２回行ってもよく、その結果、オペレーションは状態Ｓ３  ２０８に留まる。状態Ｓ５  ２１０において、ユーザは、状態Ｓ５  ２１０のオペレーションの間に回転を２回行ってもよく、その結果、オペレーションは状態Ｓ５  ２１０に留まる。状態Ｓ４  ２１２において、ユーザは、状態Ｓ４  ２１２のオペレーションの間に回転を２回行ってもよく、その結果、オペレーションは状態Ｓ４  ２１２に留まる。
【００３７】
さらに、状態Ｓ１  ２０４において、ユーザは、１回又はダブルクリックなどの二重選択により戻るボタンを選択してもよく、その結果、オペレーションは状態Ｓ０  ２０２に移る。状態Ｓ２  ２０６において、ユーザは、１回又はダブルクリックなどの二重選択により戻るボタンを選択してもよく、その結果、オペレーションは状態Ｓ０  ２０２に移る。状態Ｓ５  ２１０において、ユーザは、１回又はダブルクリックなどの二重選択により戻るボタンを選択してもよく、その結果、オペレーションは状態Ｓ０  ２０２に移る。
【００３８】
状態Ｓ３  ２０８において、ユーザは、単一の選択により戻るボタンを選択してもよく、その結果、オペレーションは状態Ｓ２  ２０６に移る。さらに、状態Ｓ３  ２０８において、ユーザは、二重選択により戻るボタンを選択してもよく、その結果、オペレーションは状態Ｓ０  ２０２に移る。
【００３９】
状態Ｓ４  ２１２において、ユーザは、単一の選択により戻るボタンを選択してもよく、その結果、オペレーションは状態Ｓ５  ２１０に移る。さらに、状態Ｓ４  ２１２において、ユーザは、二重選択により戻るボタンを選択してもよく、その結果、オペレーションは状態Ｓ０  ２０２に移る。
【００４０】
図１に戻ると、増補されたＧＵＩモデル１２８が得られると、テストスイート抽出モジュール１２６は、１つ又は複数のテストシーケンスを決定し、増補されたＧＵＩモデル１２８に基づいてテストスイート１０８を作成する。一実施形態において、テストスイート抽出モジュール１２６は特に、モデル増補モジュール１２０によって追加された特徴の拡張部分を完全にカバーするようテストシーケンスを生成するように構成される。したがって、増補されたＧＵＩモデル１２８は、元々存在する遷移と、モデル増補モジュール１２０によって追加された遷移との間の差を保持することがある。そのような遷移をどのように抽出するかを決定するために、テストスイート抽出モジュール１２６は、１つ又は複数のテストオラクルモジュール１２４にアクセスする。プラットフォーム特徴のオペレーションを定義するテストオラクルモジュール１２４は、そのようなプラットフォームの特徴ごとに又はプラットフォームの特徴のタイプごとに存在することがある。
【００４１】
テストスイート抽出モジュール１２６は、増補されたＧＵＩモデル１２８における遷移によって表されるＧＵＩオペレーションのシーケンス又はパス（path）のセットを抽出するように構成され、したがって、追加された遷移２１６は全て、少なくとも１つのそのようなシーケンス又はパスに含まれる。結果として得られるシーケンス又はパスのセットは、テストスイート１０８に含まれる。そのようなシーケンス又はパスはそれぞれ、ＧＵＩモデル１２８のルートから発生する。そのようなシーケンス又はパスはそれぞれ、典型的には固有のシーケンス又はパスの長さに応じた、個々のテストのコストを有する。さらに、そのようなテストを設定する別のコストも存在し、これは、生成されたシーケンス又はパスの各々に適用される。これらのコンポーネントの各々に関連付けられたコストは、各々に対する定数(constant)又はファクタを含む。テストスイート１０８の最も効果的な例はそのようなファクタに依存し、したがって、シーケンスの長さとシーケンスの数との間にトレードオフが生まれる。テストスイート抽出モジュール１２６は、任意の長さの任意のシーケンス又はパスを実行するオーバヘッドに関連付けられたファクタと、全てのそのようなシーケンス又はパスの実行に関連付けられたファクタとを所与として、テストスイート１０８の生成を最適化するように構成される。例えばコストは次のように定義されることがある。  
Cost=α*|T|+β*Σ|ti|
ここで、“T”は、テストスイート抽出モジュール１２６によって抽出され、テストスイート１０８に含まれることになるパス又はシーケンスのセット{t1,t2,…tk}を含む。|T|は、テストスイート１０８に含まれるテストの数を表す。|T|の包含は、したがって、新たなテストシーケンスをテストするためのリスタート、初期化又は他のオーバヘッドのコストを含む。したがって、|ti|によって表されるそれぞれの個々のテストのアクション又はサイズの数の合計も含まれる。α及びβなどの重み付けファクタは、例えば初期化とモデル内で行われるトラバースのステップとの相対的なコストに従って、これらの要素の各々に適用される可能性がある。これらの重み付けファクタは、経験的に決定されることがある。
【００４２】
任意の適切なアルゴリズムをテストスイート抽出モジュール１２６によって使用して、増補モジュールによって追加された増補されたＧＵＩモデル１２８の各部分が、少なくとも１つのパス又はシーケンスに含まれるように、テストスイート１０８を決定してもよい。さらに、そのようなアルゴリズムは、任意の適切な手法で、上述のコスト決定方法に従ってテストスイート１０８の実行のコストを最適に最小化するように適用される。
【００４３】
アルゴリズムは、例えばヒューリスティックアルゴリズムを含む可能性がある。そのようなアルゴリズムは、増補されたＧＵＩモデル１２８の潜在的な状態を、該増補されたＧＵＩモデル１２８のソース又はルートからの距離によってソートすることを含んでもよい。各状態について、テストスイート抽出モジュール１２６は、状態がいずれかの未訪問の遷移（unvisited  transition）を有するかどうかを決定する。そのようないずれかの未訪問の遷移について、ルートからその状態へのパス（経路）を構築し、そのパスに遷移を追加してもよい。さらに、テストスイート抽出モジュール１２６は、未訪問の遷移がない状態に到達するまで、新たな状態でそのようなプロセスを繰り返すことがある。パスをテストスイート１０８に追加し、いずれかの最適化を保留にする。さらに、他の未訪問の遷移について、元の状態から、未訪問の遷移が存在しなくなるまで処理が繰り返される。さらに、他の状態のそれぞれについて処理が繰り返される。
【００４４】
テストスイート抽出モジュール１２６が、増補されたＧＵＩモジュール１２８のうちモデル増補モジュール１２０によって追加された各部分を含むシーケンスのセットを決定するアルゴリズムに関わらず、テストスイート抽出モジュール１２６は、より効果的なテストスイート１０８を作成するために、そのようなアルゴリズムにおいて固有のオペレーションを実行することがある。一実施形態において、テストスイート抽出モジュール１２６は、テストスイート１０８のコンテンツを、増補されたＧＵＩモジュール１２８から抽出するとき、追加された遷移２１６の評価を遷移２１４に対して優先する可能性がある。別の実施形態において、テストスイート抽出モジュール１２６は、任意の結果として得られる、追加の遷移２１６の少なくとも１つを含まないテストシーケンス又はパスを、切り取るか（crop）、削除、無視、あるいはそうでなくとも除去してもよい。さらなる実施形態において、テストスイート抽出モジュール１２６は、既に存在するか又はより効果的なテストシーケンスが存在する追加の遷移２１６のみを含む、任意の取得されたテストシーケンス又はパスを、削除、無視、あるいはそうでなくとも除去してもよい。さらに別の実施形態において、テストスイート抽出モジュール１２６は、所与のテストシーケンスのうち、該テストシーケンス内の追加された遷移の最後のインスタンスの後の部分を切り取るか、削減するか、トリミングしてもよい。
【００４５】
例えば、テストスイート抽出モジュール１２６は、増補されたＧＵＩモジュール１２８の全ての状態を、ルート状態からの（遷移又はステップの数で測定される）距離に関してソートしてもよい。そのようにソートされるリストにより、テストスイート抽出モジュール１２６は、所与のノードについて、ノードからのその遷移の各々をトラバースするかどうかを決定する。ＧＵＩモデル１０６内に元々存在していた遷移２１４よりも、増補されたＧＵＩモデル１２８の作成の間に追加された遷移２１６に優先度が与えられる。未訪問の遷移がない場合、ノードは対処されたと考えて、次のノードを考慮する。未訪問の遷移がある場合、問題となっているノードを得るステップが決定され、トラバースされるようにマークされる。問題となっているノードについて、その問題となっているノードで始まる新たなテストパスが計算される。以下で説明されるものなど、任意の適切な新たなテストパスの決定方法を用いてもよい。ノードから始まる新たなテストパスが決定されると、そのノードを得るのに必要なパスに追加される。組み合されたパスを、テストスイート抽出モジュール１２６によって評価して、そのパスが、増補されたＧＵＩモデル１２８の作成の間に追加された任意の遷移２１６を含むかどうかを判断する。さらに、テストスイート抽出モデル１２６は、組み合されたパスが、別のテストシーケンスによってより良い手法ではまだカバーされていない、いずれかの遷移２１６を含むと決定する可能性がある。組み合されたパスが、いずれの遷移２１６も含まない場合、又は組み合されたパスが、別のテストシーケンスによってカバーされていた場合、このパスは、テストスイート抽出モジュール１２６によって破棄されることがある。あるいは、テストスイート抽出モジュール１２６は、組み合されたパスをテストスイート１０８に追加してもよい。
【００４６】
所与のノードからの新たなテストパスを決定するために、テストスイート抽出モジュール１２６は、任意の適切なアルゴリズム又は技術を使用してもよい。例えばテストスイート抽出モジュール１２６は、所与のノードで開始し、該所与のノードが未訪問の遷移を有するかどうか判断することがある。遷移２１６を、遷移２１４に対して優先させてもよい。そのような場合、未訪問の遷移をとって、テストパスに追加してもよい。遷移は、訪問済みとしてマークされて、新たな宛先ノードが訪問される。処理は、未訪問のエッジが存在しないノードに到達するまで、テストスイート抽出モジュール１２６によって繰り返される。
【００４７】
図３は、テストスイート抽出のための例示的な方法３００の図である。方法３００は、完全に又は部分的にテストスイート抽出モジュール１２６によって実行される、増補されたＧＵＩモデル１２８からのテストスイート１０８を決定するオペレーションを反映している。
【００４８】
３０５において、増補されたＧＵＩモデル１２８などの増補されたＧＵＩの頂点、ノード又は状態を、ルート又はソース頂点からの距離が増加する順序でソートしてもよい。頂点のソートされる順序を、例えば「ソートされたリスト（Ｓｏｒｔｅｄ−ｌｉｓｔ）」に格納してもよい。さらに、モデル内のエッジ又は遷移の完全なセットが決定されることもある。ＧＵＩモデルに元々存在していた遷移が、ＧＵＩモデルの増補の間に追加された遷移と区別される可能性がある。
【００４９】
３１０において、「ソートされたリスト」が空かどうかを判断する。「ソートされたリスト」が空の場合、方法３００は３７５に進む。「ソートされたリスト」が空でない場合、３１５において、「ソートされたリスト」のトップにある要素をノードとして指定する。３２０において、ノードがいずれかの未訪問の外向きのエッジ（ｏｕｔｇｏｉｎｇ  ｅｄｇｅ）を含むかどうかを判断する。ノードが未訪問の外向きのエッジを含まない場合、方法３００は３７０に進む。ノードが未訪問の外向きのエッジを含む場合、３２５において、未訪問の外向きのエッジが選択される。選択されたエッジは「新たなエッジ」として指定される。エッジの選択は、エッジが元々ＧＵＩモデル内であったか、あるいはそのエッジがＧＵＩモデルの増補の間に追加されたものかに応じて実行される。ＧＵＩモデルの増補の間に追加されたエッジは、元々存在していたエッジよりも優先される。
【００５０】
３３０において、増補されたＧＵＩモデルのソース頂点又はルート頂点から「ノード」へのパスが、「プレフィックス」として決定されることがある。３３５において、「プレフィックス」の全てのエッジを訪問済みとしてマークしてもよい。
【００５１】
３４０において、ノードから発生する新たなテストパスが決定されることがある。そのようなパスを決定する任意の適切な方法又は手法を用いてもよい。例えば図４に図示されるような方法４００を、そのような決定に用いてもよい。結果として得られる新たなテストパスが、「サフィックス」として指定されることがある。
【００５２】
３４５において、「プレフィックス」と「サフィックス」を連結することによって新たな「テストケース」を作成してもよい。３５０において、「サフィックス」内の全てのエッジが、訪問済みとしてマークしてもよい。
【００５３】
３５５において、「テストケース」を保持すべきかどうかを判断する。一実施形態において、「テストケース」は、ＧＵＩモデルの増補の間に作成されたエッジ又は遷移を含む場合に保持される。さらに、「テストケース」は、別のテストケース内にまだないエッジ又は遷移を含む場合に保持される。加えて、「テストケース」は、該テストケースが、別のテストケースにあるエッジ又は遷移を含むが、そのような「テストケース」がエッジ又は遷移のより効果的な表現である場合に保持される。「テストケース」が３５５において保持されない場合、次いで３６５において、「テストケース」は、破棄又は削除されるか、あるいはそうでなくても使用されない。方法３００は３１０に進む。
【００５４】
３５５において「テストケース」を保持すべき場合、次いで３６０において、「テストケース」は、ＧＵＩモデルに対する増補に関連付けられた最後の要素の後、切り取られる。例えば「テストケース」が複数の要素をトラバースする場合、「テストケース」のうち、増補に関連付けられたそのような最後の要素の後のリマインダ部分が削除される。３６２において、「テストケース」が、テストスイート１０８など、結果となるテストスイートに追加される。方法３００は３１０に進む。
【００５５】
３７０において、「ノード」が「ソートされたリスト」から削除され、これにより、別のノードが「ソートされたリスト」のトップになり、分析に利用可能となる。
【００５６】
３７５において、結果として得られたテストスイートが報告される。そのようなテストスイートには、テストスイート１０８が含まれ、分析モジュール１０２の出力として提供される。
【００５７】
図４は、ノードを所与として新たなテストパスを決定するための方法４００の例示的な実施形態を示す。方法４００は、図３に関連する３４０の全体又は一部を実装する可能性がある。
【００５８】
４０５において、増補されたＧＵＩモデル、並びに増補されたＧＵＩモデルに関連付けられるエッジ又は遷移のセットが決定される。さらに、そのようなエッジのいずれが既に訪問されたかを決定する可能性もある。
【００５９】
４１０において、増補されたＧＵＩモデルの開始頂点又は状態を決定し、「ノード」として指定してもよい。４１５において、「ノード」の値を、「現在のノード」などのプレースホルダに割り当ててもよい。
【００６０】
４２０において、「現在のノード」がいずれかの未訪問の外向きのエッジ又は遷移を有するかどうかを判断することが可能である。「現在のノード」がいずれの未訪問の外向きのエッジ又は遷移を有さない場合、方法４００は４５５に進む。「現在のノード」がいずれかの未訪問の外向きのエッジ又は遷移を有する場合、４２５において、いずれかのそのような未訪問の外向きのエッジが、ＧＵＩモデルの増補の間に追加されたエッジを含むかどうかを判断することが可能である。いずれかの未訪問の外向きのエッジが、ＧＵＩモデルの増補の間に追加されたエッジを含む場合、４３０において、ＧＵＩモデルの増補の間に追加された未訪問のエッジを「新たなエッジ」として選択し、指定してもよい。ＧＵＩモデルの増補の間に追加されたエッジを含まない場合、４３５において、まだ訪問されていないエッジを、「新たなエッジ」として選択し、指定してもよい。
【００６１】
４４０において、「テストパス」が既に存在している場合、「新たなエッジ」が「テストパス」に追加してもよい。「テストパス」が存在していない場合はテストパスが作成される。４４５において、「新たなエッジ」によって表されるエッジを、訪問済みとしてマークしてもよい。４５０において、「現在のエッジ」から「新たなエッジ」までたどることによって表される宛先の頂点を、新たな「現在のノード」として決定し、指定してよい。方法４００は４２０に進む。
【００６２】
４５５において、結果として得られた「テストパス」を返してよい。
【００６３】
図５は、アプリケーションについての自動的な特徴駆動型のテスト及び品質チェックのための方法５００の例示的な実施形態の図である。
【００６４】
５０５において、テストされるアプリケーションのＧＵＩモデルが決定される。そのようなＧＵＩモデルを構築し、生成し、あるいはそうでなくとも取得する可能性がある。ＧＵＩモデルはアプリケーション固有の挙動を含む。
【００６５】
５１０において、アプリケーション独立の挙動を決定することがある。そのようなアプリケーション独立の挙動は、５０５のアプリケーションだけでなく、プラットフォームに関して他のアプリケーションに適用可能である。アプリケーション独立の挙動は、５０５のアプリケーションとの関係でテストする必要がある。
【００６６】
５１５において、ＧＵＩモデルが、５１０において決定された挙動により増補されることがある。結果として得られる増補されたＧＵＩモデルは、ＧＵＩモデルの元のコンテンツに加え、１つ又は複数の追加の遷移を含んでもよい。
【００６７】
５２０において、テストケースが、増補されたＧＵＩモデルから抽出されることがある。そのようなテストケースは、増補されたＧＵＩモデルを得るのにＧＵＩモデルに追加された遷移のカバレッジを優先することによって、抽出されることがあきる。そのような遷移は、ＧＵＩモデル内に元々存在していた遷移に対して優先される可能性がある。
【００６８】
５２５において、テストケースのうちのいずれかが、ＧＵＩモデルの増補の間に追加された遷移を含むかどうかを決定することがある。そのようなテストケースは、５１０において決定されたアプリケーション独立の特徴に対して適用可能でない。テストケースのうちのいずれかが、ＧＵＩモデルの増補の間に追加された遷移を含む場合、５３０において、上記適用可能でないテストケースが除去される。テストケースのいずれも、ＧＵＩモデルの増補の間に追加された遷移を含まない場合、方法５００は５３５に進む。
【００６９】
５３５において、結果として得られたテストケースがテスタに提供され、該テスタは、アプリケーションが詳細な要件を実行することを検証する可能性がある。テスタは、５４０において、評価される結果を得ることがある。
【００７０】
図３〜５は、例示の方法３００、４００、５００に関して行われる特定の数のステップを開示しているが、方法３００、４００、５００を図３〜５で示されるものよりも多くの、又は少ないステップで実行してもよい。加えて、図３〜５は、例示の方法３００、４００、５００に関して行われる特定の順序のステップを開示しているが、方法３００、４００、５００のステップは任意の適切な順序で達成されることもある。さらに、方法３００、４００、５００の様々なステップが相互に並行して実施されることもある。
【００７１】
方法３００、４００、５００は、図１、２のシステム、又は任意の他のシステム、ネットワーク若しくは方法３００、４００、５００を実装するように動作可能なデバイスを用いて実装されてもよい。特定の実施形態において、方法３００、４００、５００が部分的に又は全体的に、コンピュータ読取可能媒体で具現化されるソフトウェアで実装されることがある。本開示の目的のために、コンピュータ取り可能媒体は、ある期間の間データ及び／又は命令を保持することが可能な任意の手段又はそのような手段の集約を含んでもよい。コンピュータ読取可能媒体は、限定ではなく、直接アクセス記憶デバイス(例えばハードディスクドライブ又はフロッピー（登録商標）ディスク)、順次アクセス記憶デバイス（例えばテープディスクドライブ）、コンパクトディスク、ＣＤ−ＲＯＭ、ＤＶＤ、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、電子的消去可能プログラマブル読取専用メモリ（ＥＥＰＲＯＭ）及び／又はフラッシュメモリなどの記憶媒体と；有線、光ファイバ、及び他の有形の非一時的な媒体などの通信媒体と；及び／又はこれらの任意の組み合わせを含むことがある。
【００７２】
上記の全ての例及び条件的な記載は、本発明及び技術分野を拡大するために発明者によって寄与された概念を読み手が理解するのを助けるための教示の対象であることが意図されており、そのように具体的に記載された例示及び条件に限定するものではなく、また本明細書においてそのような例示を編成することは、本発明の優位性と劣等性を示すものではないものと解釈されるべきである。本発明の諸実施形態を詳細に説明してきたが、本発明の精神及び範囲から逸脱することなく、様々な変更、置換及び代替を行うことが可能であることを理解されたい。
【図１】
2014191830.tif 000003
【図２】
2014191830.tif 000004
【図３】
2014191830.tif 000005
【図４】
2014191830.tif 000006
【図５】
2014191830.tif 000007