(57)【要約】      （修正有）【課題】イベント駆動型ソフトウェアプログラムをテストする方法及びシステムを提供する。【解決手段】イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、プログラムのイベントを含む複数の実行ターゲットからプログラムの実行ターゲットを選択し、実行ターゲットをシンボリック実行する。プログラムの挙動モデルは、プログラムのシンボリック実行中のプログラムの挙動に基づく受動学習を用いて生成され、実行ターゲットをシンボリック実行したことに基づいて更新される。プログラムは、実行ターゲットの実行に応じて、第１の状態から第２の状態に遷移し、これに伴って実行ターゲットリストを更新する。【選択図】図２
2018060525.tif 000002
【特許請求の範囲】
【請求項１】
イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択するステップであって、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習を用いて生成され、前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、ステップと、
前記選択に基づいて、前記実行ターゲットをシンボリック実行するステップであって、前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第１の状態から第２の状態に遷移する、ステップと、
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新するステップと、
を含む方法。
【請求項２】
前記挙動モデルは、前記シンボリック実行中に生成された構造カバレッジ情報であって、前記イベント駆動型ソフトウェアプログラムのどの部分が前記シンボリック実行中に網羅されたかを示す構造カバレッジ情報を用いて、注釈付けされる、請求項１に記載の方法。
【請求項３】
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記構造カバレッジ情報を更新するステップと、
前記挙動モデルの更新中に、前記の更新された構造カバレッジ情報を用いて、前記挙動モデルに注釈付けするステップと、
をさらに含む、請求項２に記載の方法。
【請求項４】
前記イベント駆動型ソフトウェアプログラムの前記シンボリック実行に基づいて、前記イベント駆動型ソフトウェアプログラムのための複数のテストイベント実行シーケンスを生成するステップであって、前記複数のテストイベント実行シーケンスは、前記第１の状態から前記第２の状態への遷移を含む、ステップをさらに含む、請求項１に記載の方法。
【請求項５】
前記挙動モデルに基づいて、前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの未探索のイベントハンドラに関連付けられていると判定するステップと、
前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの未探索のイベントハンドラに関連付けられていることと、前記複数の実行ターゲットのうちの他の実行ターゲットの各々が、前記イベント駆動型ソフトウェアプログラムの少なくとも部分的に探索済みのイベントハンドラに関連付けられていることと、に基づいて、前記他の実行ターゲットより優先されて前記実行ターゲットを選択するステップと、
をさらに含む、請求項１に記載の方法。
【請求項６】
前記挙動モデルに基づいて、前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていることと、前記複数の実行ターゲットのうちの他の実行ターゲットの各々が、前記イベント駆動型ソフトウェアプログラムの完全に探索済みのイベントハンドラに関連付けられていることと、に基づいて、前記他の実行ターゲットより優先されて前記実行ターゲットを選択するステップと、
をさらに含む、請求項１に記載の方法。
【請求項７】
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第１の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第１の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第１の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第１の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの現在状態と、の間の第１のイベント実行パスは、第１の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第２の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第２の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第２の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの前記現在状態と、の間の第２のイベント実行パスは、第２の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記第１のイベント実行パスにおける前記第１の数のイベントが、前記第２のイベント実行パスにおける前記第２の数のイベントよりも少ないと判定するステップと、
前記第１の数のイベントが前記第２の数のイベントよりも少ないことに基づいて、前記第２の実行ターゲットより優先されて前記第１の実行ターゲットを選択するステップと、
をさらに含む、請求項１に記載の方法。
【請求項８】
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第１の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第１の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第１の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第１の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの初期状態と、の間の第１のイベント実行パスは、第１の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第２の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第２の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第２の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの前記初期状態と、の間の第２のイベント実行パスは、第２の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記第１のイベント実行パスにおける前記第１の数のイベントが、前記第２のイベント実行パスにおける前記第２の数のイベントよりも少ないと判定するステップと、
前記第１の数のイベントが前記第２の数のイベントよりも少ないことに基づいて、前記第２の実行ターゲットより優先されて前記第１の実行ターゲットを選択するステップと、
をさらに含む、請求項１に記載の方法。
【請求項９】
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第１の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第１の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第２の実行ターゲットが、前記部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記挙動モデルに基づいて、前記第１の実行ターゲットが、前記第２の実行ターゲットのイベントシーケンスプレフィックスよりも短いイベントシーケンスプレフィックスを有すると判定するステップと、
前記第１の実行ターゲットが、前記第２の実行ターゲットのイベントシーケンスプレフィックスよりも短いイベントシーケンスプレフィックスを有することに基づいて、前記第２の実行ターゲットより優先されて前記第１の実行ターゲットを選択するステップと、
をさらに含む、請求項１に記載の方法。
【請求項１０】
少なくとも１つの非一時的なコンピュータ読み取り可能な媒体は、１つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも１つのプロセッサにより実行されたことに応じて、システムに請求項１に記載の方法を実行させる、請求項１に記載の方法。
【請求項１１】
受動学習を用いて、イベント駆動型ソフトウェアプログラムの１つ以上のイベントのシンボリック実行に応じた、前記イベント駆動型ソフトウェアプログラムの挙動に基づいて、前記イベント駆動型ソフトウェアプログラムの挙動モデルを生成するステップと、
前記挙動モデルに基づいて、実行ターゲットリストに含まれる実行ターゲットのシンボリック実行を優先順位付けするステップであって、前記実行ターゲットリストに含まれる各実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、ステップと、
前記実行ターゲットの前記シンボリック実行の優先順位付けに基づいて、前記イベント駆動型ソフトウェアプログラムを探索するステップと、
前記イベント駆動型ソフトウェアプログラムの探索に基づいて、前記イベント駆動型ソフトウェアプログラムのための複数のテストイベント実行シーケンスを生成するステップと、
を含む方法。
【請求項１２】
前記挙動モデルは、前記シンボリック実行中に生成された構造カバレッジ情報であって、前記イベント駆動型ソフトウェアプログラムのどの部分が前記シンボリック実行中に網羅されたかを示す構造カバレッジ情報を用いて、注釈付けされる、請求項１１に記載の方法。
【請求項１３】
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記構造カバレッジ情報を更新するステップと、
前記挙動モデルの更新中に、前記の更新された構造カバレッジ情報を用いて、前記挙動モデルに注釈付けするステップと、
をさらに含む、請求項１２に記載の方法。
【請求項１４】
前記実行ターゲットのシンボリック実行を優先順位付けすることは、少なくとも部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行よりも、未探索のイベントハンドラに関連付けられている実行ターゲットの実行を高く優先順位付けすることを含む、請求項１１に記載の方法。
【請求項１５】
前記実行ターゲットのシンボリック実行を優先順位付けすることは、完全に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行よりも、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行を高く優先順位付けすることを含む、請求項１１に記載の方法。
【請求項１６】
前記実行ターゲットのシンボリック実行を優先順位付けすることは、前記イベント駆動型ソフトウェアプログラムの現在状態と、未探索のイベントハンドラに関連付けられている実行ターゲットと、の間のイベントシーケンスパスにおけるイベントの数に基づいて、前記未探索のイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、請求項１１に記載の方法。
【請求項１７】
前記実行ターゲットのシンボリック実行を優先順位付けすることは、前記イベント駆動型ソフトウェアプログラムの初期状態と未探索のイベントハンドラに関連付けられている実行ターゲットとの間のイベントシーケンスパスにおけるイベントの数に基づいて、前記未探索のイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、請求項１１に記載の方法。
【請求項１８】
前記実行ターゲットのシンボリック実行を優先順位付けすることは、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットのイベントシーケンスプレフィックスの長さに基づいて、前記部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、請求項１１に記載の方法。
【請求項１９】
少なくとも１つの非一時的なコンピュータ読み取り可能な媒体は、１つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも１つのプロセッサにより実行されたことに応じて、システムに請求項１１に記載の方法を実行させる、請求項１１に記載の方法。
【請求項２０】
システムであって、
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに通信可能に接続され、命令を記憶するよう構成されている少なくとも１つの非一時的なコンピュータ読み取り可能な媒体であって、前記命令は、前記少なくとも１つのプロセッサにより実行されたことに応じて、前記システムに、
イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択する動作であって、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習を用いて生成され、前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、動作と、
前記選択に基づいて、前記実行ターゲットをシンボリック実行する動作であって、前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第１の状態から第２の状態に遷移する、動作と、
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新する動作と、
を含む複数の動作を実行させる、少なくとも１つの非一時的なコンピュータ読み取り可能な媒体と、
を有するシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示に記載の実施形態は、イベント駆動型ソフトウェアテストシーケンスを決定することに関する。
【背景技術】
【０００２】
ソフトウェアプログラムを妥当性確認又は検証すること等のソフトウェアをテストすることは、情報技術（ＩＴ）機関の間では一般的な活動である。例えば、ソフトウェアが、１つ以上のクライアントコンピュータシステムにおいて実行されるデスクトップアプリケーションであるか、モバイルデバイスにおいて実行されるモバイルデバイスアプリケーションであるか、又は、１つ以上のサーバコンピュータシステムにおいて実行されるウェブアプリケーションであるかにかかわらず、ソフトウェアの品質を検証することがしばしば重要である。ソフトウェアにおけるいくつかのタイプのエラーは、ユーザに対して苛立ち又は不便さを生じさせるだけであるが、他のタイプのエラーは、データ損失及び金銭的損失等の他の問題を生じさせる可能性がある。
【０００３】
広く至る所に存在するようになってきている１つのタイプのソフトウェアは、グラフィカルユーザインタフェース（ＧＵＩ）ベースのアプリケーション及びウェブベースのアプリケーション等のイベント駆動型ソフトウェアである。イベント駆動型ソフトウェアにおいて、該ソフトウェアのフローは、ユーザアクション（マウスクリック、キー押下）、センサ出力、又は、他のプログラム／スレッドからのメッセージ等のイベントにより決定され得る。イベント駆動型ソフトウェアを使用することは、ユーザにとって、モバイルデバイス及び他のデバイスの使用を楽にすることができる。しかしながら、イベント駆動型ソフトウェアはまた、これらのプログラムの挙動を解析する際の課題を与える。
【０００４】
本開示において特許請求される主題は、あらゆる欠点を解決する実施形態又は上記のような環境においてのみ動作する実施形態に限定されるものではない。そうではなく、この背景技術の記載は、本開示に記載のいくつかの実施形態が実施され得る１つの例示的な技術領域を示すために提供されているに過ぎない。
【発明の概要】
【０００５】
本開示の一実施形態の一態様に従うと、方法は、イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択することを含み得る。前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから選択され得、前記イベント駆動型ソフトウェアプログラムのイベントを含み得る。さらに、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習（パッシブラーニング）を用いて生成され得る。本方法は、前記選択に基づいて、前記実行ターゲットをシンボリック実行することをさらに含み得る。前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第１の状態から第２の状態に遷移し得る。さらに、本方法は、前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新することを含み得る。
【０００６】
実施形態の目的及び利点が、少なくとも請求項において特に示される要素、特徴、及び組合せにより、実現及び達成される。
【０００７】
前述の総括的な説明及び以下の詳細な説明の両方ともが、説明的なものであり、例として与えられ、特許請求される発明を限定するものではないことを理解されたい。
【図面の簡単な説明】
【０００８】
例示的な実施形態が、添付の図面を使用して、より具体的且つ詳細に記載及び説明される。
【図１Ａ】ソフトウェアをテストすることに関する動作を実行するよう構成されている例示的なシステムを表す図。
【図１Ｂ】図１Ａに示されるテストモジュールを含み得る例示的な電子デバイスを示す図。
【図２】イベント駆動型ソフトウェアプログラムをテストすることに関して使用され得る例示的な方法の図。
【図３】シンボリック実行中に生成され得る例示的な挙動モデルを示す図。
【発明を実施するための形態】
【０００９】
本開示に記載のいくつかの実施形態は、電子デバイスのためのグラフィカルユーザインタフェース（ＧＵＩ）ベースのアプリケーション、及びウェブベースのアプリケーション等のイベント駆動型ソフトウェアプログラムをテストする方法及びシステムに関する。イベント駆動型ソフトウェアプログラムのフローは、ユーザアクション（マウスクリック、キー押下）、センサ出力、又は、他のプログラム／スレッドからのメッセージ等の様々な「イベント」により決定され得る。イベント駆動型ソフトウェアプログラムは、テストシーケンスの生成に関して探索され得る、多数の異なるイベント及び対応するイベントシーケンス（例えば、イベント駆動型ソフトウェアプログラムをテストするために使用され得るイベントシーケンス）を有することがあり、これは、イベント駆動型ソフトウェアプログラムを解析してテストシーケンスを生成する際のイベントシーケンス爆発問題につながることがある。
【００１０】
以下で詳述されるように、挙動モデルを使用して、イベント駆動型ソフトウェアプログラムの探索を指示するのを助けることができ、これは、イベントシーケンス爆発問題を低減させるのを助けることができる。詳細には、挙動モデルが、イベント駆動型ソフトウェアプログラムのシンボリック実行中に生じた、イベント駆動型ソフトウェアプログラムの挙動に基づいて、生成され得る。さらに、挙動モデルを使用して、イベント駆動型ソフトウェアプログラムのイベントのシンボリック実行を優先順位付けすることができる。優先順位付けは、探索され得る冗長パスの数を低減させつつ、探索中のイベント駆動型ソフトウェアプログラムのカバレッジを増大させるのも助けることができる。いくつかの実施形態において、探索され得るイベント実行シーケンスを、使用され得るテストイベント実行シーケンスとして使用して、イベント駆動型ソフトウェアプログラムをテストすることができる。
【００１１】
本開示の実施形態が、添付の図面を参照して説明される。
【００１２】
図１Ａは、本開示に記載の少なくとも１つの実施形態に従って構成される、ソフトウェアをテストすることに関する動作を実行するよう構成されている例示的なシステム１００を表す図である。詳細には、システム１００は、イベント駆動型ソフトウェアプログラムのテスト対象コード１０４に対してテスト動作を実行して、イベント駆動型ソフトウェアプログラムのテスト結果１０８を生成するよう構成されているテストモジュール１０６を含み得る。テスト対象コード１０４は、例えば、処理デバイスにより実行される、イベント駆動型ソフトウェアプログラム、イベント駆動型ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又は、他のロジック若しくは命令等の電子データを含み得る。いくつかの実施形態において、テスト対象コード１０４は、イベント駆動型ソフトウェアプログラムの完全なインスタンスを含み得る。これらの実施形態又は他の実施形態において、テスト対象コード１０４は、イベント駆動型ソフトウェアプログラムの一部を含み得る。テスト対象コード１０４は、イベント駆動型ソフトウェアプログラムのために使用され得る任意の適切なタイプのコンピュータ言語で記述され得る。
【００１３】
テスト対象コード１０４は、複数のソフトウェアモジュールに編成される、イベント駆動型ソフトウェアプログラムの諸部分を含み得る。ソフトウェアモジュールは、ソフトウェアモジュールの特定の機能を実行するコードを含み得る。特定の機能を実行するコードは、ソフトウェア関数と呼ばれることがある。いくつかの実施形態において、テスト対象コード１０４は、イベント駆動型ソフトウェアプログラムに関連付けられているイベントの発生に応じて、１つ以上のソフトウェア関数を実行することができる。例えば、テスト対象コード１０４は、イベント「ｅ１」に応じて、変数「ａ」に対する動作を実行することができるソフトウェア関数「ｆ１（ａ）」を含み得る。本開示において、イベントの発生に応じて動作を実行するソフトウェア関数は、「イベントハンドラ」と呼ばれ得る。以下の説明において、「イベントの実行」は、その対応するイベントハンドラの実行と同義であるとみなされ、これらの２つの表現は、置き換え可能に使用され得る。さらに、イベントハンドラの実行は、その実行中に１つ以上の他の関数を推移的に（transitively）呼び出して実行することがある。したがって、いくつかの実施形態において、特定のイベントハンドラの実行との言及は、特定のイベントハンドラにより呼び出される又は実行される関数の実行を含み得る。
【００１４】
以下で詳述されるように、テストモジュール１０６は、テスト対象コード１０４に対して一連の動作を実行して、テスト結果１０８を生成するよう構成され得る。例えば、テストモジュール１０６は、テスト対象コード１０４に対してシンボリック実行を行って、テスト対象コード１０４を探索するよう構成され得る。シンボリック実行を行うことは、テスト対象コード１０４のイベントをシンボリック実行することを含み得る。いくつかの実施形態において、テストモジュール１０６は、シンボリック実行中にテスト対象コード１０４の挙動モデルを生成及び更新するよう構成され得る。さらに、テストモジュール１０６は、挙動モデルに基づいて、シンボリック実行中にイベントの実行を優先順位付けするよう構成され得る。これらの実施形態又は他の実施形態において、テストモジュール１０６は、テスト結果１０８として、シンボリック実行中に探索され得る１つ以上のイベントシーケンスを出力するよう構成され得る。いくつかの実施形態において、テストモジュール１０６は、テスト対象コード１０４に対して、（以下で詳細に説明される）図２の方法２００に関する以下で説明される１つ以上の動作を実行して、テスト結果１０８を生成するよう構成され得る。
【００１５】
図１Ｂは、本開示の少なくとも１つの実施形態に従った例示的なコンピューティングシステム１０２のブロック図を示している。コンピューティングシステム１０２は、テストモジュール（例えば、図１Ａのテストモジュール１０６）に関連付けられている１つ以上の動作を実施又は指示するよう構成され得る。コンピューティングシステム１０２は、プロセッサ１５０、メモリ１５２、及びデータストレージ１５４を含み得る。プロセッサ１５０、メモリ１５２、及びデータストレージ１５４は、通信可能に接続され得る。
【００１６】
概して、プロセッサ１５０は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む任意の適切な専用又は汎用のコンピュータ、コンピューティングエンティティ、又は処理デバイスを含み得、任意の適用可能なコンピュータ読み取り可能な記憶媒体に記憶されている命令を実行するよう構成され得る。例えば、プロセッサ１５０は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は、プログラム命令を解釈及び／又は実行し、且つ／又はデータを処理するよう構成されている任意の他のデジタル回路若しくはアナログ回路を含み得る。プロセッサ１５０は、図１Ｂにおいて１つのプロセッサとして示されているが、プロセッサ１５０は、本開示に記載の任意の数の動作を個別的又は集合的に実行する又は本開示に記載の任意の数の動作の実行を個別的又は集合的に指示するよう構成されている任意の数のプロセッサを含んでもよい。さらに、プロセッサのうちの１つ以上は、異なるサーバ等の１つ以上の異なる電子デバイスにおいて存在してもよい。
【００１７】
いくつかの実施形態において、プロセッサ１５０は、メモリ１５２、データストレージ１５４、又はメモリ１５２とデータストレージ１５４との両方に記憶されているプログラム命令を解釈及び／又は実行し、且つ／又は、メモリ１５２、データストレージ１５４、又はメモリ１５２とデータストレージ２１４との両方に記憶されているデータを処理するよう構成され得る。いくつかの実施形態において、プロセッサ１５０は、データストレージ１５４からプログラム命令をフェッチして、プログラム命令をメモリ１５２にロードすることができる。プログラム命令がメモリ１５２にロードされた後、プロセッサ１５０は、プログラム命令を実行することができる。
【００１８】
例えば、いくつかの実施形態において、テストモジュールは、プログラム命令として、データストレージ１５４に含められ得る。プロセッサ１５０は、データストレージ１５４からテストモジュールのプログラム命令をフェッチして、テストモジュールのプログラム命令をメモリ１５２にロードすることができる。テストモジュールのプログラム命令がメモリ１５２にロードされた後、プロセッサ１５０は、コンピューティングシステムがテストモジュールのプログラム命令により指示されるようにテストモジュールに関連付けられている動作を実施できるように、テストモジュールのプログラム命令を実行することができる。
【００１９】
メモリ１５２及びデータストレージ１５４は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な記憶媒体を含み得る。そのようなコンピュータ読み取り可能な記憶媒体は、プロセッサ１５０等の汎用又は専用のコンピュータによりアクセスされ得る任意の利用可能な媒体を含み得る。限定ではなく例として、そのようなコンピュータ読み取り可能な記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、電気的に消去可能なプログラム可能な読み取り専用メモリ（ＥＥＰＲＯＭ）、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス（例えば、ソリッドステートメモリデバイス）、又は、コンピュータ実行可能な命令又はデータ構造の形態の特定のプログラムコードを運ぶ又は記憶するために使用され得る任意の他の記憶媒体であって、汎用又は専用のコンピュータによりアクセスされ得る任意の他の記憶媒体、を含む有形の又は非一時的なコンピュータ読み取り可能な記憶媒体を含み得る。これらの実施形態及び他の実施形態において、本出願において使用される「非一時的な」という用語は、米国連邦巡回控訴高等裁判所によるIn  re  Nuijten判決（500  F.3d  1346）（Fed.  Cir.  2007）において特許可能な主題の範囲外であると見出されたタイプの一時的な媒体のみを含まないとして解釈されるべきである。上記の組合せも、コンピュータ読み取り可能な記憶媒体の範囲に含まれ得る。コンピュータ実行可能な命令は、例えば、プロセッサ１５０に所定の動作又は動作群を実行させるよう構成されている命令及びデータを含み得る。
【００２０】
本開示の範囲から逸脱することなく、コンピューティングシステム１０２に対して、変更、追加、又は省略が可能である。例えば、いくつかの実施形態において、コンピューティングシステム１０２は、明示的には図示又は説明されないかもしれない任意の数の他のコンポーネントを含んでもよい。
【００２１】
図２は、本開示に記載の少なくとも１つの実施形態に従った、イベント駆動型ソフトウェアプログラムをテストすることに関して使用され得る例示的な方法２００の図である。方法２００は、任意の適切なシステム、装置、又はデバイスにより実行され得る。例えば、図１Ｂの電子デバイス１０２のテストモジュール１０６が、方法２００に関連付けられている動作のうちの１つ以上を実行できる。別個のブロック及び段階で図示されているが、方法２００のブロックのうちの１つ以上に関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。方法２００は、図１Ａのテスト対象コード１０４等のテスト対象コードとして動作し得る、イベント駆動型ソフトウェアプログラムの１つ以上の部分に対して実行され得る。さらに、方法２００は、当分野において知られている、シンボリック実行の１つ以上の原理を使用して、実行され得る。
【００２２】
いくつかの実施形態において、方法２００は、ブロック２０２で開始し得、ブロック２０２において、イベント駆動型ソフトウェアプログラムの開始ページ（opening  page）がロードされ得る。ブロック２０４において、実行ターゲットリストが、開始ページに基づいて初期化され得る。いくつかの実施形態において、実行ターゲットリストは、実行ターゲットキューとして実装され得、実行ターゲットキューに含められている実行ターゲットが、「先入れ先出し（「ＦＩＦＯ」）」に基づいてシンボリック実行され得る。本開示において、「実行ターゲット」との言及は、イベント、又は、イベント駆動型ソフトウェアプログラムのシンボリック実行中に、実行のためにフラグが付けられ得る又は指定され得るイベントのイベントハンドラ内の特定の分岐、を指し得る。いくつかの実施形態において、実行ターゲットのうちの１つ以上は、シンボリック実行中に決定され得るシンボリック状態であり得る。
【００２３】
シンボリック状態は、エントリーポイント、又は、イベント駆動型ソフトウェアプログラムのシンボリック実行中に到達し、将来の実行のためにフラグが付けられた、（特定のイベントに対応する）特定のイベントハンドラ内の特定の分岐、を指定し得る。指定されたイベントは、該イベントにつながる先行イベントの特定のシーケンスのシンボリック実行を通じて発見されたものであり得る。上記先行イベントの各先行イベントのシンボリック実行は、当該先行イベントのイベントハンドラ内の特定のパスをシンボリック実行することに対応し得る。分岐は、「ｉｆ−ｔｈｅｎ−ｅｌｓｅ」文等の条件文の「真」又は「偽」評価に対応し得る、可能性のある２つの実行方向のうちの１つを指し得る。いくつかの実施形態において、実行ターゲットは、（以下でさらに説明される）挙動モデルによって示される、先行イベントの特定のシーケンスにより到達可能な特定の対象イベント（event  of  interest）であって、示される特定のやり方で（例えば、上記先行イベントの特定のシーケンスを通じて）シンボリック実行を通じてまだ実行されていないものであり得る特定の対象イベントを指定し得る。この特定のイベントは、該イベントのイベントハンドラが、以前の探索を通じて十分には探索されていないものであり得る（例えば、そのイベントハンドラが、現在、不十分な構造カバレッジを有し得る）ので、対象であり得る。
【００２４】
例えば、ロードされた開始ページは、１つ以上のイベントを含み得る。ロードされた開始ページ上の上記イベントは、実行ターゲットとして、実行ターゲットリストに含められ得る。ロードされた開始ページ上の上記イベントは、任意の適切な技術を使用して判別され得る。
【００２５】
ブロック２０６において、実行ターゲットが、初期実行ターゲットリストから選択され得る。いくつかの実施形態において、ブロック２０６において、実行ターゲットは、初期実行ターゲットリストからランダムに選択され得る。これらの実施形態又は他の実施形態において、実行ターゲットリストは、実行ターゲットキューを含み得、実行ターゲットキューの先頭にある実行ターゲットが選択され得る。
【００２６】
ブロック２０８において、選択された実行ターゲットが、実行され得る。この例において、方法２００は、ブロック２０６からブロック２０８に進み得、この方法がブロック２０６からブロック２０８に進んだことに応じて、ブロック２０６において選択された実行ターゲットが、ブロック２０８において実行され得る。本開示において、実行ターゲットの実行との言及は、実行ターゲットの一部であり得るイベントをシンボリック実行することを含み得る。例えば、いくつかの例において、選択された実行ターゲットは、該実行ターゲットの実行が単一のイベントの実行を含み得るように、該単一のイベントであり得る。他の例において、選択されたターゲットは、特定の順序でリストされた複数のイベントを含む、ターゲットイベントにつながるイベントシーケンスを含み得る。これらの例の一部において、選択された実行ターゲットの実行は、示される順序でイベントシーケンスを実行することを含み得る。さらに、いくつかの例において、選択された実行ターゲットは、実行され得るシンボリック状態を含み得る。追加的又は代替的に、いくつかの実施形態において、選択された実行ターゲットは、ブロック２０８において、シンボリック実行されてもよい。
【００２７】
ブロック２１０において、イベント駆動型ソフトウェアプログラムの構造カバレッジ情報が更新され得る。いくつかの実施形態において、構造カバレッジ情報は、ブロック２０８における、選択された実行ターゲットの実行に応じて、該実行に基づいて、更新され得る。例えば、構造カバレッジ情報は、イベント駆動型ソフトウェアプログラムのどの部分が、これまでのシンボリック実行の結果として探索又は網羅されているかを示すことができる。これらの「部分」は、ソースコードのライン（行）（ラインカバレッジ又はステートメントカバレッジ）、条件文の分岐方向（分岐カバレッジ）、又は、条件カバレッジ若しくはパスカバレッジ等の任意の他の適切な指標を指し得る。さらに、選択された実行ターゲットの実行は、以前には実行されていなかった又は呼び出されていなかった、イベント駆動型ソフトウェアプログラムのコードの部分の実行を生じさせ得る。したがって、コードの新たに実行された上記部分が、構造カバレッジ情報に追加されて、構造カバレッジ情報が更新され得る。本開示において、構造カバレッジ情報を「更新する」との言及は、以前には存在しなかった場合に、構造カバレッジ情報を初期化すること及び構造カバレッジ情報を作成することを含み得る。
【００２８】
ブロック２１２において、イベント駆動型ソフトウェアプログラムの挙動モデルが、更新され得る。いくつかの実施形態において、挙動モデルは、ブロック２０８における、選択された実行ターゲットの実行に応じて、該実行に基づいて、更新され得る。例えば、挙動モデルは、どのトレースのセットが探索されたかを示すことができる、イベント駆動型ソフトウェアプログラムの拡張ラベル付き遷移システム（ＥＬＴＳ：Extended  Labeled  Transition  System）モデルを含み得る。トレースは、各イベントがパラメータ値の特定のセットを用いて実行される、パラメータ付きイベント（parameterized  events）の特定のシーケンスの実行に対応し得る。例えば、パラメータ付きイベントは、ウェブページ上のＨＴＭＬフォームであって、送信ボタンと、送信ボタンがクリックされたときに「送信」され得る、該フォームのフィールドの各々についての値を含むパラメータと、を有する、ウェブページ上のＨＴＭＬフォーム、を含み得る。したがって、実行されたときに、トレースは、各イベントのイベントハンドラ内の特定のパスを実行し、実行の結果として、特定の出力ウェブページを生成する。挙動モデルを学習させる目的のため、トレースは、入力−出力ペアのシーケンスであって、各入力が、特定のパラメータ値を有する特定のパラメータ付きイベントであり、出力が、このコンテキストにおいて、例えば、入力のこの特定のシーケンスを実行することにより、実行の結果として生成されたウェブページの表現である、入力−出力ペアのシーケンス、により指定される。さらに、選択された実行ターゲットの実行は、追加的なトレースの探索をもたらし得る。したがって、新たに探索された前記トレースが、挙動モデルに追加されて、挙動モデルが、更新され得る。本開示において、挙動モデルを「更新する」との言及は、以前には存在しなかった場合に、挙動モデルを初期化すること及び挙動モデルを開始することを含み得る。
【００２９】
挙動モデルは、任意の適切な技術を使用して生成され得る。例えば、いくつかの実施形態において、挙動モデルは、ＢｌｕｅＦｒｉｎｇｅ受動モデル学習アルゴリズム等の受動学習アルゴリズムを使用して、生成され得る。追加的又は代替的に、いくつかの実施形態において、挙動モデルを更新することは、構造カバレッジ情報を用いて挙動モデルに注釈付けすることを含み得る。これらの実施形態又は他の実施形態において、挙動モデルは、シンボリック実行中に遭遇した状態と、これらの状態に関連付けられ得るイベントと、に基づいて、注釈付けされ得る。
【００３０】
例えば、挙動モデルにおける状態は、イベント駆動型ソフトウェアプログラムの特定の状態（例えば、特定のウェブページにアクセスすることに対応するプログラム状態）に対応し得、挙動モデルのエッジは、実行された特定のイベントに対応し得る。さらに、各イベントは、特定のイベントハンドラに対応し得る。さらに、上記で開示されたように、これらのイベントハンドラ関数のカバレッジ情報は、これまでに実行された実行に対して（例えば、これまでに生成されたトレースを通じて）更新され得る。更新された構造カバレッジ情報に基づいて、挙動モデルにおける各イベント（エッジ）は、そのそれぞれのイベントハンドラの現在のカバレッジ値を用いて、注釈付けされ得る。さらに、特定の状態において利用可能であるがまだ実行されていないイベントも、挙動モデルにおいて、同様に注釈付けされ得る。追加的又は代替的に、いくつかの例において、１つのイベントハンドラが、複数のイベントにより共有され得る。したがって、これらのイベントのうちの１つのイベントが実行されない場合であっても、この対応するイベントハンドラは、部分的に又は完全に網羅されていることがあり、それに応じて注釈付けされていることがある。
【００３１】
例えば、図３は、本開示の１つ以上の実施形態に従った、シンボリック実行中に生成され得る例示的な挙動モデルを示している。詳細には、図３は、第１の状態３０２、第２の状態３０４、及び第３の状態３０６を含み得る第１のバージョンの挙動モデル３００ａを示している。第１の状態３０２、第２の状態３０４、及び第３の状態３０６は、シンボリック実行中に第１の状態３０２、第２の状態３０４、及び第３の状態３０６に遭遇したことを示す構造カバレッジ情報に基づいて、シンボリック実行中に挙動モデルに追加されたものであり得る。さらに、第１の挙動モデル３００ａは、構造カバレッジ情報により示される、実行されたものであり得る第１のイベント及び第２のイベントを示し得る第１の探索済みのトレース３１０及び第２の探索済みのトレース３１２を含み得る。さらに、第１の挙動モデル３００ａは、第１の未探索のイベント及び第２の未探索のイベントにそれぞれ関連付けられ得る第１の未探索のトレース３０８及び第２の未探索のトレース３１４を含み得る。第１の未探索のトレース３０８及び第２の未探索のトレース３１４は、差異を示すために、第１の探索済みのトレース３１０及び第２の探索済みのトレース３１２とは異なって、（例えば、実線矢印ではなく破線矢印で）表現され得る。
【００３２】
さらに、いくつかの実施形態において、探索済みのイベントに対応するイベントハンドラのどれくらいが探索されたかを示す構造カバレッジ情報が、この挙動モデルに関連付けられ得る。例えば、第１の探索済みのイベント及び第２の探索済みのイベントに対応するイベントハンドラのライン、分岐、条件、又はパスに対応するカバレッジパーセンテージ（これは、例えば、構造カバレッジ情報において示される）を用いて、第１の探索済みのイベント及び第２の探索済みのイベントに関して注釈付けすることができる。いくつかの実施形態において、カバレッジパーセンテージは、第１の探索済みのイベント及び第２の探索済みのイベントに関して、挙動モデルのデータ構造に含められ得る。追加的又は代替的に、カバレッジパーセンテージは、挙動モデルに対応するデータマップに含められてもよい。
【００３３】
さらに、図３は、上記第２の未探索のイベントの実行後の第２のバージョンの挙動モデル３００ｂであって、該実行に応じて注釈付けされる第２のバージョンの挙動モデル３００ｂを示している。詳細には、第２の未探索のトレース３１４が、上記第２の未探索のイベントの実行に対応する第３の探索済みのトレース３１６になり得、これが、ここでは、第３の探索済みのイベントであり得る。さらに、第３の探索済みのイベントに対応するイベントハンドラのどれくらいが探索されたかを示す構造カバレッジ情報が、第２のバージョンの挙動モデル３００ｂに関連付けられ得る。例えば、第３の探索済みのイベントに対応するイベントハンドラのカバレッジパーセンテージが、挙動モデルの対応するデータ構造又はデータマップに追加されることにより、第３の探索済みのイベントに対応するイベントハンドラのカバレッジパーセンテージを用いて、挙動モデルに対して注釈付けすることができる。
【００３４】
図２に戻ると、ブロック２１４において、実行ターゲットリストが更新され得る。例えば、イベント駆動型ソフトウェアプログラムは、選択された実行ターゲットの実行に応じて、第１の状態から第２の状態に遷移し得る。第２の状態は、実行ターゲットリストに追加され得る実行ターゲットを含み得る。さらに、いくつかの実施形態において、実行ターゲットリストを更新することは、実行ターゲットリストに含まれる実行ターゲットの実行について優先順位付けを決定することを含み得る。
【００３５】
これらの実施形態又は他の実施形態において、実行ターゲットリストは、優先順位付けに基づいて編成され得る。例えば、いくつかの実施形態において、実行ターゲットリストは、実行ターゲットキューとして編成され得る。より高い優先順位の実行ターゲットがより低い優先順位の実行ターゲットより優先されて選択される、実行ターゲットの相対優先順位に従って、実行ターゲットが実行ターゲットキューから選択されて実行され得るように、実行ターゲットキューは、優先順位付けに基づいて順序付けられ得る。
【００３６】
いくつかの実施形態において、優先順位付けは、実行ターゲットが、未探索のイベントハンドラに関連付けられているか、部分的に探索済みのイベントハンドラに関連付けられているか、又は完全に探索済みのイベントハンドラに関連付けられているか、に基づき得る。例えば、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットは、完全に探索済みのイベントハンドラに関連付けられている実行ターゲットよりも高く優先順位付けされ得、未探索のイベントハンドラに関連付けられている実行ターゲットは、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットよりも高く優先順位付けされ得る。
【００３７】
本開示において、実行ターゲットがイベントハンドラに関連付けられているとの言及は、イベントハンドラの少なくとも一部が、「関連付けられている」イベントの実行に応じて呼び出される又は実行されることを示し得る。さらに、未探索のイベントハンドラとの言及は、対応するイベントハンドラのどの部分も、そのときに行われているシンボリック実行中に呼び出されていない又は実行されていないことを示し得る。さらに、部分的に探索済みのイベントハンドラとの言及は、対応するイベントハンドラの全てではなく少なくとも一部が、そのときに現在行われているシンボリック実行中に呼び出された又は実行されたことを示し得る。完全に探索済みのイベントハンドラとの言及は、対応するイベントハンドラの全てが探索されたことを示し得る。上記で示されたように、「探索済み」という用語の使用は、シンボリック実行の結果として網羅され得る、イベント駆動型ソフトウェアプログラムの挙動を指し得る。さらに、上記で示されたように、網羅された挙動の決定は、ラインカバレッジ又は分岐カバレッジ等の構造カバレッジ指標に基づいて計測され得る。
【００３８】
追加的又は代替的に、優先順位付けは、実行ターゲットに関連付けられ得るイベントシーケンスに基づいてもよい。例えば、いくつかの実施形態において、未探索のイベントハンドラに関連付けられている実行ターゲット間の優先順位付けは、イベント駆動型ソフトウェアプログラムの初期状態又は現在状態と、対応する実行ターゲットと、の間のイベントシーケンス（実行）パスにおけるイベントの数に基づき得る。
【００３９】
詳細には、第１の未探索のイベントハンドラに関連付けられている第１の実行ターゲットは、第１の実行ターゲットと、イベント駆動型ソフトウェアプログラムの現在状態（又は初期状態）と、の間の第１のイベント実行パスを有し得、第１のイベント実行パスは、第１の数のイベントを含み得る。さらに、第２の未探索のイベントハンドラに関連付けられている第２の実行ターゲットは、第２の実行ターゲットと、イベント駆動型ソフトウェアプログラムの現在状態（又は初期状態）と、の間の第２のイベント実行パスを有し得、第２のイベント実行パスは、第２の数のイベントを含み得る。第２のイベント実行パスにおける第２の数のイベントは、第１のイベント実行パスにおける第１の数のイベントより多いものであり得る。第１の実行ターゲットは、第１のイベント実行パスにおける第１の数のイベントが第２のイベント実行パスにおける第２の数のイベントより少ないことに基づいて、第２の実行ターゲットよりも高く優先順位付けされ得る。いくつかの例において、第１の未探索のイベントハンドラは、第２の未探索のイベントハンドラと同じであり得る。さらに、いくつかの例において、第１の未探索のイベントハンドラは、第２の未探索のイベントハンドラとは異なり得る。
【００４０】
別の例として、いくつかの実施形態において、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲット間の優先順位付けは、対応する実行ターゲットのイベントシーケンス（実行）プレフィックスにおけるイベントの数に基づき得る。詳細には、第１の部分的に探索済みのイベントハンドラに関連付けられている第１の実行ターゲットは、第１のイベントシーケンスプレフィックスを有し得る。さらに、第２の部分的に探索済みのイベントハンドラに関連付けられている第２の実行ターゲットは、第１のイベントシーケンスプレフィックスよりも長い第２のイベントシーケンスプレフィックスを有し得る。この例において、第１の実行ターゲットは、第１のイベント実行プレフィックスが第２のイベント実行プレフィックスよりも短いことに基づいて、第２の実行ターゲットよりも高く優先順位付けされ得る。本開示において、イベント実行パスの長さ又はイベント実行プレフィックスの長さ（イベント実行パス長又はイベント実行プレフィックス長）との言及は、イベント実行パス又はイベント実行プレフィックスに含まれ得るイベントの数を指し得る。さらに、いくつかの例において、第１の部分的に探索済みのイベントハンドラは、第２の部分的に探索済みのイベントハンドラと同じであり得、他の例において、第１の部分的に探索済みのイベントハンドラは、第２の部分的に探索済みのイベントハンドラとは異なり得る。
【００４１】
いくつかの実施形態において、優先順位付けは、挙動モデルに基づいて決定され得る。例えば、上記で示されたように、挙動モデルは、実行ターゲットのうちどの実行ターゲットが、未探索のイベントハンドラ、部分的に探索済みのイベントハンドラ、及び完全に探索済みのイベントハンドラに関連付けられているかを示すことができる。追加的又は代替的に、挙動モデルは、実行ターゲットに関連付けられ得る、イベントシーケンス（例えば、イベントシーケンスプレフィックス及びイベントシーケンスパス）及びそれらの対応する長さを示してもよい。したがって、いくつかの実施形態において、どの実行ターゲットが、未探索のイベントハンドラ、部分的に探索済みのイベントハンドラ、又は完全に探索済みのイベントハンドラに関連付けられているかは、挙動モデル及びその対応する関連付け（例えば、対応するデータ構造又はデータマップの注釈）から、判定され得る。さらに、いくつかの実施形態において、イベントシーケンス及びイベントシーケンスの対応する長さも、挙動モデルから判定され得る。イベントハンドラ及びイベントシーケンス長との判定された関連付けが、上述した優先順位付けに適用され得る。このように、挙動モデルを使用して、実行ターゲットリストに含まれる実行ターゲットの実行を優先順位付けすることができる。
【００４２】
ブロック２１６において、探索のカバレッジ目標が満たされているかどうか又はリソース制約を超えているかどうかが、判定され得る。上記カバレッジ目標は、構造カバレッジ目標に対応し得、イベント駆動型ソフトウェアプログラムのライン又は分岐のカバレッジの目標量（例えば、パーセンテージ）を含み得る。上記リソース制約は、イベント駆動型ソフトウェアプログラムを探索するのにどれくらいの時間を要し得るか、又は、イベント駆動型ソフトウェアプログラムを探索する際に伴われ得る処理量に対応し得、総実行時間、部分的に探索済みのイベントハンドラを探索することにおける試行の回数、及び、実行ターゲットの最大イベントシーケンス長を含み得る。
【００４３】
探索のカバレッジ目標が満たされていない又はリソース制約を超えていないと判定したことに応じて、方法２００は、ブロック２１６からブロック２１８に進み得る。ブロック２１８において、実行ターゲットが、実行ターゲットリストから選択され得る。いくつかの実施形態において、実行ターゲットは、上述した優先順位付けに基づいて、実行ターゲットリストから選択され得る。例えば、優先順位付けに基づいて編成された実行ターゲットキューの先頭にある実行ターゲットが、選択され得る。さらに、上述したように、いくつかの実施形態において、優先順位付けは、選択が挙動モデルに基づいて決定され得るように、挙動モデルに基づき得る。ブロック２１８において選択された実行ターゲットが、ブロック２０８において実行され得る。
【００４４】
ブロック２１６に戻ると、探索のカバレッジ目標が満たされている又はリソース制約を超えていると判定したことに応じて、方法２００は、ブロック２１６からブロック２２０に進み得る。ブロック２２０において、ブロック２０２、２０４、２０６、２０８、２１０、２１２、２１４、２１６、及び２１８に関する動作の実行中に探索されたイベントシーケンスが、テストイベントシーケンスとして出力され得る。
【００４５】
したがって、方法２００を使用して、挙動モデルにより指示されるシンボリック実行を用いてイベント駆動型ソフトウェアプログラムを探索することにより、イベント駆動型ソフトウェアプログラムのためのテストイベントシーケンスを決定することができる。挙動モデルによるシンボリック実行の指示は、シンボリック実行の効率性を向上させ、探索され得る冗長パスの数を低減させることができる。
【００４６】
本開示の範囲から逸脱することなく、方法２００に対して、変更、追加、又は省略が可能である。例えば、説明された動作は、異なる順序で実行されることがある。具体的な例として、実行ターゲットリストを更新することは、新たな実行ターゲットを実行ターゲットリストに追加することを含むことがあり、優先順位付けに従って実行ターゲットリストを編成することを含まないことがある。これらの実施形態又は他の実施形態において、優先順位付けは、ブロック２１８において選択がなされるときに決定されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ない動作及びアクションに組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。
【００４７】
上記で示されたように、本開示に記載の実施形態は、以下でより詳細に説明される様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用のコンピュータ（例えば、図１Ｂのプロセッサ１５０）の使用を含み得る。さらに、上記で示されたように、本開示に記載の実施形態は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な媒体（例えば、図１Ｂのメモリ１５２）を使用して実装され得る。
【００４８】
本開示において使用される場合、「モジュール」又は「コンポーネント」という用語は、モジュール又はコンポーネントのアクションを実行するよう構成されている特定のハードウェア実装、及び／又は、コンピューティングシステムの汎用ハードウェア（例えば、コンピュータ読み取り可能な媒体等）に記憶され得る且つ／又はコンピューティングシステムの汎用ハードウェア（例えば、処理デバイス等）により実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを指し得る。いくつかの実施形態において、本明細書に記載の異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピューティングシステム上で実行されるオブジェクト又はプロセスとして（例えば、別個のスレッドとして）実装され得る。本明細書に記載のシステム及び方法のうちの一部は、（汎用ハードウェアに記憶される且つ／又は汎用ハードウェアにより実行される）ソフトウェアにより実装されるとして一般に説明されるが、特定のハードウェア実装又はソフトウェアと特定のハードウェア実装との組合せも可能であり企図されている。本説明において、「コンピューティングエンティティ」は、本明細書において前に定義された任意のコンピューティングシステム、又は、コンピューティングシステム上で動作する任意のモジュール又はモジュールの組合せであり得る。
【００４９】
本開示及び特に請求項（例えば、請求項の本体部分）において使用される用語は、一般に、「オープンな」用語であるとして意図される（例えば、「〜を備える」という用語は、「〜を備えるが、〜に限定されるものではない」として解釈されるべきであり、「〜を有する」という用語は、「少なくとも〜を有する」として解釈されるべきであり、「〜を含む」という用語は、「〜を含むが、〜に限定されるものではない」として解釈されるべきである、等）。
【００５０】
さらに、導入される請求項記載事項の特定の数が意図される場合、そのような意図は、当該請求項中に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、請求項中に、請求項記載事項を導入するための「少なくとも１つの」、「１つ以上の」、「〜のうちの少なくとも１つ」、及び「〜のうちの１つ以上」といった導入句の使用が含まれることがある。しかしながら、このような導入句の使用は、「a」又は「an」といった不定冠詞による請求項記載事項の導入が、同一の請求項中に「１つ以上の」又は「少なくとも１つの」といった導入句と「a」又は「an」といった不定冠詞とが含まれるとしても、当該導入された請求項記載事項を含む特定の請求項が、当該請求項記載事項を１つしか含まない実施形態に限定されることを意味するとして解釈されるべきではない（例えば、「a」及び／又は「an」は、「少なくとも１つの」又は「１つ以上の」を意味するとして解釈されるべきである）。請求項記載事項を導入するために使用される定冠詞の使用についても同じことが当てはまる。
【００５１】
さらに、導入される請求項記載事項の特定の数が明示的に記載されている場合であっても、そのような記載は、少なくとも記載されている数を意味するとして解釈されるべきである（例えば、他の修飾語のない「２つの記載事項」という単なる記載は、少なくとも２つの記載事項又は２つ以上の記載事項を意味する）。さらに、「Ａ、Ｂ、及びＣ等のうちの少なくとも１つ」又は「Ａ、Ｂ、及びＣ等のうちの１つ以上」に類する表記が使用される場合、一般に、そのような構造は、Ａのみ、Ｂのみ、Ｃのみ、Ａ及びＢの両方、Ａ及びＣの両方、Ｂ及びＣの両方、又は、Ａ、Ｂ、及びＣの全て、等を含むことが意図される。
【００５２】
さらに、２つ以上の選択可能な用語を表すいかなる離接語又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの１つ、それらの用語の組合せ、又は、それらの用語の全てを含む可能性を意図するとして理解されるべきである。例えば、「Ａ又はＢ」という句は、「Ａ」若しくは「Ｂ」又は「Ａ及びＢ」の可能性を含むとして理解されるべきである。
【００５３】
さらに、「第１の」、「第２の」、「第３の」等といった用語は、本明細書において、特定の順序又は数の要素を意味するように必ずしも使用されるとは限らない。一般に、「第１の」、「第２の」、「第３の」等といった用語は、共通識別子としての異なる要素を区別するために使用される。「第１の」、「第２の」、「第３の」等といった用語が特定の順序を意味するという説明がなければ、これらの用語は、特定の順序を意味するとして理解されるべきではない。さらに、「第１の」、「第２の」、「第３の」等といった用語が特定の数の要素を意味するという説明がなければ、これらの用語は、特定の数の要素を意味するとして理解されるべきではない。例えば、第１のウィジェットは、第１のサイドを有するとして記載されることがあり、第２のウィジェットは、第２のサイドを有するとして記載されることがある。第２のウィジェットに関する「第２のサイド」という用語の使用は、第２のウィジェットの当該サイドを、第１のウィジェットの「第１のサイド」と区別するものであり、第２のウィジェットが２つのサイドを有することを意味するものではない。
【００５４】
本明細書において記載された全ての例及び条件付き言語は、当該技術を促進させるために本発明者によって寄与されるコンセプト及び本発明を読者が理解するのを助ける教育上の目的のために意図され、そのような具体的に記載された例及び条件に限定されるものではないとして解釈されるべきである。本開示の実施形態が詳細に説明されたが、それら実施形態に対する様々な変形、置換、及び変更が、本開示の主旨及び範囲から逸脱することなく可能である。
【００５５】
以上の実施形態に関し、さらに以下の付記を開示する。
【００５６】
（付記１）
イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択するステップであって、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習を用いて生成され、前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、ステップと、
前記選択に基づいて、前記実行ターゲットをシンボリック実行するステップであって、前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第１の状態から第２の状態に遷移する、ステップと、
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新するステップと、
を含む方法。
【００５７】
（付記２）
前記挙動モデルは、前記シンボリック実行中に生成された構造カバレッジ情報であって、前記イベント駆動型ソフトウェアプログラムのどの部分が前記シンボリック実行中に網羅されたかを示す構造カバレッジ情報を用いて、注釈付けされる、付記１に記載の方法。
【００５８】
（付記３）
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記構造カバレッジ情報を更新するステップと、
前記挙動モデルの更新中に、前記の更新された構造カバレッジ情報を用いて、前記挙動モデルに注釈付けするステップと、
をさらに含む、付記２に記載の方法。
【００５９】
（付記４）
前記イベント駆動型ソフトウェアプログラムの前記シンボリック実行に基づいて、前記イベント駆動型ソフトウェアプログラムのための複数のテストイベント実行シーケンスを生成するステップであって、前記複数のテストイベント実行シーケンスは、前記第１の状態から前記第２の状態への遷移を含む、ステップをさらに含む、付記１に記載の方法。
【００６０】
（付記５）
前記挙動モデルに基づいて、前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの未探索のイベントハンドラに関連付けられていると判定するステップと、
前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの未探索のイベントハンドラに関連付けられていることと、前記複数の実行ターゲットのうちの他の実行ターゲットの各々が、前記イベント駆動型ソフトウェアプログラムの少なくとも部分的に探索済みのイベントハンドラに関連付けられていることと、に基づいて、前記他の実行ターゲットより優先されて前記実行ターゲットを選択するステップと、
をさらに含む、付記１に記載の方法。
【００６１】
（付記６）
前記挙動モデルに基づいて、前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていることと、前記複数の実行ターゲットのうちの他の実行ターゲットの各々が、前記イベント駆動型ソフトウェアプログラムの完全に探索済みのイベントハンドラに関連付けられていることと、に基づいて、前記他の実行ターゲットより優先されて前記実行ターゲットを選択するステップと、
をさらに含む、付記１に記載の方法。
【００６２】
（付記７）
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第１の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第１の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第１の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第１の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの現在状態と、の間の第１のイベント実行パスは、第１の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第２の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第２の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第２の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの前記現在状態と、の間の第２のイベント実行パスは、第２の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記第１のイベント実行パスにおける前記第１の数のイベントが、前記第２のイベント実行パスにおける前記第２の数のイベントよりも少ないと判定するステップと、
前記第１の数のイベントが前記第２の数のイベントよりも少ないことに基づいて、前記第２の実行ターゲットより優先されて前記第１の実行ターゲットを選択するステップと、
をさらに含む、付記１に記載の方法。
【００６３】
（付記８）
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第１の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第１の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第１の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第１の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの初期状態と、の間の第１のイベント実行パスは、第１の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第２の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第２の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第２の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの前記初期状態と、の間の第２のイベント実行パスは、第２の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記第１のイベント実行パスにおける前記第１の数のイベントが、前記第２のイベント実行パスにおける前記第２の数のイベントよりも少ないと判定するステップと、
前記第１の数のイベントが前記第２の数のイベントよりも少ないことに基づいて、前記第２の実行ターゲットより優先されて前記第１の実行ターゲットを選択するステップと、
をさらに含む、付記１に記載の方法。
【００６４】
（付記９）
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第１の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第１の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第２の実行ターゲットが、前記部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記挙動モデルに基づいて、前記第１の実行ターゲットが、前記第２の実行ターゲットのイベントシーケンスプレフィックスよりも短いイベントシーケンスプレフィックスを有すると判定するステップと、
前記第１の実行ターゲットが、前記第２の実行ターゲットのイベントシーケンスプレフィックスよりも短いイベントシーケンスプレフィックスを有することに基づいて、前記第２の実行ターゲットより優先されて前記第１の実行ターゲットを選択するステップと、
をさらに含む、付記１に記載の方法。
【００６５】
（付記１０）
少なくとも１つの非一時的なコンピュータ読み取り可能な媒体は、１つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも１つのプロセッサにより実行されたことに応じて、システムに付記１に記載の方法を実行させる、付記１に記載の方法。
【００６６】
（付記１１）
受動学習を用いて、イベント駆動型ソフトウェアプログラムの１つ以上のイベントのシンボリック実行に応じた、前記イベント駆動型ソフトウェアプログラムの挙動に基づいて、前記イベント駆動型ソフトウェアプログラムの挙動モデルを生成するステップと、
前記挙動モデルに基づいて、実行ターゲットリストに含まれる実行ターゲットのシンボリック実行を優先順位付けするステップであって、前記実行ターゲットリストに含まれる各実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、ステップと、
前記実行ターゲットの前記シンボリック実行の優先順位付けに基づいて、前記イベント駆動型ソフトウェアプログラムを探索するステップと、
前記イベント駆動型ソフトウェアプログラムの探索に基づいて、前記イベント駆動型ソフトウェアプログラムのための複数のテストイベント実行シーケンスを生成するステップと、
を含む方法。
【００６７】
（付記１２）
前記挙動モデルは、前記シンボリック実行中に生成された構造カバレッジ情報であって、前記イベント駆動型ソフトウェアプログラムのどの部分が前記シンボリック実行中に網羅されたかを示す構造カバレッジ情報を用いて、注釈付けされる、付記１１に記載の方法。
【００６８】
（付記１３）
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記構造カバレッジ情報を更新するステップと、
前記挙動モデルの更新中に、前記の更新された構造カバレッジ情報を用いて、前記挙動モデルに注釈付けするステップと、
をさらに含む、付記１２に記載の方法。
【００６９】
（付記１４）
前記実行ターゲットのシンボリック実行を優先順位付けすることは、少なくとも部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行よりも、未探索のイベントハンドラに関連付けられている実行ターゲットの実行を高く優先順位付けすることを含む、付記１１に記載の方法。
【００７０】
（付記１５）
前記実行ターゲットのシンボリック実行を優先順位付けすることは、完全に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行よりも、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行を高く優先順位付けすることを含む、付記１１に記載の方法。
【００７１】
（付記１６）
前記実行ターゲットのシンボリック実行を優先順位付けすることは、前記イベント駆動型ソフトウェアプログラムの現在状態と、未探索のイベントハンドラに関連付けられている実行ターゲットと、の間のイベントシーケンスパスにおけるイベントの数に基づいて、前記未探索のイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、付記１１に記載の方法。
【００７２】
（付記１７）
前記実行ターゲットのシンボリック実行を優先順位付けすることは、前記イベント駆動型ソフトウェアプログラムの初期状態と未探索のイベントハンドラに関連付けられている実行ターゲットとの間のイベントシーケンスパスにおけるイベントの数に基づいて、前記未探索のイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、付記１１に記載の方法。
【００７３】
（付記１８）
前記実行ターゲットのシンボリック実行を優先順位付けすることは、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットのイベントシーケンスプレフィックスの長さに基づいて、前記部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、付記１１に記載の方法。
【００７４】
（付記１９）
少なくとも１つの非一時的なコンピュータ読み取り可能な媒体は、１つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも１つのプロセッサにより実行されたことに応じて、システムに付記１１に記載の方法を実行させる、付記１１に記載の方法。
【００７５】
（付記２０）
システムであって、
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに通信可能に接続され、命令を記憶するよう構成されている少なくとも１つの非一時的なコンピュータ読み取り可能な媒体であって、前記命令は、前記少なくとも１つのプロセッサにより実行されたことに応じて、前記システムに、
イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択する動作であって、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習を用いて生成され、前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、動作と、
前記選択に基づいて、前記実行ターゲットをシンボリック実行する動作であって、前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第１の状態から第２の状態に遷移する、動作と、
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新する動作と、
を含む複数の動作を実行させる、少なくとも１つの非一時的なコンピュータ読み取り可能な媒体と、
を有するシステム。
【符号の説明】
【００７６】
１０４  テスト対象コード
１０６  テストモジュール
１０８  テスト結果
１０２  コンピューティングシステム
１５０  プロセッサ
１５２  メモリ
１５４  データストレージ
【図１Ａ】
2018060525.tif 000003
【図１Ｂ】
2018060525.tif 000004
【図２】
2018060525.tif 000005
【図３】
2018060525.tif 000006