(57)【要約】【課題】ソフトウェア解析ツールによらないソフトウェア検証方法等を提供する。【解決手段】ソフトウェア検証方法は、ソフトウェアの少なくとも一部分を受け取る動作を含む。ソフトウェアプログラムの一部分はクラス内のソフトウェア関数を含んでよい。方法は、そのクラスに基づきソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを生成する動作と、プロキシ関数を解析する動作とを更に含んでよい。プロキシ関数の解析は、プロキシ関数によって使用されるプロキシ条件に基づきソフトウェア関数を解析する動作を含んでよく、プロキシ条件はソフトウェアプログラムに基づき、ソフトウェア関数におけるパラメータ及び／又は変数へ条件を適用するよう構成される。【選択図】図２
2014186727.tif 000002
【特許請求の範囲】
【請求項１】
クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取り、
前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成し、
前記プロキシ関数によって使用されるプロキシ条件に基づき前記ソフトウェア関数を解析することを含め、前記プロキシ関数を解析し、
前記プロキシ条件は、前記ソフトウェアプログラムに基づき、前記ソフトウェア関数におけるパラメータ及び／又は変数に条件を適用する構成される、
ソフトウェア検証方法。
【請求項２】
前記プロキシ条件は、前記プロキシ関数のプロキシパラメータとして、又は前記プロキシ関数内で定義される変数として、前記プロキシ関数によって使用される、
請求項１に記載のソフトウェア検証方法。
【請求項３】
前記プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析される、
請求項１に記載のソフトウェア検証方法。
【請求項４】
前記プロキシ条件は生成されるか、又はユーザから受け取られる、
請求項１に記載のソフトウェア検証方法。
【請求項５】
前記プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の挙動は、前記ソフトウェア関数の潜在的な実行パスを制限する前記プロキシ条件に基づく、
請求項１に記載のソフトウェア検証方法。
【請求項６】
更に、前記選択された挙動の解析に基づき、前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する、
請求項５に記載のソフトウェア検証方法。
【請求項７】
前記プロキシ条件は、前記ソフトウェア関数からの変数に基づく前記プロキシ関数におけるパラメータとして使用され、前記変数は、前記ソフトウェア関数の制御フローを決定する、
請求項５に記載のソフトウェア検証方法。
【請求項８】
更に、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、前記ソフトウェア関数の前記選択された挙動の前記カバレッジは、解析された前記ソフトウェア関数の複数のライン又はブランチに基づき、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第２の挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の前記第２の挙動は、前記ソフトウェア関数からの変数の値を拘束する第２のプロキシ条件に基づく、
請求項７に記載のソフトウェア検証方法。
【請求項９】
前記プロキシ条件は、前記プロキシ関数における変数として使用され、前記ソフトウェア関数の以前の実行と関連付けられた値を割り当てられる、
請求項５に記載のソフトウェア検証方法。
【請求項１０】
更に、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、前記ソフトウェア関数の前記選択された挙動の前記カバレッジは、解析された前記ソフトウェア関数の複数のライン又はブランチに基づき、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第２の挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の前記第２の挙動は、前記変数に基づく前記プロキシ関数におけるパラメータを含む第２のプロキシ条件に基づく、
請求項９に記載のソフトウェア検証方法。
【請求項１１】
前記プロキシ条件は、前記ソフトウェア関数の解析に基づき前記ソフトウェア関数において決定されるエラーの決定に作用する前記ソフトウェアプログラムからの条件を含むよう構成される、
請求項１に記載のソフトウェア検証方法。
【請求項１２】
既知のエラーが決定されない場合に、更に前記プロキシ関数を再解析し、該プロキシ関数の再解析は第２のプロキシ条件に基づく、
請求項１１に記載のソフトウェア検証方法。
【請求項１３】
システムにソフトウェア検証動作を実行させるためにコンピュータ可読媒体からのコンピュータ命令を実行するよう構成されるプロセッサであって、
前記ソフトウェア検証動作は、
クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取る動作と、
前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成する動作と、
前記プロキシ関数によって使用されるプロキシ条件に基づき前記ソフトウェア関数を解析することを含め、前記プロキシ関数を解析する動作と
を含み、
前記プロキシ条件は、前記ソフトウェアプログラムに基づき、前記ソフトウェア関数におけるパラメータ及び／又は変数に条件を適用する構成される、
プロセッサ。
【請求項１４】
前記プロキシ条件は、前記プロキシ関数のプロキシパラメータとして、又は前記プロキシ関数内で定義される変数として、前記プロキシ関数によって使用される、
請求項１３に記載のプロセッサ。
【請求項１５】
前記プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析される、
請求項１３に記載のプロセッサ。
【請求項１６】
前記プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の挙動は、前記ソフトウェア関数の潜在的な実行パスを制限する前記プロキシ条件に基づく、
請求項１３に記載のプロセッサ。
【請求項１７】
前記ソフトウェア検証動作は、前記選択された挙動の解析に基づき、前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する動作を更に含む、
請求項１６に記載のプロセッサ。
【請求項１８】
前記プロキシ条件は、前記ソフトウェア関数の解析に基づき前記ソフトウェア関数において決定されるエラーの決定に作用する前記ソフトウェアプログラムからの条件を含むよう構成される、
請求項１３に記載のプロセッサ。
【請求項１９】
クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取り、
前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成し、
前記プロキシ関数を解析し、該プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、解析のために選択される前記ソフトウェア関数の前記挙動は、前記ソフトウェア関数の実行パスを制限する前記プロキシ関数に関連付けられた第１のプロキシ条件に基づき、
解析される前記ソフトウェア関数の複数のライン又はブランチに基づく、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第２の挙動の解析をもたらし、解析のために選択される前記ソフトウェア関数の前記第２の挙動は、前記ソフトウェア関数の実行パスを制限する前記プロキシ関数に関連付けられた第２のプロキシ条件に基づき、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが前記閾値より大きい場合に、前記選択された挙動の解析に基づき前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する、
ソフトウェア検証方法。
【請求項２０】
前記第１のプロキシ条件は、前記プロキシ関数のプロキシパラメータに基づき、前記第２のプロキシ条件は、前記プロキシパラメータに関連付けられた前記プロキシ関数内で定義されるプロキシ変数に基づく、
請求項１９に記載のソフトウェア検証方法。
【請求項２１】
前記第１のプロキシ条件は、前記プロキシ関数内で定義されるプロキシ変数に基づき、前記第２のプロキシ変数は、前記プロキシ変数に関連付けられた前記プロキシ関数のプロキシパラメータに基づく、
請求項１９に記載のソフトウェア検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願で開示される実施形態は、ソフトウェアの検証に関する。
【背景技術】
【０００２】
電子機器の使用が増えるにつれて、それらの機器で実行されるソフトウェアプログラムの数も増える。通常、ソフトウェアプログラムが開発される場合に、ソフトウェアプログラムは、ソフトウェアプログラムがそのソフトウェアプログラムのための所定要件の全てを満足することを確かにするのを助けるよう検証される。ソフトウェアプログラムが全ての所定要件を満たすかどうかを決定するためのテストケースを開発することは、困難であり且つ時間がかかることがある。例えば、Ｃ／Ｃ＋＋言語では、ソフトウェアプログラム内の関数はvoid*引数を有することがある。void*引数は、関数が何かしらの引数型のオブジェクトへのポインタを受け入れることを示すので、曖昧な引数であり得る。関数を検証するためのテストケースを生成する場合に、ソフトウェア解析ツールは、曖昧な引数が関数の分岐点内で使用される場合に関数の分岐点内の条件を満足する値を決定することができない場合がある。結果として、関数の適切な検証カバレッジは、ソフトウェア解析ツールによって生成されるテストケースを通じては得られないことがある。
【０００３】
曖昧な引数の問題を改善するために既存のソフトウェア解析ツールによって使用される１つのアプローチは、ソフトウェア解析ツールが理解及び／又は処理するのに苦心し得るインスタンス、又は曖昧であるソフトウェアプログラム内のインスタンスを示すソフトウェアプログラム内に手動により置かれた非互換のコメントを有することである。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、そのような非互換のコメントは、読み取りにくいソフトウェアプログラムをもたらすことがあり、曖昧な引数を正確には定義することができず、ソフトウェア解析ツールと無関係の何者かが理解できるほど十分に表現され得ず、且つ、選択的なソフトウェア解析ツールによってしか読み出され理解され得ず、それにより他のソフトウェア解析ツールによって検証されるべきソフトウェアの機能を制限する。
【０００５】
本願で請求される対象は、いずれかの欠点を解消し、又は上述されたような環境においてのみ動作する実施形態に制限されない。むしろ、以上の記載は、本願で記載される幾つかの実施形態が実施され得る技術分野の一例を挙げるために提供されているにすぎない。
【課題を解決するための手段】
【０００６】
実施形態の一態様に従って、ソフトウェア検証方法は、ソフトウェアプログラムの少なくとも一部分を受け取る動作を含む。前記ソフトウェアプログラムの前記一部分は、クラス内のソフトウェア関数を含んでよい。当該ソフトウェア検証方法は、前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成する動作と、前記プロキシ関数を解析する動作とを更に含んでよい。前記プロキシ関数の解析は、前記プロキシ関数によって使用されるプロキシ条件に基づき前記ソフトウェア関数を解析することを含んでよく、前記プロキシ条件は、前記ソフトウェアプログラムに基づき、前記ソフトウェア関数におけるパラメータ及び／又は変数に条件を適用する構成される。
【０００７】
実施形態の目的及び利点は、少なくとも、特許請求の範囲において特に指し示されている要素、特徴、及び組み合わせによって、実現及び達成される。
【０００８】
当然のことながら、上記の概要及び下記の詳細な説明はいずれも例示及び説明のためであり、請求される本発明の制限ではない。
【発明の効果】
【０００９】
本願発明の実施形態によれば、ソフトウェア解析ツールによらずにソフトウェアを検証することが可能となる。
【図面の簡単な説明】
【００１０】
【図１Ａ】ソフトウェアプログラムの関数を例示する。
【図１Ｂ】図１Ａのソフトウェアプログラムの関数のプロキシ関数を例示する。
【図２】ソフトウェア検証システムの例のブロック図である。
【図３Ａ】ソフトウェアプログラムのクラスを例示する。
【図３Ｂ】図３Ａのソフトウェアプログラムのクラスのプロキシクラスを例示する。
【図４】ソフトウェア検証方法の例のフローチャートである。
【図５】ソフトウェア検証方法の例のフローチャートである。
【図６】ソフトウェア検証方法の例のフローチャートである。
【図７】ソフトウェア検証方法の例のフローチャートである。
【発明を実施するための形態】
【００１１】
実施例は、添付の図面の使用により更なる特異性及び詳細を伴って記載及び説明される。
【００１２】
本願で記載される幾つかの実施形態は、ソフトウェアを検証する方法及びシステムに関する。検証されるべきソフトウェアは、複数の実行パスを含んでよい。様々なクラス内の様々な関数は、複数の実行パスの部分であってよい。実行パスは、条件付きソフトウェア記述、並びに割り当て、関数呼び出し、及び他のソフトウェア記述のような他のソフトウェア記述のような、１以上の分岐点を含んでよい。幾つかの実施形態において、関数のうちの１以上は、１又はそれ以上の複数の実行パスを含んでよい。
【００１３】
幾つかの実施形態において、ソフトウェアを検証するよう、ソフトウェアは、ソフトウェアの複数の実行パスをトラバースするために複数の具象的（concrete）入力を用いて具体的に実行されてよい。ソフトウェア解析は、ソフトウェアの機能を適切に検証するようソフトウェアの適切な数の実行パスをトラバースすることができる具象的入力を決定するために使用されてよい。使用され得る様々なタイプのソフトウェア解析は、静的ソフトウェア解析、動的ソフトウェア解析、及び／又は記号的ソフトウェア解析を含む。
【００１４】
幾つかのソフトウェアは、ソフトウェア解析ツールがソフトウェアを解析するのを困難にしうる形で記述されることがある。特に、ソフトウェア内の関数は、ソフトウェア解析ツールがソフトウェアの適切な数の実行パスをトラバースすることができるテストケースを決定することができず、それによりソフトウェアの適切な検証カバレッジを提供することができないような形で記述されることがある。更に、ソフトウェアにおける関数は、ソフトウェア解析ツールがソフトウェアの他の特性を決定することができないような形で記述されることがある。
【００１５】
幾つかの実施形態において、本願で記載されるように、ソフトウェアのコンパイル可能なプログラミング言語が、制約のような条件をソフトウェアの１以上の関数のパラメータ又は他の変数に適用するために使用されてよい。条件をパラメータ又は他の変数に適用することによって、ソフトウェア解析ツールは、ソフトウェアの関数の適切な検証カバレッジを提供するために使用され得るテストケースを決定することがより可能となり得る。更に、条件をパラメータ又は他の変数に適用することによって、ソフトウェア解析ツールは、ソフトウェアプログラムの特性を確かめ、及び／又はソフトウェア解析ツールによって生成される偽陽性エラーを減らすことができる。
【００１６】
幾つかの実施形態において、パラメータ又は他の変数に適用される条件は、関数のパラメータ化された使用シナリオであるプロキシ関数を生成することによって、関数に適用されてよい。プロキシ関数は、関数への呼び出しと、関数内のパラメータ又は他の変数へ条件を適用するコンパイル可能なソースコードとを含んでよい。幾つかの実施形態において、付加的アプローチが使用されてよく、このとき、関数内のパラメータ又は他の変数に適用される条件は、ソフトウェアの適切な検証カバレッジが達成されるまで、ソフトウェア解析ツールの結果に基づき変更されてよい。
【００１７】
本発明の実施形態は、添付の図面を参照して説明される。
【００１８】
図１Ａ及び図１Ｂは夫々、本願で開示される一般概念を説明する際に例として使用されるソフトウェアプログラムの関数１１０及びプロキシ関数１２０の例を表す。そのようなものとして、図１Ａ及び図１Ｂにおいて表されているソフトウェア部分は、本願で開示される１以上の実施形態に基づき生成され得る１つの解決法を表す。多数の他の解決法及びソフトウェア構成が、本願の適用範囲から逸脱することなしに実施されてよい。
【００１９】
特に、図１Ａは、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェアプログラムの関数１１０を例示する。ソフトウェアプログラムは複数のクラスを含んでよく、複数のクラスの夫々は、数あるソースコードのタイプの中でも、１以上の関数を含む。関数１１０は、ソフトウェアプログラムのクラスのうちの１つの部分であってよい。図１で、関数１１０は、“Process”と名付けられたクラスの部分であり、パラメータ１１２、すなわち、Message&msgを有する。パラメータ１１２は、関数１１０がソフトウェアプログラムにおいて呼び出される場合に関数１１０へ渡されるProcessクラスのオブジェクトであってよい。関数１１０内で、行１１４で、変数“message_payload”は、関数１１０へ渡されたパラメータ１１２に基づき生成されてよい。行１１６で、message_payloadは、Ethernet(登録商標)Messageクラスのオブジェクト“payload”になるようタイプキャストされてよい。payloadのメンバーの値である“mask”は、真と評価される場合に関数１１０の残りの部分が実行されることを可能にする条件文において評価される。
【００２０】
未定義タイプのmessage_payload、タイプキャスト、及び／又は関数１１０において未定義であるクラスのオブジェクトのメンバーに基づく条件文に基づき、関数１１０はソフトウェア解析器にとって幾らか抽象的となり得る。結果として、関数１１０のソースコードは、条件文が真と評価することを可能にすることができる値がどのようなものかをソフトウェア解析器が理解するのを妨げ得る。特に、ソフトウェア解析器は、関数１１０において、タイプEthernetMessageのオブジェクトのメンバーの値がタイプMessageのオブジェクトに含まれるべきであることを理解し得ない。結果として、ソフトウェア解析器は、条件文が真と評価する場合に関数１１０の部分を実行することができるテストケースを決定することができないことがある。よって、ソフトウェア解析器によって提供されるテストケースは、関数１１０の適切な検証カバレッジを提供することができないことがある。更に、ソフトウェア解析器は、関数１１０の他の特性を決定することができないことがある。
【００２１】
図１Ｂは、本願で記載される少なくとも幾つかの実施形態に従って配置される、図１Ａのソフトウェアプログラムの関数１１０のプロキシ関数１２０を例示する。プロキシ関数１２０は、関数１１０を理解し、且つ、関数１１０及びソフトウェアプログラムの適切な検証カバレッジを提供するテストケースのようなプロキシ関数の１以上の特性を確かにするためのソフトウェア解析器の能力を改善するよう、関数１１０に基づき生成される関数であってよい。このために、プロキシ関数１２０は、関数１１０及びソフトウェアプログラムについてプロキシ関数の１以上の特性を確かめるようソフトウェア解析器によって解析されてよい。
【００２２】
関数１１０に基づくと共に、プロキシ関数１２０は更に、関数１１０の潜在的な実行パスを制限し得る１以上の条件を含んでよい。関数１１０の潜在的な実行パスを制限することは、とりわけ、関数１１０内の変数の値を制限すること、関数１１０へ渡されるパラメータの値を制限すること、関数１１０内の変数を定義するようプロキシ関数１２０内にコンストラクタを付加することを含んでよい。プロキシ関数１２０はまた、関数１１０を含むクラスに基づき生成され得るプロキシクラスの部分であってよい。プロキシクラスは、プロキシコンストラクタ、プロキシオブジェクトの定義、及びプロキシクラスの特有の他のプロキシ変数を含んでよい。
【００２３】
プロキシ変数１２０は、行１２６で、関数１１０への呼び出しを含む。プロキシ変数１２０は、関数へ渡されるパラメータ１１２に制約のような条件を適用するために使用され得る様々なプロキシ条件を更に含む。特に、プロキシ関数１２０は、プロキシ関数１２０へ渡されるよう構成されるパラメータunsigned  int  maskを含む。行１２４で、プロキシ関数１２０は、関数１１０へ渡されるプロキシ関数１２０のパラメータ１２２に基づき変数msgを生成するよう構成される。プロキシ関数１２０におけるプロキシ条件、例えば、行１２４にあるソースコード及びパラメータ１２２は、関数１１０がソフトウェアプログラム内で呼び出される場合に関数１１０のパラメータ１１２へ割り当てられ得る値を制限することをもたらす。
【００２４】
関数１１０のパラメータ１１２へ割り当てられる値を制限することによって、プロキシ関数１２０は、ソフトウェア解析器にとって関数１１０をより明確なものとする。関数１１０がソフトウェア解析器にとってより明確であるとき、ソフトウェア解析器は、関数１１０の１以上の特性を決定することができる。幾つかの実施形態において、関数１１０の１以上の特性は、関数１１０の適切な検証カバレッジを提供するテストケースを含んでよい。特に、プロキシ関数１２０は、整数値が関数１１０の行１１８にある条件文に提供されるとソフトウェア解析器が理解するように構成される。結果として、ソフトウェア解析器は、行１１８にある条件文を満足する整数値を決定し、関数１１０の残りの部分を解析することができる。関数１１０をその全体において解析することができることによって、ソフトウェア解析器は、条件文の後のソースコードが実行及び検証されることを可能にすることができるテストケースを生成し得る。
【００２５】
関数１１０は、１以上の問題をソフトウェア解析器に与えうるソースコードの一構成の例を与える。ソースコードの様々な他の構成がソフトウェア解析器に問題を与えうる。例えば、数あるソースコードの構成の中でも、クラスタイプ、グローバル変数、静的変数、クラスフィールド、キャストタイピングのようなユーザ定義のタイプを含むソースコードは、ソフトウェア解析器が関数１１０の１以上の特性を決定することができないように、又は適切な検証カバレッジを提供するテストケースを生成することができないようにすることがある。他のタイプのソースコード構成も、ソフトウェア解析器が関数１１０の１以上の特性を決定することができないように、又は適切な検証カバレッジを提供するテストケースを生成することができないようにすることがある。
【００２６】
１以上の問題をソフトウェア解析器へ与えうるソースコードの他の例は、エラーではないがエラーであるように見える関数内の条件であってよい。これは、本願では偽陽性エラーと呼ばれる。例えば、関数において初期化されず関数が呼び出される前にソフトウェアプログラムにおいて初期化される、関数において使用されるポインタは、偽陽性エラーと識別されることがある。関数のプロキシ関数は、関数が解析される場合に関数における条件がエラーと見なされないように、条件を関数に加えてよい。例えば、関数のプロキシ関数は、関数の解析が関数におけるポインタの非初期化をエラーであると示さないように、関数に対してポインタを初期化してよい。
【００２７】
代替的に、又は追加的に、如何にしてソフトウェア解析器がソフトウェアを解析しているかは、異なる問題を与えることがある。例えば、ソフトウェアプログラムの静的解析における静的変数は、関数の適切な特性が決定されることを可能にすることができるが、その一方で、ソフトウェアプログラムの記号解析における静的変数は、関数の適切な特性が決定されることを可能にすることができない。代替的に、又は追加的に、ソースコードは、１以上の変数又は関数が既知の又は特定のタイプへ割り当てられないために、ソフトウェア解析器が全ての利用可能な処理リソースを使用するか又はタイムアウトする前に関数の特性が決定され得ないほど多数の異なる特性をソフトウェア解析器が解析するよう強いられるほどより大きい範囲を有することがある。
【００２８】
プロキシ関数１２０は、関数１１０の特性を決定するためにプログラム解析器によって使用されるプロキシ関数の例を提供する。プロキシ関数１２０の他の構成は、関数１１０の適切な検証カバレッジを提供し得るテストケースのような関数１１０の特性を決定するために使用されてよい。
【００２９】
図２は、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェア検証システム２００の例のブロック図である。システム２００は、ソースコード２０２に基づきプロキシソースコード２２０を生成するよう且つプロキシソースコード２２０を解析することによってテストケース２４０及びレポート２５０を生成するよう構成されてよい。
【００３０】
システム２００は、プロキシ生成部２１０及びプロキシ解析部２３０を有する。プロキシ生成部２１０は、プロキシクラス生成部２１２及びプロキシ関数生成部２１４を有する。プロキシ生成部２１０は、ソースコード２０２、ユーザ入力２０４及びソースコード情報２０６のような入力を受けるよう構成される。それらの受け取られた入力のうちの１以上に基づき、プロキシ生成部２１０はプロキシソースコード２２０を生成するよう構成される。
【００３１】
特に、プロキシクラス生成部２１２は、ソースコード２０２を受けるよう且つソースコード２０２内の異なるクラスを決定するよう構成されてよい。ソースコード２０２における夫々のクラスについて、プロキシクラス生成部２１２はプロキシクラスを生成するよう構成されてよい。ソースコード２０２における所与のクラスについて、その対応するプロキシクラスは、プロキシ解析部２３０とソースコード２０２との間のレイヤを提供する所与のクラスのアブストラクションであってよい。アブストラクションは、生成されたプロキシクラスが特定の条件をソースコード２０２に適用して、プロキシ解析部２３０がより容易にプロキシ関数の１以上の特性を取得し及び／又は偽陽性エラーを除去することができるようにプロキシ解析部２３０が特定の変数若しくはパラメータ又は限られた範囲の変数若しくはパラメータに焦点を当てるようにすることを可能にすることができる。
【００３２】
幾つかの実施形態において、プロキシクラス生成部２１２は、プロキシクラスのソースコードを生成するよう構成されてよい。プロキシクラスのソースコードは、プロキシクラスに関連するクラスのクラスオブジェクトを生成するよう構成されるコンストラクタを含んでよい。プロキシクラス生成部２１２はまた、プロキシクラスに関連するクラス内の関数の夫々についてプロキシ関数を生成するよう構成されてよい。夫々のプロキシ関数は、そのプロキシ関数に関連する関数のパラメータと同様のパラメータを含んでよい。代替的に、又は追加的に、プロキシ関数は、プロキシ関数に関連する関数への呼び出しを含んでよい。
【００３３】
図３Ａは、ソフトウェアプログラムのクラス３００を例示し、図３Ｂは、図３Ａのソフトウェアプログラムのクラスのプロキシクラス３２０を例示する。クラス３００はprocessと名付けられており、タイプintのパラメータvarを有する関数func及びコンストラクタを含む。プロキシクラス３２０は、クラス３００に基づき生成され得るプロキシクラスの例である。例えば、プロキシクラス３２０は、図２のプロキシクラス生成部２１２を用いて生成されてよい。
【００３４】
プロキシクラス３２０はproxyprocessと名付けられており、ex_objectと名付けられたprocessクラスのクラスオブジェクトを生成するコンストラクタを含む。proxyprocessクラスは、パラメータvar1を有するproxy_funcと名付けられたプロキシ関数を更に含む。関数proxy_funcは、processクラスの関数funcへの呼び出しを含み、このとき、proxy_funcからのパラメータvar1はprocessクラスの関数funcへパラメータとして送られる。
【００３５】
クラス３００及びプロキシクラス３２０は、本願で記載されるようにクラスに基づき生成され得るプロキシクラスの一例を表す。他の方法及びソースコード構成は、本願の適用範囲から逸脱することなしにクラスからプロキシクラスを生成するために使用されてよい。
【００３６】
図２に戻り、幾つかの実施形態において、プロキシクラスが生成された後、プロキシクラスは、プロキシ解析部２３０へ送信されるプロキシソースコード２２０を生成するようソースコード２０２に加えられる。幾つかの実施形態において、プロキシクラスにおけるプロキシ関数の全ては、プロキシ解析部２３０へ送信され得る単一のソースファイルに含まれてよい。
【００３７】
幾つかの実施形態において、プロキシクラスが生成された後、プロキシ関数生成部２１４は、プロキシクラス内のプロキシ関数のうちの１以上を更にリファインするよう構成されてよい。プロキシ関数生成部２１４は、関数の制限材的な実行パスを制限し、関数の更なる特性が決定されることを可能にし、及び／又は関数の偽陽性エラーを除去し得る１以上の条件をプロキシ関数内に含めることによって、プロキシ関数をリファインしてよい。幾つかの実施形態において、１以上の条件をプロキシ関数内に含めることは、プロキシ解析部２３０によって解析される変数及び／又はパラメータ且つ／あるいは変数及び／又はパラメータの範囲を制限してよい。
【００３８】
幾つかの実施形態において、プロキシ関数生成部２１４は、ソースコード情報２０６に基づき関数のプロキシ関数をリファインしてよい。ソースコード情報２０６は、関数を通る制御フローを決定する変数に関する情報を含んでよい。例えば、制御フロー変数は、関数内の異なる実行パスを通るフローを決定する数ある変数の中でも、条件文を評価する際に使用される分岐点に関連する変数であってよい。プロキシ関数生成部２１４は、制御フロー変数のうちの１又はそれ以上をプロキシ関数においてパラメータとして含めるようにプロキシ関数をリファインするよう構成されてよい。
【００３９】
ソースコード情報２０６は、ソースコード２０２内の関数の正確な呼び出しシナリオに関する情報を更に含んでよい。正確な呼び出しシナリオの情報は、ソースコード２０２の実行が成功する場合に関数と共に使用される変数の値を含んでよい。プロキシ関数生成部２１４は、プロキシ関数の本体内の正確な呼び出しシナリオの情報に基づき変数及び変数の値のうちの１又はそれ以上を含めるようにプロキシ関数をリファインするよう構成されてよい。代替的に、又は追加的に、プロキシ関数生成部２１４は、クラス及びプロキシクラスの１以上の変数を調整するコンストラクタへの呼び出しを含めるようにプロキシ関数をリファインするよう構成されてよい。
【００４０】
幾つかの実施形態において、ソースコード情報２０６は、ソースコード２０２において特定される偽陽性エラーに関する情報を更に含んでよい。偽陽性エラーに関する情報は、ソースコード２０２において特定される偽陽性エラーを低減又は除去し得る条件であってよい。そのような及び他の実施形態において、プロキシ関数生成部２１４は、偽陽性エラーを防ぐための条件を含めるようにプロキシ関数をリファインするよう構成されてよい。
【００４１】
幾つかの実施形態において、プロキシ関数生成部２１４は更に、ユーザ入力２０４に基づきプロキシ関数をリファインするよう構成されてよい。そのような及び他の実施形態において、ユーザは、プロキシ関数生成部２１４と相互作用し、プロキシ関数へのソースコード編集を実行してよい。そのような及び他の実施形態において、ユーザは、プロキシ関数のパラメータ及び／又はプロキシ関数の本体をリファインしてよい。
【００４２】
プロキシ関数生成部２１４がプロキシ関数をリファインした後、リファインされたプロキシ関数を有するプロキシクラスは、プロキシ解析部２３０へ送信されるプロキシソースコード２２０を生成するようソースコード２０２に加えられる。
【００４３】
幾つかの実施形態において、プロキシ解析部２３０は、ソースコード２０２の特性を確かめるためにプロキシソースコード２２０を解析するよう構成されてよい。確かめられ得るソースコード２０２の特性は、テストケース、既知の欠陥、区域外のメモリアクセス、初期化されていないポインタ、ゼロ除算、メモリが割り当てられているが決して割り当てを解除されない場合のようなメモリリークを含んでよい。幾つかの実施形態において、プロキシ解析部２３０は、ソフトウェア又はソースコード解析器と同じであってよい。多種多様なソースコード解析技術がプロキシ解析部２３０によって実施されてよい。例えば、プロキシ解析部２３０は、ソースコード２０２の特性を確かめるためにプロキシソースコード２２０に対して動的解析、静的解析、又は記号解析を用いてよい。
【００４４】
ソースコード２０２の代わりにプロキシソースコード２２０を解析することによって、プロキシ解析部２３０は、ソースコード２０２内の特定の変数及び／又はパラメータ且つ／あるいは変数及び／又はパラメータの特定の値にその解析を向けることができ、それにより、ソースコード２０２におけるエラーのようなソースコード２０２の特定の特性を確かめることができる可能性を高めることができる。幾つかの実施形態において、プロキシ解析部２３０は、ソースコード２０２内のエラーのような特性を示すレポート２５０を生成するよう構成されてよい。
【００４５】
更に、ソースコード２０２の代わりにプロキシソースコード２２０を解析することによって、プロキシ解析部２３０は、ソースコード２０２の偽陽性エラーを除去することができる可能性を高めることができる。例えば、プロキシ解析部２３０は、プロキシ解析部２３０によって特定されるエラーが偽陽性エラーであるかどうかのエラー判定を行うよう構成され得る偽陽性エラーチェッカー２３４を有してよい。偽陽性エラーチェッカー２３４は、プロキシ解析部２３０によって報告される関数内のエラーが偽陽性エラーであるかどうかを決定するために、ユーザ入力２０４及び／又はソースコード情報２０６のような他の情報と共にソースコード２０２を使用してよい。代替的に、又は追加的に、偽陽性エラーチェッカー２３４は、偽陽性エラーが起こった場合をプロキシ生成部２１０に示してよい。プロキシ関数生成部２１４は、ソースコード２０２における偽陽性エラーを低減又は除去するための条件を含めるように更にプロキシソースコード２２０における１以上のプロキシ関数をリファインするよう構成されてよい。そのような及び他の実施形態において、レポート２５０は、偽陽性エラーを含んでも又は含まなくてもよい。
【００４６】
他の例として、幾つかの実施形態において、プロキシソースコード２２０の解析を通じて、プロキシ解析部２３０は、ソースコード２０２の適切な検証カバレッジを提供するテストケースを生成してよい。代替的に、又は追加的に、ソースコード２０２の代わりにプロキシソースコード２２０を解析することによって、プロキシ解析部２３０は、ソースコード２０２内の特定の実行パスに解析を向けることができ、それにより、ソースコード２０２の適切な検証カバレッジを提供するテストケース２４０を生成することができる可能性を高めることができる。
【００４７】
プロキシ解析部２３０は、カバレッジチェッカー２３２を有してよい。カバレッジチェッカー２３２は、ソースコード２０２の範囲のどの程度がプロキシ解析部２３０によって解析され又はテストケース２４０によってカバーされるのかを決定するためにプロキシ解析部２３０の解析及び／又はテストケース２４０を精査するよう構成されてよい。例えば、カバレッジチェッカー２３２は、プロキシ解析部２３０によって解析されたソースコード２０２の行数を決定し、解析された行数をソースコード２０２の総行数と比較してよい。解析された行数がソースコード２０２の総行数と比較して特定の閾値を下回る場合は、カバレッジチェッカー２３２は、ソースコード２０２が適切に解析されておらず、よってテストケース２４０が適切な検証カバレッジを提供しない可能性があると決定してよい。
【００４８】
幾つかの実施形態において、カバレッジチェッカー２３２は、既知のエラーがプロキシ解析部２３０によってプロキシソースコード２２０において特定された場合を確認してよい。既知のエラーは、システム２００でないシステムによってソースコード２０２において特定されるエラーであってよい。既知のエラーが特定されない場合は、プロキシソースコード２２０のカバレッジは不十分であり得る。そのような及び、プロキシ解析部２３０がプロキシソースコード２２０に基づきテストケース２４０を生成することができない場合、例えば、プロキシ解析部２３０が計算リソースを使い果たすか又はタイムアウトする場合のような、他の実施形態において、カバレッジチェッカー２３２は、プロキシ生成部２１０及び特にプロキシ関数生成部２１４に、ソースコード２０２の解析カバレッジが不十分であることを示してよい。
【００４９】
ソースコード２０２の解析カバレッジが不十分であるとのインジケーションをプロキシ関数生成部２１４が受け取る場合に、プロキシ関数生成部２１４は、プロキシソースコード２２０における１以上のプロキシ関数を更にリファインするよう構成されてよい。プロキシ関数を更にリファインする場合に、プロキシ関数生成部２１４は、プロキシ関数を律則又は一般化するよう構成されてよい。
【００５０】
例えば、プロキシ解析部２３０がテストケースを生成できなかったと、又はプロキシ解析部２３０がプロキシソースコード２２０を理解又は処理することがでないことにより限られた量のプロキシソースコード２２０しか解析できなかったとカバレッジチェッカー２３２が示す場合に、プロキシ関数生成部２１４は、プロキシソースコード２２０内の１以上のプロキシ関数を律則してよい。プロキシ関数を更に律則するよう、プロキシ関数生成部２１４は、プロキシ関数によって予め使用されている条件を更に制限するか又は追加の条件を含めるようプロキシ関数をリファインしてよい。例えば、プロキシ関数生成部２１４は、コンストラクタ呼び出しをコンストラクタ呼び出しのパラメータと共に関数のパラメータに加え、関数からパラメータを除去して除去されたパラメータと同じタイプである変数を関数に含め、及び／又は関数内の変数を更に律則するよう構成されてよい。
【００５１】
プロキシ関数生成部２１４は、ユーザ入力２０４及び／又はソースコード情報２０６に基づき、更にプロキシ関数を律則するための条件を決定してよい。幾つかの実施形態において、プロキシ関数生成部２１４は、プロキシ解析部２３０によって解析されなかったソースコード２０２の行を解析することによって、加えるべき条件を決定してよい。例えば、プロキシ関数における変数に関し、プロキシ関数生成部２１４は、更に変数を律則するようその変数に使用され得る値又は値の範囲を決定して、更に関数を律則するようその条件をプロキシ関数に適用するために、解析されなかったソースコード２０２の行を解析してよい。
【００５２】
幾つかの実施形態において、プロキシ関数生成部２１４は、プロキシソースコード２２０内の１以上のプロキシ関数を一般化してよい。プロキシ関数生成部２１４は、少なくとも部分的に解析されるべきであるプロキシソースコード２２０における条件に基づき、プロキシ解析部２３０がソースコード２０２の部分を解析しなかった場合に１以上のプロキシ関数を一般化してよい。プロキシ関数を一般化するよう、プロキシ関数生成部２１４は、とりわけ、パラメータをプロキシ関数に加え、プロキシ関数の本体から変数を除き、プロキシ関数の本体における変数の値を調整し、プロキシ関数の本体におけるコンストラクタへの呼び出しを除くよう構成されてよい。プロキシ関数生成部２１４は、ソースコード情報２０６及び／又はユーザ入力２０４に基づき、あるいは、プロキシ関数生成部２１４がプロキシ関数を律則すると決定する方法と同じように、如何にしてプロキシ関数を一般化すべきかを決定してよい。
【００５３】
幾つかの実施形態において、プロキシ関数生成部２１４は、クラス内の１つのプロキシ関数を一般化し、クラス内の他のプロキシ関数を律則してよい。どのプロキシ関数をプロキシ関数生成部２１４が律則若しくは一般化するのか、又は如何にしてプロキシ関数生成部２１４がプロキシ関数を律則若しくは一般化するのかは、本願で論じられているような例に制限されない。
【００５４】
１以上のプロキシ関数を更にリファインした後、更にリファインされた１以上のプロキシ関数を有するプロキシクラスは、本願で記載されるような解析のために先と同じくプロキシ解析部２３０へ送信されるプロキシソースコード２２０を生成するようソースコード２０２に加えられる。
【００５５】
プロキシ解析部２３０によって解析されるプロキシソースコード２２０を生成することによって、システム２００は、ソースコード２０２のプログラミング言語を用いて、適切な検証カバレッジを提供するテストケースを生成することができる。加えて、プロキシ解析部２３０によって解析されるプロキシソースコード２２０を生成することによって、システム２００は、偽陽性エラーを低減又は除去することができる。更に、ソースコード２０２のプログラミング言語を用いてプロキシソースコード２２０を生成することによって、プロキシ解析部２３０に加えて他のソフトウェア解析ツールが、プロキシソースコード２２０を用いてテストケースを生成することができる。代替的に、又は追加的に、プロキシソースコード２２０によってソースコード２０２に適用される条件は、同様の結果を達成するようソースコード２０２に適用され得るインラインのコンパイルできないコメントと比較して、容易に理解され得る。
【００５６】
変更、付加、又は省略は、本開示の適用範囲から逸脱することなしにシステム２００に対してなされてよい。例えば、システム２００は、ソースコード情報２０６を受け取らないよう構成されてよい。代替的に、又は追加的に、システム２００は、カバレッジチェッカー２３２の状態をユーザに報告するよう構成されてよい。そのような及び他の実施形態において、ユーザは、カバレッジチェッカー２３２の閾値を調整することが可能であってよい。
【００５７】
図４は、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェア検証方法４００の例のフローチャートである。方法４００は、幾つかの実施形態において、図２のソフトウェア検証システム２００のような検証システムによって、実施されてよい。個別のブロックとして表されているが、様々なブロックは、所望の実施に依存して、更なるブロックに分けられても、より少ないブロックへとまとめられても、又は削除されてもよい。
【００５８】
方法４００はブロック４０２で開始してよく、プロキシソースコードが生成されてよい。プロキシソースコードは、テストケースが生成され得るプログラムのソースコードに基づき、生成されてよい。プロキシソースコードを生成することは、ソースコード内の夫々のクラスについてプロキシクラスを生成することと、クラスの夫々の中の１以上の関数についてプロキシ関数を生成することと含んでよい。幾つかの実施形態において、プロキシ関数のうちの１以上は、ソースコードの潜在的な実行パスを制限し得る１以上の条件を含めるようリファインされてよい。１以上のプロキシ関数は、ユーザ入力、ソースコード情報、又は何らかの他のアスペクトに基づきリファインされてよい。例えば、幾つかの実施形態において、プロキシ関数は、関数のフローを制御する１以上の変数をパラメータとして含めるようリファインされてよい。他の例として、プロキシ関数は、関数の具象的実行の間に使用される値に関連する値を割り当てられる変数をプロキシ関数の本体において含めるようリファインされてよい。幾つかの実施形態において、プロキシ関数はリファインされなくてよい。
【００５９】
ブロック４０４で、プロキシソースコードが解析されてよい。動的解析、静的解析又は記号解析のような、多種多様なソースコード解析技術が実施されてよい。プロキシソースコードは、ソースコードの機能を検証するために使用され得るテストケースを生成するよう解析されてよい。
【００６０】
ブロック４０６で、ソースコードテストが生成されてよい。ソースコードテストは、プロキシソースコードの解析に基づき生成されてよく、ソースコードのバリデーションを可能にするようソースコードを実行するために使用される具象変数を含んでよい。ソースコードテストを生成した後、ソースコードテストのカバレッジが決定されてよい。ソースコードテストのカバレッジは、ソースコードテストの使用を通じて実行されるソースコード又はプロキシソースコードの行数を含んでよい。
【００６１】
ブロック４０８で、ソースコードテストのカバレッジが十分であるかどうかが決定されてよい。ソースコードテストのカバレッジの妥当性は１以上の変数に依存してよい。幾つかの実施形態において、カバレッジの妥当性は、ユーザ入力又は予め定義されたカバレッジの量に依存してよい。プロキシソースコードのカバレッジが十分である場合に、方法４００は終了してよい。プロキシソースコードのカバレッジが十分でない場合に、方法４００はブロック４１０へ進んでよい。
【００６２】
ブロック４１０で、プロキシソースコードが律則されるべきかどうかが決定されてよい。プロキシソースコードは、プロキシソースコードのカバレッジが不十分である場合に律則されてよい。例えば、カバレッジは、ソースコードの特定の割合が解析されないか、又はソースコードの特定の部分が解析されない場合に、不十分であると見なされてよい。幾つかの実施形態において、プロキシソースコードの解析は、解析が不完全である場合に不十分であり得る。例えば、幾つかの実施形態において、ソフトウェア解析器は、ソフトウェア解析器が解析の複雑さによりタイムアウトするか、又はソフトウェア解析器が解析の終了前に処理リソースを使い果たすために、ソフトウェアを全て解析することができないことがある。
【００６３】
プロキシソースコードが律則されるべきである場合に、方法４００はブロック４１２に進んでよい。プロキシソースコードが律則されるべきでない場合に、方法４００はブロック４１６へ進んでよい。
【００６４】
ブロック４１２で、プロキシソースコードは律則されてよい。ソースコードを律則することは、１以上のプロキシ関数のパラメータを律則することを含んでよい。プロキシ関数のパラメータは、プロキシ関数からパラメータを除いて、そのパラメータに関連する変数プロキシ関数の本体に置くことによって、律則されてよい。代替的に、又は追加的に、プロキシ関数のパラメータは、パラメータを律則するソースコードをプロキシ関数の本体に含めることによって、律則されてよい。パラメータがソースコードのプログラミング言語に組み込まれるタイプ、とりわけ、例えば、int、char、floatである場合に、パラメータは、プロキシ関数の本体においてパラメータと関連し得る値を制限することによって、律則されてよい。パラメータがプロキシ関数の本体において単一の値に拘束される場合に、パラメータは除去されてよい。パラメータがソースコードのプログラミング言語に組み込まれないタイプ、例えば、クラスのメンバーである場合に、コンストラクタがプロキシ条件の本体に加えられてよく、パラメータはプロキシ関数から除去されてよい。本願で論じられている以外の他の方法が、プロキシ関数を律則するために使用されてよい。
【００６５】
ブロック４１４で、プロキシソースコードが一般化されるべきであるかどうかが決定されてよい。プロキシソースコードは、プロキシソースコードのカバレッジが不十分である場合に一般化されてよい。例えば、カバレッジは、ソースコードの特定の割合が解析され得ないか、又はソースコードの特定の部分が、プロキシソースコードがソースコードのそれらの部分を実行できないほど限られた解析を有するために解析され得ない場合に、不十分であると見なされることがある。本質的に、プロキシソースコードは、ソースコードの過度に限られた解析を有し、それにより、ソースコードの解析は極めて狭い。
【００６６】
プロキシソースコードが一般化されるべきである場合に、方法４００はブロック４１６に進んでよい。プロキシソースコードが一般化されるべきでない場合に、方法４００はブロック４０４へ戻って、律則されたプロキシソースコードが解析されてよく、方法４００は続いてよい。
【００６７】
ブロック４１６で、プロキシソースコードは、プロキシ関数を一般化することによって一般化されてよい。プロキシ関数は、プロキシ関数において変数を選択して、プロキシ関数における変数と同じタイプであるパラメータをプロキシ関数に加えることによって、一般化されてよい。プロキシ関数の本体は、パラメータの値がプロキシ関数本体における変数に割り当てられ得るようにリファインされてよい。
【００６８】
ブロック４１６の後にはブロック４０４が続いてよく、一般化及び／又は律則されたソースコードが解析されてよく、方法４００は続いてよい。
【００６９】
方法４００は、プロキシソースコードをインクリメントに変更することが、解析されるべきソースコードの範囲を調整することを可能にする。このように、ソースコードの選択された部分は、ソースコードの他の部分を解析されないままとしながら解析されてよい。加えて、ソースコードの選択された範囲は、ソースコードの全体範囲を解析せずに解析されてよい。ソースコードの選択された部分又は範囲を解析する能力は、解析時間及び使用される計算リソースを減らすことができるので有利であり得る。特に、ソースコードの選択された部分又は範囲を解析する能力は、記号解析を実行する場合に有利であり得る。記号解析は、ソースコードにおける変数を記号変数により置換して、適切な解析を実行することを含む。記号解析は、他のソフトウェア解析技術よりも徹底的であるが、時間がかかり且つソースコードの幾つかのタイプに対して動作不可能であり得る。例えば、変数が定義されたタイプを有さない場合のような、ソースコードが大きいか又は明確な範囲を有さない場合に、記号解析は動作不可能であり得る。コンパイル可能な言語においてソースコードに加えることによってソースコードの範囲を狭める能力は、ソースコードが記号解析を用いて解析されるか又はより容易に解析されることを可能にする。
【００７０】
当業者には明らかに、本願で開示されるこのような及び他の処理及び方法のために、処理及び方法において実行される機能は異なる順序で実施されてよい。更に、概説されているステップ及び動作は単に例として提供されており、ステップ及び動作の幾つかは、開示されている実施形態の本質から逸脱することなしに、任意であっても、より少ないステップ及び動作にまとめられても、又は更なるステップ及び動作に拡張されてもよい。
【００７１】
方法４００の例は次のとおりである。ブロック４０２で、プロキシ関数を含むプロキシソースコードが生成されてよい。
Void  create_request_message(Message&p0){
obj_->create_request_message(p0);
}
上記の擬似コードは、プロキシ関数を表してよい。
【００７２】
ブロック４０４で、プロキシソースコードは解析されてよく、ブロック４０６で、プロキシソースコードのカバレッジは不十分であると見なされてよい。ブロック４１０で、プロキシソースコードを律則すると決定されてよい。ブロック４１２で、プロキシソースコードは、プロキシ関数を律則することによって律則されてよい。特に、プロキシ関数は、パラメータp0を含むコンストラクタを加えることによって律則されてよい。
Void  create_request_message(EthernetMessage*p0){
Message  msg(sizeof(EthernetMessage),p0);
obj_->create_request_message(msg);
}
上記の擬似コードは、律則された後のプロキシテスト関数を表してよい。
【００７３】
ブロック４１４で、プロキシソースコードを一般化しないと決定されてよい。ブロック４０４で、プロキシソースコードは解析されてよく、ブロック４０６で、プロキシソースコードのカバレッジは不十分であると見なされてよい。ブロック４１０で、プロキシソースコードを律則すると決定されてよい。ブロック４１２で、プロキシソースコードは、プロキシ関数を律則することによって律則されてよい。特に、プロキシ関数は、変数payloadを加えることによって律則されてよい。
Void  create_request_message(){
EthernetMessage*payload=new  EthernetMessage;
Message  msg(sizeof(EthernetMessage),payload);
obj_->create_request_message(msg);
}
上記の擬似コードは、律則された後のプロキシテスト関数を表してよい。
【００７４】
ブロック４１４で、プロキシソースコードを一般化しないと決定されてよい。ブロック４０４で、プロキシソースコードは解析されてよく、ブロック４０６で、プロキシソースコードのカバレッジは不十分であると見なされてよい。ブロック４１０で、プロキシソースコードを律則しないと決定されてよい。ブロック４１６で、プロキシソースコードは、プロキシ関数を一般化することによって一般化されてよい。特に、プロキシ関数は、プロキシ関数にパラメータunsigned  int  maskを加えて、そのパラメータをプロキシ関数の本体における変数に割り当てることによって、一般化されてよい。
Void  create_request_message(unsigned  int  mask){
EthernetMessage*payload=new  EthernetMessage;
payload->mask=mask;
Message  msg(sizeof(EthernetMessage),payload);
obj_->create_request_message(msg);
}
上記の擬似コードは、一般化後のプロキシテスト関数を表してよい。
【００７５】
ブロック４０４で、プロキシソースコードは解析されてよく、ブロック４０６で、プロキシソースコードのカバレッジは不十分であると見なされてよい。ブロック４０８で、ソースコードテストが、プロキシソースコードをテストするために生成されてよい。
【００７６】
図５は、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェア検証方法５００の例のフローチャートである。方法５００は、幾つかの実施形態において、図２のソフトウェア検証システム２００のような検証システムによって、実施されてよい。個別のブロックとして表されているが、様々なブロックは、所望の実施に依存して、更なるブロックに分けられても、より少ないブロックへとまとめられても、又は削除されてもよい。
【００７７】
方法５００はブロック５０２で開始してよく、プロキシソースコードが生成されてよい。プロキシソースコードは、ソフトウェアプログラムのソースコードに基づき生成されてよい。プロキシソースコードを生成することは、ソースコード内の夫々のクラスについてプロキシクラスを生成することと、クラスの夫々の中の１以上の関数についてプロキシ関数を生成することと含んでよい。幾つかの実施形態において、プロキシ関数のうちの１以上は、１以上の条件を含めるようリファインされてよい。１以上のプロキシ関数は、ユーザ入力、ソースコード情報、又は何らかの他の事項に基づきリファインされてよい。例えば、幾つかの実施形態において、関数に基づくプロキシ関数は、関数において決定されるエラーの決定に影響を与えるソフトウェアプログラムからの条件を含めるようリファインされてよい。
【００７８】
ブロック５０４で、プロキシソースコードが解析されてよい。特に、プロキシ関数の夫々が個別に解析されてよく、これは、夫々のプロキシ関数内で呼び出され且つそれと関連する関数の解析を含んでよい。プロキシソースコードを解析するために、動的解析、静的解析又は記号解析のような、多種多様なソースコード解析技術が実施されてよい。
【００７９】
ブロック５０６で、解析レポートが、プロキシソースコードの解析に関して生成されてよい。解析レポートは、プロキシソースコード及び／又はプロキシソースコードが基づくソースコードの特性を含んでよい。特に、解析レポートは、個々の関数におけるエラーのような、プロキシソースコードにおける個々のプロキシ関数に関連するエラーを示してよい。
【００８０】
幾つかの実施形態において、個々の関数内のエラーは、偽陽性エラーであると決定されてよい。上述されたような偽陽性エラーが、関数が解析される場合にエラーであるように見えるエラーであってよい。なお、偽陽性エラーは、ソースコード内の個々の関数のみならずソースコード全体との関連で、エラーでないことがある。二次的な解析が、偽陽性エラーを特定するようソースコードに基づき実行されてよい。
【００８１】
ブロック５０８で、偽陽性エラーが特定されたかどうかが決定されてよい。偽陽性エラーが特定された場合に、方法５００はブロック５１０へ進んでよい。偽陽性エラーが特定されてない場合に、方法５００はブロック５１２へ進んでよい。
【００８２】
ブロック５１０で、プロキシソースコードは律則されてよい。ソースコードを律則することは、偽陽性エラーを除去する１以上の条件を含めるよう、偽陽性エラーを含むプロキシ関数をリファインすることを含んでよい。特定された偽陽性エラーを除去し得る条件は、エラーが偽陽性エラーであると決定する場合にプロキシソースコード内で特定されていてよい。条件は、偽陽性エラーを除去するよう、その偽陽性エラーがあったプロキシ関数に加えられてよい。
【００８３】
ブロック５１２で、既知のエラーが見つけられているかどうかが決定されてよい。既知のエラーは、ブロック５０４でのプロキシソースコードの解析以外の方法によってソースコードにおいて特定されるエラーと関連付けられてよい。例えば、既知のエラーは、ソースコードの他のテストの間に又はソースコードの使用の間に決定されてよい。既知のエラーは、解析レポートにおいて見つけられるエラーと比較されてよい。既知のエラーが解析レポートにおけるエラーと一致する場合に、既知のエラーは、プロキシソースコードの解析によって見つけられていてよい。既知のエラーが見つけられている場合を決定することは、ソースコード内の条件に基づきプロキシソースコードの適切なカバレッジを決定するのに役立つことができる。既知のエラーが見つけられない場合に、プロキシソースコードのプロキシ関数における条件は、プロキシソースコード内の望まれるよりも少ないパスが解析されるようにプロキシソースコードのカバレッジを律則していることがある。望まれるよりも少ないパスが解析されている場合に、プロキシソースコードは、プロキシソースコードのカバレッジを広げるよう一般化されてよい。既知のエラーが見つけられた場合に、方法５００は終了してよい。既知のエラーが見つけられなかった場合に、方法５００はブロック５１４へ進んでよい。
【００８４】
ステップ５１４で、プロキシソースコードは、プロキシソースコードにおけるプロキシ関数を一般化することによって一般化されてよい。プロキシ関数は、上述されたように一般化されてよい。ブロック５１４の後にはブロック５０４が続いてよく、一般化されたプロキシソースコードが再解析されてよく、方法５００は続いてよい。
【００８５】
図６は、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェア検証方法６００の他の例のフローチャートである。方法６００は、幾つかの実施形態において、図２のソフトウェア検証システム２００のような検証システムによって、実施されてよい。個別のブロックとして表されているが、様々なブロックは、所望の実施に依存して、更なるブロックに分けられても、より少ないブロックへとまとめられても、又は削除されてもよい。
【００８６】
方法６００はブロック６０２で開始してよく、ソフトウェアプログラムの少なくとも一部分が受け取られてよい。ソフトウェアプログラムのその部分は、クラス内のソフトウェア関数を含んでよい。
【００８７】
ブロック６０４で、プロキシクラスがクラスに基づき生成されてよい。プロキシクラスは、ソフトウェア関数への呼び出しを含むプロキシ関数を含んでよい。
【００８８】
ブロック６０６で、プロキシ関数は解析されてよい。プロキシ関数の解析は、プロキシ関数によって使用されるプロキシ条件に基づきソフトウェア関数を解析することを含んでよい。プロキシ条件は、ソフトウェアプログラムに基づいてよく、条件をソフトウェア関数におけるパラメータ及び／又は変数に適用するよう構成されてよい。幾つかの実施形態において、プロキシ条件は、プロキシ関数のプロキシパラメータとして、又はプロキシ関数内で定義される変数としてプロキシ関数によって使用されてよい。
【００８９】
幾つかの実施形態において、プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析されてよい。幾つかの実施形態において、プロキシ条件は生成されてよく、又はユーザから受け取られてよい。
【００９０】
幾つかの実施形態において、プロキシ関数の解析は、ソフトウェア関数の選択された挙動の解析をもたらし、解析のために選択されるソフトウェア関数の挙動は、ソフトウェア関数の潜在的な実行パスを制限するプロキシ条件に基づいてよい。そのような及び他の実施形態において、方法６００は、選択された挙動の解析に基づきソフトウェア関数の選択された挙動を検証するためのテストケースを決定することを更に含んでよい。
【００９１】
幾つかの実施形態において、プロキシ条件は、プロキシ関数においてパラメータとして使用されてよく、ソフトウェア関数からの変数に基づいてよい。このとき、変数は、ソフトウェア関数の制御フローを決定する。そのような及び他の実施形態において、方法６００は、ソフトウェア関数の選択された挙動のカバレッジを決定することを更に含んでよい。ソフトウェア関数の選択された挙動のカバレッジは、解析されたソフトウェア関数の行及びブランチの数に基づいてよい。ソフトウェア関数の選択された挙動のカバレッジが閾値に満たない場合に、方法６００は、プロキシ関数を再解析することを更に含んでよい。プロキシ関数の再解析は、ソフトウェア関数の選択された第２の挙動の解析を生じさせてよい。ソフトウェア関数の第２の挙動は、ソフトウェア関数からの変数の値を拘束する第２のプロキシ条件に基づき、解析のために選択されてよい。
【００９２】
幾つかの実施形態において、プロキシ条件は、プロキシ関数における変数として使用され、ソフトウェア関数の以前の実行に関連する値を割り当てられてよい。そのような及び他の実施形態において、方法６００は、ソフトウェア関数の選択された挙動のカバレッジを決定することを更に含んでよい。ソフトウェア関数の選択された挙動のカバレッジは、解析されたソフトウェア関数の行又はブランチの数に基づいてよい。ソフトウェア関数の選択された挙動のカバレッジが閾値に満たない場合に、方法６００は、プロキシ関数を再解析することを更に含んでよい。プロキシ関数の再解析は、ソフトウェア関数の選択された第２の挙動の解析を生じさせてよい。解析のために選択されるソフトウェア関数の第２の挙動は、変数に基づくパラメータをプロキシ関数において含める第２のプロキシ条件に基づいてよい。
【００９３】
幾つかの実施形態において、プロキシ条件は、ソフトウェア関数の解析に基づきソフトウェア関数に置いて決定されるエラーの決定に影響を及ぼすソフトウェアプログラムからの条件を含むよう構成されてよい。そのような及び他の実施形態において、既知のエラーが決定されない場合に、方法６００は、プロキシ関数を再解析することを更に含んでよい。プロキシ関数の再解析は、第２のプロキシ条件に基づいてよい。
【００９４】
図７は、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェア検証方法７００の例のフローチャートである。方法７００は、幾つかの実施形態において、図２のソフトウェア検証システム２００のような検証システムによって、実施されてよい。個別のブロックとして表されているが、様々なブロックは、所望の実施に依存して、更なるブロックに分けられても、より少ないブロックへとまとめられても、又は削除されてもよい。
【００９５】
方法７００はブロック７０２で開始してよく、ソフトウェアプログラムの少なくとも一部分が受け取られてよい。ソフトウェアプログラムのその部分は、クラス内のソフトウェア関数を含んでよい。
【００９６】
ブロック７０４で、プロキシクラスがクラスに基づき生成されてよい。プロキシクラスは、ソフトウェア関数への呼び出しを含むプロキシ関数を含んでよい。
【００９７】
ブロック７０６で、プロキシ関数は解析されてよい。プロキシ関数の解析は、ソフトウェアプログラムの選択された挙動の解析をもたらしてよい。幾つかの実施形態において、解析のために選択されるソフトウェア関数の挙動は、ソフトウェア関数の潜在的な実行パスを制限し得る、プロキシ関数に関連する第１のプロキシ条件に基づいてよい。
【００９８】
ブロック７０８で、ソフトウェア関数の選択された挙動のカバレッジが決定されてよい。ソフトウェア関数の選択された挙動のカバレッジは、解析されたソフトウェア関数の行及びブランチの数に基づいてよい。ソフトウェア関数の選択された挙動のカバレッジが閾値に満たない場合に、方法７００はブロック７１０に進んでよい。ソフトウェア関数の選択された挙動のカバレッジが閾値よりも大きい場合に、方法はブロック７１２に進んでよい。
【００９９】
ブロック７１０で、プロキシ関数は再解析されてよい。プロキシ関数の再解析は、ソフトウェア関数の選択された第２の挙動の解析を生じさせてよい。ソフトウェア関数の第２の挙動は、ソフトウェア関数の実行パスを制限する、プロキシ関数に関連する第２のプロキシ条件に基づき、解析のために選択されてよい。幾つかの実施形態において、プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析及び再解析されてよい。
【０１００】
幾つかの実施形態において、第１にプロキシ条件は、プロキシ関数のプロキシパラメータに基づいてよく、第２のプロキシ条件は、プロキシパラメータに関連する、プロキシ関数内で定義されるプロキシ変数に基づいてよい。代替的に、又は追加的に、第１のプロキシ条件は、プロキシ関数内で定義されるプロキシ変数に基づいてよく、第２のプロキシ条件は、プロキシ変数に関連するプロキシ関数のプロキシパラメータに基づいてよい。
【０１０１】
ブロック７１２で、ソフトウェア関数の選択された挙動を検証するためのテストケースが、選択された挙動の解析に基づき決定されてよい。
【０１０２】
本願で記載される実施形態は、以下でより詳細に論じられるように、様々なコンピュータハードウェア又はソフトウェアを含む特別目的又は汎用のコンピュータの使用を含んでよい。
【０１０３】
本願で記載される実施形態は、コンピュータにより実行可能な命令又はデータ構造を搬送又は記憶するコンピュータ可読媒体を用いて実施されてよい。そのようなコンピュータ可読媒体は、汎用又は特別目的のコンピュータによってアクセスされ得るあらゆる利用可能な媒体であってよい。一例として、制限なしに、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ若しくは他の光学ディスクストレージ、磁気ディスクストレージ若しくは他の磁気ストレージデバイス、又はコンピュータにより実行可能な命令若しくはデータ構造の形で所望のプログラムコードを搬送若しくは記憶するために使用されてよく且つ汎用若しくは特別目的のコンピュータによってアクセスされてよいあらゆる他の記憶媒体を含む有形なコンピュータ可読記憶媒体を有してよい。そのような記憶媒体の組み合わせも、コンピュータ可読媒体の適用範囲内に含まれてよい。
【０１０４】
コンピュータにより実行可能な命令は、例えば、汎用のコンピュータ、特別目的のコンピュータ、又は特別目的の処理装置に特定の機能又は機能のグループを実行させる命令及びデータを有する。対象は、構造的な特徴及び／又は方法論的な動作に特有の言語において記載されてきたが、添付の特許請求の範囲において定義される対象は、必ずしも、上記の具体的な特徴又は動作に制限されないことが理解されるべきである。むしろ、上記の具体的な特徴及び動作は、特許請求の範囲を実施する例となる形態として開示される。
【０１０５】
本願で使用されるように、語“モジュール”又は“コンポーネント”は、コンピュータシステムで実行されるソフトウェアオブジェクト又はルーチンを指してよい。本願で記載される異なるコンポーネント、モジュール、エンジン及びサービスは、（例えば、別個のスレッドとして）コンピュータシステムで実行されるオブジェクト又は処理として実施されてよい。本願で記載されるシステム及び方法は、望ましくはソフトウェアにおいて実施され、一方、ハードウェア又はソフトウェア及びハードウェアの組み合わせにおける実施も可能であり考えられている。本明細書において、“コンピュータエンティティ”は、本願で先に定義されているようなあらゆるコンピュータシステム、又はコンピュータシステムで実行されるあらゆるモジュール若しくはモジュールの組み合わせであってよい。
【０１０６】
本願で挙げられている全ての例及び条件付き言語は、読む者が本発明及び当該技術の進歩に対して本発明によって貢献される概念を理解するのを助ける教育的な目的を対象とし、そのような具体的に挙げられている例及び条件に制限されないよう解釈されるべきである。本発明の実施形態について詳細に記載してきたが、当然に、様々な変更、置換及び代替が、本発明の精神及び適用範囲から逸脱することなしにそれらに対してなされてよい。
【０１０７】
上記の実施形態に加えて、以下の付記を開示する。
（付記１）
クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取り、
前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成し、
前記プロキシ関数によって使用されるプロキシ条件に基づき前記ソフトウェア関数を解析することを含め、前記プロキシ関数を解析し、
前記プロキシ条件は、前記ソフトウェアプログラムに基づき、前記ソフトウェア関数におけるパラメータ及び／又は変数に条件を適用する構成される、
ソフトウェア検証方法。
（付記２）
前記プロキシ条件は、前記プロキシ関数のプロキシパラメータとして、又は前記プロキシ関数内で定義される変数として、前記プロキシ関数によって使用される、
付記１に記載のソフトウェア検証方法。
（付記３）
前記プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析される、
付記１に記載のソフトウェア検証方法。
（付記４）
前記プロキシ条件は生成されるか、又はユーザから受け取られる、
付記１に記載のソフトウェア検証方法。
（付記５）
前記プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の挙動は、前記ソフトウェア関数の潜在的な実行パスを制限する前記プロキシ条件に基づく、
付記１に記載のソフトウェア検証方法。
（付記６）
更に、前記選択された挙動の解析に基づき、前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する、
付記５に記載のソフトウェア検証方法。
（付記７）
前記プロキシ条件は、前記ソフトウェア関数からの変数に基づく前記プロキシ関数におけるパラメータとして使用され、前記変数は、前記ソフトウェア関数の制御フローを決定する、
付記５に記載のソフトウェア検証方法。
（付記８）
更に、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、前記ソフトウェア関数の前記選択された挙動の前記カバレッジは、解析された前記ソフトウェア関数の複数のライン又はブランチに基づき、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第２の挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の前記第２の挙動は、前記ソフトウェア関数からの変数の値を拘束する第２のプロキシ条件に基づく、
付記７に記載のソフトウェア検証方法。
（付記９）
前記プロキシ条件は、前記プロキシ関数における変数として使用され、前記ソフトウェア関数の以前の実行と関連付けられた値を割り当てられる、
付記５に記載のソフトウェア検証方法。
（付記１０）
更に、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、前記ソフトウェア関数の前記選択された挙動の前記カバレッジは、解析された前記ソフトウェア関数の複数のライン又はブランチに基づき、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第２の挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の前記第２の挙動は、前記変数に基づく前記プロキシ関数におけるパラメータを含む第２のプロキシ条件に基づく、
付記９に記載のソフトウェア検証方法。
（付記１１）
前記プロキシ条件は、前記ソフトウェア関数の解析に基づき前記ソフトウェア関数において決定されるエラーの決定に作用する前記ソフトウェアプログラムからの条件を含むよう構成される、
付記１に記載のソフトウェア検証方法。
（付記１２）
既知のエラーが決定されない場合に、更に前記プロキシ関数を再解析し、該プロキシ関数の再解析は第２のプロキシ条件に基づく、
付記１１に記載のソフトウェア検証方法。
（付記１３）
システムにソフトウェア検証動作を実行させるためにコンピュータ可読媒体からのコンピュータ命令を実行するよう構成されるプロセッサであって、
前記ソフトウェア検証動作は、
クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取る動作と、
前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成する動作と、
前記プロキシ関数によって使用されるプロキシ条件に基づき前記ソフトウェア関数を解析することを含め、前記プロキシ関数を解析する動作と
を含み、
前記プロキシ条件は、前記ソフトウェアプログラムに基づき、前記ソフトウェア関数におけるパラメータ及び／又は変数に条件を適用する構成される、
プロセッサ。
（付記１４）
前記プロキシ条件は、前記プロキシ関数のプロキシパラメータとして、又は前記プロキシ関数内で定義される変数として、前記プロキシ関数によって使用される、
付記１３に記載のプロセッサ。
（付記１５）
前記プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析される、
付記１３に記載のプロセッサ。
（付記１６）
前記プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の挙動は、前記ソフトウェア関数の潜在的な実行パスを制限する前記プロキシ条件に基づく、
付記１３に記載のプロセッサ。
（付記１７）
前記ソフトウェア検証動作は、前記選択された挙動の解析に基づき、前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する動作を更に含む、
付記１６に記載のプロセッサ。
（付記１８）
前記プロキシ条件は、前記ソフトウェア関数の解析に基づき前記ソフトウェア関数において決定されるエラーの決定に作用する前記ソフトウェアプログラムからの条件を含むよう構成される、
付記１３に記載のプロセッサ。
（付記１９）
クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取り、
前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成し、
前記プロキシ関数を解析し、該プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、解析のために選択される前記ソフトウェア関数の前記挙動は、前記ソフトウェア関数の実行パスを制限する前記プロキシ関数に関連付けられた第１のプロキシ条件に基づき、
解析される前記ソフトウェア関数の複数のライン又はブランチに基づく、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第２の挙動の解析をもたらし、解析のために選択される前記ソフトウェア関数の前記第２の挙動は、前記ソフトウェア関数の実行パスを制限する前記プロキシ関数に関連付けられた第２のプロキシ条件に基づき、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが前記閾値より大きい場合に、前記選択された挙動の解析に基づき前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する、
ソフトウェア検証方法。
（付記２０）
前記第１のプロキシ条件は、前記プロキシ関数のプロキシパラメータに基づき、前記第２のプロキシ条件は、前記プロキシパラメータに関連付けられた前記プロキシ関数内で定義されるプロキシ変数に基づく、
付記１９に記載のソフトウェア検証方法。
（付記２１）
前記第１のプロキシ条件は、前記プロキシ関数内で定義されるプロキシ変数に基づき、前記第２のプロキシ変数は、前記プロキシ変数に関連付けられた前記プロキシ関数のプロキシパラメータに基づく、
付記１９に記載のソフトウェア検証方法。
【符号の説明】
【０１０８】
１１０                          関数
１１２，１２２                  パラメータ
１２０                          プロキシ関数
２００                          ソフトウェア検証システム
２０２                          ソースコード
２０４                          ユーザ入力
２０６                          ソースコード情報
２１０                          プロキシ生成部
２１２                          プロキシクラス生成部
２１４                          プロキシ関数生成部
２２０                          プロキシソースコード
２３０                          プロキシ解析部
２３２                          カバレッジチェッカー
２３４                          偽陽性エラーチェッカー
２４０                          テストケース
２５０                          レポート
３００                          クラス
３２０                          プロキシクラス
４００，５００，６００，７００  ソフトウェア検証方法
【図１Ａ】
2014186727.tif 000003
【図１Ｂ】
2014186727.tif 000004
【図２】
2014186727.tif 000005
【図３Ａ】
2014186727.tif 000006
【図３Ｂ】
2014186727.tif 000007
【図４】
2014186727.tif 000008
【図５】
2014186727.tif 000009
【図６】
2014186727.tif 000010
【図７】
2014186727.tif 000011
【外国語明細書】
2014186727000001.pdf