(57)【特許請求の範囲】
【請求項１】
イベント駆動ソフトウェア・アプリケーションの、第一の変数集合を含む第一のイベント・シーケンスを決定する段階と；
イベント駆動ソフトウェア・アプリケーションの、第二の変数集合を含む第二のイベント・シーケンスを決定する段階と；
前記第一のイベント・シーケンスおよび前記第二のイベント・シーケンスの従属イベントを識別する段階であって、前記従属イベントは、前記第一の変数集合および前記第二の変数集合内の一つまたは複数の変数を含む目標条件を含む、段階と；
前記第一のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第一のイベント・シーケンスについての第一の距離を決定する段階と；
前記第二のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第二のイベント・シーケンスについての第二の距離を決定する段階と；
前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスの実行を前記第二のイベント・シーケンスより上に優先度付けする段階と；
前記優先度付けに従って、前記第一のイベント・シーケンス、前記第二のイベント・シーケンスおよび前記従属イベントのうちの一つまたは複数を含むイベント空間を探査する段階とを含む、
方法。
【請求項２】
前記第一の変数集合および前記第二の変数集合が変数の同じ集合に対応する、請求項１記載の方法。
【請求項３】
前記第一の変数集合および前記第二の変数集合が異なる変数に対応する、請求項１記載の方法。
【請求項４】
前記第一の距離が前記第一のイベント・シーケンスの実行が前記目標条件を満たすことを示す場合に、前記第一のイベント・シーケンスを実行し、続いて前記従属イベントを実行することをさらに含む、請求項１記載の方法。
【請求項５】
前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスを前記第二のイベント・シーケンスより優先して実行することをさらに含む、請求項１記載の方法。
【請求項６】
前記第一のイベント・シーケンスおよび前記第二のイベント・シーケンスを含むイベント・シーケンスの第一の集合を決定する段階と；
前記第一の距離に基づいて、前記第一のイベント・シーケンスをイベント・シーケンスの前記第一の集合の各イベント・シーケンスにアペンドしてイベント・シーケンスの第二の集合を生成する段階と；
イベント・シーケンスの前記第二の集合をイベント・シーケンスの前記第一の集合に加えてイベント・シーケンスの第三の集合を生成する段階と；
イベント・シーケンスの前記第三の集合の各イベント・シーケンスについて、前記目標条件に対するイベント・シーケンス距離を決定する段階と；
イベント・シーケンスの前記第三の集合のイベント・シーケンスの実行に、前記イベント・シーケンス距離に基づいて優先度付けする段階と；
実行の前記優先度付けに従って、イベント・シーケンスの前記第三の集合および前記従属イベントを含むイベント空間を探査する段階とをさらに含む、
請求項１記載の方法。
【請求項７】
前記目標条件が数値制約条件を含み、当該方法がさらに：
前記目標条件についての一つまたは複数の区間を決定する段階と；
前記一つまたは複数の区間に基づいて前記第一の距離および前記第二の距離を決定する段階とをさらに含む、
請求項１記載の方法。
【請求項８】
前記目標条件がストリング制約条件を含み、当該方法がさらに：
前記目標条件についての一つまたは複数のキャラクタ・オートマタを決定する段階と；
前記一つまたは複数のキャラクタ・オートマタに基づいて前記第一の距離および前記第二の距離を決定する段階とをさらに含む、
請求項１記載の方法。
【請求項９】
イベント駆動ソフトウェア・アプリケーションの複数のイベント・シーケンスを決定する段階と；
前記複数のイベント・シーケンスの各イベント・シーケンスについて、前記イベント駆動ソフトウェア・アプリケーションの一つまたは複数の目標条件のそれぞれに対する距離を決定する段階であって、イベント・シーケンス距離は、その対応するイベント・シーケンスの実行が対応する目標条件を満たす度合いを示す、段階と；
前記複数のイベント・シーケンスの実行に、前記イベント・シーケンス距離に基づいて優先度付けする段階と；
前記複数のイベント・シーケンスの一つまたは複数と、前記一つまたは複数の目標条件に対応する従属イベントとを含むイベント空間を、実行の前記優先度付けに従って探査する段階とを含む、
方法。
【請求項１０】
前記一つまたは複数の目標条件がそれぞれ数値制約条件を含み、当該方法がさらに：
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数の区間を決定する段階と；
前記一つまたは複数の区間に基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
請求項９記載の方法。
【請求項１１】
前記一つまたは複数の目標条件がそれぞれストリング制約条件を含み、当該方法がさらに：
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数のキャラクタ・オートマタを決定する段階と；
前記一つまたは複数のキャラクタ・オートマタに基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
請求項９記載の方法。
【請求項１２】
組み合わせ計算に基づいて前記複数のイベント・シーケンスの実行の優先度付けを調整する段階をさらに含む、請求項９記載の方法。
【請求項１３】
前記組み合わせ計算は、ローカルな検索ベースの組み合わせ計算、グローバルな検索ベースの組み合わせ計算、変異ベースの組み合わせ計算またはそれらの任意の組み合わせを含む、請求項１２記載の方法。
【請求項１４】
前記変異ベースの組み合わせ計算は、シミュレーテッド・アニーリング（SA）計算、遺伝的計算、タブー探索、粒子群最適化計算またはそれらの任意の組み合わせを含む、請求項１３記載の方法。
【請求項１５】
コンピュータ実行可能な命令を含むコンピュータ可読記憶媒体であって、前記命令はシステムに：
イベント駆動ソフトウェア・アプリケーションの複数のイベント・シーケンスを決定する段階と；
前記複数のイベント・シーケンスの各イベント・シーケンスについて、前記イベント駆動ソフトウェア・アプリケーションの一つまたは複数の目標条件のそれぞれに対する距離を決定する段階であって、イベント・シーケンス距離は、その対応するイベント・シーケンスの実行が対応する目標条件を満たす度合いを示す、段階と；
前記複数のイベント・シーケンスの実行に、前記イベント・シーケンス距離に基づいて優先度付けする段階と；
前記複数のイベント・シーケンスの一つまたは複数と、前記一つまたは複数の目標条件に対応する従属イベントとを含むイベント空間を、実行の前記優先度付けに従って探査する段階とを含む動作を実行させるよう構成されている、
コンピュータ可読記憶媒体。
【請求項１６】
前記一つまたは複数の目標条件がそれぞれ数値制約条件を含み、前記動作がさらに：
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数の区間を決定する段階と；
前記一つまたは複数の区間に基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
請求項１５記載のコンピュータ可読記憶媒体。
【請求項１７】
前記一つまたは複数の目標条件がそれぞれストリング制約条件を含み、前記動作がさらに：
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数のキャラクタ・オートマタを決定する段階と；
前記一つまたは複数のキャラクタ・オートマタに基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
請求項１５記載のコンピュータ可読記憶媒体。
【請求項１８】
前記動作が、組み合わせ計算に基づいて前記複数のイベント・シーケンスの実行の優先度付けを調整する段階をさらに含む、請求項１５記載のコンピュータ可読記憶媒体。
【請求項１９】
コンピュータ実行可能な命令を含むコンピュータ可読記憶媒体であって、前記命令はシステムに：
イベント駆動ソフトウェア・アプリケーションの、第一の変数を含む第一のイベント・シーケンスを決定する段階と；
イベント駆動ソフトウェア・アプリケーションの、第二の変数を含む第二のイベント・シーケンスを決定する段階と；
前記第一のイベント・シーケンスおよび前記第二のイベント・シーケンスの従属イベントを識別する段階であって、前記従属イベントは、前記第一の変数および前記第二の変数のうち一つまたは複数を含む目標条件を含む、段階と；
前記第一のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第一のイベント・シーケンスについての第一の距離を決定する段階と；
前記第二のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第二のイベント・シーケンスについての第二の距離を決定する段階と；
前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスの実行を前記第二のイベント・シーケンスより上に優先度付けする段階と；
前記優先度付けに従って、前記第一のイベント・シーケンス、前記第二のイベント・シーケンスおよび前記従属イベントのうちの一つまたは複数を含むイベント空間を探査する段階とを含む動作を実行させるよう構成されている、
コンピュータ可読記憶媒体。
【請求項２０】
前記動作が、前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスを前記第二のイベント・シーケンスより優先して実行することをさらに含む、請求項１９記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本稿で論じられる実施形態は、イベント駆動されるソフトウェアのイベント・シーケンスを構築することに関する。
【背景技術】
【０００２】
ソフトウェアの有効確認または検証といったソフトウェアの試験は、情報技術（IT）組織では一般的な活動である。たとえば、ソフトウェアが一つまたは複数のクライアント・コンピュータ・システムでの実行のためのデスクトップ・アプリケーションであるか、モバイル装置上での実行のためのモバイル装置アプリケーションであるか、一つまたは複数のサーバー・コンピュータ・システムでの実行のためのウェブ・アプリケーションであるかによらず、ソフトウェアの品質を検証することがしばしば重要である。ソフトウェアにおけるいくつかの型のエラーはユーザーにとってわずらわしかったり不便であったりするだけであるが、他の型のエラーはデータや金銭の損失といった他の問題を引き起こす可能性がある。
【０００３】
より普遍的になりつつある一つの型のソフトウェアは、グラフィカル・ユーザー・インターフェース（GUI）ベースのアプリケーションおよびウェブ・ベースのアプリケーションのようなイベント駆動ソフトウェアである。イベント駆動ソフトウェアでは、ソフトウェアのフローは、ユーザー・アクション（マウス・クリック、キー押下）、センサー出力または他のプログラム／スレッドからのメッセージのようなイベントによって決定されうる。イベント駆動ソフトウェアは多数の異なるイベントおよび対応するイベント・シーケンスをもつことがあり、それが試験の際に活用されうる。しばしば、多数のイベントおよびイベント・シーケンスはイベント・シーケンス爆発を引き起こしうる。イベント・シーケンス爆発の結果、イベント駆動ソフトウェアの試験が時間がかかったりおよび／または資源集約的になったりすることがある。いくつかの事例では、イベント・シーケンス爆発から必要とされる処理の量が、試験を実行する際に禁止的となることもある。
【０００４】
本願で特許請求される主題は、何らかの欠点を解決したり、上記のような環境でのみ動作したりする実施形態に限定されるものではない。むしろ、この背景は、本稿に記載されるいくつかの実施形態が実施されうる一つの例示的な技術領域を例示するために与えられている。
【発明の概要】
【課題を解決するための手段】
【０００５】
ある実施形態のある側面によれば、方法はイベント駆動ソフトウェア・アプリケーションのイベント・シーケンスを判別することを含んでいてもよい。方法はさらに、各イベント・シーケンスについて、イベント駆動ソフトウェア・アプリケーションの一つまたは複数の目標条件のそれぞれに関する距離を決定することを含んでいてもよい。イベント・シーケンス距離は、その対応するイベント・シーケンスの実行が対応する目標条件を満たす度合いを示していてもよい。方法はまた、イベント・シーケンス距離に基づいて複数のイベント・シーケンスの実行に優先度を付けることを含んでいてもよい。さらに、方法は、実行の優先度付けに従って、前記イベント・シーケンスの一つまたは複数と、前記一つまたは複数の目標条件に対応する従属イベントとを含むイベント空間を探査することを含んでいてもよい。
【０００６】
実施形態の目的および利点は、少なくとも、請求項において具体的に指摘される要素、事項および組み合わせによって、実現され、達成されるであろう。
【０００７】
以上の一般的な記述および以下の詳細な記述はいずれも例示および説明するものであり、特許請求される発明を制約するものではないことは理解されるものとする。
【図面の簡単な説明】
【０００８】
例示的な実施形態は、付属の図面を使いつつさらなる具体性および詳細さをもって記述され、説明される。
【図１Ａ】ソフトウェアを試験するよう構成されている例示的なシステムを表わす図である。
【図１Ｂ】ソフトウェアを試験するよう構成されている試験モジュールを含んでいてもよい例示的な電子デバイスを示す図である。
【図２】イベント駆動ソフトウェア・アプリケーションを試験することに関して使用されうる例示的なフローの図である。
【図３】ストリング条件を表わすために使用されうる有限状態機械のグラフの例示的な実施形態の図である。
【図４】グローバル計算を実行する例示的な方法のフローチャートである。
【図５Ａ】例示的なイベント集合を示す図である。
【図５Ｂ】図５Ａのイベント集合に関連付けられた例示的な試験結果を示す図である。
【図６Ａ】もう一つの例示的なイベント集合を示す図である。
【図６Ｂ】図６Ａのイベント集合に関連付けられた例示的な試験結果を示す図である。
【図７】ローカル計算を実行する例示的な方法７００のフローチャートである。
【図８Ａ】変異ベースの組み合わせ計算を含む、図７のローカル計算の修正の例示的な方法８００のフローチャートである。
【図８Ｂ】図８Ａの変異ベースの組み合わせ計算のために使用されうる例示的なシミュレーテッド・アニーリングを含むフローチャートである。
【発明を実施するための形態】
【０００９】
本稿に記載されるいくつかの実施形態は、電子デバイスのためのグラフィカル・ユーザー・インターフェース（GUI）ベースのアプリケーションおよびウェブ・ベースのアプリケーションのようなイベント駆動ソフトウェアを試験する方法およびシステムに関する。イベント駆動ソフトウェア・アプリケーションのフローは、ユーザー・アクション（マウス・クリック、キー押下）、センサー出力または他のプログラム／スレッドからのメッセージのような種々の「イベント」によって決定されうる。イベント駆動ソフトウェア・アプリケーションは、試験の際に活用されうる多数の異なるイベントおよび対応するイベント・シーケンスをもつことがあるが、それがしばしば、イベント駆動ソフトウェア・アプリケーションを解析するときのイベント・シーケンス爆発問題につながりうる。
【００１０】
のちに詳述するように、イベント駆動ソフトウェア・アプリケーションの複数の初期イベント・シーケンスのそれぞれについて、該初期イベント・シーケンスの従属イベントの一つまたは複数の目標条件に対してイベント・シーケンス距離が決定されてもよい。複数の従属イベントについて、そのそれぞれは別個に考えられてもよい。イベント・シーケンス距離は、その対応する初期イベント・シーケンスの実行が対応する目標条件を満たすことになりうる度合いを示していてもよい。距離およびその計算の説明はのちにさらに詳細に述べる。
【００１１】
いくつかの実施形態では、初期イベント・シーケンスの実行は、イベント・シーケンス距離に基づいて優先度を付けられてもよい。さらに、前記初期イベント・シーケンスの一つまたは複数と、従属イベントとを含むイベント空間が、実行の優先度付けに基づいて探査されてもよい。優先度付けは、どのイベント・シーケンスが、他の方法より増大した効率で目標条件を満たしうるかを判別することを許容しうる。たとえば、そのようなプロセスは、それ以外の方法で探査されうるイベント・シーケンスの数を減らしうる仕方で、イベント駆動ソフトウェアの、目標条件の充足に対応する諸部分の探査を許容しうる。したがって、イベント・シーケンス爆発に関連する問題が少なくとも部分的には回避されうる。
【００１２】
本開示の諸実施形態は、付属の図面を参照して説明される。
【００１３】
図１Ａは、本稿に記載される少なくとも一つの実施形態に基づいて構成された、イベント駆動ソフトウェアを試験するよう構成された例示的なシステム１００を表わす図である。システム１００は、イベント駆動ソフトウェア・アプリケーションの試験対象コード１０４に関して試験を実行し、イベント駆動ソフトウェア・アプリケーションの試験結果１０８を生成するよう構成された試験モジュール１０６を含んでいてもよい。試験対象コード１０４は、たとえばイベント駆動ソフトウェア・アプリケーション、イベント駆動ソフトウェア・アプリケーションのコード、ライブラリ、アプリケーション、スクリプトまたは処理装置による実行のための他の論理もしくは命令といった電子データを含んでいてもよい。いくつかの実施形態では、試験対象コード１０４は、イベント駆動ソフトウェア・アプリケーションの完全なインスタンスを含んでいてもよい。追加的または代替的に、試験対象コード１０４はイベント駆動ソフトウェア・アプリケーションの一部を含んでいてもよい。試験対象コード１０４は、イベント駆動ソフトウェア・アプリケーションのために使用されうるいかなる好適な型のコンピュータ言語で書かれていてもよい。
【００１４】
試験対象コード１０４は、いくつかのソフトウェア・モジュールに編成されているソフトウェア・プログラムの諸部分を含んでいてもよい。それらのソフトウェア・モジュールは、それらのソフトウェア・モジュールの特定の機能を実行するコードを含んでいてもよい。特定の機能を実行するコードは、ソフトウェア関数と称されることがある。いくつかの実施形態では、試験対象コード１０４は、イベント駆動アプリケーションに関連付けられたイベントの発生に応答して一つまたは複数のソフトウェア関数を実行してもよい。たとえば、試験対象コード１０４は、イベント・シーケンス「e1」に応答して変数「a」に関する動作を実行しうるソフトウェア関数「f1(a)」を含んでいてもよい。
【００１５】
のちに詳述するように、試験モジュール１０６は、試験対象コード１０４を探査し、試験することに関して助けになりうる、試験対象コード１０４に関する一連の動作を実行するよう構成されていてもよい。たとえば、試験モジュール１０６は、試験対象コード１０４の初期イベント・シーケンスを決定するよう構成されていてもよい。初期イベント・シーケンスは、試験対象コード１０４を探査する際の出発点として使用されてもよい一つまたは複数のイベントの諸シーケンスを含んでいてもよい。いくつかの実施形態では、初期イベント・シーケンスは、試験対象コード１０４を開くまたは初期化するために利用可能でありうる諸イベントを含んでいてもよい。追加的または代替的に、初期イベント・シーケンスは、試験対象コード１０４を開くまたは初期化したときに利用可能でありうる諸イベントを含んでいてもよい。さらに、そのアプリケーションの実行中に、試験対象コード１０４の特定の状態に関して新たに発見されうる諸イベントが、その特定の状態についての追加初期イベントとして含められてもよい。上記は単に初期イベント・シーケンスの例である。「初期イベント・シーケンス」という用語は、試験対象コード１０４を探査する際の出発点として使用されうるイベント・シーケンスのいかなる集合を含んでいてもよい。それについてはのちに詳述する。試験モジュール１０６は、任意の受け入れ可能なルーチン、メソッドまたはプロセスを使って初期イベント・シーケンスを決定するよう構成されていてもよい。
【００１６】
試験モジュール１０６は、初期イベントの一つまたは複数に依存しうる一つまたは複数の従属イベントを決定するよう構成されていてもよい。イベントは、他のイベントに対応しうる変数に依存する経路条件を含むときに、該他のイベント（たとえば初期イベント）の従属イベントであると考えられてもよい。たとえば、第一のイベントが変数に値を書き込んでもよく、第二のイベントがその変数の値に基づきうる経路条件をもちうる。よって、この例では、第二のイベントおよびその対応する経路条件は、第一のイベントに依存する。いくつかの実施形態では、第一のイベントは第二のイベントに依存してもよく、同時に、第二のイベントが第一のイベントに依存してもよい。さらに、イベントは自分自身に依存してもよい。
【００１７】
いくつかの実施形態では、試験モジュール１０６は、従属イベントの経路条件を同定し、該経路条件に関連付けられた変数を初期イベント・シーケンスに関連付けられた変数と照合して、どのイベントがどの初期イベント・シーケンスに依存するかを決定するよう構成されていてもよい。いくつかの実施形態では、従属イベントの経路条件に関連付けられた経路は、まだ探査されていないことがあり、よってそれらの経路条件は「目標条件」と称されてもよい。未探査の経路をもつそれらの経路条件は、該未探査の経路が探査されうるよう、目標とされうるからである。
【００１８】
試験モジュール１０６は、実行されたときに、目標条件を満たし、それらの目標条件の関連付けられた経路が探査されうるような一つまたは複数のイベント・シーケンスを決定するよう構成されていてもよい。たとえば、試験モジュール１０６はまず、ある特定の従属イベントに対応しうる特定の諸初期イベント・シーケンスを同定してもよい。試験モジュール１０６は次いで、それらの特定の初期イベント・シーケンスのそれぞれについて、前記特定の従属イベントの一つまたは複数の目標条件に対する距離を決定するよう構成されていてもよい。距離の決定についてはのちに詳述する。それぞれの特定の初期イベント・シーケンスについての距離は、その特定のイベント・シーケンスの実行が対応する目標条件を満たす度合いを示してもよい。
【００１９】
たとえば、特定の目標条件は次の条件「i＝3のとき」を含んでいてもよい。さらに、第一のイベント・シーケンスの実行の結果は「i＝4」となってもよく、第二のイベント・シーケンスの実行の結果は「i＝5」となってもよく、第三のイベント・シーケンスの実行の結果は「i＝3」となってもよい。この第三のイベント・シーケンスの実行がこの特定の目標条件を満たしうるという点で、第三のイベント・シーケンスの実行が、第一または第二のイベント・シーケンスの実行よりも高い度合いで、この特定の目標条件を満たすものと見なされてもよい。さらに、第一のイベント・シーケンスの実行後の「i」の値（たとえば「4」）が第二のイベント・シーケンスの実行後の「i」の値（たとえば「5」）よりも、この特定の目標条件に関連付けられた「i」目標値（たとえば「3」）により近いことがありうるという点で、第一のイベント・シーケンスの実行は、第二のイベント・シーケンスの実行よりも高い度合いでこの特定の目標条件を満たすものと見なされてもよい。この特定の目標条件に関する第一のイベント・シーケンスの第一の距離（「d1」）、この特定の目標条件に関する第二のイベント・シーケンスの第二の距離（「d2」）およびこの特定の目標条件に関する第三のイベント・シーケンスの第三の距離（「d3」）は、それぞれ第一、第二および第三のイベント・シーケンスによるこの特定の目標条件の充足の異なる度合いを示しうる。
【００２０】
たとえば、第一の距離（「d1」）は「i」の目標値と第一のイベント・シーケンス実行後の「i」の値との間の差として決定されてもよい（たとえば「d1＝|3−4|＝1」）。さらに、第二の距離（「d2」）は「i」の目標値と第二のイベント・シーケンス実行後の「i」の値との間の差として決定されてもよい（たとえば「d2＝|3−5|＝2」）。さらに、第三の距離（「d3」）は「i」の目標値と第三のイベント・シーケンス実行後の「i」の値との間の差として決定されてもよい（たとえば「d3＝|3−5|＝2」）。
【００２１】
したがって、この特定の例において、一般に、距離についてのより低い値は、「i」の目標値と対応するイベント・シーケンス実行後の「i」の値との間のより小さな差を示しうる。さらに、距離についての「0」の値は、「i」についての目標値がこの特定の例では満たされていることを示しうる。よって、第三の距離「d3」、第一の距離「d1」および第二の距離「d2」の上記の値は、第三のイベント・シーケンスの実行が、第一イベント・シーケンスまたは第二のイベント・シーケンスの実行より高い度合いで上記の特定の目標条件を満足させうることを示しうる。さらに、この特定の例における第一の距離「d1」および第二の距離「d2」の値は、第一のイベント・シーケンスの実行が、第二のイベント・シーケンスの実行より高い度合いで上記の特定の目標条件を満足させうることを示しうる。さらに、この特定の例における第三の距離「d3」の値は、第三のイベント・シーケンスの実行が上記の特定の目標条件を満足させうることを示しうる。
【００２２】
試験モジュール１０６は、これらの距離に基づいて上記の特定の初期イベント・シーケンスの実行に優先度付けするよう構成されていてもよい。試験モジュール１０６は、前記特定の従属イベントと前記特定の初期イベント・シーケンスの一つまたは複数とを含む試験対象コード１０４のイベント空間を、前記特定のイベント・シーケンスの実行の優先度付けに基づいて探索するよう構成されていてもよい。たとえば、いくつかの実施形態では、試験モジュール１０６は、より小さな距離をもつ特定の初期イベント・シーケンスがより大きな距離をもつ特定の初期イベント・シーケンスより上に実行のために優先度付けされることに基づいて、最も小さな距離をもつ特定の初期イベント・シーケンスを最初に実行してもよい。試験モジュール１０６が優先度付けおよび探索をどのように実行しうるかの例に関するさらなる詳細は後述する。上記で示したように、優先度付けは、試験モジュール１０６が、どのイベント・シーケンスが、他の方法より増大した効率をもって目標条件を満たしうるかを判別することを許容しうる。
【００２３】
いくつかの実施形態では、試験モジュール１０６は、試験対象コード１０４を試験することからの試験結果１０８を生成するよう構成されていてもよい。いくつかの実施形態では、試験結果１０８は目標条件の一つまたは複数を満たしうるイベント・シーケンスを示してもよい。たとえば、いくつかの実施形態では、試験結果１０８は、どのイベント・シーケンスがどの目標条件を満たしうるかのグラフィックな例解を提供しうるイベント・シーケンス木を含んでいてもよい。
【００２４】
図１Ｂは、本稿に記載される少なくとも一つの実施形態に基づく、試験モジュール１０６を含みうる例示的な電子デバイス１０２を示す。電子デバイス１０２は、試験モジュール１０６を使って試験対象コード１０４を試験するよう構成されているいかなる好適なシステム、装置またはデバイスを含んでいてもよい。電子デバイス１０２は、メモリ１１２に通信上結合されたプロセッサ１１０を含んでいてもよい。いくつかの実施形態では、試験モジュール１０６は、プロセッサ１１０による実行のためのメモリ１１２内に存在する論理または命令において具現されてもよい。
【００２５】
プロセッサ１１０は、さまざまなコンピュータ・ハードウェアまたはソフトウェア・モジュールを含むいかなる好適な特殊目的または汎用コンピュータ、コンピューティング・エンティティまたは処理装置を含んでいてもよく、いかなる適用可能なコンピュータ可読記憶媒体上に記憶された命令を実行するよう構成されていてもよい。たとえば、プロセッサ１１０はマイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（DSP）、特定用途向け集積回路（ASIC）、フィールド・プログラマブル・ゲート・アレイ（FPGA）またはプログラム命令をインタープリットおよび／または実行するおよび／またはデータを処理するよう構成された他の任意のデジタルもしくはアナログ回路を含んでいてもよい。図１Ｂでは、プロセッサ１１０は、本稿に記載される任意の数の動作を個々にまたは集団的に実行するよう構成された任意の数のプロセッサを含んでいてもよい。さらに、前記プロセッサのうち一つまたは複数が一つまたは複数の異なる電子デバイス上に存在していてもよい。いくつかの実施形態では、プロセッサ１１０は、プログラム命令をインタープリットおよび／または実行するおよび／またはメモリ１１２に記憶されたデータを処理することを行なってもよい。
【００２６】
メモリ１１２は、コンピュータ実行可能な命令またはデータ構造を担持するまたは記憶するコンピュータ可読記憶媒体を含んでいてもよい。そのようなコンピュータ可読記憶媒体は、プロセッサ１１０のような汎用または特殊目的コンピュータによってアクセスされうるいかなる利用可能な媒体であってもよい。限定ではなく例として、そのようなコンピュータ可読記憶媒体は、ランダム・アクセス・メモリ（RAM）、読み出し専用メモリ（ROM）、電気的に消去可能なプログラム可能な読み出し専用メモリ（EEPROM）、コンパクトディスク読み出し専用メモリ（CD-ROM）または他の光ディスク記憶、磁気ディスク記憶または他の磁気記憶デバイス、フラッシュメモリ・デバイス（たとえば半導体メモリ・デバイス）またはコンピュータ実行可能な命令またはデータ構造の形で所望されるプログラム・コードを担持または記憶するために使用されうる、汎用または特殊目的コンピュータによってアクセスされうる他の任意の記憶媒体を含む、有体または非一時的なコンピュータ可読記憶媒体を含んでいてもよい。上記のものの組み合わせも、コンピュータ可読記憶媒体の範囲内に含まれうる。コンピュータ実行可能な命令はたとえば、プロセッサ１１０に、ある機能または機能群を実行させるよう構成された命令およびデータを含んでいてもよい。
【００２７】
試験モジュール１０６は、プロセッサ１１０に試験対象コード１０４の試験を実行させるよう構成された命令およびデータを含んでいてもよい。よって、いくつかの実施形態では、電子デバイス１０２は、図１Ｂに示されるように、メモリ１１２に試験モジュール１０６を組み込んでもよい。
【００２８】
図２は、本稿に記載される少なくとも一つの実施形態に基づく、イベント駆動ソフトウェア・アプリケーションの試験に関して実行されうる例示的なフロー２００の図である。フロー２００はいかなる好適なシステム、装置またはデバイスによって実行されてもよい。たとえば、図１Ｂの電子デバイス１０２の試験モジュール１０６がフロー２００に関連する動作の一つまたは複数を実行してもよい。離散的なブロックおよびフェーズで図示されているが、フロー２００のブロックまたはフェーズの一つまたは複数に関連するステップおよび動作は、実装に依存して、追加的なブロックまたはフェーズに分割されても、より少数のブロックまたはフェーズに組み合わされても、あるいはなくされてもよい。
【００２９】
フロー２００は、図１Ａの試験対象コード１０４のような試験対象コードのはたらきをしうるイベント駆動ソフトウェア・アプリケーションの一つまたは複数の部分に関して実行されてもよい。いくつかの実施形態では、フロー２００は、試験対象コードに関連していてもよい一つまたは複数の初期イベント・シーケンス２０２を受領することによって始まってもよい。初期イベント・シーケンス２０２は、試験対象コードのイベント空間に含まれていてもよい。初期イベント・シーケンス２０２は、試験対象コードのパーサーまたはインタープリターから得られてもよいイベントまたはイベントのシーケンスを含んでいてもよい。試験対象コードの実行中に動的に発見されるイベント・シーケンスも、いくつかの場合には初期イベント・シーケンス２０２と考えられてもよい。たとえば、ウェブ・アプリケーションの初期イベント・シーケンス２０２はその関連するソース・コードと一緒に、ウェブ・ブラウザーから取得されてもよい。
【００３０】
図示した実施形態では、フロー２００は、イベント識別（identification）フェーズ２０４、イベント抽象化（abstraction）フェーズ２０６およびイベント・コンストラクターおよびスケジューラー（constructor  and  scheduler）・フェーズ２１０（以下では「コンストラクター・フェーズ２１０」と称される）を含んでいてもよい。イベント識別フェーズ２０４、イベント抽象化フェーズ２０６およびコンストラクター・フェーズ２１０は、初期イベント・シーケンス２０２および関する試験対象コードに関する動作を実行して試験結果２０８を出力するよう構成されていてもよい。試験結果は、図１Ａに関して上述した試験結果１０８と類似していてもよい。のちに詳述するように、イベント識別フェーズ２０４、イベント抽象化フェーズ２０６およびコンストラクター・フェーズ２１０に関連する動作は、探索中のイベント・シーケンスの実行が距離に従って優先度付けされうるように、試験対象コードのイベント空間を許容し、探索するために実行されてもよい。
【００３１】
イベント識別フェーズ２０４は、初期イベント・シーケンス２０２のうちの一つまたは複数に関する一つまたは複数の従属イベント２１６を決定することに関連する動作に対応していてもよいブロック２１２を含んでいてもよい。たとえば、いくつかの実施形態では、初期イベント・シーケンス２０２に含まれない、まだ探索されていない、および初期イベント・シーケンス２０２のうちの一つまたは複数の実行によって到達されうる一つまたは複数のイベントが、新たな初期イベント２０２として同定されてもよく、そのうちで未探査の経路条件をもつ従属イベントが同定される。
【００３２】
いくつかの実施形態では、ブロック２１２は、従属イベント２１６を対応する初期イベント・シーケンス２０２と相関付けることに関連する動作を含んでいてもよい。たとえば、初期イベント・シーケンス２０２によって書かれる変数が、従属イベント２１６に関連付けられた一つまたは複数の経路条件の一部であってもよい変数と比較されて、どの従属イベント２１６がどの初期イベント・シーケンス２０２に依存しうるかを判別してもよい。
【００３３】
いくつかの実施形態では、イベント識別フェーズ２０４は、初期イベント・シーケンス２０２の一つまたは複数のイベント集合２１８を決定することに関連する動作に対応していてもよいブロック２１４を含んでいてもよい。イベント集合２１８はそれぞれ、同じ従属イベントを共有する一つまたは複数の初期イベント・シーケンス２０２を含んでいてもよい。たとえば、第一の初期イベント・シーケンスは、ある特定の従属イベントの経路条件に関連付けられていてもよい第一の変数に書き込みをしてもよい。さらに、第二の初期イベント・シーケンスは、やはりその特定の従属イベントの上記経路条件または別の経路条件に関連付けられていてもよい第二の変数に書き込みをしてもよい。この特定の例については、第一の初期イベント・シーケンスおよび第二の初期イベント・シーケンスは、その特定の従属イベント２１６がその両方に依存しうるので、同じイベント集合２１８に含まれてもよい。
【００３４】
イベント抽象化フェーズ２０６は、イベント識別フェーズ２０４において決定されうる従属イベント２１６に関して抽象化を実行することに関連した動作を含んでいてもよい。たとえば、イベント抽象化フェーズ２０６は、従属イベント２１６の経路条件を収集することに関連した動作に対応してもよいブロック２２０を含んでいてもよい。従属イベント２１６はそれぞれ、満たされたときに試験対象コードが対応する従属イベント２１６に関連した動作を実行する結果を与えうる一つまたは複数の経路条件を含んでいてもよい。
【００３５】
たとえば、ある特定の従属イベント２１６の経路条件は、一つまたは複数の変数の一つまたは複数の値に関連する「If」文などであって、満たされたときにその特定の従属イベント２１６を実行するときのバグまたはセキュリティ脆弱性に到達する結果となりうるものを含んでいてもよい。決定された経路条件は、数値またはストリング変数に関連付けられた条件を含んでいてもよい目標条件２２３として同定されてもよい。数値変数に基づきうる経路条件または目標条件は、「数値条件」と称されてもよく、ストリング変数に基づきうる経路条件または目標条件は、「ストリング条件」と称されてもよい。
【００３６】
イベント抽象化フェーズ２０６は、従属イベント２１６の目標条件の数値条件に関連付けられた数値区間を計算することに関連する動作に対応していてもよいブロック２２２をも含んでいてもよい。いくつかの実施形態では、数値区間は、区間に抽象化されうる対応するシンボリック条件に基づいて決定されてもよい。目標条件についてのシンボリック条件は、いかなる好適な技法を使って決定されてもよい。
【００３７】
特に、数値条件は、一つまたは複数の数値変数に関連付けされた値の一つまたは複数の範囲に基づいていてもよい対応するシンボリック経路条件を有していてもよい。シンボリック経路条件は次いで、一つまたは複数の区間の併合（union）に変換されてもよい。例として、数値（たとえば整数）条件のシンボリック経路条件「0≦i≦1∨i＞5」は次の区間の併合「i∈[0,1]∪[6,∞]」に変換されてもよい。もう一つの例として、数値条件のシンボリック経路条件「i*j＞9∧i＞2」は次の区間の併合「i*j∈[10,∞]∧i∈[3,∞]」に変換されてもよい。数値条件およびその関連付けられた区間は、イベント抽象化フェーズ２０６の間に決定されうる抽象化された目標条件２２４の集合に含められてもよい。
【００３８】
数値条件の経路条件は複数の数値変数に関わっていてもよい。この条件は次いで、多次元ボックスの併合に変換されてもよい。例として、整数条件のシンボリック経路条件「0≦i≦10∧2j＜i∧j＞1」は、次の2Dボックス併合に変換されてもよい：「i∈[5,10]∧j∈[2,4]」。経路条件に関する複数の変数の可能な値を推定するときの精度を高めるために、より複雑なモデルが使われることができる。
【００３９】
ブロック２２２は、従属イベント２１６の目標条件のストリング条件に関連付けられたストリング・オートマタを計算することに関連する動作にも対応していてもよい。いくつかの実施形態では、有限状態機械（FSM）が、ストリング条件を表わしうるストリング・オートマタとして生成されてもよい。ストリング条件およびその関連付けられたストリング・オートマタは、イベント抽象化フェーズ２０６の間に決定されうる抽象化された目標条件２２４の集合に含まれてもよい。
【００４０】
たとえば、図３は、少なくとも一つの実施形態に基づく、ストリング条件を表わすために使用されうるFSM  ３００のグラフの例示的な実施形態の図解である。FSM  ３００における中間状態は単一の円によって表わされてもよく、FSM  ３００の受け入れ状態（accepting  state）（たとえば、ストリング条件が満たされうる状態）は二重円によって表わされてもよく、FSM  ３００の状態への入力は対応する円につながる矢印によって表わされてもよい。
【００４１】
図示した例では、FSM  ３００は、ストリング「A1」またはストリング「B2」のいずれかではじまる（starts  with）ストリングによって満たされうるストリング条件「s.startsWith('A1')∨s.starsWith('B2')」を表わしていてもよい。特に、図示した例では、FSM  ３００は、開始状態３０２、第一の中間状態３０４、第二の中間状態３０６および受け入れ状態３０８を含んでいてもよい。
【００４２】
開始状態３０２は、何のキャラクタも割り当てられていないときの（すなわち、空のときの）ストリング「s」を表わしうる。第一の中間状態３０４は、「s」の最初のキャラクタが「A」であるときに開始状態３０２から到達されうる。受け入れ状態３０８は、「A」に続くキャラクタが「1」であるときに第一の中間状態３０４から到達されうる。この場合、「s.startsWith('A1')」が満たされうるからである。
【００４３】
第二の中間状態３０６は、「s」の最初のキャラクタが「B」であるときに開始状態３０２から到達されうる。「s＝B」であるときは、「B」は「s」の最初でありかつ最後のキャラクタでありうること、「*」が任意キャラクタを表わすとして「s＝B*」であるときは「B」は「s」の最初のキャラクタであり、任意のキャラクタが後続することを注意しておく。受け入れ状態３０８は、「B」に続くキャラクタが「2」であるときに第一の中間状態３０６から到達されうる。
【００４４】
FSM  ３００は、特定のストリング条件について生成されうるFSMの単なる例である。任意の数の異なるFSMが任意の数の異なるストリング条件について生成されてもよい。ストリングおよびストリング条件のFSMによる表現のさらなる例および説明は、2012年5月29日に出願された米国特許出願第13/482,598号に見出されうる。同出願の内容全体はここに参照によって組み込まれる。
【００４５】
図２を参照するに、コンストラクター・フェーズ２１０は、イベント識別フェーズ２０４の間に決定されたイベント集合２１８および従属イベント２１６に基づいて試験結果２０８を生成することに関連する動作を含んでいてもよい。コンストラクター・フェーズ２１０は、イベント抽象化フェーズ２０６の間に決定されうる目標条件２２３および対応する抽象化された目標条件２２４に基づいて試験結果２０８を生成することに関連する動作を含んでいてもよい。上記で示したように、いくつかの実施形態では、試験結果２０８は、従属イベント２１６の目標条件の一つまたは複数を満たしうるイベント・シーケンスを含んでいてもよい。これらのまたは他の実施形態において、試験結果２０８は、イベント・シーケンスによる目標条件の充足をも示しうる一つまたは複数のイベント・シーケンス木を含んでいてもよい。
【００４６】
いくつかの実施形態では、試験結果２０８は、「貪欲な計算（Greedy  Computation）」と称される検索ベースの組み合わせ計算（search-based  combinational  computation）に関連付するブロック２２６おいて実行される動作に基づいて決定されてもよい。貪欲な計算は、イベントのどのシーケンスが抽象化された目標条件２２４の目標条件を満たしうるかを決定するために実行されてもよい。貪欲な計算に関して実行される動作は、特定のイベント集合２１８および該特定のイベント集合２１８に対応しうる特定の抽象化された諸目標条件２２４に関して実行されてもよい。したがって、貪欲な計算に関連する動作は、種々のイベント集合２１８および対応する抽象化された目標条件２２４に関して離散的に実行されてもよい。貪欲な計算は、上記に示した距離に基づくイベント・シーケンスの優先順位付けに従って試験対象コードの探索を実行するために使われてもよい。したがって、貪欲な計算は、試験対象コードのイベント空間の探索の間のイベント・シーケンスの実行が、距離に従って優先度付けされうるよう実行されてもよい。
【００４７】
いくつかの実施形態では、貪欲な計算は、特定のイベント集合２１８およびその対応する目標条件２２３および抽象化された目標条件２２４で始まることによって初期化してもよい。貪欲な計算は、特定のイベント集合２１８の一つまたは複数のイベント・シーケンスと対応する目標条件２２３とについての距離を計算することをも含んでいてもよい。いくつかの実施形態では、距離は、コンストラクター・フェーズ２１０の距離計算ブロック２３４において決定されてもよい。距離は、対応するイベント・シーケンスの実行が対応する目標条件２２３を満たす度合いを示してもよい。
【００４８】
下記は、目標条件２２３の対応する特定の数値条件に関する、特定のイベント・シーケンスの距離を計算する例である。特定の数値条件は、値「v」についての上限「ub」および下限「lb」をもつ区間を含んでいてもよい対応する抽象化された目標条件２２４を有していてもよい。ここで、値「v」が上限「ub」と下限「lb」の間であれば、特定の数値条件は満たされうる。さらに、値「v」は、特定のイベント・シーケンスが実行されるときに変えられる値をもちうる一つまたは複数の変数の値に関連していてもよい。例として、値「v」は、特定のイベント・シーケンスが実行されるときに変えられることがありうる整数「i」の値に基づいていてもよい。もう一つの例として、値「v」は、特定のイベント・シーケンスが実行されるときにいずれも変えられることがありうる整数「i」の値と整数「j」の値の積に基づいていてもよい（たとえば「v＝i*j」）。
【００４９】
特定のイベント・シーケンスの特定の数値条件に対する距離は、その特定のイベント・シーケンスが実行されたとした場合の上限「ub」と値「v」の間の距離および下限「lb」と値「v」の間の距離のうちの小さいほうであってもよい。さらに、いくつかの実施形態では、その特定のイベント・シーケンスが実行されたとした場合に値「v」が下限「lb」と上限「ub」の間であるときは距離は「0」であると決定されてもよい。たとえば、値「v」の区間「[lb,ub]」への距離は次のように表わしてもよい：
【数１】
0006500698.tif 000002
【００５０】
追加的または代替的に、特定の数値条件が複数の区間を含むときは、距離は各区間について決定されてもよく、それらの距離のうちのより小さいものが距離として使われてもよい。さらに、いくつかの実施形態では、値「v」は、距離決定がなされる前に「0」に初期化されてもよい。
【００５１】
例として、特定の数値条件に関連付けられた抽象化された目標条件２２４は「i∈[0,1]∪[6,∞]」として定義されてもよく、特定のイベント・シーケンスの実行は「i」の値「v」が「3」である結果を与えてもよい。したがって、その特定のイベント・シーケンスのその特定の数値条件に対する距離は、「min(|3−1|,|6−3|)＝2」と決定されてもよい。
【００５２】
下記は、特定のイベント・シーケンスの、目標条件２２３の対応する特定のストリング条件に対する距離を計算する例である。特定のイベント・シーケンスの特定のストリング条件に対する距離は、ストリングが、その特定のイベント・シーケンスの実行後のその特定のストリング条件に対応する抽象化された目標条件２２４の対応するFSMの最も近い受け入れ状態から何遷移目でありうるかを決定することによって決定されてもよい。
【００５３】
たとえば、特定のストリング条件は、対応する抽象化された目標条件２２４の図３のFSM  ３００によって表わされうるストリング条件「s.startsWith('A1')∨s.startsWiths('B2')」を含んでいてもよい。さらに、特定のイベント・シーケンスの実行が、ストリング「s」が一つまたは複数のキャラクタを割り当てられる結果を与えうる。距離は、その特定のイベント・シーケンスが実行されたとした場合にストリング「s」にとって最も近い受け入れ状態に到達するための遷移数を示していてもよい。たとえば、FSM  ３００に関し、その特定のイベント・シーケンスの実行が「s＝'A1'」という結果になるとすると、その特定のイベント・シーケンスのその特定のストリング条件に対する距離は、「0」と決定されてもよい。条件「s.startsWith('A1')」が満たされ、FSM  ３００が受け入れ状態３０８になりうるからである。
【００５４】
さらにもう一つの例として、FSM  ３００に関し、その特定のイベント・シーケンスの実行が「s＝'C12'」という結果になるとすると、その特定のイベント・シーケンスのその特定のストリング条件に対する距離は、「2」と決定されてもよい。FSM  ３００は開始状態３０２にあることがあり、受け入れ状態３０８に到達するための遷移の数は2になりうるからである。
【００５５】
ブロック２２６に戻ると、いくつかの実施形態では、貪欲な計算は、グローバルな実装および／またはローカルな実装を含みうる。貪欲な計算のグローバルな実装は、グローバルな検索ベースの組み合わせ計算を含んでいてもよく、「グローバル計算」と称されてもよい。「グローバル計算」の関連する動作はブロック２２８において実行されてもよい。貪欲な計算のローカルな実装は、ローカルな検索ベースの組み合わせ計算を含んでいてもよく、「ローカル計算」と称されてもよい。「ローカル計算」の関連する動作はブロック２３０において実行されてもよい。
【００５６】
図４は、本稿に記載される少なくとも一つの実施形態に基づくグローバル計算を実行する例示的な方法４００のフローチャートである。いくつかの実施形態では、方法４００に関連する動作の一つまたは複数はフロー２００のブロック２２８において実行されてもよい。方法４００は、任意の好適なシステム、装置またはデバイスによって実行されてもよい。たとえば、図１Ｂの電子デバイスの試験モジュール１０６が方法４００に関連する動作の一つまたは複数を実行してもよい。離散的なブロックで示されているが、方法４００のブロックの一つまたは複数に関連するステップおよび動作は、所望される実装に依存して、追加的なブロックに分割されても、より少数のブロックに組み合わされても、あるいはなくされてもよい。
【００５７】
方法４００は、グローバル計算がイベント集合「S」を用いて初期化されうるブロック４０２で始まってもよい。いくつかの実施形態では、イベント集合「S」は、イベント集合「S」の各イベント・シーケンスが同じ従属イベント（「対応する従属イベント」）を共有しうるイベント集合を含んでいてもよい。いくつかの実施形態では、対応する従属イベントは、イベント集合「S」の初期化とともに含められてもよい。対応する従属イベントは、目標条件と考えられてもよい一つまたは複数の経路条件を含んでいてもよい。さらに、いくつかの実施形態では、目標条件は抽象化された目標条件に関連付けられていてもよい。
【００５８】
例として、図５Ａは、本稿に記載される少なくとも一つの実施形態に基づく、イベント集合「S」について使用されうるイベント集合５１８を示している。イベント集合５１８は、イベント・シーケンス「e1」およびイベント・シーケンス「e2」を含んでいてもよい。この例に示されるように、イベント・シーケンス「e1」および「e2」は整数変数「i」および「j」に書き込んでもよい。図５Ａは、従属イベント「e5」も示している。従属イベント「e5」は、未探査の経路条件（「目標条件」と称される）５２３ａ、５２３ｂ、５２３ｃおよび５２３ｄなどを含んでいてもよい。
【００５９】
目標条件５２３ａが満たされることは、「i」の値に基づいていてもよく、従属イベント「e5」に関連した経路（場合によっては「分枝」とも称される）「b15」の探査を許容してもよい。目標条件５２３ｂが満たされることは、値「j」に基づいていてもよく、従属イベント「e5」に関連した経路「b25」の探査を許容してもよい。目標条件５２３ｃが満たされることは、「i」および「j」両方の値に基づいていてもよく、従属イベント「e5」に関連した経路「b35」の探査を許容してもよい。さらに、目標条件５２３ｄが満たされることは、「i」および「j」両方の値に基づいていてもよく、従属イベント「e5」に関連した経路「b45」の探査を許容してもよい。目標条件５２３が満たされることは、「i」および／または「j」の値に基づいていてもよく、イベント・シーケンス「e1」および「e2」は「i」および「j」に書き込みしてもよいので、従属イベント「e5」はイベント・シーケンス「e1」および「e2」に依存しうる。よって、従属イベント「e5」は、イベント・シーケンス「e1」および「e2」の対応する従属イベントと考えられてもよい。
【００６０】
さらに、図示した例において、目標条件５２３はそれぞれ抽象化された目標条件５２４と関連付けられていてもよい。たとえば、目標条件５２３ａは抽象化された目標条件５２４ａと関連付けられていてもよく、目標条件５２３ｂは抽象化された目標条件５２４ｂと関連付けられていてもよく、目標条件５２３ｃは抽象化された目標条件５２４ｃと関連付けられていてもよく、目標条件５２３ｄは抽象化された目標条件５２４ｄと関連付けられていてもよい。さらに、変数「i」および「j」が整数でありうるので、目標条件５２３および抽象化された目標条件５２４は、数値条件と考えられてもよい。したがって、上記で示したように、抽象化された目標条件５２４は、対応する経路「bk5」（たとえば「b15」、「b25」、「b35」または「b45」）が探査されうるよう「i」および／または「j」についての区間を定義してもよい。
【００６１】
もう一つの例として、図６Ａは、本稿に記載される少なくとも一つの実施形態に基づく、イベント集合「S」について使用されうるイベント集合６１８を示している。イベント集合６１８は、イベント・シーケンス「e3」およびイベント・シーケンス「e4」を含んでいてもよい。この例に示されるように、イベント・シーケンス「e3」および「e4」はストリング変数「s」に書き込んでもよい。図６Ａは、従属イベント「e6」も示している。従属イベント「e6」は、未探査の経路条件（「目標条件」と称される）６２３ａおよび６２３ｂを含んでいてもよい。
【００６２】
目標条件６２３ａが満たされることは、「s」の内容に基づいていてもよく、従属イベント「e6」に関連した経路「b16」の探査を許容してもよい。さらに、目標条件６２３ｂが満たされることは、「s」の内容に基づいていてもよく、従属イベント「e6」に関連した経路「b26」の探査を許容してもよい。目標条件６２３が満たされることは、「s」の内容に基づいていてもよく、イベント・シーケンス「e3」および「e4」は「s」に書き込みしてもよいので、従属イベント「e6」はイベント・シーケンス「e3」および「e4」に依存しうる。よって、従属イベント「e6」は、イベント・シーケンス「e3」および「e4」の対応する従属イベントと考えられてもよい。
【００６３】
さらに、図示した例において、目標条件６２３はそれぞれ抽象化された目標条件６２４と関連付けられていてもよい。たとえば、目標条件６２３ａは抽象化された目標条件６２４ａと関連付けられていてもよく、目標条件６２３ｂは抽象化された目標条件６２４ｂと関連付けられていてもよい。さらに、図示した例では、変数「s」がストリングでありうるので、目標条件６２３および抽象化された目標条件６２４は、ストリング条件と考えられてもよい。したがって、上記で示したように、抽象化された目標条件６２４ａは、目標条件６２３ａを表わしていてもよく、どのようにして経路「b16」に到達するかを示しうるFSM  ６０１ａを含んでいてもよい。同様に、抽象化された目標条件６２４ｂは、目標条件６２３ｂを表わしていてもよく、どのようにして経路「b16」に到達するかを示しうるFSM  ６０１ｂを含んでいてもよい。
【００６４】
図５Ａおよび図６Ａのイベント・シーケンス「e1」、「e2」、「e3」および「e4」は図２の初期イベント・シーケンス２０２の例であってもよい。さらに、イベント集合５１８および６１８は、図２との関連で述べたブロック２１４に関して実行されうる動作に基づいて初期イベント・シーケンス２０２から分割されうるイベント集合２１８の例であってもよい。さらに、抽象化された目標条件５２４および６２４は、図２の抽象化された目標条件２２４の例であってもよい。さらに、従属イベント「e5」および「e6」は図２の従属イベント２１６の例であってもよい。
【００６５】
図４に戻ると、ブロック４０４で、イベント集合「S」のイベント・シーケンスの距離が、一つまたは複数の対応する目標条件に対して決定されてもよい。対応する目標条件は、対応する従属イベントの未探査の経路条件を含んでいてもよい。いくつかの実施形態では、距離は、図２の距離計算ブロック２３４に関して述べたように、対応する目標条件の抽象化された目標条件２２４に基づいて決定されてもよい。
【００６６】
たとえば、いくつかの実施形態では、距離は、それぞれ抽象化された目標条件５２４ａ〜５２４ｂに基づいて目標条件５２３ａ〜５２３ｂに対して図５Ａのイベント・シーケンス「e1」および「e2」について決定されてもよい。図示した例では、変数「i」および「j」の初期値は「0」と想定されてもよい。これらの値は、イベント・シーケンス実行の間に更新され、距離決定のために使われる。表１は、イベント・シーケンス「e1」および「e2」について決定されうる距離を示している。さらに、表１では、行はイベント・シーケンスに関連付けられていてもよく、列は対応する目標条件に関連付けられていてもよい。セル内の数字は、対応する行のイベントの、対応する列の目標条件に対する距離を示しうる。例として、イベント・シーケンス「e1」の実行後、iおよびjの値はそれぞれ3および1であり、目標条件５２３ｄへのその距離は|3×1−10|＝7である。
【表１】
0006500698.tif 000003
【００６７】
もう一つの例として、距離は、それぞれ抽象化された目標条件６２４ａおよび６２４ｂに基づいて目標条件６２３ａおよび６２３ｂに対して図６Ａのイベント・シーケンス「e3」および「e4」について決定されてもよい。図示した例では、変数「s」は実行前には空に設定されてもよい。表２は、イベント・シーケンス「e3」および「e4」について決定されうる距離を示している。さらに、表２では、行はイベント・シーケンスに関連付けられていてもよく、列は対応する目標条件に関連付けられていてもよい。セル内の数字は、対応する行のイベントの、対応する列の目標条件に対する距離を示しうる。
【表２】
0006500698.tif 000004
【００６８】
ブロック４０６では、イベント・シーケンスのいずれかが対応する目標条件に対して「0」の距離をもつかどうかが判定される。一つまたは複数のイベント・シーケンスが「0」の距離をもつときは、方法４００はブロック４０８に進んでもよく、そうでない場合は方法４００はブロック４１４に進んでもよい。
【００６９】
ブロック４０８では、対応する目標条件に対して「0」の距離をもつイベント・シーケンスの一つまたは複数が、対応する従属イベントをアペンドされてもよく、結果として得られるイベント・シーケンスが実行されてもよい。そのような実行は、対応する目標条件に関連付けられた経路が遭遇され、探査されることを許容しうる。いくつかの実施形態では、実行されたイベント・シーケンスは、対応する目標（または経路）条件に関連付けられた経路を「カバーする」と見なされうる発見されたイベント・シーケンスと考えられてもよい。のちに示すように、いくつかの実施形態では、一つまたは複数の発見されたイベント・シーケンスが、イベント集合「S」に関連付けられた試験結果に含まれてもよい。さらに、「0」の距離をもつイベント・シーケンスを実行することにより、実行および探査が、より低い充足度を示す距離に比べてより高い充足度を示す距離に従って優先されうる。
【００７０】
たとえば、図５Ａおよび表１の例に関し、イベント・シーケンス「e2」が従属イベント「e5」をアペンドされてもよく、結果として得られるイベント・シーケンス（「e2→e5」）が実行されてもよい。それが経路「b15」の探査を許容しうる。いくつかの実施形態では、イベント・シーケンス「e2→e5」はこうして、イベント集合５１８に関して発見されたイベント・シーケンスと見なされてもよく、イベント集合５１８に関連付けられた試験結果に含められてもよい。さらに、イベント・シーケンス「e2→e5」は経路「b15」をカバーするものと見なされてもよい。
【００７１】
もう一つの例として、図６Ａおよび表２の例に関し、イベント・シーケンス「e3」が従属イベント「e6」をアペンドされてもよく、結果として得られるイベント・シーケンス（「e3→e6」）が実行されてもよい。それが経路「b16」の探査を許容しうる。追加的または代替的に、イベント・シーケンス「e4」が従属イベント「e6」をアペンドされてもよく、結果として得られるイベント・シーケンス（「e4→e6」）が実行されてもよい。それも経路「b16」の探査を許容しうる。いくつかの実施形態では、イベント・シーケンス「e4→e6」はこうして、イベント集合６１８に関して発見されたイベント・シーケンスと見なされてもよく、イベント集合６１８に関連付けられた試験結果に含められてもよい。さらに、イベント・シーケンス「e4→e6」は経路「b16」をカバーするものと見なされてもよい。
【００７２】
ブロック４１０では、探査された経路条件は目標条件から除去されてもよい。探査された条件は、ブロック４０６に関連する動作に関連するイベント・シーケンスの実行に応答して遭遇および／または探査されうる経路に対応する「0」の距離に関連付けられている目標条件を含んでいてもよい。
【００７３】
たとえば、図５Ａおよび表１の例に関し、目標条件５２３ａは、「探査された条件」と考えられてもよく、前に目標条件５２３ａ〜５２３ｄを含んでいたかもしれない目標条件の集合から除去されてもよい。したがって、この特定の例および反復段階に関しては、目標条件の集合は、ブロック４１０後には目標条件５２３ｂ〜５２３ｄを含んでいてもよい。もう一つの例として、図６Ａおよび表２の例に関しては、目標条件６２３ａは、「探査された条件」と考えられてもよく、前に目標条件６２３ａおよび６２３ｂを含んでいたかもしれない目標条件の集合から除去されてもよい。したがって、この特定の例および反復段階に関しては、目標条件の集合は、ブロック４１０後には目標条件６２３ｂを含んでいてもよい。
【００７４】
ブロック４１２では、対応する従属イベントに関連付けられた何らかの目標条件が残っているかどうかが判定されてもよい。目標条件が残っているときは、方法４００はブロック４１４に進んでもよい。それ以上目標条件が残っていないときは、方法４００はブロック４２０に進んでもよい。
【００７５】
いくつかの実施形態では、それ以上目標条件が残っていないことは、対応する従属イベントの目標条件すべてを満たすイベント・シーケンスが発見されたかもしれないことを示しうる。したがって、いくつかの実施形態では、試験結果（たとえば試験結果２０８）がブロック４２０において生成されてもよい。いくつかの実施形態では、目標条件を満たしうる発見されたイベント・シーケンスは、試験結果に含まれてもよい。追加的または代替的に、いくつかの実施形態では、試験結果は、発見されたイベント・シーケンスによる目標条件の充足をも示しうる一つまたは複数のイベント・シーケンス木を含んでいてもよい。
【００７６】
ブロック４１４では、最も小さい0でない距離に関連付けられたイベント集合「S」のイベント・シーケンス「Seqmin」が実行されてもよい。いくつかの場合には、二つ以上のイベント・シーケンスが同じ最も小さい0でない距離に関連付けられていてもよい。これらまたは他の実施形態において、それらのイベント・シーケンスのいずれかが実行されうる。イベント・シーケンス「Seqmin」を実行することによって、実行および探査が、より低い充足度を示す距離に比べてより高い充足度を示す距離に従って優先度付けされうる。したがって、イベント・シーケンス「Seqmin」の実行は、そのイベント・シーケンス「Seqmin」の実行がイベント集合「S」の他のイベント・シーケンスより高い度合いで目標条件を満たすことを示すその距離に従って優先されうる。
【００７７】
例として、図５Ａおよび表１に関し、イベント・シーケンス「e1」に関連する最も小さな0でない距離は「1」であってもよく、イベント・シーケンス「e2」に関連する最も小さな0でない距離は「3」であってもよい。したがって、この特定の例については、イベント・シーケンス「e1」が「Seqmin」であると考えられてもよく、ブロック４１４において実行されてもよい。もう一つの例として、図６Ａおよび表２に関し、イベント・シーケンス「e3」に関連する最も小さな0でない距離は「1」であってもよく、イベント・シーケンス「e4」に関連する最も小さな0でない距離は「3」であってもよい。したがって、この特定の例については、イベント・シーケンス「e3」が「Seqmin」であると考えられてもよく、ブロック４１４において実行されてもよい。
【００７８】
ブロック４１６において、イベント集合「S」の各単数イベント・シーケンス（たとえば、イベントを一つだけもつシーケンス）が、ブロック４１４で決定されたイベント・シーケンス「Seqmin」にアペンド（append）されて、一つまたは複数のイベント・シーケンス「Seqapi」を生成してもよい。たとえば、図５Ａおよび表１に関し、イベント集合「S」は単数イベント・シーケンス「e1」および「e2」を含んでいてもよく、イベント・シーケンス「e1」が「Seqmin」であってもよい。したがって、この特定の例では、イベント・シーケンス「e1」が単数イベント・シーケンス「e1」および「e2」をアペンドされて、イベント・シーケンス「e1→e1」および「e1→e2」を生成してもよい。これらはそれぞれイベント・シーケンス「Seqap1」および「Seqap2」と記されてもよい。もう一つの例として、図６Ａおよび表２に関し、イベント集合「S」は単数イベント・シーケンス「e3」および「e4」を含んでいてもよく、イベント・シーケンス「e3」が「Seqmin」であってもよい。したがって、この特定の例では、単数イベント・シーケンス「e3」がイベント・シーケンス「e3」および「e4」をアペンドされて、イベント・シーケンス「e3→e3」および「e3→e4」を生成してもよい。これらはそれぞれイベント・シーケンス「Seqap1」および「Seqap2」と記されてもよい。
【００７９】
ブロック４１８では、イベント・シーケンス「Seqapi」はイベント集合「S」に追加されてもよい。たとえば、図５Ａおよび表１に関し、イベント集合５１８がイベント集合「S」であると考えられてもよく、イベント・シーケンス「e1」および「e2」を含んでいてもよい。さらに、この特定の例および反復段階におけるイベント・シーケンス「Seqapi」は「e1→e1」および「e1→e2」を含んでいてもよい。したがって、この特定の例および反復段階については、イベント・シーケンス「e1→e1」および「e1→e2」がイベント集合５１８に加えられてもよく、それによりイベント集合５１８は、ブロック４１２後にはイベント・シーケンス「e1」、「e2」、「e1→e1」および「e1→e2」を含みうる。もう一つの例として、図６Ａおよび表２に関し、イベント集合６１８がイベント集合「S」であると考えられてもよく、イベント・シーケンス「e3」および「e4」を含んでいてもよい。さらに、この特定の例および反復段階におけるイベント・シーケンス「Seqapi」は「e3→e3」および「e3→e4」を含んでいてもよい。したがって、この特定の例および反復段階については、イベント・シーケンス「e3→e3」および「e3→e4」がイベント集合６１８に加えられてもよく、それによりイベント集合６１８は、ブロック４１２後にはイベント・シーケンス「e3」、「e4」、「e3→e3」および「e3→e4」を含みうる。
【００８０】
ブロック４１８後は、方法４００はブロック４０４に戻ってもよい。いくつかの実施形態では、方法４００は、イベント集合「S」について、それ以上目標条件が残っていなく方法４００が上記のようにブロック４２０に進めるようになるまで、ブロック４０４、４０６、４０８、４１０、４１２、４１４、４１６および４１８のうちの一つまたは複数の動作を繰り返してもよい。
【００８１】
例として、図５Ａのイベント・シーケンス「e1」および「e2」ならびに新たなシーケンス「e1→e1」および「e1→e2」について目標条件５２３ｂないし５２３ｄに対する距離が決定されてもよい。表３は、これらのイベント・シーケンスについて決定されうる距離を示している。イベント・シーケンス「e1→e2」が最も小さい距離（「0」）をもつので、このシーケンスが「Seqmin」であると考えられてもよく、ブロック４１４で実行されてもよい。
【表３】
0006500698.tif 000005
【００８２】
したがって、ブロック４０４、４０６、４０８、４１０、４１２、４１４、４１６および４１８のうちの一つまたは複数の動作は、イベント集合「S」の対応する従属イベントに関連付けられた目標条件を満たしうる一つまたは複数のイベント・シーケンスが発見されるまで、繰り返されてもよい。たとえば、図５Ａおよび表１の例に関し、イベント集合５１８について、ブロック４０４、４０６、４０８、４１０、４１２、４１４、４１６および４１８のうちの一つまたは複数の動作が、従属イベント「e5」の目標条件５２３ａ〜５２３ｄを満たしうるイベント・シーケンスが発見されるまで繰り返されてもよい。上記で示したように、目標条件５２３ａ〜５２３ｄを満たしうるイベント・シーケンスが発見されたとき、方法４００はブロック４２０に進んで、経路「b15」〜「b45」をカバーしうる発見されたイベント・シーケンスを示しうる対応する試験結果を生成してもよい。上記で示したように、特定の経路の対応する経路条件を満たすことによって特定の経路に遭遇し、これを探査することを許容しうるイベント・シーケンスが、その特定の経路を「カバーする」と見なされてもよい。
【００８３】
図５Ｂは、本稿に記載される少なくとも一つの実施形態に基づく、イベント集合５１８に関連する例示的な試験結果５０８を示す。試験結果５０８はブロック４２０において生成されてもよく、試験結果２０８の例でもありうる。いくつかの実施形態では、試験結果５０８は、発見されたイベント・シーケンス集合５５０および／または対応するイベント・シーケンス木５５２を含んでいてもよい。
【００８４】
発見されたイベント・シーケンス集合５５０は、発見されたイベント・シーケンス５５４ａ、５５４ｂ、５５４ｃおよび５５４ｄを含んでいてもよい。発見されたイベント・シーケンス５５４ａは、経路「b15」をカバーしうるイベント・シーケンスを示していてもよく、発見されたイベント・シーケンス５５４ｂは、経路「b25」をカバーしうるイベント・シーケンスを示していてもよく、発見されたイベント・シーケンス５５４ｃは、経路「b35」をカバーしうるイベント・シーケンスを示していてもよく、発見されたイベント・シーケンス５５４ｄは、経路「b45」をカバーしうるイベント・シーケンスを示していてもよい。イベント・シーケンス木５５２は、発見されたイベント・シーケンス５５４をグラフィックな形で示してもよい。
【００８５】
もう一つの例として、図６Ａおよび表２の例に関し、イベント集合６１８について、ブロック４０４、４０６、４０８、４１０、４１２、４１４、４１６および４１８のうちの一つまたは複数の動作が、従属イベント「e6」の目標条件６２３ａおよび６２３ｂを満たしうるイベント・シーケンスが発見されるまで繰り返されてもよい。上記で示したように、目標条件６２３ａおよび６２３ｂを満たしうるイベント・シーケンスが発見されたとき、方法４００はブロック４２０に進んで、経路「b16」〜「b26」をカバーしうる発見されたイベント・シーケンスを示しうる対応する試験結果を生成してもよい。
【００８６】
図６Ｂは、本稿に記載される少なくとも一つの実施形態に基づく、イベント集合６１８に関連する例示的な試験結果６０８を示す。試験結果６０８はブロック４２０において生成されてもよく、試験結果２０８の例でもありうる。いくつかの実施形態では、試験結果６０８は、発見されたイベント・シーケンス集合６５０および／または対応するイベント・シーケンス木６５２を含んでいてもよい。
【００８７】
発見されたイベント・シーケンス集合６５０は、発見されたイベント・シーケンス６５４ａおよび６５４ｂを含んでいてもよい。発見されたイベント・シーケンス６５４ａは、経路「b16」をカバーしうるイベント・シーケンスを示していてもよく、発見されたイベント・シーケンス６５４ｂは、経路「b26」をカバーしうるイベント・シーケンスを示していてもよい。イベント・シーケンス木６５２は、発見されたイベント・シーケンス５５４をグラフィックな形で示してもよい。
【００８８】
したがって、方法４００は、探査の間のイベント・シーケンスの実行が距離に従って優先度付けされうるよう試験対象コードのイベント空間を探査するために実行されてもよい。これは、他の方法に比べ、発見されたイベント・シーケンスを決定する効率を高めうる。本開示の範囲から外れることなく、方法４００に対して修正、追加または省略がなされてもよい。たとえば、いくつかの事例では、方法４００は、特定数の反復段階が実行された後に、たとえ対応する目標条件の経路をカバーするイベント・シーケンスがすべての目標条件についてはみつかっていなくても、終了するよう構成されていてもよい。
【００８９】
さらに、本記述における「0」の距離をもつ特定のイベント・シーケンスは、その特定のイベント・シーケンスの実行が対応する目標条件を満たしうることを示す。さらに、上記の記述では、距離に関連付けられる数値が小さいほど、イベント・シーケンスは対応する目標条件を高い度合いで満たす。しかしながら、距離を決定するための種々の方法論が使用されることがあり、それらの方法論では数値または他のメトリックが同じ規則に従わないことがありうる。よって、上記で述べた「0」の距離に関連する動作は、特定の目標条件の充足の度合いを示しうる距離基準が何であれそれを受け入れるように修正されうる。追加的または代替的に、最も小さな距離に関連する動作は、あるイベント・シーケンスが他のイベント・シーケンスより高い度合いである特定の目標条件を満たしうることを示しうる距離基準が何であれそれを受け入れるよう修正されうる。
【００９０】
図２に戻ると、上述したように、「ローカル計算」および関連する動作がフロー２００のブロック２３０において実行されてもよい。下記で示すように、ローカル計算ではイベント集合に対する追加がされなくてもよいという点で、ローカル計算はグローバル計算とは異なっていてもよい。そのような実装は、ローカル計算がグローバル計算より高速に実行されることを許容しうる。
【００９１】
図７は、本稿に記載される少なくとも一つの実施形態に基づく、ローカル計算を実行する例示的な方法７００のフローチャートである。いくつかの実施形態では、方法７００に関連する動作の一つまたは複数は、フロー２００のブロック２３０において実行されてもよい。方法７００は、いかなる好適なシステム、装置またはデバイスによって実行されてもよい。たとえば、図１Ｂの電子デバイス１０２の試験モジュール１０６が方法７００に関連する動作の一つまたは複数を実行してもよい。離散的なブロックで図示されているが、方法７００のブロックの一つまたは複数に関連するステップおよび動作は、実装に依存して、追加的なブロックに分割されても、より少数のブロックに組み合わされても、あるいはなくされてもよい。
【００９２】
方法７００は、ブロック７０２において始まってもよい。ここでは、ローカル計算はイベント・シーケンス「Seq」をもって初期化されてもよく、それによりローカル計算はイベント・シーケンス「Seq」を出発点として使用しうる。いくつかの実施形態では、イベント・シーケンス「Seq」は、イベント集合「S」から選択されてもよい。たとえば、図５Ａおよび図５Ｂに関して挙げた例に関し、イベント・シーケンス「e1」またはイベント・シーケンス「e2」がイベント集合５１８から「Seq」として選択されてもよい。
【００９３】
いくつかの実施形態では、図４の方法４００のブロック４０２、４０４、４０６、４０８、４１０、４１２および４１４に関連する一つまたは複数の動作は、イベント・シーケンス「Seq」を選択するようブロック７０２に関して実行されてもよい。方法４００のこれらのブロックに関連する動作を実行することによって、イベント集合「S」の一つまたは複数のイベント・シーケンスが、目標条件に関連付けられた一つまたは複数の経路をカバーしうる発見されたイベント・シーケンスであると決定されてもよい。したがって、方法７００に関してさらなる動作を実行する前に、一つまたは複数の目標条件が除去されてもよく、そうすれば方法７００の効率が改善されうる。
【００９４】
ブロック７０４では、イベント・シーケンス「Seq」について、イベント集合「S」に関連付けられていてもよい対応する従属イベントの一つまたは複数の目標条件に対する一つまたは複数の距離が決定されてもよい。たとえば、図５Ａおよび図５Ｂに関して与えられる例に関し、イベント・シーケンス「e1」が「Seq」として選択されるとき、距離は、目標条件５２３ａ〜５２３ｄに対してイベント・シーケンス「e1」について決定されてもよい。逆に、イベント・シーケンス「e2」が「Seq」として選択されるとき、距離は、目標条件５２３ａ〜５２３ｄに対してイベント・シーケンス「e2」について決定されてもよい。上記で示したように、上掲の表１の第一行は、イベント・シーケンス「e1」について目標条件５２３ａ〜５２３ｄに対して決定されうる距離を示していてもよい。さらに、上掲の表１の第二行は、イベント・シーケンス「e2」について目標条件５２３ａ〜５２３ｄに対して決定されうる距離を示していてもよい。
【００９５】
ブロック７０６では、目標条件に対するイベント・シーケンス「Seq」の距離のいずれかが「0」に等しいかどうかが判定されてもよい。距離の一つまたは複数が「0」に等しいとき、方法７００はブロック７０８に進んでもよい。そうでなければ、方法７００はブロック７１４に進んでもよい。
【００９６】
ブロック７０８では、イベント・シーケンス「Seq」は対応する従属イベントをアペンドされてもよく、結果として得られるイベント・シーケンスが実行されてもよい。図４の方法４００のブロック４０８に関して上記したのと同様に、結果として得られるイベント・シーケンスは、「0」の距離に関連付けられた目標条件に対応しうる経路をカバーしうる発見されたイベント・シーケンスであると考えられてもよい。ブロック７１０では、探査された経路条件が目標条件から除去されてもよい。上記で示したように、探査された経路条件は、イベント・シーケンス「Seq」に関して「0」の距離に関連付けられていてもよい任意の目標条件を含みうる。
【００９７】
ブロック７１１では、対応する従属イベントに関連付けられた何らかの目標条件が残っているかどうかが判定されてもよい。目標条件が残っているとき、方法７００はブロック７１２に進んでもよい。それ以上目標条件が残っていないときは、方法７００はブロック７３０に進んでもよい。
【００９８】
上記のように、いくつかの実施形態では、それ以上目標条件が残っていないことは、対応する従属イベントの目標条件すべてを満たすイベント・シーケンスが発見されたかもしれないことを示しうる。したがって、いくつかの実施形態では、試験結果（たとえば試験結果２０８）がブロック７３０において生成されてもよい。いくつかの実施形態では、目標条件を満たしうる発見されたイベント・シーケンスは、試験結果に含まれてもよい。追加的または代替的に、いくつかの実施形態では、試験結果は、発見されたイベント・シーケンスによる目標条件の充足をも示しうる一つまたは複数のイベント・シーケンス木を含んでいてもよい。
【００９９】
ブロック７１２では、選択されたイベント・シーケンス「Seqsel」がイベント・シーケンス「Seq」に等しいものとして設定されてもよい。ブロック７１３では、選択されたイベント・シーケンス「Seqsel」が実行されてもよい。ブロック７１４では、一つまたは複数のイベント・シーケンス「Seqapi」が生成されてもよい。いくつかの実施形態では、ソフトウェア・プログラムの現在状態において実行のために利用可能でありうる各イベントが選択されてもよく、選択されたイベント・シーケンス「Seqsel」にアペンド（append）されてイベント・シーケンス「Seqapi」を生成してもよい。たとえば、図４の方法４００のブロック４１６に関して上記で示したように、図５Ａおよび図５Ｂの例に関し、イベント・シーケンス「e1」が「Seqsel」でありうるとき、イベント・シーケンス「e1」および「e2」が実行のために利用可能であってもよい。したがって、この特定の例では、イベント・シーケンス「e1」はイベント・シーケンス「e1」および「e2」をアペンドされてイベント・シーケンス「e1→e1」および「e1→e2」を生成してもよい。これらはそれぞれイベント・シーケンス「Seqap1」および「Seqap2」と記されてもよい。
【０１００】
ブロック７１６では、イベント・シーケンス「Seqapi」の距離が、目標条件に対して決定されてもよい。たとえば、図５Ａおよび図５Ｂの例に関し、イベント・シーケンス「e1→e1」がイベント・シーケンス「Seqap1」として指定され、目標条件が目標条件５２３ａ〜５２３ｄを含むとき、距離はイベント・シーケンス「e1→e1」について、目標条件５２３ａ〜５２３ｄに対して決定されてもよい。さらに、この例において、イベント・シーケンス「e1→e2」がイベント・シーケンス「Seqap2」として指定され、目標条件が目標条件５２３ａ〜５２３ｄを含むとき、距離はイベント・シーケンス「e1→e2」について、目標条件５２３ａ〜５２３ｄに対して決定されてもよい。表４は、イベント・シーケンス「e1→e1」および「e1→e2」について決定されうる距離を示している。さらに、表４では、行はイベント・シーケンスに関連付けられていてもよく、列は対応する目標条件に関連付けられていてもよい。セル内の数字は、対応する行のイベントの、対応する列の目標条件に対する距離を示しうる。
【表４】
0006500698.tif 000006
【０１０１】
ブロック７１８では、目標条件に対するイベント・シーケンス「Seqapi」の距離のいずれかが「0」に等しいかどうかが判定されてもよい。距離の一つまたは複数が「0」に等しいとき、方法７００はブロック７２０に進んでもよい。そうでなければ、方法７００はブロック７２６に進んでもよい。たとえば、図５Ａおよび図５Ｂおよび表３の例に関しては、方法７００はブロック７２０に進みうる。イベント・シーケンス「e1→e2」が目標条件５２３ｂに対して「0」の距離をもちうるからである。
【０１０２】
ブロック７２０では、「0」の距離をもつイベント・シーケンス「Seqapi」の一つまたは複数が対応する従属イベントをアペンドされてもよく、結果として得られるイベント・シーケンスが実行されてもよい。上記で示したように、いくつかの実施形態では、結果として得られるイベント・シーケンスは、発見されたイベント・シーケンスと見なされてもよい。
【０１０３】
たとえば、図５Ａおよび図５Ｂおよび表３の例に関し、イベント・シーケンス「e1→e2」が「0」の距離を有していてもよく、よって従属イベント「e5」をアペンドされてもよい。結果として得られるイベント・シーケンス「e1→e2→e5」が実行されてもよく、それが経路「b25」の探査を許容してもよい。いくつかの実施形態では、イベント・シーケンス「e1→e2→e5」はこうして、イベント集合５１８に関して発見されたイベント・シーケンスと見なされてもよく、イベント集合５１８に関連付けられた試験結果に含められてもよい。さらに、イベント・シーケンス「e1→e2→e5」は経路「b25」をカバーするものと見なされてもよい。
【０１０４】
ブロック７２２では、探査された経路条件が目標条件から除去されてもよい。ブロック７２４では、対応する従属イベントに関連付けられた何らかの目標条件が残っているかどうかが判定されてもよい。目標条件が残っているとき、方法７００はブロック７２６に進んでもよい。それ以上目標条件が残っていないときは、方法７００はブロック７３０に進んでもよい。
【０１０５】
ブロック７２６では、諸イベント・シーケンス「Seqapi」のうちの、最も小さな0でない距離に関連付けられたイベント・シーケンス「Seqmin」が実行されてもよい。いくつかの事例では、二つ以上のイベント・シーケンスが同じ最も小さい0でない距離に関連付けられていてもよい。これらまたは他の実施形態において、それらのイベント・シーケンスのいずれかが実行されうる。
【０１０６】
たとえば、図５Ａおよび図５Ｂおよび表３の例に関しては、イベント・シーケンス「e1→e1」ではなくイベント・シーケンス「e1→e2」が実行されてもよい。イベント・シーケンス「e1→e2」に関連付けられた最小距離がイベント・シーケンス「e1→e1」に関連付けられた最小距離より小さいからである。よって、この特定の例および反復段階については、イベント・シーケンス「e1→e2」がイベント・シーケンス「Seqmin」であると考えられてもよい。
【０１０７】
ブロック７２８では、選択されたイベント・シーケンス「Seqsel」が「Seqmin」に等しいものとして設定されてもよい。ブロック７２８後には、方法７００はブロック７１４に戻ってもよい。いくつかの実施形態では、距離があらかじめ定義された限界より大きい場合には、イベント・シーケンス「Seqsel」は破棄されてもよい。これらの事例では、限界内の距離をもつ以前のシーケンスがブロック７２８において、選択されたイベント・シーケンス「Seqsel」として選択されてもよい。
【０１０８】
いくつかの実施形態では、イベントは、そうすることがより大きな距離につながるときは、選択されたイベント・シーケンス「Seqsel」にアペンドされなくてもよい。たとえば、いくつかの実施形態では、ローカル計算は、特定のイベントの効果を解析してそれがいくつかの点後に無用でありうることを予測することによってアルファ・ベータ枝刈り（alpha-beta  pruning）技法を適用することを含んでいてもよい。特に、イベントをアペンドすることが距離を単調に増加させる場合には、アペンドは全く適用されなくてもよい。例として、特定のイベントが変数「i」の値を4だけ増大させ、特定の目標条件がi＜4であるとする。この特定の例では、i≧0であるいかなるイベント・シーケンスもその特定のイベントにアペンドされることは許されない。アペンドすることにより、その特定のイベントのその特定の目標条件に対する距離が増大するからである。このように、この技法は、ローカル計算において多数の無用なイベント・シーケンスを実行することを回避しうる。
【０１０９】
いくつかの実施形態では、方法７００は、それ以上目標条件が残っていなく方法７００が上記のようにブロック７３０に進めるようになるまで、ブロック７１４、７１６、７１８、７２０、７２２、７２４、７２６および７２８のうちの一つまたは複数の動作を繰り返してもよい。したがって、いくつかの実施形態では、ブロック７１４、７１６、７１８、７２０、７２２、７２４、７２６および７２８のうちの一つまたは複数の動作は、対応する従属イベントに関連付けられた目標条件を満たしうる一つまたは複数のイベント・シーケンスが発見されるまで、繰り返されてもよい。さらに、いくつかの実施形態では、方法７００は、イベント集合「S」に含まれうる各イベント・シーケンスに関して逐次反復的に実行されてもよい。
【０１１０】
したがって、方法７００は、探索の間のイベント・シーケンスの実行が、距離に従って優先度付けされうるよう、試験対象コードのイベント空間を探索するために実行されてもよい。これは、他の方法に比べ、発見されたイベント・シーケンスを決定する効率を高めうる。本開示の範囲から外れることなく、方法７００に対して修正、追加または省略がなされてもよい。たとえば、いくつかの事例では、方法７００は、特定数の反復段階が実行された後に、たとえ対応する目標条件の経路をカバーするイベント・シーケンスがすべての目標条件についてはみつかっていなくても、終了するよう構成されていてもよい。
【０１１１】
図２のフロー２００に戻ると、方法７００に関して述べたローカル計算は、方法４００に関して述べたグローバル計算より効率的でありうる。ローカル計算は、イベント集合「S」に対してより少数の新しいシーケンスを加えうるからである。具体的には、ローカル計算は、「Seqapi」の集合から次の「Seq」を拾う。一方、グローバル計算は構築されたイベント・シーケンスの集合全体から拾う。しかしながら、いくつかの事例では、ローカル計算は、特定の目標条件を満たすイベント・シーケンスを発見できないことがある。対照的に、グローバル計算は、各目標条件についてイベント・シーケンスを発見しうるが、イベント集合「S」に対する絶えざる変化および更新のため、効率は低くなりうる。
【０１１２】
たとえば、ローカル計算は、ブロック７２６において最も小さな距離をもつ諸イベント・シーケンスを選択して、特定の目標条件を満たす特定のイベント・シーケンスを決定するためにアペンドされうるイベント・シーケンスを決定してもよい。しかしながら、いくつかの事例では、最も小さな距離をもつイベント・シーケンスを選択してアペンドすることは、特定の目標条件を満たす特定のイベント・シーケンスを与えないことがある。対照的に、グローバル計算は、イベント集合「S」に対して追加し、イベント集合「S」から選択することを続けるので、同じ問題をもたないことがある。よって、いくつかの事例では、グローバル計算はローカル計算より完全であることがあるが、ローカル計算より効率は低いこともありうる。
【０１１３】
いくつかの実施形態では、変異ベースの組み合わせ計算（Mutation-based  Combinational  Computation）が、ローカル計算と同様の動作に関して実行されてもよく、変異ベースの組み合わせ計算はローカル計算の修正のはたらきをしうる。たとえば、図７の方法７００のブロック７２６において最も小さな距離（たとえば「Seqmin」）をもつイベント・シーケンス「Seqapi」を実行する代わりに、実行のために別のイベント・シーケンス「Seqapi」を選択するために変異ベースの組み合わせ計算が実行されてもよい。したがって、変異ベースの組み合わせ計算は、常に最も小さな距離をもつイベント・シーケンスを選択して実行するわけではないことがあり、よって、変異ベースの組み合わせ計算は、ローカル計算が発見しないことがありうる経路条件を満たすイベント・シーケンスを発見しうる。しかしながら、変異ベースの組み合わせ計算は、グローバル計算ほど高価ではないことがある。
【０１１４】
よって、いくつかの事例では、変異ベースの組み合わせ計算は、ローカル計算よりは完全だが、グローバル計算ほど完全ではないことがある。さらに、変異ベースの組み合わせ計算は、グローバル計算よりは効率的だがローカル計算ほど効率的ではないことがある。
【０１１５】
図８Ａは、本稿に記載される少なくとも一つの実施形態に基づく、変異ベースの組み合わせ計算を含む、図７のローカル計算の修正の例示的な方法８００のフローチャートである。いくつかの実施形態では、方法８００に関連する動作の一つまたは複数は、フロー２００のブロック２３２において実行されてもよい。方法８００は、いかなる好適なシステム、装置またはデバイスによって実行されてもよい。たとえば、図１Ｂの電子デバイス１０２の試験モジュール１０６が方法８００に関連する動作の一つまたは複数を実行してもよい。離散的なブロックで図示されているが、方法８００のブロックの一つまたは複数に関連するステップおよび動作は、実装に依存して、追加的なブロックに分割されても、より少数のブロックに組み合わされても、あるいはなくされてもよい。
【０１１６】
方法８００は、ブロック８０２、８０４、８０６、８０８、８１０、８１１、８１２、８１３、８１４、８１６、８１８、８２０、８２２、８２４および８３０を含んでいてもよい。これらはそれぞれ図７の方法７００のブロック７０２、７０４、７０６、７０８、７１０、７１１、７１２、７１３、７１４、７１６、７１８、７２０、７２２、７２４および７３０と類似の動作を含んでいてもよい。方法８００は、変異ベースの組み合わせ計算に関連する動作を含みうるブロック８３２をも含んでいてもよい。図示した例では、ブロック８３２は、方法７００におけるブロック７２６および７２８の代わりに方法８００に含められていてもよい。
【０１１７】
ブロック８３２では、イベント・シーケンス集合作業リスト「W」から、イベント・シーケンスが、ブロック８１３、８１４、８１６、８１８、８２０、８２２、８２４および８３０の動作に関して使用されうるイベント・シーケンス「Seqsel」として選択されてもよい。イベント・シーケンス「Seqsel」として選択されうるイベント・シーケンスは、変異ベースの組み合わせ計算の変異確率に基づいて選択されてもよい。これは、イベント・シーケンス「Seqsel」として、必ずしも最も小さな距離をもつ作業リスト「W」のイベント・シーケンスを選択しないことがある。
【０１１８】
いくつかの実施形態では、変異ベースの組み合わせ計算は、作業リスト「W」のイベント・シーケンス「Seqapi」を「Seqsel」であるべく選択するか否かを、確率論的な決定に基づいて決定してもよい。確率論的な決定は、シミュレーテッド・アニーリング（SA）計算、遺伝的アルゴリズム、タブー探索、粒子群最適化などといった、いかなる適用可能な変異ベースの組み合わせ計算に基づいていてもよい。どのイベント・シーケンス「Seqapi」がイベント・シーケンス「Seqsel」たりうるかを最小距離ではなく確率論的決定に基づいて選択することによって、変異ベースの組み合わせ計算は、場合によってはローカル計算が発見しないことがありうる経路条件を満たすイベント・シーケンスを発見しうる。
【０１１９】
いくつかの実施形態では、方法８００は、それ以上目標条件が残っていなく方法８００がブロック８３０に進めるようになるまで、ブロック８１３、８１４、８１６、８１８、８２０、８２２、８２４および８３２のうちの一つまたは複数の動作を繰り返してもよい。したがって、いくつかの実施形態では、ブロック８１３、８１４、８１６、８１８、８２０、８２２、８２４および８３２のうちの一つまたは複数の動作は、対応する従属イベントに関連付けられた目標条件を満たしうる一つまたは複数のイベント・シーケンスが発見されるまで繰り返されてもよい。
【０１２０】
図８Ｂは、本稿に記載される少なくとも一つの実施形態に基づく、図８Ａのブロック８３２の変異ベースの組み合わせ計算のために使用されうる例示的なSA計算８３３を含むフローチャートである。離散的なブロックで図示されているが、図８Ｂのブロックの一つまたは複数に関連するステップおよび動作は、実装に依存して、追加的なブロックに分割されても、より少数のブロックに組み合わされても、あるいはなくされてもよい。
【０１２１】
SA計算８３３は、変異因子「Mut」の初期値が設定されうるブロック８５０で始まってもよい。変異因子「Mut」は、図８Ａのブロック８１３、８１４、８１６、８１８、８２０、８２２および８２４に関して、最小距離に関連付けられていないイベント・シーケンスがイベント・シーケンス「Seqsel」として選択される可能性に影響する因子であってもよい。たとえば、のちに詳述するように、今の例では、変異因子「Mut」が大きいほど、最小距離に関連付けられていないイベント・シーケンスがイベント・シーケンス「Seqsel」として選択される可能性が高くなる。したがって、変異因子「Mut」の初期値は、目標変異レートに従って設定されてもよい。目標変異レートは、最小距離に関連付けられていないイベント・シーケンスがイベント・シーケンス「Seqsel」として選択されるレートであってもよい。
【０１２２】
ブロック８５２では、作業リスト「W」が生成されてもよい。いくつかの実施形態では、作業リスト「W」は、図８Ａの方法８００のブロック８１４で生成されうるイベント・シーケンス「Seqapi」を含むよう生成されてもよい。上述したように、場合によっては、方法８００のブロック８１３、８１４、８１６、８１８、８２０、８２２、８２４および８３２の一つまたは複数の動作は二度以上実行されてもよい。いくつかの実施形態では、その後ブロック８３２に遭遇するとき、現在の諸イベント・シーケンス「Seqapi」は前の諸イベント・シーケンス「Seqapi」とは異なることがある。これらの事例のいくつかでは、作業リスト「W」は、現在の諸イベント・シーケンス「Seqapi」は含むが、前の諸イベント・シーケンス「Seqapi」は含まないよう生成されてもよい。
【０１２３】
ブロック８５４では、変異因子「Mut」が変異因子「Mut」最の終的な目標値「Final-Mut」〔最終Mut〕より大きいかどうかが判定されてもよい。後述するように、今の例示的な実施形態では、変異因子「Mut」は、SA計算８３３の間にその初期値から調整されてもよく、そのためSA計算８３３のその後の反復工程の間には異なることがありうる。変異因子「Mut」が最終的な目標値「Final-Mut」を超えて動いたら、SA計算８３３に関してある目標量の反復工程が実行されたことがありえ、SA計算８３３は終了してもよく、方法８００のブロック８３０の動作が実行されてもよい。図示した例では、変異因子「Mut」が最終目標値「Final-Mut」より大きいかどうかが判定されてもよい。この特定の例では、変異因子「Mut」はSA計算８３３の各反復工程とともに減少しうるからである。しかしながら、いくつかの実施形態では、実装およびSA計算８３３の構成設定に依存して、変異因子「Mut」が最終的な目標値「Final-Mut」より小さいかどうかが判定されてもよい。
【０１２４】
ブロック８５６では、イベント・シーケンス「Seqsel」が作業リスト「W」から選択されてもよい。いくつかの実施形態では、イベント・シーケンス「Seqapi」は、作業リスト「W」内でのその位置に基づいて選択されてもよい。たとえば、イベント・シーケンス「Seqapi」は作業リスト「W」における最初のイベント・シーケンスであってもよい。追加的または代替的に、作業リスト「W」におけるイベント・シーケンス「Seqapi」の順序はランダムであってもなくてもよい。
【０１２５】
ブロック８５８では、距離差「ΔD」が決定されてもよい。いくつかの実施形態では、距離差「ΔD」は、イベント・シーケンス「Seqapi」に関連付けられた距離と、前に作業リスト「W」から選択されていたことがありうるイベント・シーケンス「Seqsel」に関連付けられた距離との間の差であってもよい。
【０１２６】
たとえば、いくつかの場合には、現在の選択されたシーケンスは「Seqsel」であってもよく、「Seqapi」は作業リスト「W」における最初のシーケンスであってもよい。そのような事例では、距離差「ΔD」は、第二のイベント・シーケンス「Seqapi」に関連付けられた距離から最初のイベント・シーケンス「Seqsel」に関連付けられた距離を引いたものとして決定されてもよい。
【０１２７】
しかしながら、いくつかの事例では、イベント・シーケンス「Seqapi」は、作業リスト「W」から選択される最初のシーケンスであることがあり、前に選択されたイベント・シーケンス「Seqapi」および関連付けられた距離は適用可能または利用可能ではないことがある。したがって、いくつかの実施形態では、イベント・シーケンス「Seqapi」が作業リスト「W」から選択された最初のシーケンスであるとき、距離差「ΔD」は、イベント・シーケンス「Seqapi」に関連付けられた距離と見なされてもよい。
【０１２８】
ブロック８６０では、距離差「ΔD」が「0」より小さいかどうかが決定されてもよい。距離差「ΔD」が「0」より小さいとき、そのことは、第二のイベント・シーケンス「Seqapi」が距離の点で現在選択されているシーケンス「Seqsel」よりよいことを示し、SA計算８３３はブロック８６８に進んでもよい。距離差「ΔD」が「0」より小さくないときは、SA計算８３３はブロック８６２に進んでもよい。
【０１２９】
ブロック８６８では、変異因子「Mut」が調整されてもよい。図示した例では、SA計算８３３のその後の反復工程について変異レートが減少しうるように、変異因子「Mut」が減少するよう調整されてもよい。他の実施形態では、変異因子「Mut」は、SA計算８３３のその後の反復工程について変異レートが増大しうるように、変異因子「Mut」が各反復工程に関して増大してもよい。ブロック８７０では、イベント・シーケンス「Seqapi」は、イベント・シーケンス「Seqsel」であるよう選択されてもよい。このときSA計算８３３が終了でき、方法８００のブロック８１３の動作が実行されてもよい。その後、計算はブロック８５４に戻る。
【０１３０】
ブロック８６２では、イベント・シーケンス「Seqapi」がイベント・シーケンス「Seqsel」であるよう選択されるか否かを決定するために、確率論的決定がなされてもよい。図示した例では、「0」と「1」の間のランダムな数「y」が選択されてもよく（たとえば「y＝RANDOM(0,1)」）、式「x＝exp(−ΔD/Mut)」から決定される数「x」に対して比較されてもよい。「x」が「y」より大きいとき、イベント・シーケンス「Seqapi」はイベント・シーケンス「Seqsel」であるべく選択されてもよく、それによりSA計算８３３は上記のブロック８６８および８７０に進んでもよい。「x」が「y」より小さいときは、イベント・シーケンス「Seqapi」はイベント・シーケンス「Seqsel」であるべく選択されなくてもよく、SA計算８３３はブロック８６４に進んでもよい。
【０１３１】
例として、現在の選択されているイベント・シーケンス「Seqsel」が「1」の距離をもち、イベント・シーケンス「Seqapi」が「4」の距離をもつとする。距離差「ΔD」は「4−1＝3」となりうる。「Seqapi」はより大きな距離をもつが、SA計算はそれでも、確率計算に依存して、それを次のシーケンスとして選択することがありうる。たとえば、「y＝RANDOM(0,1)＝0.5」であり「Mut＝9.9」であるとすると、「x＝exp(−ΔD/Mut)＝exp(−3/9.9)＝0.74」となる。「0.5」は「0.74」より小さいので、SA計算はこの「Seqapi」を次の「Seqsel」として選択してもよい。
【０１３２】
図示した例では、式「x＝exp(−ΔD/Mut)」は、変異因子「Mut」が増大するにつれて「x」の値が「1」に近づきうるようなものである。したがって、イベント・シーケンス「Seqapi」がイベント・シーケンス「Seqsel」であるべく選択されうる可能性は、図示した例では変異因子「Mut」が増大するとともに増大しうるものであり、そのため変異因子「Mut」が増大するにつれ変異レートが増大しうる。逆に、式「x＝exp(−ΔD/Mut)」は、変異因子「Mut」が減少するにつれて「x」の値が「0」に近づきうるようなものである。したがって、イベント・シーケンス「Seqapi」がイベント・シーケンス「Seqsel」であるべく選択されうる可能性は、図示した例では変異因子「Mut」が減少するとともに減少しうるものであり、そのため変異因子「Mut」が減少するにつれ変異レートが減少しうる。しかしながら、他の実施形態では、「x」および「y」に関連する式および／または「x」と「y」の間の比較は、変異因子が増大するにつれて変異レートが減少しうるものであり、かつ変異レートが減少するにつれて変異レートが増大しうるものでありうる。
【０１３３】
ブロック８６４では、作業リスト「W」のイベント・シーケンス「Seqapi」が作業リスト「W」から除去されてもよい。現在の選択されているイベント・シーケンスは相変わらず「Seqsel」である。ブロック８６６では、変異因子「Mut」は、ブロック８６８に関して実行されうる変異因子「Mut」への調整と同様の仕方で調整されてもよい。ブロック８６６後は、SA計算はブロック８５４に戻ってもよい。いくつかの実施形態では、ブロック８５４、８５６、８５８、８６０、８６２、８６４および８６６に関連する一つまたは複数の動作は、すべての目標がカバーされるまでまたはあらかじめ定義された限界に達するまで繰り返されてもよい。
【０１３４】
したがって、方法８００は、探索中のイベント・シーケンスの実行が距離およびSA計算８３３のような確率計算に従って優先度付けされうるように、試験対象コードのイベント空間を探索するために実行されてもよい。本開示の範囲から外れることなく、図８Ａおよび図８Ｂの方法８００および／またはSA計算８３３に対して修正、追加または省略がなされてもよい。たとえば、いくつかの実施形態では、変異因子「Mut」は調整されなくてもよく、ブロック８５４、８６６および８６８の一つまたは複数が省略されてもよい。さらに、ブロックの実行の順序は、異なる実装によって変わりうる。さらに、上記のように、図８ＢのSA計算８３３およびその関連付けされたブロックおよび動作は単に、図８Ａのブロック８３２において実行されうる変異ベースの組み合わせ計算の例示的な実装である。
【０１３５】
当業者は、フロー２００、方法４００、方法７００、方法８００およびSA計算８３３ならびに本稿に開示される他のプロセスおよび方法について、それらのプロセスおよび方法において実行される機能が異なる順序で実装されてもよいことを理解するであろう。さらに、概説されたステップおよびアクションは単に例として与えられているのであり、開示される実施形態の本質を損なうことなく、それらのステップおよびアクションのいくつかが任意的であったり、より少数のステップおよびアクションに組み合わされたり、あるいは追加的なステップおよびアクションに展開されたりしてもよい。
【０１３６】
上記のように、本稿に記載される実施形態は、のちにより詳細に論じるさまざまなコンピュータ・ハードウェアまたはソフトウェア・モジュールを含む特殊目的または汎用のコンピュータ（たとえば図１Ｂのプロセッサ１１０）の使用を含んでいてもよい。さらに、上記のように、本稿に記載される実施形態は、コンピュータ実行可能な命令またはデータ構造を担持するまたは記憶しているコンピュータ可読媒体（たとえば図１Ｂのメモリ１１２）を使って実装されてもよい。
【０１３７】
本稿での用法では、用語「モジュール」または「コンポーネント」は、コンピューティング・システムの汎用ハードウェア（たとえばコンピュータ可読媒体、処理装置など）に記憶されるおよび／または実行されることのできるモジュールまたはコンポーネントおよび／またはソフトウェア・オブジェクトまたはソフトウェア・ルーチンのアクションを実行するよう構成された特定のハードウェア実装を指しうる。いくつかの実施形態では、本稿に記載される種々のコンポーネント、モジュール、エンジンおよびサービスは、コンピューティング・システム上で実行されるオブジェクトまたはプロセスとして（たとえば別個のスレッドとして）実装されてもよい。本稿に記載されるシステムおよび方法のいくつかは一般に、（汎用ハードウェアに記憶されるおよび／または実行される）ソフトウェアにおいて実装されるものとして記述されるものの、個別的なハードウェア実装またはソフトウェアと個別的なハードウェア実装の組み合わせも可能であり、考えられている。本稿において、「コンピューティング・エンティティ」は、本稿で先に定義された任意のコンピューティング・システムまたはコンピューティング・システム上で走る任意のモジュールもしくはモジュール類の組み合わせでありうる。
【０１３８】
本稿、特に付属の請求項（たとえば付属の請求項の本文）で使われる用語は一般に「オープン」な用語として意図されている（たとえば、用語「含む」は「含むがそれに限られない」と解釈されるべきであり、用語「もつ」は「少なくとも…をもつ」と解釈されるべきであり、用語「含む」は「含むがそれに限られない」と解釈されるべきであるなど）。
【０１３９】
さらに、導入される請求項の記載の特定の数が意図される場合、そのような意図は請求項において明示的に記載される。そのような記載のない場合には、そのような意図はない。たとえば、理解の助けとして、以下の付属の請求項は、請求項の記載を導入するために「少なくとも一つの」および「一つまたは複数の」という導入句の使用を含むことがありうる。しかしながら、たとえ同じ請求項が導入句「一つまたは複数の」または「少なくとも一つの」および「a」または「an」のような不定冠詞を含むときでも、そのような句の使用は、不定冠詞「a」または「an」による請求項の記載の導入が、そのように導入された請求項の記載を含む何らかの特定の請求項を、そのような記載を一つだけ含む実施形態に限定することを含意していると解釈されるべきではない（たとえば、「a」および／または「an」は、「少なくとも一つの」または「一つまたは複数の」を意味するものと解釈されるべきである）。同じことは、請求項の記載を導入する定冠詞の使用についても成り立つ。
【０１４０】
さらに、たとえ導入される請求項の記載の特定の数が明示的に記載されていたとしても、当業者は、そのような記載が、少なくともその記載された数を意味すると解釈されるべきであることを認識するであろう（たとえば、他の修飾語なしで単に「二つの記載」という記載は、少なくとも二つの記載または二つ以上の記載を意味する）。さらに、「Ａ、ＢおよびＣなどのうちの少なくとも一つ」または「Ａ、ＢおよびＣなどの一つまたは複数」に類似する慣用句が使われる事例においては、一般に、そのような構文はＡだけ、Ｂだけ、Ｃだけ、ＡおよびＢ両方、ＡおよびＣ両方、ＢおよびＣ両方またはＡ、ＢおよびＣ全部などを含むことが意図される。
【０１４１】
さらに、明細書であれ請求項であれ図面であれ、二つ以上の代替的な用語を呈示するあらゆる離接的な語句は、該用語の一つを含む、該用語のいずれかを含むまたは該用語の両方を含む可能性を考えているものと理解されるべきである。たとえば、「ＡまたはＢ」という句は、「Ａ」または「Ｂ」または「ＡおよびＢ」の可能性を含むと理解されるべきである。
【０１４２】
本稿に記載されるすべての例および条件付きの言辞は、本発明および発明者によって当技術分野の発展のために寄与される概念の理解において読者を助ける教育目的を意図されており、そのような特定的に挙げられる例および条件に限定することなく解釈されるものとする。本開示の実施形態について詳細に述べてきたが、本開示の精神および範囲から外れることなく、これにさまざまな変化、代替および変更をなすことができることは理解しておくべきである。
【０１４３】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
イベント駆動ソフトウェア・アプリケーションの、第一の変数集合を含む第一のイベント・シーケンスを決定する段階と；
イベント駆動ソフトウェア・アプリケーションの、第二の変数集合を含む第二のイベント・シーケンスを決定する段階と；
前記第一のイベント・シーケンスおよび前記第二のイベント・シーケンスの従属イベントを識別する段階であって、前記従属イベントは、前記第一の変数集合および前記第二の変数集合内の一つまたは複数の変数を含む目標条件を含む、段階と；
前記第一のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第一のイベント・シーケンスについての第一の距離を決定する段階と；
前記第二のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第二のイベント・シーケンスについての第二の距離を決定する段階と；
前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスの実行を前記第二のイベント・シーケンスより上に優先度付けする段階と；
前記優先度付けに従って、前記第一のイベント・シーケンス、前記第二のイベント・シーケンスおよび前記従属イベントのうちの一つまたは複数を含むイベント空間を探査する段階とを含む、
方法。
（付記２）
前記第一の変数集合および前記第二の変数集合が変数の同じ集合に対応する、付記１記載の方法。
（付記３）
前記第一の変数集合および前記第二の変数集合が異なる変数に対応する、付記１記載の方法。
（付記４）
前記第一の距離が前記第一のイベント・シーケンスの実行が前記目標条件を満たすことを示す場合に、前記第一のイベント・シーケンスを実行し、続いて前記従属イベントを実行することをさらに含む、付記１記載の方法。
（付記５）
前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスを前記第二のイベント・シーケンスより優先して実行することをさらに含む、付記１記載の方法。
（付記６）
前記第一のイベント・シーケンスおよび前記第二のイベント・シーケンスを含むイベント・シーケンスの第一の集合を決定する段階と；
前記第一の距離に基づいて、前記第一のイベント・シーケンスをイベント・シーケンスの前記第一の集合の各イベント・シーケンスにアペンドしてイベント・シーケンスの第二の集合を生成する段階と；
イベント・シーケンスの前記第二の集合をイベント・シーケンスの前記第一の集合に加えてイベント・シーケンスの第三の集合を生成する段階と；
イベント・シーケンスの前記第三の集合の各イベント・シーケンスについて、前記目標条件に対するイベント・シーケンス距離を決定する段階と；
イベント・シーケンスの前記第三の集合のイベント・シーケンスの実行に、前記イベント・シーケンス距離に基づいて優先度付けする段階と；
実行の前記優先度付けに従って、イベント・シーケンスの前記第三の集合および前記従属イベントを含むイベント空間を探査する段階とをさらに含む、
付記１記載の方法。
（付記７）
前記目標条件が数値制約条件を含み、当該方法がさらに：
前記目標条件についての一つまたは複数の区間を決定する段階と；
前記一つまたは複数の区間に基づいて前記第一の距離および前記第二の距離を決定する段階とをさらに含む、
付記１記載の方法。
（付記８）
前記目標条件がストリング制約条件を含み、当該方法がさらに：
前記目標条件についての一つまたは複数のキャラクタ・オートマタを決定する段階と；
前記一つまたは複数のキャラクタ・オートマタに基づいて前記第一の距離および前記第二の距離を決定する段階とをさらに含む、
付記１記載の方法。
（付記９）
イベント駆動ソフトウェア・アプリケーションの複数のイベント・シーケンスを決定する段階と；
前記複数のイベント・シーケンスの各イベント・シーケンスについて、前記イベント駆動ソフトウェア・アプリケーションの一つまたは複数の目標条件のそれぞれに対する距離を決定する段階であって、イベント・シーケンス距離は、その対応するイベント・シーケンスの実行が対応する目標条件を満たす度合いを示す、段階と；
前記複数のイベント・シーケンスの実行に、前記イベント・シーケンス距離に基づいて優先度付けする段階と；
前記複数のイベント・シーケンスの一つまたは複数と、前記一つまたは複数の目標条件に対応する従属イベントとを含むイベント空間を、実行の前記優先度付けに従って探査する段階とを含む、
方法。
（付記１０）
前記一つまたは複数の目標条件がそれぞれ数値制約条件を含み、当該方法がさらに：
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数の区間を決定する段階と；
前記一つまたは複数の区間に基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
付記９記載の方法。
（付記１１）
前記一つまたは複数の目標条件がそれぞれストリング制約条件を含み、当該方法がさらに：
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数のキャラクタ・オートマタを決定する段階と；
前記一つまたは複数のキャラクタ・オートマタに基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
付記９記載の方法。
（付記１２）
組み合わせ計算に基づいて前記複数のイベント・シーケンスの実行の優先度付けを調整する段階をさらに含む、付記９記載の方法。
（付記１３）
前記組み合わせ計算は、ローカルな検索ベースの組み合わせ計算、グローバルな検索ベースの組み合わせ計算、変異ベースの組み合わせ計算またはそれらの任意の組み合わせを含む、付記１２記載の方法。
（付記１４）
前記変異ベースの組み合わせ計算は、シミュレーテッド・アニーリング（SA）計算、遺伝的計算、タブー探索、粒子群最適化計算またはそれらの任意の組み合わせを含む、付記１３記載の方法。
（付記１５）
コンピュータ実行可能な命令を含むコンピュータ可読記憶媒体であって、前記命令はシステムに：
イベント駆動ソフトウェア・アプリケーションの複数のイベント・シーケンスを決定する段階と；
前記複数のイベント・シーケンスの各イベント・シーケンスについて、前記イベント駆動ソフトウェア・アプリケーションの一つまたは複数の目標条件のそれぞれに対する距離を決定する段階であって、イベント・シーケンス距離は、その対応するイベント・シーケンスの実行が対応する目標条件を満たす度合いを示す、段階と；
前記複数のイベント・シーケンスの実行に、前記イベント・シーケンス距離に基づいて優先度付けする段階と；
前記複数のイベント・シーケンスの一つまたは複数と、前記一つまたは複数の目標条件に対応する従属イベントとを含むイベント空間を、実行の前記優先度付けに従って探査する段階とを含む動作を実行させるよう構成されている、
コンピュータ可読記憶媒体。
（付記１６）
前記一つまたは複数の目標条件がそれぞれ数値制約条件を含み、前記動作がさらに：
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数の区間を決定する段階と；
前記一つまたは複数の区間に基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
付記１５記載のコンピュータ可読記憶媒体。
（付記１７）
前記一つまたは複数の目標条件がそれぞれストリング制約条件を含み、前記動作がさらに：
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数のキャラクタ・オートマタを決定する段階と；
前記一つまたは複数のキャラクタ・オートマタに基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
付記１５記載のコンピュータ可読記憶媒体。
（付記１８）
前記動作が、組み合わせ計算に基づいて前記複数のイベント・シーケンスの実行の優先度付けを調整する段階をさらに含む、付記１５記載のコンピュータ可読記憶媒体。
（付記１９）
コンピュータ実行可能な命令を含むコンピュータ可読記憶媒体であって、前記命令はシステムに：
イベント駆動ソフトウェア・アプリケーションの、第一の変数を含む第一のイベント・シーケンスを決定する段階と；
イベント駆動ソフトウェア・アプリケーションの、第二の変数を含む第二のイベント・シーケンスを決定する段階と；
前記第一のイベント・シーケンスおよび前記第二のイベント・シーケンスの従属イベントを識別する段階であって、前記従属イベントは、前記第一の変数および前記第二の変数のうち一つまたは複数を含む目標条件を含む、段階と；
前記第一のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第一のイベント・シーケンスについての第一の距離を決定する段階と；
前記第二のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第二のイベント・シーケンスについての第二の距離を決定する段階と；
前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスの実行を前記第二のイベント・シーケンスより上に優先度付けする段階と；
前記優先度付けに従って、前記第一のイベント・シーケンス、前記第二のイベント・シーケンスおよび前記従属イベントのうちの一つまたは複数を含むイベント空間を探査する段階とを含む動作を実行させるよう構成されている、
コンピュータ可読記憶媒体。
（付記２０）
前記動作が、前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスを前記第二のイベント・シーケンスより優先して実行することをさらに含む、付記１９記載のコンピュータ可読記憶媒体。
【符号の説明】
【０１４４】
１００  システム
１０２  電子デバイス
１０４  試験対象コード
１０６  試験モジュール
１０８  試験結果
１１０  プロセッサ
１１２  メモリ
２００  本稿に記載される少なくとも一つの実施形態に基づく、イベント駆動ソフトウェア・アプリケーションの試験に関して実行されうる例示的なフロー
２０２  初期イベント・シーケンス
２０４  イベント識別
２０６  イベント抽象化
２０８  試験結果
２１０  イベント・コンストラクターおよびスケジューラー
２１２  従属イベントを決定
２１４  イベント集合を決定
２１６  従属イベント
２１８  イベント集合
２２０  従属イベントの経路条件を収集
２２２  数値区間および／またはストリング・オートマタを計算
２２３  目標条件
２２４  抽象化された目標条件
２２６  貪欲な計算
２２８  グローバル
２３０  ローカル
２３２  変異ベースの組み合わせ計算
２３４  距離計算
３００  少なくとも一つの実施形態に基づく、ストリング条件を表わすために使用されうる有限状態機械（FSM）
３０２  開始状態
３０４  第一の中間状態
３０６  第二の中間状態
３０８  受け入れ状態
４００  本稿に記載される少なくとも一つの実施形態に基づくグローバル計算を実行する例示的な方法
４０２  イベント集合Sに関して初期化
４０４  一つまたは複数の対応する目標条件に対する、S内のイベント・シーケンスの距離を決定
４０６  いずれかの距離＝0？
４０８  距離0に関連付けられたイベント・シーケンスをアペンドし、実行
４１０  目標条件から探査された条件を除去
４１２  目標条件が残っているか？
４１４  最小距離（Seqmin）をもつイベント・シーケンスを実行
４１６  一つまたは複数のイベント・シーケンスSeqapiを生成
４１８  各イベント・シーケンスSeqapiをSに追加
４２０  試験結果を生成
５０８  試験結果
５１８  イベント集合
５２３  目標条件
５２４  抽象化された目標条件
５５０  発見されたイベント・シーケンス集合
５５２  イベント・シーケンス木
５５４  発見されたイベント・シーケンス
６０８  試験結果
６１８  イベント集合
６２３  目標条件
６２４  抽象化された目標条件
６５０  発見されたイベント・シーケンス集合
６５２  イベント・シーケンス木
６５４  発見されたイベント・シーケンス
７００  本稿に記載される少なくとも一つの実施形態に基づく、ローカル計算を実行する例示的な方法
７０２  イベント・シーケンスSeqに関して初期化
７０４  Seqの距離を決定
７０６  いずれかの距離＝0？
７０８  Seqをアペンドし、結果として得られるイベント・シーケンスを実行
７１０  目標条件から探査された条件を除去
７１１  目標条件が残っているか？
７１２  Seqsel＝Seqと設定
７１３  Seqselを実行
７１４  一つまたは複数のイベント・シーケンスSeqapiを生成
７１６  イベント・シーケンスSeqapiの距離を決定
７１８  いずれかの距離＝0？
７２０  距離0に関連付けられたイベント・シーケンスをアペンドし、実行
７２２  目標条件から探査された条件を除去
７２４  目標条件が残っているか？
７２６  最小距離をもつシーケンスSeqapiを選択し（Seqmin）、実行
７２８  Seqsel＝Seqminと設定
７３０  試験結果を生成
８００  本稿に記載される少なくとも一つの実施形態に基づく、変異ベースの組み合わせ計算を含む、図７のローカル計算の修正の例示的な方法
８０２  イベント・シーケンスSeqに関して初期化
８０４  Seqの距離を決定
８０６  いずれかの距離＝0？
８０８  Seqをアペンドし、結果として得られるイベント・シーケンスを実行
８１０  目標条件から探査された条件を除去
８１１  目標条件が残っているか？
８１２  Seqsel＝Seqと設定
８１３  Seqselを実行
８１４  一つまたは複数のイベント・シーケンスSeqapiを生成
８１６  イベント・シーケンスSeqapiの距離を決定
８１８  いずれかの距離＝0？
８２０  距離0に関連付けられたイベント・シーケンスをアペンドし、実行
８２２  目標条件から探査された条件を除去
８２４  目標条件が残っているか？
８３０  試験結果を生成
８３２  変異ベースの組み合わせ計算
８５０  変異因子（Mut）の初期値を設定
８５２  作業リストWを生成
８５４  Mut＞Final-Mut?
８５６  Wからイベント・シーケンスを選択（Seqapi）
８５８  ΔDを決定
８６０  ΔD＜0？
８６２  RANDOM(0,1)＜exp(−ΔD/Mut)？
８６４  WからSeqapiを除去
８６６  Mutを調整
８６８  Mutを調整
８７０  Seqsel＝Seqapi
【図１Ａ】
0006500698.tif 000007
【図１Ｂ】
0006500698.tif 000008
【図２】
0006500698.tif 000009
【図３】
0006500698.tif 000010
【図４】
0006500698.tif 000011
【図５Ａ】
0006500698.tif 000012
【図５Ｂ】
0006500698.tif 000013
【図６Ａ】
0006500698.tif 000014
【図６Ｂ】
0006500698.tif 000015
【図７】
0006500698.tif 000016
【図８Ａ】
0006500698.tif 000017
【図８Ｂ】
0006500698.tif 000018