本稿に記載されるいくつかの実施形態は、電子デバイスのためのグラフィカル・ユーザー・インターフェース(GUI)ベースのアプリケーションおよびウェブ・ベースのアプリケーションのようなイベント駆動ソフトウェアを試験する方法およびシステムに関する。イベント駆動ソフトウェア・アプリケーションのフローは、ユーザー・アクション(マウス・クリック、キー押下)、センサー出力または他のプログラム/スレッドからのメッセージのような種々の「イベント」によって決定されうる。イベント駆動ソフトウェア・アプリケーションは、試験の際に活用されうる多数の異なるイベントおよび対応するイベント・シーケンスをもつことがあるが、それがしばしば、イベント駆動ソフトウェア・アプリケーションを解析するときのイベント・シーケンス爆発問題につながりうる。
のちに詳述するように、イベント駆動ソフトウェア・アプリケーションの複数の初期イベント・シーケンスのそれぞれについて、該初期イベント・シーケンスの従属イベントの一つまたは複数の目標条件に対してイベント・シーケンス距離が決定されてもよい。複数の従属イベントについて、そのそれぞれは別個に考えられてもよい。イベント・シーケンス距離は、その対応する初期イベント・シーケンスの実行が対応する目標条件を満たすことになりうる度合いを示していてもよい。距離およびその計算の説明はのちにさらに詳細に述べる。
いくつかの実施形態では、初期イベント・シーケンスの実行は、イベント・シーケンス距離に基づいて優先度を付けられてもよい。さらに、前記初期イベント・シーケンスの一つまたは複数と、従属イベントとを含むイベント空間が、実行の優先度付けに基づいて探査されてもよい。優先度付けは、どのイベント・シーケンスが、他の方法より増大した効率で目標条件を満たしうるかを判別することを許容しうる。たとえば、そのようなプロセスは、それ以外の方法で探査されうるイベント・シーケンスの数を減らしうる仕方で、イベント駆動ソフトウェアの、目標条件の充足に対応する諸部分の探査を許容しうる。したがって、イベント・シーケンス爆発に関連する問題が少なくとも部分的には回避されうる。
本開示の諸実施形態は、付属の図面を参照して説明される。
図1Aは、本稿に記載される少なくとも一つの実施形態に基づいて構成された、イベント駆動ソフトウェアを試験するよう構成された例示的なシステム100を表わす図である。システム100は、イベント駆動ソフトウェア・アプリケーションの試験対象コード104に関して試験を実行し、イベント駆動ソフトウェア・アプリケーションの試験結果108を生成するよう構成された試験モジュール106を含んでいてもよい。試験対象コード104は、たとえばイベント駆動ソフトウェア・アプリケーション、イベント駆動ソフトウェア・アプリケーションのコード、ライブラリ、アプリケーション、スクリプトまたは処理装置による実行のための他の論理もしくは命令といった電子データを含んでいてもよい。いくつかの実施形態では、試験対象コード104は、イベント駆動ソフトウェア・アプリケーションの完全なインスタンスを含んでいてもよい。追加的または代替的に、試験対象コード104はイベント駆動ソフトウェア・アプリケーションの一部を含んでいてもよい。試験対象コード104は、イベント駆動ソフトウェア・アプリケーションのために使用されうるいかなる好適な型のコンピュータ言語で書かれていてもよい。
試験対象コード104は、いくつかのソフトウェア・モジュールに編成されているソフトウェア・プログラムの諸部分を含んでいてもよい。それらのソフトウェア・モジュールは、それらのソフトウェア・モジュールの特定の機能を実行するコードを含んでいてもよい。特定の機能を実行するコードは、ソフトウェア関数と称されることがある。いくつかの実施形態では、試験対象コード104は、イベント駆動アプリケーションに関連付けられたイベントの発生に応答して一つまたは複数のソフトウェア関数を実行してもよい。たとえば、試験対象コード104は、イベント・シーケンス「e1」に応答して変数「a」に関する動作を実行しうるソフトウェア関数「f1(a)」を含んでいてもよい。
のちに詳述するように、試験モジュール106は、試験対象コード104を探査し、試験することに関して助けになりうる、試験対象コード104に関する一連の動作を実行するよう構成されていてもよい。たとえば、試験モジュール106は、試験対象コード104の初期イベント・シーケンスを決定するよう構成されていてもよい。初期イベント・シーケンスは、試験対象コード104を探査する際の出発点として使用されてもよい一つまたは複数のイベントの諸シーケンスを含んでいてもよい。いくつかの実施形態では、初期イベント・シーケンスは、試験対象コード104を開くまたは初期化するために利用可能でありうる諸イベントを含んでいてもよい。追加的または代替的に、初期イベント・シーケンスは、試験対象コード104を開くまたは初期化したときに利用可能でありうる諸イベントを含んでいてもよい。さらに、そのアプリケーションの実行中に、試験対象コード104の特定の状態に関して新たに発見されうる諸イベントが、その特定の状態についての追加初期イベントとして含められてもよい。上記は単に初期イベント・シーケンスの例である。「初期イベント・シーケンス」という用語は、試験対象コード104を探査する際の出発点として使用されうるイベント・シーケンスのいかなる集合を含んでいてもよい。それについてはのちに詳述する。試験モジュール106は、任意の受け入れ可能なルーチン、メソッドまたはプロセスを使って初期イベント・シーケンスを決定するよう構成されていてもよい。
試験モジュール106は、初期イベントの一つまたは複数に依存しうる一つまたは複数の従属イベントを決定するよう構成されていてもよい。イベントは、他のイベントに対応しうる変数に依存する経路条件を含むときに、該他のイベント(たとえば初期イベント)の従属イベントであると考えられてもよい。たとえば、第一のイベントが変数に値を書き込んでもよく、第二のイベントがその変数の値に基づきうる経路条件をもちうる。よって、この例では、第二のイベントおよびその対応する経路条件は、第一のイベントに依存する。いくつかの実施形態では、第一のイベントは第二のイベントに依存してもよく、同時に、第二のイベントが第一のイベントに依存してもよい。さらに、イベントは自分自身に依存してもよい。
いくつかの実施形態では、試験モジュール106は、従属イベントの経路条件を同定し、該経路条件に関連付けられた変数を初期イベント・シーケンスに関連付けられた変数と照合して、どのイベントがどの初期イベント・シーケンスに依存するかを決定するよう構成されていてもよい。いくつかの実施形態では、従属イベントの経路条件に関連付けられた経路は、まだ探査されていないことがあり、よってそれらの経路条件は「目標条件」と称されてもよい。未探査の経路をもつそれらの経路条件は、該未探査の経路が探査されうるよう、目標とされうるからである。
試験モジュール106は、実行されたときに、目標条件を満たし、それらの目標条件の関連付けられた経路が探査されうるような一つまたは複数のイベント・シーケンスを決定するよう構成されていてもよい。たとえば、試験モジュール106はまず、ある特定の従属イベントに対応しうる特定の諸初期イベント・シーケンスを同定してもよい。試験モジュール106は次いで、それらの特定の初期イベント・シーケンスのそれぞれについて、前記特定の従属イベントの一つまたは複数の目標条件に対する距離を決定するよう構成されていてもよい。距離の決定についてはのちに詳述する。それぞれの特定の初期イベント・シーケンスについての距離は、その特定のイベント・シーケンスの実行が対応する目標条件を満たす度合いを示してもよい。
たとえば、特定の目標条件は次の条件「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」の値は、第三のイベント・シーケンスの実行が上記の特定の目標条件を満足させうることを示しうる。
試験モジュール106は、これらの距離に基づいて上記の特定の初期イベント・シーケンスの実行に優先度付けするよう構成されていてもよい。試験モジュール106は、前記特定の従属イベントと前記特定の初期イベント・シーケンスの一つまたは複数とを含む試験対象コード104のイベント空間を、前記特定のイベント・シーケンスの実行の優先度付けに基づいて探索するよう構成されていてもよい。たとえば、いくつかの実施形態では、試験モジュール106は、より小さな距離をもつ特定の初期イベント・シーケンスがより大きな距離をもつ特定の初期イベント・シーケンスより上に実行のために優先度付けされることに基づいて、最も小さな距離をもつ特定の初期イベント・シーケンスを最初に実行してもよい。試験モジュール106が優先度付けおよび探索をどのように実行しうるかの例に関するさらなる詳細は後述する。上記で示したように、優先度付けは、試験モジュール106が、どのイベント・シーケンスが、他の方法より増大した効率をもって目標条件を満たしうるかを判別することを許容しうる。
いくつかの実施形態では、試験モジュール106は、試験対象コード104を試験することからの試験結果108を生成するよう構成されていてもよい。いくつかの実施形態では、試験結果108は目標条件の一つまたは複数を満たしうるイベント・シーケンスを示してもよい。たとえば、いくつかの実施形態では、試験結果108は、どのイベント・シーケンスがどの目標条件を満たしうるかのグラフィックな例解を提供しうるイベント・シーケンス木を含んでいてもよい。
図1Bは、本稿に記載される少なくとも一つの実施形態に基づく、試験モジュール106を含みうる例示的な電子デバイス102を示す。電子デバイス102は、試験モジュール106を使って試験対象コード104を試験するよう構成されているいかなる好適なシステム、装置またはデバイスを含んでいてもよい。電子デバイス102は、メモリ112に通信上結合されたプロセッサ110を含んでいてもよい。いくつかの実施形態では、試験モジュール106は、プロセッサ110による実行のためのメモリ112内に存在する論理または命令において具現されてもよい。
プロセッサ110は、さまざまなコンピュータ・ハードウェアまたはソフトウェア・モジュールを含むいかなる好適な特殊目的または汎用コンピュータ、コンピューティング・エンティティまたは処理装置を含んでいてもよく、いかなる適用可能なコンピュータ可読記憶媒体上に記憶された命令を実行するよう構成されていてもよい。たとえば、プロセッサ110はマイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)またはプログラム命令をインタープリットおよび/または実行するおよび/またはデータを処理するよう構成された他の任意のデジタルもしくはアナログ回路を含んでいてもよい。図1Bでは、プロセッサ110は、本稿に記載される任意の数の動作を個々にまたは集団的に実行するよう構成された任意の数のプロセッサを含んでいてもよい。さらに、前記プロセッサのうち一つまたは複数が一つまたは複数の異なる電子デバイス上に存在していてもよい。いくつかの実施形態では、プロセッサ110は、プログラム命令をインタープリットおよび/または実行するおよび/またはメモリ112に記憶されたデータを処理することを行なってもよい。
メモリ112は、コンピュータ実行可能な命令またはデータ構造を担持するまたは記憶するコンピュータ可読記憶媒体を含んでいてもよい。そのようなコンピュータ可読記憶媒体は、プロセッサ110のような汎用または特殊目的コンピュータによってアクセスされうるいかなる利用可能な媒体であってもよい。限定ではなく例として、そのようなコンピュータ可読記憶媒体は、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、電気的に消去可能なプログラム可能な読み出し専用メモリ(EEPROM)、コンパクトディスク読み出し専用メモリ(CD-ROM)または他の光ディスク記憶、磁気ディスク記憶または他の磁気記憶デバイス、フラッシュメモリ・デバイス(たとえば半導体メモリ・デバイス)またはコンピュータ実行可能な命令またはデータ構造の形で所望されるプログラム・コードを担持または記憶するために使用されうる、汎用または特殊目的コンピュータによってアクセスされうる他の任意の記憶媒体を含む、有体または非一時的なコンピュータ可読記憶媒体を含んでいてもよい。上記のものの組み合わせも、コンピュータ可読記憶媒体の範囲内に含まれうる。コンピュータ実行可能な命令はたとえば、プロセッサ110に、ある機能または機能群を実行させるよう構成された命令およびデータを含んでいてもよい。
試験モジュール106は、プロセッサ110に試験対象コード104の試験を実行させるよう構成された命令およびデータを含んでいてもよい。よって、いくつかの実施形態では、電子デバイス102は、図1Bに示されるように、メモリ112に試験モジュール106を組み込んでもよい。
図2は、本稿に記載される少なくとも一つの実施形態に基づく、イベント駆動ソフトウェア・アプリケーションの試験に関して実行されうる例示的なフロー200の図である。フロー200はいかなる好適なシステム、装置またはデバイスによって実行されてもよい。たとえば、図1Bの電子デバイス102の試験モジュール106がフロー200に関連する動作の一つまたは複数を実行してもよい。離散的なブロックおよびフェーズで図示されているが、フロー200のブロックまたはフェーズの一つまたは複数に関連するステップおよび動作は、実装に依存して、追加的なブロックまたはフェーズに分割されても、より少数のブロックまたはフェーズに組み合わされても、あるいはなくされてもよい。
フロー200は、図1Aの試験対象コード104のような試験対象コードのはたらきをしうるイベント駆動ソフトウェア・アプリケーションの一つまたは複数の部分に関して実行されてもよい。いくつかの実施形態では、フロー200は、試験対象コードに関連していてもよい一つまたは複数の初期イベント・シーケンス202を受領することによって始まってもよい。初期イベント・シーケンス202は、試験対象コードのイベント空間に含まれていてもよい。初期イベント・シーケンス202は、試験対象コードのパーサーまたはインタープリターから得られてもよいイベントまたはイベントのシーケンスを含んでいてもよい。試験対象コードの実行中に動的に発見されるイベント・シーケンスも、いくつかの場合には初期イベント・シーケンス202と考えられてもよい。たとえば、ウェブ・アプリケーションの初期イベント・シーケンス202はその関連するソース・コードと一緒に、ウェブ・ブラウザーから取得されてもよい。
図示した実施形態では、フロー200は、イベント識別(identification)フェーズ204、イベント抽象化(abstraction)フェーズ206およびイベント・コンストラクターおよびスケジューラー(constructor and scheduler)・フェーズ210(以下では「コンストラクター・フェーズ210」と称される)を含んでいてもよい。イベント識別フェーズ204、イベント抽象化フェーズ206およびコンストラクター・フェーズ210は、初期イベント・シーケンス202および関する試験対象コードに関する動作を実行して試験結果208を出力するよう構成されていてもよい。試験結果は、図1Aに関して上述した試験結果108と類似していてもよい。のちに詳述するように、イベント識別フェーズ204、イベント抽象化フェーズ206およびコンストラクター・フェーズ210に関連する動作は、探索中のイベント・シーケンスの実行が距離に従って優先度付けされうるように、試験対象コードのイベント空間を許容し、探索するために実行されてもよい。
イベント識別フェーズ204は、初期イベント・シーケンス202のうちの一つまたは複数に関する一つまたは複数の従属イベント216を決定することに関連する動作に対応していてもよいブロック212を含んでいてもよい。たとえば、いくつかの実施形態では、初期イベント・シーケンス202に含まれない、まだ探索されていない、および初期イベント・シーケンス202のうちの一つまたは複数の実行によって到達されうる一つまたは複数のイベントが、新たな初期イベント202として同定されてもよく、そのうちで未探査の経路条件をもつ従属イベントが同定される。
いくつかの実施形態では、ブロック212は、従属イベント216を対応する初期イベント・シーケンス202と相関付けることに関連する動作を含んでいてもよい。たとえば、初期イベント・シーケンス202によって書かれる変数が、従属イベント216に関連付けられた一つまたは複数の経路条件の一部であってもよい変数と比較されて、どの従属イベント216がどの初期イベント・シーケンス202に依存しうるかを判別してもよい。
いくつかの実施形態では、イベント識別フェーズ204は、初期イベント・シーケンス202の一つまたは複数のイベント集合218を決定することに関連する動作に対応していてもよいブロック214を含んでいてもよい。イベント集合218はそれぞれ、同じ従属イベントを共有する一つまたは複数の初期イベント・シーケンス202を含んでいてもよい。たとえば、第一の初期イベント・シーケンスは、ある特定の従属イベントの経路条件に関連付けられていてもよい第一の変数に書き込みをしてもよい。さらに、第二の初期イベント・シーケンスは、やはりその特定の従属イベントの上記経路条件または別の経路条件に関連付けられていてもよい第二の変数に書き込みをしてもよい。この特定の例については、第一の初期イベント・シーケンスおよび第二の初期イベント・シーケンスは、その特定の従属イベント216がその両方に依存しうるので、同じイベント集合218に含まれてもよい。
イベント抽象化フェーズ206は、イベント識別フェーズ204において決定されうる従属イベント216に関して抽象化を実行することに関連した動作を含んでいてもよい。たとえば、イベント抽象化フェーズ206は、従属イベント216の経路条件を収集することに関連した動作に対応してもよいブロック220を含んでいてもよい。従属イベント216はそれぞれ、満たされたときに試験対象コードが対応する従属イベント216に関連した動作を実行する結果を与えうる一つまたは複数の経路条件を含んでいてもよい。
たとえば、ある特定の従属イベント216の経路条件は、一つまたは複数の変数の一つまたは複数の値に関連する「If」文などであって、満たされたときにその特定の従属イベント216を実行するときのバグまたはセキュリティ脆弱性に到達する結果となりうるものを含んでいてもよい。決定された経路条件は、数値またはストリング変数に関連付けられた条件を含んでいてもよい目標条件223として同定されてもよい。数値変数に基づきうる経路条件または目標条件は、「数値条件」と称されてもよく、ストリング変数に基づきうる経路条件または目標条件は、「ストリング条件」と称されてもよい。
イベント抽象化フェーズ206は、従属イベント216の目標条件の数値条件に関連付けられた数値区間を計算することに関連する動作に対応していてもよいブロック222をも含んでいてもよい。いくつかの実施形態では、数値区間は、区間に抽象化されうる対応するシンボリック条件に基づいて決定されてもよい。目標条件についてのシンボリック条件は、いかなる好適な技法を使って決定されてもよい。
特に、数値条件は、一つまたは複数の数値変数に関連付けされた値の一つまたは複数の範囲に基づいていてもよい対応するシンボリック経路条件を有していてもよい。シンボリック経路条件は次いで、一つまたは複数の区間の併合(union)に変換されてもよい。例として、数値(たとえば整数)条件のシンボリック経路条件「0≦i≦1∨i>5」は次の区間の併合「i∈[0,1]∪[6,∞]」に変換されてもよい。もう一つの例として、数値条件のシンボリック経路条件「i*j>9∧i>2」は次の区間の併合「i*j∈[10,∞]∧i∈[3,∞]」に変換されてもよい。数値条件およびその関連付けられた区間は、イベント抽象化フェーズ206の間に決定されうる抽象化された目標条件224の集合に含められてもよい。
数値条件の経路条件は複数の数値変数に関わっていてもよい。この条件は次いで、多次元ボックスの併合に変換されてもよい。例として、整数条件のシンボリック経路条件「0≦i≦10∧2j<i∧j>1」は、次の2Dボックス併合に変換されてもよい:「i∈[5,10]∧j∈[2,4]」。経路条件に関する複数の変数の可能な値を推定するときの精度を高めるために、より複雑なモデルが使われることができる。
ブロック222は、従属イベント216の目標条件のストリング条件に関連付けられたストリング・オートマタを計算することに関連する動作にも対応していてもよい。いくつかの実施形態では、有限状態機械(FSM)が、ストリング条件を表わしうるストリング・オートマタとして生成されてもよい。ストリング条件およびその関連付けられたストリング・オートマタは、イベント抽象化フェーズ206の間に決定されうる抽象化された目標条件224の集合に含まれてもよい。
たとえば、図3は、少なくとも一つの実施形態に基づく、ストリング条件を表わすために使用されうるFSM 300のグラフの例示的な実施形態の図解である。FSM 300における中間状態は単一の円によって表わされてもよく、FSM 300の受け入れ状態(accepting state)(たとえば、ストリング条件が満たされうる状態)は二重円によって表わされてもよく、FSM 300の状態への入力は対応する円につながる矢印によって表わされてもよい。
図示した例では、FSM 300は、ストリング「A1」またはストリング「B2」のいずれかではじまる(starts with)ストリングによって満たされうるストリング条件「s.startsWith('A1')∨s.starsWith('B2')」を表わしていてもよい。特に、図示した例では、FSM 300は、開始状態302、第一の中間状態304、第二の中間状態306および受け入れ状態308を含んでいてもよい。
開始状態302は、何のキャラクタも割り当てられていないときの(すなわち、空のときの)ストリング「s」を表わしうる。第一の中間状態304は、「s」の最初のキャラクタが「A」であるときに開始状態302から到達されうる。受け入れ状態308は、「A」に続くキャラクタが「1」であるときに第一の中間状態304から到達されうる。この場合、「s.startsWith('A1')」が満たされうるからである。
第二の中間状態306は、「s」の最初のキャラクタが「B」であるときに開始状態302から到達されうる。「s=B」であるときは、「B」は「s」の最初でありかつ最後のキャラクタでありうること、「*」が任意キャラクタを表わすとして「s=B*」であるときは「B」は「s」の最初のキャラクタであり、任意のキャラクタが後続することを注意しておく。受け入れ状態308は、「B」に続くキャラクタが「2」であるときに第一の中間状態306から到達されうる。
FSM 300は、特定のストリング条件について生成されうるFSMの単なる例である。任意の数の異なるFSMが任意の数の異なるストリング条件について生成されてもよい。ストリングおよびストリング条件のFSMによる表現のさらなる例および説明は、2012年5月29日に出願された米国特許出願第13/482,598号に見出されうる。同出願の内容全体はここに参照によって組み込まれる。
図2を参照するに、コンストラクター・フェーズ210は、イベント識別フェーズ204の間に決定されたイベント集合218および従属イベント216に基づいて試験結果208を生成することに関連する動作を含んでいてもよい。コンストラクター・フェーズ210は、イベント抽象化フェーズ206の間に決定されうる目標条件223および対応する抽象化された目標条件224に基づいて試験結果208を生成することに関連する動作を含んでいてもよい。上記で示したように、いくつかの実施形態では、試験結果208は、従属イベント216の目標条件の一つまたは複数を満たしうるイベント・シーケンスを含んでいてもよい。これらのまたは他の実施形態において、試験結果208は、イベント・シーケンスによる目標条件の充足をも示しうる一つまたは複数のイベント・シーケンス木を含んでいてもよい。
いくつかの実施形態では、試験結果208は、「貪欲な計算(Greedy Computation)」と称される検索ベースの組み合わせ計算(search-based combinational computation)に関連付するブロック226おいて実行される動作に基づいて決定されてもよい。貪欲な計算は、イベントのどのシーケンスが抽象化された目標条件224の目標条件を満たしうるかを決定するために実行されてもよい。貪欲な計算に関して実行される動作は、特定のイベント集合218および該特定のイベント集合218に対応しうる特定の抽象化された諸目標条件224に関して実行されてもよい。したがって、貪欲な計算に関連する動作は、種々のイベント集合218および対応する抽象化された目標条件224に関して離散的に実行されてもよい。貪欲な計算は、上記に示した距離に基づくイベント・シーケンスの優先順位付けに従って試験対象コードの探索を実行するために使われてもよい。したがって、貪欲な計算は、試験対象コードのイベント空間の探索の間のイベント・シーケンスの実行が、距離に従って優先度付けされうるよう実行されてもよい。
いくつかの実施形態では、貪欲な計算は、特定のイベント集合218およびその対応する目標条件223および抽象化された目標条件224で始まることによって初期化してもよい。貪欲な計算は、特定のイベント集合218の一つまたは複数のイベント・シーケンスと対応する目標条件223とについての距離を計算することをも含んでいてもよい。いくつかの実施形態では、距離は、コンストラクター・フェーズ210の距離計算ブロック234において決定されてもよい。距離は、対応するイベント・シーケンスの実行が対応する目標条件223を満たす度合いを示してもよい。
下記は、目標条件223の対応する特定の数値条件に関する、特定のイベント・シーケンスの距離を計算する例である。特定の数値条件は、値「v」についての上限「ub」および下限「lb」をもつ区間を含んでいてもよい対応する抽象化された目標条件224を有していてもよい。ここで、値「v」が上限「ub」と下限「lb」の間であれば、特定の数値条件は満たされうる。さらに、値「v」は、特定のイベント・シーケンスが実行されるときに変えられる値をもちうる一つまたは複数の変数の値に関連していてもよい。例として、値「v」は、特定のイベント・シーケンスが実行されるときに変えられることがありうる整数「i」の値に基づいていてもよい。もう一つの例として、値「v」は、特定のイベント・シーケンスが実行されるときにいずれも変えられることがありうる整数「i」の値と整数「j」の値の積に基づいていてもよい(たとえば「v=i*j」)。
特定のイベント・シーケンスの特定の数値条件に対する距離は、その特定のイベント・シーケンスが実行されたとした場合の上限「ub」と値「v」の間の距離および下限「lb」と値「v」の間の距離のうちの小さいほうであってもよい。さらに、いくつかの実施形態では、その特定のイベント・シーケンスが実行されたとした場合に値「v」が下限「lb」と上限「ub」の間であるときは距離は「0」であると決定されてもよい。たとえば、値「v」の区間「[lb,ub]」への距離は次のように表わしてもよい:
追加的または代替的に、特定の数値条件が複数の区間を含むときは、距離は各区間について決定されてもよく、それらの距離のうちのより小さいものが距離として使われてもよい。さらに、いくつかの実施形態では、値「v」は、距離決定がなされる前に「0」に初期化されてもよい。
例として、特定の数値条件に関連付けられた抽象化された目標条件224は「i∈[0,1]∪[6,∞]」として定義されてもよく、特定のイベント・シーケンスの実行は「i」の値「v」が「3」である結果を与えてもよい。したがって、その特定のイベント・シーケンスのその特定の数値条件に対する距離は、「min(|3−1|,|6−3|)=2」と決定されてもよい。
下記は、特定のイベント・シーケンスの、目標条件223の対応する特定のストリング条件に対する距離を計算する例である。特定のイベント・シーケンスの特定のストリング条件に対する距離は、ストリングが、その特定のイベント・シーケンスの実行後のその特定のストリング条件に対応する抽象化された目標条件224の対応するFSMの最も近い受け入れ状態から何遷移目でありうるかを決定することによって決定されてもよい。
たとえば、特定のストリング条件は、対応する抽象化された目標条件224の図3のFSM 300によって表わされうるストリング条件「s.startsWith('A1')∨s.startsWiths('B2')」を含んでいてもよい。さらに、特定のイベント・シーケンスの実行が、ストリング「s」が一つまたは複数のキャラクタを割り当てられる結果を与えうる。距離は、その特定のイベント・シーケンスが実行されたとした場合にストリング「s」にとって最も近い受け入れ状態に到達するための遷移数を示していてもよい。たとえば、FSM 300に関し、その特定のイベント・シーケンスの実行が「s='A1'」という結果になるとすると、その特定のイベント・シーケンスのその特定のストリング条件に対する距離は、「0」と決定されてもよい。条件「s.startsWith('A1')」が満たされ、FSM 300が受け入れ状態308になりうるからである。
さらにもう一つの例として、FSM 300に関し、その特定のイベント・シーケンスの実行が「s='C12'」という結果になるとすると、その特定のイベント・シーケンスのその特定のストリング条件に対する距離は、「2」と決定されてもよい。FSM 300は開始状態302にあることがあり、受け入れ状態308に到達するための遷移の数は2になりうるからである。
ブロック226に戻ると、いくつかの実施形態では、貪欲な計算は、グローバルな実装および/またはローカルな実装を含みうる。貪欲な計算のグローバルな実装は、グローバルな検索ベースの組み合わせ計算を含んでいてもよく、「グローバル計算」と称されてもよい。「グローバル計算」の関連する動作はブロック228において実行されてもよい。貪欲な計算のローカルな実装は、ローカルな検索ベースの組み合わせ計算を含んでいてもよく、「ローカル計算」と称されてもよい。「ローカル計算」の関連する動作はブロック230において実行されてもよい。
図4は、本稿に記載される少なくとも一つの実施形態に基づくグローバル計算を実行する例示的な方法400のフローチャートである。いくつかの実施形態では、方法400に関連する動作の一つまたは複数はフロー200のブロック228において実行されてもよい。方法400は、任意の好適なシステム、装置またはデバイスによって実行されてもよい。たとえば、図1Bの電子デバイスの試験モジュール106が方法400に関連する動作の一つまたは複数を実行してもよい。離散的なブロックで示されているが、方法400のブロックの一つまたは複数に関連するステップおよび動作は、所望される実装に依存して、追加的なブロックに分割されても、より少数のブロックに組み合わされても、あるいはなくされてもよい。
方法400は、グローバル計算がイベント集合「S」を用いて初期化されうるブロック402で始まってもよい。いくつかの実施形態では、イベント集合「S」は、イベント集合「S」の各イベント・シーケンスが同じ従属イベント(「対応する従属イベント」)を共有しうるイベント集合を含んでいてもよい。いくつかの実施形態では、対応する従属イベントは、イベント集合「S」の初期化とともに含められてもよい。対応する従属イベントは、目標条件と考えられてもよい一つまたは複数の経路条件を含んでいてもよい。さらに、いくつかの実施形態では、目標条件は抽象化された目標条件に関連付けられていてもよい。
例として、図5Aは、本稿に記載される少なくとも一つの実施形態に基づく、イベント集合「S」について使用されうるイベント集合518を示している。イベント集合518は、イベント・シーケンス「e1」およびイベント・シーケンス「e2」を含んでいてもよい。この例に示されるように、イベント・シーケンス「e1」および「e2」は整数変数「i」および「j」に書き込んでもよい。図5Aは、従属イベント「e5」も示している。従属イベント「e5」は、未探査の経路条件(「目標条件」と称される)523a、523b、523cおよび523dなどを含んでいてもよい。
目標条件523aが満たされることは、「i」の値に基づいていてもよく、従属イベント「e5」に関連した経路(場合によっては「分枝」とも称される)「b15」の探査を許容してもよい。目標条件523bが満たされることは、値「j」に基づいていてもよく、従属イベント「e5」に関連した経路「b25」の探査を許容してもよい。目標条件523cが満たされることは、「i」および「j」両方の値に基づいていてもよく、従属イベント「e5」に関連した経路「b35」の探査を許容してもよい。さらに、目標条件523dが満たされることは、「i」および「j」両方の値に基づいていてもよく、従属イベント「e5」に関連した経路「b45」の探査を許容してもよい。目標条件523が満たされることは、「i」および/または「j」の値に基づいていてもよく、イベント・シーケンス「e1」および「e2」は「i」および「j」に書き込みしてもよいので、従属イベント「e5」はイベント・シーケンス「e1」および「e2」に依存しうる。よって、従属イベント「e5」は、イベント・シーケンス「e1」および「e2」の対応する従属イベントと考えられてもよい。
さらに、図示した例において、目標条件523はそれぞれ抽象化された目標条件524と関連付けられていてもよい。たとえば、目標条件523aは抽象化された目標条件524aと関連付けられていてもよく、目標条件523bは抽象化された目標条件524bと関連付けられていてもよく、目標条件523cは抽象化された目標条件524cと関連付けられていてもよく、目標条件523dは抽象化された目標条件524dと関連付けられていてもよい。さらに、変数「i」および「j」が整数でありうるので、目標条件523および抽象化された目標条件524は、数値条件と考えられてもよい。したがって、上記で示したように、抽象化された目標条件524は、対応する経路「bk5」(たとえば「b15」、「b25」、「b35」または「b45」)が探査されうるよう「i」および/または「j」についての区間を定義してもよい。
もう一つの例として、図6Aは、本稿に記載される少なくとも一つの実施形態に基づく、イベント集合「S」について使用されうるイベント集合618を示している。イベント集合618は、イベント・シーケンス「e3」およびイベント・シーケンス「e4」を含んでいてもよい。この例に示されるように、イベント・シーケンス「e3」および「e4」はストリング変数「s」に書き込んでもよい。図6Aは、従属イベント「e6」も示している。従属イベント「e6」は、未探査の経路条件(「目標条件」と称される)623aおよび623bを含んでいてもよい。
目標条件623aが満たされることは、「s」の内容に基づいていてもよく、従属イベント「e6」に関連した経路「b16」の探査を許容してもよい。さらに、目標条件623bが満たされることは、「s」の内容に基づいていてもよく、従属イベント「e6」に関連した経路「b26」の探査を許容してもよい。目標条件623が満たされることは、「s」の内容に基づいていてもよく、イベント・シーケンス「e3」および「e4」は「s」に書き込みしてもよいので、従属イベント「e6」はイベント・シーケンス「e3」および「e4」に依存しうる。よって、従属イベント「e6」は、イベント・シーケンス「e3」および「e4」の対応する従属イベントと考えられてもよい。
さらに、図示した例において、目標条件623はそれぞれ抽象化された目標条件624と関連付けられていてもよい。たとえば、目標条件623aは抽象化された目標条件624aと関連付けられていてもよく、目標条件623bは抽象化された目標条件624bと関連付けられていてもよい。さらに、図示した例では、変数「s」がストリングでありうるので、目標条件623および抽象化された目標条件624は、ストリング条件と考えられてもよい。したがって、上記で示したように、抽象化された目標条件624aは、目標条件623aを表わしていてもよく、どのようにして経路「b16」に到達するかを示しうるFSM 601aを含んでいてもよい。同様に、抽象化された目標条件624bは、目標条件623bを表わしていてもよく、どのようにして経路「b16」に到達するかを示しうるFSM 601bを含んでいてもよい。
図5Aおよび図6Aのイベント・シーケンス「e1」、「e2」、「e3」および「e4」は図2の初期イベント・シーケンス202の例であってもよい。さらに、イベント集合518および618は、図2との関連で述べたブロック214に関して実行されうる動作に基づいて初期イベント・シーケンス202から分割されうるイベント集合218の例であってもよい。さらに、抽象化された目標条件524および624は、図2の抽象化された目標条件224の例であってもよい。さらに、従属イベント「e5」および「e6」は図2の従属イベント216の例であってもよい。
図4に戻ると、ブロック404で、イベント集合「S」のイベント・シーケンスの距離が、一つまたは複数の対応する目標条件に対して決定されてもよい。対応する目標条件は、対応する従属イベントの未探査の経路条件を含んでいてもよい。いくつかの実施形態では、距離は、図2の距離計算ブロック234に関して述べたように、対応する目標条件の抽象化された目標条件224に基づいて決定されてもよい。
たとえば、いくつかの実施形態では、距離は、それぞれ抽象化された目標条件524a〜524bに基づいて目標条件523a〜523bに対して図5Aのイベント・シーケンス「e1」および「e2」について決定されてもよい。図示した例では、変数「i」および「j」の初期値は「0」と想定されてもよい。これらの値は、イベント・シーケンス実行の間に更新され、距離決定のために使われる。表1は、イベント・シーケンス「e1」および「e2」について決定されうる距離を示している。さらに、表1では、行はイベント・シーケンスに関連付けられていてもよく、列は対応する目標条件に関連付けられていてもよい。セル内の数字は、対応する行のイベントの、対応する列の目標条件に対する距離を示しうる。例として、イベント・シーケンス「e1」の実行後、iおよびjの値はそれぞれ3および1であり、目標条件523dへのその距離は|3×1−10|=7である。
もう一つの例として、距離は、それぞれ抽象化された目標条件624aおよび624bに基づいて目標条件623aおよび623bに対して図6Aのイベント・シーケンス「e3」および「e4」について決定されてもよい。図示した例では、変数「s」は実行前には空に設定されてもよい。表2は、イベント・シーケンス「e3」および「e4」について決定されうる距離を示している。さらに、表2では、行はイベント・シーケンスに関連付けられていてもよく、列は対応する目標条件に関連付けられていてもよい。セル内の数字は、対応する行のイベントの、対応する列の目標条件に対する距離を示しうる。
ブロック406では、イベント・シーケンスのいずれかが対応する目標条件に対して「0」の距離をもつかどうかが判定される。一つまたは複数のイベント・シーケンスが「0」の距離をもつときは、方法400はブロック408に進んでもよく、そうでない場合は方法400はブロック414に進んでもよい。
ブロック408では、対応する目標条件に対して「0」の距離をもつイベント・シーケンスの一つまたは複数が、対応する従属イベントをアペンドされてもよく、結果として得られるイベント・シーケンスが実行されてもよい。そのような実行は、対応する目標条件に関連付けられた経路が遭遇され、探査されることを許容しうる。いくつかの実施形態では、実行されたイベント・シーケンスは、対応する目標(または経路)条件に関連付けられた経路を「カバーする」と見なされうる発見されたイベント・シーケンスと考えられてもよい。のちに示すように、いくつかの実施形態では、一つまたは複数の発見されたイベント・シーケンスが、イベント集合「S」に関連付けられた試験結果に含まれてもよい。さらに、「0」の距離をもつイベント・シーケンスを実行することにより、実行および探査が、より低い充足度を示す距離に比べてより高い充足度を示す距離に従って優先されうる。
たとえば、図5Aおよび表1の例に関し、イベント・シーケンス「e2」が従属イベント「e5」をアペンドされてもよく、結果として得られるイベント・シーケンス(「e2→e5」)が実行されてもよい。それが経路「b15」の探査を許容しうる。いくつかの実施形態では、イベント・シーケンス「e2→e5」はこうして、イベント集合518に関して発見されたイベント・シーケンスと見なされてもよく、イベント集合518に関連付けられた試験結果に含められてもよい。さらに、イベント・シーケンス「e2→e5」は経路「b15」をカバーするものと見なされてもよい。
もう一つの例として、図6Aおよび表2の例に関し、イベント・シーケンス「e3」が従属イベント「e6」をアペンドされてもよく、結果として得られるイベント・シーケンス(「e3→e6」)が実行されてもよい。それが経路「b16」の探査を許容しうる。追加的または代替的に、イベント・シーケンス「e4」が従属イベント「e6」をアペンドされてもよく、結果として得られるイベント・シーケンス(「e4→e6」)が実行されてもよい。それも経路「b16」の探査を許容しうる。いくつかの実施形態では、イベント・シーケンス「e4→e6」はこうして、イベント集合618に関して発見されたイベント・シーケンスと見なされてもよく、イベント集合618に関連付けられた試験結果に含められてもよい。さらに、イベント・シーケンス「e4→e6」は経路「b16」をカバーするものと見なされてもよい。
ブロック410では、探査された経路条件は目標条件から除去されてもよい。探査された条件は、ブロック406に関連する動作に関連するイベント・シーケンスの実行に応答して遭遇および/または探査されうる経路に対応する「0」の距離に関連付けられている目標条件を含んでいてもよい。
たとえば、図5Aおよび表1の例に関し、目標条件523aは、「探査された条件」と考えられてもよく、前に目標条件523a〜523dを含んでいたかもしれない目標条件の集合から除去されてもよい。したがって、この特定の例および反復段階に関しては、目標条件の集合は、ブロック410後には目標条件523b〜523dを含んでいてもよい。もう一つの例として、図6Aおよび表2の例に関しては、目標条件623aは、「探査された条件」と考えられてもよく、前に目標条件623aおよび623bを含んでいたかもしれない目標条件の集合から除去されてもよい。したがって、この特定の例および反復段階に関しては、目標条件の集合は、ブロック410後には目標条件623bを含んでいてもよい。
ブロック412では、対応する従属イベントに関連付けられた何らかの目標条件が残っているかどうかが判定されてもよい。目標条件が残っているときは、方法400はブロック414に進んでもよい。それ以上目標条件が残っていないときは、方法400はブロック420に進んでもよい。
いくつかの実施形態では、それ以上目標条件が残っていないことは、対応する従属イベントの目標条件すべてを満たすイベント・シーケンスが発見されたかもしれないことを示しうる。したがって、いくつかの実施形態では、試験結果(たとえば試験結果208)がブロック420において生成されてもよい。いくつかの実施形態では、目標条件を満たしうる発見されたイベント・シーケンスは、試験結果に含まれてもよい。追加的または代替的に、いくつかの実施形態では、試験結果は、発見されたイベント・シーケンスによる目標条件の充足をも示しうる一つまたは複数のイベント・シーケンス木を含んでいてもよい。
ブロック414では、最も小さい0でない距離に関連付けられたイベント集合「S」のイベント・シーケンス「Seqmin」が実行されてもよい。いくつかの場合には、二つ以上のイベント・シーケンスが同じ最も小さい0でない距離に関連付けられていてもよい。これらまたは他の実施形態において、それらのイベント・シーケンスのいずれかが実行されうる。イベント・シーケンス「Seqmin」を実行することによって、実行および探査が、より低い充足度を示す距離に比べてより高い充足度を示す距離に従って優先度付けされうる。したがって、イベント・シーケンス「Seqmin」の実行は、そのイベント・シーケンス「Seqmin」の実行がイベント集合「S」の他のイベント・シーケンスより高い度合いで目標条件を満たすことを示すその距離に従って優先されうる。
例として、図5Aおよび表1に関し、イベント・シーケンス「e1」に関連する最も小さな0でない距離は「1」であってもよく、イベント・シーケンス「e2」に関連する最も小さな0でない距離は「3」であってもよい。したがって、この特定の例については、イベント・シーケンス「e1」が「Seqmin」であると考えられてもよく、ブロック414において実行されてもよい。もう一つの例として、図6Aおよび表2に関し、イベント・シーケンス「e3」に関連する最も小さな0でない距離は「1」であってもよく、イベント・シーケンス「e4」に関連する最も小さな0でない距離は「3」であってもよい。したがって、この特定の例については、イベント・シーケンス「e3」が「Seqmin」であると考えられてもよく、ブロック414において実行されてもよい。
ブロック416において、イベント集合「S」の各単数イベント・シーケンス(たとえば、イベントを一つだけもつシーケンス)が、ブロック414で決定されたイベント・シーケンス「Seqmin」にアペンド(append)されて、一つまたは複数のイベント・シーケンス「Seqapi」を生成してもよい。たとえば、図5Aおよび表1に関し、イベント集合「S」は単数イベント・シーケンス「e1」および「e2」を含んでいてもよく、イベント・シーケンス「e1」が「Seqmin」であってもよい。したがって、この特定の例では、イベント・シーケンス「e1」が単数イベント・シーケンス「e1」および「e2」をアペンドされて、イベント・シーケンス「e1→e1」および「e1→e2」を生成してもよい。これらはそれぞれイベント・シーケンス「Seqap1」および「Seqap2」と記されてもよい。もう一つの例として、図6Aおよび表2に関し、イベント集合「S」は単数イベント・シーケンス「e3」および「e4」を含んでいてもよく、イベント・シーケンス「e3」が「Seqmin」であってもよい。したがって、この特定の例では、単数イベント・シーケンス「e3」がイベント・シーケンス「e3」および「e4」をアペンドされて、イベント・シーケンス「e3→e3」および「e3→e4」を生成してもよい。これらはそれぞれイベント・シーケンス「Seqap1」および「Seqap2」と記されてもよい。
ブロック418では、イベント・シーケンス「Seqapi」はイベント集合「S」に追加されてもよい。たとえば、図5Aおよび表1に関し、イベント集合518がイベント集合「S」であると考えられてもよく、イベント・シーケンス「e1」および「e2」を含んでいてもよい。さらに、この特定の例および反復段階におけるイベント・シーケンス「Seqapi」は「e1→e1」および「e1→e2」を含んでいてもよい。したがって、この特定の例および反復段階については、イベント・シーケンス「e1→e1」および「e1→e2」がイベント集合518に加えられてもよく、それによりイベント集合518は、ブロック412後にはイベント・シーケンス「e1」、「e2」、「e1→e1」および「e1→e2」を含みうる。もう一つの例として、図6Aおよび表2に関し、イベント集合618がイベント集合「S」であると考えられてもよく、イベント・シーケンス「e3」および「e4」を含んでいてもよい。さらに、この特定の例および反復段階におけるイベント・シーケンス「Seqapi」は「e3→e3」および「e3→e4」を含んでいてもよい。したがって、この特定の例および反復段階については、イベント・シーケンス「e3→e3」および「e3→e4」がイベント集合618に加えられてもよく、それによりイベント集合618は、ブロック412後にはイベント・シーケンス「e3」、「e4」、「e3→e3」および「e3→e4」を含みうる。
ブロック418後は、方法400はブロック404に戻ってもよい。いくつかの実施形態では、方法400は、イベント集合「S」について、それ以上目標条件が残っていなく方法400が上記のようにブロック420に進めるようになるまで、ブロック404、406、408、410、412、414、416および418のうちの一つまたは複数の動作を繰り返してもよい。
例として、図5Aのイベント・シーケンス「e1」および「e2」ならびに新たなシーケンス「e1→e1」および「e1→e2」について目標条件523bないし523dに対する距離が決定されてもよい。表3は、これらのイベント・シーケンスについて決定されうる距離を示している。イベント・シーケンス「e1→e2」が最も小さい距離(「0」)をもつので、このシーケンスが「Seq
min」であると考えられてもよく、ブロック414で実行されてもよい。
したがって、ブロック404、406、408、410、412、414、416および418のうちの一つまたは複数の動作は、イベント集合「S」の対応する従属イベントに関連付けられた目標条件を満たしうる一つまたは複数のイベント・シーケンスが発見されるまで、繰り返されてもよい。たとえば、図5Aおよび表1の例に関し、イベント集合518について、ブロック404、406、408、410、412、414、416および418のうちの一つまたは複数の動作が、従属イベント「e5」の目標条件523a〜523dを満たしうるイベント・シーケンスが発見されるまで繰り返されてもよい。上記で示したように、目標条件523a〜523dを満たしうるイベント・シーケンスが発見されたとき、方法400はブロック420に進んで、経路「b15」〜「b45」をカバーしうる発見されたイベント・シーケンスを示しうる対応する試験結果を生成してもよい。上記で示したように、特定の経路の対応する経路条件を満たすことによって特定の経路に遭遇し、これを探査することを許容しうるイベント・シーケンスが、その特定の経路を「カバーする」と見なされてもよい。
図5Bは、本稿に記載される少なくとも一つの実施形態に基づく、イベント集合518に関連する例示的な試験結果508を示す。試験結果508はブロック420において生成されてもよく、試験結果208の例でもありうる。いくつかの実施形態では、試験結果508は、発見されたイベント・シーケンス集合550および/または対応するイベント・シーケンス木552を含んでいてもよい。
発見されたイベント・シーケンス集合550は、発見されたイベント・シーケンス554a、554b、554cおよび554dを含んでいてもよい。発見されたイベント・シーケンス554aは、経路「b15」をカバーしうるイベント・シーケンスを示していてもよく、発見されたイベント・シーケンス554bは、経路「b25」をカバーしうるイベント・シーケンスを示していてもよく、発見されたイベント・シーケンス554cは、経路「b35」をカバーしうるイベント・シーケンスを示していてもよく、発見されたイベント・シーケンス554dは、経路「b45」をカバーしうるイベント・シーケンスを示していてもよい。イベント・シーケンス木552は、発見されたイベント・シーケンス554をグラフィックな形で示してもよい。
もう一つの例として、図6Aおよび表2の例に関し、イベント集合618について、ブロック404、406、408、410、412、414、416および418のうちの一つまたは複数の動作が、従属イベント「e6」の目標条件623aおよび623bを満たしうるイベント・シーケンスが発見されるまで繰り返されてもよい。上記で示したように、目標条件623aおよび623bを満たしうるイベント・シーケンスが発見されたとき、方法400はブロック420に進んで、経路「b16」〜「b26」をカバーしうる発見されたイベント・シーケンスを示しうる対応する試験結果を生成してもよい。
図6Bは、本稿に記載される少なくとも一つの実施形態に基づく、イベント集合618に関連する例示的な試験結果608を示す。試験結果608はブロック420において生成されてもよく、試験結果208の例でもありうる。いくつかの実施形態では、試験結果608は、発見されたイベント・シーケンス集合650および/または対応するイベント・シーケンス木652を含んでいてもよい。
発見されたイベント・シーケンス集合650は、発見されたイベント・シーケンス654aおよび654bを含んでいてもよい。発見されたイベント・シーケンス654aは、経路「b16」をカバーしうるイベント・シーケンスを示していてもよく、発見されたイベント・シーケンス654bは、経路「b26」をカバーしうるイベント・シーケンスを示していてもよい。イベント・シーケンス木652は、発見されたイベント・シーケンス554をグラフィックな形で示してもよい。
したがって、方法400は、探査の間のイベント・シーケンスの実行が距離に従って優先度付けされうるよう試験対象コードのイベント空間を探査するために実行されてもよい。これは、他の方法に比べ、発見されたイベント・シーケンスを決定する効率を高めうる。本開示の範囲から外れることなく、方法400に対して修正、追加または省略がなされてもよい。たとえば、いくつかの事例では、方法400は、特定数の反復段階が実行された後に、たとえ対応する目標条件の経路をカバーするイベント・シーケンスがすべての目標条件についてはみつかっていなくても、終了するよう構成されていてもよい。
さらに、本記述における「0」の距離をもつ特定のイベント・シーケンスは、その特定のイベント・シーケンスの実行が対応する目標条件を満たしうることを示す。さらに、上記の記述では、距離に関連付けられる数値が小さいほど、イベント・シーケンスは対応する目標条件を高い度合いで満たす。しかしながら、距離を決定するための種々の方法論が使用されることがあり、それらの方法論では数値または他のメトリックが同じ規則に従わないことがありうる。よって、上記で述べた「0」の距離に関連する動作は、特定の目標条件の充足の度合いを示しうる距離基準が何であれそれを受け入れるように修正されうる。追加的または代替的に、最も小さな距離に関連する動作は、あるイベント・シーケンスが他のイベント・シーケンスより高い度合いである特定の目標条件を満たしうることを示しうる距離基準が何であれそれを受け入れるよう修正されうる。
図2に戻ると、上述したように、「ローカル計算」および関連する動作がフロー200のブロック230において実行されてもよい。下記で示すように、ローカル計算ではイベント集合に対する追加がされなくてもよいという点で、ローカル計算はグローバル計算とは異なっていてもよい。そのような実装は、ローカル計算がグローバル計算より高速に実行されることを許容しうる。
図7は、本稿に記載される少なくとも一つの実施形態に基づく、ローカル計算を実行する例示的な方法700のフローチャートである。いくつかの実施形態では、方法700に関連する動作の一つまたは複数は、フロー200のブロック230において実行されてもよい。方法700は、いかなる好適なシステム、装置またはデバイスによって実行されてもよい。たとえば、図1Bの電子デバイス102の試験モジュール106が方法700に関連する動作の一つまたは複数を実行してもよい。離散的なブロックで図示されているが、方法700のブロックの一つまたは複数に関連するステップおよび動作は、実装に依存して、追加的なブロックに分割されても、より少数のブロックに組み合わされても、あるいはなくされてもよい。
方法700は、ブロック702において始まってもよい。ここでは、ローカル計算はイベント・シーケンス「Seq」をもって初期化されてもよく、それによりローカル計算はイベント・シーケンス「Seq」を出発点として使用しうる。いくつかの実施形態では、イベント・シーケンス「Seq」は、イベント集合「S」から選択されてもよい。たとえば、図5Aおよび図5Bに関して挙げた例に関し、イベント・シーケンス「e1」またはイベント・シーケンス「e2」がイベント集合518から「Seq」として選択されてもよい。
いくつかの実施形態では、図4の方法400のブロック402、404、406、408、410、412および414に関連する一つまたは複数の動作は、イベント・シーケンス「Seq」を選択するようブロック702に関して実行されてもよい。方法400のこれらのブロックに関連する動作を実行することによって、イベント集合「S」の一つまたは複数のイベント・シーケンスが、目標条件に関連付けられた一つまたは複数の経路をカバーしうる発見されたイベント・シーケンスであると決定されてもよい。したがって、方法700に関してさらなる動作を実行する前に、一つまたは複数の目標条件が除去されてもよく、そうすれば方法700の効率が改善されうる。
ブロック704では、イベント・シーケンス「Seq」について、イベント集合「S」に関連付けられていてもよい対応する従属イベントの一つまたは複数の目標条件に対する一つまたは複数の距離が決定されてもよい。たとえば、図5Aおよび図5Bに関して与えられる例に関し、イベント・シーケンス「e1」が「Seq」として選択されるとき、距離は、目標条件523a〜523dに対してイベント・シーケンス「e1」について決定されてもよい。逆に、イベント・シーケンス「e2」が「Seq」として選択されるとき、距離は、目標条件523a〜523dに対してイベント・シーケンス「e2」について決定されてもよい。上記で示したように、上掲の表1の第一行は、イベント・シーケンス「e1」について目標条件523a〜523dに対して決定されうる距離を示していてもよい。さらに、上掲の表1の第二行は、イベント・シーケンス「e2」について目標条件523a〜523dに対して決定されうる距離を示していてもよい。
ブロック706では、目標条件に対するイベント・シーケンス「Seq」の距離のいずれかが「0」に等しいかどうかが判定されてもよい。距離の一つまたは複数が「0」に等しいとき、方法700はブロック708に進んでもよい。そうでなければ、方法700はブロック714に進んでもよい。
ブロック708では、イベント・シーケンス「Seq」は対応する従属イベントをアペンドされてもよく、結果として得られるイベント・シーケンスが実行されてもよい。図4の方法400のブロック408に関して上記したのと同様に、結果として得られるイベント・シーケンスは、「0」の距離に関連付けられた目標条件に対応しうる経路をカバーしうる発見されたイベント・シーケンスであると考えられてもよい。ブロック710では、探査された経路条件が目標条件から除去されてもよい。上記で示したように、探査された経路条件は、イベント・シーケンス「Seq」に関して「0」の距離に関連付けられていてもよい任意の目標条件を含みうる。
ブロック711では、対応する従属イベントに関連付けられた何らかの目標条件が残っているかどうかが判定されてもよい。目標条件が残っているとき、方法700はブロック712に進んでもよい。それ以上目標条件が残っていないときは、方法700はブロック730に進んでもよい。
上記のように、いくつかの実施形態では、それ以上目標条件が残っていないことは、対応する従属イベントの目標条件すべてを満たすイベント・シーケンスが発見されたかもしれないことを示しうる。したがって、いくつかの実施形態では、試験結果(たとえば試験結果208)がブロック730において生成されてもよい。いくつかの実施形態では、目標条件を満たしうる発見されたイベント・シーケンスは、試験結果に含まれてもよい。追加的または代替的に、いくつかの実施形態では、試験結果は、発見されたイベント・シーケンスによる目標条件の充足をも示しうる一つまたは複数のイベント・シーケンス木を含んでいてもよい。
ブロック712では、選択されたイベント・シーケンス「Seqsel」がイベント・シーケンス「Seq」に等しいものとして設定されてもよい。ブロック713では、選択されたイベント・シーケンス「Seqsel」が実行されてもよい。ブロック714では、一つまたは複数のイベント・シーケンス「Seqapi」が生成されてもよい。いくつかの実施形態では、ソフトウェア・プログラムの現在状態において実行のために利用可能でありうる各イベントが選択されてもよく、選択されたイベント・シーケンス「Seqsel」にアペンド(append)されてイベント・シーケンス「Seqapi」を生成してもよい。たとえば、図4の方法400のブロック416に関して上記で示したように、図5Aおよび図5Bの例に関し、イベント・シーケンス「e1」が「Seqsel」でありうるとき、イベント・シーケンス「e1」および「e2」が実行のために利用可能であってもよい。したがって、この特定の例では、イベント・シーケンス「e1」はイベント・シーケンス「e1」および「e2」をアペンドされてイベント・シーケンス「e1→e1」および「e1→e2」を生成してもよい。これらはそれぞれイベント・シーケンス「Seqap1」および「Seqap2」と記されてもよい。
ブロック716では、イベント・シーケンス「Seq
api」の距離が、目標条件に対して決定されてもよい。たとえば、図5Aおよび図5Bの例に関し、イベント・シーケンス「e1→e1」がイベント・シーケンス「Seq
ap1」として指定され、目標条件が目標条件523a〜523dを含むとき、距離はイベント・シーケンス「e1→e1」について、目標条件523a〜523dに対して決定されてもよい。さらに、この例において、イベント・シーケンス「e1→e2」がイベント・シーケンス「Seq
ap2」として指定され、目標条件が目標条件523a〜523dを含むとき、距離はイベント・シーケンス「e1→e2」について、目標条件523a〜523dに対して決定されてもよい。表4は、イベント・シーケンス「e1→e1」および「e1→e2」について決定されうる距離を示している。さらに、表4では、行はイベント・シーケンスに関連付けられていてもよく、列は対応する目標条件に関連付けられていてもよい。セル内の数字は、対応する行のイベントの、対応する列の目標条件に対する距離を示しうる。
ブロック718では、目標条件に対するイベント・シーケンス「Seqapi」の距離のいずれかが「0」に等しいかどうかが判定されてもよい。距離の一つまたは複数が「0」に等しいとき、方法700はブロック720に進んでもよい。そうでなければ、方法700はブロック726に進んでもよい。たとえば、図5Aおよび図5Bおよび表3の例に関しては、方法700はブロック720に進みうる。イベント・シーケンス「e1→e2」が目標条件523bに対して「0」の距離をもちうるからである。
ブロック720では、「0」の距離をもつイベント・シーケンス「Seqapi」の一つまたは複数が対応する従属イベントをアペンドされてもよく、結果として得られるイベント・シーケンスが実行されてもよい。上記で示したように、いくつかの実施形態では、結果として得られるイベント・シーケンスは、発見されたイベント・シーケンスと見なされてもよい。
たとえば、図5Aおよび図5Bおよび表3の例に関し、イベント・シーケンス「e1→e2」が「0」の距離を有していてもよく、よって従属イベント「e5」をアペンドされてもよい。結果として得られるイベント・シーケンス「e1→e2→e5」が実行されてもよく、それが経路「b25」の探査を許容してもよい。いくつかの実施形態では、イベント・シーケンス「e1→e2→e5」はこうして、イベント集合518に関して発見されたイベント・シーケンスと見なされてもよく、イベント集合518に関連付けられた試験結果に含められてもよい。さらに、イベント・シーケンス「e1→e2→e5」は経路「b25」をカバーするものと見なされてもよい。
ブロック722では、探査された経路条件が目標条件から除去されてもよい。ブロック724では、対応する従属イベントに関連付けられた何らかの目標条件が残っているかどうかが判定されてもよい。目標条件が残っているとき、方法700はブロック726に進んでもよい。それ以上目標条件が残っていないときは、方法700はブロック730に進んでもよい。
ブロック726では、諸イベント・シーケンス「Seqapi」のうちの、最も小さな0でない距離に関連付けられたイベント・シーケンス「Seqmin」が実行されてもよい。いくつかの事例では、二つ以上のイベント・シーケンスが同じ最も小さい0でない距離に関連付けられていてもよい。これらまたは他の実施形態において、それらのイベント・シーケンスのいずれかが実行されうる。
たとえば、図5Aおよび図5Bおよび表3の例に関しては、イベント・シーケンス「e1→e1」ではなくイベント・シーケンス「e1→e2」が実行されてもよい。イベント・シーケンス「e1→e2」に関連付けられた最小距離がイベント・シーケンス「e1→e1」に関連付けられた最小距離より小さいからである。よって、この特定の例および反復段階については、イベント・シーケンス「e1→e2」がイベント・シーケンス「Seqmin」であると考えられてもよい。
ブロック728では、選択されたイベント・シーケンス「Seqsel」が「Seqmin」に等しいものとして設定されてもよい。ブロック728後には、方法700はブロック714に戻ってもよい。いくつかの実施形態では、距離があらかじめ定義された限界より大きい場合には、イベント・シーケンス「Seqsel」は破棄されてもよい。これらの事例では、限界内の距離をもつ以前のシーケンスがブロック728において、選択されたイベント・シーケンス「Seqsel」として選択されてもよい。
いくつかの実施形態では、イベントは、そうすることがより大きな距離につながるときは、選択されたイベント・シーケンス「Seqsel」にアペンドされなくてもよい。たとえば、いくつかの実施形態では、ローカル計算は、特定のイベントの効果を解析してそれがいくつかの点後に無用でありうることを予測することによってアルファ・ベータ枝刈り(alpha-beta pruning)技法を適用することを含んでいてもよい。特に、イベントをアペンドすることが距離を単調に増加させる場合には、アペンドは全く適用されなくてもよい。例として、特定のイベントが変数「i」の値を4だけ増大させ、特定の目標条件がi<4であるとする。この特定の例では、i≧0であるいかなるイベント・シーケンスもその特定のイベントにアペンドされることは許されない。アペンドすることにより、その特定のイベントのその特定の目標条件に対する距離が増大するからである。このように、この技法は、ローカル計算において多数の無用なイベント・シーケンスを実行することを回避しうる。
いくつかの実施形態では、方法700は、それ以上目標条件が残っていなく方法700が上記のようにブロック730に進めるようになるまで、ブロック714、716、718、720、722、724、726および728のうちの一つまたは複数の動作を繰り返してもよい。したがって、いくつかの実施形態では、ブロック714、716、718、720、722、724、726および728のうちの一つまたは複数の動作は、対応する従属イベントに関連付けられた目標条件を満たしうる一つまたは複数のイベント・シーケンスが発見されるまで、繰り返されてもよい。さらに、いくつかの実施形態では、方法700は、イベント集合「S」に含まれうる各イベント・シーケンスに関して逐次反復的に実行されてもよい。
したがって、方法700は、探索の間のイベント・シーケンスの実行が、距離に従って優先度付けされうるよう、試験対象コードのイベント空間を探索するために実行されてもよい。これは、他の方法に比べ、発見されたイベント・シーケンスを決定する効率を高めうる。本開示の範囲から外れることなく、方法700に対して修正、追加または省略がなされてもよい。たとえば、いくつかの事例では、方法700は、特定数の反復段階が実行された後に、たとえ対応する目標条件の経路をカバーするイベント・シーケンスがすべての目標条件についてはみつかっていなくても、終了するよう構成されていてもよい。
図2のフロー200に戻ると、方法700に関して述べたローカル計算は、方法400に関して述べたグローバル計算より効率的でありうる。ローカル計算は、イベント集合「S」に対してより少数の新しいシーケンスを加えうるからである。具体的には、ローカル計算は、「Seqapi」の集合から次の「Seq」を拾う。一方、グローバル計算は構築されたイベント・シーケンスの集合全体から拾う。しかしながら、いくつかの事例では、ローカル計算は、特定の目標条件を満たすイベント・シーケンスを発見できないことがある。対照的に、グローバル計算は、各目標条件についてイベント・シーケンスを発見しうるが、イベント集合「S」に対する絶えざる変化および更新のため、効率は低くなりうる。
たとえば、ローカル計算は、ブロック726において最も小さな距離をもつ諸イベント・シーケンスを選択して、特定の目標条件を満たす特定のイベント・シーケンスを決定するためにアペンドされうるイベント・シーケンスを決定してもよい。しかしながら、いくつかの事例では、最も小さな距離をもつイベント・シーケンスを選択してアペンドすることは、特定の目標条件を満たす特定のイベント・シーケンスを与えないことがある。対照的に、グローバル計算は、イベント集合「S」に対して追加し、イベント集合「S」から選択することを続けるので、同じ問題をもたないことがある。よって、いくつかの事例では、グローバル計算はローカル計算より完全であることがあるが、ローカル計算より効率は低いこともありうる。
いくつかの実施形態では、変異ベースの組み合わせ計算(Mutation-based Combinational Computation)が、ローカル計算と同様の動作に関して実行されてもよく、変異ベースの組み合わせ計算はローカル計算の修正のはたらきをしうる。たとえば、図7の方法700のブロック726において最も小さな距離(たとえば「Seqmin」)をもつイベント・シーケンス「Seqapi」を実行する代わりに、実行のために別のイベント・シーケンス「Seqapi」を選択するために変異ベースの組み合わせ計算が実行されてもよい。したがって、変異ベースの組み合わせ計算は、常に最も小さな距離をもつイベント・シーケンスを選択して実行するわけではないことがあり、よって、変異ベースの組み合わせ計算は、ローカル計算が発見しないことがありうる経路条件を満たすイベント・シーケンスを発見しうる。しかしながら、変異ベースの組み合わせ計算は、グローバル計算ほど高価ではないことがある。
よって、いくつかの事例では、変異ベースの組み合わせ計算は、ローカル計算よりは完全だが、グローバル計算ほど完全ではないことがある。さらに、変異ベースの組み合わせ計算は、グローバル計算よりは効率的だがローカル計算ほど効率的ではないことがある。
図8Aは、本稿に記載される少なくとも一つの実施形態に基づく、変異ベースの組み合わせ計算を含む、図7のローカル計算の修正の例示的な方法800のフローチャートである。いくつかの実施形態では、方法800に関連する動作の一つまたは複数は、フロー200のブロック232において実行されてもよい。方法800は、いかなる好適なシステム、装置またはデバイスによって実行されてもよい。たとえば、図1Bの電子デバイス102の試験モジュール106が方法800に関連する動作の一つまたは複数を実行してもよい。離散的なブロックで図示されているが、方法800のブロックの一つまたは複数に関連するステップおよび動作は、実装に依存して、追加的なブロックに分割されても、より少数のブロックに組み合わされても、あるいはなくされてもよい。
方法800は、ブロック802、804、806、808、810、811、812、813、814、816、818、820、822、824および830を含んでいてもよい。これらはそれぞれ図7の方法700のブロック702、704、706、708、710、711、712、713、714、716、718、720、722、724および730と類似の動作を含んでいてもよい。方法800は、変異ベースの組み合わせ計算に関連する動作を含みうるブロック832をも含んでいてもよい。図示した例では、ブロック832は、方法700におけるブロック726および728の代わりに方法800に含められていてもよい。
ブロック832では、イベント・シーケンス集合作業リスト「W」から、イベント・シーケンスが、ブロック813、814、816、818、820、822、824および830の動作に関して使用されうるイベント・シーケンス「Seqsel」として選択されてもよい。イベント・シーケンス「Seqsel」として選択されうるイベント・シーケンスは、変異ベースの組み合わせ計算の変異確率に基づいて選択されてもよい。これは、イベント・シーケンス「Seqsel」として、必ずしも最も小さな距離をもつ作業リスト「W」のイベント・シーケンスを選択しないことがある。
いくつかの実施形態では、変異ベースの組み合わせ計算は、作業リスト「W」のイベント・シーケンス「Seqapi」を「Seqsel」であるべく選択するか否かを、確率論的な決定に基づいて決定してもよい。確率論的な決定は、シミュレーテッド・アニーリング(SA)計算、遺伝的アルゴリズム、タブー探索、粒子群最適化などといった、いかなる適用可能な変異ベースの組み合わせ計算に基づいていてもよい。どのイベント・シーケンス「Seqapi」がイベント・シーケンス「Seqsel」たりうるかを最小距離ではなく確率論的決定に基づいて選択することによって、変異ベースの組み合わせ計算は、場合によってはローカル計算が発見しないことがありうる経路条件を満たすイベント・シーケンスを発見しうる。
いくつかの実施形態では、方法800は、それ以上目標条件が残っていなく方法800がブロック830に進めるようになるまで、ブロック813、814、816、818、820、822、824および832のうちの一つまたは複数の動作を繰り返してもよい。したがって、いくつかの実施形態では、ブロック813、814、816、818、820、822、824および832のうちの一つまたは複数の動作は、対応する従属イベントに関連付けられた目標条件を満たしうる一つまたは複数のイベント・シーケンスが発見されるまで繰り返されてもよい。
図8Bは、本稿に記載される少なくとも一つの実施形態に基づく、図8Aのブロック832の変異ベースの組み合わせ計算のために使用されうる例示的なSA計算833を含むフローチャートである。離散的なブロックで図示されているが、図8Bのブロックの一つまたは複数に関連するステップおよび動作は、実装に依存して、追加的なブロックに分割されても、より少数のブロックに組み合わされても、あるいはなくされてもよい。
SA計算833は、変異因子「Mut」の初期値が設定されうるブロック850で始まってもよい。変異因子「Mut」は、図8Aのブロック813、814、816、818、820、822および824に関して、最小距離に関連付けられていないイベント・シーケンスがイベント・シーケンス「Seqsel」として選択される可能性に影響する因子であってもよい。たとえば、のちに詳述するように、今の例では、変異因子「Mut」が大きいほど、最小距離に関連付けられていないイベント・シーケンスがイベント・シーケンス「Seqsel」として選択される可能性が高くなる。したがって、変異因子「Mut」の初期値は、目標変異レートに従って設定されてもよい。目標変異レートは、最小距離に関連付けられていないイベント・シーケンスがイベント・シーケンス「Seqsel」として選択されるレートであってもよい。
ブロック852では、作業リスト「W」が生成されてもよい。いくつかの実施形態では、作業リスト「W」は、図8Aの方法800のブロック814で生成されうるイベント・シーケンス「Seqapi」を含むよう生成されてもよい。上述したように、場合によっては、方法800のブロック813、814、816、818、820、822、824および832の一つまたは複数の動作は二度以上実行されてもよい。いくつかの実施形態では、その後ブロック832に遭遇するとき、現在の諸イベント・シーケンス「Seqapi」は前の諸イベント・シーケンス「Seqapi」とは異なることがある。これらの事例のいくつかでは、作業リスト「W」は、現在の諸イベント・シーケンス「Seqapi」は含むが、前の諸イベント・シーケンス「Seqapi」は含まないよう生成されてもよい。
ブロック854では、変異因子「Mut」が変異因子「Mut」最の終的な目標値「Final-Mut」〔最終Mut〕より大きいかどうかが判定されてもよい。後述するように、今の例示的な実施形態では、変異因子「Mut」は、SA計算833の間にその初期値から調整されてもよく、そのためSA計算833のその後の反復工程の間には異なることがありうる。変異因子「Mut」が最終的な目標値「Final-Mut」を超えて動いたら、SA計算833に関してある目標量の反復工程が実行されたことがありえ、SA計算833は終了してもよく、方法800のブロック830の動作が実行されてもよい。図示した例では、変異因子「Mut」が最終目標値「Final-Mut」より大きいかどうかが判定されてもよい。この特定の例では、変異因子「Mut」はSA計算833の各反復工程とともに減少しうるからである。しかしながら、いくつかの実施形態では、実装およびSA計算833の構成設定に依存して、変異因子「Mut」が最終的な目標値「Final-Mut」より小さいかどうかが判定されてもよい。
ブロック856では、イベント・シーケンス「Seqsel」が作業リスト「W」から選択されてもよい。いくつかの実施形態では、イベント・シーケンス「Seqapi」は、作業リスト「W」内でのその位置に基づいて選択されてもよい。たとえば、イベント・シーケンス「Seqapi」は作業リスト「W」における最初のイベント・シーケンスであってもよい。追加的または代替的に、作業リスト「W」におけるイベント・シーケンス「Seqapi」の順序はランダムであってもなくてもよい。
ブロック858では、距離差「ΔD」が決定されてもよい。いくつかの実施形態では、距離差「ΔD」は、イベント・シーケンス「Seqapi」に関連付けられた距離と、前に作業リスト「W」から選択されていたことがありうるイベント・シーケンス「Seqsel」に関連付けられた距離との間の差であってもよい。
たとえば、いくつかの場合には、現在の選択されたシーケンスは「Seqsel」であってもよく、「Seqapi」は作業リスト「W」における最初のシーケンスであってもよい。そのような事例では、距離差「ΔD」は、第二のイベント・シーケンス「Seqapi」に関連付けられた距離から最初のイベント・シーケンス「Seqsel」に関連付けられた距離を引いたものとして決定されてもよい。
しかしながら、いくつかの事例では、イベント・シーケンス「Seqapi」は、作業リスト「W」から選択される最初のシーケンスであることがあり、前に選択されたイベント・シーケンス「Seqapi」および関連付けられた距離は適用可能または利用可能ではないことがある。したがって、いくつかの実施形態では、イベント・シーケンス「Seqapi」が作業リスト「W」から選択された最初のシーケンスであるとき、距離差「ΔD」は、イベント・シーケンス「Seqapi」に関連付けられた距離と見なされてもよい。
ブロック860では、距離差「ΔD」が「0」より小さいかどうかが決定されてもよい。距離差「ΔD」が「0」より小さいとき、そのことは、第二のイベント・シーケンス「Seqapi」が距離の点で現在選択されているシーケンス「Seqsel」よりよいことを示し、SA計算833はブロック868に進んでもよい。距離差「ΔD」が「0」より小さくないときは、SA計算833はブロック862に進んでもよい。
ブロック868では、変異因子「Mut」が調整されてもよい。図示した例では、SA計算833のその後の反復工程について変異レートが減少しうるように、変異因子「Mut」が減少するよう調整されてもよい。他の実施形態では、変異因子「Mut」は、SA計算833のその後の反復工程について変異レートが増大しうるように、変異因子「Mut」が各反復工程に関して増大してもよい。ブロック870では、イベント・シーケンス「Seqapi」は、イベント・シーケンス「Seqsel」であるよう選択されてもよい。このときSA計算833が終了でき、方法800のブロック813の動作が実行されてもよい。その後、計算はブロック854に戻る。
ブロック862では、イベント・シーケンス「Seqapi」がイベント・シーケンス「Seqsel」であるよう選択されるか否かを決定するために、確率論的決定がなされてもよい。図示した例では、「0」と「1」の間のランダムな数「y」が選択されてもよく(たとえば「y=RANDOM(0,1)」)、式「x=exp(−ΔD/Mut)」から決定される数「x」に対して比較されてもよい。「x」が「y」より大きいとき、イベント・シーケンス「Seqapi」はイベント・シーケンス「Seqsel」であるべく選択されてもよく、それによりSA計算833は上記のブロック868および870に進んでもよい。「x」が「y」より小さいときは、イベント・シーケンス「Seqapi」はイベント・シーケンス「Seqsel」であるべく選択されなくてもよく、SA計算833はブロック864に進んでもよい。
例として、現在の選択されているイベント・シーケンス「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」の間の比較は、変異因子が増大するにつれて変異レートが減少しうるものであり、かつ変異レートが減少するにつれて変異レートが増大しうるものでありうる。
ブロック864では、作業リスト「W」のイベント・シーケンス「Seqapi」が作業リスト「W」から除去されてもよい。現在の選択されているイベント・シーケンスは相変わらず「Seqsel」である。ブロック866では、変異因子「Mut」は、ブロック868に関して実行されうる変異因子「Mut」への調整と同様の仕方で調整されてもよい。ブロック866後は、SA計算はブロック854に戻ってもよい。いくつかの実施形態では、ブロック854、856、858、860、862、864および866に関連する一つまたは複数の動作は、すべての目標がカバーされるまでまたはあらかじめ定義された限界に達するまで繰り返されてもよい。
したがって、方法800は、探索中のイベント・シーケンスの実行が距離およびSA計算833のような確率計算に従って優先度付けされうるように、試験対象コードのイベント空間を探索するために実行されてもよい。本開示の範囲から外れることなく、図8Aおよび図8Bの方法800および/またはSA計算833に対して修正、追加または省略がなされてもよい。たとえば、いくつかの実施形態では、変異因子「Mut」は調整されなくてもよく、ブロック854、866および868の一つまたは複数が省略されてもよい。さらに、ブロックの実行の順序は、異なる実装によって変わりうる。さらに、上記のように、図8BのSA計算833およびその関連付けされたブロックおよび動作は単に、図8Aのブロック832において実行されうる変異ベースの組み合わせ計算の例示的な実装である。
当業者は、フロー200、方法400、方法700、方法800およびSA計算833ならびに本稿に開示される他のプロセスおよび方法について、それらのプロセスおよび方法において実行される機能が異なる順序で実装されてもよいことを理解するであろう。さらに、概説されたステップおよびアクションは単に例として与えられているのであり、開示される実施形態の本質を損なうことなく、それらのステップおよびアクションのいくつかが任意的であったり、より少数のステップおよびアクションに組み合わされたり、あるいは追加的なステップおよびアクションに展開されたりしてもよい。
上記のように、本稿に記載される実施形態は、のちにより詳細に論じるさまざまなコンピュータ・ハードウェアまたはソフトウェア・モジュールを含む特殊目的または汎用のコンピュータ(たとえば図1Bのプロセッサ110)の使用を含んでいてもよい。さらに、上記のように、本稿に記載される実施形態は、コンピュータ実行可能な命令またはデータ構造を担持するまたは記憶しているコンピュータ可読媒体(たとえば図1Bのメモリ112)を使って実装されてもよい。
本稿での用法では、用語「モジュール」または「コンポーネント」は、コンピューティング・システムの汎用ハードウェア(たとえばコンピュータ可読媒体、処理装置など)に記憶されるおよび/または実行されることのできるモジュールまたはコンポーネントおよび/またはソフトウェア・オブジェクトまたはソフトウェア・ルーチンのアクションを実行するよう構成された特定のハードウェア実装を指しうる。いくつかの実施形態では、本稿に記載される種々のコンポーネント、モジュール、エンジンおよびサービスは、コンピューティング・システム上で実行されるオブジェクトまたはプロセスとして(たとえば別個のスレッドとして)実装されてもよい。本稿に記載されるシステムおよび方法のいくつかは一般に、(汎用ハードウェアに記憶されるおよび/または実行される)ソフトウェアにおいて実装されるものとして記述されるものの、個別的なハードウェア実装またはソフトウェアと個別的なハードウェア実装の組み合わせも可能であり、考えられている。本稿において、「コンピューティング・エンティティ」は、本稿で先に定義された任意のコンピューティング・システムまたはコンピューティング・システム上で走る任意のモジュールもしくはモジュール類の組み合わせでありうる。
本稿、特に付属の請求項(たとえば付属の請求項の本文)で使われる用語は一般に「オープン」な用語として意図されている(たとえば、用語「含む」は「含むがそれに限られない」と解釈されるべきであり、用語「もつ」は「少なくとも…をもつ」と解釈されるべきであり、用語「含む」は「含むがそれに限られない」と解釈されるべきであるなど)。
さらに、導入される請求項の記載の特定の数が意図される場合、そのような意図は請求項において明示的に記載される。そのような記載のない場合には、そのような意図はない。たとえば、理解の助けとして、以下の付属の請求項は、請求項の記載を導入するために「少なくとも一つの」および「一つまたは複数の」という導入句の使用を含むことがありうる。しかしながら、たとえ同じ請求項が導入句「一つまたは複数の」または「少なくとも一つの」および「a」または「an」のような不定冠詞を含むときでも、そのような句の使用は、不定冠詞「a」または「an」による請求項の記載の導入が、そのように導入された請求項の記載を含む何らかの特定の請求項を、そのような記載を一つだけ含む実施形態に限定することを含意していると解釈されるべきではない(たとえば、「a」および/または「an」は、「少なくとも一つの」または「一つまたは複数の」を意味するものと解釈されるべきである)。同じことは、請求項の記載を導入する定冠詞の使用についても成り立つ。
さらに、たとえ導入される請求項の記載の特定の数が明示的に記載されていたとしても、当業者は、そのような記載が、少なくともその記載された数を意味すると解釈されるべきであることを認識するであろう(たとえば、他の修飾語なしで単に「二つの記載」という記載は、少なくとも二つの記載または二つ以上の記載を意味する)。さらに、「A、BおよびCなどのうちの少なくとも一つ」または「A、BおよびCなどの一つまたは複数」に類似する慣用句が使われる事例においては、一般に、そのような構文はAだけ、Bだけ、Cだけ、AおよびB両方、AおよびC両方、BおよびC両方またはA、BおよびC全部などを含むことが意図される。
さらに、明細書であれ請求項であれ図面であれ、二つ以上の代替的な用語を呈示するあらゆる離接的な語句は、該用語の一つを含む、該用語のいずれかを含むまたは該用語の両方を含む可能性を考えているものと理解されるべきである。たとえば、「AまたはB」という句は、「A」または「B」または「AおよびB」の可能性を含むと理解されるべきである。
本稿に記載されるすべての例および条件付きの言辞は、本発明および発明者によって当技術分野の発展のために寄与される概念の理解において読者を助ける教育目的を意図されており、そのような特定的に挙げられる例および条件に限定することなく解釈されるものとする。本開示の実施形態について詳細に述べてきたが、本開示の精神および範囲から外れることなく、これにさまざまな変化、代替および変更をなすことができることは理解しておくべきである。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
イベント駆動ソフトウェア・アプリケーションの、第一の変数集合を含む第一のイベント・シーケンスを決定する段階と;
イベント駆動ソフトウェア・アプリケーションの、第二の変数集合を含む第二のイベント・シーケンスを決定する段階と;
前記第一のイベント・シーケンスおよび前記第二のイベント・シーケンスの従属イベントを識別する段階であって、前記従属イベントは、前記第一の変数集合および前記第二の変数集合内の一つまたは複数の変数を含む目標条件を含む、段階と;
前記第一のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第一のイベント・シーケンスについての第一の距離を決定する段階と;
前記第二のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第二のイベント・シーケンスについての第二の距離を決定する段階と;
前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスの実行を前記第二のイベント・シーケンスより上に優先度付けする段階と;
前記優先度付けに従って、前記第一のイベント・シーケンス、前記第二のイベント・シーケンスおよび前記従属イベントのうちの一つまたは複数を含むイベント空間を探査する段階とを含む、
方法。
(付記2)
前記第一の変数集合および前記第二の変数集合が変数の同じ集合に対応する、付記1記載の方法。
(付記3)
前記第一の変数集合および前記第二の変数集合が異なる変数に対応する、付記1記載の方法。
(付記4)
前記第一の距離が前記第一のイベント・シーケンスの実行が前記目標条件を満たすことを示す場合に、前記第一のイベント・シーケンスを実行し、続いて前記従属イベントを実行することをさらに含む、付記1記載の方法。
(付記5)
前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスを前記第二のイベント・シーケンスより優先して実行することをさらに含む、付記1記載の方法。
(付記6)
前記第一のイベント・シーケンスおよび前記第二のイベント・シーケンスを含むイベント・シーケンスの第一の集合を決定する段階と;
前記第一の距離に基づいて、前記第一のイベント・シーケンスをイベント・シーケンスの前記第一の集合の各イベント・シーケンスにアペンドしてイベント・シーケンスの第二の集合を生成する段階と;
イベント・シーケンスの前記第二の集合をイベント・シーケンスの前記第一の集合に加えてイベント・シーケンスの第三の集合を生成する段階と;
イベント・シーケンスの前記第三の集合の各イベント・シーケンスについて、前記目標条件に対するイベント・シーケンス距離を決定する段階と;
イベント・シーケンスの前記第三の集合のイベント・シーケンスの実行に、前記イベント・シーケンス距離に基づいて優先度付けする段階と;
実行の前記優先度付けに従って、イベント・シーケンスの前記第三の集合および前記従属イベントを含むイベント空間を探査する段階とをさらに含む、
付記1記載の方法。
(付記7)
前記目標条件が数値制約条件を含み、当該方法がさらに:
前記目標条件についての一つまたは複数の区間を決定する段階と;
前記一つまたは複数の区間に基づいて前記第一の距離および前記第二の距離を決定する段階とをさらに含む、
付記1記載の方法。
(付記8)
前記目標条件がストリング制約条件を含み、当該方法がさらに:
前記目標条件についての一つまたは複数のキャラクタ・オートマタを決定する段階と;
前記一つまたは複数のキャラクタ・オートマタに基づいて前記第一の距離および前記第二の距離を決定する段階とをさらに含む、
付記1記載の方法。
(付記9)
イベント駆動ソフトウェア・アプリケーションの複数のイベント・シーケンスを決定する段階と;
前記複数のイベント・シーケンスの各イベント・シーケンスについて、前記イベント駆動ソフトウェア・アプリケーションの一つまたは複数の目標条件のそれぞれに対する距離を決定する段階であって、イベント・シーケンス距離は、その対応するイベント・シーケンスの実行が対応する目標条件を満たす度合いを示す、段階と;
前記複数のイベント・シーケンスの実行に、前記イベント・シーケンス距離に基づいて優先度付けする段階と;
前記複数のイベント・シーケンスの一つまたは複数と、前記一つまたは複数の目標条件に対応する従属イベントとを含むイベント空間を、実行の前記優先度付けに従って探査する段階とを含む、
方法。
(付記10)
前記一つまたは複数の目標条件がそれぞれ数値制約条件を含み、当該方法がさらに:
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数の区間を決定する段階と;
前記一つまたは複数の区間に基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
付記9記載の方法。
(付記11)
前記一つまたは複数の目標条件がそれぞれストリング制約条件を含み、当該方法がさらに:
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数のキャラクタ・オートマタを決定する段階と;
前記一つまたは複数のキャラクタ・オートマタに基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
付記9記載の方法。
(付記12)
組み合わせ計算に基づいて前記複数のイベント・シーケンスの実行の優先度付けを調整する段階をさらに含む、付記9記載の方法。
(付記13)
前記組み合わせ計算は、ローカルな検索ベースの組み合わせ計算、グローバルな検索ベースの組み合わせ計算、変異ベースの組み合わせ計算またはそれらの任意の組み合わせを含む、付記12記載の方法。
(付記14)
前記変異ベースの組み合わせ計算は、シミュレーテッド・アニーリング(SA)計算、遺伝的計算、タブー探索、粒子群最適化計算またはそれらの任意の組み合わせを含む、付記13記載の方法。
(付記15)
コンピュータ実行可能な命令を含むコンピュータ可読記憶媒体であって、前記命令はシステムに:
イベント駆動ソフトウェア・アプリケーションの複数のイベント・シーケンスを決定する段階と;
前記複数のイベント・シーケンスの各イベント・シーケンスについて、前記イベント駆動ソフトウェア・アプリケーションの一つまたは複数の目標条件のそれぞれに対する距離を決定する段階であって、イベント・シーケンス距離は、その対応するイベント・シーケンスの実行が対応する目標条件を満たす度合いを示す、段階と;
前記複数のイベント・シーケンスの実行に、前記イベント・シーケンス距離に基づいて優先度付けする段階と;
前記複数のイベント・シーケンスの一つまたは複数と、前記一つまたは複数の目標条件に対応する従属イベントとを含むイベント空間を、実行の前記優先度付けに従って探査する段階とを含む動作を実行させるよう構成されている、
コンピュータ可読記憶媒体。
(付記16)
前記一つまたは複数の目標条件がそれぞれ数値制約条件を含み、前記動作がさらに:
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数の区間を決定する段階と;
前記一つまたは複数の区間に基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
付記15記載のコンピュータ可読記憶媒体。
(付記17)
前記一つまたは複数の目標条件がそれぞれストリング制約条件を含み、前記動作がさらに:
前記一つまたは複数の目標条件のそれぞれについての一つまたは複数のキャラクタ・オートマタを決定する段階と;
前記一つまたは複数のキャラクタ・オートマタに基づいて前記イベント・シーケンス距離を決定する段階とをさらに含む、
付記15記載のコンピュータ可読記憶媒体。
(付記18)
前記動作が、組み合わせ計算に基づいて前記複数のイベント・シーケンスの実行の優先度付けを調整する段階をさらに含む、付記15記載のコンピュータ可読記憶媒体。
(付記19)
コンピュータ実行可能な命令を含むコンピュータ可読記憶媒体であって、前記命令はシステムに:
イベント駆動ソフトウェア・アプリケーションの、第一の変数を含む第一のイベント・シーケンスを決定する段階と;
イベント駆動ソフトウェア・アプリケーションの、第二の変数を含む第二のイベント・シーケンスを決定する段階と;
前記第一のイベント・シーケンスおよび前記第二のイベント・シーケンスの従属イベントを識別する段階であって、前記従属イベントは、前記第一の変数および前記第二の変数のうち一つまたは複数を含む目標条件を含む、段階と;
前記第一のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第一のイベント・シーケンスについての第一の距離を決定する段階と;
前記第二のイベント・シーケンスの実行が前記目標条件を満たす度合いを示す、前記第二のイベント・シーケンスについての第二の距離を決定する段階と;
前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスの実行を前記第二のイベント・シーケンスより上に優先度付けする段階と;
前記優先度付けに従って、前記第一のイベント・シーケンス、前記第二のイベント・シーケンスおよび前記従属イベントのうちの一つまたは複数を含むイベント空間を探査する段階とを含む動作を実行させるよう構成されている、
コンピュータ可読記憶媒体。
(付記20)
前記動作が、前記第一の距離および前記第二の距離が前記第一のイベント・シーケンスの実行が前記第二のイベント・シーケンスの実行より高い度合いで前記目標条件を満たすことを示すことに基づいて、前記第一のイベント・シーケンスを前記第二のイベント・シーケンスより優先して実行することをさらに含む、付記19記載のコンピュータ可読記憶媒体。