(57)【要約】      （修正有）【課題】ＧＵＩアプリケーションのＧＵＩ及びタッチスクリーンインターフェイスは、ＧＵＩアプリケーションの振る舞いを評価する方法を提供する。【解決手段】グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションを決定性有限状態マシンとしてモデル化する方法は、ダミーエラー状態及びダミーエラー出力を有限状態マシン内において生成しつつ、グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションの画面上において使用不可能なアクションに対する応答を、有限状態マシン内のダミーエラー状態への遷移としてモデル化する。【選択図】図１
2015056180.tif 000002
【特許請求の範囲】
【請求項１】
グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションを有限状態マシンとしてモデル化する方法であって、
有限状態マシン内においてダミーエラー状態及びダミーエラー出力を生成し、
前記有限状態マシン内において前記ダミーエラー出力を生成しつつ、グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションの画面上において使用不可能なアクションに対する応答を、前記有限状態マシン内の前記ダミーエラー状態への遷移としてモデル化することを含む方法。
【請求項２】
前記画面上のアクションを前記有限状態マシン内の入力としてモデル化し、
前記画面上において実行された前記アクションに応答して、前記ＧＵＩに基づいたアプリケーションによって生成される後続の画面を前記有限状態マシン内の出力としてモデル化することをさらに含む、請求項１に記載の方法。
【請求項３】
前記画面は、コレクションフィールドを含み、
前記コレクションフィールドが空であるときに、前記コレクションフィールドが前記有限状態マシン内の第１出力と関連付けられ、且つ、前記コレクションフィールドが入力されているときに、前記コレクションフィールドが前記有限状態マシン内の第２出力と関連付けられるように、前記有限状態マシン内において前記画面をモデル化することをさらに含む、請求項１に記載の方法。
【請求項４】
前記ＧＵＩに基づいたアプリケーションのスタックを、有限数の構成を含む有限スタックとしてモデル化し、
異なる構成を識別するために前記有限状態マシン内の入出力シーケンスを使用して、前記構成のそれぞれを前記有限状態マシン内の状態の一部分としてモデル化することをさらに含む、請求項１に記載の方法。
【請求項５】
前記ＧＵＩに基づいたアプリケーションは、第１初期状態と、第２初期状態とを含み、
前記有限状態マシン内において、前記有限状態マシンのダミー初期状態から第１初期状態への遷移を、前記ダミー初期状態に対して実行された第１ダミーアクションに対する第１応答としてモデル化し、
前記有限状態マシン内において、前記有限状態マシンの前記ダミー初期状態から第２初期状態への遷移を、前記ダミー初期状態に対して実行された第２ダミーアクションに対する第２応答としてモデル化することをさらに含む、請求項１に記載の方法。
【請求項６】
グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションの決定性有限状態モデルを生成する方法であって、
グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションのクローリングを実行し、前記ＧＵＩに基づいたアプリケーションの入出力シーケンスを判定し、
前記クローリングにおいて判定された前記ＧＵＩに基づいたアプリケーションの前記入出力シーケンスに基づいてＬ＊アルゴリズムの観察テーブルを生成し、
前記観察テーブルを使用して、前記ＧＵＩに基づいたアプリケーションに対して前記Ｌ＊アルゴリズムを実行し、
前記Ｌ＊アルゴリズムの出力に基づいて前記ＧＵＩに基づいたアプリケーションの決定性有限状態マシンモデルを生成することを含む方法。
【請求項７】
前記Ｌ＊アルゴリズムによって出力された問合せに応答して前記ＧＵＩに基づいたアプリケーションの制御されたクローリングを実行し、前記制御されたクローリングは、前記ＧＵＩに基づいたアプリケーションの追加の入出力シーケンスの組を判定するよう構成され、
前記追加の入出力シーケンスの組に基づいて前記観察テーブルを変更し、
前記変更された観察テーブルを使用して、前記ＧＵＩに基づいたアプリケーションに対して前記Ｌ＊アルゴリズムを実行することをさらに含む、請求項６に記載の方法。
【請求項８】
前記追加の入出力シーケンスの組は、前記問合せに対する回答と、前記問合せに関係付けられていない入出力シーケンスとを含む、請求項７に記載の方法。
【請求項９】
閉じられておらず、且つ、一貫性を有していない前記観察テーブルに基づいて前記問合せを生成することをさらに含む、請求項７に記載の方法。
【請求項１０】
前記決定性有限状態マシンモデルが前記ＧＵＩに基づいたアプリケーションを十分にモデル化しているか否かを判定することをさらに含む、請求項６に記載の方法。
【請求項１１】
前記決定性有限状態マシンモデルが前記ＧＵＩに基づいたアプリケーションを十分にモデル化していないときに、反例を生成し、
前記反例に基づいて前記観察テーブルを変更し、
前記変更された観察テーブルを使用して、前記ＧＵＩに基づいたアプリケーションに対して前記Ｌ＊アルゴリズムを実行することをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記ＧＵＩに基づいたアプリケーションの画面上において使用不可能な入力アクションに対する応答をエラー出力としてモデル化し、
前記使用不可能な入力アクションと、結果として得られるエラー出力とに基づいて、前記観察テーブルを生成することをさらに含む、請求項６に記載の方法。
【請求項１３】
グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションを有限状態マシンとしてモデル化するための動作をシステムに実行させるコンピュータ命令を実行するように構成された処理装置であって、
前記動作は、
有限状態マシン内においてダミーエラー状態及びダミーエラー出力を生成し、
前記有限状態マシン内において前記ダミーエラー出力を生成しつつ、グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションの画面上において使用不可能なアクションに対する応答を、前記有限状態マシン内の前記ダミーエラー状態への遷移としてモデル化することを含む、処理装置。
【請求項１４】
前記動作は、
前記画面上のアクションを前記有限状態マシン内の入力としてモデル化し、
前記画面上において実行された前記アクションに応答して、前記ＧＵＩに基づいたアプリケーションによって生成された後続の画面を前記有限状態マシン内の出力としてモデル化することをさらに含む、請求項１３に記載の処理装置。
【請求項１５】
前記画面は、コレクションフィールドを含み、
前記動作は、前記コレクションフィールドが空であるときに、前記コレクションフィールドが前記有限状態マシン内の第１出力と関連付けられ、且つ、前記コレクションフィールドが入力されているときに、前記コレクションフィールドが前記有限状態マシン内の第２出力と関連付けられるように、前記有限状態マシン内において前記画面をモデル化することをさらに含む、請求項１３に記載の処理装置。
【請求項１６】
前記動作は、
前記ＧＵＩに基づいたアプリケーションのスタックを、有限数の構成を含む有限スタックとしてモデル化し、
異なる構成を識別するために前記有限状態マシン内の入出力シーケンスを使用して、前記構成のそれぞれを前記有限状態マシン内の状態の一部分としてモデル化することをさらに含む、請求項１３に記載の処理装置。
【請求項１７】
グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションの決定性有限状態モデルを生成するための動作をシステムに実行させるコンピュータ命令を実行するように構成された処理装置であって、
前記動作は、
グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションのクローリングを実行し、前記ＧＵＩに基づいたアプリケーションの入出力シーケンスを判定し、
前記ＧＵＩに基づいたアプリケーションの画面上において使用不可能なアクションに対する応答をダミー入出力応答としてモデル化し、前記ダミー入出力応答は、ダミーエラー状態への遷移を含み、且つ、ダミーエラー出力を生成し、
前記ダミー入出力応答に基づいて、且つ、前記クローリングにおいて判定された前記ＧＵＩに基づいたアプリケーションの前記入出力シーケンスに基づいて、Ｌ＊アルゴリズムの観察テーブルを生成し、
前記観察テーブルを使用して、前記ＧＵＩに基づいたアプリケーションに対して前記Ｌ＊アルゴリズムを実行し、
前記Ｌ＊アルゴリズムの出力に基づいて前記ＧＵＩに基づいたアプリケーションの決定性有限状態マシンモデルを生成し、前記決定性有限状態マシンモデルは、ダミーエラー状態を含み、且つ、前記ＧＵＩに基づいたアプリケーションの前記画面上において使用不可能な前記アクションに対する前記応答を、前記ダミーエラー状態への遷移としてモデル化し、且つ、前記ダミーエラー出力を生成することを含む、処理装置。
【請求項１８】
前記動作は、
前記Ｌ＊アルゴリズムによって出力された問合せに応答して前記ＧＵＩに基づいたアプリケーションの制御されたクローリングを実行し、前記制御されたクローリングは、前記ＧＵＩに基づいたアプリケーションの追加の入出力シーケンスの組を判定するように構成され、
前記追加の入出力シーケンスの組に基づいて前記観察テーブルを変更し、
前記変更された観察テーブルを使用して、前記ＧＵＩに基づいたアプリケーションに対して前記Ｌ＊アルゴリズムを実行することをさらに含む、請求項１７に記載の処理装置。
【請求項１９】
前記追加の入出力シーケンスの組は、前記問合せに対する回答と、前記問合せと関係付けられていない入出力シーケンスとを含む、請求項１８に記載の処理装置。
【請求項２０】
前記動作は、閉じられておらず、且つ、一貫性を有していない前記観察テーブルに基づいて前記問合せを生成することをさらに含む、請求項１８に記載の処理装置。
【請求項２１】
前記動作は、前記決定性有限状態マシンモデルが前記ＧＵＩに基づいたアプリケーションを十分にモデル化しているか否かを判定することをさらに含む、請求項１７に記載に処理装置。
【請求項２２】
前記動作は、
前記決定性有限状態マシンモデルが前記ＧＵＩに基づいたアプリケーションを十分にモデル化していないときに、反例を生成し、
前記反例に基づいて前記観察テーブルを変更し、
前記変更された観察テーブルを使用して、前記ＧＵＩに基づいたアプリケーションに対して前記Ｌ＊アルゴリズムを実行することをさらに含む、請求項２１に記載の処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記述されている実施形態は、グラフィカルユーザーインターフェイス（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ：ＧＵＩ）に基づいたアプリケーションの決定性有限状態マシン（Ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｆｉｎｉｔｅ−Ｓｔａｔｅ  Ｍａｃｈｉｎｅ：ＤＦＳＭ）モデルの抽出に関する。
【背景技術】
【０００２】
モバイル装置用のモバイルアプリケーションなどの電子装置用のグラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションが、益々、一般的になっている。多くのＧＵＩアプリケーションは、ＧＵＩアプリケーションの使用を容易にしうるタッチスクリーンを介してグラフィカルユーザーインターフェイス上において実行されたアクションに基づいて動作を実行する。しかしながら、ＧＵＩアプリケーションのＧＵＩ及びタッチスクリーンインターフェイスは、ＧＵＩアプリケーションの振る舞いを評価する際に、課題をも提起している。
【０００３】
本明細書において権利請求されている主題は、何らかの欠点を解決する又は上述のものなどの環境においてのみ動作する実施形態に限定されるものではない。むしろ、この背景説明は、本明細書に記述されているいくつかの実施形態を実施しうる例示用の一技術分野を示すために提供されるものに過ぎない。
【発明の概要】
【課題を解決するための手段】
【０００４】
一実施形態による一態様によれば、グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションを決定性有限状態マシンとしてモデル化する方法は、ダミーエラー状態及びダミーエラー出力を有限状態マシン内において生成することを含んでもよい。その方法は、ダミーエラー出力を有限状態マシン内において生成しつつ、グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーションの画面上において使用不可能なアクションに対する応答を有限状態マシン内のダミーエラー状態への遷移としてモデル化することをさらに含んでもよい。
【０００５】
実施形態の目的及び利点については、少なくとも請求項において具体的に指摘されている要素、特徴、及び組合せにより、理解され、且つ、実現される。
【０００６】
上述の一般的な説明及び以下の詳細な説明は、そのいずれもが、例示及び説明を目的としたものであり、且つ、権利請求されている本発明の限定を目的としたものではないことを理解されたい。
【０００７】
添付図面を使用して、例示用の実施形態についてさらに具体的且つ詳細に記述及び説明する。
【図面の簡単な説明】
【０００８】
【図１】ＧＵＩアプリケーションの決定性有限状態マシン（ＤＦＳＭ）モデルを生成する例示用のシステムを示す。
【図２Ａ】ＧＵＩアプリケーションの例示用のビュー及び画面を示す。
【図２Ｂ】図２ＡのＧＵＩアプリケーションと関連する状態の間における例示用の遷移を示す。
【図２Ｃ】図２ＡのＧＵＩアプリケーション用に生成されうる例示用のＤＦＳＭである。
【図３】ＧＵＩアプリケーションのＤＦＳＭモデルを生成する例示用の方法のフローチャートである。
【図４】ＧＵＩアプリケーションをクローリングする例示用の方法のフローチャートである。
【図５】推測モデルが、関連するＧＵＩアプリケーションを十分にモデル化しているか否かを判定する例示用の方法のフローチャートである。
【図６】ＧＵＩアプリケーションをモデル化する例示用の方法のフローチャートである。
【発明を実施するための形態】
【０００９】
さらに詳細に後述するように、本開示のいくつかの実施形態は、グラフィカルユーザーインターフェイス（ＧＵＩ）に基づいたアプリケーション（以下、「ＧＵＩアプリケーション」と呼ぶ）のミーリー型順序回路モデル（Ｍｅａｌｙ  Ｍａｃｈｉｎｅ  ｍｏｄｅｌ）などの決定性有限状態マシンモデル（ｄｅｔｅｒｍｉｎｉｓｔｉｃ  ｆｉｎｉｔｅ−ｓｔａｔｅ  ｍａｃｈｉｎｅ  ｍｏｄｅｌ）（以下、「ＤＦＳＭモデル」と呼ぶ）を生成する分析モジュールを含んでもよい。ＤＦＳＭモデルは、ＧＵＩアプリケーションの振る舞いを示すことができる。いくつかの実施形態においては、ＤＦＳＭモデルは、ＧＵＩアプリケーションの開発及びテストにおいて使用されてもよい。このような例においては、ＤＦＳＭモデルを使用し、ＧＵＩアプリケーションの開発者によって予想又は所望されている機能及び特徴をＧＵＩアプリケーションが含んでいるか否かを判定してもよい。これにより、ＤＦＳＭモデルを使用して、所望通りに機能しておらず、且つ、ＧＵＩアプリケーションが所望通りに機能するように相応して変更されうるＧＵＩアプリケーションの１つ又は複数の特徴を識別してもよい。したがって、ＤＦＳＭモデルに基づいてＧＵＩアプリケーションの設計を変更し、ＧＵＩアプリケーションのモデル駆動型の開発（Ｍｏｄｅｌ−Ｄｒｉｖｅｎ  Ｄｅｖｅｌｏｐｍｅｎｔ：ＭＤＤ）及びモデルに基づいたテスト（Ｍｏｄｅｌ−Ｂａｓｅｄ  Ｔｅｓｔｉｎｇ：ＭＢＴ）を支援してもよい。
【００１０】
添付図面を参照し、本開示の実施形態について説明する。
【００１１】
図１は、本開示の少なくとも１つの実施形態に従って構成されたＧＵＩアプリケーション１０２のＤＦＳＭモデルを生成する例示用のシステム１００を示している。
【００１２】
ＧＵＩアプリケーション１０２は、電子装置上に含まれうる任意の適切なＧＵＩアプリケーションであってもよい。電子装置は、限定を伴うことなしに、タブレットコンピュータ、スマートフォン、ナビゲーションシステム、エンターテインメントシステム、デスクトップコンピュータ、ラップトップコンピュータ、デジタル音楽プレーヤーなどを含んでもよい。
【００１３】
ＧＵＩアプリケーション１０２は、ＧＵＩアプリケーション１０２の個別のビュー（以下、「ビュー」と呼ぶ）とそれぞれが関連付けられた１つ又は複数の別個のＧＵＩコンポーネントを含んでもよい。このビューは、互いに排他的な方式で実行されてもよく、且つ、ＧＵＩアプリケーション１０２によって実行される動作のうちの少なくともいくつかとそれぞれが関連付けられてもよい。ＧＵＩアプリケーションのビューの例が添付の図２Ａに示されている。
【００１４】
ＧＵＩアプリケーション１０２のそれぞれのビューは、１つ又は複数の別個の画面と関連付けられてもよい。この場合に、それぞれの画面は、画面上の１つ又は複数のユーザーアクションに対するＧＵＩアプリケーション１０２の応答を表すのみならず、ＧＵＩアプリケーション１０２の動作の少なくとも一部分をサポートしてもよい。ＧＵＩアプリケーション１０２の動作の少なくとも一部分をサポートするために、それぞれの画面は、１つ又は複数のウィジェットを含んでもよい。それぞれのウィジェットは、ウィジェットに対してユーザーによって実行される１つ又は複数のアクションに基づいてＧＵＩアプリケーション１０２の動作のうちの１つ又は複数の動作を実行するように構成されてもよい。例えば、ウィジェットは、ＧＵＩアプリケーション１０２のＧＵＩ上のボタンとして表示されてもよく、且つ、モバイル装置のタッチスクリーンを介したウィジェットのタップに基づいて第１動作を実行するように構成されてもよい。同一のウィジェットが、タッチスクリーンを介してウィジェット上において実行されたタッチ長押し（ｌｏｎｇ  ｔａｐ）又はその他のアクションに基づいて第２動作を実行するように構成されてもよい。さらには、いくつかの例においては、画面全体が、ウィジェットとして構成されてもよい。例えば、画面のスワイプにより、ＧＵＩアプリケーション１０２を別の画面に遷移させてもよい。ＧＵＩアプリケーションのビューの例示用の画面も、添付の図２Ａに示されている。
【００１５】
それぞれの画面は、ＧＵＩアプリケーション１０２の１つ又は複数の状態とさらに関連付けられてもよい。いくつかの実施形態においては、画面と関連するＧＵＩアプリケーション１０２の状態は、画面と関連する１つ又は複数のウィジェットの状態に基づいたものであってもよい。ウィジェットの状態は、ウィジェットを表す１つ又は複数の属性の値によって表現されてもよい。例えば、ウィジェットの異なる状態は、ウィジェットが有効化されているか又は無効化されているか、可視状態にあるか又は非可視状態にあるか、不透明であるか又はそうでないかなどに基づいたものであってもよい。したがって、ＧＵＩアプリケーション１０２は、画面と関連付けられうるウィジェットの状態の数に基づいて特定の画面と関連する複数の状態を含んでもよい。
【００１６】
また、画面と関連するＧＵＩアプリケーション１０２の状態は、画面に到達する前に到達した以前の状態又は画面に基づいたものであってもよい。例えば、特定の画面に、第１の以前の画面及び第２の以前の画面から到達する場合がある。したがって、ＧＵＩアプリケーション１０２は、第１の以前の画面から特定の画面への到達に関係付けられた特定の画面と関連する状態を含んでもよく、且つ、第２の以前の画面から特定の画面への到達に関係付けられた特定の画面と関連する別の状態を含んでもよい。さらに詳細に後述するように、ＧＵＩアプリケーション１０２の画面上において実行されるアクションの出力をＧＵＩアプリケーション１０２の異なる状態と関連付けてもよい。
【００１７】
上述のように、図２Ａは、本明細書に記述されている少なくともいくつかの実施形態に従って構成された請求書のチップを判定するように構成されたチップＧＵＩアプリケーション２０２（以下、「チップアプリケーション２０２」と呼ぶ）の例示用のビュー及び画面を示している。チップアプリケーション２０２は、請求書入力ビュー２０４を含んでもよい。請求書入力ビュー２０４は、請求書の金額の入力と関連付けられてもよい。チップアプリケーション２０２の設定ビュー２０６は、チップアプリケーション２０２の設定の変更と関連付けられてもよい。また、チップアプリケーション２０２は、チップ合計ビュー２０８を含んでもよい。チップ合計ビュー２０８は、チップの金額の表示と関連付けられてもよい。
【００１８】
また、チップアプリケーション２０２は、ビュー２０４、２０６、及び２０８と関連付けられうる画面を含んでもよい。例えば、チップアプリケーション２０２は、請求書入力ビュー２０４と関連付けられうる請求書入力画面２１０、設定ビュー２０６と関連付けられうる設定画面２１２、及び、チップ合計ビュー２０８と関連付けられうるチップ合計画面２１４を含んでもよい。
【００１９】
図示の実施形態においては、請求書入力画面２１０は、請求書入力画面２１０上において実行されうる動作及び／又はコマンドと関連する１つ又は複数のウィジェットを含んでもよい。例えば、請求書入力画面２１０は、ユーザーが請求書金額を入力できるように構成された入力ウィジェット２１６を含んでもよい。また、請求書入力画面２１０は、ユーザーが、関連する「計算」ボタンをタップしたときに、ＧＵＩアプリケーション２０２がチップ合計画面２１４及びチップ合計ビュー２０８に遷移するように構成された計算ウィジェット２１８を含んでもよい。請求書入力画面２１０は、ユーザーが、関連する「設定」ボタンをタップしたときに、チップアプリケーション２０２が設定画面２１２及び設定ビュー２０６に遷移するように構成された設定ウィジェット２２０をさらに含んでもよい。
【００２０】
また、チップ合計画面２１４も、チップ合計画面２１４上において実行されうる動作及び／又はコマンドと関連付けられうるウィジェットを含んでもよい。図示の実施形態においては、チップ合計画面２１４は、ユーザーが、関連する「設定」ボタンをタップしたときに、チップアプリケーション２０２がチップ合計画面２１４及びチップ合計ビュー２０８から設定画面２１２及び設定ビュー２０６に遷移するように構成された請求書入力画面２１０の設定ウィジェット２２０と同様に設定ウィジェット２２２を含んでもよい。また、チップ合計画面２１４は、関連する「戻る」ボタンがタップされたときに、現在の画面に到達するために「戻る」以外のアクションが実行された以前の画面にチップアプリケーション２０２が遷移してもよいように構成された戻るウィジェット２２４を含んでもよい。例えば、図示の実施形態においては、チップ合計画面２１４には、請求書入力画面２１０内の計算ウィジェット２１８と関連する「計算」ボタンをタップすることにより、到達してもよい。したがって、戻るウィジェット２２４と関連する「戻る」ボタンをタップすることにより、チップアプリケーション２０２が請求書入力画面２１０に戻るようにしてもよい。
【００２１】
また、設定画面２１２は、設定画面２１２上において実行されうる動作及び／又はコマンドと関連付けられうるウィジェットを含んでもよい。例えば、図示の実施形態においては、設定画面２１２は、ユーザーがボックスをタップすることに応答して、関連するボックスの「チェック」状態を切り替えるように構成されうる税率ウィジェット２２６を含んでもよい。ボックスがチェックされたときには、算出されたチップから税率を除外することが可能であり、且つ、ボックスのチェックが外されたときには、算出されたチップに税率を含めることができる。
【００２２】
また、設定画面２１２は、戻るウィジェット２２４と同様に戻るウィジェット２２８を含んでもよい。この戻るウィジェット２２８は、関連する「戻る」ボタンがタップされたときに、現在の画面に到達するために「戻る」以外のアクションが実行された以前の画面にチップアプリケーション２０２が遷移できるように構成されている。例えば、図示の実施形態においては、設定画面２１２には、請求書入力画面２１０内の設定ウィジェット２２０と関連する「設定」ボタンをタップすることにより、到達してもよい。したがって、請求書入力画面２１０内の設定ウィジェット２２０と関連する「設定」ボタンがタップされたときには、戻るウィジェット２２８と関連する「戻る」ボタンをタップすることにより、チップアプリケーション２０２を請求書入力画面２１０に戻してもよい。さらには、設定画面２１２には、チップ合計画面２１４内の設定ウィジェット２２２と関連する「設定」ボタンをタップすることにより、到達してもよい。したがって、チップ合計画面２１４内の設定ウィジェット２２２と関連する「設定」ボタンがタップされたときには、戻るウィジェット２２８と関連する「戻る」ボタンをタップすることにより、チップアプリケーション２０２をチップ合計画面２１４に戻してもよい。
【００２３】
本開示の範囲を逸脱することなしに、図２Ａに対して変更を加えてもよい。例えば、いくつかの実施形態においては、「戻る」及び／又は「設定」ボタンは、チップアプリケーション２０２をインストールしうる電子装置の一部のボタンであってもよく、且つ、関連する画面上に明示的に表示されなくてもよい。さらには、チップアプリケーション２０２は、任意の数のその他の機能、ビュー、画面、及び／又はウィジェットを含んでもよい。特定の例は、説明を支援するためのものに過ぎず、且つ、本開示を限定するためのものではない。
【００２４】
図１を再度参照すれば、いくつかの例においては、ウィジェットに対して実行される動作は、ＧＵＩアプリケーション１０２の出力を結果的にもたらしてもよい。この場合に、ＧＵＩアプリケーション１０２は、ＧＵＩアプリケーション１０２の１つの状態からＧＵＩアプリケーション１０２の別の状態に遷移してもよい。遷移は、同一の画面及びビューと関連する状態、同一のビューと共に含まれている異なる画面と関連する状態、及び／又は異なるビューに含まれうる異なる画面と関連する状態の間におけるものであってもよい。
【００２５】
図２Ｂは、本開示の少なくとも１つの実施形態による図２Ａのチップアプリケーション２０２と関連する状態の間における例示用の遷移を示している。図示の実施形態においては、チップアプリケーション２０２の請求書入力状態２３０は、請求書入力画面２１０と関連付けられてもよい。チップアプリケーション２０２は、請求書入力画面２１０の計算ウィジェット２１８と関連する「計算」ボタンのタップに応答して、請求書入力状態２３０から、チップ合計画面２１４と関連するチップ合計状態２３２に遷移するように構成されてもよい。また、チップアプリケーション２０２は、請求書入力画面２１０の設定ウィジェット２２０と関連する「設定」ボタンのタップに応答して、請求書入力状態２３０から、設定画面２１２と関連する第１設定状態２３４に遷移するように構成されてもよい。
【００２６】
チップ合計画面２１４と関連するチップ合計状態２３２に関して、チップアプリケーション２０２は、チップ合計画面２１４の戻るウィジェット２２４と関連する「戻る」ボタンのタップに応答して、チップ合計状態２３２から請求書入力状態２３０に遷移するように構成されてもよい。さらには、チップアプリケーション２０２は、チップ合計画面２１４の設定ウィジェット２２２と関連する「設定」ボタンのタップに応答して、チップ合計状態２３２から、設定画面２１２と関連付けられうる第２設定状態２３６に遷移するように構成されてもよい。したがって、チップアプリケーション２０２の第１設定状態２３４及び第２設定状態２３６は、いずれも、設定画面２１２と関連付けられてもよい。その理由は、設定画面２１２には、請求書入力画面２１０及び関連する請求書入力状態２３０とチップ合計画面２１４及び関連するチップ合計状態２３２との両方から到達してもよいからである。
【００２７】
第２設定状態２３６に関して、チップアプリケーション２０２は、設定画面２１２の戻るウィジェット２２８と関連する「戻る」ボタンのタップに応答して、第２設定状態２３６から、チップ合計状態２３２に遷移して戻るように構成されてもよい。その理由は、第２設定状態２３６には、チップ合計画面２１４及び関連するチップ合計状態２３２から到達したからである。第１設定状態２３４に関して、チップアプリケーション２０２は、設定画面２１２の戻るウィジェット２２８と関連する「戻る」ボタンのタップに応答して、第１設定状態２３４から、請求書入力状態２３０に遷移して戻るように構成されてもよい。その理由は、第１設定状態２３４には、請求書入力画面２１０及び関連する請求書入力状態２３０から到達したためでる。
【００２８】
さらには、第１設定状態２３４及び第２設定状態２３６の両方において、税率ウィジェット２２６と関連するボックスのチェック状態とアンチェック状態を切り替えることにより、チップアプリケーション２０２が設定画面２１２において留まるという結果になってもよい。いくつかの実施形態においては、チップアプリケーション２０２は、税率ウィジェット２２６と関連するボックスがチェックされているのか又はアンチェックされているのかとは無関係に、同一の設定状態にあるとみなされてもよい。
【００２９】
図１を再度参照すれば、ＧＵＩアプリケーション１０２は、分析モジュール１０４によって受信されるように構成されてもよく、分析モジュール１０４は、ＧＵＩアプリケーション１０２のＤＦＳＭモデル１０６を生成するように構成されてもよい。いくつかの実施形態においては、分析モジュール１０４は、処理装置（ｐｒｏｃｅｓｓｏｒ）１０８と、メモリ１１０とを含んでもよい。処理装置１０８は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む任意の適切な特殊目的又は汎用のコンピュータであってもよい。
【００３０】
メモリ１１０は、保存されたコンピュータ実行可能命令又はデータ構造を担持又は保持するためのコンピュータ可読媒体を含んでもよい。このようなコンピュータ可読媒体は、汎用又は特殊目的コンピュータによってアクセスされうる任意の使用可能な媒体であってもよい。一例として、且つ、限定を伴うことなしに、このようなコンピュータ可読媒体は、ランダムアクセスメモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、又はその他の光ディスクストレージ、磁気ディスクストレージ、又はその他の磁気ストレージ装置、フラッシュメモリ装置（例えば、ソリッドステートメモリ装置）、或いは、コンピュータ実行可能命令又はデータ構造の形態で望ましいプログラムコードを担持又は保存するように使用されうると共に汎用又は特殊目的コンピュータによってアクセスされうる任意のその他のストレージ媒体を含む有体の又は持続的なコンピュータ可読保存媒体を含んでもよい。また、上述のものの組合せも、コンピュータ可読媒体の範囲に含まれてもよい。コンピュータ実行可能命令は、例えば、処理装置１０８に特定の機能又は機能のグループを実行させる命令及びデータを含んでもよい。
【００３１】
いくつかの実施形態においては、分析モジュール１０４は、ＤＦＳＭモデル１０６をＧＵＩアプリケーション１０２の振る舞いを表すミーリー型順序回路モデルとして生成するように構成されてもよい。例えば、いくつかの実施形態においては、分析モジュール１０４は、ＤＦＳＭモデル１０６として、図２Ｂに関して記述されているチップアプリケーション２０２の振る舞いをモデル化しうる図２Ａ及び図２Ｂのチップアプリケーション２０２のミーリー型順序回路モデルを生成するように構成されてもよい。
【００３２】
いくつかの実施形態においては、分析モジュール１０４は、動的なクローリング（ｃｒａｗｌｉｎｇ）と、Ｌ＊アルゴリズムと呼ばれる既知の能動的学習アルゴリズム又はその異なる変形とを使用して、ＤＦＳＭモデル１０６を生成するように構成されてもよい。一般に、Ｌ＊アルゴリズムは、テスト対象であると共に観察された入出力（Ｉ／Ｏ）シーケンスと一貫性を有するシステムの有限状態モデルがＬ＊アルゴリズムによって生成されうる方式により、テスト対象のシステム（例えば、ＧＵＩアプリケーション１０２）と関連する入出力シーケンスを調査するアルゴリズムである。いくつかの実施形態においては、Ｌ＊アルゴリズムの特定の変形を利用し、システムのミーリー型順序回路モデルを学習してもよく、このモデルの出力値は、現在の状態及び入力値に基づいて判定されてもよい。
【００３３】
通常、Ｌ＊アルゴリズム及び関連するＤＦＳＭモデルは、有限の入力ドメイン及び出力ドメインを有する有限状態システムの振る舞いを判定及びモデル化するのに有用である。しかしながら、ＧＵＩアプリケーション（例えば、ＧＵＩアプリケーション１０２）は、通常、当然のこととして、有限状態型のシステムではない。したがって、分析モジュール１０４は、Ｌ＊アルゴリズムの使用を許容するためにＧＵＩアプリケーション１０２が有限状態システムとして表現されうる方式により、ＧＵＩアプリケーション１０２をモデル化するように構成されてもよい。
【００３４】
いくつかの実施形態においては、分析モジュール１０４は、実際のデータの代わりに入力タイプ及び出力タイプとして入力データ及び出力データをモデル化するための抽象化を実行するように構成されてもよい。このような抽象化は、入力データ及び／又は出力データの無限の可能性が存在しうる例において、有限数の状態を許容することになろう。したがって、抽象化は、ＧＵＩアプリケーション１０２が有限状態システムとして表現されえないときに、ＧＵＩアプリケーション１０２が有限状態システムとして表現されうる方式により、ＧＵＩアプリケーション１０２をモデル化してもよい。
【００３５】
例えば、ＧＵＩアプリケーションの技術的な立場において且つ従来の観点において、ＧＵＩアプリケーション１０２として使用されうる―図２Ａ及び図２Ｂのチップアプリケーション２０２は、請求書入力画面２１０内に無限数の潜在的な入力値を有してもよい。その理由は、任意の数が請求書金額として使用されうるためである。さらには、それぞれの請求書金額は、異なる入力として、且つ、観点によっては、チップアプリケーション２０２の異なる状態に対応するものとして、みなされてもよい。同様に、請求書金額に対する出力であってもよいチップ合計画面２１４上に表示されうるチップ合計は、請求書入力画面２１０上において入力された請求書金額に応じた任意の数であってもよい。したがって、演算されたチップ合計の異なる値を有するそれぞれの画面は、従来は、請求書入力画面２１０上における「計算」アクションの別個の出力として解釈されてもよい。
【００３６】
しかしながら、図２Ｂに関して上述したように、請求書入力画面２１０内において入力された請求書金額とは無関係に、チップアプリケーション２０２は、「計算」ボタンをタップすることに応答して、チップ合計画面２１４を生成してもよい。したがって、請求書入力画面２１０上の請求書合計入力を、数が何であるのかとは無関係に、数である単一の入力タイプとして抽象化してもよい。同様に、チップ合計画面２１４上において出力されるチップ合計金額も、数が何であるのかとは無関係に、数である単一の出力タイプとして抽象化してもよい。
【００３７】
このような抽象化により、請求書金額とは無関係に、同一の状態を請求書入力画面２１０に使用することが可能になり―例えば、請求書入力状態２３０は、請求書入力画面２１０と関連する潜在的に無限数の状態が有限数に低減されうるように、請求書金額とは無関係に、請求書入力画面２１０について使用されてもよい。同様に、このような抽象化により、請求書入力金額及びチップ合計金額とは無関係に、チップ合計画面２１４を、チップの計算の出力として使用することが可能になり―例えば、チップ合計状態２３２は、チップ合計画面２１４と関連する潜在的に無限数の状態が有限数に低減されうるように、チップ合計とは無関係に、チップ合計画面２１４について使用されてもよい。
【００３８】
実行されうる別のタイプの抽象化は、ＧＵＩアプリケーション１０２のコレクションフィールドと関係するものであってもよい。コレクションフィールドは、任意の数の一連の項目を含みうるＧＵＩアプリケーション１０２のフィールドであってもよい。例えば、コレクションフィールドは、項目やトランザクションなどのリストとして構成されてもよい。したがって、ＧＵＩアプリケーションの技術的な立場及び従来の観点において、コレクションフィールドを含むＧＵＩアプリケーション１０２の画面は、潜在的に、コレクションフィールド内に含まれる項目の数に応じて、無限数の状態と関連付けられてもよい。対照的に、本開示のいくつかの実施形態においては、ＧＵＩアプリケーション１０２の特定の画面のコレクションフィールドは、コレクションフィールドが空である際の１つの状態と、コレクションフィールドが空ではない際（入力された（ｐｏｐｕｌａｔｅｄ）状態とも呼ぶ）の別の状態という２つの異なる状態と関連付けられたものにコレクションフィールドを低減する抽象化を使用して、モデル化されてもよい。コレクションフィールドの空の状態は、特定の画面上の第１入力と関連付けられているものとして抽象化されてもよく、且つ、コレクションフィールドの入力された状態は、特定の画面上の第２入力と関連付けられているものとして抽象化されてもよい。この抽象化を使用して、コレクションフィールドを含む特定の画面と関連する潜在的に無限数の状態及び入力を有限数に低減してもよい。
【００３９】
また、Ｌ＊アルゴリズムは、テスト対象のシステム―例えば、ＧＵＩアプリケーション１０２―と関連する全ての動作及びコマンドがテスト対象のシステムの全ての状態において使用可能であろうという仮定に基づいて動作してもよい。しかしながら、これは、ＧＵＩアプリケーションには当てはまらない場合もある。この問題に対処するために、分析モジュール１０４は、特定の状態において使用不可能でありうるアクションがエラー出力を生成しうるエラー状態及びエラー出力として機能しうると共にエラー状態への遷移を結果的にもたらしうるＧＵＩアプリケーション１０２のダミー状態及びダミー出力を生成することにより、Ｌ＊による分析に適したものとなるようにＧＵＩアプリケーションの真の振る舞いを拡張するべく構成されてもよい。したがって、ＧＵＩアプリケーション１０２は、アクションが実際に特定の画面及び状態について使用不可能でありうるときにも、ＧＵＩアプリケーション１０２と関連付けられたアクションの全てが、ＧＵＩアプリケーション１０２の全ての状態において使用可能であるものとして、モデル化されてもよい。
【００４０】
例えば、チップアプリケーション２０２に関して、チップアプリケーション２０２を起動するためにチップアプリケーション２０２と関連付けられたアイコンをタップすること（以下、「Ｉｎｉｔ」と呼ぶ）、「計算」ボタンをタップすること（以下、「Ｃａｌ」と呼ぶ）、「設定」ボタンをタップすること（以下、「Ｓｅｔ」と呼ぶ）、「税率の除外」ボックスをタップすること（以下、「Ｔａｘ」と呼ぶ）、及び「戻る」ボタンをタップすること（以下、「Ｂａｃｋ」と呼ぶ）というアクションが、チップアプリケーション２０２に対して、実行されてもよい。しかしながら、これらのアクションの全てが、全ての画面上において又は全ての状態において使用可能でなくてもよい。例えば、「Ｉｎｉｔ」、「Ｃａｌ」、及び「Ｔａｘ」アクションは、チップ合計画面２１４上において且つチップ合計状態２３２において使用可能でなくてもよい。
【００４１】
チップアプリケーション２０２に対してＬ＊アルゴリズムの使用及びＤＦＳＭモデルの生成を許容するために、特定の状態におけるアクションの使用不可能性に起因して可能でない場合のあるチップアプリケーション２０２内における遷移及びその関連する出力が、ダミーエラー状態及びダミーエラー出力によってキャプチャされうるように、ダミーエラー状態及びダミーエラー出力をチップアプリケーション２０２について生成してもよい。例えば、チップ合計画面２１４上における且つチップ合計状態２３２における使用不可能なアクション「Ｉｎｉｔ」、「Ｃａｌ」、及び「Ｔａｘ」の稼働は、ダミーエラー出力を生成すると共にチップ合計状態２３２からダミーエラー状態への遷移を結果的にもたらす応答を有するものとしてモデル化されてもよい。したがって、使用不可能なアクション「Ｉｎｉｔ」、「Ｃａｌ」、及び「Ｔａｘ」は、実際には、チップ合計画面２１４上において且つチップ合計状態２３２において使用不可能でありうるにも拘らず、チップ合計画面２１４上において且つチップ合計状態２３２において使用可能であるものとしてモデル化されてもよい。
【００４２】
また、Ｌ＊アルゴリズムは、従来、Ｌ＊アルゴリズムが、テスト対象のシステム―例えば、ＧＵＩアプリケーション１０２―と関連する初期状態において始まるように、構成されてもよく―この場合に、初期状態は、毎回、同一の状態であってもよい。しかしながら、いくつかの例においては、ＧＵＩアプリケーション１０２は、複数の初期状態を含んでもよい。したがって、ＧＵＩアプリケーション１０２に対してＬ＊アルゴリズムの使用を許容するために、分析モジュール１０４は、ＧＵＩアプリケーション１０２のダミー初期状態を生成してもよい。分析モジュール１０４は、ダミー初期状態におけるダミー入力アクションに対する応答としてダミー初期状態から実際の初期状態への遷移をモデル化することにより、ＧＵＩアプリケーション１０２を実際の初期状態において始まるものとしてモデル化するように構成されてもよい。
【００４３】
例えば、分析モジュール１０４は、ＧＵＩアプリケーション１０２が第１初期状態及び第２初期状態を含みうるときに、ＧＵＩアプリケーション１０２のダミー初期状態を生成してもよい。分析モジュール１０４は、ダミー初期状態において実行された第１ダミーアクションに基づいてダミー初期状態から第１初期状態への遷移を生成することにより、第１初期状態において始まるＧＵＩアプリケーション１０２をモデル化してもよい。同様に、分析モジュール１０４は、ダミー初期状態において実行された第２ダミーアクションに基づいてダミー初期状態から第２初期状態への遷移を生成することにより、第２初期状態において始まるＧＵＩアプリケーション１０２をモデル化してもよい。
【００４４】
さらには、いくつかの実施形態においては、分析モジュール１０４は、ＧＵＩアプリケーション１０２と関連するスタックを、境界が定められている（ｂｏｕｎｄｅｄ）と共にＧＵＩアプリケーション１０２の異なる状態及び入出力シーケンスとそれぞれが関連付けられうる有限数の構成を有するものとして、取り扱うように構成されてもよい。例えば、図２Ａ及び図２Ｂのチップアプリケーション２０２は、３つの異なる画面と、チップアプリケーション２０２の画面のうちのいずれか１つの画面に到達するための最大で２つのアクションの層と、を有してもよい。したがって、「戻る」アクションと関連するチップアプリケーション２０２のバックスタック（ｂａｃｋ  ｓｔａｃｋ）は、２つのフィールドと、それぞれのフィールドごとに４つの異なる可能性―空、請求書入力画面２１０、設定画面２１２、及びチップ合計画面２１４―と、を有してもよい。したがって、バックスタックは、バックスタックの入力に関する限り、１６個の異なる構成（ｃｏｎｆｉｇｕｒａｔｉｏｎ）を有してもよい。これらの構成は、それぞれ、チップアプリケーション２０２の異なる出力と関連付けられてもよく、且つ、有限の金額であってもよい。対照的に、スタックをモデル化する従来の方法は、プッシュダウンオートマトンを使用しており、これらのプッシュダウンオートマトンは、実際のアプリケーションのスタックに基づいた振る舞いをモデル化するために境界が定められていない（ｕｎｂｏｕｎｄｅｄ）スタックの使用を前提としている。
【００４５】
ＧＵＩアプリケーション１０２がＧＦＳＭモデル１０６としてモデル化されうるように上述したＧＵＩアプリケーション１０２のモデル化に基づいて、分析モジュール１０４は、ＧＵＩアプリケーション１０２を動的にクローリングすると共にＬ＊アルゴリズムを実行することにより、ＤＦＳＭモデル１０６を生成するように、構成されてもよい。いくつかの実施形態においては、分析モジュール１０４は、図３〜図５に関して後述する方法３００、４００、及び５００に従ってＤＦＳＭモデル１０６を生成するように、構成されてもよい。上述のように、ＤＦＳＭモデル１０６を使用してＧＵＩアプリケーション１０２をテストすることにより、予想及び所望通りに稼働するＧＵＩアプリケーション１０２と関連しうるバグ又はその他の問題を見出してもよい。
【００４６】
図２Ｃは、本開示の少なくとも１つの実施形態によるチップアプリケーション２０２について生成されうる例示用のＤＦＳＭモデル２５０（以下、「モデル２５０」と呼ぶ）である。モデル２５０は、上述のダミー初期状態として機能しうる「ｅ」というラベルが付与されたダミー初期状態２５２を含んでもよい。ダミー初期状態は、ＮＵＬＬ又はダミーアクションに対する出力（「ｅ」として表記され、且つ、ダミー初期状態２５２のラベルを形成する）であると表現されてもよい。その理由は、チップアプリケーション２０２内の実際のアクションが、ダミー初期状態への到達を結果的にもたらしえないからである。
【００４７】
モデル２５０は、請求書入力状態２３０及び請求書入力画面２１０と対応しうる初期状態２５４を含んでもよい。図２Ｂに関して上述したように、チップアプリケーション２０２の起動は、請求書入力画面２１０が出力として表示されることを結果的にもたらしてもよい。したがって、モデル２５０は、ダミー初期状態２５２から初期状態２５４への遷移を示しうる遷移エッジ２６４を含んでもよい。図示の実施形態においては、ダミー初期状態２５２から初期状態２５４への遷移は、チップアプリケーション２０２との関係における起動アクション（「Ｉｎｉｔ」として表記される）の実行がチップアプリケーション２０２による請求書入力画面２１０（「Ｂ」として表記される）の表示又は出力を生成しうることを示す「Ｉｎｉｔ／Ｂ」の入出力シーケンスによって表記される。
【００４８】
モデル２５０は、ダミーエラー状態２６２と、ダミー初期状態２５２からダミーエラー状態２６２への遷移を示しうる遷移エッジ２９２とを含んでもよい。図示の実施形態においては、遷移エッジ２９２によって示されているダミー初期状態２５２からダミーエラー状態２６２への遷移は、入出力シーケンス「｛Ｃａｌ，Ｔａｘ，Ｓｅｔ，Ｂａｃｋ｝／Ｘ」によって表記されてもよい。その理由は、「Ｃａｌ」、「Ｔａｘ」、「Ｓｅｔ」、及び「Ｂａｃｋ」は、チップアプリケーション２０２を起動するために使用不可能なアクションでありうるからである。したがって、ダミー初期状態２５２における使用不可能なアクション「Ｃａｌ」、「Ｔａｘ」、「Ｓｅｔ」、及び「Ｂａｃｋ」の実行は、ダミーエラー状態２６２（「Ｓｉｇｍａ」というラベルによっても示されている）への遷移と、ダミー出力「Ｘ」の生成とを結果的にもたらすことになろう。
【００４９】
モデル２５０は、初期状態２５４に対して実行される１つ又は複数のアクションを介して到達されうる後続の状態２５６、２５８、及び２６０をさらに含んでもよい。図示の実施形態においては、後続の状態２５６は、図２Ｂの設定画面２１２及び第１設定状態２３４と関連付けられてもよい。図２Ｂに示されているように、チップアプリケーション２０２は、請求書入力画面２１０の設定ウィジェット２２０と関連する「設定」ボタンをタップしたときに、第１設定状態２３４に遷移してもよい。したがって、モデル２５０は、表記された入出力シーケンス「Ｓｅｔ／Ｓ」を伴う初期状態２５４から後続の状態２５６への遷移を示しうる遷移エッジ２８０を含んでもよい。ここで、「Ｓ」は、「設定」ボタンのタップに対する出力としての設定画面２１２の生成を示している。また、後続の状態２５６には、入力シーケンス「Ｉｎｉｔ．Ｓｅｔ」というラベルが付与されてもよい。
【００５０】
「Ｔａｘ／Ｓ」の入出力シーケンスと関連する後続の状態２５６における自己遷移エッジ２８４は、「Ｔａｘ」アクションに応答して後続の状態２５６に留まることを示しており、図２Ｂの設定画面２１２の税率ウィジェット２２６と関連するボックスのクリックが、チップアプリケーション２０２が設定画面２１２上において及び第１設定状態２３４において留まることを結果的にもたらしうることを表記している。さらには、遷移エッジ２８６は、「｛Ｉｎｉｔ，Ｃａｌ，Ｓｅｔ｝／Ｘ」と表記された入出力シーケンスに基づいた後続の状態２５６からダミーエラー状態２６２への遷移を示してもよい。その理由は、「Ｉｎｉｔ」、「Ｃａｌ」、及び「Ｓｅｔ」が、後続の状態２５６と関連付けられうるチップアプリケーション２０２の設定画面２１２において使用不可能なアクションでありうるからである。
【００５１】
さらには、図２Ｂに関して上述したように、第１設定状態２３４の設定画面２１２内の「戻る」ボタンのクリックは、チップアプリケーション２０２のバックスタック内に含まれている情報に基づいて、「戻る」ボタンのクリックに対する応答として、チップアプリケーション２０２を請求書入力画面２１０及び関連する請求書入力状態２３０に遷移して戻らせてもよい。したがって、モデル２５０は、入出力シーケンス「Ｂａｃｋ／Ｂ」によって示されているように、後続の状態２５６から初期状態２５４及び請求書入力画面２１０に遷移して戻ることを示しうる遷移エッジ２８２を含んでもよい。
【００５２】
モデル２５０は、初期状態２５４からダミーエラー状態２６２への遷移を示しうる遷移エッジ２８８を含んでもよい。図示の実施形態においては、遷移エッジ２８８によって示されている初期状態２５４からダミーエラー状態２６２への遷移は、入出力シーケンス「｛Ｉｎｉｔ，Ｔａｘ，Ｂａｃｋ｝／Ｘ」によって表記されてもよい。その理由は、「Ｉｎｉｔ」、「Ｔａｘ」、及び「Ｂａｃｋ」が、初期状態２５４と関連付けられうるチップアプリケーション２０２の請求書入力画面２１０において使用不可能なアクションでありうるからである。
【００５３】
図２Ｂにおいて示されているように、チップアプリケーション２０２は、請求書入力画面２１０の計算ウィジェット２１８と関連する「計算」ボタンのタップに基づいて、チップ合計画面２１４及びチップ合計状態２３２に遷移してもよい。したがって、モデル２５０は、「Ｃａｌ／Ｔ」と表記された入出力シーケンスを伴う初期状態２５４から後続の状態２５８への遷移を示しうる遷移エッジ２６６を含んでもよい。この場合に、「Ｔ」は、出力としてのチップ合計画面２１４を示している。また、後続の状態２５８には、入力シーケンス「Ｉｎｉｔ．Ｃａｌ」というラベルが付与されてもよい。
【００５４】
遷移エッジ２７６は、「｛Ｉｎｉｔ，Ｃａｌ，Ｔａｘ｝／Ｘ」と表記された入出力シーケンスに基づいた後続の状態２５８からダミーエラー状態２６２への遷移を示してもよい。その理由は、図２Ｂに示されているように、「Ｉｎｉｔ」、「Ｃａｌ」、及び「Ｔａｘ」が、図２Ｃの後続の状態２５８と関連付けられうるチップ合計画面２１４上における且つ関連するチップ合計状態２３２における使用不可能なアクションでありうるからである。
【００５５】
さらには、図２Ｂに関して上述したように、関連するチップ合計状態２３２のチップ合計画面２１４内の「戻る」ボタンのクリックは、チップアプリケーション２０２のバックスタック内に含まれている情報に基づいて、チップアプリケーション２０２をチップ合計画面２１４及びチップ合計状態２３２から請求書入力画面２１０及び関連する請求書入力状態２３０に遷移して戻らせてもよい。したがって、モデル２５０は、入出力シーケンス「Ｂａｃｋ／Ｂ」によって表記されているように、後続の状態２５８から初期状態２５４への遷移を示しうる遷移エッジ２７８を含んでもよい。
【００５６】
さらには、モデル２５０は、後続の状態２５８から後続の状態２６０への遷移と関連付けられうる遷移エッジ２６８を含んでもよい。遷移エッジ２６８は、チップ合計画面２１４及び関連するチップ合計状態２３２から図２Ｂに関して説明した設定画面２１２及び関連する第２設定状態２３６への遷移を示してもよい。したがって、遷移エッジ２６８は、「Ｓｅｔ／Ｓ」の入出力シーケンスによって表記されてもよい。また、後続の状態２６０は、入力シーケンス「Ｉｎｉｔ．Ｃａｌ．Ｓｅｔ」をラベルとして含んでもよい。
【００５７】
「Ｔａｘ／Ｓ」の入出力シーケンスと関連する後続の状態２６０における自己遷移エッジ２７２は、「Ｔａｘ」アクションに応答して後続の状態２６０に留まることを示しており、図２Ｂの設定画面２１２の税率ウィジェット２２６と関連するボックスのクリックが、チップアプリケーション２０２が設定画面２１２上において且つ第２設定状態２３６において留まることを結果的にもたらしうることを表記している。さらには、遷移エッジ２７０は、「｛Ｉｎｉｔ，Ｃａｌ，Ｓｅｔ｝／Ｘ」と表記された入出力シーケンスに基づいた後続の状態２６０からダミーエラー状態２６２への遷移を示してもよい。その理由は、「Ｉｎｉｔ」、「Ｃａｌ」、及び「Ｓｅｔ」が、後続の状態２６０と関連付けられうる設定画面２１２上において且つ第２設定状態２３６において使用不可能なアクションでありうるからである。
【００５８】
さらには、図２Ｂに関して上述したように、関連する第２設定状態２３６の設定画面２１２内の「戻る」ボタンのクリックは、チップアプリケーション２０２をチップ合計画面２１４及び関連するチップ合計状態２３２へ遷移して戻らせてもよい。したがって、モデル２５０は、入出力シーケンス「Ｂａｃｋ／Ｔ」によって表記されているように、後続の状態２６０から後続の状態２５８に戻る遷移を示しうる遷移エッジ２７４を含んでもよい。
【００５９】
したがって、図２Ｃは、本開示に従って生成されうる図２Ａ及び図２Ｂに関して記述されたチップアプリケーション２０２の例示用のＤＦＳＭモデルを示している。いくつかの実施形態においては、チップアプリケーション２０２及びＧＵＩアプリケーション１０２などのその他のＧＵＩアプリケーションのＤＦＳＭモデルの生成は、図３〜図５に関して後述される方法３００、４００、及び５００に基づいたものであってもよい。
【００６０】
図３は、本開示の少なくとも１つの実施形態に従ってＧＵＩアプリケーションのＤＦＳＭモデルを生成する例示用の方法３００のフローチャートである。方法３００は、いくつかの実施形態において、図１の分析モジュール１０４などの分析モジュールによって実装されてもよい。例えば、分析モジュール１０４の処理装置１０８は、方法３００のブロックのうちの１つ又は複数のブロックによって表されているＧＵＩアプリケーション１０２のＤＦＳＭモデルを生成するための動作を実行するようにメモリ１１０内に保存されたコンピュータ命令を実行するように構成されてもよい。別個のブロックとして示されているが、様々なブロックは、所望の実装形態に応じて、更なるブロックに分割されてもよく、さらに少ない数のブロックに組み合わせられてもよく、或いは、除去されてもよい。
【００６１】
方法３００は、開始してもよく、且つ、ブロック３０２において、ＧＵＩアプリケーションを動的にクローリングすることにより、テスト対象のＧＵＩアプリケーションのシード観察（ｓｅｅｄ  ｏｂｓｅｒｖａｔｉｏｎ）を生成してもよい。動的なクローリングを実行する方法の一例については、図４に関して、さらに詳細に後述する。動的なクローリングを実行し、ＧＵＩアプリケーションの入出力シーケンスを観察してもよい。この入出力シーケンスは、ＧＵＩアプリケーションのその他の振る舞いを学習するための適切な起動点（ｌａｕｎｃｈ  ｐｏｉｎｔ）をＬ＊アルゴリズムが有するように、Ｌ＊アルゴリズムによって使用されてもよい。
【００６２】
さらには、ＧＵＩアプリケーション１０２のクローリングの間に観察されうるアクションと、クローリングの間に観察されうるＧＵＩアプリケーション１０２の画面とに基づいて、ＧＵＩアプリケーション１０２の１つ又は複数の画面において使用不可能でありうるアクションの入出力シーケンスを推測してもよい。この場合に、使用不可能なアクションの出力は、ダミーエラー出力であってもよい。観察及び推測される入出力シーケンスは、ＧＵＩアプリケーションのシード観察であってもよい。
【００６３】
例えば、「Ｉｎｉｔ」が、チップアプリケーション２０２を起動するアクションを表記し、「Ｃａｌ」が、「計算」ボタンをタップすることを表記し、「Ｓｅｔ」が、「設定」ボタンをタップすることを表記し、「Ｂａｃｋ」が、「戻る」ボタンをタップすることを表記し、「Ｓｉｇｍａ」が、アクションの完全な組｛Ｉｎｉｔ，Ｃａｌ，Ｓｅｔ，Ｂａｃｋ｝を表記し、「Ｂ」が、請求書入力画面２１０を表記し、「Ｔ」が、チップ合計画面２１４を表記し、「Ｓ」が、設定画面２１２を表記し、且つ、「Ｘ」が、ダミーエラー出力を表記するチップアプリケーション２０２に関して上述した命名法を使用して、チップアプリケーション２０２のクローリングは、表１によって列挙されている観察を結果的にもたらすことになろう。
【００６４】
【表１】
2015056180.tif 000003
【００６５】
方法３００を再度参照すれば、ブロック３０４において、観察及び推測された入出力シーケンスを使用し、Ｌ＊アルゴリズムの開始点として使用されうるＬ＊アルゴリズム観察テーブル（ｏｂｓｅｒｖａｔｉｏｎ  ｔａｂｌｅ）（以下、「Ｌ＊テーブル」と呼ぶ）を初期化すると共に入力してもよい。この結果、Ｌ＊アルゴリズムの効率が向上するのみならず、Ｌ＊アルゴリズムを使用してＧＵＩアプリケーションの振る舞いを学習することが可能になる。対照的に、多くの例において、初期観察テーブルをＬ＊アルゴリズムに提供することに失敗することにより、Ｌ＊アルゴリズムがＧＵＩアプリケーションの振る舞いを学習するために過大な時間が所要されるという結果となろう。
【００６６】
例えば、表１の入出力シーケンスに基づいて、図２に示されているように、チップアプリケーション２０２について、初期Ｌ＊テーブルを生成してもよい。この場合に、行ラベル（最も左側の列内に記録されているもの）は、既に実行された様々なアクションシーケンスを示しており、列ラベル（最上部行内のセルによって示されている）は、アプリケーション内の使用可能な入力アクションの組に基づいたアクション又はアクションシーケンスの別の組を示しており、且つ、その他のセルは、行ラベル内のシーケンスとそのセルの列ラベルを連結させることによって形成されるアクションシーケンスに対するテスト対象のアプリケーションの結果的に得られる出力の適切な添え字を記録している。
【００６７】
【表２】
2015056180.tif 000004
【００６８】
ブロック３０６において、ブロック３０４において初期化されたＬ＊テーブルが、閉じられており（ｃｌｏｓｅ）、且つ、一貫性（ｃｏｎｓｉｓｔｅｎｔ）を有しているか否かが判定されてもよい。いくつかの実施形態においては、Ｌ＊アルゴリズムをＬ＊テーブルに対して実行し、Ｌ＊テーブルが、閉じられており、且つ、一貫性を有しているか否かを判定してもよい。これは、Ｌ＊アルゴリズムの収束によって実行されるプロセスによって示されてもよい。Ｌ＊テーブルが、閉じられておらず、且つ、一貫性を有していないときには、方法３００は、ブロック３０８に進んでもよい。ここで、Ｌ＊アルゴリズムは、ＧＵＩアプリケーションの振る舞いに関する１つ又は複数の問合せ（ｑｕｅｒｉｅｓ）を生成してもよい。この場合に、このような問合せに対する回答は、恐らくは、Ｌ＊テーブルを、閉じた状態又は一貫性を有する状態とすることになろう。
【００６９】
例えば、上述の表２に基づいて、Ｌ＊アルゴリズムは、その最後の２つの行内に記録されている応答に起因し、表２が、閉じられておらず、且つ、一貫性を有していないと判定してもよく、且つ、表１及び表２に基づいて、Ｌ＊アルゴリズムは、表３を生成してもよい。この場合に、最後の行は、Ｌ＊アルゴリズムによって生成されうるチップアプリケーション２０２に関する問合せを示している。
【００７０】
【表３】
2015056180.tif 000005
【００７１】
ブロック３１０において、問合せを動的なクローラ（ｃｒａｗｌｅｒ）に入力し、問合せに基づいて制御されたＧＵＩアプリケーションの別のクローリング（「制御されたクローリング」と呼ぶ）を通じて、問合せに対する回答を得てもよい。動的クローラによる問合せの処理については、方法４００に関しても説明する。また、特定の問合せに対する回答に加えて、制御されたクローリング（ｄｉｒｅｃｔｅｄ  ｃｒａｗｌ）は、問合せの具体的に一部分でなくてもよいＧＵＩアプリケーションの更なる入出力シーケンスを判定するように、構成されてもよい。
【００７２】
ブロック３１２において、Ｌ＊テーブルは、制御されたクローリングの間に観察された入出力シーケンスに従って変更及び更新されてもよい。したがって、Ｌ＊テーブルは、制御されたクローリングの間に観察されうるその他の入出力シーケンスのみならず、クローリングの間に生成されうる問合せに対する回答に従って、更新されてもよい。方法３００は、ブロック３１２の後に、ブロック３０６に戻ってもよい。この場合に、Ｌ＊アルゴリズムは、変更されたＬ＊テーブルが、いまや、閉じられており、且つ、一貫性を有しているか否かを判定するべく、変更されたＬ＊テーブルに対して再度実行されてもよい。ブロック３０６、３０８、３１０、及び３１２は、Ｌ＊テーブルが、閉じられており、且つ、一貫性を有しているとみなされる時点まで、任意の回数にわたって反復されてもよい。
【００７３】
例えば、表３に対して生成された問合せに基づいて、動的クローラが実行されてもよく、且つ、表４に示されている入出力シーケンスが生成されてもよい。
【００７４】
【表４】
2015056180.tif 000006
【００７５】
表４の入出力シーケンスを使用して表３と関連付けられたＬ＊テーブルを更新することにより、以下の表５を生成してもよい。
【００７６】
【表５】
2015056180.tif 000007
【００７７】
次いで、Ｌ＊アルゴリズムは、表５の最後の２つの行が、この表が閉じられておらず、且つ、一貫性を有していないことの責任を担っていると判定してもよく、且つ、別の問合せの組を有する改訂された表を生成してもよい。これらの問合せを動的クローラによって実行し、Ｌ＊テーブルを更新すると共に、更新されたＬ＊テーブルが、閉じられており、且つ、一貫性を有しているか否かのブロック３０６、３０８、３１０、及び３１２による判定を可能にしてもよい。このプロセスは、チップアプリケーション２０２と関連するＬ＊テーブルが、閉じられており、且つ、一貫性を有しているとＬ＊アルゴリズムがみなす時点まで、一連のＬ＊テーブル及び問合せによって反復されてもよい。
【００７８】
方法３００を再度参照すれば、Ｌ＊テーブルが、閉じられており、且つ、一貫性を有しているとみなされたときに、方法３００は、ブロック３０６からブロック３１４に進んでもよい。ここで、Ｌ＊テーブルに基づいてＬ＊アルゴリズムによって推測モデルを生成してもよい。推測モデルは、ＧＵＩアプリケーションが動作する方法の推測であるＤＦＳＭモデルであってもよい。例えば、チップアプリケーション２０２と関連するＬ＊テーブルが、閉じられており、且つ、一貫性を有しているとみなされるときには、図２Ｃのモデル２５０は、チップアプリケーション２０２のＬ＊テーブルに基づいた推測モデルとして生成されてもよい。
【００７９】
ブロック３１６において、推測モデルがＧＵＩアプリケーションを十分にモデル化しているか否かが判定されてもよい。推測モデルが十分にＧＵＩアプリケーションをモデル化しているか否かを判定する一例については、図５の方法５００に関して後述する。推測モデルがＧＵＩアプリケーションを十分にモデル化していないときには、方法３００は、ブロック３１８に進んでもよい。ブロック３１８において、同一の結果が得られない推測モデル及びＧＵＩアプリケーションとの関係における一連の動作を示しうる反例（ｃｏｕｎｔｅｒ  ｅｘａｍｐｌｅ）を生成してもよい。反例の生成の一例についても、図５に関して説明する。ブロック３２０において、ブロック３１８において生成された反例に基づいて、Ｌ＊テーブルを変更してもよく、且つ、方法３００は、ブロック３０６に戻ってもよい。
【００８０】
ブロック３１６において、推測モデルがＧＵＩアプリケーションを十分にモデル化していると判定されたときには、方法３００は、ブロック３２２に進んでもよい。ブロック３２２において、推測モデルは、無害化（ｓａｎｉｔｉｚｅ）されてもよい。これにより、推測モデルに含まれている無関係の要素を除去してもよい。例えば、推測モデルは、ＧＵＩアプリケーションの１つ又は複数の状態において使用不可能なアクションと関連しうるダミーエラー状態を含む場合がある。したがって、ブロック３２２において、ダミーエラー状態と、推測モデルのダミーエラー状態に結び付く関連する遷移エッジとを推測モデルから除去してもよい。ブロック３２４において、無害化された推測モデルが、ＧＵＩアプリケーションのＧＵＩモデルとして出力されてもよい。
【００８１】
図４は、本開示の少なくとも１つの実施形態に従って構成されたＧＵＩアプリケーションをクローリングする例示用の方法４００のフローチャートである。上述のように、方法４００を使用し、上述の方法３００のブロック３０２及び３１０との関係における動作を実行してもよい。方法４００は、いくつかの実施形態においては、図１の分析モジュール１０４などの分析モジュールによって実装されてもよい。例えば、分析モジュール１０４の処理装置１０８は、方法４００のブロックのうちの１つ又は複数のブロックによって表されているＧＵＩアプリケーション１０２をクローリングするための動作を実行するためにメモリ１１０内に保存されているコンピュータ命令を実行するように構成されてもよい。別個のブロックとして示されているが、様々なブロックは、所望の実装形態に応じて、更なるブロックに分割されてもよく、さらに少ない数のブロックに組み合わせられてもよく、或いは、除去されてもよい。
【００８２】
方法４００は、開始されてもよく、且つ、ブロック４０２において、ＧＵＩアプリケーションが読み込まれてもよい。ブロック４０４において、ＧＵＩアプリケーションの初期画面が読み込まれてもよい。ブロック４０６において、有効なクローリング問合せが受信されているか否かが判定されてもよい。例えば、ブロック４０６において、有効なクローリング問合せが受信されているか否かは、方法３００のブロック３０８において実行された動作に基づいて判定されてもよい。
【００８３】
有効なクローリング問合せが存在していない場合には、方法４００は、ブロック４０８に進んでもよい。ここで、ＧＵＩアプリケーションの現在の画面―初期画面であってもよい―が、実行又はクローリングされていないアクションを有しているか否かが判定されてもよい。実行又はクローリングされていないアクションは、以下においては、「オープンアクション」と呼ばれる場合がある。ブロック４０８において、現在の画面がオープンアクションを有しているときには、ブロック４１０において、そのオープンアクションが選択されてもよい。ブロック４１２において、選択されたアクションが、もはや、オープンであるとみなされ得ないように、選択されたアクションは、実行済みとしてマーキングされてもよい。
【００８４】
ブロック４１４において、選択されたアクションが実行されてもよく、且つ、ブロック４１６において、アクションの実行の結果として得られた画面（ｒｅｓｕｌｔｉｎｇ  ｓｃｒｅｅｎ）（「結果として得られた画面」と呼ぶ）が読み込まれてもよい。ブロック４１８において、結果として得られた画面は、観察済みであるとして記録されてもよく、且つ、現在の画面として設定されてもよい。ブロック４１８を終了した後に、方法４００は、ブロック４０６に戻ってもよい。
【００８５】
再度、ブロック４０６において、有効なクローリング問合せが存在しているか否かが判定されてもよい。有効なクローリング問合せが存在していない場合には、方法４００は、再度、ブロック４０８に進んでもよい。ブロック４０８において、現在の画面がオープンアクションを有していない場合には、方法４００は、ブロック４２０に進んでもよい。ここで、現在の画面が初期画面であるか否かが判定されてもよい。ブロック４２０において、現在の画面が初期画面でない場合には、方法４００は、ブロック４２２に進んでもよい。ブロック４２２において、現在の画面に到達するために使用されうるＧＵＩアプリケーションを通じた現在の経路及びトレースが、ＧＵＩアプリケーションの新しいトレースとして保存されてもよい。ブロック４２４において、ＧＵＩアプリケーションは、以前の画面に戻ってもよく、且つ、方法４００は、ブロック４０８に戻ってもよい。
【００８６】
ブロック４２０を再度参照すれば、ブロック４２０において、現在の画面が初期画面である場合には、方法４００は、ブロック４２３に進んでもよい。ここで、いずれかの以前に観察又はクローリングされた画面が、オープンアクションを有しているか否かが判定されてもよい。ブロック４２３において、以前に観察された画面がオープンアクションを有していると判定された場合には、ブロック４２５において、１つ又は複数のオープンアクションを有する以前に観察された画面が読み込まれてもよく、且つ、方法４００は、ブロック４１０に戻ってもよい。対照的に、ブロック４２３において、オープンアクションを有する以前に観察された画面が存在していないと判定された場合には、方法４００は、ブロック４２６に進んでもよい。ここで、現在の動的クローリングの間に判定されたＧＵＩアプリケーションの経路及びトレースが出力されてもよい。上述のように、方法４００を使用してクローリングされうるＧＵＩアプリケーションについてＧＵＩモデルが生成されうるように、出力されたトレース及び経路を使用し、Ｌ＊テーブルの１つ又は複数のフィールドに入力してもよい。
【００８７】
ブロック４０６を再度参照すれば、ブロック４０６において有効なクローリング問合せが存在している場合には、方法４００は、ブロック４２８に進んでもよい。ここで、クローリング問合せの末尾に到達しているか否かが判定されてもよい。クローリング問合せの末尾に到達していない場合には、方法４００は、ブロック４３０に進んでもよい。ここで、クローリング問合せの次のアクションが選択されてもよい。ブロック４３０を終了することにより、方法４００は、問い合わせられたアクションに関して、ブロック４１２、４１４、４１６、及び４１８と関連するステップが実行されうるように、ブロック４１２に進んでもよく、且つ、方法４００は、ブロック４０６に戻ってもよい。方法４００は、クローリング問合せの末尾に到達しており、且つ、ブロック４２８において、そのように判定される時点まで、ブロック４０６、４２８、４３０、４１２、４１４、４１６、及び４１８を反復してもよい。クローリング問合せの末尾に到達しており、且つ、ブロック４２８において、そのように判定されたら、方法は、ブロック４２０に進んでもよい。
【００８８】
方法３００に関して上述したように、クローリング問合せは、Ｌ＊テーブルが不完全である―例えば、閉じられておらず、且つ、一貫性を有していない―ことに応答して生成されてもよい。したがって、方法４００のブロック４０６、４２８、４３０、４１２、４１４、４１６、及び４１８を使用して、Ｌ＊テーブルが、閉じられており、且つ、一貫性を有する状態となるように、Ｌ＊テーブルの完成を支援しうるＧＵＩアプリケーションに関する振る舞い情報を判定及び取得してもよい。さらには、上述のように、閉じられており、且つ、一貫性を有しているＬ＊テーブルを使用して推測モデルを生成してもよい。この推測モデルは、図５の方法５００に従ってＧＵＩアプリケーションと比較されてもよい。
【００８９】
図５は、本開示の少なくとも１つの実施形態に従って構成された、推測モデルが、関連するＧＵＩアプリケーションを十分にモデル化しているか否かを判定する例示用の方法５００のフローチャートである。上述のように、方法５００を使用し、上述の方法３００のブロック３１６及び３１８との関係における動作を実行してもよい。方法５００は、いくつかの実施形態においては、図１の分析モジュール１０４などの分析モジュールによって実装されてもよい。例えば、分析モジュール１０４の処理装置１０８は、方法５００のブロックのうちの１つ又は複数のブロックによって表されている動作を実行するべくメモリ１１０内に保存されているコンピュータ命令を実行するように構成されてもよい。別個のブロックとして示されているが、様々なブロックは、所望の実装形態に応じて、更なるブロックに分割されてもよく、さらに少ない数のブロックに組み合わせられてもよく、或いは、除去されてもよい。
【００９０】
方法５００は、ブロック５０２において開始されてもよい。ここで、ＧＵＩアプリケーションと関連する疑似ランダム入力シーケンス（以下、「入力シーケンス」と呼ぶ）が生成されてもよい。入力シーケンスは、入力シーケンスに応答してＧＵＩアプリケーションの振る舞いを判定するべくＧＵＩアプリケーションによって実行されうる任意の適切なアクションの組を含んでもよい。
【００９１】
ブロック５０４において、抽象的入力シーケンスが、入力シーケンスから生成されてもよい。抽象的入力シーケンスは、入力シーケンスのアクションに関連しうると共に推測モデルによってモデル化されるＧＵＩアプリケーションの動作のシーケンスを判定するべく推測モデルにおいてアクションとして使用されうるアクションの組を含んでもよい。
【００９２】
ブロック５０６において、入力シーケンスをＧＵＩアプリケーションに対して実行し、関連する出力シーケンスを取得してもよい。ブロック５０８において、抽象的入力シーケンスを推測モデルに対して実行し、関連する抽象的出力シーケンスを取得してもよい。ブロック５１０において、出力シーケンスが抽象的出力シーケンスと実質的に等価であるか否かが判定されてもよい。
【００９３】
出力シーケンスが抽象的出力シーケンスと実質的に等価でない場合には、方法５００は、ブロック５１２に進んでもよい。ここで、抽象的入力シーケンスは、上述の方法３００のブロック３１８において生成される反例として使用されうる反例として出力されてもよい。ブロック５１０において、出力シーケンスが抽象的出力シーケンスと実質的に等価である場合には、方法５００は、ブロック５１３に進んでもよい。
【００９４】
ブロック５１２において、入力生成閾値に到達しているか否かが判定されてもよい。入力生成閾値は、ＧＵＩアプリケーションが推測モデルによって十分にモデル化されうることを評価するために、ＧＵＩアプリケーション及び推測モデルの異なる経路を十分にテストするものとみなされるシーケンス又はこれらの基準の組合せを生成するために、既定数の入力シーケンス又は既定の時間と関連付けられてもよい。入力生成閾値に到達していない場合には、方法５００は、ブロック５０２に戻ってもよい。対照的に、入力生成閾値に到達している場合には、方法５００は、ブロック５１４に進んでもよい。ここで、推測モデルは、ＧＵＩアプリケーションを十分にモデル化するものとみなされてもよい。この結果、いくつかの実施形態においては、上述の方法３００がブロック３１６からブロック３２２に進むことになる。
【００９５】
したがって、方法３００、４００、及び５００を使用し、ＧＵＩアプリケーションのＤＦＳＭモデルを抽出及び生成してもよい。その結果、ＧＵＩモデルを使用し、ＧＵＩアプリケーションの振る舞いを検証及びテストしてもよい。且つ、いくつかの例においては、ＧＵＩモデルを使用し、ＧＵＩアプリケーションと関連するバグをトラブルシュート及び／又は検出してもよい。
【００９６】
当業者は、本明細書に開示されているこのプロセス及びその他のプロセス及び方法においては、プロセス及び方法において実行される機能は、異なる順序において実装されてもよいことを理解するであろう。さらには、概説されたステップ及び動作は、一例として提示されているものに過ぎず、且つ、ステップ及び動作のいくつかは、開示されている実施形態の本質を逸脱することなしに、任意選択であってもよく、さらに少ない数のステップ及び動作として組み合わせられてもよく、或いは、更なるステップ及び動作に拡張されてもよい。
【００９７】
図６は、本開示のいくつかの実施形態に従って構成されたＧＵＩアプリケーションをモデル化する例示用の方法６００のフローチャートである。方法６００は、いくつかの実施形態においては、図１の分析モジュール１０４などの分析モジュールにより、実装されてもよい。例えば、分析モジュール１０４の処理装置１０８は、方法６００のブロックのうちの１つ又は複数のブロックによって表されているＧＵＩアプリケーション１０２をモデル化するための動作を実行するべくメモリ１１０内に保存されたコンピュータ命令を実行するように構成されてもよい。別個のブロックとして示されているが、様々なブロックは、所望の実装形態に応じて、更なるブロックに分割されてもよく、さらに少ない数のブロックに組み合わせられてもよく、或いは、除去されてもよい。
【００９８】
方法６００は、ブロック６０２において開始してもよい。ここで、ダミーエラー状態及びダミーエラー出力が、有限状態マシン内において生成されてもよい。ブロック６０４において、有限状態マシン内においてダミーエラー出力を生成しつつ、ＧＵＩアプリケーションの画面上において使用不可能なアクションに対する応答が、ダミーエラー状態への遷移としてモデル化されてもよい。
【００９９】
当業者は、本明細書に記述されているこのプロセス及びその他のプロセス及び方法においては、プロセス及び方法において実行される機能は、異なる順序において実装されてもよいことを理解するであろう。さらには、概説されたステップ及び動作は、例として提供されているものに過ぎず、且つ、ステップ及び動作のいくつかは、開示されている実施形態の本質を逸脱することなしに、任意選択であってもよく、さらに少ない数のステップ及び動作として組み合わせられてもよく、或いは、更なるステップ及び動作に拡張されてもよい。
【０１００】
例えば、いくつかの実施形態においては、画面は、有限状態マシン内の出力としてモデル化されてもよい。これらの実施形態及びその他の実施形態においては、方法６００は、有限状態マシン内の入力として画面上のアクションをモデル化することと、画面上において実行されたアクションに応答して、有限状態マシン内の別の出力として、ＧＵＩに基づいたアプリケーションによって生成された後続の画面をモデル化することとを含んでもよい。したがって、有限状態マシンは、無限数の入力が存在しうる例においても、有限であってもよい。
【０１０１】
同様に、いくつかの実施形態においては、画面は、コレクションフィールドを含んでもよく、且つ、方法６００は、コレクションフィールドが空であるときに、コレクションフィールドが有限状態マシン内の第１出力と関連付けられ、且つ、コレクションフィールドが入力されているときには、コレクションフィールドが、有限状態マシン内の第２出力と関連付けられるように、有限状態マシン内における画面のモデル化と関連するステップを含んでもよい。この場合にも、この方式によるＧＵＩアプリケーションのモデル化により、有限状態マシンは、無限数の項目がコレクションフィールド内に存在しうる例においても、有限になり得る。
【０１０２】
さらには、いくつかの実施形態においては、方法６００は、有限数の構成を含む有限スタック（ｂｏｕｎｄｅｄ  ｓｔａｃｋ）としてＧＵＩアプリケーションのスタックをモデル化することと、異なる構成を識別（ｄｉｓｔｉｎｇｕｉｓｈ）するために有限状態マシン内の入出力シーケンスを使用して有限状態マシン内の状態の一部として構成のそれぞれをモデル化することとを含んでもよい。この方式による有限スタックのモデル化により、従来は、スタックが異なる構成を状態へ組み込むのではなく、無限サイズのスタックを有する形式を使用してモデル化されているときに、有限状態マシンの形態におけるスタックのモデル化が可能となろう。
【０１０３】
さらには、これらの実施形態又はその他の実施形態において、ＧＵＩアプリケーションは、複数の初期画面及び／又は状態（例えば、関連する第１初期状態及び第２初期状態をそれぞれが有する第１初期画面及び第２初期画面）を含んでもよい。これらの実施形態又はその他の実施形態において、方法６００は、有限状態マシン内において、ダミー初期状態に対して実行された第１ダミーアクションに対する第１応答として、有限状態マシンのダミー初期状態から第１初期状態への遷移をモデル化することに関連するステップを含んでもよい。第１初期状態は、第１初期画面と関連付けられてもよい。また、方法６００は、有限状態マシン内において、ダミー初期状態に対して実行された第２ダミーアクションに対する応答として、有限状態マシンのダミー初期状態から第２初期状態への遷移をモデル化することを含んでもよい。第２初期状態は、第２初期画面と関連付けられてもよい。
【０１０４】
上述のように、本明細書に記述されている実施形態は、以下にさらに詳述するように、様々なコンピュータハードウェア又はソフトウェアモジュールを含む特殊目的又は汎用コンピュータ（例えば、図１の処理装置１０８）の使用を含んでもよい。
【０１０５】
さらには、上述のように、本明細書に記述されている実施形態は、保存されているコンピュータ実行可能命令又はデータ構造を担持又は保持するためのコンピュータ可読媒体（例えば、図１のメモリ１１０）を使用して、実装されてもよい。このようなコンピュータ可読媒体は、汎用又は特殊目的コンピュータによってアクセスされうる任意の使用可能な媒体であってもよい。一例として、且つ、限定を伴うことなしに、このようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、又はその他の光ディスクストレージ、磁気ディスクストレージ、或いは、その他の磁気ストレージ装置、フラッシュメモリ装置（例えば、ソリッドステートメモリ装置（ｓｏｌｉｄ  ｓｔａｔｅ  ｍｅｍｏｒｙ  ｄｅｖｉｃｅ））、或いは、コンピュータ実行可能命令又はデータ構造の形態の所望のプログラムコードを担持又は保存するように使用されうると共に汎用目的コンピュータ及び特殊目的コンピュータによってアクセスされうる任意のその他のストレージ媒体を含む有体又は持続的なコンピュータ可読媒体を含んでもよい。また、上述のものの組合せも、コンピュータ可読媒体の範囲に含まれてもよい。
【０１０６】
コンピュータ実行可能命令は、例えば、汎用コンピュータ、特殊目的コンピュータ、又は特殊目的処理装置（例えば、１つ又は複数の処理装置）に特定の機能又は機能のグループを実行させる命令及びデータを含んでもよい。主題は、構造の特徴及び／又は方法の動作に固有の言語において記述されているが、添付の請求項に規定されている主題は、必ずしも、上述の特定の特徴又は動作に限定されるものではないことを理解されたい。むしろ、上述の特定の特徴及び動作は、請求項を実施する例示用の形態として開示されたものである。
【０１０７】
本明細書において使用されている「モジュール」又は「コンポーネント」という用語は、モジュール又はコンポーネントの動作を実行するように構成された特定のハードウェア実装形態及び／又は演算システムの汎用ハードウェア（例えば、コンピュータ可読媒体や処理装置）によって保存及び／又は実行されうるソフトウェアオブジェクト又はソフトウェアルーチンを意味してもよい。いくつかの実施形態においては、本明細書において記述されている異なるコンポーネント、モジュール、エンジン、及びサービスは、演算システム上において（例えば、別個のスレッドとして）稼働するオブジェクト又はプロセスとして実装されてもよい。本明細書において記述されているシステム及び方法のいくつかは、（汎用ハードウェアによって保存及び／又は実行される）ソフトウェアとして実装されるものとして一般的に記述されているが、特定のハードウェア実装形態、又はソフトウェアと特定のハードウェア実装形態の組合せも、可能であり、且つ、想定される。この説明においては、「演算エンティティ」は、本明細書において以前に規定されている任意の演算システムであってもよく、或いは、演算システム上において稼働する任意のモジュール又はモジュールの組合せであってもよい。
【０１０８】
本明細書に記述されている全ての例及び条件に関する言語は、本発明と、当技術分野の発展に寄与する本発明者による概念と、を理解する際に読者の一助となるように教育的な目的を意図したものであり、且つ、具体的に記述されている例及び条件に対する限定を伴うものではないものと解釈されたい。本開示の実施形態が詳細に記述されているが、本開示の精神及び範囲を逸脱することなしに、これらに対して様々な変更、置換、及び変形を実施することができることを理解されたい。
【図１】
2015056180.tif 000008
【図２Ａ】
2015056180.tif 000009
【図２Ｂ】
2015056180.tif 000010
【図２Ｃ】
2015056180.tif 000011
【図３】
2015056180.tif 000012
【図４】
2015056180.tif 000013
【図５】
2015056180.tif 000014
【図６】
2015056180.tif 000015