JP2015219906A - ソフトウェア確認方法およびプロセッサ - Google Patents
ソフトウェア確認方法およびプロセッサ Download PDFInfo
- Publication number
- JP2015219906A JP2015219906A JP2015056783A JP2015056783A JP2015219906A JP 2015219906 A JP2015219906 A JP 2015219906A JP 2015056783 A JP2015056783 A JP 2015056783A JP 2015056783 A JP2015056783 A JP 2015056783A JP 2015219906 A JP2015219906 A JP 2015219906A
- Authority
- JP
- Japan
- Prior art keywords
- functions
- cluster
- function
- specific
- coverage
- 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/3676—Test management for coverage analysis
-
- 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
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
【課題】処理時間および使用する処理資源を低減したソフトウェア確認方法を実現する。
【解決手段】分類モジュール130は、多重ファンクション120を含むソフトウェアプログラム110の一部を受け取る。分類モジュール130は、複数のファンクションを2つ以上のファンクションのクラスタ140に分類し、クラスタのそれぞれについて、シンボリック実行エンジン150がシンボリックドライバ152を生成する。ファンクションのクラスタ140は、シンボリックドライバ152を使用してシンボリックに実行され、クラスタ内のファンクションについて具体的なテストケース160を生成する。ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または具体的なテストケースの数が特定の数より大きいことに応答して、分類モジュール130はファンクションを再分類する。
【選択図】図1
【解決手段】分類モジュール130は、多重ファンクション120を含むソフトウェアプログラム110の一部を受け取る。分類モジュール130は、複数のファンクションを2つ以上のファンクションのクラスタ140に分類し、クラスタのそれぞれについて、シンボリック実行エンジン150がシンボリックドライバ152を生成する。ファンクションのクラスタ140は、シンボリックドライバ152を使用してシンボリックに実行され、クラスタ内のファンクションについて具体的なテストケース160を生成する。ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または具体的なテストケースの数が特定の数より大きいことに応答して、分類モジュール130はファンクションを再分類する。
【選択図】図1
Description
ここで説明する実施形態は、ソフトウェアの確認に関する。
電子デバイスの使用の増加に伴って、これらのデバイスで動作するソフトウェアプログラム数が増加している。典型的には、ソフトウェアプログラムが開発される場合、ソフトウェアプログラムが所定の要求をすべて満たすことを保証する助けになるように確認される。ソフトウェアプログラムがすべての所定の要求を満たすか否かを決定するために具体的なテストケースを開発および実行することは、難しく、時間を要する。
ここで請求する主題は、上記のような欠点を解決またはそのような環境においてのみ動作する実施形態に限定されない。むしろ、この背景は、ここで説明するいくつかの実施形態が実行される技術分野の一例を説明するためにのみ提供される。
実施形態の第1の態様によれば、ソフトウェア確認方法は、多重ファンクションを含むソフトウェアプログラムの一部を受け取ることを有する。この方法は、ファンクションを、ファンクションの2つ以上のクラスタに分類すること、および、ファンクションのクラスタのそれぞれについて多重シンボリックドライバが生成されるように、シンボリックドライバを生成することを有する。ファンクションのクラスタは、シンボリックドライバを使用してシンボリックに実行され、クラスタ内のファンクションについて具体的なテストケースを生成する。ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または具体的なテストケースの数が具体的なテストケースの特定の数より大きいことに応答して、方法は、ファンクションを再分類することを有する。
実施形態の目的および利点は、少なくとも請求範囲で特に指摘された要素、特徴および組合せにより、実現および達成される。
上記の一般的な説明および以下の詳細な説明の両方は、例示および説明のためであり、請求された本発明を限定されるものでないことが理解されるべきである。
例示の実施形態は、付属の図面を使用して、本発明の実施形態の詳細な説明は、付加的な特別な例および詳細により、記述および説明される。
ここで説明するいくつかの実施形態は、ソフトウェアプログラムを確認する方法およびシステムに関係する。確認されるソフトウェアプログラムは、ソフトウェアプログラム内で多重実行パスの一部を形成する多重機能(多重ファンクション:multiple functions)を有する。このファンクションに沿って、各種の他の要素が、条件(conditional)ステートメント、割り当て(assignment)ステートメントのようなソフトウェアステートメント、およびソフトウェアコードの他の部分を含む実行パスの一部を形成する。
いくつかの実施形態では、ソフトウェアプログラムは、ソフトウェアプログラムのファンクションを、ファンクションの2つ以上のクラスタ(cluster)に分類することにより確認される。ファンクションのクラスタのそれぞれについて、シンボリックドライバが生成される。シンボリックドライバは、ソフトウェアプログラムのファンクションをシンボリックに実行するように、シンボリック実行エンジンにより使用されるソフトウェアコードを有する。ファンクションのクラスタは、シンボリックドライバを使用してシンボリックに実行され、クラスタ内のファンクションについて具体的なテストケースを生成する。
具体的なテストケースを生成した後、シンボリック実行エンジンによる出力として、ファンクションのクラスタのシンボリックな実行のカバレッジ(coverage)は、ファンクションのクラスタの特定のカバレッジと比較され、特定のカバレッジより小さいカバレッジに対して、ファンクションは再分類され、新しいシンボリックドライバが生成され、ソフトウェアプログラムは再びシンボリックに実行される。それとは別に又はさらに、ファンクションのクラスタのシンボリックな実行の結果である具体的なテストケースの個数が具体的なテストケースの所望の個数より多いことに対して、ファンクションは再分類され、新しいシンボリックドライバが生成され、ソフトウェアプログラムは再びシンボリックに実行される。いくつかの実施形態では、ファンクションのクラスタのシンボリックな実行の結果である具体的なテストケースの個数が具体的なテストケースの所望の個数より少ないこと、およびカバレッジが特定のカバレッジより多いことに対して、具体的なテストケースがソフトウェアプログラムを確認するのに使用される。
いくつかの実施形態では、シンボリックな実行のためにファンクションを分類することは、生成される具体的なテストケースの個数と同様に、生成されるシンボリックドライバの個数を減少させる。シンボリックドライバの生成および具体的なテストケースの実行は、時間および/または処理資源を消費する。その結果、生成されるシンボリックドライバおよび具体的なテストケースの個数の減少は、ソフトウェアプログラムの確認に使用される時間および/または処理資源を減少させる。
一般に、具体的な実行は、ソフトウェアプログラムの各種の入力についての各種の値を使用したソフトウェアプログラムの実行である。具体的な値および/または具体的な入力は、整数、実数、ストリング、文字、真/偽、および他の任意の実値を含む。具体的な入力の単一セットでのソフトウェアプログラムの具体的な実行は、ソフトウェアプログラムを通しての単一実行パスに従う。具体的な実行およびその結果の出力は、ソフトウェアプログラム内でエラーが発生するかもしれないおよび/または発生した時、またはソフトウェアプログラムの他の解析を実行することにより、決定されるように試験される。
シンボリックな実行は、コンピュータまたはプロセッサのような機械を使用し、シンボリックな形式の数学的な方程式および表現を操作するシンボリックな評価から導出される公式のソフトウェア確認技術である。ソフトウェアプログラムをシンボリックに実行するため、値のセットを表現するシンボルは、数、ストリング、真/偽のようなソフトウェアのための個別の具体的な入力値を置き換える。このような変数を操作するのに使用される関数は、関数のシンボリックバージョンで置き換えられ、それらは具体的な値の代わりにシンボリックな式およびシンボルを操作する。そして、ソフトウェアプログラムは、通常実行されるように実行される。組織的(システマチック)な解析が発生されたシンボリックな式で実行され、前に説明したようにソフトウェアプログラムを実行し、ソフトウェアプログラムの機能性を確認するのに使用される具体的なテストケースを生成する。
本発明の実施形態は、付属の図面を参照して説明される。
図1は、ここで説明する実施形態の少なくとも1つにしたがって配置された、ソフトウェアプログラム110を確認するための例示のシステム100である。システム100は、分類モジュール130と、シンボリック実行エンジン150と、決定モジュール170と、を有する。
確認するソフトウェアプログラム110は、ファンクション120を含むC++、C、C#、Java(登録商標)またはいくつかの他のプログラミング言語を有する。ファンクション120のそれぞれは、特定のタスクを実行するソフトウェアプログラム110の命名セクションを有する。いくつかの実施形態では、ファンクション120は、プロシデュア(procedures)またはルーチン(routines)として参照される。ファンクション120は、ソフトウェアプログラム110内の1つ以上のロケーションから実行、すなわち呼び出される。例えば、ファンクション120は、条件ステートメント内、割り当て内、他の1つ以上のファンクション120内、および/またはソフトウェアプログラム110の他の部分内で、実行される。いくつかの実施形態では、ファンクション120は、1つ以上の値を返すかまたは値を返さない。いくつかの実施形態では、ファンクション120は、ソフトウェアプログラム110の他の部分から離れた変数を変更するかまたは他の形で影響する、および/またはファンクション120は、ソフトウェアプログラム110内のグローバルまたは半グローバル変数に影響する。図2Aは、ここで説明する少なくとも1つの実施形態にしたがった、ソフトウェアプログラムの一部である第1、第2および第3のファンクション210、220、230の例を示す。例えば、第1、第2および第3のファンクション210、220、230は、図1のソフトウェアプログラム110の一部である。
図1の議論に戻り、分類モジュール130は、ファンクション120を、ファンクションの2つ以上のクラスタ140(以下、「クラスタ140」)に分類するように構成されている。ファンクション120は、ファンクション120をクラスタにグループ化することにより分類される。いくつかの実施形態では、クラスタ140のそれぞれは、2つ以上のファンクション120を有する。別にまたはさらに、クラスタ140のいくつかは、ファンクション120の1つのみを有し、またはファンクション120のすべては、単一クラスタ140に分類される。いくつかの実施形態では、クラスタ140のそれぞれは、等しい個数のファンクション120を有するか、または異なる個数のファンクション120を有する。
いくつかの実施形態では、分類モジュール130は、1つ以上の分類ストラティジを使用してファンクション120を分類する。分類ストラティジは、他の分類ストラティジからの、ファンクション120間の呼び出し依存性、ファンクション120間のデータ変数依存性、条件ステートメントに含まれる共有データ変数を含むか、またはそれらに基づく。例えば、他の分類ストラティジは、1つ以上の具体的なケースを使用してソフトウェアプログラム110を実行することにより収集された情報を含む。この情報は、どのファンクション120がソフトウェアプログラム110を通した個別の実行パスに含まれるかまたは関係するかを示す。分類モジュール130は、収集された情報に基づいてファンクション120を分類する。
分類ストラティジ依存性を呼び出して使用する時、分類モジュール130は、静的に試験するか、またはファンクション120の呼び出し位置を示すソフトウェアプログラム110の静的な試験に関する情報を受け取る。これらのおよび他の実施形態では、分類モジュール130は、他のファンクション120の実行または呼び出しをするそれらのクラスタ120を分類する。例えば、第1ファンクションは、第2ファンクションおよび第3ファンクションを呼び出す。第2ファンクションは、第4ファンクションを呼び出す。分類モジュール130は、ファンクション120の間の呼び出し依存性の分類ストラティジを使用する時、第1、第2、第3および第4ファンクションを、ストラティジのクラスタに分類する。
データ変数分類ストラティジ依存性を使用する時、分類モジュール130は、静的に試験するか、または同一のデータ変数から書き込みおよび/または読み出すファンクション120を示すソフトウェアプログラム110の静的な試験に関する情報を受け取る。これらのおよび他の実施形態では、分類モジュール130は、同一のデータ変数から書き込みおよび/または読み出すそれらのファンクション120を分類する。
共有データ変数分類ストラティジ依存性を使用する時、分類モジュール130は、静的に試験するか、またはそこに含まれる同一のデータ変数を有する条件ステートメントでファンクション120を示すソフトウェアプログラム110の静的な試験に関する情報を受け取る。これらのおよび他の実施形態では、分類モジュール130は、そこに含まれる同一のデータ変数を有する条件ステートメントでそれらのファンクション120を分類する。
いくつかの実施形態では、分類モジュール130は、1つ以上の分類ストラティジの組み合わせを使用して、ファンクション120を分類する。例えば、分類モジュール130は、呼び出し依存性を有しかつ同一のデータ変数から書き込みおよび/または読み出すファンクション120を分類する。別にまたはさらに、分類モジュール130は、呼び出し依存性を有しかつ条件ステートメントに含まれる共有データ変数を有するファンクション120を分類する。図2Aは、第2ファンクション220により呼び出される第1ファンクション210、および両方が条件ステートメントで変数”a”を有する第1および第2ファンクション210および220に基づいて分類される。
図1に戻ると、ファンクション120の分類は、ファンクション120を変更しないか、ソフトウェアプログラム110を変化させない。むしろ、ファンクション120の分類は、シンボリック実行エンジン150により使用されるファンクション120間の関係を示すに過ぎない。
シンボリック実行エンジン150は、クラスタ140を受け、クラスタ140のそれぞれについて1つ以上のシンボリックドライバ152を生成するように構成される。図2Aは、クラスタ222についての第1シンボリックドライバ240を、第3ファンクション230についての第2シンボリックドライバ250を、示す。
シンボリックドライバ152は、シンボリック実行エンジン150がいかにシンボリックにクラスタ140を実行するかをガイドするソフトウェアコードのセグメントを有する。例えば、クラスタ140のファンクションの第1のクラスタ(以下「第1クラスタ」)について、シンボリックドライバ152は、第1クラスタ内のファンクションで使用される変数についてのシンボリックな変数を示す。図2Aの第1シンボリックドライバ240のライン244および246は、例示のシンボリックな変数の例を示す。
図1に戻り、いくつかの実施形態では、シンボリックドライバ152は、対応するクラスタ140内の1つ以上のファンクションを呼び出す。特に、シンボリックドライバ152は、他のファンクションにより呼び出されない対応するクラスタ140内の全てのファンクションに呼び出しを行う。例えば、クラスタ140のファンクションの第1クラスタ(以下、「第1クラスタ」)について、もし第1クラスタ内の1つのファンクションが第1クラスタ内の他のファンクションについてエントリィファンクションであれば、第1クラスタについてのシンボリックドライバ152は、エントリィファンクションを呼び出し、第1クラスタ内の他のファンクションを呼び出さない。クラスタについてのエントリィファンクションは、クラスタのファンクション内すべての実行パスが実行された時に、呼び出されて実行されるとクラスタ内の他のファンクションの呼び出しになるファンクションである。図2Aの第1シンボリックドライバ240のライン248は、図示のように、第1のファンクションに関するエントリィファンクションである第2のファンクション220の呼び出しを示す。
図1に戻り、いくつかの実施形態では、シンボリックドライバ152は、対応するクラスタ140内のファンクション120についてのファンクション情報も有する。例えば、クラスタ140のファンクションの第1クラスタ(以下「第1クラスタ」)について、第1クラスタ内のファンクションについてのファンクション情報は、第1クラスタに対応するシンボリックドライバ152内に含まれる。ファンクション情報は、シンボリック実行エンジン150が、第1クラスタの一部でなく第1クラスタ内のファンクションにより呼び出されないファンクション内の別のパスを無視するように指示する。例えば、図2Aにおいて、第1および第2のファンクション210および220は、クラスタ222に含まれる。第3のファンクション230は、第2ファンクション220の実行中に、第2ファンクション220により呼び出される。クラスタ222のシンボリックな実行中に、シンボリック実行エンジン150は、第3のファンクション230を実行するが、シンボリックな実行により生成されたシンボリックな束縛を解く時には、第3のファンクション230内の他のステートメントのような第2のファンクション220内のすべてのパスを実行する必要のない第3のファンクション230内における他のパスは無視する。図2Aの第1のシンボリックドライバのライン242は、ファンクションのクラスタ内のファンクションを、シンボリック実行エンジンに指示する1つの表示を示す。シンボリック実行エンジン150がファンクションのクラスタ内に含まれず、ファンクションのクラスタ内のファンクションにより呼び出されるファンクション内の他のパスをどのように無視するかについての更なる詳細は、"PATH EXECUTION REDUCTION IN SOFTWARE PROGRAM VERIFICATION"のタイトルで、2014年5月15日付で出願した米国出願14/278,783号に記載されており、ここでは、その全体を参照して組み込むものとする。
図1に戻り、クラスタ140についてのシンボリックドライバ152を生成した後、シンボリック実行エンジン150は、シンボリックドライバ152に基づいてクラスタ140をシンボリックに実行する。特に、シンボリック実行エンジン150は、クラスタ140に対応するシンボリックドライバ152により指示されたようにクラスタ140をシンボリックに実行する。
クラスタ140をシンボリックに実行するため、シンボリック実行エンジン150は、クラスタ140のファンクション120内のソフトウェアステートメントについてシンボリックな式を生成する。シンボリック実行エンジン150は、シンボリックな式のそれぞれを解き、例えば、ファンクション120のそれぞれの満足度を決定し、具体的な入力を生成する。いくつかの実施形態では、シンボリック実行エンジン150は、シンボリックドライバ152の1つを実行し、一度にはクラスタ140の対応する1つをシンボリックに実行する。別にまたはさらに、シンボリック実行エンジン150は、多重のシンボリックドライバ152を並列に実行する。具体的な入力に基づいて、シンボリック実行エンジン150は、具体的な入力を使用してファンクション120を実行し、ファンクション120の機能性を確認するのに使用される具体的なテストケース160を生成する。図2Bは、第1のシンボリックドライバ240のシンボリックな実行から導出された第1の具体的なテストケース260および第2のシンボリックドライバ250のシンボリックな実行から導出された第2の具体的なテストケース270を示す。
図1に戻り、シンボリック実行エンジン150は、シンボリック実行エンジン150によりシンボリックに実行されるソフトウェアプログラムの量を示すカバレッジ情報162を生成するようにさらに構成されている。いくつかの実施形態では、カバレッジ情報162は、シンボリック実行エンジン150により実行されるライン数に基づいている。例えば、カバレッジ情報162は、シンボリックに実行されるソフトウェアプログラム110のライン数を、ソフトウェアプログラム110の全ライン数の百分率として含むか、または実行されるライン数に基づく他ものである。別にまたはさらに、カバレッジ情報162は、シンボリック実行エンジン150により実行される条件状態、ファンクション、および/またはクラスの個数および/または百分率に基づいている。例えば、カバレッジ情報162は、実行される条件状態、ファンクション、および/またはクラスの個数、および/またはソフトウェアプログラム内の条件状態、ファンクション、および/またはクラスの個数の百分率として実行される条件状態、ファンクション、および/またはクラスの個数の百分率を、有する。
具体的なテストケース160およびカバレッジ情報162は、決定モジュール170に提供される。決定モジュール170は、分類モジュール130によりファンクション120を再分類し、再分類したファンクションをシンボリックに実行するか否かを決定するように構成されている。決定モジュール170は、具体的なテストケース160の個数およびカバレッジ情報162に基づいてファンクション120を再分類する時を決定する。特に、決定モジュール170は、具体的なテストケース160の個数が特定のテストケース数より大きい時および/またはカバレッジ情報162が特定のカバレッジより小さいことを示す時、ファンクション120を再分類すると決定する。
特定のテストケース数は、ソフトウェアプログラム、ユーザからの入力、具体的なテストケース160を処理する処理性能のサイズ、複雑性またはファンクション数のようなソフトウェアプログラム110の測定基準、他の測定基準、またはそれらの組み合わせに基づいて決定される。例えば、具体的なテストケース160を実行する処理資源、処理パワー、および/または処理時間が限定される時、具体的なテストケース160の減少は、具体的なテストケース160を実行するのに使用される処理時間、処理パワーおよび/または処理資源を減少させる。
カバレッジ情報162は、ソフトウェアプログラム110の測定基準、ソフトウェアプログラムの意図した使用、ユーザからの入力、および/または他の測定基準に基づいて決定される。例えば、ソフトウェアプログラム110が非常の大きい時、ソフトウェアプログラム110のいくつかは、ソフトウェアプログラム110の15から25%のようなデッドコード(dead code)であると仮定される。その結果、特定のカバレッジは、プログラムのデッドコードを考慮して、70から80%に設定される。
具体的なテストケース160の数が特定のテストケース数より大きいと決定モジュール170が決定する時、および/またはカバレッジが特定のカバレッジより小さいとカバレッジ情報162が示す時、決定モジュール170は、ファンクション120が再分類されることを分類モジュール130に指示する。
いくつかの実施形態では、決定モジュール170は、具体的なテストケース160の数およびカバレッジ情報162に基づいて、ファンクション120をどのように再分類するかを、分類モジュール130に指示する。例えば、カバレッジ情報162により指示されたクラスタのカバレッジが特定のカバレッジより小さいこと、および具体的なテストケース160の数が具体的なテストケース160の特定の数より小さいことに応答して、決定モジュール170は、分類モジュール130に、クラスタ140の現在数より多いファンクションのクラスタ数を形成することによりファンクション120を再分類するように指示する。決定モジュール170は、分類モジュール130に、1つ以上のクラスタ140を分割してより多くのファンクションのクラスタを形成するように指示する。いくつかの実施形態では、分類モジュール130は、ファンクション120を再分類し、異なる分類ストラティジを適用するかまたは分類ストラティジの厳重な適用に基づいて、より多くのクラスタ140を生成する。例えば、第1の繰り返しにおいて、分類モジュール130は、ファンクション120内で依存する1つのデータ変数を有するファンクション120に基づいて、データ可変依存性および分類されたファンクション120を適用する。第2の繰り返しにおいて、分類モジュール130は、データ可変依存性を適用するが、ファンクション120内で依存する2つのデータ変数を有するファンクション120に基づいてファンクション120を分類する。
他の例として、カバレッジ情報162により特定のカバレッジより大きいことおよび具体的なテストケース160の個数が具体的なテストケースの特定の個数より大きいことが示されたクラスタ140のカバレッジに応答して、決定モジュール170は、クラスタ140の現在の個数より少ないファンクションのクラスタを形成することにより、分類モジュール130に、クラスタ120を再分類するように指示する。分類モジュール130は、クラスタ140を組み合わせるが、またはクラスタ140の部分をクラスタ140の他と組み合わせることにより、より少ない個数のファンクションを形成する。いくつかの実施形態では、分類モジュール130は、異なる分類ストラティジを適用するかまたは分類ストラティジをより緩く適用することで、ファンクションを再分類し、ファンクションのより少ない個数のクラスタを生成する。例えば、第1の繰り返し中に、分類モジュール130は、ファンクション120中に依存する2つ以上のデータ変数を有するファンクション120に基づいて、データ可変依存性ストラティジを適用し、ファンクション120を分類する。第2の繰り返し中に、分類モジュール130は、データ可変依存性ストラティジを適用するが、ファンクション120中に依存する1つのデータ変数を有するファンクション120に基づいて、ファンクション120を分類する。
他の実施形態として、カバレッジ情報162により特定のカバレッジより小さいことおよび具体的なテストケース160の個数が具体的なテストケースの特定の個数より大きいことが示されたクラスタ140のシンボリックな実行のカバレッジに応答して、決定モジュール170は、現在の繰り返し中よりむしろ次の繰り返し中に異なる分類ストラティジを使用することにより、分類モジュール130に、クラスタ120を再分類するように指示する。
上記のファンクション120の分類は、ソフトウェアプログラム110を確認するのに使用される具体的なテストケース160の個数を削減する。例えば、いくつかの既知のシステムでは、シンボリックドライバは、ソフトウェアプログラム中でファンクションごとに生成される。シンボリックドライバが実行され、具体的なテストケースがファンクションごとに生成される。ファンクションごとに別々に具体的なテストケースを生成することにより、異なる入力で多数回テストされた複数のファンクションになる。例えば、具体的なテストケースが図2Aの第1および第2のファンクション210および220のそれぞれについて別々に生成されるならば、2つの具体的なテストケースが第1および第2のファンクション210および220のそれぞれについて別々に生成され、結果として4つの具体的なテストケースになる。これに対して、図1に示したシステム100を使用すると、3つの具体的なテストケースのみが生成される。より少ない具体的なテストケースにすることにより、具体的なテストケースでのソフトウェアプログラム110の確認のための処理時間および/または処理資源を低減させられる。
さらに、いくつかの既知のシステムでは、システムは、冗長な具体的なテストケースを除去するようにする具体的なテストケースが生成された後、具体的なテストケースを抜粋する。これに対して、上記のシステム100は、ソフトウェアプログラム110のファンクション120を分類し、クラスタ140に基づいてファンクション120を実行し、生成される具体的なテストケース160の個数を低減する。生成される具体的なテストケース160の個数の低減は、冗長な具体的なテストケースの個数も低減する。
さらに、ファンクション120を分類することにより、生成されるシンボリックドライバ152の個数は低減される。シンボリックドライバ152の個数の低減は、ソフトウェアプログラム110を確認するのに使用される処理時間および/または処理資源も低減する。
本開示の範囲を逸脱すること無しに、システム100に対して変形、付加または除去を行うことができる。例えば、システム100は、示された要素またはモジュール以外の他の要素またはモジュールを有してもよい。さらに、図2Aおよび図2Bに示したソフトウェアコード部分は、例示の方法で提供されるが、それに限定されず、どのような方法で提供されてもよい。
図3Aおよび図3Bは、ここで説明する少なくともいくつかの実施形態にしたがって配置されたテスト用ソフトウェアの例示の方法300のフローチャートを示す。方法300は、いくつかの実施形態では、図1および図4のシステム100または400のようなシステムにより実現される。例えば、図4のシステム400のプロセッサ420は、コンピュータ命令を実行するように構成され、方法300のブロック302、304、306、308、310、312、314、316、318、320、322、324および/または326のうちの1つ以上により表されるテスト用ソフトウェアについての動作を実行する。個別のブロックとして示されているが、各種のブロックは、所望の実現方法により、さらなるブロックに分割しても、より少ないブロックに組み合わせても、または除去してもよい。
方法300は、ブロック302で開始し、ソフトウェアプログラムのファンクションを分類する分類ストラティジが選択される。分類ストラティジは、ソフトウェアプログラムのファンクションを一緒に分類するかまたはグループ化するための基礎である。選択された分類ストラティジは、ファンクション間の依存性、ファンクション間のデータ可変依存性、ファンクション内の条件ステートメントに含まれる共有データ変数、他の分類ストラティジを呼び出すことを有する。例えば、他の分類ストラティジは、1つ以上の具体的なテストケースを使用するソフトウェアプログラムの実行により収集された情報を有する。この情報は、ソフトウェアプログラムのどのファンクションがソフトウェアプログラム110を通る個別の実行パス内に含まれるか、または他に関係するかを示す。この分類ストラティジは、この情報に基づいたファンクションの分類を有する。例えば、個別の実行パスに含まれるファンクションは、一緒に分類される。
いくつかの実施形態では、分類ストラティジは、利用可能な分類ストラティジは、からランダムに選択してよい。別にまたはさらに、分類ストラティジは、ソフトウェアプログラムの静的な解析のような解析方法に基づいて選択してもよい。ソフトウェアプログラムの解析からの情報は、分類ストラティジを選択するのに使用される。この情報は、ソフトウェアプログラムのライン数、ソフトウェアプログラムのファンクション数、ソフトウェアプログラムにおけるファンクション間の相互依存数、他のファンクションを呼び出すファンクション数、変数を共有するファンクション数、および他のファクタを有する。
いくつかの実施形態では、分類ストラティジは、確認されるソフトウェアプログラムに類似したあらかじめ確認されたソフトウェアプログラムを特定することにより選択される。確認されるソフトウェアプログラムに類似したあらかじめ確認されたソフトウェアプログラムを特定した後、あらかじめ確認されたソフトウェアプログラムに使用された分類ストラティジが選択される。これらおよび他の実施形態では、あらかじめ確認されたソフトウェアプログラムは、あらかじめ分類され、第2の具体的なテストケースを生成するようにシンボリックに実行され、あらかじめ確認されたソフトウェアプログラムのシンボリックな実行の第2のカバレッジが第2の特定のカバレッジより大きく、第2の具体的なテストケースの第2の個数が具体的なテストケースの第2の特定の個数より小さくなるまで再分類される。
いくつかの実施形態では、あらかじめ確認されたソフトウェアプログラムに適用された分類ストラティジは、あらかじめ確認されたソフトウェアプログラムが再分類された回数が特定の繰り返し数より少ない時に、選択される。特定の繰り返し数は、ソフトウェアプログラムを確認するシステムのユーザにより、ソフトウェアプログラムを確認する処理時間および/またはソフトウェアプログラムを確認するのに利用可能な処理資源、他の測定基準または情報に基づいて、ランダムに選択される。
いくつかの実施形態では、ソフトウェアプログラムは、ソフトウェアプログラムの1つ以上の測定基準およびあらかじめ確認されたソフトウェアプログラムにおける類似性に基づいて、あらかじめ確認されたソフトウェアプログラムに類似するように決定される。測定基準は、ラインカウント、繰り返し複雑性(cyclomatic complexity)、命令パス長、コナシーン(connascene)、およびハルステッド複雑性(halstead complexity)、他のソフトウェア測定基準を有する。
ブロック304では、ソフトウェアプログラムのファンクションは、選択した分類ストラティジに基づいて分類される。ファンクションの分類は、各クラスタ内の関係するファンクションを有する。ファンクションの分類は、ファンクションまたはソフトウェアプログラムを変更しない。
ブロック306では、ファンクションのクラスタのそれぞれについてのシンボリックドライバが生成される。シンボリックドライバは、どのようにシンボリック実行エンジンがファンクションのクラスタをシンボリックに実行するかを案内するソフトウェアコードのセグメントである。
ブロック308では、ファンクションのクラスタを含むソフトウェアプログラムが、シンボリックドライバに基づいてシンボリックに実行される。ソフトウェアプログラムは、シンボリック実行エンジンを使用してシンボリックに実行される。いくつかの実施形態では、ソフトウェアプログラムをシンボリックに実行することは、発生される各種の具体的なテストケースになる。具体的なテストケースは、ファンクションのクラスタのシンボリックな実行中に生成されるシンボリックな表現の解法に基づいて生成される。
ブロック310では、ファンクションのクラスタのシンボリックな実行に基づいて生成される具体的なテストケースがカウントされる。ブロック312では、ファンクションのクラスタのシンボリックな実行のカバレッジ情報が決定される。カバレッジは、ブロック308においてシンボリックに実行されるソフトウェアプログラムの量を示す。
ブロック314では、ソフトウェアプログラムのカバレッジが特定のカバレッジより大きいか決定される。特定のカバレッジは、ソフトウェアプログラム測定基準、ソフトウェアプログラムの意図した使用、ユーザからの入力、および/または他の測定基準に基づいている。特定のカバレッジより大きいカバレッジに応答して、方法300は、ブロック318に進む。特定のカバレッジより大きくないカバレッジに応答して、方法300は、ブロック316に進む。
ブロック316では、具体的なテストケース数が、具体的なテストケースの特定の数より小さいか決定される。具体的なテストケースの特定の数は、サイズ、複雑性、またはソフトウェアプログラムのファンクション数のようなソフトウェアプログラムの測定基準、ユーザからの入力、具体的なテストケースを処理するための処理能力、他の測定基準、またはそれらの組み合わせに基づいて決定される。具体的なテストケース数が具体的なテストケースの特定の数より小さい時、方法300は、ブロック322に進む。具体的なテストケース数が具体的なテストケースの特定の数より小さくない時、方法300は、ブロック326に進む。
ブロック318で、具体的なテストケース数が具体的なテストケースの特定の数より小さいか決定される。具体的なテストケース数が具体的なテストケースの特定の数より小さい時、方法300は、ブロック320に進む。具体的なテストケース数が具体的なテストケースの特定の数より小さくない時、方法300は、ブロック324に進む。
ブロック320で、ソフトウェアプログラムは、具体的なテストケースを使用してテストされる。いくつかの実施形態では、ブロック320でソフトウェアプログラムが具体的なテストケースを使用してテストされる前に方法300が実行される繰り返し数が、注目される。特に、カバレッジが特定のカバレッジより大きくかつ具体的なテストケース数が具体的なテストケースの特定の数より小さくなるまでのソフトウェアプログラムのファンクションの再分類数が注目される。さらに、選択された最後の分類ストラティジが注目される。最後に選択された分類ストラティジおよび繰り返し数は、他のソフトウェアプログラムの分類方法を選択するために、方法300の他の繰り返し中に使用される。
ブロック322では、ファンクションの1つ以上のクラスタが分離され、ファンクションの分離されたクラスタ内のファンクションがファンクションの残りのクラスタ中に分散される。ファンクションの1つ以上のクラスタを分離することにより、現在の繰り返し中には、方法300の前の繰り返し中のファンクションのクラスタ数より多い数のファンクションのクラスタがある。ファンクションの1つ以上のクラスタを分離した後、方法300はブロック306に進み、方法300は既に上記で述べたように続く。
ブロック324では、ファンクションの1つ以上のクラスタが、クラスタの他のファンクションと組み合わされる。ファンクションの1つ以上のクラスタを組み合わせることにより、現在の繰り返し中には、方法300の前の繰り返し中のファンクションのクラスタ数より少ない数のファンクションのクラスタがある。ファンクションの1つ以上のクラスタを組み合わせた後、方法300はブロック306に進み、方法300は既に上記で述べたように続く。
ブロック326では、ブロック302で選択された分類ストラティジとは異なる分類ストラティジが選択される。方法300はブロック304に進み、方法300は続く。
この分野の熟練者であれば、ここで開示したこのおよび他の処理および方法について、処理および方法で実行されるファンクションが異なる順番で実現してもよいことが理解できるであろう。さらに、概略の行動および動作は例示として提供されただけであり、行動および動作は、任意であり、開示の実施形態の根幹を逸脱せずに、より少ない行動および動作に組み合わせること、付加的な行動および動作に拡張することが可能である。
例えば、いくつかの実施形態では、方法300は、方法300の繰り返し数が繰り返し数の特定の数より大きくなると終了する。繰り返し数の特定の数は、処理時間、処理パワー、および/または方法を実行するのに利用可能な処理資源、ユーザの入力および/またはいくつかの他の測定基準に基づく。
図4は、ここで説明する少なくともいくつかの実施形態にしたがって配置されたソフトウェアを確認するように構成される例示のシステム400のブロック図である。システム400は、データベース410、プロセッサ420、メモリ430、およびインターフェースユニット440を有する。データベース410、プロセッサ420、メモリ430、およびインターフェースユニット440は、通信可能に結合されている。
データベース410は、第1ソフトウェア412、第2ソフトウェア414、データ416、および確認モジュール418を有する。第1ソフトウェア412は、複数のファンクションを有するソフトウェアプログラムを有する。第2ソフトウェア414は、ソフトウェアプログラムを有し、そのファンクションはここで説明したようにあらかじめ分類されて確認されている。データ416は、第1および/または第2ソフトウェア412および414についてのデータを有する。
確認モジュール418は、コンピュータ命令を有し、コンピュータ命令は、プロセッサ420のようなプロセッサにより実行される時、ここで説明したファンクションおよび動作を実行する。例えば、コンピュータ命令は、第1ソフトウェア412を解析するために実行される時、第1ソフトウェア412からのファンクションをファンクションのクラスタに分類し、ファンクションのクラスタ用のシンボリックドライバを生成し、シンボリックドライバに基づいて第1ソフトウェア412をシンボリックに実行し、具体的なテストケースおよび第1ソフトウェア412のシンボリックな実行の結果であるカバレッジに基づいて、第1ソフトウェア412のファンクションを再分類するか決定する。したがって、確認モジュール418は、図1の分類モジュール130、シンボリック実行エンジン150、および/または決定モジュール170を有するおよび/またはそれらに対応する。
いくつかの実施形態では、確認モジュール418は、第1ソフトウェア412の分類ストラティジを決定および/または実行するために、実行される時にデータ416を使用することのコンピュータ命令を有する。例えば、データ416は、第1ソフトウェア412の静的な解析から第1ソフトウェア412について収集された情報を含む。これらおよび他の実施形態では、データは、第1ソフトウェア412のコードのライン数、第1ソフトウェア412内の変数依存性、第1ソフトウェア412内のファンクション呼び出し依存性、第1ソフトウェア412についての他の測定基準/情報を有する。
いくつかの実施形態では、確認モジュール418は、第2ソフトウェア414に基づいて第1ソフトウェア412用の分類ストラティジを選択するコンピュータ命令を有する。例えば、第1ソフトウェア412は第2ソフトウェア414と比較され、第1ソフトウェア412が第2ソフトウェア414に類似している時、第2ソフトウェア414に使用された分類ストラティジが、第1ソフトウェア412用の分類ストラティジとして使用される。
プロセッサ420は、確認モジュール418からのコンピュータ命令を実行するように構成され、それはプロセッサ420にここで説明したファンクションおよび動作を実行させる。コンピュータ命令は、プロセッサ420による実行のためにメモリ430にロードされ、および/またはここで説明したファンクションおよび動作の実行中に生成され、受信され、動作したデータは、少なくとも一時的にメモリ430に記憶される。例えば、第1ソフトウェア412、第2ソフトウェア414、データ416、および/またはそれらのいずれかまたはすべての部分は、プロセッサ420による使用のために、メモリ430に一時的に記憶される。インターフェースユニット440は、いずれかの形式の通信ネットワーク上で、他のシステム、ユーザ、および/または他のプロセッサからデータを受信するおよび/またはそれらにデータを送信する。
本開示の範囲を逸脱すること無しに、システム400についての変形、付加、除去を行うことができる。例えば、プロセッサ420は、単一プロセッサまたは一緒に動作する多重プロセッサを有する。これらおよび他の実施形態では、多重プロセッサは、物理的には同じ位置に配置されるか、または一緒にネットワーク化された離れた位置に配置される。さらに、プロセッサ420は、一般用途のプロセッサまたはアプリケーション専用プロセッサを有する。別にまたはさらに、プロセッサ420は、専用のプロセッサ、またはフィールド・プログラマブル・ゲート・アレイ(FGPA)またはコンピュータ命令を実行するように構成された他の形式のデバイスを有する。
図5は、ここで説明した少なくともいくつかの実施形態にしたがって配置されたソフトウェアを確認する例示の方法500のフローチャートである。方法500は、いくつかの実施形態では、図1および図4のシステム100または400のようなシステムにより実現される。例えば、図4のシステム400のプロセッサ420は、コンピュータ命令を実行するように構成され、方法500のブロック502、504、506、508および/または510のうちの1つ以上により表されるように、ソフトウェアを確認する動作を実行する。個別のブロックとして示しているが、各種のブロックは、所望の実現方法に依存して、付加的なブロックに分割しても、より少ないブロックに組み合わせても、除去してもよい。
方法500は、ブロック502で開始し、複数のファンクションを有するソフトウェアプログラムの一部が受信される。ブロック504で、ファンクションは、ファンクションの2つ以上のクラスタに分類される。いくつかの実施形態では、ファンクションは、1つ以上の分類ストラティジに基づいて分類される。分類ストラティジは、ファンクション間の呼び出し依存性、ファンクション間のデータ変数依存性、および条件ステートメントに含まれる共有データ変数、他のストラティジを有する。
ブロック506では、シンボリックドライバは、ファンクションのクラスタごとに生成され、複数のシンボリックドライバが生成される。ブロック508では、ファンクションのクラスタは、シンボリックドライバを使用してシンボリックに実行され、クラスタ内のファンクションについて具体的なテストケースを生成する。
ブロック510では、ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または具体的なテストケースの数が具体的なテストケースの特定の数より多いことに応答して、ファンクションが再分類される。いくつかの実施形態では、ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、および具体的なテストケースの数が具体的なテストケースの特定の数より多いことに応答して、ファンクションは再分類される。
いくつかの実施形態では、ファンクションの再分類は、ファンクションの2つ以上のクラスタの1つ以上の組み合わせ、ファンクションの1つのクラスタのファンクションの2つ以上のクラスタへの分割、1つ以上のファンクションをファンクションの1つのクラスタから他のファンクションのクラスタへ移動すること、および前に使用したのと異なる分類ストラティジに基づくファンクションの分類を有する。
いくつかの実施形態では、ファンクションが再分類された後、ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより大きくなり、具体的なテストケースの数が具体的なテストケースの特定の数より小さくなるまで、方法500は、ブロック506、508、および510を繰り返す。
図5の概略の行動および動作は例示として提供されただけであり、行動および動作は、任意であり、開示の実施形態の根幹を逸脱せずに、より少ない行動および動作に組み合わせること、付加的な行動および動作に拡張することが可能である。
例えば、方法500は、分類されるファンクションに基づいて分類ストラティジを選択することをさらに有する。いくつかの実施形態では、分類ストラティジの選択は、分類されるファンクションに類似の他のファンクションを特定することを有する。他のファンクションは、あらかじめ分類されており、あらかじめ分類した他のファンクションの第2のカバレッジが第2の特定のカバレッジより大きくなり、第2の具体的なテストケースの第2の数が具体的なテストケースの第2の特定の数より小さくなるまで、シンボリックに実行されて、第2の具体的なテストケースを生成し、再分類される。分類ストラティジの選択は、第2のカバレッジおよび第2の数を達成するためあらかじめ分類した他のファンクションの再分類数が繰り返しの特定の数より小さい時、あらかじめ分類された他のファンクションに適用する最後の分類ストラティジを選択することを有する。これらのおよび他の実施形態では、他のファンクションは、分類されるファンクションおよび他のファンクションのラインカウント、繰り返し複雑性、命令パス長、コナシーン(connascene)、およびハルステッド複雑性(halstead complexity)に基づいて、分類されるファンクションに類似していることが特定される。
いくつかの実施形態では、ファンクションのクラスタは、ファンクションの第1のクラスタである。これらのおよび他の実施形態では、ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さくなり、具体的なテストケースの数が具体的なテストケースの特定の数より小さくなるのに応答して、方法は、ファンクションを2つ以上のファンクションの第2のクラスタに分類することによりファンクションを再分類することをさらに有し、そこではファンクションの第2のクラスタは、ファンクションの第1のクラスタより多いファンクションのクラスタを有する。別にまたはさらに、ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより大きくなり、具体的なテストケースの数が具体的なテストケースの特定の数より大きくなるのに応答して、方法は、ファンクションを2つ以上のファンクションの第2のクラスタに分類することによりファンクションを再分類することをさらに有し、そこではファンクションの第2のクラスタは、ファンクションの第1のクラスタより少ないファンクションのクラスタを有する。
ここで説明した実施形態は、これまで詳細に議論したように、各種のコンピュータハードウェアまたはソフトウェアモジュールを含む専用のまたは半用のコンピュータの使用を有する。
ここで説明した実施形態は、コンピュータ読取可能な媒体を使用して実現され、媒体は記憶されたコンピュータ実行可能な命令またはデータ構造を担持または有する。このようなコンピュータ読取可能な媒体は、汎用または瀬引用のコンピュータによりアクセスされる利用可能な媒体である。それにより制限されない例として、このようなコンピュータ読取可能な媒体は、RAM、ROM、EEPROM、CD−ROM、または他の光学ディスク記憶装置、磁気ディスク記憶装置、または他の磁気記憶装置、またはコンピュータ実行可能な命令またはデータ構造の形で所望のプログラムコードを担持または記憶するのに使用され、汎用のまたは専用のコンピュータによりアクセスされる他の記憶媒体を含む非一時的および/または確実なコンピュータ読取可能な記憶媒体を有する。上記の組み合わせは、コンピュータ読取可能な媒体の範囲に含まれる。
コンピュータ実行可能な命令は、例えば、汎用コンピュータ、専用コンピュータまたは特別な専用処理装置に、あるファンクションまたはファンクションのグループを実行させる命令およびデータを有する。主題は構造的な特徴および/または方法論的動きを特定する言語で記載されているが、特許請求の範囲に定義した主題はかならずしも上記の特別な特徴または動きに限定されないと理解される。むしろ、上記の特別な特徴および動きは、特許請求の範囲を実現する例示の形式として開示される。
ここで使用した用語「モジュール」または「要素」は、コンピューティングシステムで実行するソフトウェアのオブジェクトまたはルーチンを示す。ここで説明した異なる要素、モジュール、エンジン、およびサービスは、コンピューティングシステムで実行するオブジェクトまたはプロセスとして実現される(例えば、分離したスレッド)。ここで説明したシステムおよび方法は、ソフトウェアで実現されることが望ましく、ハードウェアまたはソフトウェアとハードウェアの組み合わせでの実現も可能であり、考慮される。この記載で、「コンピューティングエンティティ」は、ここであらかじめ定義したようないかなるコンピューティングシステムでも、コンピューティングシステム上で動作するいかなるモジュールまたはモジュールの組み合わせでもよい。
ここで引用したすべての例および条件付き言語は、発明者により従来の技術を更に推し進めるために提供された発明と概念を読者が理解するのを支援する教育的目的のためであり、そのように特定的に引用した例と条件に制限されるものではないと解釈されるべきである。本開示の実施形態を詳細に記述したが、種々の変更、置換、および改造が、本開示の精神と範囲を逸脱することなく実施形態に対して行えるということは理解されたい。
Claims (20)
- 複数のファンクションを含むソフトウェアプログラムの一部を受け取り、
前記複数のファンクションを、ファンクションの2つ以上のクラスタに分類し、
ファンクションの前記クラスタのそれぞれについて、多重シンボリックドライバが生成されるように、シンボリックドライバを生成し、
前記シンボリックドライバを使用して、ファンクションの前記クラスタをシンボリックに実行し、前記クラスタ内の前記ファンクションについて具体的なテストケースを生成し、
ファンクションの前記クラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または前記具体的なテストケースの数が前記具体的なテストケースの特定の数より大きいことに応答して、前記ファンクションを再分類するソフトウェア確認方法。 - ファンクションの前記クラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、および前記具体的なテストケースの数が前記具体的なテストケースの前記特定の数より小さいことに応答して、前記ファンクションは再分類される請求項1に記載の方法。
- 前記ファンクションの再分類は、ファンクションの2つ以上の前記クラスタを組み合わせること、ファンクションの前記クラスタの1つをファンクションの2つ以上の他のクラスタに分割すること、および1つ以上のファンクションをファンクションの前記クラスタの1つからファンクションの他の前記クラスタに移動すること、の1つ以上を有する請求項1に記載の方法。
- 前記ファンクションは、1つ以上の分類ストラティジに基づいて分類され、前記分類ストラティジは、前記ファンクション間の読み出し依存性、前記ファンクション間のデータ変数依存性、および条件ステートメントに含まれる共有データ変数を有する請求項1に記載の方法。
- 分類される前記ファンクションに基づいて前記分類ストラティジを選択することを有し、前記分類ストラティジの前記選択は、
分類される前記ファンクションに類似の他のファンクションであって、あらかじめ分類され、第2の具体的なテストケースを生成するようにシンボリックに実行され、そして前記あらかじめ分類された他のファンクションの前記シンボリックな実行の第2のカバレッジが第2の特定のカバレッジより大きくおよび前記第2の具体的なテストケースの第2の数が具体的なテストケースの第2の特定の数より小さくなるまで再分類されている他のファンクションを特定し、そして、
前記第2のカバレッジおよび前記第2の数を達成した前記あらかじめ分類された他のファンクションの前記再分類の数が、特定の繰り返し数より小さい時、前記あらかじめ分類された他のファンクションに適用する前の分類ストラティジを、前記分類ストラティジとして選択する請求項4に記載の方法。 - 前記他のファンクションは、分類される前記ファンクションのラインカウント、繰り返し複雑性、命令パス長、コナシーン、およびハルステッド複雑性の1つ以上および他のファンクションに基づいて、分類される前記ファンクションに類似していると特定される請求項5に記載の方法。
- ファンクションの前記クラスタは、第1のファンクションのクラスタであり、ファンクションの前記クラスタのシンボリックな実行のカバレッジが前記特定のカバレッジより小さく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より小さいことに応答して、前記方法は、前記ファンクションを2つ以上の第2のファンクションのクラスタに分類することにより前記ファンクションを再分類することをさらに有し、ファンクションの前記第2のクラスタは、ファンクションの前記第1のクラスタより多いファンクションのクラスタを有する請求項1に記載の方法。
- ファンクションの前記クラスタは、第1のファンクションのクラスタであり、ファンクションの前記クラスタのシンボリックな実行のカバレッジが前記特定のカバレッジより大きく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より大きいことに応答して、前記方法は、前記ファンクションを2つ以上の第2のファンクションのクラスタに分類することにより前記ファンクションを再分類することをさらに有し、ファンクションの前記第2のクラスタは、ファンクションの前記第1のクラスタより少ないファンクションのクラスタを有する請求項1に記載の方法。
- 前記ファンクションが再分類された後、前記方法は、ファンクションの前記クラスタの前記シンボリックな実行の前記カバレッジが前記特定のカバレッジより大きく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より小さくなるまで、
ファンクションの前記クラスタのそれぞれについて前記シンボリックドライバを生成し、
前記シンボリックドライバを使用して、ファンクションの前記クラスタをシンボリックに実行して、前記クラスタ内の前記ファンクションについて具体的なテストケースを発生し、そして
前記ファンクションを再分類する、ことを繰り返す請求項1に記載の方法。 - コンピュータ命令を実行してシステムにソフトウェア確認の動作を実行させるように構成されたプロセッサであって、前記動作は、
複数のファンクションを含むソフトウェアプログラムの一部を受け取り、
前記複数のファンクションを、2つ以上のファンクションのクラスタに分類し、
ファンクションの前記クラスタのそれぞれについて、多重シンボリックドライバが生成されるように、シンボリックドライバを生成し、
前記シンボリックドライバを使用して、ファンクションの前記クラスタをシンボリックに実行し、前記クラスタ内の前記ファンクションについて具体的なテストケースを生成し、
ファンクションの前記クラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または前記具体的なテストケースの数が前記具体的なテストケースの特定の数より大きいことに応答して、前記ファンクションを再分類する、ことを有するプロセッサ。 - ファンクションの前記クラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、および前記具体的なテストケースの数が前記具体的なテストケースの前記特定の数より小さいことに応答して、前記ファンクションは再分類される請求項10に記載のプロセッサ。
- 前記ファンクションの再分類は、ファンクションの2つ以上の前記クラスタを組み合わせること、ファンクションの前記クラスタの1つをファンクションの2つ以上の他のクラスタに分割すること、および1つ以上のファンクションをファンクションの前記クラスタの1つからファンクションの他の前記クラスタに移動すること、の1つ以上を有する請求項10に記載のプロセッサ。
- 前記ファンクションは、1つ以上の分類ストラティジに基づいて分類され、前記分類ストラティジは、前記ファンクション間の読み出し依存性、前記ファンクション間のデータ変数依存性、および条件ステートメントに含まれる共有データ変数を有する請求項10に記載のプロセッサ。
- 分類される前記ファンクションに基づいて前記分類ストラティジを選択することを有し、前記分類ストラティジの前記選択は、
分類される前記ファンクションに類似の他のファンクションであって、あらかじめ分類され、第2の具体的なテストケースを生成するようにシンボリックに実行され、そして前記あらかじめ分類された他のファンクションの前記シンボリックな実行の第2のカバレッジが第2の特定のカバレッジより大きくおよび前記第2の具体的なテストケースの第2の数が具体的なテストケースの第2の特定の数より小さくなるまで再分類されている他のファンクションを特定し、そして、
前記第2のカバレッジおよび前記第2の数を達成した前記あらかじめ分類された他のファンクションの前記再分類の数が、特定の繰り返し数より小さい時、前記あらかじめ分類された他のファンクションに適用する前の分類ストラティジを、前記分類ストラティジとして選択する請求項13に記載のプロセッサ。 - 前記他のファンクションは、分類される前記ファンクションのラインカウント、繰り返し複雑性、命令パス長、コナシーン、およびハルステッド複雑性の1つ以上および他のファンクションに基づいて、分類される前記ファンクションに類似していると特定される請求項14に記載のプロセッサ。
- 前記ファンクションのクラスタは、第1のファンクションのクラスタであり、前記ファンクションのクラスタのシンボリックな実行のカバレッジが前記特定のカバレッジより小さく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より小さいことに応答して、前記方法は、前記ファンクションを2つ以上の第2のファンクションのクラスタに分類することにより前記ファンクションを再分類することをさらに有し、前記第2のファンクションのクラスタは、前記第1のファンクションのクラスタより多いファンクションのクラスタを有する請求項10に記載のプロセッサ。
- 前記ファンクションのクラスタは、第1のファンクションのクラスタであり、前記ファンクションのクラスタのシンボリックな実行のカバレッジが前記特定のカバレッジより大きく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より大きいことに応答して、前記方法は、前記ファンクションを2つ以上の第2のファンクションのクラスタに分類することにより前記ファンクションを再分類することをさらに有し、前記第2のファンクションのクラスタは、前記第1のファンクションのクラスタより少ないファンクションのクラスタを有する請求項10に記載のプロセッサ。
- 前記ファンクションが再分類された後、前記動作は、前記ファンクションのクラスタの前記シンボリックな実行の前記カバレッジが前記特定のカバレッジより大きく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より小さくなるまで、
前記ファンクションのクラスタのそれぞれについて前記シンボリックドライバを生成し、
前記シンボリックドライバを使用して、前記ファンクションのクラスタをシンボリックに実行して、前記クラスタ内の前記ファンクションについて具体的なテストケースを発生し、そして
前記ファンクションを再分類する、ことを繰り返す請求項10に記載のプロセッサ。 - 複数のファンクションを含むソフトウェアプログラムの一部を受け取り、
前記ファンクションを、ファンクションの2つ以上の第1のクラスタであって、それぞれが2つ以上のファンクションを有する前記第1のクラスタに分類し、
ファンクションの前記第1のクラスタのそれぞれについて、多重シンボリックドライバが生成されるように、シンボリックドライバを生成し、
前記シンボリックドライバを使用して、ファンクションの前記第1のクラスタをシンボリックに実行し、前記第1のクラスタ内の前記ファンクションについて具体的なテストケースを生成し、
ファンクションの前記第1のクラスタの前記シンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または前記具体的なテストケースの数が前記具体的なテストケースの特定の数より大きいことに応答して、前記ファンクションをファンクションの2つ以上の第2のクラスタであって、ファンクションの前記第1のクラスタより多いファンクションのクラスタを有する第2のクラスタに分類することにより前記ファンクションを再分類し、そして
ファンクションの前記第1のクラスタの前記シンボリックな実行の前記カバレッジが前記特定のカバレッジより大きく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より大きくなるように、多重シンボリックドライバが生成され、前記ファンクションをファンクションの2つ以上の第2のクラスタに分類することにより前記ファンクションを再分類し、ファンクションの前記第2のクラスタは、ファンクションの前記第1のクラスタより少ないファンクションのクラスタを有するソフトウェア確認方法。 - 前記ファンクションが再分類された後、前記方法は、ファンクションの前記第2のクラスタの前記シンボリックな実行の前記カバレッジが前記特定のカバレッジより大きく且つ前記第2の具体的なテストケースの前記数が具体的なテストケースの前記特定の数より小さくなるまで、
ファンクションの前記第2のクラスタのそれぞれについて前記シンボリックドライバを生成し、
前記シンボリックドライバを使用して、ファンクションの前記第2のクラスタをシンボリックに実行して、前記第2のクラスタ内の前記ファンクションについて第2の具体的なテストケースを発生し、そして
前記ファンクションを再分類する、ことを繰り返す請求項10に記載のプロセッサ。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/278,926 | 2014-05-15 | ||
US14/278,926 US9396095B2 (en) | 2014-05-15 | 2014-05-15 | Software verification |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2015219906A true JP2015219906A (ja) | 2015-12-07 |
Family
ID=54538620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015056783A Pending JP2015219906A (ja) | 2014-05-15 | 2015-03-19 | ソフトウェア確認方法およびプロセッサ |
Country Status (2)
Country | Link |
---|---|
US (1) | US9396095B2 (ja) |
JP (1) | JP2015219906A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7474132B2 (ja) | 2020-06-24 | 2024-04-24 | 株式会社日立製作所 | プログラム検証データ生成支援装置、及びプログラム検証データ生成支援方法 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9396095B2 (en) * | 2014-05-15 | 2016-07-19 | Fujitsu Limited | Software verification |
US9811448B2 (en) * | 2015-12-18 | 2017-11-07 | Fujitsu Limited | Event-driven software testing |
CN106294127B (zh) * | 2016-07-25 | 2019-01-08 | 江苏大学 | 基于聚类的面向对象软件测试用例生成方法 |
US10176086B2 (en) * | 2016-10-03 | 2019-01-08 | Fujitsu Limited | Event-driven software test sequence determination |
CN113282478A (zh) * | 2020-02-20 | 2021-08-20 | 阿里巴巴集团控股有限公司 | 一种测试数据处理方法及其装置 |
CN113760695A (zh) * | 2020-06-30 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 一种定位问题代码的方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012150812A (ja) * | 2011-01-20 | 2012-08-09 | Fujitsu Ltd | 記号的実行を用いてc++プログラムを検証するソフトウェアアーキテクチャ |
JP2014021982A (ja) * | 2012-07-16 | 2014-02-03 | Fujitsu Ltd | オブジェクト指向言語のための記号テストドライバの反復生成 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2735698B2 (ja) * | 1991-01-21 | 1998-04-02 | 富士通株式会社 | インタフェース検証処理方式 |
US6578196B1 (en) * | 2000-06-07 | 2003-06-10 | International Business Machines Corporation | Checking of units and dimensional homogeneity of expressions in computer programs |
SE0002440D0 (sv) * | 2000-06-28 | 2000-06-28 | Virtutech Ab | Interpreter |
JP3664473B2 (ja) * | 2000-10-04 | 2005-06-29 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムの最適化方法及びこれを用いたコンパイラ |
US6947957B1 (en) * | 2002-06-20 | 2005-09-20 | Unisys Corporation | Proactive clustered database management |
US7844951B2 (en) * | 2005-12-30 | 2010-11-30 | Microsoft Corporation | Specification generation from implementations |
US7945898B1 (en) * | 2006-03-16 | 2011-05-17 | Avaya Inc. | Handling loops in programs and examining feasible software behavior for detecting malicious code |
US8402440B2 (en) * | 2008-07-07 | 2013-03-19 | Nec Laboratories America, Inc. | Program verification through symbolic enumeration of control path programs |
US8387021B2 (en) * | 2008-09-26 | 2013-02-26 | Microsoft Corporation | Symbolic runtime checking of quantified contracts |
US8412953B2 (en) * | 2009-08-28 | 2013-04-02 | Apple Inc | System and method for annotation driven integrity verification |
US8863096B1 (en) * | 2011-01-06 | 2014-10-14 | École Polytechnique Fédérale De Lausanne (Epfl) | Parallel symbolic execution on cluster of commodity hardware |
US20120179935A1 (en) * | 2011-01-11 | 2012-07-12 | Nec Laboratories America, Inc. | Dynamic test generation for concurrent programs |
US8719799B2 (en) * | 2011-03-07 | 2014-05-06 | International Business Machines Corporation | Measuring coupling between coverage tasks and use thereof |
US8612941B2 (en) * | 2011-05-10 | 2013-12-17 | Tata Consultancy Services Limited | System and method for analysis of a large code base using partitioning |
JP5629239B2 (ja) * | 2011-05-23 | 2014-11-19 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | ソフトウェアの動作をテストする装置及び方法 |
US8645924B2 (en) * | 2011-06-06 | 2014-02-04 | Fujitsu Limited | Lossless path reduction for efficient symbolic execution and automatic test generation |
US8966461B2 (en) * | 2011-09-29 | 2015-02-24 | Advanced Micro Devices, Inc. | Vector width-aware synchronization-elision for vector processors |
US9021449B2 (en) * | 2012-08-16 | 2015-04-28 | Fujitsu Limited | Software regression testing using symbolic execution |
US9396095B2 (en) * | 2014-05-15 | 2016-07-19 | Fujitsu Limited | Software verification |
-
2014
- 2014-05-15 US US14/278,926 patent/US9396095B2/en not_active Expired - Fee Related
-
2015
- 2015-03-19 JP JP2015056783A patent/JP2015219906A/ja active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012150812A (ja) * | 2011-01-20 | 2012-08-09 | Fujitsu Ltd | 記号的実行を用いてc++プログラムを検証するソフトウェアアーキテクチャ |
JP2014021982A (ja) * | 2012-07-16 | 2014-02-03 | Fujitsu Ltd | オブジェクト指向言語のための記号テストドライバの反復生成 |
Non-Patent Citations (1)
Title |
---|
廣葉 貴寛 他: "「記号的実行によるテストケースの自動生成に関する研究」", 第73回(平成23年)全国大会講演論文集(1), JPN6018039501, 2 March 2011 (2011-03-02), JP, pages 第1-501頁-第1-502頁 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7474132B2 (ja) | 2020-06-24 | 2024-04-24 | 株式会社日立製作所 | プログラム検証データ生成支援装置、及びプログラム検証データ生成支援方法 |
Also Published As
Publication number | Publication date |
---|---|
US20150331787A1 (en) | 2015-11-19 |
US9396095B2 (en) | 2016-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2015219906A (ja) | ソフトウェア確認方法およびプロセッサ | |
US8726255B2 (en) | Recompiling with generic to specific replacement | |
US8997065B2 (en) | Automatic modularization of source code | |
US20230289583A1 (en) | System and method for adapting a neural network model on a hardware platform | |
US9152389B2 (en) | Trace generating unit, system, and program of the same | |
US20120233596A1 (en) | Measuring coupling between coverage tasks and use thereof | |
US9870221B2 (en) | Providing code change job sets of different sizes to validators | |
US10592703B1 (en) | Method and system for processing verification tests for testing a design under test | |
JP6264964B2 (ja) | ソフトウェア検証方法及びプロセッサ | |
JP2010134614A (ja) | 並列化処理方法、システム、及びプログラム | |
CN106776338B (zh) | 一种测试方法、装置及服务器 | |
CN110419031B (zh) | 用于微控制器程序的代码覆盖范围跟踪 | |
US10528691B1 (en) | Method and system for automated selection of a subset of plurality of validation tests | |
US10990073B2 (en) | Program editing device, program editing method, and computer readable medium | |
US8683494B1 (en) | Constructing event sequences in event-driven programs | |
CN108874656A (zh) | 代码测试方法、装置、可读存储介质及计算机设备 | |
Xu et al. | Semantic characterization of MapReduce workloads | |
JP6476777B2 (ja) | テストコンテキストの生成 | |
US20140013312A1 (en) | Source level debugging apparatus and method for a reconfigurable processor | |
US20140040907A1 (en) | Resource assignment in a hybrid system | |
US9098665B2 (en) | Prioritized soft constraint solving | |
CN106294130A (zh) | 一种单元测试方法及装置 | |
Biswal et al. | A novel approach for optimized test case generation using activity and collaboration diagram | |
Ivutin et al. | Low-level Code Auto-tuning for State-of-the-art Multicore Architectures | |
CN114153750B (zh) | 代码检查方法及装置、代码编写方法、电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20180115 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20180912 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20181016 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20190416 |