JP2018060525A - イベント駆動型ソフトウェアテストシーケンス決定 - Google Patents
イベント駆動型ソフトウェアテストシーケンス決定 Download PDFInfo
- Publication number
- JP2018060525A JP2018060525A JP2017147652A JP2017147652A JP2018060525A JP 2018060525 A JP2018060525 A JP 2018060525A JP 2017147652 A JP2017147652 A JP 2017147652A JP 2017147652 A JP2017147652 A JP 2017147652A JP 2018060525 A JP2018060525 A JP 2018060525A
- Authority
- JP
- Japan
- Prior art keywords
- event
- execution
- software program
- driven software
- execution target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】イベント駆動型ソフトウェアプログラムをテストする方法及びシステムを提供する。
【解決手段】イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、プログラムのイベントを含む複数の実行ターゲットからプログラムの実行ターゲットを選択し、実行ターゲットをシンボリック実行する。プログラムの挙動モデルは、プログラムのシンボリック実行中のプログラムの挙動に基づく受動学習を用いて生成され、実行ターゲットをシンボリック実行したことに基づいて更新される。プログラムは、実行ターゲットの実行に応じて、第1の状態から第2の状態に遷移し、これに伴って実行ターゲットリストを更新する。
【選択図】図2
【解決手段】イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、プログラムのイベントを含む複数の実行ターゲットからプログラムの実行ターゲットを選択し、実行ターゲットをシンボリック実行する。プログラムの挙動モデルは、プログラムのシンボリック実行中のプログラムの挙動に基づく受動学習を用いて生成され、実行ターゲットをシンボリック実行したことに基づいて更新される。プログラムは、実行ターゲットの実行に応じて、第1の状態から第2の状態に遷移し、これに伴って実行ターゲットリストを更新する。
【選択図】図2
Description
本開示に記載の実施形態は、イベント駆動型ソフトウェアテストシーケンスを決定することに関する。
ソフトウェアプログラムを妥当性確認又は検証すること等のソフトウェアをテストすることは、情報技術(IT)機関の間では一般的な活動である。例えば、ソフトウェアが、1つ以上のクライアントコンピュータシステムにおいて実行されるデスクトップアプリケーションであるか、モバイルデバイスにおいて実行されるモバイルデバイスアプリケーションであるか、又は、1つ以上のサーバコンピュータシステムにおいて実行されるウェブアプリケーションであるかにかかわらず、ソフトウェアの品質を検証することがしばしば重要である。ソフトウェアにおけるいくつかのタイプのエラーは、ユーザに対して苛立ち又は不便さを生じさせるだけであるが、他のタイプのエラーは、データ損失及び金銭的損失等の他の問題を生じさせる可能性がある。
広く至る所に存在するようになってきている1つのタイプのソフトウェアは、グラフィカルユーザインタフェース(GUI)ベースのアプリケーション及びウェブベースのアプリケーション等のイベント駆動型ソフトウェアである。イベント駆動型ソフトウェアにおいて、該ソフトウェアのフローは、ユーザアクション(マウスクリック、キー押下)、センサ出力、又は、他のプログラム/スレッドからのメッセージ等のイベントにより決定され得る。イベント駆動型ソフトウェアを使用することは、ユーザにとって、モバイルデバイス及び他のデバイスの使用を楽にすることができる。しかしながら、イベント駆動型ソフトウェアはまた、これらのプログラムの挙動を解析する際の課題を与える。
本開示において特許請求される主題は、あらゆる欠点を解決する実施形態又は上記のような環境においてのみ動作する実施形態に限定されるものではない。そうではなく、この背景技術の記載は、本開示に記載のいくつかの実施形態が実施され得る1つの例示的な技術領域を示すために提供されているに過ぎない。
本開示の一実施形態の一態様に従うと、方法は、イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択することを含み得る。前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから選択され得、前記イベント駆動型ソフトウェアプログラムのイベントを含み得る。さらに、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習(パッシブラーニング)を用いて生成され得る。本方法は、前記選択に基づいて、前記実行ターゲットをシンボリック実行することをさらに含み得る。前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第1の状態から第2の状態に遷移し得る。さらに、本方法は、前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新することを含み得る。
実施形態の目的及び利点が、少なくとも請求項において特に示される要素、特徴、及び組合せにより、実現及び達成される。
前述の総括的な説明及び以下の詳細な説明の両方ともが、説明的なものであり、例として与えられ、特許請求される発明を限定するものではないことを理解されたい。
例示的な実施形態が、添付の図面を使用して、より具体的且つ詳細に記載及び説明される。
ソフトウェアをテストすることに関する動作を実行するよう構成されている例示的なシステムを表す図。
図1Aに示されるテストモジュールを含み得る例示的な電子デバイスを示す図。
イベント駆動型ソフトウェアプログラムをテストすることに関して使用され得る例示的な方法の図。
シンボリック実行中に生成され得る例示的な挙動モデルを示す図。
本開示に記載のいくつかの実施形態は、電子デバイスのためのグラフィカルユーザインタフェース(GUI)ベースのアプリケーション、及びウェブベースのアプリケーション等のイベント駆動型ソフトウェアプログラムをテストする方法及びシステムに関する。イベント駆動型ソフトウェアプログラムのフローは、ユーザアクション(マウスクリック、キー押下)、センサ出力、又は、他のプログラム/スレッドからのメッセージ等の様々な「イベント」により決定され得る。イベント駆動型ソフトウェアプログラムは、テストシーケンスの生成に関して探索され得る、多数の異なるイベント及び対応するイベントシーケンス(例えば、イベント駆動型ソフトウェアプログラムをテストするために使用され得るイベントシーケンス)を有することがあり、これは、イベント駆動型ソフトウェアプログラムを解析してテストシーケンスを生成する際のイベントシーケンス爆発問題につながることがある。
以下で詳述されるように、挙動モデルを使用して、イベント駆動型ソフトウェアプログラムの探索を指示するのを助けることができ、これは、イベントシーケンス爆発問題を低減させるのを助けることができる。詳細には、挙動モデルが、イベント駆動型ソフトウェアプログラムのシンボリック実行中に生じた、イベント駆動型ソフトウェアプログラムの挙動に基づいて、生成され得る。さらに、挙動モデルを使用して、イベント駆動型ソフトウェアプログラムのイベントのシンボリック実行を優先順位付けすることができる。優先順位付けは、探索され得る冗長パスの数を低減させつつ、探索中のイベント駆動型ソフトウェアプログラムのカバレッジを増大させるのも助けることができる。いくつかの実施形態において、探索され得るイベント実行シーケンスを、使用され得るテストイベント実行シーケンスとして使用して、イベント駆動型ソフトウェアプログラムをテストすることができる。
本開示の実施形態が、添付の図面を参照して説明される。
図1Aは、本開示に記載の少なくとも1つの実施形態に従って構成される、ソフトウェアをテストすることに関する動作を実行するよう構成されている例示的なシステム100を表す図である。詳細には、システム100は、イベント駆動型ソフトウェアプログラムのテスト対象コード104に対してテスト動作を実行して、イベント駆動型ソフトウェアプログラムのテスト結果108を生成するよう構成されているテストモジュール106を含み得る。テスト対象コード104は、例えば、処理デバイスにより実行される、イベント駆動型ソフトウェアプログラム、イベント駆動型ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又は、他のロジック若しくは命令等の電子データを含み得る。いくつかの実施形態において、テスト対象コード104は、イベント駆動型ソフトウェアプログラムの完全なインスタンスを含み得る。これらの実施形態又は他の実施形態において、テスト対象コード104は、イベント駆動型ソフトウェアプログラムの一部を含み得る。テスト対象コード104は、イベント駆動型ソフトウェアプログラムのために使用され得る任意の適切なタイプのコンピュータ言語で記述され得る。
テスト対象コード104は、複数のソフトウェアモジュールに編成される、イベント駆動型ソフトウェアプログラムの諸部分を含み得る。ソフトウェアモジュールは、ソフトウェアモジュールの特定の機能を実行するコードを含み得る。特定の機能を実行するコードは、ソフトウェア関数と呼ばれることがある。いくつかの実施形態において、テスト対象コード104は、イベント駆動型ソフトウェアプログラムに関連付けられているイベントの発生に応じて、1つ以上のソフトウェア関数を実行することができる。例えば、テスト対象コード104は、イベント「e1」に応じて、変数「a」に対する動作を実行することができるソフトウェア関数「f1(a)」を含み得る。本開示において、イベントの発生に応じて動作を実行するソフトウェア関数は、「イベントハンドラ」と呼ばれ得る。以下の説明において、「イベントの実行」は、その対応するイベントハンドラの実行と同義であるとみなされ、これらの2つの表現は、置き換え可能に使用され得る。さらに、イベントハンドラの実行は、その実行中に1つ以上の他の関数を推移的に(transitively)呼び出して実行することがある。したがって、いくつかの実施形態において、特定のイベントハンドラの実行との言及は、特定のイベントハンドラにより呼び出される又は実行される関数の実行を含み得る。
以下で詳述されるように、テストモジュール106は、テスト対象コード104に対して一連の動作を実行して、テスト結果108を生成するよう構成され得る。例えば、テストモジュール106は、テスト対象コード104に対してシンボリック実行を行って、テスト対象コード104を探索するよう構成され得る。シンボリック実行を行うことは、テスト対象コード104のイベントをシンボリック実行することを含み得る。いくつかの実施形態において、テストモジュール106は、シンボリック実行中にテスト対象コード104の挙動モデルを生成及び更新するよう構成され得る。さらに、テストモジュール106は、挙動モデルに基づいて、シンボリック実行中にイベントの実行を優先順位付けするよう構成され得る。これらの実施形態又は他の実施形態において、テストモジュール106は、テスト結果108として、シンボリック実行中に探索され得る1つ以上のイベントシーケンスを出力するよう構成され得る。いくつかの実施形態において、テストモジュール106は、テスト対象コード104に対して、(以下で詳細に説明される)図2の方法200に関する以下で説明される1つ以上の動作を実行して、テスト結果108を生成するよう構成され得る。
図1Bは、本開示の少なくとも1つの実施形態に従った例示的なコンピューティングシステム102のブロック図を示している。コンピューティングシステム102は、テストモジュール(例えば、図1Aのテストモジュール106)に関連付けられている1つ以上の動作を実施又は指示するよう構成され得る。コンピューティングシステム102は、プロセッサ150、メモリ152、及びデータストレージ154を含み得る。プロセッサ150、メモリ152、及びデータストレージ154は、通信可能に接続され得る。
概して、プロセッサ150は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む任意の適切な専用又は汎用のコンピュータ、コンピューティングエンティティ、又は処理デバイスを含み得、任意の適用可能なコンピュータ読み取り可能な記憶媒体に記憶されている命令を実行するよう構成され得る。例えば、プロセッサ150は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又は、プログラム命令を解釈及び/又は実行し、且つ/又はデータを処理するよう構成されている任意の他のデジタル回路若しくはアナログ回路を含み得る。プロセッサ150は、図1Bにおいて1つのプロセッサとして示されているが、プロセッサ150は、本開示に記載の任意の数の動作を個別的又は集合的に実行する又は本開示に記載の任意の数の動作の実行を個別的又は集合的に指示するよう構成されている任意の数のプロセッサを含んでもよい。さらに、プロセッサのうちの1つ以上は、異なるサーバ等の1つ以上の異なる電子デバイスにおいて存在してもよい。
いくつかの実施形態において、プロセッサ150は、メモリ152、データストレージ154、又はメモリ152とデータストレージ154との両方に記憶されているプログラム命令を解釈及び/又は実行し、且つ/又は、メモリ152、データストレージ154、又はメモリ152とデータストレージ214との両方に記憶されているデータを処理するよう構成され得る。いくつかの実施形態において、プロセッサ150は、データストレージ154からプログラム命令をフェッチして、プログラム命令をメモリ152にロードすることができる。プログラム命令がメモリ152にロードされた後、プロセッサ150は、プログラム命令を実行することができる。
例えば、いくつかの実施形態において、テストモジュールは、プログラム命令として、データストレージ154に含められ得る。プロセッサ150は、データストレージ154からテストモジュールのプログラム命令をフェッチして、テストモジュールのプログラム命令をメモリ152にロードすることができる。テストモジュールのプログラム命令がメモリ152にロードされた後、プロセッサ150は、コンピューティングシステムがテストモジュールのプログラム命令により指示されるようにテストモジュールに関連付けられている動作を実施できるように、テストモジュールのプログラム命令を実行することができる。
メモリ152及びデータストレージ154は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な記憶媒体を含み得る。そのようなコンピュータ読み取り可能な記憶媒体は、プロセッサ150等の汎用又は専用のコンピュータによりアクセスされ得る任意の利用可能な媒体を含み得る。限定ではなく例として、そのようなコンピュータ読み取り可能な記憶媒体は、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的に消去可能なプログラム可能な読み取り専用メモリ(EEPROM)、コンパクトディスク読み取り専用メモリ(CD−ROM)若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、又は、コンピュータ実行可能な命令又はデータ構造の形態の特定のプログラムコードを運ぶ又は記憶するために使用され得る任意の他の記憶媒体であって、汎用又は専用のコンピュータによりアクセスされ得る任意の他の記憶媒体、を含む有形の又は非一時的なコンピュータ読み取り可能な記憶媒体を含み得る。これらの実施形態及び他の実施形態において、本出願において使用される「非一時的な」という用語は、米国連邦巡回控訴高等裁判所によるIn re Nuijten判決(500 F.3d 1346)(Fed. Cir. 2007)において特許可能な主題の範囲外であると見出されたタイプの一時的な媒体のみを含まないとして解釈されるべきである。上記の組合せも、コンピュータ読み取り可能な記憶媒体の範囲に含まれ得る。コンピュータ実行可能な命令は、例えば、プロセッサ150に所定の動作又は動作群を実行させるよう構成されている命令及びデータを含み得る。
本開示の範囲から逸脱することなく、コンピューティングシステム102に対して、変更、追加、又は省略が可能である。例えば、いくつかの実施形態において、コンピューティングシステム102は、明示的には図示又は説明されないかもしれない任意の数の他のコンポーネントを含んでもよい。
図2は、本開示に記載の少なくとも1つの実施形態に従った、イベント駆動型ソフトウェアプログラムをテストすることに関して使用され得る例示的な方法200の図である。方法200は、任意の適切なシステム、装置、又はデバイスにより実行され得る。例えば、図1Bの電子デバイス102のテストモジュール106が、方法200に関連付けられている動作のうちの1つ以上を実行できる。別個のブロック及び段階で図示されているが、方法200のブロックのうちの1つ以上に関連付けられているステップ及び動作は、具体的な実装に応じて、追加のブロックに分割されることもあるし、より少ないブロックに組み合わされることもあるし、除去されることもある。方法200は、図1Aのテスト対象コード104等のテスト対象コードとして動作し得る、イベント駆動型ソフトウェアプログラムの1つ以上の部分に対して実行され得る。さらに、方法200は、当分野において知られている、シンボリック実行の1つ以上の原理を使用して、実行され得る。
いくつかの実施形態において、方法200は、ブロック202で開始し得、ブロック202において、イベント駆動型ソフトウェアプログラムの開始ページ(opening page)がロードされ得る。ブロック204において、実行ターゲットリストが、開始ページに基づいて初期化され得る。いくつかの実施形態において、実行ターゲットリストは、実行ターゲットキューとして実装され得、実行ターゲットキューに含められている実行ターゲットが、「先入れ先出し(「FIFO」)」に基づいてシンボリック実行され得る。本開示において、「実行ターゲット」との言及は、イベント、又は、イベント駆動型ソフトウェアプログラムのシンボリック実行中に、実行のためにフラグが付けられ得る又は指定され得るイベントのイベントハンドラ内の特定の分岐、を指し得る。いくつかの実施形態において、実行ターゲットのうちの1つ以上は、シンボリック実行中に決定され得るシンボリック状態であり得る。
シンボリック状態は、エントリーポイント、又は、イベント駆動型ソフトウェアプログラムのシンボリック実行中に到達し、将来の実行のためにフラグが付けられた、(特定のイベントに対応する)特定のイベントハンドラ内の特定の分岐、を指定し得る。指定されたイベントは、該イベントにつながる先行イベントの特定のシーケンスのシンボリック実行を通じて発見されたものであり得る。上記先行イベントの各先行イベントのシンボリック実行は、当該先行イベントのイベントハンドラ内の特定のパスをシンボリック実行することに対応し得る。分岐は、「if−then−else」文等の条件文の「真」又は「偽」評価に対応し得る、可能性のある2つの実行方向のうちの1つを指し得る。いくつかの実施形態において、実行ターゲットは、(以下でさらに説明される)挙動モデルによって示される、先行イベントの特定のシーケンスにより到達可能な特定の対象イベント(event of interest)であって、示される特定のやり方で(例えば、上記先行イベントの特定のシーケンスを通じて)シンボリック実行を通じてまだ実行されていないものであり得る特定の対象イベントを指定し得る。この特定のイベントは、該イベントのイベントハンドラが、以前の探索を通じて十分には探索されていないものであり得る(例えば、そのイベントハンドラが、現在、不十分な構造カバレッジを有し得る)ので、対象であり得る。
例えば、ロードされた開始ページは、1つ以上のイベントを含み得る。ロードされた開始ページ上の上記イベントは、実行ターゲットとして、実行ターゲットリストに含められ得る。ロードされた開始ページ上の上記イベントは、任意の適切な技術を使用して判別され得る。
ブロック206において、実行ターゲットが、初期実行ターゲットリストから選択され得る。いくつかの実施形態において、ブロック206において、実行ターゲットは、初期実行ターゲットリストからランダムに選択され得る。これらの実施形態又は他の実施形態において、実行ターゲットリストは、実行ターゲットキューを含み得、実行ターゲットキューの先頭にある実行ターゲットが選択され得る。
ブロック208において、選択された実行ターゲットが、実行され得る。この例において、方法200は、ブロック206からブロック208に進み得、この方法がブロック206からブロック208に進んだことに応じて、ブロック206において選択された実行ターゲットが、ブロック208において実行され得る。本開示において、実行ターゲットの実行との言及は、実行ターゲットの一部であり得るイベントをシンボリック実行することを含み得る。例えば、いくつかの例において、選択された実行ターゲットは、該実行ターゲットの実行が単一のイベントの実行を含み得るように、該単一のイベントであり得る。他の例において、選択されたターゲットは、特定の順序でリストされた複数のイベントを含む、ターゲットイベントにつながるイベントシーケンスを含み得る。これらの例の一部において、選択された実行ターゲットの実行は、示される順序でイベントシーケンスを実行することを含み得る。さらに、いくつかの例において、選択された実行ターゲットは、実行され得るシンボリック状態を含み得る。追加的又は代替的に、いくつかの実施形態において、選択された実行ターゲットは、ブロック208において、シンボリック実行されてもよい。
ブロック210において、イベント駆動型ソフトウェアプログラムの構造カバレッジ情報が更新され得る。いくつかの実施形態において、構造カバレッジ情報は、ブロック208における、選択された実行ターゲットの実行に応じて、該実行に基づいて、更新され得る。例えば、構造カバレッジ情報は、イベント駆動型ソフトウェアプログラムのどの部分が、これまでのシンボリック実行の結果として探索又は網羅されているかを示すことができる。これらの「部分」は、ソースコードのライン(行)(ラインカバレッジ又はステートメントカバレッジ)、条件文の分岐方向(分岐カバレッジ)、又は、条件カバレッジ若しくはパスカバレッジ等の任意の他の適切な指標を指し得る。さらに、選択された実行ターゲットの実行は、以前には実行されていなかった又は呼び出されていなかった、イベント駆動型ソフトウェアプログラムのコードの部分の実行を生じさせ得る。したがって、コードの新たに実行された上記部分が、構造カバレッジ情報に追加されて、構造カバレッジ情報が更新され得る。本開示において、構造カバレッジ情報を「更新する」との言及は、以前には存在しなかった場合に、構造カバレッジ情報を初期化すること及び構造カバレッジ情報を作成することを含み得る。
ブロック212において、イベント駆動型ソフトウェアプログラムの挙動モデルが、更新され得る。いくつかの実施形態において、挙動モデルは、ブロック208における、選択された実行ターゲットの実行に応じて、該実行に基づいて、更新され得る。例えば、挙動モデルは、どのトレースのセットが探索されたかを示すことができる、イベント駆動型ソフトウェアプログラムの拡張ラベル付き遷移システム(ELTS:Extended Labeled Transition System)モデルを含み得る。トレースは、各イベントがパラメータ値の特定のセットを用いて実行される、パラメータ付きイベント(parameterized events)の特定のシーケンスの実行に対応し得る。例えば、パラメータ付きイベントは、ウェブページ上のHTMLフォームであって、送信ボタンと、送信ボタンがクリックされたときに「送信」され得る、該フォームのフィールドの各々についての値を含むパラメータと、を有する、ウェブページ上のHTMLフォーム、を含み得る。したがって、実行されたときに、トレースは、各イベントのイベントハンドラ内の特定のパスを実行し、実行の結果として、特定の出力ウェブページを生成する。挙動モデルを学習させる目的のため、トレースは、入力−出力ペアのシーケンスであって、各入力が、特定のパラメータ値を有する特定のパラメータ付きイベントであり、出力が、このコンテキストにおいて、例えば、入力のこの特定のシーケンスを実行することにより、実行の結果として生成されたウェブページの表現である、入力−出力ペアのシーケンス、により指定される。さらに、選択された実行ターゲットの実行は、追加的なトレースの探索をもたらし得る。したがって、新たに探索された前記トレースが、挙動モデルに追加されて、挙動モデルが、更新され得る。本開示において、挙動モデルを「更新する」との言及は、以前には存在しなかった場合に、挙動モデルを初期化すること及び挙動モデルを開始することを含み得る。
挙動モデルは、任意の適切な技術を使用して生成され得る。例えば、いくつかの実施形態において、挙動モデルは、BlueFringe受動モデル学習アルゴリズム等の受動学習アルゴリズムを使用して、生成され得る。追加的又は代替的に、いくつかの実施形態において、挙動モデルを更新することは、構造カバレッジ情報を用いて挙動モデルに注釈付けすることを含み得る。これらの実施形態又は他の実施形態において、挙動モデルは、シンボリック実行中に遭遇した状態と、これらの状態に関連付けられ得るイベントと、に基づいて、注釈付けされ得る。
例えば、挙動モデルにおける状態は、イベント駆動型ソフトウェアプログラムの特定の状態(例えば、特定のウェブページにアクセスすることに対応するプログラム状態)に対応し得、挙動モデルのエッジは、実行された特定のイベントに対応し得る。さらに、各イベントは、特定のイベントハンドラに対応し得る。さらに、上記で開示されたように、これらのイベントハンドラ関数のカバレッジ情報は、これまでに実行された実行に対して(例えば、これまでに生成されたトレースを通じて)更新され得る。更新された構造カバレッジ情報に基づいて、挙動モデルにおける各イベント(エッジ)は、そのそれぞれのイベントハンドラの現在のカバレッジ値を用いて、注釈付けされ得る。さらに、特定の状態において利用可能であるがまだ実行されていないイベントも、挙動モデルにおいて、同様に注釈付けされ得る。追加的又は代替的に、いくつかの例において、1つのイベントハンドラが、複数のイベントにより共有され得る。したがって、これらのイベントのうちの1つのイベントが実行されない場合であっても、この対応するイベントハンドラは、部分的に又は完全に網羅されていることがあり、それに応じて注釈付けされていることがある。
例えば、図3は、本開示の1つ以上の実施形態に従った、シンボリック実行中に生成され得る例示的な挙動モデルを示している。詳細には、図3は、第1の状態302、第2の状態304、及び第3の状態306を含み得る第1のバージョンの挙動モデル300aを示している。第1の状態302、第2の状態304、及び第3の状態306は、シンボリック実行中に第1の状態302、第2の状態304、及び第3の状態306に遭遇したことを示す構造カバレッジ情報に基づいて、シンボリック実行中に挙動モデルに追加されたものであり得る。さらに、第1の挙動モデル300aは、構造カバレッジ情報により示される、実行されたものであり得る第1のイベント及び第2のイベントを示し得る第1の探索済みのトレース310及び第2の探索済みのトレース312を含み得る。さらに、第1の挙動モデル300aは、第1の未探索のイベント及び第2の未探索のイベントにそれぞれ関連付けられ得る第1の未探索のトレース308及び第2の未探索のトレース314を含み得る。第1の未探索のトレース308及び第2の未探索のトレース314は、差異を示すために、第1の探索済みのトレース310及び第2の探索済みのトレース312とは異なって、(例えば、実線矢印ではなく破線矢印で)表現され得る。
さらに、いくつかの実施形態において、探索済みのイベントに対応するイベントハンドラのどれくらいが探索されたかを示す構造カバレッジ情報が、この挙動モデルに関連付けられ得る。例えば、第1の探索済みのイベント及び第2の探索済みのイベントに対応するイベントハンドラのライン、分岐、条件、又はパスに対応するカバレッジパーセンテージ(これは、例えば、構造カバレッジ情報において示される)を用いて、第1の探索済みのイベント及び第2の探索済みのイベントに関して注釈付けすることができる。いくつかの実施形態において、カバレッジパーセンテージは、第1の探索済みのイベント及び第2の探索済みのイベントに関して、挙動モデルのデータ構造に含められ得る。追加的又は代替的に、カバレッジパーセンテージは、挙動モデルに対応するデータマップに含められてもよい。
さらに、図3は、上記第2の未探索のイベントの実行後の第2のバージョンの挙動モデル300bであって、該実行に応じて注釈付けされる第2のバージョンの挙動モデル300bを示している。詳細には、第2の未探索のトレース314が、上記第2の未探索のイベントの実行に対応する第3の探索済みのトレース316になり得、これが、ここでは、第3の探索済みのイベントであり得る。さらに、第3の探索済みのイベントに対応するイベントハンドラのどれくらいが探索されたかを示す構造カバレッジ情報が、第2のバージョンの挙動モデル300bに関連付けられ得る。例えば、第3の探索済みのイベントに対応するイベントハンドラのカバレッジパーセンテージが、挙動モデルの対応するデータ構造又はデータマップに追加されることにより、第3の探索済みのイベントに対応するイベントハンドラのカバレッジパーセンテージを用いて、挙動モデルに対して注釈付けすることができる。
図2に戻ると、ブロック214において、実行ターゲットリストが更新され得る。例えば、イベント駆動型ソフトウェアプログラムは、選択された実行ターゲットの実行に応じて、第1の状態から第2の状態に遷移し得る。第2の状態は、実行ターゲットリストに追加され得る実行ターゲットを含み得る。さらに、いくつかの実施形態において、実行ターゲットリストを更新することは、実行ターゲットリストに含まれる実行ターゲットの実行について優先順位付けを決定することを含み得る。
これらの実施形態又は他の実施形態において、実行ターゲットリストは、優先順位付けに基づいて編成され得る。例えば、いくつかの実施形態において、実行ターゲットリストは、実行ターゲットキューとして編成され得る。より高い優先順位の実行ターゲットがより低い優先順位の実行ターゲットより優先されて選択される、実行ターゲットの相対優先順位に従って、実行ターゲットが実行ターゲットキューから選択されて実行され得るように、実行ターゲットキューは、優先順位付けに基づいて順序付けられ得る。
いくつかの実施形態において、優先順位付けは、実行ターゲットが、未探索のイベントハンドラに関連付けられているか、部分的に探索済みのイベントハンドラに関連付けられているか、又は完全に探索済みのイベントハンドラに関連付けられているか、に基づき得る。例えば、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットは、完全に探索済みのイベントハンドラに関連付けられている実行ターゲットよりも高く優先順位付けされ得、未探索のイベントハンドラに関連付けられている実行ターゲットは、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットよりも高く優先順位付けされ得る。
本開示において、実行ターゲットがイベントハンドラに関連付けられているとの言及は、イベントハンドラの少なくとも一部が、「関連付けられている」イベントの実行に応じて呼び出される又は実行されることを示し得る。さらに、未探索のイベントハンドラとの言及は、対応するイベントハンドラのどの部分も、そのときに行われているシンボリック実行中に呼び出されていない又は実行されていないことを示し得る。さらに、部分的に探索済みのイベントハンドラとの言及は、対応するイベントハンドラの全てではなく少なくとも一部が、そのときに現在行われているシンボリック実行中に呼び出された又は実行されたことを示し得る。完全に探索済みのイベントハンドラとの言及は、対応するイベントハンドラの全てが探索されたことを示し得る。上記で示されたように、「探索済み」という用語の使用は、シンボリック実行の結果として網羅され得る、イベント駆動型ソフトウェアプログラムの挙動を指し得る。さらに、上記で示されたように、網羅された挙動の決定は、ラインカバレッジ又は分岐カバレッジ等の構造カバレッジ指標に基づいて計測され得る。
追加的又は代替的に、優先順位付けは、実行ターゲットに関連付けられ得るイベントシーケンスに基づいてもよい。例えば、いくつかの実施形態において、未探索のイベントハンドラに関連付けられている実行ターゲット間の優先順位付けは、イベント駆動型ソフトウェアプログラムの初期状態又は現在状態と、対応する実行ターゲットと、の間のイベントシーケンス(実行)パスにおけるイベントの数に基づき得る。
詳細には、第1の未探索のイベントハンドラに関連付けられている第1の実行ターゲットは、第1の実行ターゲットと、イベント駆動型ソフトウェアプログラムの現在状態(又は初期状態)と、の間の第1のイベント実行パスを有し得、第1のイベント実行パスは、第1の数のイベントを含み得る。さらに、第2の未探索のイベントハンドラに関連付けられている第2の実行ターゲットは、第2の実行ターゲットと、イベント駆動型ソフトウェアプログラムの現在状態(又は初期状態)と、の間の第2のイベント実行パスを有し得、第2のイベント実行パスは、第2の数のイベントを含み得る。第2のイベント実行パスにおける第2の数のイベントは、第1のイベント実行パスにおける第1の数のイベントより多いものであり得る。第1の実行ターゲットは、第1のイベント実行パスにおける第1の数のイベントが第2のイベント実行パスにおける第2の数のイベントより少ないことに基づいて、第2の実行ターゲットよりも高く優先順位付けされ得る。いくつかの例において、第1の未探索のイベントハンドラは、第2の未探索のイベントハンドラと同じであり得る。さらに、いくつかの例において、第1の未探索のイベントハンドラは、第2の未探索のイベントハンドラとは異なり得る。
別の例として、いくつかの実施形態において、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲット間の優先順位付けは、対応する実行ターゲットのイベントシーケンス(実行)プレフィックスにおけるイベントの数に基づき得る。詳細には、第1の部分的に探索済みのイベントハンドラに関連付けられている第1の実行ターゲットは、第1のイベントシーケンスプレフィックスを有し得る。さらに、第2の部分的に探索済みのイベントハンドラに関連付けられている第2の実行ターゲットは、第1のイベントシーケンスプレフィックスよりも長い第2のイベントシーケンスプレフィックスを有し得る。この例において、第1の実行ターゲットは、第1のイベント実行プレフィックスが第2のイベント実行プレフィックスよりも短いことに基づいて、第2の実行ターゲットよりも高く優先順位付けされ得る。本開示において、イベント実行パスの長さ又はイベント実行プレフィックスの長さ(イベント実行パス長又はイベント実行プレフィックス長)との言及は、イベント実行パス又はイベント実行プレフィックスに含まれ得るイベントの数を指し得る。さらに、いくつかの例において、第1の部分的に探索済みのイベントハンドラは、第2の部分的に探索済みのイベントハンドラと同じであり得、他の例において、第1の部分的に探索済みのイベントハンドラは、第2の部分的に探索済みのイベントハンドラとは異なり得る。
いくつかの実施形態において、優先順位付けは、挙動モデルに基づいて決定され得る。例えば、上記で示されたように、挙動モデルは、実行ターゲットのうちどの実行ターゲットが、未探索のイベントハンドラ、部分的に探索済みのイベントハンドラ、及び完全に探索済みのイベントハンドラに関連付けられているかを示すことができる。追加的又は代替的に、挙動モデルは、実行ターゲットに関連付けられ得る、イベントシーケンス(例えば、イベントシーケンスプレフィックス及びイベントシーケンスパス)及びそれらの対応する長さを示してもよい。したがって、いくつかの実施形態において、どの実行ターゲットが、未探索のイベントハンドラ、部分的に探索済みのイベントハンドラ、又は完全に探索済みのイベントハンドラに関連付けられているかは、挙動モデル及びその対応する関連付け(例えば、対応するデータ構造又はデータマップの注釈)から、判定され得る。さらに、いくつかの実施形態において、イベントシーケンス及びイベントシーケンスの対応する長さも、挙動モデルから判定され得る。イベントハンドラ及びイベントシーケンス長との判定された関連付けが、上述した優先順位付けに適用され得る。このように、挙動モデルを使用して、実行ターゲットリストに含まれる実行ターゲットの実行を優先順位付けすることができる。
ブロック216において、探索のカバレッジ目標が満たされているかどうか又はリソース制約を超えているかどうかが、判定され得る。上記カバレッジ目標は、構造カバレッジ目標に対応し得、イベント駆動型ソフトウェアプログラムのライン又は分岐のカバレッジの目標量(例えば、パーセンテージ)を含み得る。上記リソース制約は、イベント駆動型ソフトウェアプログラムを探索するのにどれくらいの時間を要し得るか、又は、イベント駆動型ソフトウェアプログラムを探索する際に伴われ得る処理量に対応し得、総実行時間、部分的に探索済みのイベントハンドラを探索することにおける試行の回数、及び、実行ターゲットの最大イベントシーケンス長を含み得る。
探索のカバレッジ目標が満たされていない又はリソース制約を超えていないと判定したことに応じて、方法200は、ブロック216からブロック218に進み得る。ブロック218において、実行ターゲットが、実行ターゲットリストから選択され得る。いくつかの実施形態において、実行ターゲットは、上述した優先順位付けに基づいて、実行ターゲットリストから選択され得る。例えば、優先順位付けに基づいて編成された実行ターゲットキューの先頭にある実行ターゲットが、選択され得る。さらに、上述したように、いくつかの実施形態において、優先順位付けは、選択が挙動モデルに基づいて決定され得るように、挙動モデルに基づき得る。ブロック218において選択された実行ターゲットが、ブロック208において実行され得る。
ブロック216に戻ると、探索のカバレッジ目標が満たされている又はリソース制約を超えていると判定したことに応じて、方法200は、ブロック216からブロック220に進み得る。ブロック220において、ブロック202、204、206、208、210、212、214、216、及び218に関する動作の実行中に探索されたイベントシーケンスが、テストイベントシーケンスとして出力され得る。
したがって、方法200を使用して、挙動モデルにより指示されるシンボリック実行を用いてイベント駆動型ソフトウェアプログラムを探索することにより、イベント駆動型ソフトウェアプログラムのためのテストイベントシーケンスを決定することができる。挙動モデルによるシンボリック実行の指示は、シンボリック実行の効率性を向上させ、探索され得る冗長パスの数を低減させることができる。
本開示の範囲から逸脱することなく、方法200に対して、変更、追加、又は省略が可能である。例えば、説明された動作は、異なる順序で実行されることがある。具体的な例として、実行ターゲットリストを更新することは、新たな実行ターゲットを実行ターゲットリストに追加することを含むことがあり、優先順位付けに従って実行ターゲットリストを編成することを含まないことがある。これらの実施形態又は他の実施形態において、優先順位付けは、ブロック218において選択がなされるときに決定されることがある。さらに、説明されたステップ及び動作は、例として提供されているに過ぎず、これらのステップ及び動作のうちの一部は、開示された実施形態の本質を損なうことなく、任意的であることもあるし、より少ない動作及びアクションに組み合わされることもあるし、追加のステップ及び動作に拡張されることもある。
上記で示されたように、本開示に記載の実施形態は、以下でより詳細に説明される様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用のコンピュータ(例えば、図1Bのプロセッサ150)の使用を含み得る。さらに、上記で示されたように、本開示に記載の実施形態は、コンピュータ実行可能な命令又はデータ構造を運ぶ又は記憶するコンピュータ読み取り可能な媒体(例えば、図1Bのメモリ152)を使用して実装され得る。
本開示において使用される場合、「モジュール」又は「コンポーネント」という用語は、モジュール又はコンポーネントのアクションを実行するよう構成されている特定のハードウェア実装、及び/又は、コンピューティングシステムの汎用ハードウェア(例えば、コンピュータ読み取り可能な媒体等)に記憶され得る且つ/又はコンピューティングシステムの汎用ハードウェア(例えば、処理デバイス等)により実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを指し得る。いくつかの実施形態において、本明細書に記載の異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピューティングシステム上で実行されるオブジェクト又はプロセスとして(例えば、別個のスレッドとして)実装され得る。本明細書に記載のシステム及び方法のうちの一部は、(汎用ハードウェアに記憶される且つ/又は汎用ハードウェアにより実行される)ソフトウェアにより実装されるとして一般に説明されるが、特定のハードウェア実装又はソフトウェアと特定のハードウェア実装との組合せも可能であり企図されている。本説明において、「コンピューティングエンティティ」は、本明細書において前に定義された任意のコンピューティングシステム、又は、コンピューティングシステム上で動作する任意のモジュール又はモジュールの組合せであり得る。
本開示及び特に請求項(例えば、請求項の本体部分)において使用される用語は、一般に、「オープンな」用語であるとして意図される(例えば、「〜を備える」という用語は、「〜を備えるが、〜に限定されるものではない」として解釈されるべきであり、「〜を有する」という用語は、「少なくとも〜を有する」として解釈されるべきであり、「〜を含む」という用語は、「〜を含むが、〜に限定されるものではない」として解釈されるべきである、等)。
さらに、導入される請求項記載事項の特定の数が意図される場合、そのような意図は、当該請求項中に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、請求項中に、請求項記載事項を導入するための「少なくとも1つの」、「1つ以上の」、「〜のうちの少なくとも1つ」、及び「〜のうちの1つ以上」といった導入句の使用が含まれることがある。しかしながら、このような導入句の使用は、「a」又は「an」といった不定冠詞による請求項記載事項の導入が、同一の請求項中に「1つ以上の」又は「少なくとも1つの」といった導入句と「a」又は「an」といった不定冠詞とが含まれるとしても、当該導入された請求項記載事項を含む特定の請求項が、当該請求項記載事項を1つしか含まない実施形態に限定されることを意味するとして解釈されるべきではない(例えば、「a」及び/又は「an」は、「少なくとも1つの」又は「1つ以上の」を意味するとして解釈されるべきである)。請求項記載事項を導入するために使用される定冠詞の使用についても同じことが当てはまる。
さらに、導入される請求項記載事項の特定の数が明示的に記載されている場合であっても、そのような記載は、少なくとも記載されている数を意味するとして解釈されるべきである(例えば、他の修飾語のない「2つの記載事項」という単なる記載は、少なくとも2つの記載事項又は2つ以上の記載事項を意味する)。さらに、「A、B、及びC等のうちの少なくとも1つ」又は「A、B、及びC等のうちの1つ以上」に類する表記が使用される場合、一般に、そのような構造は、Aのみ、Bのみ、Cのみ、A及びBの両方、A及びCの両方、B及びCの両方、又は、A、B、及びCの全て、等を含むことが意図される。
さらに、2つ以上の選択可能な用語を表すいかなる離接語又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの1つ、それらの用語の組合せ、又は、それらの用語の全てを含む可能性を意図するとして理解されるべきである。例えば、「A又はB」という句は、「A」若しくは「B」又は「A及びB」の可能性を含むとして理解されるべきである。
さらに、「第1の」、「第2の」、「第3の」等といった用語は、本明細書において、特定の順序又は数の要素を意味するように必ずしも使用されるとは限らない。一般に、「第1の」、「第2の」、「第3の」等といった用語は、共通識別子としての異なる要素を区別するために使用される。「第1の」、「第2の」、「第3の」等といった用語が特定の順序を意味するという説明がなければ、これらの用語は、特定の順序を意味するとして理解されるべきではない。さらに、「第1の」、「第2の」、「第3の」等といった用語が特定の数の要素を意味するという説明がなければ、これらの用語は、特定の数の要素を意味するとして理解されるべきではない。例えば、第1のウィジェットは、第1のサイドを有するとして記載されることがあり、第2のウィジェットは、第2のサイドを有するとして記載されることがある。第2のウィジェットに関する「第2のサイド」という用語の使用は、第2のウィジェットの当該サイドを、第1のウィジェットの「第1のサイド」と区別するものであり、第2のウィジェットが2つのサイドを有することを意味するものではない。
本明細書において記載された全ての例及び条件付き言語は、当該技術を促進させるために本発明者によって寄与されるコンセプト及び本発明を読者が理解するのを助ける教育上の目的のために意図され、そのような具体的に記載された例及び条件に限定されるものではないとして解釈されるべきである。本開示の実施形態が詳細に説明されたが、それら実施形態に対する様々な変形、置換、及び変更が、本開示の主旨及び範囲から逸脱することなく可能である。
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)
イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択するステップであって、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習を用いて生成され、前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、ステップと、
前記選択に基づいて、前記実行ターゲットをシンボリック実行するステップであって、前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第1の状態から第2の状態に遷移する、ステップと、
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新するステップと、
を含む方法。
イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択するステップであって、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習を用いて生成され、前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、ステップと、
前記選択に基づいて、前記実行ターゲットをシンボリック実行するステップであって、前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第1の状態から第2の状態に遷移する、ステップと、
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新するステップと、
を含む方法。
(付記2)
前記挙動モデルは、前記シンボリック実行中に生成された構造カバレッジ情報であって、前記イベント駆動型ソフトウェアプログラムのどの部分が前記シンボリック実行中に網羅されたかを示す構造カバレッジ情報を用いて、注釈付けされる、付記1に記載の方法。
前記挙動モデルは、前記シンボリック実行中に生成された構造カバレッジ情報であって、前記イベント駆動型ソフトウェアプログラムのどの部分が前記シンボリック実行中に網羅されたかを示す構造カバレッジ情報を用いて、注釈付けされる、付記1に記載の方法。
(付記3)
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記構造カバレッジ情報を更新するステップと、
前記挙動モデルの更新中に、前記の更新された構造カバレッジ情報を用いて、前記挙動モデルに注釈付けするステップと、
をさらに含む、付記2に記載の方法。
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記構造カバレッジ情報を更新するステップと、
前記挙動モデルの更新中に、前記の更新された構造カバレッジ情報を用いて、前記挙動モデルに注釈付けするステップと、
をさらに含む、付記2に記載の方法。
(付記4)
前記イベント駆動型ソフトウェアプログラムの前記シンボリック実行に基づいて、前記イベント駆動型ソフトウェアプログラムのための複数のテストイベント実行シーケンスを生成するステップであって、前記複数のテストイベント実行シーケンスは、前記第1の状態から前記第2の状態への遷移を含む、ステップをさらに含む、付記1に記載の方法。
前記イベント駆動型ソフトウェアプログラムの前記シンボリック実行に基づいて、前記イベント駆動型ソフトウェアプログラムのための複数のテストイベント実行シーケンスを生成するステップであって、前記複数のテストイベント実行シーケンスは、前記第1の状態から前記第2の状態への遷移を含む、ステップをさらに含む、付記1に記載の方法。
(付記5)
前記挙動モデルに基づいて、前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの未探索のイベントハンドラに関連付けられていると判定するステップと、
前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの未探索のイベントハンドラに関連付けられていることと、前記複数の実行ターゲットのうちの他の実行ターゲットの各々が、前記イベント駆動型ソフトウェアプログラムの少なくとも部分的に探索済みのイベントハンドラに関連付けられていることと、に基づいて、前記他の実行ターゲットより優先されて前記実行ターゲットを選択するステップと、
をさらに含む、付記1に記載の方法。
前記挙動モデルに基づいて、前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの未探索のイベントハンドラに関連付けられていると判定するステップと、
前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの未探索のイベントハンドラに関連付けられていることと、前記複数の実行ターゲットのうちの他の実行ターゲットの各々が、前記イベント駆動型ソフトウェアプログラムの少なくとも部分的に探索済みのイベントハンドラに関連付けられていることと、に基づいて、前記他の実行ターゲットより優先されて前記実行ターゲットを選択するステップと、
をさらに含む、付記1に記載の方法。
(付記6)
前記挙動モデルに基づいて、前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていることと、前記複数の実行ターゲットのうちの他の実行ターゲットの各々が、前記イベント駆動型ソフトウェアプログラムの完全に探索済みのイベントハンドラに関連付けられていることと、に基づいて、前記他の実行ターゲットより優先されて前記実行ターゲットを選択するステップと、
をさらに含む、付記1に記載の方法。
前記挙動モデルに基づいて、前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていることと、前記複数の実行ターゲットのうちの他の実行ターゲットの各々が、前記イベント駆動型ソフトウェアプログラムの完全に探索済みのイベントハンドラに関連付けられていることと、に基づいて、前記他の実行ターゲットより優先されて前記実行ターゲットを選択するステップと、
をさらに含む、付記1に記載の方法。
(付記7)
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第1の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第1の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第1の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの現在状態と、の間の第1のイベント実行パスは、第1の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第2の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第2の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第2の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの前記現在状態と、の間の第2のイベント実行パスは、第2の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記第1のイベント実行パスにおける前記第1の数のイベントが、前記第2のイベント実行パスにおける前記第2の数のイベントよりも少ないと判定するステップと、
前記第1の数のイベントが前記第2の数のイベントよりも少ないことに基づいて、前記第2の実行ターゲットより優先されて前記第1の実行ターゲットを選択するステップと、
をさらに含む、付記1に記載の方法。
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第1の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第1の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第1の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの現在状態と、の間の第1のイベント実行パスは、第1の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第2の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第2の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第2の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの前記現在状態と、の間の第2のイベント実行パスは、第2の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記第1のイベント実行パスにおける前記第1の数のイベントが、前記第2のイベント実行パスにおける前記第2の数のイベントよりも少ないと判定するステップと、
前記第1の数のイベントが前記第2の数のイベントよりも少ないことに基づいて、前記第2の実行ターゲットより優先されて前記第1の実行ターゲットを選択するステップと、
をさらに含む、付記1に記載の方法。
(付記8)
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第1の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第1の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第1の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの初期状態と、の間の第1のイベント実行パスは、第1の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第2の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第2の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第2の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの前記初期状態と、の間の第2のイベント実行パスは、第2の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記第1のイベント実行パスにおける前記第1の数のイベントが、前記第2のイベント実行パスにおける前記第2の数のイベントよりも少ないと判定するステップと、
前記第1の数のイベントが前記第2の数のイベントよりも少ないことに基づいて、前記第2の実行ターゲットより優先されて前記第1の実行ターゲットを選択するステップと、
をさらに含む、付記1に記載の方法。
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第1の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第1の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第1の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの初期状態と、の間の第1のイベント実行パスは、第1の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第2の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第2の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第2の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの前記初期状態と、の間の第2のイベント実行パスは、第2の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記第1のイベント実行パスにおける前記第1の数のイベントが、前記第2のイベント実行パスにおける前記第2の数のイベントよりも少ないと判定するステップと、
前記第1の数のイベントが前記第2の数のイベントよりも少ないことに基づいて、前記第2の実行ターゲットより優先されて前記第1の実行ターゲットを選択するステップと、
をさらに含む、付記1に記載の方法。
(付記9)
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第1の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第2の実行ターゲットが、前記部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記第2の実行ターゲットのイベントシーケンスプレフィックスよりも短いイベントシーケンスプレフィックスを有すると判定するステップと、
前記第1の実行ターゲットが、前記第2の実行ターゲットのイベントシーケンスプレフィックスよりも短いイベントシーケンスプレフィックスを有することに基づいて、前記第2の実行ターゲットより優先されて前記第1の実行ターゲットを選択するステップと、
をさらに含む、付記1に記載の方法。
前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第1の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第2の実行ターゲットが、前記部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記第2の実行ターゲットのイベントシーケンスプレフィックスよりも短いイベントシーケンスプレフィックスを有すると判定するステップと、
前記第1の実行ターゲットが、前記第2の実行ターゲットのイベントシーケンスプレフィックスよりも短いイベントシーケンスプレフィックスを有することに基づいて、前記第2の実行ターゲットより優先されて前記第1の実行ターゲットを選択するステップと、
をさらに含む、付記1に記載の方法。
(付記10)
少なくとも1つの非一時的なコンピュータ読み取り可能な媒体は、1つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも1つのプロセッサにより実行されたことに応じて、システムに付記1に記載の方法を実行させる、付記1に記載の方法。
少なくとも1つの非一時的なコンピュータ読み取り可能な媒体は、1つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも1つのプロセッサにより実行されたことに応じて、システムに付記1に記載の方法を実行させる、付記1に記載の方法。
(付記11)
受動学習を用いて、イベント駆動型ソフトウェアプログラムの1つ以上のイベントのシンボリック実行に応じた、前記イベント駆動型ソフトウェアプログラムの挙動に基づいて、前記イベント駆動型ソフトウェアプログラムの挙動モデルを生成するステップと、
前記挙動モデルに基づいて、実行ターゲットリストに含まれる実行ターゲットのシンボリック実行を優先順位付けするステップであって、前記実行ターゲットリストに含まれる各実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、ステップと、
前記実行ターゲットの前記シンボリック実行の優先順位付けに基づいて、前記イベント駆動型ソフトウェアプログラムを探索するステップと、
前記イベント駆動型ソフトウェアプログラムの探索に基づいて、前記イベント駆動型ソフトウェアプログラムのための複数のテストイベント実行シーケンスを生成するステップと、
を含む方法。
受動学習を用いて、イベント駆動型ソフトウェアプログラムの1つ以上のイベントのシンボリック実行に応じた、前記イベント駆動型ソフトウェアプログラムの挙動に基づいて、前記イベント駆動型ソフトウェアプログラムの挙動モデルを生成するステップと、
前記挙動モデルに基づいて、実行ターゲットリストに含まれる実行ターゲットのシンボリック実行を優先順位付けするステップであって、前記実行ターゲットリストに含まれる各実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、ステップと、
前記実行ターゲットの前記シンボリック実行の優先順位付けに基づいて、前記イベント駆動型ソフトウェアプログラムを探索するステップと、
前記イベント駆動型ソフトウェアプログラムの探索に基づいて、前記イベント駆動型ソフトウェアプログラムのための複数のテストイベント実行シーケンスを生成するステップと、
を含む方法。
(付記12)
前記挙動モデルは、前記シンボリック実行中に生成された構造カバレッジ情報であって、前記イベント駆動型ソフトウェアプログラムのどの部分が前記シンボリック実行中に網羅されたかを示す構造カバレッジ情報を用いて、注釈付けされる、付記11に記載の方法。
前記挙動モデルは、前記シンボリック実行中に生成された構造カバレッジ情報であって、前記イベント駆動型ソフトウェアプログラムのどの部分が前記シンボリック実行中に網羅されたかを示す構造カバレッジ情報を用いて、注釈付けされる、付記11に記載の方法。
(付記13)
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記構造カバレッジ情報を更新するステップと、
前記挙動モデルの更新中に、前記の更新された構造カバレッジ情報を用いて、前記挙動モデルに注釈付けするステップと、
をさらに含む、付記12に記載の方法。
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記構造カバレッジ情報を更新するステップと、
前記挙動モデルの更新中に、前記の更新された構造カバレッジ情報を用いて、前記挙動モデルに注釈付けするステップと、
をさらに含む、付記12に記載の方法。
(付記14)
前記実行ターゲットのシンボリック実行を優先順位付けすることは、少なくとも部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行よりも、未探索のイベントハンドラに関連付けられている実行ターゲットの実行を高く優先順位付けすることを含む、付記11に記載の方法。
前記実行ターゲットのシンボリック実行を優先順位付けすることは、少なくとも部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行よりも、未探索のイベントハンドラに関連付けられている実行ターゲットの実行を高く優先順位付けすることを含む、付記11に記載の方法。
(付記15)
前記実行ターゲットのシンボリック実行を優先順位付けすることは、完全に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行よりも、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行を高く優先順位付けすることを含む、付記11に記載の方法。
前記実行ターゲットのシンボリック実行を優先順位付けすることは、完全に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行よりも、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行を高く優先順位付けすることを含む、付記11に記載の方法。
(付記16)
前記実行ターゲットのシンボリック実行を優先順位付けすることは、前記イベント駆動型ソフトウェアプログラムの現在状態と、未探索のイベントハンドラに関連付けられている実行ターゲットと、の間のイベントシーケンスパスにおけるイベントの数に基づいて、前記未探索のイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、付記11に記載の方法。
前記実行ターゲットのシンボリック実行を優先順位付けすることは、前記イベント駆動型ソフトウェアプログラムの現在状態と、未探索のイベントハンドラに関連付けられている実行ターゲットと、の間のイベントシーケンスパスにおけるイベントの数に基づいて、前記未探索のイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、付記11に記載の方法。
(付記17)
前記実行ターゲットのシンボリック実行を優先順位付けすることは、前記イベント駆動型ソフトウェアプログラムの初期状態と未探索のイベントハンドラに関連付けられている実行ターゲットとの間のイベントシーケンスパスにおけるイベントの数に基づいて、前記未探索のイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、付記11に記載の方法。
前記実行ターゲットのシンボリック実行を優先順位付けすることは、前記イベント駆動型ソフトウェアプログラムの初期状態と未探索のイベントハンドラに関連付けられている実行ターゲットとの間のイベントシーケンスパスにおけるイベントの数に基づいて、前記未探索のイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、付記11に記載の方法。
(付記18)
前記実行ターゲットのシンボリック実行を優先順位付けすることは、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットのイベントシーケンスプレフィックスの長さに基づいて、前記部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、付記11に記載の方法。
前記実行ターゲットのシンボリック実行を優先順位付けすることは、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットのイベントシーケンスプレフィックスの長さに基づいて、前記部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、付記11に記載の方法。
(付記19)
少なくとも1つの非一時的なコンピュータ読み取り可能な媒体は、1つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも1つのプロセッサにより実行されたことに応じて、システムに付記11に記載の方法を実行させる、付記11に記載の方法。
少なくとも1つの非一時的なコンピュータ読み取り可能な媒体は、1つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも1つのプロセッサにより実行されたことに応じて、システムに付記11に記載の方法を実行させる、付記11に記載の方法。
(付記20)
システムであって、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサに通信可能に接続され、命令を記憶するよう構成されている少なくとも1つの非一時的なコンピュータ読み取り可能な媒体であって、前記命令は、前記少なくとも1つのプロセッサにより実行されたことに応じて、前記システムに、
イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択する動作であって、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習を用いて生成され、前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、動作と、
前記選択に基づいて、前記実行ターゲットをシンボリック実行する動作であって、前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第1の状態から第2の状態に遷移する、動作と、
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新する動作と、
を含む複数の動作を実行させる、少なくとも1つの非一時的なコンピュータ読み取り可能な媒体と、
を有するシステム。
システムであって、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサに通信可能に接続され、命令を記憶するよう構成されている少なくとも1つの非一時的なコンピュータ読み取り可能な媒体であって、前記命令は、前記少なくとも1つのプロセッサにより実行されたことに応じて、前記システムに、
イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択する動作であって、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習を用いて生成され、前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、動作と、
前記選択に基づいて、前記実行ターゲットをシンボリック実行する動作であって、前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第1の状態から第2の状態に遷移する、動作と、
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新する動作と、
を含む複数の動作を実行させる、少なくとも1つの非一時的なコンピュータ読み取り可能な媒体と、
を有するシステム。
104 テスト対象コード
106 テストモジュール
108 テスト結果
102 コンピューティングシステム
150 プロセッサ
152 メモリ
154 データストレージ
106 テストモジュール
108 テスト結果
102 コンピューティングシステム
150 プロセッサ
152 メモリ
154 データストレージ
Claims (20)
- イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択するステップであって、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習を用いて生成され、前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、ステップと、
前記選択に基づいて、前記実行ターゲットをシンボリック実行するステップであって、前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第1の状態から第2の状態に遷移する、ステップと、
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新するステップと、
を含む方法。 - 前記挙動モデルは、前記シンボリック実行中に生成された構造カバレッジ情報であって、前記イベント駆動型ソフトウェアプログラムのどの部分が前記シンボリック実行中に網羅されたかを示す構造カバレッジ情報を用いて、注釈付けされる、請求項1に記載の方法。
- 前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記構造カバレッジ情報を更新するステップと、
前記挙動モデルの更新中に、前記の更新された構造カバレッジ情報を用いて、前記挙動モデルに注釈付けするステップと、
をさらに含む、請求項2に記載の方法。 - 前記イベント駆動型ソフトウェアプログラムの前記シンボリック実行に基づいて、前記イベント駆動型ソフトウェアプログラムのための複数のテストイベント実行シーケンスを生成するステップであって、前記複数のテストイベント実行シーケンスは、前記第1の状態から前記第2の状態への遷移を含む、ステップをさらに含む、請求項1に記載の方法。
- 前記挙動モデルに基づいて、前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの未探索のイベントハンドラに関連付けられていると判定するステップと、
前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの未探索のイベントハンドラに関連付けられていることと、前記複数の実行ターゲットのうちの他の実行ターゲットの各々が、前記イベント駆動型ソフトウェアプログラムの少なくとも部分的に探索済みのイベントハンドラに関連付けられていることと、に基づいて、前記他の実行ターゲットより優先されて前記実行ターゲットを選択するステップと、
をさらに含む、請求項1に記載の方法。 - 前記挙動モデルに基づいて、前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていることと、前記複数の実行ターゲットのうちの他の実行ターゲットの各々が、前記イベント駆動型ソフトウェアプログラムの完全に探索済みのイベントハンドラに関連付けられていることと、に基づいて、前記他の実行ターゲットより優先されて前記実行ターゲットを選択するステップと、
をさらに含む、請求項1に記載の方法。 - 前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第1の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第1の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第1の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの現在状態と、の間の第1のイベント実行パスは、第1の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第2の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第2の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第2の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの前記現在状態と、の間の第2のイベント実行パスは、第2の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記第1のイベント実行パスにおける前記第1の数のイベントが、前記第2のイベント実行パスにおける前記第2の数のイベントよりも少ないと判定するステップと、
前記第1の数のイベントが前記第2の数のイベントよりも少ないことに基づいて、前記第2の実行ターゲットより優先されて前記第1の実行ターゲットを選択するステップと、
をさらに含む、請求項1に記載の方法。 - 前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第1の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第1の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第1の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの初期状態と、の間の第1のイベント実行パスは、第1の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第2の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの第2の未探索のイベントハンドラに関連付けられていると判定するステップであって、前記第2の実行ターゲットと、前記イベント駆動型ソフトウェアプログラムの前記初期状態と、の間の第2のイベント実行パスは、第2の数のイベントを含む、ステップと、
前記挙動モデルに基づいて、前記第1のイベント実行パスにおける前記第1の数のイベントが、前記第2のイベント実行パスにおける前記第2の数のイベントよりも少ないと判定するステップと、
前記第1の数のイベントが前記第2の数のイベントよりも少ないことに基づいて、前記第2の実行ターゲットより優先されて前記第1の実行ターゲットを選択するステップと、
をさらに含む、請求項1に記載の方法。 - 前記の選択された実行ターゲットは、前記複数の実行ターゲットのうちの第1の実行ターゲットであり、前記方法は、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記イベント駆動型ソフトウェアプログラムの部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記挙動モデルに基づいて、前記複数の実行ターゲットのうちの第2の実行ターゲットが、前記部分的に探索済みのイベントハンドラに関連付けられていると判定するステップと、
前記挙動モデルに基づいて、前記第1の実行ターゲットが、前記第2の実行ターゲットのイベントシーケンスプレフィックスよりも短いイベントシーケンスプレフィックスを有すると判定するステップと、
前記第1の実行ターゲットが、前記第2の実行ターゲットのイベントシーケンスプレフィックスよりも短いイベントシーケンスプレフィックスを有することに基づいて、前記第2の実行ターゲットより優先されて前記第1の実行ターゲットを選択するステップと、
をさらに含む、請求項1に記載の方法。 - 少なくとも1つの非一時的なコンピュータ読み取り可能な媒体は、1つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも1つのプロセッサにより実行されたことに応じて、システムに請求項1に記載の方法を実行させる、請求項1に記載の方法。
- 受動学習を用いて、イベント駆動型ソフトウェアプログラムの1つ以上のイベントのシンボリック実行に応じた、前記イベント駆動型ソフトウェアプログラムの挙動に基づいて、前記イベント駆動型ソフトウェアプログラムの挙動モデルを生成するステップと、
前記挙動モデルに基づいて、実行ターゲットリストに含まれる実行ターゲットのシンボリック実行を優先順位付けするステップであって、前記実行ターゲットリストに含まれる各実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、ステップと、
前記実行ターゲットの前記シンボリック実行の優先順位付けに基づいて、前記イベント駆動型ソフトウェアプログラムを探索するステップと、
前記イベント駆動型ソフトウェアプログラムの探索に基づいて、前記イベント駆動型ソフトウェアプログラムのための複数のテストイベント実行シーケンスを生成するステップと、
を含む方法。 - 前記挙動モデルは、前記シンボリック実行中に生成された構造カバレッジ情報であって、前記イベント駆動型ソフトウェアプログラムのどの部分が前記シンボリック実行中に網羅されたかを示す構造カバレッジ情報を用いて、注釈付けされる、請求項11に記載の方法。
- 前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記構造カバレッジ情報を更新するステップと、
前記挙動モデルの更新中に、前記の更新された構造カバレッジ情報を用いて、前記挙動モデルに注釈付けするステップと、
をさらに含む、請求項12に記載の方法。 - 前記実行ターゲットのシンボリック実行を優先順位付けすることは、少なくとも部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行よりも、未探索のイベントハンドラに関連付けられている実行ターゲットの実行を高く優先順位付けすることを含む、請求項11に記載の方法。
- 前記実行ターゲットのシンボリック実行を優先順位付けすることは、完全に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行よりも、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行を高く優先順位付けすることを含む、請求項11に記載の方法。
- 前記実行ターゲットのシンボリック実行を優先順位付けすることは、前記イベント駆動型ソフトウェアプログラムの現在状態と、未探索のイベントハンドラに関連付けられている実行ターゲットと、の間のイベントシーケンスパスにおけるイベントの数に基づいて、前記未探索のイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、請求項11に記載の方法。
- 前記実行ターゲットのシンボリック実行を優先順位付けすることは、前記イベント駆動型ソフトウェアプログラムの初期状態と未探索のイベントハンドラに関連付けられている実行ターゲットとの間のイベントシーケンスパスにおけるイベントの数に基づいて、前記未探索のイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、請求項11に記載の方法。
- 前記実行ターゲットのシンボリック実行を優先順位付けすることは、部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットのイベントシーケンスプレフィックスの長さに基づいて、前記部分的に探索済みのイベントハンドラに関連付けられている実行ターゲットの実行を優先順位付けすることを含む、請求項11に記載の方法。
- 少なくとも1つの非一時的なコンピュータ読み取り可能な媒体は、1つ以上の命令を記憶するよう構成されており、前記命令は、少なくとも1つのプロセッサにより実行されたことに応じて、システムに請求項11に記載の方法を実行させる、請求項11に記載の方法。
- システムであって、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサに通信可能に接続され、命令を記憶するよう構成されている少なくとも1つの非一時的なコンピュータ読み取り可能な媒体であって、前記命令は、前記少なくとも1つのプロセッサにより実行されたことに応じて、前記システムに、
イベント駆動型ソフトウェアプログラムの挙動モデルに基づいて、前記イベント駆動型ソフトウェアプログラムの複数の実行ターゲットから、前記イベント駆動型ソフトウェアプログラムの実行ターゲットを選択する動作であって、前記挙動モデルは、前記イベント駆動型ソフトウェアプログラムのシンボリック実行中の前記イベント駆動型ソフトウェアプログラムの挙動に基づく受動学習を用いて生成され、前記実行ターゲットは、前記イベント駆動型ソフトウェアプログラムのイベントを含む、動作と、
前記選択に基づいて、前記実行ターゲットをシンボリック実行する動作であって、前記イベント駆動型ソフトウェアプログラムは、前記実行ターゲットの実行に応じて、第1の状態から第2の状態に遷移する、動作と、
前記実行ターゲットをシンボリック実行したことに基づいて、前記イベント駆動型ソフトウェアプログラムの前記挙動モデルを更新する動作と、
を含む複数の動作を実行させる、少なくとも1つの非一時的なコンピュータ読み取り可能な媒体と、
を有するシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/284,068 US10176086B2 (en) | 2016-10-03 | 2016-10-03 | Event-driven software test sequence determination |
US15/284,068 | 2016-10-03 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2018060525A true JP2018060525A (ja) | 2018-04-12 |
Family
ID=61758121
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017147652A Pending JP2018060525A (ja) | 2016-10-03 | 2017-07-31 | イベント駆動型ソフトウェアテストシーケンス決定 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10176086B2 (ja) |
JP (1) | JP2018060525A (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10713152B2 (en) * | 2017-06-28 | 2020-07-14 | Sap Se | Automated path generator for optimized application testing |
US10671517B2 (en) * | 2017-12-15 | 2020-06-02 | International Business Machines Corporation | Generating mobile test sequences |
US10635576B2 (en) * | 2018-06-18 | 2020-04-28 | Fujitsu Limited | Branch coverage guided symbolic execution for hybrid fuzz testing of software binaries |
CN113010158B (zh) * | 2021-03-18 | 2022-09-06 | 中国科学技术大学 | 纯状态的触发动作编程范式到事件驱动系统的转换方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014127091A (ja) * | 2012-12-27 | 2014-07-07 | Fujitsu Ltd | テストデータ生成方法、プログラム及び装置 |
JP2016100002A (ja) * | 2014-11-18 | 2016-05-30 | 富士通株式会社 | 組み合わせ計算によるイベント駆動ソフトウェアのイベント・シーケンス構築 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030110474A1 (en) * | 2001-12-06 | 2003-06-12 | International Business Machines Corporation | System for coverability analysis |
US7779302B2 (en) * | 2004-08-10 | 2010-08-17 | International Business Machines Corporation | Automated testing framework for event-driven systems |
US8966453B1 (en) * | 2010-11-24 | 2015-02-24 | ECOLE POLYTECHNIQUE FéDéRALE DE LAUSANNE | Automatic generation of program execution that reaches a given failure point |
US9135405B2 (en) * | 2011-05-26 | 2015-09-15 | Carnegie Mellon University | Automated exploit generation |
US9058427B2 (en) * | 2012-07-16 | 2015-06-16 | Fujitsu Limited | Iterative generation of symbolic test drivers for object-oriented languages |
US8856751B2 (en) * | 2012-09-20 | 2014-10-07 | Fujitsu Limited | Abstract symbolic execution for scaling symbolic execution generation and automatic test generation |
US8683494B1 (en) * | 2012-10-31 | 2014-03-25 | Fujitsu Limited | Constructing event sequences in event-driven programs |
US9715440B2 (en) * | 2012-12-19 | 2017-07-25 | Microsoft Technology Licensing, Llc | Test scope determination based on code change(s) |
JP6003699B2 (ja) * | 2013-02-08 | 2016-10-05 | 富士通株式会社 | テストデータ生成プログラム、方法及び装置 |
CN103559122B (zh) * | 2013-10-14 | 2016-04-27 | 西安交通大学 | 基于程序行为切片的测试案例约减方法 |
US9983977B2 (en) * | 2014-02-26 | 2018-05-29 | Western Michigan University Research Foundation | Apparatus and method for testing computer program implementation against a design model |
EP2940586B1 (en) * | 2014-04-29 | 2023-03-01 | Hitachi, Ltd. | Method and system for testing control software of a controlled system |
US9396095B2 (en) * | 2014-05-15 | 2016-07-19 | Fujitsu Limited | Software verification |
US9619375B2 (en) * | 2014-05-23 | 2017-04-11 | Carnegie Mellon University | Methods and systems for automatically testing software |
US10078502B2 (en) * | 2014-06-19 | 2018-09-18 | Fujitsu Limited | Verification of a model of a GUI-based application |
US9767290B2 (en) * | 2015-03-05 | 2017-09-19 | Fujitsu Limited | Autonomous reasoning system for vulnerability analysis |
US9658938B2 (en) * | 2015-03-30 | 2017-05-23 | Fujtsu Limited | Iterative test generation based on data source analysis |
US20180181485A1 (en) * | 2015-04-28 | 2018-06-28 | Hitachi, Ltd. | Source code equivalence verification device and source code equivalence verification method |
US9811448B2 (en) * | 2015-12-18 | 2017-11-07 | Fujitsu Limited | Event-driven software testing |
-
2016
- 2016-10-03 US US15/284,068 patent/US10176086B2/en not_active Expired - Fee Related
-
2017
- 2017-07-31 JP JP2017147652A patent/JP2018060525A/ja active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014127091A (ja) * | 2012-12-27 | 2014-07-07 | Fujitsu Ltd | テストデータ生成方法、プログラム及び装置 |
JP2016100002A (ja) * | 2014-11-18 | 2016-05-30 | 富士通株式会社 | 組み合わせ計算によるイベント駆動ソフトウェアのイベント・シーケンス構築 |
Non-Patent Citations (4)
Title |
---|
上原忠弘: "シンボリック実行を活用した網羅的テストケース生成", FUJITSU, vol. 66, no. 5, JPN6021021657, 1 September 2015 (2015-09-01), JP, pages 34 - 40, ISSN: 0004524261 * |
公下亮佑 ほか: "組込みCISCマイコンのアセンブリプログラムに対する振舞い抽出器の開発とモデル検査への適用", 信学技報, vol. 113, no. 269, JPN6021021654, 17 October 2013 (2013-10-17), pages 7 - 12, ISSN: 0004524260 * |
公下亮佑 ほか: "記号実行による組込みアセンブリプログラムのソフトウェアモデル検査", 信学技報, vol. 115, no. 90, JPN6021021653, 10 June 2015 (2015-06-10), JP, pages 77 - 81, ISSN: 0004524259 * |
川勝則孝 ほか: "モデルベース開発に向けたソースコードからの状態遷移モデル抽出技術", 東芝レビュー, vol. 第69巻,第8号, JPN6021021652, 1 August 2014 (2014-08-01), JP, pages 47 - 51, ISSN: 0004524258 * |
Also Published As
Publication number | Publication date |
---|---|
US10176086B2 (en) | 2019-01-08 |
US20180095865A1 (en) | 2018-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7200661B2 (ja) | 並行脆弱性検出 | |
EP2420931B1 (en) | Solving hybrid constraints to generate test cases for validating a software module | |
JP5786511B2 (ja) | ソフトウェア・モジュールの仕様要件を検証するためのハイブリッド制約条件の求解 | |
JP2018060525A (ja) | イベント駆動型ソフトウェアテストシーケンス決定 | |
EP2420932B1 (en) | Solving hybrid constraints to validate a security software module for detecting injection attacks | |
JP2019021303A (ja) | ソフトウェアプログラムフォールト位置特定 | |
US11204859B2 (en) | Partial-results post-silicon hardware exerciser | |
US20160140017A1 (en) | Using linked data to determine package quality | |
US9396095B2 (en) | Software verification | |
JP2018005890A (ja) | 未知のプログラムバイナリのための入力発見 | |
Sargsyan et al. | Directed fuzzing based on program dynamic instrumentation | |
JP2018055676A (ja) | 自動ソフトウェアプログラム修復 | |
US9064042B2 (en) | Instrumenting computer program code by merging template and target code methods | |
US9218273B2 (en) | Automatic generation of a resource reconfiguring test | |
US8909992B2 (en) | Dynamic concolic execution of an application | |
JP6476777B2 (ja) | テストコンテキストの生成 | |
US9430196B2 (en) | Message inlining | |
CN108469987B (zh) | 一种基于中断控制流图的中断验证系统 | |
Luckow et al. | Symbolic pathfinder v7 | |
JP2016012343A (ja) | 自動抽象化を有するシンボリック実行 | |
Garashchenko et al. | System of Combined Specialized Test Generators for the New Generation of VLIW DSP Processors with Elcore50 Architecture | |
JP6723483B2 (ja) | テストケース生成装置、テストケース生成方法およびテストケース生成プログラム | |
JP2017041196A (ja) | スタブ化対象判定装置、方法、及びプログラム | |
Puhan et al. | Program crash analysis based on taint analysis | |
JP6473023B2 (ja) | 性能評価モジュール及びこれを組み込んだ半導体集積回路 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20200514 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20210426 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20210608 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20211207 |