JP2014186727A - ソフトウェア検証方法及びプロセッサ - Google Patents

ソフトウェア検証方法及びプロセッサ Download PDF

Info

Publication number
JP2014186727A
JP2014186727A JP2014050446A JP2014050446A JP2014186727A JP 2014186727 A JP2014186727 A JP 2014186727A JP 2014050446 A JP2014050446 A JP 2014050446A JP 2014050446 A JP2014050446 A JP 2014050446A JP 2014186727 A JP2014186727 A JP 2014186727A
Authority
JP
Japan
Prior art keywords
proxy
function
software
analysis
source code
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.)
Granted
Application number
JP2014050446A
Other languages
English (en)
Other versions
JP6264964B2 (ja
Inventor
Hiroaki Yoshida
浩章 吉田
H Wiggers Maarten
エイチ ウィガーズ・マールテン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2014186727A publication Critical patent/JP2014186727A/ja
Application granted granted Critical
Publication of JP6264964B2 publication Critical patent/JP6264964B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis

Abstract

【課題】ソフトウェア解析ツールによらないソフトウェア検証方法等を提供する。
【解決手段】ソフトウェア検証方法は、ソフトウェアの少なくとも一部分を受け取る動作を含む。ソフトウェアプログラムの一部分はクラス内のソフトウェア関数を含んでよい。方法は、そのクラスに基づきソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを生成する動作と、プロキシ関数を解析する動作とを更に含んでよい。プロキシ関数の解析は、プロキシ関数によって使用されるプロキシ条件に基づきソフトウェア関数を解析する動作を含んでよく、プロキシ条件はソフトウェアプログラムに基づき、ソフトウェア関数におけるパラメータ及び/又は変数へ条件を適用するよう構成される。
【選択図】図2

Description

本願で開示される実施形態は、ソフトウェアの検証に関する。
電子機器の使用が増えるにつれて、それらの機器で実行されるソフトウェアプログラムの数も増える。通常、ソフトウェアプログラムが開発される場合に、ソフトウェアプログラムは、ソフトウェアプログラムがそのソフトウェアプログラムのための所定要件の全てを満足することを確かにするのを助けるよう検証される。ソフトウェアプログラムが全ての所定要件を満たすかどうかを決定するためのテストケースを開発することは、困難であり且つ時間がかかることがある。例えば、C/C++言語では、ソフトウェアプログラム内の関数はvoid*引数を有することがある。void*引数は、関数が何かしらの引数型のオブジェクトへのポインタを受け入れることを示すので、曖昧な引数であり得る。関数を検証するためのテストケースを生成する場合に、ソフトウェア解析ツールは、曖昧な引数が関数の分岐点内で使用される場合に関数の分岐点内の条件を満足する値を決定することができない場合がある。結果として、関数の適切な検証カバレッジは、ソフトウェア解析ツールによって生成されるテストケースを通じては得られないことがある。
曖昧な引数の問題を改善するために既存のソフトウェア解析ツールによって使用される1つのアプローチは、ソフトウェア解析ツールが理解及び/又は処理するのに苦心し得るインスタンス、又は曖昧であるソフトウェアプログラム内のインスタンスを示すソフトウェアプログラム内に手動により置かれた非互換のコメントを有することである。
しかし、そのような非互換のコメントは、読み取りにくいソフトウェアプログラムをもたらすことがあり、曖昧な引数を正確には定義することができず、ソフトウェア解析ツールと無関係の何者かが理解できるほど十分に表現され得ず、且つ、選択的なソフトウェア解析ツールによってしか読み出され理解され得ず、それにより他のソフトウェア解析ツールによって検証されるべきソフトウェアの機能を制限する。
本願で請求される対象は、いずれかの欠点を解消し、又は上述されたような環境においてのみ動作する実施形態に制限されない。むしろ、以上の記載は、本願で記載される幾つかの実施形態が実施され得る技術分野の一例を挙げるために提供されているにすぎない。
実施形態の一態様に従って、ソフトウェア検証方法は、ソフトウェアプログラムの少なくとも一部分を受け取る動作を含む。前記ソフトウェアプログラムの前記一部分は、クラス内のソフトウェア関数を含んでよい。当該ソフトウェア検証方法は、前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成する動作と、前記プロキシ関数を解析する動作とを更に含んでよい。前記プロキシ関数の解析は、前記プロキシ関数によって使用されるプロキシ条件に基づき前記ソフトウェア関数を解析することを含んでよく、前記プロキシ条件は、前記ソフトウェアプログラムに基づき、前記ソフトウェア関数におけるパラメータ及び/又は変数に条件を適用する構成される。
実施形態の目的及び利点は、少なくとも、特許請求の範囲において特に指し示されている要素、特徴、及び組み合わせによって、実現及び達成される。
当然のことながら、上記の概要及び下記の詳細な説明はいずれも例示及び説明のためであり、請求される本発明の制限ではない。
本願発明の実施形態によれば、ソフトウェア解析ツールによらずにソフトウェアを検証することが可能となる。
ソフトウェアプログラムの関数を例示する。 図1Aのソフトウェアプログラムの関数のプロキシ関数を例示する。 ソフトウェア検証システムの例のブロック図である。 ソフトウェアプログラムのクラスを例示する。 図3Aのソフトウェアプログラムのクラスのプロキシクラスを例示する。 ソフトウェア検証方法の例のフローチャートである。 ソフトウェア検証方法の例のフローチャートである。 ソフトウェア検証方法の例のフローチャートである。 ソフトウェア検証方法の例のフローチャートである。
実施例は、添付の図面の使用により更なる特異性及び詳細を伴って記載及び説明される。
本願で記載される幾つかの実施形態は、ソフトウェアを検証する方法及びシステムに関する。検証されるべきソフトウェアは、複数の実行パスを含んでよい。様々なクラス内の様々な関数は、複数の実行パスの部分であってよい。実行パスは、条件付きソフトウェア記述、並びに割り当て、関数呼び出し、及び他のソフトウェア記述のような他のソフトウェア記述のような、1以上の分岐点を含んでよい。幾つかの実施形態において、関数のうちの1以上は、1又はそれ以上の複数の実行パスを含んでよい。
幾つかの実施形態において、ソフトウェアを検証するよう、ソフトウェアは、ソフトウェアの複数の実行パスをトラバースするために複数の具象的(concrete)入力を用いて具体的に実行されてよい。ソフトウェア解析は、ソフトウェアの機能を適切に検証するようソフトウェアの適切な数の実行パスをトラバースすることができる具象的入力を決定するために使用されてよい。使用され得る様々なタイプのソフトウェア解析は、静的ソフトウェア解析、動的ソフトウェア解析、及び/又は記号的ソフトウェア解析を含む。
幾つかのソフトウェアは、ソフトウェア解析ツールがソフトウェアを解析するのを困難にしうる形で記述されることがある。特に、ソフトウェア内の関数は、ソフトウェア解析ツールがソフトウェアの適切な数の実行パスをトラバースすることができるテストケースを決定することができず、それによりソフトウェアの適切な検証カバレッジを提供することができないような形で記述されることがある。更に、ソフトウェアにおける関数は、ソフトウェア解析ツールがソフトウェアの他の特性を決定することができないような形で記述されることがある。
幾つかの実施形態において、本願で記載されるように、ソフトウェアのコンパイル可能なプログラミング言語が、制約のような条件をソフトウェアの1以上の関数のパラメータ又は他の変数に適用するために使用されてよい。条件をパラメータ又は他の変数に適用することによって、ソフトウェア解析ツールは、ソフトウェアの関数の適切な検証カバレッジを提供するために使用され得るテストケースを決定することがより可能となり得る。更に、条件をパラメータ又は他の変数に適用することによって、ソフトウェア解析ツールは、ソフトウェアプログラムの特性を確かめ、及び/又はソフトウェア解析ツールによって生成される偽陽性エラーを減らすことができる。
幾つかの実施形態において、パラメータ又は他の変数に適用される条件は、関数のパラメータ化された使用シナリオであるプロキシ関数を生成することによって、関数に適用されてよい。プロキシ関数は、関数への呼び出しと、関数内のパラメータ又は他の変数へ条件を適用するコンパイル可能なソースコードとを含んでよい。幾つかの実施形態において、付加的アプローチが使用されてよく、このとき、関数内のパラメータ又は他の変数に適用される条件は、ソフトウェアの適切な検証カバレッジが達成されるまで、ソフトウェア解析ツールの結果に基づき変更されてよい。
本発明の実施形態は、添付の図面を参照して説明される。
図1A及び図1Bは夫々、本願で開示される一般概念を説明する際に例として使用されるソフトウェアプログラムの関数110及びプロキシ関数120の例を表す。そのようなものとして、図1A及び図1Bにおいて表されているソフトウェア部分は、本願で開示される1以上の実施形態に基づき生成され得る1つの解決法を表す。多数の他の解決法及びソフトウェア構成が、本願の適用範囲から逸脱することなしに実施されてよい。
特に、図1Aは、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェアプログラムの関数110を例示する。ソフトウェアプログラムは複数のクラスを含んでよく、複数のクラスの夫々は、数あるソースコードのタイプの中でも、1以上の関数を含む。関数110は、ソフトウェアプログラムのクラスのうちの1つの部分であってよい。図1で、関数110は、“Process”と名付けられたクラスの部分であり、パラメータ112、すなわち、Message&msgを有する。パラメータ112は、関数110がソフトウェアプログラムにおいて呼び出される場合に関数110へ渡されるProcessクラスのオブジェクトであってよい。関数110内で、行114で、変数“message_payload”は、関数110へ渡されたパラメータ112に基づき生成されてよい。行116で、message_payloadは、Ethernet(登録商標)Messageクラスのオブジェクト“payload”になるようタイプキャストされてよい。payloadのメンバーの値である“mask”は、真と評価される場合に関数110の残りの部分が実行されることを可能にする条件文において評価される。
未定義タイプのmessage_payload、タイプキャスト、及び/又は関数110において未定義であるクラスのオブジェクトのメンバーに基づく条件文に基づき、関数110はソフトウェア解析器にとって幾らか抽象的となり得る。結果として、関数110のソースコードは、条件文が真と評価することを可能にすることができる値がどのようなものかをソフトウェア解析器が理解するのを妨げ得る。特に、ソフトウェア解析器は、関数110において、タイプEthernetMessageのオブジェクトのメンバーの値がタイプMessageのオブジェクトに含まれるべきであることを理解し得ない。結果として、ソフトウェア解析器は、条件文が真と評価する場合に関数110の部分を実行することができるテストケースを決定することができないことがある。よって、ソフトウェア解析器によって提供されるテストケースは、関数110の適切な検証カバレッジを提供することができないことがある。更に、ソフトウェア解析器は、関数110の他の特性を決定することができないことがある。
図1Bは、本願で記載される少なくとも幾つかの実施形態に従って配置される、図1Aのソフトウェアプログラムの関数110のプロキシ関数120を例示する。プロキシ関数120は、関数110を理解し、且つ、関数110及びソフトウェアプログラムの適切な検証カバレッジを提供するテストケースのようなプロキシ関数の1以上の特性を確かにするためのソフトウェア解析器の能力を改善するよう、関数110に基づき生成される関数であってよい。このために、プロキシ関数120は、関数110及びソフトウェアプログラムについてプロキシ関数の1以上の特性を確かめるようソフトウェア解析器によって解析されてよい。
関数110に基づくと共に、プロキシ関数120は更に、関数110の潜在的な実行パスを制限し得る1以上の条件を含んでよい。関数110の潜在的な実行パスを制限することは、とりわけ、関数110内の変数の値を制限すること、関数110へ渡されるパラメータの値を制限すること、関数110内の変数を定義するようプロキシ関数120内にコンストラクタを付加することを含んでよい。プロキシ関数120はまた、関数110を含むクラスに基づき生成され得るプロキシクラスの部分であってよい。プロキシクラスは、プロキシコンストラクタ、プロキシオブジェクトの定義、及びプロキシクラスの特有の他のプロキシ変数を含んでよい。
プロキシ変数120は、行126で、関数110への呼び出しを含む。プロキシ変数120は、関数へ渡されるパラメータ112に制約のような条件を適用するために使用され得る様々なプロキシ条件を更に含む。特に、プロキシ関数120は、プロキシ関数120へ渡されるよう構成されるパラメータunsigned int maskを含む。行124で、プロキシ関数120は、関数110へ渡されるプロキシ関数120のパラメータ122に基づき変数msgを生成するよう構成される。プロキシ関数120におけるプロキシ条件、例えば、行124にあるソースコード及びパラメータ122は、関数110がソフトウェアプログラム内で呼び出される場合に関数110のパラメータ112へ割り当てられ得る値を制限することをもたらす。
関数110のパラメータ112へ割り当てられる値を制限することによって、プロキシ関数120は、ソフトウェア解析器にとって関数110をより明確なものとする。関数110がソフトウェア解析器にとってより明確であるとき、ソフトウェア解析器は、関数110の1以上の特性を決定することができる。幾つかの実施形態において、関数110の1以上の特性は、関数110の適切な検証カバレッジを提供するテストケースを含んでよい。特に、プロキシ関数120は、整数値が関数110の行118にある条件文に提供されるとソフトウェア解析器が理解するように構成される。結果として、ソフトウェア解析器は、行118にある条件文を満足する整数値を決定し、関数110の残りの部分を解析することができる。関数110をその全体において解析することができることによって、ソフトウェア解析器は、条件文の後のソースコードが実行及び検証されることを可能にすることができるテストケースを生成し得る。
関数110は、1以上の問題をソフトウェア解析器に与えうるソースコードの一構成の例を与える。ソースコードの様々な他の構成がソフトウェア解析器に問題を与えうる。例えば、数あるソースコードの構成の中でも、クラスタイプ、グローバル変数、静的変数、クラスフィールド、キャストタイピングのようなユーザ定義のタイプを含むソースコードは、ソフトウェア解析器が関数110の1以上の特性を決定することができないように、又は適切な検証カバレッジを提供するテストケースを生成することができないようにすることがある。他のタイプのソースコード構成も、ソフトウェア解析器が関数110の1以上の特性を決定することができないように、又は適切な検証カバレッジを提供するテストケースを生成することができないようにすることがある。
1以上の問題をソフトウェア解析器へ与えうるソースコードの他の例は、エラーではないがエラーであるように見える関数内の条件であってよい。これは、本願では偽陽性エラーと呼ばれる。例えば、関数において初期化されず関数が呼び出される前にソフトウェアプログラムにおいて初期化される、関数において使用されるポインタは、偽陽性エラーと識別されることがある。関数のプロキシ関数は、関数が解析される場合に関数における条件がエラーと見なされないように、条件を関数に加えてよい。例えば、関数のプロキシ関数は、関数の解析が関数におけるポインタの非初期化をエラーであると示さないように、関数に対してポインタを初期化してよい。
代替的に、又は追加的に、如何にしてソフトウェア解析器がソフトウェアを解析しているかは、異なる問題を与えることがある。例えば、ソフトウェアプログラムの静的解析における静的変数は、関数の適切な特性が決定されることを可能にすることができるが、その一方で、ソフトウェアプログラムの記号解析における静的変数は、関数の適切な特性が決定されることを可能にすることができない。代替的に、又は追加的に、ソースコードは、1以上の変数又は関数が既知の又は特定のタイプへ割り当てられないために、ソフトウェア解析器が全ての利用可能な処理リソースを使用するか又はタイムアウトする前に関数の特性が決定され得ないほど多数の異なる特性をソフトウェア解析器が解析するよう強いられるほどより大きい範囲を有することがある。
プロキシ関数120は、関数110の特性を決定するためにプログラム解析器によって使用されるプロキシ関数の例を提供する。プロキシ関数120の他の構成は、関数110の適切な検証カバレッジを提供し得るテストケースのような関数110の特性を決定するために使用されてよい。
図2は、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェア検証システム200の例のブロック図である。システム200は、ソースコード202に基づきプロキシソースコード220を生成するよう且つプロキシソースコード220を解析することによってテストケース240及びレポート250を生成するよう構成されてよい。
システム200は、プロキシ生成部210及びプロキシ解析部230を有する。プロキシ生成部210は、プロキシクラス生成部212及びプロキシ関数生成部214を有する。プロキシ生成部210は、ソースコード202、ユーザ入力204及びソースコード情報206のような入力を受けるよう構成される。それらの受け取られた入力のうちの1以上に基づき、プロキシ生成部210はプロキシソースコード220を生成するよう構成される。
特に、プロキシクラス生成部212は、ソースコード202を受けるよう且つソースコード202内の異なるクラスを決定するよう構成されてよい。ソースコード202における夫々のクラスについて、プロキシクラス生成部212はプロキシクラスを生成するよう構成されてよい。ソースコード202における所与のクラスについて、その対応するプロキシクラスは、プロキシ解析部230とソースコード202との間のレイヤを提供する所与のクラスのアブストラクションであってよい。アブストラクションは、生成されたプロキシクラスが特定の条件をソースコード202に適用して、プロキシ解析部230がより容易にプロキシ関数の1以上の特性を取得し及び/又は偽陽性エラーを除去することができるようにプロキシ解析部230が特定の変数若しくはパラメータ又は限られた範囲の変数若しくはパラメータに焦点を当てるようにすることを可能にすることができる。
幾つかの実施形態において、プロキシクラス生成部212は、プロキシクラスのソースコードを生成するよう構成されてよい。プロキシクラスのソースコードは、プロキシクラスに関連するクラスのクラスオブジェクトを生成するよう構成されるコンストラクタを含んでよい。プロキシクラス生成部212はまた、プロキシクラスに関連するクラス内の関数の夫々についてプロキシ関数を生成するよう構成されてよい。夫々のプロキシ関数は、そのプロキシ関数に関連する関数のパラメータと同様のパラメータを含んでよい。代替的に、又は追加的に、プロキシ関数は、プロキシ関数に関連する関数への呼び出しを含んでよい。
図3Aは、ソフトウェアプログラムのクラス300を例示し、図3Bは、図3Aのソフトウェアプログラムのクラスのプロキシクラス320を例示する。クラス300はprocessと名付けられており、タイプintのパラメータvarを有する関数func及びコンストラクタを含む。プロキシクラス320は、クラス300に基づき生成され得るプロキシクラスの例である。例えば、プロキシクラス320は、図2のプロキシクラス生成部212を用いて生成されてよい。
プロキシクラス320はproxyprocessと名付けられており、ex_objectと名付けられたprocessクラスのクラスオブジェクトを生成するコンストラクタを含む。proxyprocessクラスは、パラメータvar1を有するproxy_funcと名付けられたプロキシ関数を更に含む。関数proxy_funcは、processクラスの関数funcへの呼び出しを含み、このとき、proxy_funcからのパラメータvar1はprocessクラスの関数funcへパラメータとして送られる。
クラス300及びプロキシクラス320は、本願で記載されるようにクラスに基づき生成され得るプロキシクラスの一例を表す。他の方法及びソースコード構成は、本願の適用範囲から逸脱することなしにクラスからプロキシクラスを生成するために使用されてよい。
図2に戻り、幾つかの実施形態において、プロキシクラスが生成された後、プロキシクラスは、プロキシ解析部230へ送信されるプロキシソースコード220を生成するようソースコード202に加えられる。幾つかの実施形態において、プロキシクラスにおけるプロキシ関数の全ては、プロキシ解析部230へ送信され得る単一のソースファイルに含まれてよい。
幾つかの実施形態において、プロキシクラスが生成された後、プロキシ関数生成部214は、プロキシクラス内のプロキシ関数のうちの1以上を更にリファインするよう構成されてよい。プロキシ関数生成部214は、関数の制限材的な実行パスを制限し、関数の更なる特性が決定されることを可能にし、及び/又は関数の偽陽性エラーを除去し得る1以上の条件をプロキシ関数内に含めることによって、プロキシ関数をリファインしてよい。幾つかの実施形態において、1以上の条件をプロキシ関数内に含めることは、プロキシ解析部230によって解析される変数及び/又はパラメータ且つ/あるいは変数及び/又はパラメータの範囲を制限してよい。
幾つかの実施形態において、プロキシ関数生成部214は、ソースコード情報206に基づき関数のプロキシ関数をリファインしてよい。ソースコード情報206は、関数を通る制御フローを決定する変数に関する情報を含んでよい。例えば、制御フロー変数は、関数内の異なる実行パスを通るフローを決定する数ある変数の中でも、条件文を評価する際に使用される分岐点に関連する変数であってよい。プロキシ関数生成部214は、制御フロー変数のうちの1又はそれ以上をプロキシ関数においてパラメータとして含めるようにプロキシ関数をリファインするよう構成されてよい。
ソースコード情報206は、ソースコード202内の関数の正確な呼び出しシナリオに関する情報を更に含んでよい。正確な呼び出しシナリオの情報は、ソースコード202の実行が成功する場合に関数と共に使用される変数の値を含んでよい。プロキシ関数生成部214は、プロキシ関数の本体内の正確な呼び出しシナリオの情報に基づき変数及び変数の値のうちの1又はそれ以上を含めるようにプロキシ関数をリファインするよう構成されてよい。代替的に、又は追加的に、プロキシ関数生成部214は、クラス及びプロキシクラスの1以上の変数を調整するコンストラクタへの呼び出しを含めるようにプロキシ関数をリファインするよう構成されてよい。
幾つかの実施形態において、ソースコード情報206は、ソースコード202において特定される偽陽性エラーに関する情報を更に含んでよい。偽陽性エラーに関する情報は、ソースコード202において特定される偽陽性エラーを低減又は除去し得る条件であってよい。そのような及び他の実施形態において、プロキシ関数生成部214は、偽陽性エラーを防ぐための条件を含めるようにプロキシ関数をリファインするよう構成されてよい。
幾つかの実施形態において、プロキシ関数生成部214は更に、ユーザ入力204に基づきプロキシ関数をリファインするよう構成されてよい。そのような及び他の実施形態において、ユーザは、プロキシ関数生成部214と相互作用し、プロキシ関数へのソースコード編集を実行してよい。そのような及び他の実施形態において、ユーザは、プロキシ関数のパラメータ及び/又はプロキシ関数の本体をリファインしてよい。
プロキシ関数生成部214がプロキシ関数をリファインした後、リファインされたプロキシ関数を有するプロキシクラスは、プロキシ解析部230へ送信されるプロキシソースコード220を生成するようソースコード202に加えられる。
幾つかの実施形態において、プロキシ解析部230は、ソースコード202の特性を確かめるためにプロキシソースコード220を解析するよう構成されてよい。確かめられ得るソースコード202の特性は、テストケース、既知の欠陥、区域外のメモリアクセス、初期化されていないポインタ、ゼロ除算、メモリが割り当てられているが決して割り当てを解除されない場合のようなメモリリークを含んでよい。幾つかの実施形態において、プロキシ解析部230は、ソフトウェア又はソースコード解析器と同じであってよい。多種多様なソースコード解析技術がプロキシ解析部230によって実施されてよい。例えば、プロキシ解析部230は、ソースコード202の特性を確かめるためにプロキシソースコード220に対して動的解析、静的解析、又は記号解析を用いてよい。
ソースコード202の代わりにプロキシソースコード220を解析することによって、プロキシ解析部230は、ソースコード202内の特定の変数及び/又はパラメータ且つ/あるいは変数及び/又はパラメータの特定の値にその解析を向けることができ、それにより、ソースコード202におけるエラーのようなソースコード202の特定の特性を確かめることができる可能性を高めることができる。幾つかの実施形態において、プロキシ解析部230は、ソースコード202内のエラーのような特性を示すレポート250を生成するよう構成されてよい。
更に、ソースコード202の代わりにプロキシソースコード220を解析することによって、プロキシ解析部230は、ソースコード202の偽陽性エラーを除去することができる可能性を高めることができる。例えば、プロキシ解析部230は、プロキシ解析部230によって特定されるエラーが偽陽性エラーであるかどうかのエラー判定を行うよう構成され得る偽陽性エラーチェッカー234を有してよい。偽陽性エラーチェッカー234は、プロキシ解析部230によって報告される関数内のエラーが偽陽性エラーであるかどうかを決定するために、ユーザ入力204及び/又はソースコード情報206のような他の情報と共にソースコード202を使用してよい。代替的に、又は追加的に、偽陽性エラーチェッカー234は、偽陽性エラーが起こった場合をプロキシ生成部210に示してよい。プロキシ関数生成部214は、ソースコード202における偽陽性エラーを低減又は除去するための条件を含めるように更にプロキシソースコード220における1以上のプロキシ関数をリファインするよう構成されてよい。そのような及び他の実施形態において、レポート250は、偽陽性エラーを含んでも又は含まなくてもよい。
他の例として、幾つかの実施形態において、プロキシソースコード220の解析を通じて、プロキシ解析部230は、ソースコード202の適切な検証カバレッジを提供するテストケースを生成してよい。代替的に、又は追加的に、ソースコード202の代わりにプロキシソースコード220を解析することによって、プロキシ解析部230は、ソースコード202内の特定の実行パスに解析を向けることができ、それにより、ソースコード202の適切な検証カバレッジを提供するテストケース240を生成することができる可能性を高めることができる。
プロキシ解析部230は、カバレッジチェッカー232を有してよい。カバレッジチェッカー232は、ソースコード202の範囲のどの程度がプロキシ解析部230によって解析され又はテストケース240によってカバーされるのかを決定するためにプロキシ解析部230の解析及び/又はテストケース240を精査するよう構成されてよい。例えば、カバレッジチェッカー232は、プロキシ解析部230によって解析されたソースコード202の行数を決定し、解析された行数をソースコード202の総行数と比較してよい。解析された行数がソースコード202の総行数と比較して特定の閾値を下回る場合は、カバレッジチェッカー232は、ソースコード202が適切に解析されておらず、よってテストケース240が適切な検証カバレッジを提供しない可能性があると決定してよい。
幾つかの実施形態において、カバレッジチェッカー232は、既知のエラーがプロキシ解析部230によってプロキシソースコード220において特定された場合を確認してよい。既知のエラーは、システム200でないシステムによってソースコード202において特定されるエラーであってよい。既知のエラーが特定されない場合は、プロキシソースコード220のカバレッジは不十分であり得る。そのような及び、プロキシ解析部230がプロキシソースコード220に基づきテストケース240を生成することができない場合、例えば、プロキシ解析部230が計算リソースを使い果たすか又はタイムアウトする場合のような、他の実施形態において、カバレッジチェッカー232は、プロキシ生成部210及び特にプロキシ関数生成部214に、ソースコード202の解析カバレッジが不十分であることを示してよい。
ソースコード202の解析カバレッジが不十分であるとのインジケーションをプロキシ関数生成部214が受け取る場合に、プロキシ関数生成部214は、プロキシソースコード220における1以上のプロキシ関数を更にリファインするよう構成されてよい。プロキシ関数を更にリファインする場合に、プロキシ関数生成部214は、プロキシ関数を律則又は一般化するよう構成されてよい。
例えば、プロキシ解析部230がテストケースを生成できなかったと、又はプロキシ解析部230がプロキシソースコード220を理解又は処理することがでないことにより限られた量のプロキシソースコード220しか解析できなかったとカバレッジチェッカー232が示す場合に、プロキシ関数生成部214は、プロキシソースコード220内の1以上のプロキシ関数を律則してよい。プロキシ関数を更に律則するよう、プロキシ関数生成部214は、プロキシ関数によって予め使用されている条件を更に制限するか又は追加の条件を含めるようプロキシ関数をリファインしてよい。例えば、プロキシ関数生成部214は、コンストラクタ呼び出しをコンストラクタ呼び出しのパラメータと共に関数のパラメータに加え、関数からパラメータを除去して除去されたパラメータと同じタイプである変数を関数に含め、及び/又は関数内の変数を更に律則するよう構成されてよい。
プロキシ関数生成部214は、ユーザ入力204及び/又はソースコード情報206に基づき、更にプロキシ関数を律則するための条件を決定してよい。幾つかの実施形態において、プロキシ関数生成部214は、プロキシ解析部230によって解析されなかったソースコード202の行を解析することによって、加えるべき条件を決定してよい。例えば、プロキシ関数における変数に関し、プロキシ関数生成部214は、更に変数を律則するようその変数に使用され得る値又は値の範囲を決定して、更に関数を律則するようその条件をプロキシ関数に適用するために、解析されなかったソースコード202の行を解析してよい。
幾つかの実施形態において、プロキシ関数生成部214は、プロキシソースコード220内の1以上のプロキシ関数を一般化してよい。プロキシ関数生成部214は、少なくとも部分的に解析されるべきであるプロキシソースコード220における条件に基づき、プロキシ解析部230がソースコード202の部分を解析しなかった場合に1以上のプロキシ関数を一般化してよい。プロキシ関数を一般化するよう、プロキシ関数生成部214は、とりわけ、パラメータをプロキシ関数に加え、プロキシ関数の本体から変数を除き、プロキシ関数の本体における変数の値を調整し、プロキシ関数の本体におけるコンストラクタへの呼び出しを除くよう構成されてよい。プロキシ関数生成部214は、ソースコード情報206及び/又はユーザ入力204に基づき、あるいは、プロキシ関数生成部214がプロキシ関数を律則すると決定する方法と同じように、如何にしてプロキシ関数を一般化すべきかを決定してよい。
幾つかの実施形態において、プロキシ関数生成部214は、クラス内の1つのプロキシ関数を一般化し、クラス内の他のプロキシ関数を律則してよい。どのプロキシ関数をプロキシ関数生成部214が律則若しくは一般化するのか、又は如何にしてプロキシ関数生成部214がプロキシ関数を律則若しくは一般化するのかは、本願で論じられているような例に制限されない。
1以上のプロキシ関数を更にリファインした後、更にリファインされた1以上のプロキシ関数を有するプロキシクラスは、本願で記載されるような解析のために先と同じくプロキシ解析部230へ送信されるプロキシソースコード220を生成するようソースコード202に加えられる。
プロキシ解析部230によって解析されるプロキシソースコード220を生成することによって、システム200は、ソースコード202のプログラミング言語を用いて、適切な検証カバレッジを提供するテストケースを生成することができる。加えて、プロキシ解析部230によって解析されるプロキシソースコード220を生成することによって、システム200は、偽陽性エラーを低減又は除去することができる。更に、ソースコード202のプログラミング言語を用いてプロキシソースコード220を生成することによって、プロキシ解析部230に加えて他のソフトウェア解析ツールが、プロキシソースコード220を用いてテストケースを生成することができる。代替的に、又は追加的に、プロキシソースコード220によってソースコード202に適用される条件は、同様の結果を達成するようソースコード202に適用され得るインラインのコンパイルできないコメントと比較して、容易に理解され得る。
変更、付加、又は省略は、本開示の適用範囲から逸脱することなしにシステム200に対してなされてよい。例えば、システム200は、ソースコード情報206を受け取らないよう構成されてよい。代替的に、又は追加的に、システム200は、カバレッジチェッカー232の状態をユーザに報告するよう構成されてよい。そのような及び他の実施形態において、ユーザは、カバレッジチェッカー232の閾値を調整することが可能であってよい。
図4は、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェア検証方法400の例のフローチャートである。方法400は、幾つかの実施形態において、図2のソフトウェア検証システム200のような検証システムによって、実施されてよい。個別のブロックとして表されているが、様々なブロックは、所望の実施に依存して、更なるブロックに分けられても、より少ないブロックへとまとめられても、又は削除されてもよい。
方法400はブロック402で開始してよく、プロキシソースコードが生成されてよい。プロキシソースコードは、テストケースが生成され得るプログラムのソースコードに基づき、生成されてよい。プロキシソースコードを生成することは、ソースコード内の夫々のクラスについてプロキシクラスを生成することと、クラスの夫々の中の1以上の関数についてプロキシ関数を生成することと含んでよい。幾つかの実施形態において、プロキシ関数のうちの1以上は、ソースコードの潜在的な実行パスを制限し得る1以上の条件を含めるようリファインされてよい。1以上のプロキシ関数は、ユーザ入力、ソースコード情報、又は何らかの他のアスペクトに基づきリファインされてよい。例えば、幾つかの実施形態において、プロキシ関数は、関数のフローを制御する1以上の変数をパラメータとして含めるようリファインされてよい。他の例として、プロキシ関数は、関数の具象的実行の間に使用される値に関連する値を割り当てられる変数をプロキシ関数の本体において含めるようリファインされてよい。幾つかの実施形態において、プロキシ関数はリファインされなくてよい。
ブロック404で、プロキシソースコードが解析されてよい。動的解析、静的解析又は記号解析のような、多種多様なソースコード解析技術が実施されてよい。プロキシソースコードは、ソースコードの機能を検証するために使用され得るテストケースを生成するよう解析されてよい。
ブロック406で、ソースコードテストが生成されてよい。ソースコードテストは、プロキシソースコードの解析に基づき生成されてよく、ソースコードのバリデーションを可能にするようソースコードを実行するために使用される具象変数を含んでよい。ソースコードテストを生成した後、ソースコードテストのカバレッジが決定されてよい。ソースコードテストのカバレッジは、ソースコードテストの使用を通じて実行されるソースコード又はプロキシソースコードの行数を含んでよい。
ブロック408で、ソースコードテストのカバレッジが十分であるかどうかが決定されてよい。ソースコードテストのカバレッジの妥当性は1以上の変数に依存してよい。幾つかの実施形態において、カバレッジの妥当性は、ユーザ入力又は予め定義されたカバレッジの量に依存してよい。プロキシソースコードのカバレッジが十分である場合に、方法400は終了してよい。プロキシソースコードのカバレッジが十分でない場合に、方法400はブロック410へ進んでよい。
ブロック410で、プロキシソースコードが律則されるべきかどうかが決定されてよい。プロキシソースコードは、プロキシソースコードのカバレッジが不十分である場合に律則されてよい。例えば、カバレッジは、ソースコードの特定の割合が解析されないか、又はソースコードの特定の部分が解析されない場合に、不十分であると見なされてよい。幾つかの実施形態において、プロキシソースコードの解析は、解析が不完全である場合に不十分であり得る。例えば、幾つかの実施形態において、ソフトウェア解析器は、ソフトウェア解析器が解析の複雑さによりタイムアウトするか、又はソフトウェア解析器が解析の終了前に処理リソースを使い果たすために、ソフトウェアを全て解析することができないことがある。
プロキシソースコードが律則されるべきである場合に、方法400はブロック412に進んでよい。プロキシソースコードが律則されるべきでない場合に、方法400はブロック416へ進んでよい。
ブロック412で、プロキシソースコードは律則されてよい。ソースコードを律則することは、1以上のプロキシ関数のパラメータを律則することを含んでよい。プロキシ関数のパラメータは、プロキシ関数からパラメータを除いて、そのパラメータに関連する変数プロキシ関数の本体に置くことによって、律則されてよい。代替的に、又は追加的に、プロキシ関数のパラメータは、パラメータを律則するソースコードをプロキシ関数の本体に含めることによって、律則されてよい。パラメータがソースコードのプログラミング言語に組み込まれるタイプ、とりわけ、例えば、int、char、floatである場合に、パラメータは、プロキシ関数の本体においてパラメータと関連し得る値を制限することによって、律則されてよい。パラメータがプロキシ関数の本体において単一の値に拘束される場合に、パラメータは除去されてよい。パラメータがソースコードのプログラミング言語に組み込まれないタイプ、例えば、クラスのメンバーである場合に、コンストラクタがプロキシ条件の本体に加えられてよく、パラメータはプロキシ関数から除去されてよい。本願で論じられている以外の他の方法が、プロキシ関数を律則するために使用されてよい。
ブロック414で、プロキシソースコードが一般化されるべきであるかどうかが決定されてよい。プロキシソースコードは、プロキシソースコードのカバレッジが不十分である場合に一般化されてよい。例えば、カバレッジは、ソースコードの特定の割合が解析され得ないか、又はソースコードの特定の部分が、プロキシソースコードがソースコードのそれらの部分を実行できないほど限られた解析を有するために解析され得ない場合に、不十分であると見なされることがある。本質的に、プロキシソースコードは、ソースコードの過度に限られた解析を有し、それにより、ソースコードの解析は極めて狭い。
プロキシソースコードが一般化されるべきである場合に、方法400はブロック416に進んでよい。プロキシソースコードが一般化されるべきでない場合に、方法400はブロック404へ戻って、律則されたプロキシソースコードが解析されてよく、方法400は続いてよい。
ブロック416で、プロキシソースコードは、プロキシ関数を一般化することによって一般化されてよい。プロキシ関数は、プロキシ関数において変数を選択して、プロキシ関数における変数と同じタイプであるパラメータをプロキシ関数に加えることによって、一般化されてよい。プロキシ関数の本体は、パラメータの値がプロキシ関数本体における変数に割り当てられ得るようにリファインされてよい。
ブロック416の後にはブロック404が続いてよく、一般化及び/又は律則されたソースコードが解析されてよく、方法400は続いてよい。
方法400は、プロキシソースコードをインクリメントに変更することが、解析されるべきソースコードの範囲を調整することを可能にする。このように、ソースコードの選択された部分は、ソースコードの他の部分を解析されないままとしながら解析されてよい。加えて、ソースコードの選択された範囲は、ソースコードの全体範囲を解析せずに解析されてよい。ソースコードの選択された部分又は範囲を解析する能力は、解析時間及び使用される計算リソースを減らすことができるので有利であり得る。特に、ソースコードの選択された部分又は範囲を解析する能力は、記号解析を実行する場合に有利であり得る。記号解析は、ソースコードにおける変数を記号変数により置換して、適切な解析を実行することを含む。記号解析は、他のソフトウェア解析技術よりも徹底的であるが、時間がかかり且つソースコードの幾つかのタイプに対して動作不可能であり得る。例えば、変数が定義されたタイプを有さない場合のような、ソースコードが大きいか又は明確な範囲を有さない場合に、記号解析は動作不可能であり得る。コンパイル可能な言語においてソースコードに加えることによってソースコードの範囲を狭める能力は、ソースコードが記号解析を用いて解析されるか又はより容易に解析されることを可能にする。
当業者には明らかに、本願で開示されるこのような及び他の処理及び方法のために、処理及び方法において実行される機能は異なる順序で実施されてよい。更に、概説されているステップ及び動作は単に例として提供されており、ステップ及び動作の幾つかは、開示されている実施形態の本質から逸脱することなしに、任意であっても、より少ないステップ及び動作にまとめられても、又は更なるステップ及び動作に拡張されてもよい。
方法400の例は次のとおりである。ブロック402で、プロキシ関数を含むプロキシソースコードが生成されてよい。

Void create_request_message(Message&p0){
obj_->create_request_message(p0);
}

上記の擬似コードは、プロキシ関数を表してよい。
ブロック404で、プロキシソースコードは解析されてよく、ブロック406で、プロキシソースコードのカバレッジは不十分であると見なされてよい。ブロック410で、プロキシソースコードを律則すると決定されてよい。ブロック412で、プロキシソースコードは、プロキシ関数を律則することによって律則されてよい。特に、プロキシ関数は、パラメータp0を含むコンストラクタを加えることによって律則されてよい。

Void create_request_message(EthernetMessage*p0){
Message msg(sizeof(EthernetMessage),p0);
obj_->create_request_message(msg);
}

上記の擬似コードは、律則された後のプロキシテスト関数を表してよい。
ブロック414で、プロキシソースコードを一般化しないと決定されてよい。ブロック404で、プロキシソースコードは解析されてよく、ブロック406で、プロキシソースコードのカバレッジは不十分であると見なされてよい。ブロック410で、プロキシソースコードを律則すると決定されてよい。ブロック412で、プロキシソースコードは、プロキシ関数を律則することによって律則されてよい。特に、プロキシ関数は、変数payloadを加えることによって律則されてよい。

Void create_request_message(){
EthernetMessage*payload=new EthernetMessage;
Message msg(sizeof(EthernetMessage),payload);
obj_->create_request_message(msg);
}

上記の擬似コードは、律則された後のプロキシテスト関数を表してよい。
ブロック414で、プロキシソースコードを一般化しないと決定されてよい。ブロック404で、プロキシソースコードは解析されてよく、ブロック406で、プロキシソースコードのカバレッジは不十分であると見なされてよい。ブロック410で、プロキシソースコードを律則しないと決定されてよい。ブロック416で、プロキシソースコードは、プロキシ関数を一般化することによって一般化されてよい。特に、プロキシ関数は、プロキシ関数にパラメータ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);
}

上記の擬似コードは、一般化後のプロキシテスト関数を表してよい。
ブロック404で、プロキシソースコードは解析されてよく、ブロック406で、プロキシソースコードのカバレッジは不十分であると見なされてよい。ブロック408で、ソースコードテストが、プロキシソースコードをテストするために生成されてよい。
図5は、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェア検証方法500の例のフローチャートである。方法500は、幾つかの実施形態において、図2のソフトウェア検証システム200のような検証システムによって、実施されてよい。個別のブロックとして表されているが、様々なブロックは、所望の実施に依存して、更なるブロックに分けられても、より少ないブロックへとまとめられても、又は削除されてもよい。
方法500はブロック502で開始してよく、プロキシソースコードが生成されてよい。プロキシソースコードは、ソフトウェアプログラムのソースコードに基づき生成されてよい。プロキシソースコードを生成することは、ソースコード内の夫々のクラスについてプロキシクラスを生成することと、クラスの夫々の中の1以上の関数についてプロキシ関数を生成することと含んでよい。幾つかの実施形態において、プロキシ関数のうちの1以上は、1以上の条件を含めるようリファインされてよい。1以上のプロキシ関数は、ユーザ入力、ソースコード情報、又は何らかの他の事項に基づきリファインされてよい。例えば、幾つかの実施形態において、関数に基づくプロキシ関数は、関数において決定されるエラーの決定に影響を与えるソフトウェアプログラムからの条件を含めるようリファインされてよい。
ブロック504で、プロキシソースコードが解析されてよい。特に、プロキシ関数の夫々が個別に解析されてよく、これは、夫々のプロキシ関数内で呼び出され且つそれと関連する関数の解析を含んでよい。プロキシソースコードを解析するために、動的解析、静的解析又は記号解析のような、多種多様なソースコード解析技術が実施されてよい。
ブロック506で、解析レポートが、プロキシソースコードの解析に関して生成されてよい。解析レポートは、プロキシソースコード及び/又はプロキシソースコードが基づくソースコードの特性を含んでよい。特に、解析レポートは、個々の関数におけるエラーのような、プロキシソースコードにおける個々のプロキシ関数に関連するエラーを示してよい。
幾つかの実施形態において、個々の関数内のエラーは、偽陽性エラーであると決定されてよい。上述されたような偽陽性エラーが、関数が解析される場合にエラーであるように見えるエラーであってよい。なお、偽陽性エラーは、ソースコード内の個々の関数のみならずソースコード全体との関連で、エラーでないことがある。二次的な解析が、偽陽性エラーを特定するようソースコードに基づき実行されてよい。
ブロック508で、偽陽性エラーが特定されたかどうかが決定されてよい。偽陽性エラーが特定された場合に、方法500はブロック510へ進んでよい。偽陽性エラーが特定されてない場合に、方法500はブロック512へ進んでよい。
ブロック510で、プロキシソースコードは律則されてよい。ソースコードを律則することは、偽陽性エラーを除去する1以上の条件を含めるよう、偽陽性エラーを含むプロキシ関数をリファインすることを含んでよい。特定された偽陽性エラーを除去し得る条件は、エラーが偽陽性エラーであると決定する場合にプロキシソースコード内で特定されていてよい。条件は、偽陽性エラーを除去するよう、その偽陽性エラーがあったプロキシ関数に加えられてよい。
ブロック512で、既知のエラーが見つけられているかどうかが決定されてよい。既知のエラーは、ブロック504でのプロキシソースコードの解析以外の方法によってソースコードにおいて特定されるエラーと関連付けられてよい。例えば、既知のエラーは、ソースコードの他のテストの間に又はソースコードの使用の間に決定されてよい。既知のエラーは、解析レポートにおいて見つけられるエラーと比較されてよい。既知のエラーが解析レポートにおけるエラーと一致する場合に、既知のエラーは、プロキシソースコードの解析によって見つけられていてよい。既知のエラーが見つけられている場合を決定することは、ソースコード内の条件に基づきプロキシソースコードの適切なカバレッジを決定するのに役立つことができる。既知のエラーが見つけられない場合に、プロキシソースコードのプロキシ関数における条件は、プロキシソースコード内の望まれるよりも少ないパスが解析されるようにプロキシソースコードのカバレッジを律則していることがある。望まれるよりも少ないパスが解析されている場合に、プロキシソースコードは、プロキシソースコードのカバレッジを広げるよう一般化されてよい。既知のエラーが見つけられた場合に、方法500は終了してよい。既知のエラーが見つけられなかった場合に、方法500はブロック514へ進んでよい。
ステップ514で、プロキシソースコードは、プロキシソースコードにおけるプロキシ関数を一般化することによって一般化されてよい。プロキシ関数は、上述されたように一般化されてよい。ブロック514の後にはブロック504が続いてよく、一般化されたプロキシソースコードが再解析されてよく、方法500は続いてよい。
図6は、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェア検証方法600の他の例のフローチャートである。方法600は、幾つかの実施形態において、図2のソフトウェア検証システム200のような検証システムによって、実施されてよい。個別のブロックとして表されているが、様々なブロックは、所望の実施に依存して、更なるブロックに分けられても、より少ないブロックへとまとめられても、又は削除されてもよい。
方法600はブロック602で開始してよく、ソフトウェアプログラムの少なくとも一部分が受け取られてよい。ソフトウェアプログラムのその部分は、クラス内のソフトウェア関数を含んでよい。
ブロック604で、プロキシクラスがクラスに基づき生成されてよい。プロキシクラスは、ソフトウェア関数への呼び出しを含むプロキシ関数を含んでよい。
ブロック606で、プロキシ関数は解析されてよい。プロキシ関数の解析は、プロキシ関数によって使用されるプロキシ条件に基づきソフトウェア関数を解析することを含んでよい。プロキシ条件は、ソフトウェアプログラムに基づいてよく、条件をソフトウェア関数におけるパラメータ及び/又は変数に適用するよう構成されてよい。幾つかの実施形態において、プロキシ条件は、プロキシ関数のプロキシパラメータとして、又はプロキシ関数内で定義される変数としてプロキシ関数によって使用されてよい。
幾つかの実施形態において、プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析されてよい。幾つかの実施形態において、プロキシ条件は生成されてよく、又はユーザから受け取られてよい。
幾つかの実施形態において、プロキシ関数の解析は、ソフトウェア関数の選択された挙動の解析をもたらし、解析のために選択されるソフトウェア関数の挙動は、ソフトウェア関数の潜在的な実行パスを制限するプロキシ条件に基づいてよい。そのような及び他の実施形態において、方法600は、選択された挙動の解析に基づきソフトウェア関数の選択された挙動を検証するためのテストケースを決定することを更に含んでよい。
幾つかの実施形態において、プロキシ条件は、プロキシ関数においてパラメータとして使用されてよく、ソフトウェア関数からの変数に基づいてよい。このとき、変数は、ソフトウェア関数の制御フローを決定する。そのような及び他の実施形態において、方法600は、ソフトウェア関数の選択された挙動のカバレッジを決定することを更に含んでよい。ソフトウェア関数の選択された挙動のカバレッジは、解析されたソフトウェア関数の行及びブランチの数に基づいてよい。ソフトウェア関数の選択された挙動のカバレッジが閾値に満たない場合に、方法600は、プロキシ関数を再解析することを更に含んでよい。プロキシ関数の再解析は、ソフトウェア関数の選択された第2の挙動の解析を生じさせてよい。ソフトウェア関数の第2の挙動は、ソフトウェア関数からの変数の値を拘束する第2のプロキシ条件に基づき、解析のために選択されてよい。
幾つかの実施形態において、プロキシ条件は、プロキシ関数における変数として使用され、ソフトウェア関数の以前の実行に関連する値を割り当てられてよい。そのような及び他の実施形態において、方法600は、ソフトウェア関数の選択された挙動のカバレッジを決定することを更に含んでよい。ソフトウェア関数の選択された挙動のカバレッジは、解析されたソフトウェア関数の行又はブランチの数に基づいてよい。ソフトウェア関数の選択された挙動のカバレッジが閾値に満たない場合に、方法600は、プロキシ関数を再解析することを更に含んでよい。プロキシ関数の再解析は、ソフトウェア関数の選択された第2の挙動の解析を生じさせてよい。解析のために選択されるソフトウェア関数の第2の挙動は、変数に基づくパラメータをプロキシ関数において含める第2のプロキシ条件に基づいてよい。
幾つかの実施形態において、プロキシ条件は、ソフトウェア関数の解析に基づきソフトウェア関数に置いて決定されるエラーの決定に影響を及ぼすソフトウェアプログラムからの条件を含むよう構成されてよい。そのような及び他の実施形態において、既知のエラーが決定されない場合に、方法600は、プロキシ関数を再解析することを更に含んでよい。プロキシ関数の再解析は、第2のプロキシ条件に基づいてよい。
図7は、本願で記載される少なくとも幾つかの実施形態に従って配置されるソフトウェア検証方法700の例のフローチャートである。方法700は、幾つかの実施形態において、図2のソフトウェア検証システム200のような検証システムによって、実施されてよい。個別のブロックとして表されているが、様々なブロックは、所望の実施に依存して、更なるブロックに分けられても、より少ないブロックへとまとめられても、又は削除されてもよい。
方法700はブロック702で開始してよく、ソフトウェアプログラムの少なくとも一部分が受け取られてよい。ソフトウェアプログラムのその部分は、クラス内のソフトウェア関数を含んでよい。
ブロック704で、プロキシクラスがクラスに基づき生成されてよい。プロキシクラスは、ソフトウェア関数への呼び出しを含むプロキシ関数を含んでよい。
ブロック706で、プロキシ関数は解析されてよい。プロキシ関数の解析は、ソフトウェアプログラムの選択された挙動の解析をもたらしてよい。幾つかの実施形態において、解析のために選択されるソフトウェア関数の挙動は、ソフトウェア関数の潜在的な実行パスを制限し得る、プロキシ関数に関連する第1のプロキシ条件に基づいてよい。
ブロック708で、ソフトウェア関数の選択された挙動のカバレッジが決定されてよい。ソフトウェア関数の選択された挙動のカバレッジは、解析されたソフトウェア関数の行及びブランチの数に基づいてよい。ソフトウェア関数の選択された挙動のカバレッジが閾値に満たない場合に、方法700はブロック710に進んでよい。ソフトウェア関数の選択された挙動のカバレッジが閾値よりも大きい場合に、方法はブロック712に進んでよい。
ブロック710で、プロキシ関数は再解析されてよい。プロキシ関数の再解析は、ソフトウェア関数の選択された第2の挙動の解析を生じさせてよい。ソフトウェア関数の第2の挙動は、ソフトウェア関数の実行パスを制限する、プロキシ関数に関連する第2のプロキシ条件に基づき、解析のために選択されてよい。幾つかの実施形態において、プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析及び再解析されてよい。
幾つかの実施形態において、第1にプロキシ条件は、プロキシ関数のプロキシパラメータに基づいてよく、第2のプロキシ条件は、プロキシパラメータに関連する、プロキシ関数内で定義されるプロキシ変数に基づいてよい。代替的に、又は追加的に、第1のプロキシ条件は、プロキシ関数内で定義されるプロキシ変数に基づいてよく、第2のプロキシ条件は、プロキシ変数に関連するプロキシ関数のプロキシパラメータに基づいてよい。
ブロック712で、ソフトウェア関数の選択された挙動を検証するためのテストケースが、選択された挙動の解析に基づき決定されてよい。
本願で記載される実施形態は、以下でより詳細に論じられるように、様々なコンピュータハードウェア又はソフトウェアを含む特別目的又は汎用のコンピュータの使用を含んでよい。
本願で記載される実施形態は、コンピュータにより実行可能な命令又はデータ構造を搬送又は記憶するコンピュータ可読媒体を用いて実施されてよい。そのようなコンピュータ可読媒体は、汎用又は特別目的のコンピュータによってアクセスされ得るあらゆる利用可能な媒体であってよい。一例として、制限なしに、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROM若しくは他の光学ディスクストレージ、磁気ディスクストレージ若しくは他の磁気ストレージデバイス、又はコンピュータにより実行可能な命令若しくはデータ構造の形で所望のプログラムコードを搬送若しくは記憶するために使用されてよく且つ汎用若しくは特別目的のコンピュータによってアクセスされてよいあらゆる他の記憶媒体を含む有形なコンピュータ可読記憶媒体を有してよい。そのような記憶媒体の組み合わせも、コンピュータ可読媒体の適用範囲内に含まれてよい。
コンピュータにより実行可能な命令は、例えば、汎用のコンピュータ、特別目的のコンピュータ、又は特別目的の処理装置に特定の機能又は機能のグループを実行させる命令及びデータを有する。対象は、構造的な特徴及び/又は方法論的な動作に特有の言語において記載されてきたが、添付の特許請求の範囲において定義される対象は、必ずしも、上記の具体的な特徴又は動作に制限されないことが理解されるべきである。むしろ、上記の具体的な特徴及び動作は、特許請求の範囲を実施する例となる形態として開示される。
本願で使用されるように、語“モジュール”又は“コンポーネント”は、コンピュータシステムで実行されるソフトウェアオブジェクト又はルーチンを指してよい。本願で記載される異なるコンポーネント、モジュール、エンジン及びサービスは、(例えば、別個のスレッドとして)コンピュータシステムで実行されるオブジェクト又は処理として実施されてよい。本願で記載されるシステム及び方法は、望ましくはソフトウェアにおいて実施され、一方、ハードウェア又はソフトウェア及びハードウェアの組み合わせにおける実施も可能であり考えられている。本明細書において、“コンピュータエンティティ”は、本願で先に定義されているようなあらゆるコンピュータシステム、又はコンピュータシステムで実行されるあらゆるモジュール若しくはモジュールの組み合わせであってよい。
本願で挙げられている全ての例及び条件付き言語は、読む者が本発明及び当該技術の進歩に対して本発明によって貢献される概念を理解するのを助ける教育的な目的を対象とし、そのような具体的に挙げられている例及び条件に制限されないよう解釈されるべきである。本発明の実施形態について詳細に記載してきたが、当然に、様々な変更、置換及び代替が、本発明の精神及び適用範囲から逸脱することなしにそれらに対してなされてよい。
上記の実施形態に加えて、以下の付記を開示する。
(付記1)
クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取り、
前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成し、
前記プロキシ関数によって使用されるプロキシ条件に基づき前記ソフトウェア関数を解析することを含め、前記プロキシ関数を解析し、
前記プロキシ条件は、前記ソフトウェアプログラムに基づき、前記ソフトウェア関数におけるパラメータ及び/又は変数に条件を適用する構成される、
ソフトウェア検証方法。
(付記2)
前記プロキシ条件は、前記プロキシ関数のプロキシパラメータとして、又は前記プロキシ関数内で定義される変数として、前記プロキシ関数によって使用される、
付記1に記載のソフトウェア検証方法。
(付記3)
前記プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析される、
付記1に記載のソフトウェア検証方法。
(付記4)
前記プロキシ条件は生成されるか、又はユーザから受け取られる、
付記1に記載のソフトウェア検証方法。
(付記5)
前記プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の挙動は、前記ソフトウェア関数の潜在的な実行パスを制限する前記プロキシ条件に基づく、
付記1に記載のソフトウェア検証方法。
(付記6)
更に、前記選択された挙動の解析に基づき、前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する、
付記5に記載のソフトウェア検証方法。
(付記7)
前記プロキシ条件は、前記ソフトウェア関数からの変数に基づく前記プロキシ関数におけるパラメータとして使用され、前記変数は、前記ソフトウェア関数の制御フローを決定する、
付記5に記載のソフトウェア検証方法。
(付記8)
更に、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、前記ソフトウェア関数の前記選択された挙動の前記カバレッジは、解析された前記ソフトウェア関数の複数のライン又はブランチに基づき、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第2の挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の前記第2の挙動は、前記ソフトウェア関数からの変数の値を拘束する第2のプロキシ条件に基づく、
付記7に記載のソフトウェア検証方法。
(付記9)
前記プロキシ条件は、前記プロキシ関数における変数として使用され、前記ソフトウェア関数の以前の実行と関連付けられた値を割り当てられる、
付記5に記載のソフトウェア検証方法。
(付記10)
更に、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、前記ソフトウェア関数の前記選択された挙動の前記カバレッジは、解析された前記ソフトウェア関数の複数のライン又はブランチに基づき、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第2の挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の前記第2の挙動は、前記変数に基づく前記プロキシ関数におけるパラメータを含む第2のプロキシ条件に基づく、
付記9に記載のソフトウェア検証方法。
(付記11)
前記プロキシ条件は、前記ソフトウェア関数の解析に基づき前記ソフトウェア関数において決定されるエラーの決定に作用する前記ソフトウェアプログラムからの条件を含むよう構成される、
付記1に記載のソフトウェア検証方法。
(付記12)
既知のエラーが決定されない場合に、更に前記プロキシ関数を再解析し、該プロキシ関数の再解析は第2のプロキシ条件に基づく、
付記11に記載のソフトウェア検証方法。
(付記13)
システムにソフトウェア検証動作を実行させるためにコンピュータ可読媒体からのコンピュータ命令を実行するよう構成されるプロセッサであって、
前記ソフトウェア検証動作は、
クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取る動作と、
前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成する動作と、
前記プロキシ関数によって使用されるプロキシ条件に基づき前記ソフトウェア関数を解析することを含め、前記プロキシ関数を解析する動作と
を含み、
前記プロキシ条件は、前記ソフトウェアプログラムに基づき、前記ソフトウェア関数におけるパラメータ及び/又は変数に条件を適用する構成される、
プロセッサ。
(付記14)
前記プロキシ条件は、前記プロキシ関数のプロキシパラメータとして、又は前記プロキシ関数内で定義される変数として、前記プロキシ関数によって使用される、
付記13に記載のプロセッサ。
(付記15)
前記プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析される、
付記13に記載のプロセッサ。
(付記16)
前記プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、
解析のために選択される前記ソフトウェア関数の挙動は、前記ソフトウェア関数の潜在的な実行パスを制限する前記プロキシ条件に基づく、
付記13に記載のプロセッサ。
(付記17)
前記ソフトウェア検証動作は、前記選択された挙動の解析に基づき、前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する動作を更に含む、
付記16に記載のプロセッサ。
(付記18)
前記プロキシ条件は、前記ソフトウェア関数の解析に基づき前記ソフトウェア関数において決定されるエラーの決定に作用する前記ソフトウェアプログラムからの条件を含むよう構成される、
付記13に記載のプロセッサ。
(付記19)
クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取り、
前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成し、
前記プロキシ関数を解析し、該プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、解析のために選択される前記ソフトウェア関数の前記挙動は、前記ソフトウェア関数の実行パスを制限する前記プロキシ関数に関連付けられた第1のプロキシ条件に基づき、
解析される前記ソフトウェア関数の複数のライン又はブランチに基づく、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第2の挙動の解析をもたらし、解析のために選択される前記ソフトウェア関数の前記第2の挙動は、前記ソフトウェア関数の実行パスを制限する前記プロキシ関数に関連付けられた第2のプロキシ条件に基づき、
前記ソフトウェア関数の前記選択された挙動の前記カバレッジが前記閾値より大きい場合に、前記選択された挙動の解析に基づき前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する、
ソフトウェア検証方法。
(付記20)
前記第1のプロキシ条件は、前記プロキシ関数のプロキシパラメータに基づき、前記第2のプロキシ条件は、前記プロキシパラメータに関連付けられた前記プロキシ関数内で定義されるプロキシ変数に基づく、
付記19に記載のソフトウェア検証方法。
(付記21)
前記第1のプロキシ条件は、前記プロキシ関数内で定義されるプロキシ変数に基づき、前記第2のプロキシ変数は、前記プロキシ変数に関連付けられた前記プロキシ関数のプロキシパラメータに基づく、
付記19に記載のソフトウェア検証方法。
110 関数
112,122 パラメータ
120 プロキシ関数
200 ソフトウェア検証システム
202 ソースコード
204 ユーザ入力
206 ソースコード情報
210 プロキシ生成部
212 プロキシクラス生成部
214 プロキシ関数生成部
220 プロキシソースコード
230 プロキシ解析部
232 カバレッジチェッカー
234 偽陽性エラーチェッカー
240 テストケース
250 レポート
300 クラス
320 プロキシクラス
400,500,600,700 ソフトウェア検証方法

Claims (21)

  1. クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取り、
    前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成し、
    前記プロキシ関数によって使用されるプロキシ条件に基づき前記ソフトウェア関数を解析することを含め、前記プロキシ関数を解析し、
    前記プロキシ条件は、前記ソフトウェアプログラムに基づき、前記ソフトウェア関数におけるパラメータ及び/又は変数に条件を適用する構成される、
    ソフトウェア検証方法。
  2. 前記プロキシ条件は、前記プロキシ関数のプロキシパラメータとして、又は前記プロキシ関数内で定義される変数として、前記プロキシ関数によって使用される、
    請求項1に記載のソフトウェア検証方法。
  3. 前記プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析される、
    請求項1に記載のソフトウェア検証方法。
  4. 前記プロキシ条件は生成されるか、又はユーザから受け取られる、
    請求項1に記載のソフトウェア検証方法。
  5. 前記プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、
    解析のために選択される前記ソフトウェア関数の挙動は、前記ソフトウェア関数の潜在的な実行パスを制限する前記プロキシ条件に基づく、
    請求項1に記載のソフトウェア検証方法。
  6. 更に、前記選択された挙動の解析に基づき、前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する、
    請求項5に記載のソフトウェア検証方法。
  7. 前記プロキシ条件は、前記ソフトウェア関数からの変数に基づく前記プロキシ関数におけるパラメータとして使用され、前記変数は、前記ソフトウェア関数の制御フローを決定する、
    請求項5に記載のソフトウェア検証方法。
  8. 更に、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、前記ソフトウェア関数の前記選択された挙動の前記カバレッジは、解析された前記ソフトウェア関数の複数のライン又はブランチに基づき、
    前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第2の挙動の解析をもたらし、
    解析のために選択される前記ソフトウェア関数の前記第2の挙動は、前記ソフトウェア関数からの変数の値を拘束する第2のプロキシ条件に基づく、
    請求項7に記載のソフトウェア検証方法。
  9. 前記プロキシ条件は、前記プロキシ関数における変数として使用され、前記ソフトウェア関数の以前の実行と関連付けられた値を割り当てられる、
    請求項5に記載のソフトウェア検証方法。
  10. 更に、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、前記ソフトウェア関数の前記選択された挙動の前記カバレッジは、解析された前記ソフトウェア関数の複数のライン又はブランチに基づき、
    前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第2の挙動の解析をもたらし、
    解析のために選択される前記ソフトウェア関数の前記第2の挙動は、前記変数に基づく前記プロキシ関数におけるパラメータを含む第2のプロキシ条件に基づく、
    請求項9に記載のソフトウェア検証方法。
  11. 前記プロキシ条件は、前記ソフトウェア関数の解析に基づき前記ソフトウェア関数において決定されるエラーの決定に作用する前記ソフトウェアプログラムからの条件を含むよう構成される、
    請求項1に記載のソフトウェア検証方法。
  12. 既知のエラーが決定されない場合に、更に前記プロキシ関数を再解析し、該プロキシ関数の再解析は第2のプロキシ条件に基づく、
    請求項11に記載のソフトウェア検証方法。
  13. システムにソフトウェア検証動作を実行させるためにコンピュータ可読媒体からのコンピュータ命令を実行するよう構成されるプロセッサであって、
    前記ソフトウェア検証動作は、
    クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取る動作と、
    前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成する動作と、
    前記プロキシ関数によって使用されるプロキシ条件に基づき前記ソフトウェア関数を解析することを含め、前記プロキシ関数を解析する動作と
    を含み、
    前記プロキシ条件は、前記ソフトウェアプログラムに基づき、前記ソフトウェア関数におけるパラメータ及び/又は変数に条件を適用する構成される、
    プロセッサ。
  14. 前記プロキシ条件は、前記プロキシ関数のプロキシパラメータとして、又は前記プロキシ関数内で定義される変数として、前記プロキシ関数によって使用される、
    請求項13に記載のプロセッサ。
  15. 前記プロキシ関数は、静的ソフトウェア解析、動的ソフトウェア解析、又は記号解析を用いて解析される、
    請求項13に記載のプロセッサ。
  16. 前記プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、
    解析のために選択される前記ソフトウェア関数の挙動は、前記ソフトウェア関数の潜在的な実行パスを制限する前記プロキシ条件に基づく、
    請求項13に記載のプロセッサ。
  17. 前記ソフトウェア検証動作は、前記選択された挙動の解析に基づき、前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する動作を更に含む、
    請求項16に記載のプロセッサ。
  18. 前記プロキシ条件は、前記ソフトウェア関数の解析に基づき前記ソフトウェア関数において決定されるエラーの決定に作用する前記ソフトウェアプログラムからの条件を含むよう構成される、
    請求項13に記載のプロセッサ。
  19. クラス内のソフトウェア関数を含むソフトウェアプログラムの少なくとも一部分を受け取り、
    前記ソフトウェア関数への呼び出しを含むプロキシ関数を含むプロキシクラスを前記クラスに基づき生成し、
    前記プロキシ関数を解析し、該プロキシ関数の解析は、前記ソフトウェア関数の選択された挙動の解析をもたらし、解析のために選択される前記ソフトウェア関数の前記挙動は、前記ソフトウェア関数の実行パスを制限する前記プロキシ関数に関連付けられた第1のプロキシ条件に基づき、
    解析される前記ソフトウェア関数の複数のライン又はブランチに基づく、前記ソフトウェア関数の前記選択された挙動のカバレッジを決定し、
    前記ソフトウェア関数の前記選択された挙動の前記カバレッジが閾値に満たない場合に、前記プロキシ関数を再解析し、該プロキシ関数の再解析は、前記ソフトウェア関数の選択された第2の挙動の解析をもたらし、解析のために選択される前記ソフトウェア関数の前記第2の挙動は、前記ソフトウェア関数の実行パスを制限する前記プロキシ関数に関連付けられた第2のプロキシ条件に基づき、
    前記ソフトウェア関数の前記選択された挙動の前記カバレッジが前記閾値より大きい場合に、前記選択された挙動の解析に基づき前記ソフトウェア関数の前記選択された挙動を検証するためのテストケースを決定する、
    ソフトウェア検証方法。
  20. 前記第1のプロキシ条件は、前記プロキシ関数のプロキシパラメータに基づき、前記第2のプロキシ条件は、前記プロキシパラメータに関連付けられた前記プロキシ関数内で定義されるプロキシ変数に基づく、
    請求項19に記載のソフトウェア検証方法。
  21. 前記第1のプロキシ条件は、前記プロキシ関数内で定義されるプロキシ変数に基づき、前記第2のプロキシ変数は、前記プロキシ変数に関連付けられた前記プロキシ関数のプロキシパラメータに基づく、
    請求項19に記載のソフトウェア検証方法。
JP2014050446A 2013-03-14 2014-03-13 ソフトウェア検証方法及びプロセッサ Active JP6264964B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/828,886 2013-03-14
US13/828,886 US9081892B2 (en) 2013-03-14 2013-03-14 Software verification

Publications (2)

Publication Number Publication Date
JP2014186727A true JP2014186727A (ja) 2014-10-02
JP6264964B2 JP6264964B2 (ja) 2018-01-24

Family

ID=51534661

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014050446A Active JP6264964B2 (ja) 2013-03-14 2014-03-13 ソフトウェア検証方法及びプロセッサ

Country Status (2)

Country Link
US (1) US9081892B2 (ja)
JP (1) JP6264964B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016115124A (ja) * 2014-12-15 2016-06-23 富士通株式会社 スタブ化方法、プログラム及び装置

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9069892B2 (en) 2013-05-10 2015-06-30 International Business Machines Corporation Reducing false-positive errors in a software change-impact analysis
US9336128B2 (en) * 2014-03-21 2016-05-10 Oracle International Corporation Method and system for code analysis using symbolic types
US9658938B2 (en) 2015-03-30 2017-05-23 Fujtsu Limited Iterative test generation based on data source analysis
US10353762B2 (en) * 2015-06-11 2019-07-16 Instana, Inc. Hierarchical fault determination in an application performance management system
US9619363B1 (en) * 2015-09-25 2017-04-11 International Business Machines Corporation Predicting software product quality
US9588873B1 (en) * 2015-09-28 2017-03-07 International Business Machines Corporation Using core files to develop diagnostic programs
US10241892B2 (en) * 2016-12-02 2019-03-26 International Business Machines Corporation Issuance of static analysis complaints
US20180217921A1 (en) * 2017-02-02 2018-08-02 Cognizant Technology Solutions India Pvt. Ltd. System and method for generating and executing automated test cases
US11288153B2 (en) 2020-06-18 2022-03-29 Bank Of America Corporation Self-healing computing device

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020133807A1 (en) * 2000-11-10 2002-09-19 International Business Machines Corporation Automation and isolation of software component testing
US20110167404A1 (en) * 2010-01-06 2011-07-07 Microsoft Corporation Creating inferred symbols from code usage
JP2012141741A (ja) * 2010-12-28 2012-07-26 Fujitsu Ltd 解析支援プログラム,解析支援装置および解析支援方法
JP2012181666A (ja) * 2011-03-01 2012-09-20 Nec Corp 情報処理装置、情報処理方法及び情報処理プログラム

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5390325A (en) * 1992-12-23 1995-02-14 Taligent, Inc. Automated testing system
US7797687B2 (en) 2005-08-04 2010-09-14 Microsoft Corporation Parameterized unit tests with behavioral purity axioms
US7587636B2 (en) 2005-08-04 2009-09-08 Microsoft Corporation Unit test generalization
US20070169015A1 (en) * 2005-12-07 2007-07-19 Sbc Knowledge Ventures, L.P. Web services development automation toolkit with test case driver and customized configuration file
US7681180B2 (en) 2007-06-06 2010-03-16 Microsoft Corporation Parameterized test driven development
US20090089759A1 (en) 2007-10-02 2009-04-02 Fujitsu Limited System and Method for Providing Symbolic Execution Engine for Validating Web Applications
US8359576B2 (en) 2008-11-14 2013-01-22 Fujitsu Limited Using symbolic execution to check global temporal requirements in an application
US20100223599A1 (en) 2009-02-27 2010-09-02 Fujitsu Limited Efficient symbolic execution of software using static analysis
US8504997B2 (en) 2009-03-19 2013-08-06 Fujitsu Limited Environment data refinement based on static analysis and symbolic execution
US8276021B2 (en) * 2009-12-18 2012-09-25 Microsoft Corporation Concurrency test effectiveness via mutation testing and dynamic lock elision
US8869113B2 (en) 2011-01-20 2014-10-21 Fujitsu Limited Software architecture for validating C++ programs using symbolic execution
US20120192162A1 (en) 2011-01-20 2012-07-26 Fujitsu Limited Optimizing Handlers for Application-Specific Operations for Validating C++ Programs Using Symbolic Execution
US8943487B2 (en) 2011-01-20 2015-01-27 Fujitsu Limited Optimizing libraries for validating C++ programs using symbolic execution
US8595701B2 (en) 2011-02-04 2013-11-26 Fujitsu Limited Symbolic execution and test generation for GPU programs
US20120284701A1 (en) * 2011-05-06 2012-11-08 Qualcomm Incorporated Efficient conditional flow control compilation
US8645924B2 (en) 2011-06-06 2014-02-04 Fujitsu Limited Lossless path reduction for efficient symbolic execution and automatic test generation
US9141354B2 (en) * 2012-04-23 2015-09-22 Ecole polytechnique fédérale de Lausanne (EPFL) Advantageous state merging during symbolic analysis
US9058427B2 (en) * 2012-07-16 2015-06-16 Fujitsu Limited Iterative generation of symbolic test drivers for object-oriented languages

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020133807A1 (en) * 2000-11-10 2002-09-19 International Business Machines Corporation Automation and isolation of software component testing
US20110167404A1 (en) * 2010-01-06 2011-07-07 Microsoft Corporation Creating inferred symbols from code usage
JP2012141741A (ja) * 2010-12-28 2012-07-26 Fujitsu Ltd 解析支援プログラム,解析支援装置および解析支援方法
JP2012181666A (ja) * 2011-03-01 2012-09-20 Nec Corp 情報処理装置、情報処理方法及び情報処理プログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016115124A (ja) * 2014-12-15 2016-06-23 富士通株式会社 スタブ化方法、プログラム及び装置

Also Published As

Publication number Publication date
US9081892B2 (en) 2015-07-14
JP6264964B2 (ja) 2018-01-24
US20140282419A1 (en) 2014-09-18

Similar Documents

Publication Publication Date Title
JP6264964B2 (ja) ソフトウェア検証方法及びプロセッサ
US10296447B2 (en) Automated software program repair
Costa et al. What's wrong with my benchmark results? Studying bad practices in JMH benchmarks
US10152406B2 (en) Software program repair
US20120110551A1 (en) Simulating black box test results using information from white box testing
US20140053134A1 (en) Software regression testing using symbolic execution
US9317405B2 (en) Test double generation
JP6976064B2 (ja) モデルチェックのためのデータ構造抽象化
CN112905447B (zh) 一种区块链虚拟机的测试方法和系统
Chalupa et al. Evaluation of program slicing in software verification
Kobayashi et al. Model-checking higher-order programs with recursive types
US9396095B2 (en) Software verification
Maida et al. Foundational response-time analysis as explainable evidence of timeliness
US11561888B2 (en) Initialization sequences for automatic software test generation
JP2014211864A (ja) 未完成ソフトウェアの分析
Xu et al. Semantic characterization of MapReduce workloads
Ghosh et al. A systematic review on program debugging techniques
JP6476777B2 (ja) テストコンテキストの生成
US11442845B2 (en) Systems and methods for automatic test generation
KR20120072133A (ko) 소프트웨어 정적 테스팅 장치 및 방법
Saadatmand et al. Testing of timing properties in real-time systems: Verifying clock constraints
García-Ferreira et al. Static analysis: a brief survey
Alonso et al. Handling non-linear operations in the value analysis of COSTA
Mangels et al. Ctgen-a unit test generator for c
Fink et al. Configurable benchmarks for C model checkers

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171004

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171010

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171115

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171128

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171211

R150 Certificate of patent or registration of utility model

Ref document number: 6264964

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150