(57)【要約】      （修正有）【課題】処理時間および使用する処理資源を低減したソフトウェア確認方法を実現する。【解決手段】分類モジュール１３０は、多重ファンクション１２０を含むソフトウェアプログラム１１０の一部を受け取る。分類モジュール１３０は、複数のファンクションを２つ以上のファンクションのクラスタ１４０に分類し、クラスタのそれぞれについて、シンボリック実行エンジン１５０がシンボリックドライバ１５２を生成する。ファンクションのクラスタ１４０は、シンボリックドライバ１５２を使用してシンボリックに実行され、クラスタ内のファンクションについて具体的なテストケース１６０を生成する。ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または具体的なテストケースの数が特定の数より大きいことに応答して、分類モジュール１３０はファンクションを再分類する。【選択図】図１
2015219906.tif 000002
【特許請求の範囲】
【請求項１】
複数のファンクションを含むソフトウェアプログラムの一部を受け取り、
前記複数のファンクションを、ファンクションの２つ以上のクラスタに分類し、
ファンクションの前記クラスタのそれぞれについて、多重シンボリックドライバが生成されるように、シンボリックドライバを生成し、
前記シンボリックドライバを使用して、ファンクションの前記クラスタをシンボリックに実行し、前記クラスタ内の前記ファンクションについて具体的なテストケースを生成し、
ファンクションの前記クラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または前記具体的なテストケースの数が前記具体的なテストケースの特定の数より大きいことに応答して、前記ファンクションを再分類するソフトウェア確認方法。
【請求項２】
ファンクションの前記クラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、および前記具体的なテストケースの数が前記具体的なテストケースの前記特定の数より小さいことに応答して、前記ファンクションは再分類される請求項１に記載の方法。
【請求項３】
前記ファンクションの再分類は、ファンクションの２つ以上の前記クラスタを組み合わせること、ファンクションの前記クラスタの１つをファンクションの２つ以上の他のクラスタに分割すること、および１つ以上のファンクションをファンクションの前記クラスタの１つからファンクションの他の前記クラスタに移動すること、の１つ以上を有する請求項１に記載の方法。
【請求項４】
前記ファンクションは、１つ以上の分類ストラティジに基づいて分類され、前記分類ストラティジは、前記ファンクション間の読み出し依存性、前記ファンクション間のデータ変数依存性、および条件ステートメントに含まれる共有データ変数を有する請求項１に記載の方法。
【請求項５】
分類される前記ファンクションに基づいて前記分類ストラティジを選択することを有し、前記分類ストラティジの前記選択は、
分類される前記ファンクションに類似の他のファンクションであって、あらかじめ分類され、第２の具体的なテストケースを生成するようにシンボリックに実行され、そして前記あらかじめ分類された他のファンクションの前記シンボリックな実行の第２のカバレッジが第２の特定のカバレッジより大きくおよび前記第２の具体的なテストケースの第２の数が具体的なテストケースの第２の特定の数より小さくなるまで再分類されている他のファンクションを特定し、そして、
前記第２のカバレッジおよび前記第２の数を達成した前記あらかじめ分類された他のファンクションの前記再分類の数が、特定の繰り返し数より小さい時、前記あらかじめ分類された他のファンクションに適用する前の分類ストラティジを、前記分類ストラティジとして選択する請求項４に記載の方法。
【請求項６】
前記他のファンクションは、分類される前記ファンクションのラインカウント、繰り返し複雑性、命令パス長、コナシーン、およびハルステッド複雑性の１つ以上および他のファンクションに基づいて、分類される前記ファンクションに類似していると特定される請求項５に記載の方法。
【請求項７】
ファンクションの前記クラスタは、第１のファンクションのクラスタであり、ファンクションの前記クラスタのシンボリックな実行のカバレッジが前記特定のカバレッジより小さく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より小さいことに応答して、前記方法は、前記ファンクションを２つ以上の第２のファンクションのクラスタに分類することにより前記ファンクションを再分類することをさらに有し、ファンクションの前記第２のクラスタは、ファンクションの前記第１のクラスタより多いファンクションのクラスタを有する請求項１に記載の方法。
【請求項８】
ファンクションの前記クラスタは、第１のファンクションのクラスタであり、ファンクションの前記クラスタのシンボリックな実行のカバレッジが前記特定のカバレッジより大きく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より大きいことに応答して、前記方法は、前記ファンクションを２つ以上の第２のファンクションのクラスタに分類することにより前記ファンクションを再分類することをさらに有し、ファンクションの前記第２のクラスタは、ファンクションの前記第１のクラスタより少ないファンクションのクラスタを有する請求項１に記載の方法。
【請求項９】
前記ファンクションが再分類された後、前記方法は、ファンクションの前記クラスタの前記シンボリックな実行の前記カバレッジが前記特定のカバレッジより大きく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より小さくなるまで、
ファンクションの前記クラスタのそれぞれについて前記シンボリックドライバを生成し、
前記シンボリックドライバを使用して、ファンクションの前記クラスタをシンボリックに実行して、前記クラスタ内の前記ファンクションについて具体的なテストケースを発生し、そして
前記ファンクションを再分類する、ことを繰り返す請求項１に記載の方法。
【請求項１０】
コンピュータ命令を実行してシステムにソフトウェア確認の動作を実行させるように構成されたプロセッサであって、前記動作は、
複数のファンクションを含むソフトウェアプログラムの一部を受け取り、
前記複数のファンクションを、２つ以上のファンクションのクラスタに分類し、
ファンクションの前記クラスタのそれぞれについて、多重シンボリックドライバが生成されるように、シンボリックドライバを生成し、
前記シンボリックドライバを使用して、ファンクションの前記クラスタをシンボリックに実行し、前記クラスタ内の前記ファンクションについて具体的なテストケースを生成し、
ファンクションの前記クラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または前記具体的なテストケースの数が前記具体的なテストケースの特定の数より大きいことに応答して、前記ファンクションを再分類する、ことを有するプロセッサ。
【請求項１１】
ファンクションの前記クラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、および前記具体的なテストケースの数が前記具体的なテストケースの前記特定の数より小さいことに応答して、前記ファンクションは再分類される請求項１０に記載のプロセッサ。
【請求項１２】
前記ファンクションの再分類は、ファンクションの２つ以上の前記クラスタを組み合わせること、ファンクションの前記クラスタの１つをファンクションの２つ以上の他のクラスタに分割すること、および１つ以上のファンクションをファンクションの前記クラスタの１つからファンクションの他の前記クラスタに移動すること、の１つ以上を有する請求項１０に記載のプロセッサ。
【請求項１３】
前記ファンクションは、１つ以上の分類ストラティジに基づいて分類され、前記分類ストラティジは、前記ファンクション間の読み出し依存性、前記ファンクション間のデータ変数依存性、および条件ステートメントに含まれる共有データ変数を有する請求項１０に記載のプロセッサ。
【請求項１４】
分類される前記ファンクションに基づいて前記分類ストラティジを選択することを有し、前記分類ストラティジの前記選択は、
分類される前記ファンクションに類似の他のファンクションであって、あらかじめ分類され、第２の具体的なテストケースを生成するようにシンボリックに実行され、そして前記あらかじめ分類された他のファンクションの前記シンボリックな実行の第２のカバレッジが第２の特定のカバレッジより大きくおよび前記第２の具体的なテストケースの第２の数が具体的なテストケースの第２の特定の数より小さくなるまで再分類されている他のファンクションを特定し、そして、
前記第２のカバレッジおよび前記第２の数を達成した前記あらかじめ分類された他のファンクションの前記再分類の数が、特定の繰り返し数より小さい時、前記あらかじめ分類された他のファンクションに適用する前の分類ストラティジを、前記分類ストラティジとして選択する請求項１３に記載のプロセッサ。
【請求項１５】
前記他のファンクションは、分類される前記ファンクションのラインカウント、繰り返し複雑性、命令パス長、コナシーン、およびハルステッド複雑性の１つ以上および他のファンクションに基づいて、分類される前記ファンクションに類似していると特定される請求項１４に記載のプロセッサ。
【請求項１６】
前記ファンクションのクラスタは、第１のファンクションのクラスタであり、前記ファンクションのクラスタのシンボリックな実行のカバレッジが前記特定のカバレッジより小さく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より小さいことに応答して、前記方法は、前記ファンクションを２つ以上の第２のファンクションのクラスタに分類することにより前記ファンクションを再分類することをさらに有し、前記第２のファンクションのクラスタは、前記第１のファンクションのクラスタより多いファンクションのクラスタを有する請求項１０に記載のプロセッサ。
【請求項１７】
前記ファンクションのクラスタは、第１のファンクションのクラスタであり、前記ファンクションのクラスタのシンボリックな実行のカバレッジが前記特定のカバレッジより大きく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より大きいことに応答して、前記方法は、前記ファンクションを２つ以上の第２のファンクションのクラスタに分類することにより前記ファンクションを再分類することをさらに有し、前記第２のファンクションのクラスタは、前記第１のファンクションのクラスタより少ないファンクションのクラスタを有する請求項１０に記載のプロセッサ。
【請求項１８】
前記ファンクションが再分類された後、前記動作は、前記ファンクションのクラスタの前記シンボリックな実行の前記カバレッジが前記特定のカバレッジより大きく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より小さくなるまで、
前記ファンクションのクラスタのそれぞれについて前記シンボリックドライバを生成し、
前記シンボリックドライバを使用して、前記ファンクションのクラスタをシンボリックに実行して、前記クラスタ内の前記ファンクションについて具体的なテストケースを発生し、そして
前記ファンクションを再分類する、ことを繰り返す請求項１０に記載のプロセッサ。
【請求項１９】
複数のファンクションを含むソフトウェアプログラムの一部を受け取り、
前記ファンクションを、ファンクションの２つ以上の第１のクラスタであって、それぞれが２つ以上のファンクションを有する前記第１のクラスタに分類し、
ファンクションの前記第１のクラスタのそれぞれについて、多重シンボリックドライバが生成されるように、シンボリックドライバを生成し、
前記シンボリックドライバを使用して、ファンクションの前記第１のクラスタをシンボリックに実行し、前記第１のクラスタ内の前記ファンクションについて具体的なテストケースを生成し、
ファンクションの前記第１のクラスタの前記シンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または前記具体的なテストケースの数が前記具体的なテストケースの特定の数より大きいことに応答して、前記ファンクションをファンクションの２つ以上の第２のクラスタであって、ファンクションの前記第１のクラスタより多いファンクションのクラスタを有する第２のクラスタに分類することにより前記ファンクションを再分類し、そして
ファンクションの前記第１のクラスタの前記シンボリックな実行の前記カバレッジが前記特定のカバレッジより大きく且つ前記具体的なテストケースの前記数が前記具体的なテストケースの前記特定の数より大きくなるように、多重シンボリックドライバが生成され、前記ファンクションをファンクションの２つ以上の第２のクラスタに分類することにより前記ファンクションを再分類し、ファンクションの前記第２のクラスタは、ファンクションの前記第１のクラスタより少ないファンクションのクラスタを有するソフトウェア確認方法。
【請求項２０】
前記ファンクションが再分類された後、前記方法は、ファンクションの前記第２のクラスタの前記シンボリックな実行の前記カバレッジが前記特定のカバレッジより大きく且つ前記第２の具体的なテストケースの前記数が具体的なテストケースの前記特定の数より小さくなるまで、
ファンクションの前記第２のクラスタのそれぞれについて前記シンボリックドライバを生成し、
前記シンボリックドライバを使用して、ファンクションの前記第２のクラスタをシンボリックに実行して、前記第２のクラスタ内の前記ファンクションについて第２の具体的なテストケースを発生し、そして
前記ファンクションを再分類する、ことを繰り返す請求項１０に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
ここで説明する実施形態は、ソフトウェアの確認に関する。
【背景技術】
【０００２】
電子デバイスの使用の増加に伴って、これらのデバイスで動作するソフトウェアプログラム数が増加している。典型的には、ソフトウェアプログラムが開発される場合、ソフトウェアプログラムが所定の要求をすべて満たすことを保証する助けになるように確認される。ソフトウェアプログラムがすべての所定の要求を満たすか否かを決定するために具体的なテストケースを開発および実行することは、難しく、時間を要する。
【０００３】
ここで請求する主題は、上記のような欠点を解決またはそのような環境においてのみ動作する実施形態に限定されない。むしろ、この背景は、ここで説明するいくつかの実施形態が実行される技術分野の一例を説明するためにのみ提供される。
【発明の概要】
【０００４】
実施形態の第１の態様によれば、ソフトウェア確認方法は、多重ファンクションを含むソフトウェアプログラムの一部を受け取ることを有する。この方法は、ファンクションを、ファンクションの２つ以上のクラスタに分類すること、および、ファンクションのクラスタのそれぞれについて多重シンボリックドライバが生成されるように、シンボリックドライバを生成することを有する。ファンクションのクラスタは、シンボリックドライバを使用してシンボリックに実行され、クラスタ内のファンクションについて具体的なテストケースを生成する。ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または具体的なテストケースの数が具体的なテストケースの特定の数より大きいことに応答して、方法は、ファンクションを再分類することを有する。
【０００５】
実施形態の目的および利点は、少なくとも請求範囲で特に指摘された要素、特徴および組合せにより、実現および達成される。
【０００６】
上記の一般的な説明および以下の詳細な説明の両方は、例示および説明のためであり、請求された本発明を限定されるものでないことが理解されるべきである。
【０００７】
例示の実施形態は、付属の図面を使用して、本発明の実施形態の詳細な説明は、付加的な特別な例および詳細により、記述および説明される。
【図面の簡単な説明】
【０００８】
【図１】図１は、ソフトウェアを確認するための例示システムである。
【図２Ａ】図２Ａは、ソフトウェア確認中に使用する各種の例示のコードセグメントを示す。
【図２Ｂ】図２Ｂは、ソフトウェア確認中に使用する各種の例示のコードセグメントを示す。
【図３Ａ】図３Ａは、ソフトウェアを確認する例示の方法のフローチャートを示す。
【図３Ｂ】図３Ｂは、ソフトウェアを確認する例示の方法のフローチャートを示す。
【図４】図４は、ソフトウェアを確認するように構成された例示のシステムのブロック図である。
【図５】図５は、ソフトウェアを確認する他の例示の方法のフローチャートを示す。
【発明を実施するための形態】
【０００９】
ここで説明するいくつかの実施形態は、ソフトウェアプログラムを確認する方法およびシステムに関係する。確認されるソフトウェアプログラムは、ソフトウェアプログラム内で多重実行パスの一部を形成する多重機能（多重ファンクション:multiple functions)を有する。このファンクションに沿って、各種の他の要素が、条件(conditional)ステートメント、割り当て(assignment)ステートメントのようなソフトウェアステートメント、およびソフトウェアコードの他の部分を含む実行パスの一部を形成する。
【００１０】
いくつかの実施形態では、ソフトウェアプログラムは、ソフトウェアプログラムのファンクションを、ファンクションの２つ以上のクラスタ(cluster)に分類することにより確認される。ファンクションのクラスタのそれぞれについて、シンボリックドライバが生成される。シンボリックドライバは、ソフトウェアプログラムのファンクションをシンボリックに実行するように、シンボリック実行エンジンにより使用されるソフトウェアコードを有する。ファンクションのクラスタは、シンボリックドライバを使用してシンボリックに実行され、クラスタ内のファンクションについて具体的なテストケースを生成する。
【００１１】
具体的なテストケースを生成した後、シンボリック実行エンジンによる出力として、ファンクションのクラスタのシンボリックな実行のカバレッジ(coverage)は、ファンクションのクラスタの特定のカバレッジと比較され、特定のカバレッジより小さいカバレッジに対して、ファンクションは再分類され、新しいシンボリックドライバが生成され、ソフトウェアプログラムは再びシンボリックに実行される。それとは別に又はさらに、ファンクションのクラスタのシンボリックな実行の結果である具体的なテストケースの個数が具体的なテストケースの所望の個数より多いことに対して、ファンクションは再分類され、新しいシンボリックドライバが生成され、ソフトウェアプログラムは再びシンボリックに実行される。いくつかの実施形態では、ファンクションのクラスタのシンボリックな実行の結果である具体的なテストケースの個数が具体的なテストケースの所望の個数より少ないこと、およびカバレッジが特定のカバレッジより多いことに対して、具体的なテストケースがソフトウェアプログラムを確認するのに使用される。
【００１２】
いくつかの実施形態では、シンボリックな実行のためにファンクションを分類することは、生成される具体的なテストケースの個数と同様に、生成されるシンボリックドライバの個数を減少させる。シンボリックドライバの生成および具体的なテストケースの実行は、時間および／または処理資源を消費する。その結果、生成されるシンボリックドライバおよび具体的なテストケースの個数の減少は、ソフトウェアプログラムの確認に使用される時間および／または処理資源を減少させる。
【００１３】
一般に、具体的な実行は、ソフトウェアプログラムの各種の入力についての各種の値を使用したソフトウェアプログラムの実行である。具体的な値および／または具体的な入力は、整数、実数、ストリング、文字、真／偽、および他の任意の実値を含む。具体的な入力の単一セットでのソフトウェアプログラムの具体的な実行は、ソフトウェアプログラムを通しての単一実行パスに従う。具体的な実行およびその結果の出力は、ソフトウェアプログラム内でエラーが発生するかもしれないおよび／または発生した時、またはソフトウェアプログラムの他の解析を実行することにより、決定されるように試験される。
【００１４】
シンボリックな実行は、コンピュータまたはプロセッサのような機械を使用し、シンボリックな形式の数学的な方程式および表現を操作するシンボリックな評価から導出される公式のソフトウェア確認技術である。ソフトウェアプログラムをシンボリックに実行するため、値のセットを表現するシンボルは、数、ストリング、真／偽のようなソフトウェアのための個別の具体的な入力値を置き換える。このような変数を操作するのに使用される関数は、関数のシンボリックバージョンで置き換えられ、それらは具体的な値の代わりにシンボリックな式およびシンボルを操作する。そして、ソフトウェアプログラムは、通常実行されるように実行される。組織的（システマチック）な解析が発生されたシンボリックな式で実行され、前に説明したようにソフトウェアプログラムを実行し、ソフトウェアプログラムの機能性を確認するのに使用される具体的なテストケースを生成する。
【００１５】
本発明の実施形態は、付属の図面を参照して説明される。
【００１６】
図１は、ここで説明する実施形態の少なくとも１つにしたがって配置された、ソフトウェアプログラム１１０を確認するための例示のシステム１００である。システム１００は、分類モジュール１３０と、シンボリック実行エンジン１５０と、決定モジュール１７０と、を有する。
【００１７】
確認するソフトウェアプログラム１１０は、ファンクション１２０を含むＣ＋＋、Ｃ、Ｃ＃、Ｊａｖａ（登録商標）またはいくつかの他のプログラミング言語を有する。ファンクション１２０のそれぞれは、特定のタスクを実行するソフトウェアプログラム１１０の命名セクションを有する。いくつかの実施形態では、ファンクション１２０は、プロシデュア(procedures)またはルーチン(routines)として参照される。ファンクション１２０は、ソフトウェアプログラム１１０内の１つ以上のロケーションから実行、すなわち呼び出される。例えば、ファンクション１２０は、条件ステートメント内、割り当て内、他の１つ以上のファンクション１２０内、および／またはソフトウェアプログラム１１０の他の部分内で、実行される。いくつかの実施形態では、ファンクション１２０は、１つ以上の値を返すかまたは値を返さない。いくつかの実施形態では、ファンクション１２０は、ソフトウェアプログラム１１０の他の部分から離れた変数を変更するかまたは他の形で影響する、および／またはファンクション１２０は、ソフトウェアプログラム１１０内のグローバルまたは半グローバル変数に影響する。図２Ａは、ここで説明する少なくとも１つの実施形態にしたがった、ソフトウェアプログラムの一部である第１、第２および第３のファンクション２１０、２２０、２３０の例を示す。例えば、第１、第２および第３のファンクション２１０、２２０、２３０は、図１のソフトウェアプログラム１１０の一部である。
【００１８】
図１の議論に戻り、分類モジュール１３０は、ファンクション１２０を、ファンクションの２つ以上のクラスタ１４０（以下、「クラスタ１４０」）に分類するように構成されている。ファンクション１２０は、ファンクション１２０をクラスタにグループ化することにより分類される。いくつかの実施形態では、クラスタ１４０のそれぞれは、２つ以上のファンクション１２０を有する。別にまたはさらに、クラスタ１４０のいくつかは、ファンクション１２０の１つのみを有し、またはファンクション１２０のすべては、単一クラスタ１４０に分類される。いくつかの実施形態では、クラスタ１４０のそれぞれは、等しい個数のファンクション１２０を有するか、または異なる個数のファンクション１２０を有する。
【００１９】
いくつかの実施形態では、分類モジュール１３０は、１つ以上の分類ストラティジを使用してファンクション１２０を分類する。分類ストラティジは、他の分類ストラティジからの、ファンクション１２０間の呼び出し依存性、ファンクション１２０間のデータ変数依存性、条件ステートメントに含まれる共有データ変数を含むか、またはそれらに基づく。例えば、他の分類ストラティジは、１つ以上の具体的なケースを使用してソフトウェアプログラム１１０を実行することにより収集された情報を含む。この情報は、どのファンクション１２０がソフトウェアプログラム１１０を通した個別の実行パスに含まれるかまたは関係するかを示す。分類モジュール１３０は、収集された情報に基づいてファンクション１２０を分類する。
【００２０】
分類ストラティジ依存性を呼び出して使用する時、分類モジュール１３０は、静的に試験するか、またはファンクション１２０の呼び出し位置を示すソフトウェアプログラム１１０の静的な試験に関する情報を受け取る。これらのおよび他の実施形態では、分類モジュール１３０は、他のファンクション１２０の実行または呼び出しをするそれらのクラスタ１２０を分類する。例えば、第１ファンクションは、第２ファンクションおよび第３ファンクションを呼び出す。第２ファンクションは、第４ファンクションを呼び出す。分類モジュール１３０は、ファンクション１２０の間の呼び出し依存性の分類ストラティジを使用する時、第１、第２、第３および第４ファンクションを、ストラティジのクラスタに分類する。
【００２１】
データ変数分類ストラティジ依存性を使用する時、分類モジュール１３０は、静的に試験するか、または同一のデータ変数から書き込みおよび／または読み出すファンクション１２０を示すソフトウェアプログラム１１０の静的な試験に関する情報を受け取る。これらのおよび他の実施形態では、分類モジュール１３０は、同一のデータ変数から書き込みおよび／または読み出すそれらのファンクション１２０を分類する。
【００２２】
共有データ変数分類ストラティジ依存性を使用する時、分類モジュール１３０は、静的に試験するか、またはそこに含まれる同一のデータ変数を有する条件ステートメントでファンクション１２０を示すソフトウェアプログラム１１０の静的な試験に関する情報を受け取る。これらのおよび他の実施形態では、分類モジュール１３０は、そこに含まれる同一のデータ変数を有する条件ステートメントでそれらのファンクション１２０を分類する。
【００２３】
いくつかの実施形態では、分類モジュール１３０は、１つ以上の分類ストラティジの組み合わせを使用して、ファンクション１２０を分類する。例えば、分類モジュール１３０は、呼び出し依存性を有しかつ同一のデータ変数から書き込みおよび／または読み出すファンクション１２０を分類する。別にまたはさらに、分類モジュール１３０は、呼び出し依存性を有しかつ条件ステートメントに含まれる共有データ変数を有するファンクション１２０を分類する。図２Ａは、第２ファンクション２２０により呼び出される第１ファンクション２１０、および両方が条件ステートメントで変数”ａ”を有する第１および第２ファンクション２１０および２２０に基づいて分類される。
【００２４】
図１に戻ると、ファンクション１２０の分類は、ファンクション１２０を変更しないか、ソフトウェアプログラム１１０を変化させない。むしろ、ファンクション１２０の分類は、シンボリック実行エンジン１５０により使用されるファンクション１２０間の関係を示すに過ぎない。
【００２５】
シンボリック実行エンジン１５０は、クラスタ１４０を受け、クラスタ１４０のそれぞれについて１つ以上のシンボリックドライバ１５２を生成するように構成される。図２Ａは、クラスタ２２２についての第１シンボリックドライバ２４０を、第３ファンクション２３０についての第２シンボリックドライバ２５０を、示す。
【００２６】
シンボリックドライバ１５２は、シンボリック実行エンジン１５０がいかにシンボリックにクラスタ１４０を実行するかをガイドするソフトウェアコードのセグメントを有する。例えば、クラスタ１４０のファンクションの第１のクラスタ（以下「第１クラスタ」）について、シンボリックドライバ１５２は、第１クラスタ内のファンクションで使用される変数についてのシンボリックな変数を示す。図２Ａの第１シンボリックドライバ２４０のライン２４４および２４６は、例示のシンボリックな変数の例を示す。
【００２７】
図１に戻り、いくつかの実施形態では、シンボリックドライバ１５２は、対応するクラスタ１４０内の１つ以上のファンクションを呼び出す。特に、シンボリックドライバ１５２は、他のファンクションにより呼び出されない対応するクラスタ１４０内の全てのファンクションに呼び出しを行う。例えば、クラスタ１４０のファンクションの第１クラスタ（以下、「第１クラスタ」）について、もし第１クラスタ内の１つのファンクションが第１クラスタ内の他のファンクションについてエントリィファンクションであれば、第１クラスタについてのシンボリックドライバ１５２は、エントリィファンクションを呼び出し、第１クラスタ内の他のファンクションを呼び出さない。クラスタについてのエントリィファンクションは、クラスタのファンクション内すべての実行パスが実行された時に、呼び出されて実行されるとクラスタ内の他のファンクションの呼び出しになるファンクションである。図２Ａの第１シンボリックドライバ２４０のライン２４８は、図示のように、第１のファンクションに関するエントリィファンクションである第２のファンクション２２０の呼び出しを示す。
【００２８】
図１に戻り、いくつかの実施形態では、シンボリックドライバ１５２は、対応するクラスタ１４０内のファンクション１２０についてのファンクション情報も有する。例えば、クラスタ１４０のファンクションの第１クラスタ（以下「第１クラスタ」）について、第１クラスタ内のファンクションについてのファンクション情報は、第１クラスタに対応するシンボリックドライバ１５２内に含まれる。ファンクション情報は、シンボリック実行エンジン１５０が、第１クラスタの一部でなく第１クラスタ内のファンクションにより呼び出されないファンクション内の別のパスを無視するように指示する。例えば、図２Ａにおいて、第１および第２のファンクション２１０および２２０は、クラスタ２２２に含まれる。第３のファンクション２３０は、第２ファンクション２２０の実行中に、第２ファンクション２２０により呼び出される。クラスタ２２２のシンボリックな実行中に、シンボリック実行エンジン１５０は、第３のファンクション２３０を実行するが、シンボリックな実行により生成されたシンボリックな束縛を解く時には、第３のファンクション２３０内の他のステートメントのような第２のファンクション２２０内のすべてのパスを実行する必要のない第３のファンクション２３０内における他のパスは無視する。図２Ａの第１のシンボリックドライバのライン２４２は、ファンクションのクラスタ内のファンクションを、シンボリック実行エンジンに指示する１つの表示を示す。シンボリック実行エンジン１５０がファンクションのクラスタ内に含まれず、ファンクションのクラスタ内のファンクションにより呼び出されるファンクション内の他のパスをどのように無視するかについての更なる詳細は、"PATH EXECUTION REDUCTION IN SOFTWARE PROGRAM VERIFICATION"のタイトルで、２０１４年５月１５日付で出願した米国出願14/278,783号に記載されており、ここでは、その全体を参照して組み込むものとする。
【００２９】
図１に戻り、クラスタ１４０についてのシンボリックドライバ１５２を生成した後、シンボリック実行エンジン１５０は、シンボリックドライバ１５２に基づいてクラスタ１４０をシンボリックに実行する。特に、シンボリック実行エンジン１５０は、クラスタ１４０に対応するシンボリックドライバ１５２により指示されたようにクラスタ１４０をシンボリックに実行する。
【００３０】
クラスタ１４０をシンボリックに実行するため、シンボリック実行エンジン１５０は、クラスタ１４０のファンクション１２０内のソフトウェアステートメントについてシンボリックな式を生成する。シンボリック実行エンジン１５０は、シンボリックな式のそれぞれを解き、例えば、ファンクション１２０のそれぞれの満足度を決定し、具体的な入力を生成する。いくつかの実施形態では、シンボリック実行エンジン１５０は、シンボリックドライバ１５２の１つを実行し、一度にはクラスタ１４０の対応する１つをシンボリックに実行する。別にまたはさらに、シンボリック実行エンジン１５０は、多重のシンボリックドライバ１５２を並列に実行する。具体的な入力に基づいて、シンボリック実行エンジン１５０は、具体的な入力を使用してファンクション１２０を実行し、ファンクション１２０の機能性を確認するのに使用される具体的なテストケース１６０を生成する。図２Ｂは、第１のシンボリックドライバ２４０のシンボリックな実行から導出された第１の具体的なテストケース２６０および第２のシンボリックドライバ２５０のシンボリックな実行から導出された第２の具体的なテストケース２７０を示す。
【００３１】
図１に戻り、シンボリック実行エンジン１５０は、シンボリック実行エンジン１５０によりシンボリックに実行されるソフトウェアプログラムの量を示すカバレッジ情報１６２を生成するようにさらに構成されている。いくつかの実施形態では、カバレッジ情報１６２は、シンボリック実行エンジン１５０により実行されるライン数に基づいている。例えば、カバレッジ情報１６２は、シンボリックに実行されるソフトウェアプログラム１１０のライン数を、ソフトウェアプログラム１１０の全ライン数の百分率として含むか、または実行されるライン数に基づく他ものである。別にまたはさらに、カバレッジ情報１６２は、シンボリック実行エンジン１５０により実行される条件状態、ファンクション、および／またはクラスの個数および／または百分率に基づいている。例えば、カバレッジ情報１６２は、実行される条件状態、ファンクション、および／またはクラスの個数、および／またはソフトウェアプログラム内の条件状態、ファンクション、および／またはクラスの個数の百分率として実行される条件状態、ファンクション、および／またはクラスの個数の百分率を、有する。
【００３２】
具体的なテストケース１６０およびカバレッジ情報１６２は、決定モジュール１７０に提供される。決定モジュール１７０は、分類モジュール１３０によりファンクション１２０を再分類し、再分類したファンクションをシンボリックに実行するか否かを決定するように構成されている。決定モジュール１７０は、具体的なテストケース１６０の個数およびカバレッジ情報１６２に基づいてファンクション１２０を再分類する時を決定する。特に、決定モジュール１７０は、具体的なテストケース１６０の個数が特定のテストケース数より大きい時および／またはカバレッジ情報１６２が特定のカバレッジより小さいことを示す時、ファンクション１２０を再分類すると決定する。
【００３３】
特定のテストケース数は、ソフトウェアプログラム、ユーザからの入力、具体的なテストケース１６０を処理する処理性能のサイズ、複雑性またはファンクション数のようなソフトウェアプログラム１１０の測定基準、他の測定基準、またはそれらの組み合わせに基づいて決定される。例えば、具体的なテストケース１６０を実行する処理資源、処理パワー、および／または処理時間が限定される時、具体的なテストケース１６０の減少は、具体的なテストケース１６０を実行するのに使用される処理時間、処理パワーおよび／または処理資源を減少させる。
【００３４】
カバレッジ情報１６２は、ソフトウェアプログラム１１０の測定基準、ソフトウェアプログラムの意図した使用、ユーザからの入力、および／または他の測定基準に基づいて決定される。例えば、ソフトウェアプログラム１１０が非常の大きい時、ソフトウェアプログラム１１０のいくつかは、ソフトウェアプログラム１１０の１５から２５％のようなデッドコード(dead code)であると仮定される。その結果、特定のカバレッジは、プログラムのデッドコードを考慮して、７０から８０％に設定される。
【００３５】
具体的なテストケース１６０の数が特定のテストケース数より大きいと決定モジュール１７０が決定する時、および／またはカバレッジが特定のカバレッジより小さいとカバレッジ情報１６２が示す時、決定モジュール１７０は、ファンクション１２０が再分類されることを分類モジュール１３０に指示する。
【００３６】
いくつかの実施形態では、決定モジュール１７０は、具体的なテストケース１６０の数およびカバレッジ情報１６２に基づいて、ファンクション１２０をどのように再分類するかを、分類モジュール１３０に指示する。例えば、カバレッジ情報１６２により指示されたクラスタのカバレッジが特定のカバレッジより小さいこと、および具体的なテストケース１６０の数が具体的なテストケース１６０の特定の数より小さいことに応答して、決定モジュール１７０は、分類モジュール１３０に、クラスタ１４０の現在数より多いファンクションのクラスタ数を形成することによりファンクション１２０を再分類するように指示する。決定モジュール１７０は、分類モジュール１３０に、１つ以上のクラスタ１４０を分割してより多くのファンクションのクラスタを形成するように指示する。いくつかの実施形態では、分類モジュール１３０は、ファンクション１２０を再分類し、異なる分類ストラティジを適用するかまたは分類ストラティジの厳重な適用に基づいて、より多くのクラスタ１４０を生成する。例えば、第１の繰り返しにおいて、分類モジュール１３０は、ファンクション１２０内で依存する１つのデータ変数を有するファンクション１２０に基づいて、データ可変依存性および分類されたファンクション１２０を適用する。第２の繰り返しにおいて、分類モジュール１３０は、データ可変依存性を適用するが、ファンクション１２０内で依存する２つのデータ変数を有するファンクション１２０に基づいてファンクション１２０を分類する。
【００３７】
他の例として、カバレッジ情報１６２により特定のカバレッジより大きいことおよび具体的なテストケース１６０の個数が具体的なテストケースの特定の個数より大きいことが示されたクラスタ１４０のカバレッジに応答して、決定モジュール１７０は、クラスタ１４０の現在の個数より少ないファンクションのクラスタを形成することにより、分類モジュール１３０に、クラスタ１２０を再分類するように指示する。分類モジュール１３０は、クラスタ１４０を組み合わせるが、またはクラスタ１４０の部分をクラスタ１４０の他と組み合わせることにより、より少ない個数のファンクションを形成する。いくつかの実施形態では、分類モジュール１３０は、異なる分類ストラティジを適用するかまたは分類ストラティジをより緩く適用することで、ファンクションを再分類し、ファンクションのより少ない個数のクラスタを生成する。例えば、第１の繰り返し中に、分類モジュール１３０は、ファンクション１２０中に依存する２つ以上のデータ変数を有するファンクション１２０に基づいて、データ可変依存性ストラティジを適用し、ファンクション１２０を分類する。第２の繰り返し中に、分類モジュール１３０は、データ可変依存性ストラティジを適用するが、ファンクション１２０中に依存する１つのデータ変数を有するファンクション１２０に基づいて、ファンクション１２０を分類する。
【００３８】
他の実施形態として、カバレッジ情報１６２により特定のカバレッジより小さいことおよび具体的なテストケース１６０の個数が具体的なテストケースの特定の個数より大きいことが示されたクラスタ１４０のシンボリックな実行のカバレッジに応答して、決定モジュール１７０は、現在の繰り返し中よりむしろ次の繰り返し中に異なる分類ストラティジを使用することにより、分類モジュール１３０に、クラスタ１２０を再分類するように指示する。
【００３９】
上記のファンクション１２０の分類は、ソフトウェアプログラム１１０を確認するのに使用される具体的なテストケース１６０の個数を削減する。例えば、いくつかの既知のシステムでは、シンボリックドライバは、ソフトウェアプログラム中でファンクションごとに生成される。シンボリックドライバが実行され、具体的なテストケースがファンクションごとに生成される。ファンクションごとに別々に具体的なテストケースを生成することにより、異なる入力で多数回テストされた複数のファンクションになる。例えば、具体的なテストケースが図２Ａの第１および第２のファンクション２１０および２２０のそれぞれについて別々に生成されるならば、２つの具体的なテストケースが第１および第２のファンクション２１０および２２０のそれぞれについて別々に生成され、結果として４つの具体的なテストケースになる。これに対して、図１に示したシステム１００を使用すると、３つの具体的なテストケースのみが生成される。より少ない具体的なテストケースにすることにより、具体的なテストケースでのソフトウェアプログラム１１０の確認のための処理時間および／または処理資源を低減させられる。
【００４０】
さらに、いくつかの既知のシステムでは、システムは、冗長な具体的なテストケースを除去するようにする具体的なテストケースが生成された後、具体的なテストケースを抜粋する。これに対して、上記のシステム１００は、ソフトウェアプログラム１１０のファンクション１２０を分類し、クラスタ１４０に基づいてファンクション１２０を実行し、生成される具体的なテストケース１６０の個数を低減する。生成される具体的なテストケース１６０の個数の低減は、冗長な具体的なテストケースの個数も低減する。
【００４１】
さらに、ファンクション１２０を分類することにより、生成されるシンボリックドライバ１５２の個数は低減される。シンボリックドライバ１５２の個数の低減は、ソフトウェアプログラム１１０を確認するのに使用される処理時間および／または処理資源も低減する。
【００４２】
本開示の範囲を逸脱すること無しに、システム１００に対して変形、付加または除去を行うことができる。例えば、システム１００は、示された要素またはモジュール以外の他の要素またはモジュールを有してもよい。さらに、図２Ａおよび図２Ｂに示したソフトウェアコード部分は、例示の方法で提供されるが、それに限定されず、どのような方法で提供されてもよい。
【００４３】
図３Ａおよび図３Ｂは、ここで説明する少なくともいくつかの実施形態にしたがって配置されたテスト用ソフトウェアの例示の方法３００のフローチャートを示す。方法３００は、いくつかの実施形態では、図１および図４のシステム１００または４００のようなシステムにより実現される。例えば、図４のシステム４００のプロセッサ４２０は、コンピュータ命令を実行するように構成され、方法３００のブロック３０２、３０４、３０６、３０８、３１０、３１２、３１４、３１６、３１８、３２０、３２２、３２４および／または３２６のうちの１つ以上により表されるテスト用ソフトウェアについての動作を実行する。個別のブロックとして示されているが、各種のブロックは、所望の実現方法により、さらなるブロックに分割しても、より少ないブロックに組み合わせても、または除去してもよい。
【００４４】
方法３００は、ブロック３０２で開始し、ソフトウェアプログラムのファンクションを分類する分類ストラティジが選択される。分類ストラティジは、ソフトウェアプログラムのファンクションを一緒に分類するかまたはグループ化するための基礎である。選択された分類ストラティジは、ファンクション間の依存性、ファンクション間のデータ可変依存性、ファンクション内の条件ステートメントに含まれる共有データ変数、他の分類ストラティジを呼び出すことを有する。例えば、他の分類ストラティジは、１つ以上の具体的なテストケースを使用するソフトウェアプログラムの実行により収集された情報を有する。この情報は、ソフトウェアプログラムのどのファンクションがソフトウェアプログラム１１０を通る個別の実行パス内に含まれるか、または他に関係するかを示す。この分類ストラティジは、この情報に基づいたファンクションの分類を有する。例えば、個別の実行パスに含まれるファンクションは、一緒に分類される。
【００４５】
いくつかの実施形態では、分類ストラティジは、利用可能な分類ストラティジは、からランダムに選択してよい。別にまたはさらに、分類ストラティジは、ソフトウェアプログラムの静的な解析のような解析方法に基づいて選択してもよい。ソフトウェアプログラムの解析からの情報は、分類ストラティジを選択するのに使用される。この情報は、ソフトウェアプログラムのライン数、ソフトウェアプログラムのファンクション数、ソフトウェアプログラムにおけるファンクション間の相互依存数、他のファンクションを呼び出すファンクション数、変数を共有するファンクション数、および他のファクタを有する。
【００４６】
いくつかの実施形態では、分類ストラティジは、確認されるソフトウェアプログラムに類似したあらかじめ確認されたソフトウェアプログラムを特定することにより選択される。確認されるソフトウェアプログラムに類似したあらかじめ確認されたソフトウェアプログラムを特定した後、あらかじめ確認されたソフトウェアプログラムに使用された分類ストラティジが選択される。これらおよび他の実施形態では、あらかじめ確認されたソフトウェアプログラムは、あらかじめ分類され、第２の具体的なテストケースを生成するようにシンボリックに実行され、あらかじめ確認されたソフトウェアプログラムのシンボリックな実行の第２のカバレッジが第２の特定のカバレッジより大きく、第２の具体的なテストケースの第２の個数が具体的なテストケースの第２の特定の個数より小さくなるまで再分類される。
【００４７】
いくつかの実施形態では、あらかじめ確認されたソフトウェアプログラムに適用された分類ストラティジは、あらかじめ確認されたソフトウェアプログラムが再分類された回数が特定の繰り返し数より少ない時に、選択される。特定の繰り返し数は、ソフトウェアプログラムを確認するシステムのユーザにより、ソフトウェアプログラムを確認する処理時間および／またはソフトウェアプログラムを確認するのに利用可能な処理資源、他の測定基準または情報に基づいて、ランダムに選択される。
【００４８】
いくつかの実施形態では、ソフトウェアプログラムは、ソフトウェアプログラムの１つ以上の測定基準およびあらかじめ確認されたソフトウェアプログラムにおける類似性に基づいて、あらかじめ確認されたソフトウェアプログラムに類似するように決定される。測定基準は、ラインカウント、繰り返し複雑性(cyclomatic complexity)、命令パス長、コナシーン(connascene)、およびハルステッド複雑性(halstead complexity)、他のソフトウェア測定基準を有する。
【００４９】
ブロック３０４では、ソフトウェアプログラムのファンクションは、選択した分類ストラティジに基づいて分類される。ファンクションの分類は、各クラスタ内の関係するファンクションを有する。ファンクションの分類は、ファンクションまたはソフトウェアプログラムを変更しない。
【００５０】
ブロック３０６では、ファンクションのクラスタのそれぞれについてのシンボリックドライバが生成される。シンボリックドライバは、どのようにシンボリック実行エンジンがファンクションのクラスタをシンボリックに実行するかを案内するソフトウェアコードのセグメントである。
【００５１】
ブロック３０８では、ファンクションのクラスタを含むソフトウェアプログラムが、シンボリックドライバに基づいてシンボリックに実行される。ソフトウェアプログラムは、シンボリック実行エンジンを使用してシンボリックに実行される。いくつかの実施形態では、ソフトウェアプログラムをシンボリックに実行することは、発生される各種の具体的なテストケースになる。具体的なテストケースは、ファンクションのクラスタのシンボリックな実行中に生成されるシンボリックな表現の解法に基づいて生成される。
【００５２】
ブロック３１０では、ファンクションのクラスタのシンボリックな実行に基づいて生成される具体的なテストケースがカウントされる。ブロック３１２では、ファンクションのクラスタのシンボリックな実行のカバレッジ情報が決定される。カバレッジは、ブロック３０８においてシンボリックに実行されるソフトウェアプログラムの量を示す。
【００５３】
ブロック３１４では、ソフトウェアプログラムのカバレッジが特定のカバレッジより大きいか決定される。特定のカバレッジは、ソフトウェアプログラム測定基準、ソフトウェアプログラムの意図した使用、ユーザからの入力、および／または他の測定基準に基づいている。特定のカバレッジより大きいカバレッジに応答して、方法３００は、ブロック３１８に進む。特定のカバレッジより大きくないカバレッジに応答して、方法３００は、ブロック３１６に進む。
【００５４】
ブロック３１６では、具体的なテストケース数が、具体的なテストケースの特定の数より小さいか決定される。具体的なテストケースの特定の数は、サイズ、複雑性、またはソフトウェアプログラムのファンクション数のようなソフトウェアプログラムの測定基準、ユーザからの入力、具体的なテストケースを処理するための処理能力、他の測定基準、またはそれらの組み合わせに基づいて決定される。具体的なテストケース数が具体的なテストケースの特定の数より小さい時、方法３００は、ブロック３２２に進む。具体的なテストケース数が具体的なテストケースの特定の数より小さくない時、方法３００は、ブロック３２６に進む。
【００５５】
ブロック３１８で、具体的なテストケース数が具体的なテストケースの特定の数より小さいか決定される。具体的なテストケース数が具体的なテストケースの特定の数より小さい時、方法３００は、ブロック３２０に進む。具体的なテストケース数が具体的なテストケースの特定の数より小さくない時、方法３００は、ブロック３２４に進む。
【００５６】
ブロック３２０で、ソフトウェアプログラムは、具体的なテストケースを使用してテストされる。いくつかの実施形態では、ブロック３２０でソフトウェアプログラムが具体的なテストケースを使用してテストされる前に方法３００が実行される繰り返し数が、注目される。特に、カバレッジが特定のカバレッジより大きくかつ具体的なテストケース数が具体的なテストケースの特定の数より小さくなるまでのソフトウェアプログラムのファンクションの再分類数が注目される。さらに、選択された最後の分類ストラティジが注目される。最後に選択された分類ストラティジおよび繰り返し数は、他のソフトウェアプログラムの分類方法を選択するために、方法３００の他の繰り返し中に使用される。
【００５７】
ブロック３２２では、ファンクションの１つ以上のクラスタが分離され、ファンクションの分離されたクラスタ内のファンクションがファンクションの残りのクラスタ中に分散される。ファンクションの１つ以上のクラスタを分離することにより、現在の繰り返し中には、方法３００の前の繰り返し中のファンクションのクラスタ数より多い数のファンクションのクラスタがある。ファンクションの１つ以上のクラスタを分離した後、方法３００はブロック３０６に進み、方法３００は既に上記で述べたように続く。
【００５８】
ブロック３２４では、ファンクションの１つ以上のクラスタが、クラスタの他のファンクションと組み合わされる。ファンクションの１つ以上のクラスタを組み合わせることにより、現在の繰り返し中には、方法３００の前の繰り返し中のファンクションのクラスタ数より少ない数のファンクションのクラスタがある。ファンクションの１つ以上のクラスタを組み合わせた後、方法３００はブロック３０６に進み、方法３００は既に上記で述べたように続く。
【００５９】
ブロック３２６では、ブロック３０２で選択された分類ストラティジとは異なる分類ストラティジが選択される。方法３００はブロック３０４に進み、方法３００は続く。
【００６０】
この分野の熟練者であれば、ここで開示したこのおよび他の処理および方法について、処理および方法で実行されるファンクションが異なる順番で実現してもよいことが理解できるであろう。さらに、概略の行動および動作は例示として提供されただけであり、行動および動作は、任意であり、開示の実施形態の根幹を逸脱せずに、より少ない行動および動作に組み合わせること、付加的な行動および動作に拡張することが可能である。
【００６１】
例えば、いくつかの実施形態では、方法３００は、方法３００の繰り返し数が繰り返し数の特定の数より大きくなると終了する。繰り返し数の特定の数は、処理時間、処理パワー、および／または方法を実行するのに利用可能な処理資源、ユーザの入力および／またはいくつかの他の測定基準に基づく。
【００６２】
図４は、ここで説明する少なくともいくつかの実施形態にしたがって配置されたソフトウェアを確認するように構成される例示のシステム４００のブロック図である。システム４００は、データベース４１０、プロセッサ４２０、メモリ４３０、およびインターフェースユニット４４０を有する。データベース４１０、プロセッサ４２０、メモリ４３０、およびインターフェースユニット４４０は、通信可能に結合されている。
【００６３】
データベース４１０は、第１ソフトウェア４１２、第２ソフトウェア４１４、データ４１６、および確認モジュール４１８を有する。第１ソフトウェア４１２は、複数のファンクションを有するソフトウェアプログラムを有する。第２ソフトウェア４１４は、ソフトウェアプログラムを有し、そのファンクションはここで説明したようにあらかじめ分類されて確認されている。データ４１６は、第１および／または第２ソフトウェア４１２および４１４についてのデータを有する。
【００６４】
確認モジュール４１８は、コンピュータ命令を有し、コンピュータ命令は、プロセッサ４２０のようなプロセッサにより実行される時、ここで説明したファンクションおよび動作を実行する。例えば、コンピュータ命令は、第１ソフトウェア４１２を解析するために実行される時、第１ソフトウェア４１２からのファンクションをファンクションのクラスタに分類し、ファンクションのクラスタ用のシンボリックドライバを生成し、シンボリックドライバに基づいて第１ソフトウェア４１２をシンボリックに実行し、具体的なテストケースおよび第１ソフトウェア４１２のシンボリックな実行の結果であるカバレッジに基づいて、第１ソフトウェア４１２のファンクションを再分類するか決定する。したがって、確認モジュール４１８は、図１の分類モジュール１３０、シンボリック実行エンジン１５０、および／または決定モジュール１７０を有するおよび／またはそれらに対応する。
【００６５】
いくつかの実施形態では、確認モジュール４１８は、第１ソフトウェア４１２の分類ストラティジを決定および／または実行するために、実行される時にデータ４１６を使用することのコンピュータ命令を有する。例えば、データ４１６は、第１ソフトウェア４１２の静的な解析から第１ソフトウェア４１２について収集された情報を含む。これらおよび他の実施形態では、データは、第１ソフトウェア４１２のコードのライン数、第１ソフトウェア４１２内の変数依存性、第１ソフトウェア４１２内のファンクション呼び出し依存性、第１ソフトウェア４１２についての他の測定基準／情報を有する。
【００６６】
いくつかの実施形態では、確認モジュール４１８は、第２ソフトウェア４１４に基づいて第１ソフトウェア４１２用の分類ストラティジを選択するコンピュータ命令を有する。例えば、第１ソフトウェア４１２は第２ソフトウェア４１４と比較され、第１ソフトウェア４１２が第２ソフトウェア４１４に類似している時、第２ソフトウェア４１４に使用された分類ストラティジが、第１ソフトウェア４１２用の分類ストラティジとして使用される。
【００６７】
プロセッサ４２０は、確認モジュール４１８からのコンピュータ命令を実行するように構成され、それはプロセッサ４２０にここで説明したファンクションおよび動作を実行させる。コンピュータ命令は、プロセッサ４２０による実行のためにメモリ４３０にロードされ、および／またはここで説明したファンクションおよび動作の実行中に生成され、受信され、動作したデータは、少なくとも一時的にメモリ４３０に記憶される。例えば、第１ソフトウェア４１２、第２ソフトウェア４１４、データ４１６、および／またはそれらのいずれかまたはすべての部分は、プロセッサ４２０による使用のために、メモリ４３０に一時的に記憶される。インターフェースユニット４４０は、いずれかの形式の通信ネットワーク上で、他のシステム、ユーザ、および／または他のプロセッサからデータを受信するおよび／またはそれらにデータを送信する。
【００６８】
本開示の範囲を逸脱すること無しに、システム４００についての変形、付加、除去を行うことができる。例えば、プロセッサ４２０は、単一プロセッサまたは一緒に動作する多重プロセッサを有する。これらおよび他の実施形態では、多重プロセッサは、物理的には同じ位置に配置されるか、または一緒にネットワーク化された離れた位置に配置される。さらに、プロセッサ４２０は、一般用途のプロセッサまたはアプリケーション専用プロセッサを有する。別にまたはさらに、プロセッサ４２０は、専用のプロセッサ、またはフィールド・プログラマブル・ゲート・アレイ(FGPA)またはコンピュータ命令を実行するように構成された他の形式のデバイスを有する。
【００６９】
図５は、ここで説明した少なくともいくつかの実施形態にしたがって配置されたソフトウェアを確認する例示の方法５００のフローチャートである。方法５００は、いくつかの実施形態では、図１および図４のシステム１００または４００のようなシステムにより実現される。例えば、図４のシステム４００のプロセッサ４２０は、コンピュータ命令を実行するように構成され、方法５００のブロック５０２、５０４、５０６、５０８および／または５１０のうちの１つ以上により表されるように、ソフトウェアを確認する動作を実行する。個別のブロックとして示しているが、各種のブロックは、所望の実現方法に依存して、付加的なブロックに分割しても、より少ないブロックに組み合わせても、除去してもよい。
【００７０】
方法５００は、ブロック５０２で開始し、複数のファンクションを有するソフトウェアプログラムの一部が受信される。ブロック５０４で、ファンクションは、ファンクションの２つ以上のクラスタに分類される。いくつかの実施形態では、ファンクションは、１つ以上の分類ストラティジに基づいて分類される。分類ストラティジは、ファンクション間の呼び出し依存性、ファンクション間のデータ変数依存性、および条件ステートメントに含まれる共有データ変数、他のストラティジを有する。
【００７１】
ブロック５０６では、シンボリックドライバは、ファンクションのクラスタごとに生成され、複数のシンボリックドライバが生成される。ブロック５０８では、ファンクションのクラスタは、シンボリックドライバを使用してシンボリックに実行され、クラスタ内のファンクションについて具体的なテストケースを生成する。
【００７２】
ブロック５１０では、ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、または具体的なテストケースの数が具体的なテストケースの特定の数より多いことに応答して、ファンクションが再分類される。いくつかの実施形態では、ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さいこと、および具体的なテストケースの数が具体的なテストケースの特定の数より多いことに応答して、ファンクションは再分類される。
【００７３】
いくつかの実施形態では、ファンクションの再分類は、ファンクションの２つ以上のクラスタの１つ以上の組み合わせ、ファンクションの１つのクラスタのファンクションの２つ以上のクラスタへの分割、１つ以上のファンクションをファンクションの１つのクラスタから他のファンクションのクラスタへ移動すること、および前に使用したのと異なる分類ストラティジに基づくファンクションの分類を有する。
【００７４】
いくつかの実施形態では、ファンクションが再分類された後、ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより大きくなり、具体的なテストケースの数が具体的なテストケースの特定の数より小さくなるまで、方法５００は、ブロック５０６、５０８、および５１０を繰り返す。
【００７５】
図５の概略の行動および動作は例示として提供されただけであり、行動および動作は、任意であり、開示の実施形態の根幹を逸脱せずに、より少ない行動および動作に組み合わせること、付加的な行動および動作に拡張することが可能である。
【００７６】
例えば、方法５００は、分類されるファンクションに基づいて分類ストラティジを選択することをさらに有する。いくつかの実施形態では、分類ストラティジの選択は、分類されるファンクションに類似の他のファンクションを特定することを有する。他のファンクションは、あらかじめ分類されており、あらかじめ分類した他のファンクションの第２のカバレッジが第２の特定のカバレッジより大きくなり、第２の具体的なテストケースの第２の数が具体的なテストケースの第２の特定の数より小さくなるまで、シンボリックに実行されて、第２の具体的なテストケースを生成し、再分類される。分類ストラティジの選択は、第２のカバレッジおよび第２の数を達成するためあらかじめ分類した他のファンクションの再分類数が繰り返しの特定の数より小さい時、あらかじめ分類された他のファンクションに適用する最後の分類ストラティジを選択することを有する。これらのおよび他の実施形態では、他のファンクションは、分類されるファンクションおよび他のファンクションのラインカウント、繰り返し複雑性、命令パス長、コナシーン(connascene)、およびハルステッド複雑性(halstead complexity)に基づいて、分類されるファンクションに類似していることが特定される。
【００７７】
いくつかの実施形態では、ファンクションのクラスタは、ファンクションの第１のクラスタである。これらのおよび他の実施形態では、ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより小さくなり、具体的なテストケースの数が具体的なテストケースの特定の数より小さくなるのに応答して、方法は、ファンクションを２つ以上のファンクションの第２のクラスタに分類することによりファンクションを再分類することをさらに有し、そこではファンクションの第２のクラスタは、ファンクションの第１のクラスタより多いファンクションのクラスタを有する。別にまたはさらに、ファンクションのクラスタのシンボリックな実行のカバレッジが特定のカバレッジより大きくなり、具体的なテストケースの数が具体的なテストケースの特定の数より大きくなるのに応答して、方法は、ファンクションを２つ以上のファンクションの第２のクラスタに分類することによりファンクションを再分類することをさらに有し、そこではファンクションの第２のクラスタは、ファンクションの第１のクラスタより少ないファンクションのクラスタを有する。
【００７８】
ここで説明した実施形態は、これまで詳細に議論したように、各種のコンピュータハードウェアまたはソフトウェアモジュールを含む専用のまたは半用のコンピュータの使用を有する。
【００７９】
ここで説明した実施形態は、コンピュータ読取可能な媒体を使用して実現され、媒体は記憶されたコンピュータ実行可能な命令またはデータ構造を担持または有する。このようなコンピュータ読取可能な媒体は、汎用または瀬引用のコンピュータによりアクセスされる利用可能な媒体である。それにより制限されない例として、このようなコンピュータ読取可能な媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、または他の光学ディスク記憶装置、磁気ディスク記憶装置、または他の磁気記憶装置、またはコンピュータ実行可能な命令またはデータ構造の形で所望のプログラムコードを担持または記憶するのに使用され、汎用のまたは専用のコンピュータによりアクセスされる他の記憶媒体を含む非一時的および／または確実なコンピュータ読取可能な記憶媒体を有する。上記の組み合わせは、コンピュータ読取可能な媒体の範囲に含まれる。
【００８０】
コンピュータ実行可能な命令は、例えば、汎用コンピュータ、専用コンピュータまたは特別な専用処理装置に、あるファンクションまたはファンクションのグループを実行させる命令およびデータを有する。主題は構造的な特徴および／または方法論的動きを特定する言語で記載されているが、特許請求の範囲に定義した主題はかならずしも上記の特別な特徴または動きに限定されないと理解される。むしろ、上記の特別な特徴および動きは、特許請求の範囲を実現する例示の形式として開示される。
【００８１】
ここで使用した用語「モジュール」または「要素」は、コンピューティングシステムで実行するソフトウェアのオブジェクトまたはルーチンを示す。ここで説明した異なる要素、モジュール、エンジン、およびサービスは、コンピューティングシステムで実行するオブジェクトまたはプロセスとして実現される（例えば、分離したスレッド）。ここで説明したシステムおよび方法は、ソフトウェアで実現されることが望ましく、ハードウェアまたはソフトウェアとハードウェアの組み合わせでの実現も可能であり、考慮される。この記載で、「コンピューティングエンティティ」は、ここであらかじめ定義したようないかなるコンピューティングシステムでも、コンピューティングシステム上で動作するいかなるモジュールまたはモジュールの組み合わせでもよい。
【００８２】
ここで引用したすべての例および条件付き言語は、発明者により従来の技術を更に推し進めるために提供された発明と概念を読者が理解するのを支援する教育的目的のためであり、そのように特定的に引用した例と条件に制限されるものではないと解釈されるべきである。本開示の実施形態を詳細に記述したが、種々の変更、置換、および改造が、本開示の精神と範囲を逸脱することなく実施形態に対して行えるということは理解されたい。
【図１】
2015219906.tif 000003
【図２Ａ】
2015219906.tif 000004
【図２Ｂ】
2015219906.tif 000005
【図３Ａ】
2015219906.tif 000006
【図３Ｂ】
2015219906.tif 000007
【図４】
2015219906.tif 000008
【図５】
2015219906.tif 000009