(57)【要約】      （修正有）【課題】ＧＵＩベースのアプリケーションのモデルを抽出するクローリングを提供する。【解決手段】ＧＵＩベースのアプリケーションをクローリングすることによってシードオブザベーションを生成し３０２、Ｌ＊テーブルを初期化する３０４。Ｌ＊テーブルが閉じて無矛盾であると判定されるまで３０６、クエリの生成３０８、応答の取得３１０、および、Ｌ＊テーブルの更新３１２を繰り返す。Ｌ＊テーブルが閉じて無矛盾であると判定されると３０６、アプリケーションの推定モデルを生成し３１４、推定モデルが、アプリケーションを十分にモデル化していると判定されると３１６、推定モデルをサニタイズして３２２、出力する３２４。【選択図】図３Ａ
2015201172.tif 000002
【特許請求の範囲】
【請求項１】
グラフィカルユーザインターフェース（ＧＵＩ）ベースのアプリケーションの動作の第１シーケンスの第１時間クローリングを実行することであって、前記第１時間クローリングは、動作の前記第１シーケンスがクローリングされる第１時間であり、動作の前記第１シーケンスは、動作の前記第１シーケンスよりも１つ又は２つ以上の付加的な動作を含む動作の第２シーケンスのプリフィックスである前記第１時間クローリングを実行し、
前記第１時間クローリングの間に動作の前記第２シーケンスをクローリングするように前記１つ又は２つ以上の付加的な動作により前記第１時間クローリングを拡張し、
前記第１時間クローリングに基づいて動作の前記第１シーケンスに関連する第１入力／出力シーケンスを決定し、
前記第１時間クローリングに基づいて動作の前記第２シーケンスに関連する第２入力／出力シーケンスを決定する、
ことを含むグラフィカルユーザインターフェース（ＧＵＩ）ベースのアプリケーションをクローリングする方法。
【請求項２】
動作の前記第１シーケンスの前記第１時間クローリングの間に遭う前記ＧＵＩベースのアプリケーションの状態は、先に観察されていないことを決定し、
前記状態が先に観察されていないことの決定に基づいて、前記第１時間クローリングを拡張する、ことを更に含む、請求項１に記載の方法。
【請求項３】
前記第１時間クローリングを拡張することは、動作の前記第２シーケンスが動作の前記第１シーケンスよりも少なくとも２つ以上の動作を含むように、前記状態が先にクローリングされていないことの決定に基づいて、少なくとも２つの動作によって前記第１時間クローリングを拡張する、ことを含む、請求項２に記載の方法。
【請求項４】
前記状態が先に観察されていないことを決定することは、先に観察されていない画面情報に遭うことに基づく、請求項２に記載の方法。
【請求項５】
前記ＧＵＩベースのアプリケーションに対してＬ＊アルゴリズムを実行し、
前記第１入力／出力シーケンス及び前記第２入力／出力シーケンスの１つ又は２つ以上を使用して、前記Ｌ＊アルゴリズムによって生成されたクエリへの応答を取得し、
前記応答に基づいて前記Ｌ＊アルゴリズムの出力を取得し、
前記Ｌ＊アルゴリズムの前記出力に基づいて、前記ＧＵＩベースのアプリケーションの決定論有限状態機械モデルを生成する、ことを更に含む、請求項１に記載の方法。
【請求項６】
それぞれが前記ＧＵＩベースのアプリケーションの動作のシーケンスを含む複数のクエリの出力を前記Ｌ＊アルゴリズムによって受信し、
前記複数のクエリの第１クエリが前記複数の第２クエリの１つ又は２つ以上のプリフィックスのプリフィックスであることを決定し、
前記第２クエリのオンデマンドのクローリングを実行し、
前記第１クエリの第１応答及び前記第２クエリの第２応答の双方が前記オンデマンドのクローリングから生成されるように、前記第１クエリが前記第２クエリの前記プリフィックスであることの前記決定に基づいて、前記オンデマンドのクローリングから前記第１クエリの第１クエリ入力／出力シーケンス及び前記第２クエリの第２クエリ入力／出力シーケンスを決定する、ことを更に含む、請求項５に記載の方法。
【請求項７】
前記複数のクエリの１つ又は２つ以上の他のクエリをクローリングする前に、前記第１クエリ入力／出力シーケンス及び前記第２クエリ入力／出力シーケンスの１つ又は２つ以上に基づいて、前記Ｌ＊アルゴリズムの観察テーブルを修正し、
前記修正した観察テーブルを使用して、前記ＧＵＩベースのアプリケーションに対してＬ＊アルゴリズムを実行して、前記複数のクエリの１つ又は２つ以上の他のクエリをクローリングする前に、前記修正した観察テーブルが閉じて無矛盾であるか否かを決定する、ことを更に含む、請求項６に記載の方法。
【請求項８】
それぞれが前記ＧＵＩベースのアプリケーションの動作のシーケンスを含む複数のクエリの出力を前記Ｌ＊アルゴリズムによって受信し、
前記複数のクエリのクエリへの応答を取得し、
前記複数のクエリの１つ又は２つ以上の他のクエリをクローリングする前に、前記クエリへの前記応答に基づいて、前記Ｌ＊アルゴリズムの観察テーブルを修正し、
前記修正した観察テーブルを使用して、前記ＧＵＩベースのアプリケーションに対してＬ＊アルゴリズムを実行して、前記複数のクエリの１つ又は２つ以上の他のクエリをクローリングする前に、前記修正した観察テーブルが閉じて無矛盾であるか否かを決定する、ことを更に含む、請求項５に記載の方法。
【請求項９】
前記修正した観察テーブルが閉じてなく無矛盾でないとき、新しい複数のクエリを生成する、ことを更に含む、請求項８に記載の方法。
【請求項１０】
グラフィカルユーザインターフェース（ＧＵＩ）ベースのアプリケーションをクローリングするための、それぞれが前記ＧＵＩベースのアプリケーションの動作のシーケンスを含む複数のクエリを受信し、
前記複数のクエリの第１クエリが前記複数の第２クエリの１つ又は２つ以上のプリフィックスのプリフィックスであることを決定し、
前記第２クエリのオンデマンドのクローリングを実行し、
前記第１クエリの第１応答及び前記第２クエリの第２応答の双方が前記オンデマンドのクローリングから生成されるように、前記第１クエリが前記第２クエリの前記プリフィックスであることの前記決定に基づいて、前記オンデマンドのクローリングから前記第１クエリの第１クエリ入力／出力シーケンス及び前記第２クエリの第２クエリ入力／出力シーケンスを決定する、
ことを含むグラフィカルユーザインターフェース（ＧＵＩ）ベースのアプリケーションをクローリングする方法。
【請求項１１】
Ｌ＊アルゴリズムを有する前記複数のクエリを生成し、
前記第１クエリ入力／出力シーケンス及び前記第２クエリ入力／出力シーケンスの１つ又は２つ以上に基づいて、前記Ｌ＊アルゴリズムの観察テーブルを修正し、
前記修正した観察テーブルを使用して、前記ＧＵＩベースのアプリケーションに対して前記Ｌ＊アルゴリズムを実行して、前記修正した観察テーブルが閉じて無矛盾であるか否かを決定する、ことを更に含む、請求項１０に記載の方法。
【請求項１２】
Ｌ＊アルゴリズムを有する前記複数のクエリを生成し、
前記第１クエリ入力／出力シーケンス及び前記第２クエリ入力／出力シーケンスの１つ又は２つ以上に基づいて、前記Ｌ＊アルゴリズムの観察テーブルを修正し、
前記修正した観察テーブルを使用して、前記ＧＵＩベースのアプリケーションに対して前記Ｌ＊アルゴリズムを実行して、前記複数のクエリの１つ又は２つ以上の他のクエリをクローリングする前に、前記修正した観察テーブルが閉じて無矛盾であるか否かを決定する、ことを更に含む、請求項１０に記載の方法。
【請求項１３】
グラフィカルユーザインターフェース（ＧＵＩ）ベースのアプリケーションの動作の第１シーケンスの第１時間クローリングを実行することであって、前記第１時間クローリングは、動作の前記第１シーケンスがクローリングされる第１時間であり、動作の前記第１シーケンスは、動作の前記第１シーケンスよりも１つ又は２つ以上の付加的な動作を含む動作の第２シーケンスのプリフィックスである前記第１時間クローリングを実行し、
前記第１時間クローリングの間に動作の前記第２シーケンスをクローリングするように前記１つ又は２つ以上の付加的な動作により前記第１時間クローリングを拡張し、
前記第１時間クローリングに基づいて動作の前記第１シーケンスに関連する第１入力／出力シーケンスを決定し、
前記第１時間クローリングに基づいて動作の前記第２シーケンスに関連する第２入力／出力シーケンスを決定する、
ことを含む、グラフィカルユーザインターフェース（ＧＵＩ）ベースのアプリケーションをクローリングする操作をシステムが実行するコンピュータ命令を実行するように構成された１つ又は２つ以上のプロセッサ。
【請求項１４】
前記操作は、
動作の前記第１シーケンスの前記第１時間クローリングの間に遭う前記ＧＵＩベースのアプリケーションの状態は、先に観察されていないことを決定し、
前記状態が先に観察されていないことの決定に基づいて、前記第１時間クローリングを拡張する、ことを更に含む、請求項１３に記載の１つ又は２つ以上のプロセッサ。
【請求項１５】
前記第１時間クローリングを拡張することは、動作の前記第２シーケンスが動作の前記第１シーケンスよりも少なくとも２つ以上の動作を含むように、前記状態が先にクローリングされていないことの決定に基づいて、少なくとも２つの動作によって前記第１時間クローリングを拡張する、ことを含む、請求項１４に記載の１つ又は２つ以上のプロセッサ。
【請求項１６】
前記状態が先に観察されていないことを決定することは、先に観察されていない画面情報に遭うことに基づく、請求項１４に記載の１つ又は２つ以上のプロセッサ。
【請求項１７】
前記操作は、
前記ＧＵＩベースのアプリケーションに対してＬ＊アルゴリズムを実行し、
前記第１入力／出力シーケンス及び前記第２入力／出力シーケンスの１つ又は２つ以上を使用して、前記Ｌ＊アルゴリズムによって生成されたクエリへの応答を取得し、
前記応答に基づいて前記Ｌ＊アルゴリズムの出力を取得し、
前記Ｌ＊アルゴリズムの前記出力に基づいて、前記ＧＵＩベースのアプリケーションの決定論有限状態機械モデルを生成する、ことを更に含む、請求項１３に記載の１つ又は２つ以上のプロセッサ。
【請求項１８】
前記操作は、
それぞれが前記ＧＵＩベースのアプリケーションの動作のシーケンスを含む複数のクエリの出力を前記Ｌ＊アルゴリズムによって受信し、
前記複数のクエリの第１クエリが前記複数の第２クエリの１つ又は２つ以上のプリフィックスのプリフィックスであることを決定し、
前記第２クエリのオンデマンドのクローリングを実行し、
前記第１クエリの第１応答及び前記第２クエリの第２応答の双方が前記オンデマンドのクローリングから生成されるように、前記第１クエリが前記第２クエリの前記プリフィックスであることの前記決定に基づいて、前記オンデマンドのクローリングから前記第１クエリの第１クエリ入力／出力シーケンス及び前記第２クエリの第２クエリ入力／出力シーケンスを決定する、ことを更に含む、請求項１７に記載の１つ又は２つ以上のプロセッサ。
【請求項１９】
前記操作は、
前記複数のクエリの１つ又は２つ以上の他のクエリをクローリングする前に、前記第１クエリ入力／出力シーケンス及び前記第２クエリ入力／出力シーケンスの１つ又は２つ以上に基づいて、前記Ｌ＊アルゴリズムの観察テーブルを修正し、
前記修正した観察テーブルを使用して、前記ＧＵＩベースのアプリケーションに対して前記Ｌ＊アルゴリズムを実行して、前記複数のクエリの１つ又は２つ以上の他のクエリをクローリングする前に、前記修正した観察テーブルが閉じて無矛盾であるか否かを決定する、ことを更に含む、請求項１８に記載の１つ又は２つ以上のプロセッサ。
【請求項２０】
前記操作は、
それぞれが前記ＧＵＩベースのアプリケーションの動作のシーケンスを含む複数のクエリの出力を前記Ｌ＊アルゴリズムによって受信し、
前記複数のクエリのクエリへの応答を取得し、
前記複数のクエリの１つ又は２つ以上の他のクエリをクローリングする前に、前記クエリへの前記応答に基づいて、前記Ｌ＊アルゴリズムの観察テーブルを修正し、
前記修正した観察テーブルを使用して、前記ＧＵＩベースのアプリケーションに対して前記Ｌ＊アルゴリズムを実行して、前記複数のクエリの１つ又は２つ以上の他のクエリをクローリングする前に、前記修正した観察テーブルが閉じて無矛盾であるか否かを決定する、ことを更に含む、請求項１７に記載の１つ又は２つ以上のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、グラフィカルユーザインターフェース（Graphical User Interface、ＧＵＩ）ベースのアプリケーションのモデルを抽出するクローリングに関する。
【背景技術】
【０００２】
携帯機器のモバイルアプリケーションのような電子機器のグラフィカルユーザインターフェース（ＧＵＩ）ベースのアプリケーションは益々普及してきている。ＧＵＩベースのアプリケーションの多くは、ＧＵＩベースのアプリケーションの使用を容易にするタッチスクリーンによりグラフィカルユーザインターフェース上で実行される動作に基づく動作を実行する。しかしながら、ＧＵＩベースのアプリケーションのＧＵＩ及びタッチスクリーンのインタフェースはＧＵＩベースのアプリケーションの挙動の評価における課題も提供する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本明細書の主題は、多くの課題を解決する実施形態又は、上述の課題のような環境においてのみ作動する実施形態に限定されるものではない。むしろ、この背景技術は、本明細書で説明される実施形態が実施できる技術領域の一例を説明するためにのみ提供されるものである。
【課題を解決するための手段】
【０００４】
実施形態の一態様に従うと、グラフィカルユーザインターフェース（ＧＵＩ）ベースのアプリケーションをクローリングする方法は、グラフィカルユーザインターフェース（ＧＵＩ）ベースのアプリケーションの動作の第１シーケンスの第１時間クローリングを実行することを含む。第１時間クローリングは、動作の第１シーケンスがクローリングされる第１時間であってよい。また、動作の第１シーケンスは、動作の第１シーケンスよりも１つ又は２つ以上の付加的な動作を含む動作の第２シーケンスのプリフィックスであってもよい。また、この方法は、第１時間クローリングの間に動作の第２シーケンスをクローリングするように１つ又は２つ以上の付加的な動作により第１時間クローリングを拡張することを含んでもよい。さらに、この方法は、第１時間クローリングに基づいて動作の第１シーケンスに関連する第１入力／出力シーケンスを決定することを含んでもよい。加えて、この方法は、第１時間クローリングに基づいて動作の第２シーケンスに関連する第２入力／出力シーケンスを決定することを含んでもよい。
【０００５】
実施形態の目的及び利点は、少なくとも特許請求の範囲で具体的に挙げられた構成要素、機能及び組み合わせによって理解及び達成されることになるであろう。
【０００６】
上述の全般的な説明及び以下の詳細な説明は、典型的且つ説明的なものであり、特許請求の範囲に記載される発明を限定するものではないことが理解されるであろう。
【図面の簡単な説明】
【０００７】
【図１】図１は、ＧＵＩベースのアプリケーションのモデルを生成するシステムの一例を示す図である。
【図２Ａ】図２Ａは、ＧＵＩベースのアプリケーションの表示及び画面情報の一例を示す図である。
【図２Ｂ】図２Ｂは、図２Ａに示すＧＵＩベースのアプリケーションに関連する状態の間の遷移の一例を示す図である。
【図２Ｃ】図２Ｃは、図２Ａに示すＧＵＩベースのアプリケーションのために生成できる決定論有限状態機械（deterministic finite state machine 、ＤＦＳＭ）の一例を示す図である。
【図３Ａ】図３Ａは、ＧＵＩベースのアプリケーションのＤＦＳＭモデルを生成する方法の一例を示す図である。
【図３Ｂ】図３Ｂは、図３Ａに示す方法を使用して生成できるＧＦＳＭ推測モデルの一例を示す図である。
【図４】図４は、ＧＵＩベースのアプリケーションを先制的にクローリングする方法の一例のフローチャートである。
【図５】図５は、ＧＵＩベースのアプリケーションを冗長的なクローリングを削減する方法の一例のフローチャートである。
【図６】図６は、図５に示す方法を実装する方法の一例のフローチャートである。
【図７】図７は、推測モデルが、関連するＧＵＩベースのアプリケーションを十分にモデル化しているか否かを決定する方法の一例のフローチャートである。
【発明を実施するための形態】
【０００８】
例示的な実施形態は、添付図面を使用して更に具体的且つ詳細に記載且つ説明されることになる。
【０００９】
以下に詳細に説明するように、本開示のいくつかの実施形態は、グラフィカルインタフェース（ＧＵＩ）ベースのアプリケーション（以下、ＧＵＩベースのアプリケーションとも称する）のクローリング（crawl、クロール（crawling）とも称される）を実施するように構成された分析モジュールを含んでもよい。分析モジュールは、ＧＵＩベースのアプリケーションの入力／出力シーケンスのようなＧＵＩベースのアプリケーションの挙動（behavior）を学習するためにクローリングを実行するように構成されてもよい。分析モジュールは、ＧＵＩベースのアプリケーションの冗長なクローリング及び／又はオンデマンドのクローリング（on-demand crawling）を削減できるようにクローリングを実行するように構成されてもよい。例えば、以下に詳細に説明するように、分析モジュールは、動作の第１シーケンス（a first sequence of actions）、及び動作の第１シーケンスの拡張である動作の第２シーケンスの別個のクローリングを削減又は除去するようにＧＵＩベースのアプリケーションをクローリングするように構成されてもよい。これにより、動作の第１シーケンスに関連するＧＵＩベースのアプリケーション及び動作の第２シーケンスに関連するＧＵＩベースのアプリケーションの挙動（例えば、動作の第１シーケンス及び動作の第２シーケンスに関連する入力／出力シーケンス）は、同一のクローリングから決定されてもよい。
【００１０】
一方、従来のクローリング方法では、１つのクローリングの間に動作の第１シーケンスをクローリングし、次いで別のクローリングの間に動作の第２シーケンスをクローリングしてもよい。したがって、従来のクローリングの動作の第２シーケンスのために実行される別のクローリングは、動作の第１シーケンスを冗長的に再びグローニングするものである。このように、分析モジュールは、他のクローリング方法と比較すると冗長なクローリングを削減できるようにＧＵＩベースのアプリケーションをクローリングするように構成してもよい。
【００１１】
本開示において、動作の拡張されたシーケンスに含まれる動作のシーケンスは、動作の拡張されたシーケンスの「プリフィックス（prefix）」とも称される。例えば、上述の動作の第１シーケンスは、動作の第２シーケンスのプリフィックスと称してもよい。加えて、動作のシーケンスは、動作のシーケンスの長さに依存していくつものプリフィックスを含んでもよい。例えば、動作のシーケンス「Ａ．Ｂ．Ｃ．Ｄ」は、プリフィックスとして「Ａ」を有してもよく、プリフィックスとして「Ａ．Ｂ」を有してもよく、他のプリフィックスとして「Ａ．Ｂ．Ｃ」を有してもよい。
【００１２】
以下で詳細に説明されるように、分析モジュールは、本開示で説明されるクローリングと共に、ＧＵＩベースのアプリケーションのミーリ・マシンモデルのような決定論有限状態機械モデル（以下、ＤＦＳＭとも称される）を生成するように構成されてもよい。ＤＦＳＭモデルは、ＧＵＩベースのアプリケーションの挙動を示してもよい。いくつかの実施形態では、ＤＦＳＭモデルは、ＧＵＩベースのアプリケーションの開発及び検査の間に使用されてもよい。いくつかの例では、ＤＦＳＭモデルを使用してＧＵＩベースのアプリケーションがＧＵＩベースのアプリケーションの開発者により期待及び所望されるような機能及び構成を含むか否かを決定してもよい。このように、ＤＦＳＭモデルを使用して、ＧＵＩベースのアプリケーションの機能を所望なように修正できるように、所望の機能をする１つ又は２つ以上のＧＵＩベースのアプリケーションの構成を識別してもよい。このように、ＧＵＩベースのアプリケーションの設計は、ＤＦＳＭモデルに基づいて修正して、ＧＵＩベースのアプリケーションのモデル駆動開発（model-driven development、ＭＤＤ）及びモデルベーステスト（Model-besed testing、ＭＢＴ）を補助してもよい。
【００１３】
本発明の実施形態は、添付図面を参照して説明されることになる。
【００１４】
図１は、本開示の少なくとも１つの実施形態に従って配置されたＧＵＩベースのアプリケーション１０２のＤＦＳＭモデルを生成する一例のシステム１００を示す図である。ＧＵＩベースのアプリケーション１０２は、電子機器に含まれてもよい適当なＧＵＩベースのアプリケーションにしてもよい。電子機器は、タブレット型コンピュータ、ナビゲーションシステム、娯楽系システム、デスクトップコンピュータ、ラップトップコンピュータ及びデジタル音楽プレーヤ等を含んでもよいが、これらに限定されることはない。
【００１５】
ＧＵＩベースのアプリケーション１０２は、それぞれがＧＵＩベースのアプリケーション１０２の特定の表示（以下、「表示（views）」とも称する）に関連する１つ又は２つ以上の明確なＧＵＩ要素を含んでもよい。表示は、互いに排他的な方法で実行されてもよく、ＧＵＩベースのアプリケーション１０２により実行される動作の少なくともいくつかに関連してもよい。ＧＵＩベースのアプリケーションの表示の例は、図２Ａを参照して説明される。
【００１６】
ＧＵＩベースのアプリケーションのそれぞれの表示は、１つ又は２つ以上の明確な画面情報（screen）に関連してもよい。ここで、それぞれの画面情報は、ＧＵＩベースのアプリケーション１０２の動作の少なくとも一部に支持されると共に、１つ又は２つ以上の画面情報上の動作に対するＧＵＩベースのアプリケーション１０２の応答を示してもよい。ＧＵＩベースのアプリケーション１０２の動作の少なくとも一部を支持するために、それぞれの画面情報は、１つ又は２つ以上のウィジェットを含んでもよい。それぞれのウィジェットは、ウィジェットに対してユーザが実行する１つ又は２つ以上の動作に基づいてＧＵＩベースのアプリケーション１０２の動作の１つ又は２つ以上を実行するように構成されてもよい。例えば、ウィジェットは、ＧＵＩベースのアプリケーション１０２のＧＵＩ上のボタンとして表示されてもよく、携帯機器のタッチスクリーンを介するウィジェットのタップに基づいて第１のアクションを実行するように構成されてもよい。同一のウィジェットは、タッチスクリーンを介してウィジェット上で実行される長いタップ又は他のいくつかの動作に基づいて第２の動作を実行するように構成されてもよい。加えて、いくつかの例では、画面情報全体をウィジェットとして構成してもよい。例えば、画面情報をスワイプすることで、ＧＵＩベースのアプリケーション１０２は、他の画面情報に遷移するようにしてもよい。ＧＵＩベースのアプリケーションの表示の画面情報の一例は、図２Ａを参照して説明される。
【００１７】
加えて、それぞれの画面情報は、ＧＵＩベースのアプリケーション１０２の１つ又は２つの状態に関連してもよい。いくつかの実施形態において、ＧＵＩベースのアプリケーション１０２の状態は、画面情報に関連する１つ又は２つ以上のウィジェットの状態に基づいてもよい。ウィジェットの状態は、ウィジェットを記述する１つ又は２つ以上の属性の値により示されてもよい。例えば、ウィジェットの異なる状態は、ウィジェットがイネーブルであるかディセーブルであるかに基づいてもよく、表示可能か又は表示可能でないかに基づいてもよく、不透明化又は不透明でないか等に基づいてもよい。このように、ＧＵＩベースのアプリケーション１０２は、画面情報に関連してもよいウィジェットの状態の数に基づく特定の画面情報に関連する複数の状態を含んでもよい。
【００１８】
また、画面情報に関連するＧＵＩベースのアプリケーション１０２の状態は、画面情報に到達する前に到達した先の状態又は画面情報に影響されてもよい。例えば、いくつかの例では、特定の画面情報は、第１の先の画面情報及び第２の先の画面情報から到達してもよい。このように、いくつかの実施形態では、ＧＵＩベースのアプリケーション１０２は、第１の先の画面情報から特定の画面情報に到達することに関連する特定の画面情報に関連する状態を含んでもよく、第２の先の画面情報から特定の画面情報に到達することに関連する特定の画面情報に関連する他の状態を含んでもよい。同様に、これらの実施形態又は他の実施形態では、特定の画面情報で動作「Ａ」を実行することにより、いくつかの例における第１の後続の画面情報に遷移してもよく、他の例では、特定の画面情報における動作「Ａ」の実行により、第２の後続の画面情報に遷移してもよい。このように、いくつかの実施形態では、ＧＵＩベースのアプリケーション１０２は、動作「Ａ」に基づく第１の後続の画面情報に到達することに関連する特定の画面情報に関連する状態を含んでもよく、動作「Ａ」に基づく第２の後続の画面情報に到達することに関連する特定の画面情報に関連する他の状態を含んでもよい。以下に詳細に説明するように、ＧＵＩベースのアプリケーション１０２の画面情報で実行される動作の出力は、ＧＵＩベースのアプリケーション１０２の異なる状態に関連してもよい。
【００１９】
上述のように、図２Ａは、本開示で説明される少なくともいくつかの実施形態に従って配置された、エンドユーザ使用許諾契約（End User License Agreement、ＥＵＬＡ）コンポーネントと共にＧＵＩベースのアプリケーション２０２の表示及び画面情報の例示を示す図である。アプリケーション２０２は、「サンプルアプリケーション２０２」とも称される。上述のように、サンプルアプリケーション２０２は、サンプルアプリケーション２０２が使用可能になる前に許諾することをユーザが要求される一連の条項を含むＥＵＬＡを含んでもよい。実例的な目的及び簡素化のために、サンプルアプリケーション２０２の機能は、ＥＵＬＡの種々の条項をユーザが受諾するか否かに関連するサンプルアプリケーション２０２の実行に対して説明される。したがって、ライセンス条項が受諾されたとき又は受諾されなかったときのサンプルアプリケーション２０２の動作に対するサンプルアプリケーション２０２の機能及び状態は、サンプルアプリケーション２０２のメイン動作状態及びサンプルアプリケーション２０２の許諾契約未承認動作状態としてそれぞれ簡素化される。
【００２０】
例えば、サンプルアプリケーション２０２は、ＥＵＬＡの第１のライセンス条項を許諾したことに関連する第１条項表示２０４、ＥＵＬＡの第２のライセンス条項を許諾したことに関連する第２条項表示２０６、及びＥＵＬＡの第３のライセンス条項を許諾したことに関連する第３条項表示２０８を含んで記載される。また、サンプルアプリケーション２０２は、ＥＵＬＡの第１条項、第２条項及び第３条項が許諾された後のサンプルアプリケーション２０２に関連するサンプルアプリケーション２０２のメイン動作に関連するサンプルアプリケーション２０２の１つ又は２つ以上の表示を示すメイン動作表示２１０を含んでもよい。加えて、サンプルアプリケーション２０２は、ＥＵＬＡのライセンス条項の１つ又は２つ以上が受諾されたときのサンプルアプリケーション２０２の動作に関連するサンプルアプリケーション２０２の１つ又は２つ以上の表示を示す許諾契約未承認表示２１２を含んでもよい。上述のように、本開示で説明されるサンプルアプリケーション２０２の特定の例は、説明のための典型的な例である。したがって、サンプルアプリケーション２０２は、説明された例よりも多くの付加的な表示及び動作を有してもよい。
【００２１】
また、サンプルアプリケーション２０２は、表示２０４、２０６、２０８、２１０及び２１２に関連する画面情報を含んでもよい。例えば、サンプルアプリケーション２０２は、第１条項表示２０４に関連する第１条項画面情報２１４を含んでもよく、第２条項表示２０６に関連する第２条項画面情報２１６を含んでもよく、第３条項表示２０８に関連する第３条項画面情報２１８を含んでもよい。また、サンプルアプリケーション２０２は、サンプルアプリケーション２０２のメイン動作に関連するサンプルアプリケーション２０２の１つ又は２つ以上の画面情報を示すメイン動作画面情報２２０を含むように記載されてもよい。同様に、サンプルアプリケーション２０２は、ＥＵＬＡの１つ又は２つ以上の条項が未承認であるときのサンプルアプリケーション２０２の動作に関連するサンプルアプリケーション２０２の１つ又は２つ以上の画面情報を示す許諾契約未承認画面情報２２２を含むように記載されてもよい。
【００２２】
説明される実施形態において、サンプルアプリケーション２０２は、サンプルアプリケーション２０２を起動するユーザに対して第１条項画面情報２１４を開いてもよい。第１条項画面情報２１４は、ＥＵＬＡの第１のライセンス条項の許諾に関連する１つ又は２つ以上のウィジェットを含んでもよい。例えば、第１条項画面情報２１４は、関連する「Ｙｅｓ」ボタンをユーザがタップした（第１のライセンス条項の受諾を示す）ときにサンプルアプリケーション２０２が第２条項画面情報２１６に遷移するように構成された「Ｙｅｓ」ウィジェット２２４を含んでもよい。また、第１条項画面情報２１４は、関連する「Ｎｏ」ボタンをユーザがタップした（第１のライセンス条項の未承認を示す）ときにサンプルアプリケーション２０２が、許諾契約未承認画面情報２２２及び関連する未承認表示２１２として示される未承認画面情報及び表示に遷移するように構成された「Ｎｏ」ウィジェット２２６を含んでもよい。
【００２３】
同様に、第２条項画面情報２１６は、関連する「Ｙｅｓ」ボタンをユーザがタップした（第２のライセンス条項の受諾を示す）ときにサンプルアプリケーション２０２が第３条項画面情報２１８に遷移するように構成された「Ｙｅｓ」ウィジェット２２８を含んでもよい。また、第２条項画面情報２１６は、関連する「Ｎｏ」ボタンをユーザがタップした（第２のライセンス条項の未承認を示す）ときにサンプルアプリケーション２０２が、許諾契約未承認画面情報２２２及び関連する未承認表示２１２として示される未承認画面情報及び表示に遷移するように構成された「Ｎｏ」ウィジェット２３０を含んでもよい。
【００２４】
対応するように、第３条項画面情報２１８は、関連する「Ｙｅｓ」ボタンをユーザがタップした（第３のライセンス条項の受諾を示す）ときにサンプルアプリケーション２０２がメイン動作画面情報２２０及びメイン動作表示２１０として示されるメイン動作画面情報及びメイン動作表示に遷移するように構成された「Ｙｅｓ」ウィジェット２３２を含んでもよい。また、第３条項画面情報２１８は、関連する「Ｎｏ」ボタンをユーザがタップしたとき（第３のライセンス条項の未承認を示す）にサンプルアプリケーション２０２が、許諾契約未承認画面情報２２２及び関連する未承認表示２１２として示される未承認画面情報及び表示に遷移するように構成された「Ｎｏ」ウィジェット２３４を含んでもよい。
【００２５】
本開示の範囲を逸脱することなく図２Ａに示す実施形態を修正してもよい。例えば、具体的に記載されていないものの、メイン動作画面情報２２０により示される１つ又は２つ以上の画面情報は、サンプルアプリケーション２０２が関連する１つ又は２つ以上の動作を実行する１つ又は２つ以上のウィジェットを含んでもよい。同様に、許諾契約未承認画面情報２２２により示される１つ又は２つ以上の画面情報は、関連する１つ又は２つ以上の動作を実行する１つ又は２つ以上のウィジェットを含んでもよい。さらに、サンプルアプリケーション２０２は、多くの他の機能、表示、画面情報及び／又はウィジェットを含んでもよい。特定の例は、単に説明を補助するであり限定されるものではない。
【００２６】
図１を更に参照すると、ウィジェットに対して実行される動作は、ＧＵＩベースのアプリケーション１０２の出力をもたらしてもよい。ここで、ＧＵＩベースのアプリケーション１０２は、ＧＵＩベースのアプリケーション１０２の１つの状態からＧＵＩベースのアプリケーション１０２の他の状態に遷移してもよい。遷移は、同一の画面情報及び表示に関連する状態の間であってもよく、同一の表示及び／又は異なる表示に含まれてもよい異なる画面情報に関連する状態に含まれる異なる画面情報に関連する状態の間であってもよい。
【００２７】
図２Ｂは、本開示の少なくとも１つの実施形態に従う図２Ａのサンプルアプリケーション２０２に関連する状態の間の遷移を例示する図である。説明される実施形態において、サンプルアプリケーション２０２は、第１条項画面情報２１４に関連する第１条項状態２４４、第２条項画面情報２１６に関連する第２条項状態２４６、及び第３条項画面情報２１８に関連する第３条項状態２４８を含んでもよい。さらに、サンプルアプリケーション２０２のメイン動作は、説明される実施形態においてメイン動作状態２５０として示されてもよい。加えて、ＥＵＬＡのライセンス条項の１つ又は２つ以上が許諾されなかったときのサンプルアプリケーション２０２の動作は、許諾契約未承認状態２５２として示されてもよい。
【００２８】
サンプルアプリケーション２０２は、サンプルアプリケーション２０２のユーザの起動に応じて第１条項画面情報２１４及び第１条項状態２４４を開いてもよい。サンプルアプリケーション２０２は、ユーザが、第１条項画面情報２１４の「Ｙｅｓ」ウィジェット２２４に関連する「Ｙｅｓ」ボタンをタップすることに応じて第１条項状態２４４から第２条項画面情報２１６及び関連する第２条項状態２４６に遷移してもよい。また、サンプルアプリケーション２０２は、ユーザが、第１条項画面情報２１４の「Ｎｏ」ウィジェット２２６に関連する「Ｎｏ」ボタンをタップすることに応じて第１条項状態２４４から許諾契約未承認状態２５２及び関連する許諾契約未承認画面情報２２２に遷移してもよい。
【００２９】
サンプルアプリケーション２０２は、ユーザが、第２条項画面情報２１６の「Ｙｅｓ」ウィジェット２２８に関連する「Ｙｅｓ」ボタンをタップすることに応じて第２条項状態２４６から第３条項画面情報２１８及び関連する第３条項状態２４８に遷移してもよい。また、サンプルアプリケーション２０２は、ユーザが、第２条項画面情報２１６の「Ｎｏ」ウィジェット２３０に関連する「Ｎｏ」ボタンをタップすることに応じて第２条項状態２４６から許諾契約未承認状態２５２及び関連する許諾契約未承認画面情報２２２に遷移してもよい。
【００３０】
サンプルアプリケーション２０２は、ユーザが、第３条項画面情報２１８の「Ｙｅｓ」ウィジェット２３２に関連する「Ｙｅｓ」ボタンをタップすることに応じて第３条項状態２４８からメイン動作状態２５０及び関連するメイン動作画面情報２２０に遷移してもよい。また、サンプルアプリケーション２０２は、ユーザが、第３条項画面情報２１８の「Ｎｏ」ウィジェット２３４に関連する「Ｎｏ」ボタンをタップすることに応じて第３条項状態２４８から許諾契約未承認状態２５２及び関連する許諾契約未承認画面情報２２２に遷移してもよい。
【００３１】
図１を再び参照すると、ＧＵＩベースのアプリケーション１０２は、ＧＵＩベースのアプリケーション１０２のＤＦＳＭモデル１０６を生成するように構成してもよい分析モジュール１０４により受信されるように構成されてもよい。いくつかの実施形態において、分析モジュール１０４は、プロセッサ１０８及びメモリ１１０を含んでもよい。プロセッサ１０８は、適切な特定用途のコンピュータ及び汎用のコンピュータ、若しくは種々のコンピュータハードウェア又はソフトウェアを含むコンピュータエンティティ又は処理装置を含んでもよく、コンピュータが読み取り可能な適切な媒体に格納された命令を実行するように構成されてもよい。例えば、プロセッサ１０８は、マイクロプロセッサ、マイクロコントローラ、デジタル信号処理（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）又はプログラムの命令を解釈及び／又は実行する及び／又はデータを処理するように構成された他のデジタル回路又はアナログ回路を含んでもよい。図１には単一のプロセッサとして記載されているものの、プロセッサ１０８はいくつもの操作を実行するように構成されたいくつものプロセッサを含んでもよい。
【００３２】
メモリ１１０は、コンピュータ実行可能な命令又はデータ構造を格納して運搬又は所有するコンピュータ読み取り可能な媒体を含んでもよい。コンピュータ読み取り可能な媒体は、汎用コンピュータ又は特定用途コンピュータによりアクセスできる入手可能な媒体であってもよい。限定されない例示では、コンピュータが読み取り可能な媒体は、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、電気的に消去可能なプログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）又は他の光学ディスク記憶装置、磁気ディスク記憶装置又は他の磁気記憶デバイス、フラッシュメモリデバイス（固体メモリデバイス等）又は所望のプログラムコードをコンピュータが実行可能な命令又はデータ構造で運搬又は格納するために使用され、汎用コンピュータ又は特定用途コンピュータによりアクセス可能な他の記憶媒体又は一時的でないコンピュータ読み取り可能な記憶媒体であってもよい。また、上述の機器を組み合わせたものは、コンピュータ読み取り可能な媒体に含まれてもよい。例えば、コンピュータ読み取り可能な命令は、プロセッサ１０８が特定の機能又は一群の機能を実行する命令及びデータを含んでもよい。
【００３３】
いくつかの実施形態では、分析モジュール１０４は、ＧＵＩベースのアプリケーション１０２の挙動を示すミーリ・マシンモデルとしてＤＦＳＭモデル１０６を生成するように構成してもよい。例えば、いくつかの実施形態では、分析モジュール１０４は、図２Ｂに示されるサンプルアプリケーション２０２の挙動をモデル化する図２Ａ及び２Ｂのサンプルアプリケーション２０２のミーリ・マシンモデルをＤＦＳＭモデル１０６として生成するように構成してもよい。
【００３４】
いくつかの実施形態では、分析モジュール１０４は、ダイナミッククローリング及びＬ＊アルゴリズムと称される既知のアクティブラーニングアルゴリズム又はその異なる変形を使用してＤＦＳＭモデル１０６を生成するように構成されてもよい。一般的に、Ｌ＊アルゴリズムは、観察されたＩ／Ｏシーケンスと一致する検査時のシステムの有限状態モデルがＬ＊アルゴリズムにより生成されるように、検査時にシステムに関連する入力／出力（Ｉ／Ｏ）シーケンスを実行するアルゴリズム（例えば、ＧＵＩベースのアプリケーション１０２）である。いくつかの実施形態では、Ｌ＊アルゴリズムの特定の変形を採用して、出力が現在の状態及入力値に基づいて決定されてもよいシステムのミーリ・マシンモデルを学習してもよい。
【００３５】
一般的に、Ｌ＊アルゴリズム及び関連するＤＦＳＭモデルは、有限入力領域及び有限出力領域によって有限状態システムの挙動を決定し且つモデル化するのに有用である。しかしながら、一般的に、ＧＵＩベースのアプリケーション（例えばＧＵＩベースのアプリケーション１０２）は、必然的にシステムの有限状態形式になるものではない。したがって、分析モジュール１０４は、ＧＵＩベースのアプリケーション１０２がＬ＊アルゴリズムが有限状態システムとして使用可能になるように示されてもよい。
【００３６】
いくつかの実施形態では、分析モジュール１０４は、実際のデータの代わりに入力タイプ及び出力タイプとして入力データ及び出力データをモデル化するために抽象化を実行するように構成されてもよい。抽象化により入力データ及び／又は出力データの無限の可能性があるインスタンスにおける有限数の状態が可能になる。このように、抽象化は、ＧＵＩベースのアプリケーション１０２が有限でないときに、有限状態のシステムとして示すことができるように、ＧＵＩベースのアプリケーション１０２をモデル化する。ＧＵＩベースのアプリケーションのモデル化におけるＬ＊アルゴリズムの使用に対する他の情報と同様に、実行される抽象化の更なる説明は、参照することにより内容が本明細書に組み込まれる２０１３年９月１３日に出願された名称が「EXTRACTING A DETERMINISTIC FINITE-STATE MACHINE MODEL OF A GUI-BASED APPLICATION」という米国特許出願番号14/027,017に記載される。
【００３７】
また、Ｌ＊アルゴリズムは、検査時のシステムに関連する全ての動作及び命令（例えば、ＧＵＩベースのアプリケーション１０２）は、検査時のシステムの全ての状態で利用可能であるという仮定に基づいて動作してもよい。しかしながら、これは、ＧＵＩベースのアプリケーションによくあることではない。この問題に対処するために、分析モジュール１０４は、ＧＵＩベースのアプリケーションの真の挙動を拡張して、特定の状態で利用できなくなる動作がエラー出力を生成する場合に、エラー状態及びエラー出力として動作し、エラー状態に遷移することになるＧＵＩベースのアプリケーション１０２のダミー状態及びダミー出力を生成することによってＬ＊による分析に適切なものにしてもよい。このように、ＧＵＩベースのアプリケーション１０２をモデル化して、ＧＵＩベースのアプリケーション１０２に関連する全ての動作を、動作が特定の画面情報及び状態で実際に利用できないときにおいてもＧＵＩベースのアプリケーション１０２の全ての状態が利用可能になるようにモデル化してもよい。
【００３８】
例えば、以下の動作は、図２Ａ及び２Ｂのサンプルアプリケーション２０２に対して実行してもよい。すなわち、サンプルアプリケーション２０２に関連するアイコンをタップしてサンプルアプリケーション２０２を起動し（以下、「Ｉｎｉｔ」とも称する）、「Ｙｅｓ」ウィジェット２２４、２２８及び２３２の１つに関連する「Ｙｅｓ」ボタン（以下、「Ｙ」とも称する）をタップし、「Ｎｏ」ウィジェット２２６、２３０及び２３４の１つに関連する「Ｎｏ」ボタン（以下、「Ｎ」とも称する）をタップする。メイン動作画面情報２２０又は許諾契約未承認画面情報２２２に関連する他の動作は、本実施例では、サンプルアプリケーション２０２を簡明化するために取り除いてもよい。他の動作は、上述の説明において「Ｔ」と示されてもよい。これらの動作の全ては、全ての画面情報又は全ての状態で利用可能でなくてもよい。例えば、動作「Ｉｎｉｔ」及び動作「Ｔ」は、第１条項状態２４４の第１条項画面情報２１４で利用可能でなくてもよい。
【００３９】
サンプルアプリケーション２０２に対してＬ＊アルゴリズムの使用及びＤＦＳＭモデルの生成を可能にするために、ダミーエラー状態及びダミーエラー出力をサンプルアプリケーション２０２のために生成して、特定の状態では動作が利用できないために実際には不可能であるサンプルアプリケーション２０２の遷移及び遷移に関連する出力を、ダミーエラー状態及びダミーエラー出力により捕捉してもよい。例えば、第１条項状態２４４の第１条項画面情報２１４において利用可能でない動作「Ｉｎｉｔ」及び動作「Ｔ」の実行は、ダミーエラー出力を生成する応答を有するようにモデル化し、第１条項状態２４４からダミーエラー状態への遷移をもたらす。このように、利用可能でない動作「Ｉｎｉｔ」及び動作「Ｔ」は、第１条項状態２４４の第１条項画面情報２１４において実際には利用可能でないのにもかかわらず、第１条項状態２４４の第１条項画面情報２１４において利用可能なようにモデル化されてもよい。
【００４０】
図１を再び参照すると、Ｌ＊アルゴリズムは、検査時のシステム（例えば、ＧＵＩベースのアプリケーション１０２）に関連する初期状態で始まるように構成されてもよい。ここで、初期状態は、毎回同一の状態であってもよい。しかしながら、いくつかの例では、ＧＵＩベースのアプリケーション（例えば、ＧＵＩベースのアプリケーション１０２）は、２つ以上の初期状態を含んでもよい。このように、ＧＵＩベースのアプリケーション１０２に対してＬ＊アルゴリズムの使用を可能にするために、分析モジュール１０４は、ＧＵＩベースのアプリケーション１０２のダミー初期状態を生成してもよい。分析モジュール１０４は、ダミー初期状態のダミー入力動作に応じたダミー初期状態から実際の初期状態への遷移をモデル化することによって、実際の初期状態で開始するようにＧＵＩベースのアプリケーション１０２をモデル化するように構成してもよい。
【００４１】
例えば、分析モジュール１０４は、第１の初期状態及び第２の初期状態を含むとき、ＧＵＩベースのアプリケーション１０２のダミー初期状態を生成してもよい。分析モジュール１０４は、ダミー初期状態において実行される第１のダミー動作に基づいてダミー初期状態から第１の初期状態への遷移を生成することによって、第１の初期状態から開始するようにＧＵＩベースのアプリケーション１０２をモデル化してもよい。分析モジュール１０４は、ダミー初期状態において実行される第２のダミー動作に基づいてダミー初期状態から第２の初期状態への遷移を生成することによって、第２の初期状態から開始するようにＧＵＩベースのアプリケーション１０２をモデル化してもよい。
【００４２】
上述のＧＵＩベースのアプリケーション１０２のモデル化に基づいて、分析モジュール１０４は、ＧＵＩベースのアプリケーションをダイナミッククローリングしＬ＊アルゴリズムを実行することによって、ＤＦＳＭモデル１０６を生成するように構成されてもよい。いくつかの実施形態において、分析モジュール１０４は、図３〜７を参照して以下に説明される方法３００、４００、５００、６００及び７００に従って、ＤＦＳＭモデル１０６を生成するように構成してもよい。上述のように、ＤＦＳＭモデル１０６を使用してＧＵＩベースのアプリケーション１０２を検査して、所望の予測のように実行するＧＵＩベースのアプリケーション１０２に関連するバグ又は他の問題を発見してもよい。
【００４３】
図２Ｃは、本開示の少なくとも１つの実施形態に従う、サンプルアプリケーション２０２のために生成可能なＤＦＳＭモデル２６０（以下、「モデル２６０」とも称する）の一例を示す図である。モデル２６０は、「ｅ」が付され、上述のダミー初期状態として動作してもよいダミー初期状態２６２を含んでもよい。ダミー初期状態は、サンプルアプリケーション２０２における実際の動作によりダミー初期状態に到達することはないので、空値又はダミーアクションに対する応答として示してもよい。
【００４４】
モデル２６０は、上述の第１条項状態２４４及び第１条項画面情報２１４に対応する初期状態２６４を含んでもよい。図２Ｂを参照して説明したように、サンプルアプリケーション２０２を起動することによって、第１条項画面情報が出力として表示されてもよい。このように、モデル２６０は、ダミー初期状態２６２から初期状態２６４への遷移を示す遷移エッジ２７６を含んでもよい。説明される実施形態では、ダミー初期状態２６２から初期状態２６４への遷移は、サンプルアプリケーション２０２に対して起動動作が実行されること（「Ｉｎｉｔ」で示され初期状態２６４の符号が付される）によって、サンプルアプリケーション２０２が第１条項画面情報２１４を表示又は出力する（「Ｏ」で示される）ようにすることを示す「Ｉｎｉｔ／Ｏ」のＩ／Ｏシーケンスによって示される。
【００４５】
モデル２６０は、ダミーエラー状態２７２と、ダミー初期状態２６２からダミーエラー状態２７２への遷移を示す遷移エッジ２９２を含んでもよい。説明される実施形態において、遷移エッジ２９２で示されるダミー初期状態２６２からダミーエラー状態への遷移は、「Ｓｉｇｍａ」がサンプルアプリケーション２０２に関連する全ての動作を示し、「Ｓｉｇｍａ−｛Ｉｎｉｔ｝」が「Ｉｎｉｔ」を除くすべての動作がサンプルアプリケーションを起動するためにダミー初期状態２６２において利用できないことを示すＩ／Ｏシーケンス「Ｓｉｇｍａ−｛Ｉｎｉｔ｝／Ｘ」によって示されてもよい。このように、ダミー初期状態２６２において利用可能でない動作「Ｓｉｇｍａ−｛Ｉｎｉｔ｝」を実行することによりダミーエラー状態２７２（「Ｓｉｇｍａ」としても示される）に遷移し、ダミー出力「Ｘ」を生成する。
【００４６】
さらに、モデル２６０は、初期状態２６４から１つ又は２つ以上の動作を実行することによって到達可能な後続状態２６６及び２６８を含んでもよい。説明される実施形態において、後続状態２６６は、上述の第２条項状態２４６及び第２条項画面情報２１６に対応してもよい。図２Ｂに示すように、サンプルアプリケーション２０２は、第１条項画面情報２１４の「Ｙｅｓ」ウィジェットに関連する「Ｙｅｓ」ボタンをタップすることによって第２条項状態２４６に遷移してもよい。このように、モデル２６０は、Ｉ／Ｏシーケンス「Ｙ／Ｏ」で示される初期状態２６４から後続状態２６６への遷移を示す遷移エッジ２７８を含んでもよい。ここで、「Ｏ」は、「Ｙｅｓ」ボタンのタップへの出力として第２条項画面情報２１６の生成を示す。また、後続状態２６６は、入力シーケンス「Ｉｎｉｔ．Ｙ」が付されて後続状態２６６がもたらされる入力シーケンスを示してもよい。
【００４７】
説明される実施形態において、後続状態２６８は、上述の第３条項状態２４８及び第３条項画面情報２１８に対応してもよい。図２Ｂに示すように、サンプルアプリケーション２０２は、第２条項画面情報２１６の「Ｙｅｓ」ウィジェット２２６に関連する「Ｙｅｓ」ボタンをタップすることによって、第２条項状態２４６から第３条項状態２４８に遷移してもよい。このように、モデル２６０は、後続状態２６６から後続状態２６８への遷移を示すＩ／Ｏシーケンス「Ｙ／Ｏ」で示される遷移エッジ２８４を含んでもよい。ここで、「Ｏ」は、「Ｙｅｓ」ボタンのタップの出力として第３条項画面情報２１８を生成することを示す。また、後続状態２６８は、後続状態２６８をもたらす入力シーケンスを示す入力シーケンス「Ｉｎｔ．Ｙ．Ｙ」と示されてもよい。
【００４８】
また、モデル２６０は、上述のメイン動作状態２５０及びメイン動作画面情報２２０に対応するメイン状態２７０を含んでもよい。図２Ｂに示すように、サンプルアプリケーション２０２は、第３条項画面情報２１８の「Ｙｅｓ」ウィジェット２３２に関連する「Ｙｅｓ」ボタンのタップによって、第３条項状態２４８からメイン動作状態２５０に遷移してもよい。このように、モデル２６０は、後続状態２６８からメイン状態２７０への遷移を示すＩ／Ｏシーケンス「Ｙ／ＯS」で示される遷移エッジ２９０を含んでもよい。ここで、「ＯS」は、「Ｙｅｓ」ボタンのタップの出力としてメイン動作画面情報２２０を生成することを示す。また、後続状態２６８は、メイン状態２７０をもたらす入力シーケンスを示す入力シーケンス「Ｉｎｔ．Ｙ．Ｙ．Ｙ」と示されてもよい。
【００４９】
また、モデル２６０は、フェイル状態２７４を含んでもよい。フェイル状態２７４は、上述の許諾契約未承認状態２５２及び許諾契約未承認画面情報２２２に対応してもよい。図２Ｂに示すように、サンプルアプリケーション２０２は、対応する第１条項画面情報２１４、第２条項画面情報２１６、又は第３条項画面情報２１８のそれぞれの「Ｎｏ」ウィジェットに関連する「Ｎｏ」ボタンのタップによって、第１条項状態２４４、第２条項状態２４６、又は第３条項状態２４８から未承認状態２５２に遷移してもよい。このように、モデル２６０は、初期状態２６４からフェイル状態２７４への遷移を示すＩ／Ｏシーケンス「Ｎ／ＯF」で示される遷移エッジ２８０、後続状態２６６からフェイル状態２７４への遷移を示すＩ／Ｏシーケンス「Ｎ／ＯF」で示される遷移エッジ２８６、後続状態２６８からフェイル状態２７４への遷移を示すＩ／Ｏシーケンス「Ｎ／ＯF」で示される遷移エッジ２８８を含んでもよい。Ｉ／Ｏシーケンス「Ｎ／ＯF」において、「ＯF」は、関連する「Ｎｏ」ボタンのタップの出力として未承認画面情報２２２を生成することを示す。また、フェイル状態２７４は、フェイル状態２７４をもたらす入力シーケンスを示す入力シーケンス「Ｉｎｔ．Ｎ」と示されてもよい。
【００５０】
Ｉ／Ｏシーケンス「Ｔ／ＯS」に関連するメイン状態２７０の自己遷移エッジ２９５は、メイン動作状態２５０で利用可能な動作「Ｔ」に応答してメイン状態２７０に留まることを示す。同様に、Ｉ／Ｏシーケンス「Ｔ／ＯF」に関連するフェイル状態２７４の自己遷移２９９は、未承認状態２５２で利用可能な動作「Ｔ」に応答してフェイル状態２７４に留まることを示す。上述のように、メイン動作状態２５０及び／又は未承認状態２５２は、サンプルアプリケーション２０２に関連する他のいくつかの状態及び／又は画面情報を含み、メイン状態２７０及び／又はフェイル状態２７４はサンプルアプリケーション２０２のいくつかの状態を示してもよい。
【００５１】
モデル２６０は、初期状態２６４からダミーエラー状態２７２への遷移を示す遷移エッジ２８２を含んでもよい。説明される実施形態では、遷移エッジ２８２で示される初期状態２６４からダミーエラー状態２７２への遷移は、動作「Ｉｎｉｔ」及び動作「Ｔ」は、初期状態２６４に関連するサンプルアプリケーション２０２の第１条項画面情報２１４で利用できない動作なので、Ｉ／Ｏシーケンス「｛Ｉｎｉｔ，Ｔ｝／Ｘ」で示されてもよい。同様に、遷移エッジ２８８は後続状態２６６からダミーエラー状態２７２への遷移を示してもよく、遷移エッジ２９４は後続状態２６８からダミーエラー状態２７２への遷移を示してもよい。遷移エッジ２８８及び２９４の双方は、共にＩ／Ｏシーケンス「｛Ｉｎｉｔ，Ｔ｝／Ｘ」で示される。Ｉ／Ｏシーケンス「Ｓｉｇｍａ／Ｘ」に関連するダミーエラー状態２７２の自己遷移エッジ２９３は、動作「Ｓｉｇｍａ」に応答してダミーエラー状態２７２に留まることを示す。
【００５２】
このように、図２Ｃは、本開示に従って生成されてもよい図２Ａ及び２Ｂに関して説明されたサンプルアプリケーション２０２のＤＦＳＭモデルの一例を説明する。いくつかの実施形態では、サンプルアプリケーション２０２及びＧＵＩベースのアプリケーション１０２などのＧＵＩベースのアプリケーションのＤＦＳＭモデルは、図３〜７に関して以下に説明される方法３００、４００、５００、６００及び７００に基づいて生成してもよい。上述のＤＦＳＭモデル２６０は、修正、付加及び削除してもよい。例えば、上述の状態及びＩ／Ｏシーケンスは、例示的な目的で使用され、サンプルアプリケーション２０２又はＧＵＩベースのアプリケーションの関連する全ての状態又はＩ／Ｏシーケンスに必然的に含まれることを意味するものではない。
【００５３】
図３Ａは、本開示の少なくとも１つの実施形態に従うＧＵＩベースのアプリケーションのＤＦＳＭモデルを生成する例示的な方法３００のフローチャートである。方法３００は、いくつかの実施形態では、図１の分析モジュール１０４のような分析モジュールによって実装されてもよい。例えば、分析モジュール１０４のプロセッサ１０８は、メモリ１１０に格納されたコンピュータ命令を実行して方法３００のブロックの１つ又は２つ以上で示されるＧＵＩベースのアプリケーションのＤＦＳＭモデルを生成する動作を実行してもよい。個別のブロックとして説明されるものの、種々のブロックは、所望の実装に依存して、付加的なブロックに分割されてもよく、より少ないブロックに組み合わされてもよく、削除されてもよい。
【００５４】
方法３００は開始し、ブロック３０２において、ＧＵＩベースのアプリケーションのシードオブザベーション（seed observations）は、ＧＵＩベースのアプリケーションをクローリングすることによって生成されてもよい。クローリングを使用して、上述のＬ＊アルゴリズムによって動作が使用されるようにＧＵＩベースのアプリケーションに含まれる動作を決定してもよい。例えば、「Ｉｎｉｔ」はサンプルアプリケーション２０２の起動動作を示し、「Ｙ」は「Ｙｅｓ」ボタンのタップを示し、「Ｎ」は「Ｎｏ」ボタンのタップを示し、「Ｔ」はメイン動作状態２５０又は未承認状態２５２の他の動作の実行を示すサンプルアプリケーション２０２を参照して説明した上述の用語を使用して、サンプルアプリケーションがＬ＊アルゴリズムで使用されてもよい動作「Ｉｎｉｔ」、「Ｙ」、「Ｎ」及び「Ｔ」を含むことを決定するためにクローリングを使用してもよい。
【００５５】
クローリングの実行方法の一例は、図４を参照して以下により詳細に説明される。図４に関して以下に説明されるように、クローリングは、プリフィックスシーケンス及びプリフィックスシーケンスの拡張が同一のクローリングの間にクローリングされるようにクローリングを拡張して実行してもよい。図４を参照して詳細に説明される上述の拡張されたクローリングは、本明細書では「先制クローリング（preemptive crawling）」とも称される。反対に、上述の従来のクローリングは、個別のクローリングの間にプリフィックスシーケンス及びその拡張をクローリングすることにより、プリフィックスシーケンスは冗長的にクローリングされる。
【００５６】
ブロック３０４において、ブロック３０２のクローリングの間に観察される動作を使用してＬ＊アルゴリズム観察テーブル（以下、「Ｌ＊テーブル」とも称される）を初期化する。例えば、サンプルアプリケーション２０２の動作「Ｉｎｉｔ」、「Ｙ」、「Ｎ」及び「Ｔ」は、サンプルアプリケーション２０２の内部で実行される動作としてＬ＊テーブルに入力されてもよい。Ｌ＊テーブルの一例として以下に示されるテーブル１は、動作「Ｉｎｉｔ」、「Ｙ」、「Ｎ」及び「Ｔ」を有するように初期化される。
【００５７】
【表１】
2015201172.tif 000003
【００５８】
上記のテーブル１において、（最も左の列に記録される）行ラベルは、サンプルアプリケーション２０２の種々の動作を示す。行ラベルで示される動作シーケンスは、カテゴリ「Ｓ」又はカテゴリ「Ｓ．Ｉ」に分割される。ここで、「Ｓ」はサンプルアプリケーション２０２の最終のＤＦＳＭモデルに現れる観察シーケンスを示し、カテゴリ「Ｓ．Ｉ」は推定されたＤＦＳＭモデルの完全性のチェックに使用されるカテゴリ「Ｓ」の観察シーケンスの拡張を示す。また、（最も上の行に記録される）列ラベルは、サンプルアプリケーション２０２で利用可能な動作及び動作のシーケンスを示す。他のセルは、セルの行ラベル及び列ラベルの動作を連結することにより形成される動作シーケンスによるサンプルアプリケーション２０２の結果出力を記録する。説明される例では、テーブル１で示されるＬ＊テーブルは初期化されたばかりなので、この時点ではサンプルアプリケーション２０２の挙動の学習をＬ＊アルゴリズムが開始しておらず、利用可能な入力動作以外のセルは空欄である。
【００５９】
ブロック３０６において、Ｌ＊テーブルが閉じて無矛盾である（closed and consistent）か否かを決定してもよい。いくつかの実施形態では、Ｌ＊アルゴリズムは、Ｌ＊テーブルに対して実行されて、Ｌ＊テーブルが閉じて無矛盾であるか否かを決定してもよい。＊テーブルが閉じて無矛盾であるか否かは、Ｌ＊アルゴリズムが収束することにより示されてもよい。Ｌ＊テーブルが閉じてなく無矛盾でないとき、方法３００はブロック３０８に進む。ここで、Ｌ＊アルゴリズムは、Ｌ＊テーブルに基づいてＧＵＩベースのアプリケーションの挙動についての１つ又は２以上のクエリを生成してもよい。クエリは、クエリへの回答がＬ＊シーケンスを閉じて無矛盾になるように生成されてもよい。クエリは、Ｌ＊アルゴリズムがクエリの動作のシーケンスを実行することに応答してＧＵＩベースのアプリケーションの出力を知ることを望む動作のシーケンスとしてコンパイルされた１つ又は２つ以上の動作を含んでもよい。
【００６０】
例えば、サンプルアプリケーション２０２に関して、ブロック３０６において、サンプルアプリケーション２０２の挙動がテーブル１にまだ埋められていないので、閉じてなく無矛盾でないと決定してもよい。このように、ブロック３０８において、Ｌ＊アルゴリズムは、テーブル１に基づいて１つ又は２つ以上のクエリを生成してサンプルアプリケーション２０２の挙動を決定してもよい。一例では、ブロック３０８において、Ｌ＊アルゴリズムは、サンプルアプリケーション２０２の入力シーケンスの次のクエリを生成して、結果出力「Ｉｎｉｔ」、「Ｉｎｉｔ．Ｙ」及び「Ｉｎｉｔ．Ｎ」を決定してもよい。
【００６１】
方法３００の全般的な説明に戻ると、ブロック３１０において、ブロック３０８で生成されたクエリへの応答が取得される。いくつかの実施形態では、クエリへの応答は、ブロック３０４で実行されるクローリングの間に決定し、（図１Ａのメモリのキャッシュ等に）保存されるＩ／Ｏシーケンスに基づいて取得されてもよい。以下により詳細に説明するように、応答は、図４を参照して説明されるブロック３０４で実行される先制的なクローリングの間に既に決定されていてもよい。したがって、先制的なクローリングは、オンデマンドのクローリングを削減して、方法３００の効率を改良できる。
【００６２】
例えば、サンプルアプリケーション２０２に関して、先制的なクローリングは、ブロック３０４の動作の次のシーケンス「Ｉｎｉｔ．Ｙ．Ｙ」、「Ｉｎｉｔ．Ｙ．Ｎ」及び「Ｉｎｉｔ．Ｎ．Ｔ．Ｔ」をクローリングしていてもよい。クエリ「Ｉｎｉｔ」及び「Ｉｎｉｔ．Ｙ」はすでにクローリングされた「Ｉｎｉｔ．Ｙ．Ｙ」のプリフィックスであってもよく、「Ｉｎｉｔ．Ｎ」はすでにクローリングされた「Ｉｎｉｔ．Ｎ．Ｔ．Ｔ」のプリフィックスであってもよい。このように、シーケンス「Ｉｎｉｔ．Ｙ．Ｙ」、「Ｉｎｉｔ．Ｙ．Ｎ」及び「Ｉｎｉｔ．Ｎ．Ｔ．Ｔ」をクローリングする一方、クエリ「Ｉｎｉｔ」、「Ｉｎｉｔ．Ｙ」及び「Ｉｎｉｔ．Ｎ」をクローリングして、クエリ「Ｉｎｉｔ」、「Ｉｎｉｔ．Ｙ」及び「Ｉｎｉｔ．Ｎ」に関連する入力／出力シーケンスを学習して観察してもよい。このように、クエリ「Ｉｎｉｔ」、「Ｉｎｉｔ．Ｙ」及び「Ｉｎｉｔ．Ｎ」の応答は、オンデマンドのクローリングを実行する必要なくブロック３０４で実行したクローリングに基づいて取得してもよい。
【００６３】
１つ又は２つ以上のクエリが先にクローリングされていない（例えば、ブロック３０４で先にクローリングされていない）ために、それぞれの応答が決定されていないとき、オンデマンドのクローリングを実行して、クエリへの応答を決定してもよい。いくつかの実施形態では、実行されるオンデマンドのクローリングは、クエリの拡張がクローリングされた先制的なクローリングを含んでもよい。このように、クエリへの応答を決定することだけでなく、クエリの拡張の入力／出力シーケンスを決定して後に参照することにより、冗長なオンデマンドのクローリングを削減できる。
【００６４】
いくつかの実施形態では、オンデマンドのクローリングの冗長性は、先のクローリングに基づいて応答が取得されていない残りのクエリのいずれかが他の残りのクエリの拡張であるか否かを決定することによって削減してもよい。すなわち、残りのクエリのいずれかが他の残りのクエリのプリフィックスであるか否かを決定してもよい。上述のように、クエリが他のクエリの拡張であるとき、拡張クエリであるクエリは、プリフィックスクエリであるクエリがクローリングされるときに同時にクローリングされてもよい。このように、プリフィックスクエリの入力／出力シーケンス及び拡張クエリの入力／出力シーケンスは、同一のオンデマンドのクローリングの間に決定し保存してもよい。このように、拡張クエリ及びプリフィックスクエリへの応答は、個別のクエリではなく単一のクエリで決定することにより、冗長なクローリングを削減することができる。同一のクローリングの間でプリフィックスクエリ及び拡張クエリをクローリングすることによる冗長なクローリングの作成は、先のクローリングからの入力／出力シーケンスを使用しない場合に実行してもよい。以下に説明される図５は、この方法で冗長なクローリングを削減する一例の方法５００を示す。
【００６５】
ブロック３１２において、Ｌ＊テーブルは、ブロック３１０で取得されたＩ／Ｏシーケンスに従って修正及び更新されてもよい。例えば、サンプルアプリケーション２０２に関して、以下に示すテーブル２は、クエリ「Ｉｎｔ」、「Ｉｎｔ．Ｙ」及び「Ｉｎｔ．Ｎ」の応答に基づくテーブル１に示されるＬ＊テーブルの更新を説明するものである。「Ｏ」は、第１条項画面情報２１４、第２条項画面情報２１６又は第３条項画面情報２１８の何れかに関連する出力を示し、「Ｏ＿Ｆ」は未承認画面情報２２２に関連する出力を示し、「Ｘ」は上述のダミーエラー出力を示す。
【００６６】
【表２】
2015201172.tif 000004
【００６７】
方法３００の全般的な説明に戻ると、方法３００は、ブロック３１２の後でブロック３０６に戻り、Ｌ＊アルゴリズムが、修正されたＬ＊テーブルに対して再び実行されて、Ｌ＊テーブルがここで閉じて無矛盾であるか否かを決定してもよい。ブロック３０６、３０８、３１０及び３１２は、Ｌ＊テーブルが閉じて無矛盾であると判定されるまでいくつかの回数繰り返される。
【００６８】
例えば、ブロック３０６において、Ｌ＊アルゴリズムは、推定されるシーケンスの最後の２行に記録された応答が、観察されたシーケンスに記録された応答と相違するためにテーブル２が閉じてなく無矛盾でないと決定してもよい。このように、Ｌ＊アルゴリズムは、ブロック３０８において次のクエリ「Ｉｎｉｔ」、「Ｉｎｉｔ．Ｙ．Ｙ」及び「Ｉｎｉｔ．Ｙ．Ｎ」を生成してもよい。ブロック３１０において、Ｌ＊アルゴリズムは、先のクローリングからの保存された入力／出力シーケンスに基づいてクエリへの応答を取得してもよく、オンデマンドのクローリングに基づいてクエリへの応答を取得してもよい。ブロック３１２において、Ｌ＊アルゴリズムは、クエリへの応答に基づいてテーブル２を修正してテーブル３を生成してもよい。テーブル３において、付加的な用語「Ｓｉｇｍａ」と共にテーブル２と同一の用語を使用してもよい。ここで、「Ｓｉｇｍａ」は、一式の動作｛Ｉｎｎｉｔ，Ｙ，Ｎ，Ｔ｝を示す。
【００６９】
【表３】
2015201172.tif 000005
【００７０】
サンプルアプリケーション２０２に関する例を続けると、ブロック３０６において、テーブル３は閉じてなく無矛盾でないと決定される。このように、ブロック３０８、３１０及び３１２は、クエリ「Ｉｎｉｔ．Ｎ．Ｔ．Ｔ」及びその応答がブロック３０８及び３１０で生成され取得されるように繰り返されてもよい。以下のテーブル４は、クエリ「Ｉｎｉｔ．Ｎ．Ｔ．Ｔ」に対する応答に基づいてブロック３１２において生成されてもよい。テーブル４は、閉じて無矛盾であると判定されてもよい。
【００７１】
【表４】
2015201172.tif 000006
【００７２】
方法３００の全般的な説明に戻ると、Ｌ＊テーブル（例えばテーブル４）が閉じて無矛盾であると判定されたとき、方法３００は、ブロック３０６から３１４に進んでもよい。ブロック３１４において、推定モデルは、Ｌ＊テーブルに基づいてＬ＊アルゴリズムによって生成されてもよい。推定モデルは、ＧＵＩベースのアプリケーションが閉じて無矛盾であるＬ＊テーブルに基づいてどのように動作するかを推定するＤＦＳＭモデルにしてもよい。例えば、ブロック３１４において、サンプルアプリケーション２０２の推定モデルは、上述のテーブル４に基づいて生成されてもよい。図３Ｂは、テーブル４に基づいて生成されてもよいサンプルアプリケーション２０２のＤＦＳＭ推定モデル３５０の一例である。
【００７３】
ブロック３１６において、推定モデルは、ＧＵＩベースアプリケーションを十分にモデル化しているか否かを決定してもよい。推定モデルがＧＵＩベースアプリケーションを十分にモデル化しているか否かの決定の一例は、図７の方法７００に関して以下に説明される。推定モデルがＧＵＩベースのアプリケーションを十分にモデル化していないときに、方法３００は、ブロック３１８に進む。ブロック３１８において、同一の結果が取得されない、推定モデル及びＧＵＩアプリケーションに対する一連の動作を示す反例を生成してもよい。反例の生成の一例は、図７を参照して説明される。
【００７４】
例えば、図３Ｂの推定モデル３５０と図２ＣのＤＦＳＭモデル２６０との比較により、推定モデル３５０は、サンプルアプリケーション２０２を十分にモデル化していないことが示される。このように、推定モデル３５０及びサンプルアプリケーション２０２は、動作のいくつかのシーケンスに対して同一の結果を生じなくてもよい。したがって、ブロック３１６において、推定モデル３５０はサンプルアプリケーション２０２を十分にモデル化していないと判定される。ブロック３１８において、推定モデル３５０を反証する反例を生成してもよい。例えば、動作のシーケンス「Ｉｎｉｔ．Ｙ．Ｙ．Ｙ」は、推定モデル３５０を反証する反例として生成されてもよい。
【００７５】
方法３００の全般的な説明に戻ると、ＧＵＩベースのアプリケーションの観察（例えば、入力／出力シーケンス）は、反例に基づいて取得してもよい。いくつかの実施形態では、観察は、先のクローリングからの保存された入力／出力シーケンスに基づいて取得されてもよく、オンデマンドのクローリングに基づいて取得されてもよい。いくつかの例では、先のクローリング及び／又はオンデマンドのクローリングは、上述のように先制的なクローリングを実行してもよい。ブロック３２０において、観察を使用してＬ＊テーブルを修正してもよく、方法３００はブロック３０６に戻ってもよい。このように、ブロック３０６、３０８、３１０、３１２、３１４、３１６、３１８、３１９及び３２０に関連する１つ又は２つ以上のステップは、推定モデルがＧＵＩベースのアプリケーションを十分にモデル化していると決定されるまで繰り返してもよい。
【００７６】
例えば、サンプルアプリケーション２０２に対して、ブロック３１９において、１つ又は２つ以上の入力／出力シーケンスは、反例「Ｉｎｉｔ．Ｙ．Ｙ．Ｙ」に基づいて取得されてもよい。ブロック３２０において、テーブル４は修正されてもよく、方法３００はブロック３０６に戻ってもよい。ブロック３０６、３０８、３１０及び３１２に関連するステップは、以下のテーブル５に示すように、閉じて無矛盾であるＬ＊テーブルがサンプルアプリケーション２０２のために生成されるまで繰り返してもよい。テーブル５は、付加的な用語「Ｏ＿Ｓ」と共にテーブル１〜４と同一の用語を含んでもよい。ここで、「Ｏ＿Ｓ」は、サンプルアプリケーション２０２のメイン動作画面情報２２０に関連する出力を示す。
【００７７】
【表５】
2015201172.tif 000007
【００７８】
ブロック３１４において、サンプルアプリケーション２０２の推定モデルは、テーブル５に基づいて生成されてもよい。本例では、テーブル５に基づいて生成された推定モデルは、図２ＣのＤＦＳＭモデル２６０と実質的に等しくてもよい。このように、推定モデルは、サンプルアプリケーション２０２の動作を正確に反映してもよく、ブロック３１６において、サンプルアプリケーション２０２の実質的にモデル化するように決定してもよい。
【００７９】
方法３００の全般的な説明に戻ると、ブロック３１６において、推定モデルがＧＵＩベースのアプリケーションを十分にモデル化していると判定されるとき、方法３００はブロック３２２に進んでもよい。ブロック３２２において、推定モデルは、推定モデルに含まれる無関係の材料は除去されて、サニタイズされてもよい。例えば、推定モデルは、ＧＵＩベースのアプリケーションの１つ又は２つ以上の状態において利用できない動作に関連するダミーエラー状態を含んでもよく、ブロック３２２において、ダミーエラー状態及び推定モデルのダミーエラー除隊を導く関連する遷移エッジは、推定モデルから除去されてもよい。ブロック３２４において、サニタイズされた推定モデルは、ＧＵＩベースのアプリケーションのＧＵＩモデルとして出力されてもよい。
【００８０】
このように、方法３００を使用してＧＵＩベースのアプリケーションのＧＵＩモデルを生成してもよい。本開示の範囲を逸脱することなく、方法３００は、修正、付加又は除去されてもよい。例えば、当業者は、方法３００において、実行される機能は、異なった順序で実装されてもよいことを理解することができる。さらに、概略的なステップ及び動作のみが一例として提供され、開示される実施形態の本質を損なうことなく、ステップ及び動作のいくつかは、付加的であり、組み合わせてより少ないステップ及び動作にしてもよく、付加的なステップ及び動作に拡張されてもよい。
【００８１】
例えば、少数のクエリは、Ｌ＊テーブルが閉じてなく無矛盾でないことを決定するために十分であり、いくつかの例では、ブロック３０６において、ブロック３０８で先に生成されたクエリのいくつかの応答に基づいてＬ＊テーブルが閉じてなく無矛盾でないことを決定してもよい。このように、クエリのいくつかの応答を取得し、これらの応答に基づいてＬ＊テーブルを修正し、他のクエリをクローリングする前に修正されたＬ＊テーブルが閉じて無矛盾であるかをチェックすることにより、クエリのいくつかの応答に基づいてＬ＊テーブルが閉じてなく無矛盾でないことを決定できるので、オンデマンドのクローリングを削減できる。
【００８２】
このように、いくつかの実施形態では、ブロック３１０において、ブロック３０８で生成したクエリのいくつかの応答を取得した後（例えば、ブロック３０４のクローリングに基づき、又はブロック３１０のオンデマンドのクローリングに基づき）、方法３００は、応答が取得されていない他のクエリをクローリングすることなく、ブロック３１２及び３０６に進んでもよい。例えば、上述の処理は、クローリングの応答が先のクローリングに基づいて取得された後、及びいずれかのオンデマンドのクローリングの前、又はいくつかのオンデマンドのクローリングが残りのクエリについて実行された後に実行されてもよい。
【００８３】
図４は、本開示の少なくとも１つの実施形態に従って配置された、ＧＵＩベースのアプリケーションを先制的にクローリングする一例の方法４００のフローチャートである。上述のように、方法４００を使用して、上述の方法３００のブロック３０２、３１０及び３１９に関連する１つ又は２つ以上の動作を実行してもよい。方法４００は、いくつかの実施形態では、図１の分析モジュール１０４のような分析モジュールによって実装されてもよい。例えば、分析モジュール１０４のプロセッサ１０８は、メモリ１１０に記憶されたコンピュータ命令を実行して、方法４００の１つ又は２つ以上のブロックで示されるＧＵＩベースのアプリケーション１０２をクローリングする動作を実行してもよい。個別のブロックとして説明されるものの、種々のブロックは、所望の実装に依存して、付加的なブロックに分割されてもよく、より少ないブロックに組み合わされてもよく、削除されてもよい。
【００８４】
方法４００は開始し、ブロック４０２において、動作の第１シーケンスの第１時間クローリングを実行してもよい。第１時間クローリングは、動作の第１シーケンスがクローリングされる第１時間であってもよい。
【００８５】
ブロック４０４において、第１時間クローリングは、１つ又は２つ以上の付加的な動作により拡張されて、動作の第２シーケンスをクローリングしてもよい。このように、動作の第１シーケンスは、動作の第２シーケンスのプリフィックスであってもよい。いくつかの実施形態において、第１時間クローリングは、ランダムなクローリング拡張処理に基づいて拡張されてもよい。これらの実施形態又は他の実施形態において、第１時間クローリングは、発見的戦略に基づいて拡張されてもよい。
【００８６】
例えば、決定的な発見的戦略は、新しい状態に遭うであろうという希望の下で、予め決定されたいくつかの動作（例えば、１つの動作、２つの動作又は３つの動作）のクローリングの拡張を常に含んでもよい。使用される他のより高度な（再び決定的な）発見的戦略は、現在の状態から新しい状態を発見する可能性を示す利益関数を計算し、現在の状態の利益が、予め決定されたしきい値よりも大きい場合に付加的なステップをクローリングすることを含んでもよい。利益値は、現在の画面情報が先にアクセスした個別のシーケンスの数（少ない方が好ましい）に基づいて計算されてもよく、現在の画面情報で探索されていない利用可能な動作の数（多いほうが好ましい）に基づいて計算されてもよい。代替的には、「フリッピングコイン（flipping a coin）」のような単純且つランダムな戦略を使用して、停止するか他のステップをクローリングするかを決定してもよい。
【００８７】
代替的又は付加的には、第１時間クローリングは、第１時間クローリングの間に観察されたＧＵＩベースのアプリケーションの状態が、ＧＵＩベースの第１時間クローリング又は他のクローリングの間に先に観察されたことの決定に基づいて拡張してもよい。いくつかの実施形態では、第１時間クローリングは、状態が先に観察されなかったことの決定に基づく少なくとも２つの動作によって拡張されてもよい。少なくとも２つの動作による拡張は、Ｌ＊アルゴリズムにより実行される分析に基づくものであってよい。このように、これらの実施形態又は他の実施形態は、動作の第１シーケンスよりも少なくとも２つ多い動作を含んでもよい。
【００８８】
いくつかの実施形態において、状態が先に観察されていないことの決定は、第１時間クローリング又は他のクローリングの間に先に観察されていない画面情報の観察に基づくものであってよい。他の実施形態では、画面情報は、先に観察されたものの、先に観察されていない状態に関連するもの（「新しい状態」とも称する）であってもよい。これらの例又は他の例では、観察された画面情報は、観察された画面情報の動作のクローリング、及び動作の出力の観察によって新しい状態に関連するか否かを決定されてもよい。観察された出力は、観察された画面情報が先に観察されたときに、観察された画面情報における同一の動作の先のクローリングに応じた先に観察された出力と比較されてもよい。観察された出力が先に観察された出力と同一でないとき、新しい状態が観察されていると判断してもよい。新しい状態が観察されているか否かを決定する多くの異なる方法がある。このため、上述のものは、新しい状態が観察されたか否かを決定する単なる一例であり、これに限定することを意味するものではない。
【００８９】
ブロック４０６において、動作の第１シーケンスに関連する第１入力／出力シーケンスは、第１時間クローリングに基づいて決定されてもよい。いくつかの実施形態では、第１入力／出力シーケンスは、第１入力／出力シーケンスが後に参照可能なように、（図１のメモリ１１０のキャッシュ等に）格納されてもよい。例えば、保存された第１入力／出力シーケンスを後に使用して、動作の第１シーケンスを含むＬ＊アルゴリズムによってクエリに回答してもよい。このように、Ｌ＊アルゴリズムに関連するオンデマンドのクローリングは、削減できる。
【００９０】
同様に、ブロック４０８において、動作の第２シーケンスに関連する第２入力／出力シーケンスもまた、第１時間クローリングに基づいて決定されてもよい。いくつかの実施形態では、第２入力／出力シーケンスは、第２入力／出力シーケンスが後に参照可能なように、（図１のメモリ１１０のキャッシュ等に）格納されてもよい。例えば、保存された第２入力／出力シーケンスを後に使用して、動作の第２シーケンスを含むＬ＊アルゴリズムによってクエリに回答してもよい。このように、Ｌ＊アルゴリズムに関連するオンデマンドのクローリングは、削減できる。
【００９１】
このように、方法４００は、同一のクローリングの間の動作の第２シーケンスもまたクローリングするように動作の第１シーケンスのクローリングを拡張することによって、先制的なクローリングを実行してもよい。このように、同一のクローリングを使用して第１入力／出力シーケンス及び第２入力／出力シーケンスの双方を決定してもよい。反対に、従来のクローリングは、１つのクローリングで動作の第１シーケンスをクローリングし、次いで別個のクローリングで（動作の第１シーケンスを含む）動作の第２シーケンスを全体的にクローリングして、第１入力／出力シーケンス及び第２入力／出力シーケンスを決定する。このように、方法４００は、他のクローリング方法と比較して冗長なクローリングを削減できる。さらに、上述のように、方法４００は、上述の方法３００に関連するオンデマンドのクローリングを削減できる。
【００９２】
方法４００は、本開示の範囲を逸脱することなく修正、付加又は削除することができる。例えば、当業者は、方法４００において実行される機能は、異なる順序で実装されてもよいことを理解することができる。さらに、概略的なステップ及び動作のみが例として提供され、ステップ及び動作のいくつかは、開示される実施形態の本質を損なうことなく、付加的であってもよく、より少ないステップ及び動作に組み合わせてもよく、付加的なステップ及び動作に拡張されてもよい。
【００９３】
例えば、以下は、方法４００を実行する疑似コード（psuedo-code）である。ここで、状態は、新しい画面情報が観察されたことに基づいて新しいものであると決定され、クローリングは、新しい画面情報から少なくとも２つの動作を続けてもよい。以下の疑似コードは単なる例示的な実施であり、限定される例ではないことが理解される。
【００９４】
【表６】
2015201172.tif 000008
【００９５】
上述の疑似コードにおいて、手順「preEmptiveCrawl」は、ＧＵＩベースのアプリケーション「app」，及び「app」のクローリングされたシーケンスのデータベース「crawlDB」，並びにそれらの応答に基づいてを入力として獲得する。「app」がクローリングされていると、クローリングされたシーケンスは、「crawlDB」に加えられる。さらに、コマンド「createNewEvent(prefix, action , nextActionStage)」は、変数「prefix」、「action」及び「nextActionStage」のために供給されたパラメータから新しいイベントオブジェクトを創出する。さらに、オブジェクト「crawlStack」は、クローリングされる「app」のイベントを記憶する従来のスタックの実装である。イベントは、通常のpush()操作及びpop()操作を使用してスタックのトップに加えると共にスタックのトップから取り除かれる。
【００９６】
さらに、ノーテーション「event.getXXX()」は、３つの構成フィールドのそれぞれの変数「prefix」、「action」及び「nextActionStage」をリトリーブするように構成されたオブジェクト「event」における方法「get」のインヴォケーションを示す。コマンド「initialize(app)」は、単に「app」を再インストールすることにより初期のインストール状態であった状態に戻る「app」を「reset」するように構成される。コマンド「crawlOnApp(sequence, app)」は、「app」上のイベントシーケンス「sequence」で特定された動作のシーケンスを実行するように構成される。さらに、コマンド「executeActionOnApp(action, app)」は、「app」上の特定の動作「action」を実行するように構成される。ここで、「app」は、「action」の実行が可能な状態であると仮定される。コマンド「addCrawlResult()」は、実行された動作の入力／出力シーケンス及び観察された出力画面情報が「crawlDB」に保存されるように、「app」上の動作の特定のシーケンスをクローリングした結果を「crawlDB」に加えるように構成される。さらに、ループ「foreach(action in currentScreen)」は、所与の画面情報「currentScreen」上で動作するように利用可能な動作「action」のそれぞれを反復するように構成される。
【００９７】
図５は、本開示の少なくとも１つの実施形態に従って配置された、ＧＵＩベースのアプリケーションの冗長なクローリングを削減する一例の方法５００のフローチャートである。上述のように、方法５００を使用して、上述の方法３００のブロック３１０及び３１９に関連する１つ又は２以上の動作を実行してもよい。いくつかの実施形態では、方法５００は、図１の分析モジュール１０４のような分析モジュールによって実装されてもよい。例えば、分析モジュール１０４のプロセッサ１０８は、メモリ１１０に記憶されるコンピュータ命令を実行して、方法４００の１つ又は２つ以上のブロックにより示される、ＧＵＩベースのアプリケーション１０２をクローリングする動作を実行するように構成されてもよい。個別のブロックとして説明されるものの、種々のブロックは、所望の実装に依存して、付加的なブロックに分割されてもよく、より少ないブロックに組み合わされてもよく、削除されてもよい。
【００９８】
方法５００は開始し、ブロック５０２において、ＧＵＩベースのアプリケーションをクローリングする一組のクエリを受信してもよい。クエリのそれぞれは、ＧＵＩベースのアプリケーションの動作のシーケンスを含んでもよい。ここで、クエリに関連するＧＵＩベースのアプリケーションの挙動（例えば、入力／出力シーケンス）は、ＧＵＩベースのアプリケーションのクローリングの間に観察されてもよい。いくつかの実施形態では、クエリは、上述の方法３００のブロック３０８等においてＬ＊アルゴリズムによって生成されてもよい。
【００９９】
ブロック５０４において、クエリの第１クエリは、クエリの第２クエリの１つ又は２つ以上のプリフィックスのプリフィックスであると決定されてもよい。ブロック５０６において、第２クエリのオンデマンドのクローリングは、実行されてもよい。第２クエリのオンデマンドのクローリングは、第２クエリのプリフィックスである第１クエリに基づいて、第１クエリの別個のオンデマンドのクローリングを実行することなく実行されてもよい。
【０１００】
ブロック５０８において、第１クエリの第１クエリ入力／出力シーケンス及び第２クエリの第２クエリ入力／出力シーケンスは、オンデマンドのクローリングから決定されてもよく、第１クエリが第２クエリのプリフィックスであることの決定に基づいて決定されてもよい。第１クエリ入力／出力シーケンスを第１クエリの第１応答として使用してもよく、第２クエリ入力／出力シーケンスを第２クエリの第２応答として使用してもよい。このように、第１クエリの第１応答及び第２クエリの第２応答は、同一のオンデマンドのクローリングから生成されてもよい。
【０１０１】
いくつかの実施形態では、Ｌ＊アルゴリズムのＬ＊テーブルは、方法３００のブロック３１２に関して説明したように、第１クエリ入力／出力シーケンス及び／又は第２クエリ入力／出力シーケンスに基づいて修正してもよい。さらに、Ｌ＊アルゴリズムをＧＵＩベースのアプリケーションに対して実行して、第１クエリ入力／出力シーケンス及び／又は第２クエリ入力／出力シーケンスを含む修正されたＬ＊テーブルが、方法３００のブロック３０６に関して説明したように、閉じて無矛盾であるかを決定してもよい。これらの実施形態又は他の実施形態では、Ｌ＊テーブルは、生成されたクエリに含まれる他のクエリをクローリングする前に、修正され、第１クエリ入力／出力シーケンス及び／又は第２クエリ入力／出力シーケンスに基づいて閉じて無矛盾であるか決定されてもよい。
【０１０２】
このように、方法５００を使用して、ＧＵＩベースのアプリケーションの冗長なクローリングを削減してもよい。方法５００は、本開示の範囲を逸脱することなし、修正、付加又は削除してもよい。例えば、当業者は、方法５００で実行される機能は、異なる順序で実装してもよいことを理解するだろう。さらに、概略的なステップ及び動作のみが例として提供され、ステップ及び動作のいくつかは、開示された実施形態の本質を損なうことなく、付加的にしてよく、より少ないステップ及び動作に組み合わせてもよく、付加的なステップ及び動作に拡張してもよい。
【０１０３】
例えば、図６は、本明細書に記載される少なくとも１つの実施形態に従った、方法５００の実装の一例である方法６００のフローチャートである。方法６００は開始し、ブロック６０２において、Ｌ＊アルゴリズムからのオープンクエリは、「queryList」と称されるリストに集められる。ブロック６０４において、オープンクエリ「q」は、「queryList」から選択されてもよい。
【０１０４】
ブロック６０６において、クエリ「q」が「queryList」に含まれる１つ又は２つ以上の他のクエリのプリフィックスであるか否かを決定してもよい。クエリ「q」が他のクエリのプリフィックスであるとき、クエリ「q」のオンデマンドのクローリングは、クエリ「q」のために特別に実施しなくてもよく、方法６００は、以下により詳細に説明されるブロック６１２に進む。クエリ「q」が他のクエリのプリフィックスでないとき、方法６００は、ブロック６０６からブロック６０８に進む。
【０１０５】
ブロック６０８において、クエリ「q」の応答「r」は、取得されてもよい。いくつかの実施形態において、応答「r」は、ＧＵＩベースのアプリケーション内のクエリ「ｑ」をクローリングすることによって取得されてもよい。ブロック６１０において、応答「r」を使用して、クエリ「q」のプリフィックスであってもよい「queryList」のいずれかのオープンクエリへの応答を生成してもよい。
【０１０６】
ブロック６１２において、クローリングを中断する１つ又は２つ以上の基準に適合しているか否かが決定されてもよい。上述のように、いくつかの実施形態では、「queryList」の全てのオープンクエリに対する応答は、Ｌ＊テーブルを修正するＬ＊アルゴリズムへの取得された応答を戻す前に取得されなくてもよい。このように、ブロック６１２において、基準に基づいて他のオープンクエリのクローリングを中断するか否かを決定してもよい。基準に適合したとき、方法６００は、ブロック６１６に進む。ここで、決定されたクエリへの応答は、Ｌ＊アルゴリズムに戻ってもよい。基準が適合していないとき、方法６００は、ブロック６１４に進んでもよい。クローリングを中断する基準は、決定されたある数のクエリのある数の応答（例えば、５）に基づいてもよく、ブロック６０２で決定され取得さえたクエリへの応答のある割合（例えば５０％）に基づいてもよい。
【０１０７】
ブロック６１４において、「queryList」に残り処理されていないクエリ（例えば、応答が取得されていないクエリ）があるか否かが決定されてもよい。１つ、又は２つ以上の「queryList」に残り処理されていないクエリがあるとき、方法６００は、ブロック６０４に戻ってもよい。「queryList」に残り処理されていないクエリがないとき、方法６００は、ブロック６１６に進んでもよい。
【０１０８】
このように、方法６００は、上述の方法５００の実装の一例である。本開示の範囲を逸脱することなく、方法６００は、修正、付加又は除去されてもよい。
【０１０９】
図７は、本明細書に記載される少なくとも１つの実施形態に従った、推定モデルが、関連するＧＵＩベースのアプリケーションを十分にモデル化したか否かを決定する一例の方法７００のフローチャートである。上述のように、方法７００を使用して、上述の方法３００のブロック３１６及び３１８に対する動作を実行してもよい。いくつかの実施形態では、方法７００は、図１の分析モジュール１０４のような分析モジュールで実装されてもよい。例えば、分析モジュール１０４のプロセッサ１０８は、メモリ１１０に格納されたコンピュータ命令を実行して、方法７００のブロックの１つ又は２つ以上で示される動作を実行するように構成されてもよい。個別のブロックとして説明されるものの、種々のブロックは、所望の実装に依存して、付加的なブロックに分割されてもよく、より少ないブロックに組み合わされてもよく、削除されてもよい。
【０１１０】
方法７００は開始し、ブロック７０２において、ＧＵＩベースのアプリケーションに関連する疑似ランダムな入力シーケンス（以下、「入力シーケンス」とも称する）は、生成されてもよい。入力シーケンスは、ＧＵＩベースのアプリケーションにより実行される適当な動作のセットを含み、入力シーケンスの応答におけるＧＵＩベースのアプリケーションの挙動を決定してもよい。
【０１１１】
ブロック７０４において、抽象化入力シーケンスは、入力シーケンスから生成されてもよい。抽象化入力シーケンスは、入力シーケンスの動作に関連があってもよい動作のセットを含んでもよく、推定モデルの動作として使用して、ＧＵＩベースのアプリケーションの動作のシーケンスを推定モデルによってモデル化するように決定してもよい。
【０１１２】
ブロック７０６において、入力シーケンスは、ＧＵＩベースのアプリケーションに対して実行して、関連する出力シーケンスを取得してもよい。ブロック７０８において、抽象化入力シーケンスを推定モデルに関して実行して、関連する抽象化出力シーケンスを取得してもよい。ブロック７１０において、出力シーケンスは、抽象化出力シーケンスと実質的に等しいか否かを決定してもよい。
【０１１３】
出力シーケンスが抽象化出力シーケンスと実質的に等しくないとき、方法７００は、ブロック７１２に進む。ここで、抽象化入力シーケンスは、反例として出力される。抽象化入力シーケンスは、上述の方法３００のブロック３１８で生成される反例として使用してもよい。出力シーケンスが抽象化出力シーケンスと実質的に等しいとき、方法７００は、ブロック７１３に進む。
【０１１４】
ブロック７１３において、入力生成しきい値に到達したか否かを判定してもよい。入力生成しきい値は、入力シーケンスの所定の数に関連してもよく、シーケンスの生成の所定の時間に関連してもよく、これらの基準値の組み合わせに関連してもよい。これにより、ＧＵＩベースのアプリケーション及び推定モデルの種々のパスが十分に検査されたと判定し、ＧＵＩベースのアプリケーションが推定モデルにより十分にモデル化されたことを評価してもよい。入力生成しきい値に到達しなかったとき、方法７００は、ブロック７０２に戻ってもよい。反対に、入力生成しきい値に到達したとき、方法７００は、ブロック７１４に進んでよい。ここで、推定モデルは、ＧＵＩベースのアプリケーションを十分にモデル化したと判定されてもよい。いくつかの実施形態では、これにより、上述の方法３００は、ブロック３１６からブロック３２２に進んでもよい。
【０１１５】
このように方法３００、４００、５００、６００及び７００を使用して、ＧＵＩベースのアプリケーションのＤＦＳＭモデルを抽出し生成してもよい。このように、ＧＵＩモデルを使用して、ＧＵＩベースのアプリケーションの挙動を検証し、検査してもよく、いくつかの例では、ＧＵＩモデルを使用して、ＧＵＩベースのアプリケーションに関連するバグをトラブルシューティング及び／又は検出してもよい。
【０１１６】
当業者は、本明細書で開示されるこれらの処理及び方法並びに他の処理及び方法に関し、処理及び方法で実行される機能は、異なる順序で実装されてもよいことを理解するであろう。さらに、概略的なステップ及び動作のみが例として提供され、ステップ及び動作のいくつかは、開示される実施形態の本質を損なうことなく、付加的であってもよく、より少ないステップ及び動作に組み合わせてもよく、付加的なステップ及び動作に拡張されてもよい。
【０１１７】
上述のように、本明細書で説明された実施形態は、以下により詳細に説明されるように、種々のコンピュータハードウェア又はソフトウェアモジュールを含む汎用コンピュータ又は特定用途コンピュータ（例えば、図１のプロセッサ１０８）を使用することを含んでもよい。
【０１１８】
さらに、上述のように、本明細書で説明される実施形態は、コンピュータが実行可能な命令又はデータ構造で運搬又は格納するコンピュータが読み取り可能な媒体（例えば、図１のメモリ１１０）を使用して実装してもよい。このようなコンピュータが読み取り可能な媒体は、汎用コンピュータ又は特定用途コンピュータによりアクセスされてもよい。例えば、限定されないものの、このようなコンピュータが読み取り可能な媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ又は他の光学ディスク記憶装置、磁気ディスク記憶装置又は他の磁気記憶デバイス、フラッシュメモリデバイス（固体メモリデバイス等）又は所望のプログラムコードをコンピュータが実行可能な命令又はデータ構造で運搬又は格納するために使用され、汎用コンピュータ又は特定用途コンピュータによりアクセス可能な他の記憶媒体又は一時的でないコンピュータ読み取り可能な記憶媒体であってもよい。また、上述の機器を組み合わせたものは、コンピュータ読み取り可能な媒体に含まれてもよい。
【０１１９】
例えば、コンピュータ読み取り可能な命令は、汎用コンピュータ、特定用途コンピュータ又は特定用途処理デバイス（例えば１つ又は２つ以上のプロセッサ）がある機能又は一群の機能を実行する命令及びデータを含んでもよい。主題は、構造的特徴及び／又は方法論的な行為により特定された言語で記載されるが、添付された特許請求の範囲で規定される主題は、上述の特定の特徴又は行為に限定される必要はない。むしろ、上述の特定の特徴又は行為は、特許請求の範囲に記載された発明を実装する例示的な形式として記載されるものである。
【０１２０】
用語「モジュール（module）」又は「コンポーネント（component）」は、コンピューティングシステムの汎用ハードウェア（例えば、コンピュータが読み取り可能な媒体、処理デバイス等）により格納及び／又は実行してもよいモジュール又はコンポーネント及び／又はソフトウェアオブジェクト又はソフトウェアルーティーンの動作を実行するように構成される特定のハードウェア実装を称してもよい。いくつかの実施形態において、本明細書に記載される異なるコンポーネント、モジュール、エンジン及びサービスは、コンピューティングシステムで（異なるスレッドとして）実行されるオブジェクト又は処理として実装されてもよい。本明細書に記載されるシステム及び方法のいくつかは、全般的に、（汎用ハードウェアに格納及び／又は実行される）ソフトウェア実装され、特定のハードウェア実装又ソフトウェア実装及びハードウェア実装の組み合わせが可能であり、予想される。本明細書において、「コンピューティングエンティティ（computing entity」は、本明細書で先に規定したコンピューティングシステム、若しくはいずれかのモジュール又はコンピューティングシステムで走るモジュールの組み合わせのようなコンピューティングシステムとしてもよい。
【０１２１】
明細書で引用される全ての例及び条件的な言語は、教育的な目的を意図したものであり、技術を進歩させるため発明者が貢献した発明及び概念を読み手が理解することを支援するためのものであり、具体的に引用された例及び条件に限定されることなく解釈されるものである。本開示の実施形態を詳細に説明してきたが、本開示の精神及び範囲を逸脱することなく、種々の変化、置換、変更が可能であることを理解すべきである。
【図１】
2015201172.tif 000009
【図２Ａ】
2015201172.tif 000010
【図２Ｂ】
2015201172.tif 000011
【図２Ｃ】
2015201172.tif 000012
【図３Ａ】
2015201172.tif 000013
【図３Ｂ】
2015201172.tif 000014
【図４】
2015201172.tif 000015
【図５】
2015201172.tif 000016
【図６】
2015201172.tif 000017
【図７】
2015201172.tif 000018