JP6303749B2 - ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体 - Google Patents

ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体 Download PDF

Info

Publication number
JP6303749B2
JP6303749B2 JP2014082583A JP2014082583A JP6303749B2 JP 6303749 B2 JP6303749 B2 JP 6303749B2 JP 2014082583 A JP2014082583 A JP 2014082583A JP 2014082583 A JP2014082583 A JP 2014082583A JP 6303749 B2 JP6303749 B2 JP 6303749B2
Authority
JP
Japan
Prior art keywords
intermediate representation
instruction
argument
pattern
check
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.)
Active
Application number
JP2014082583A
Other languages
English (en)
Other versions
JP2014219969A (ja
Inventor
吉田 浩章
浩章 吉田
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 JP2014219969A publication Critical patent/JP2014219969A/ja
Application granted granted Critical
Publication of JP6303749B2 publication Critical patent/JP6303749B2/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
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • 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/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Description

本願で論じられる実施形態は、プログラム可能な記号的実行に基づく動的チェッカーに関する。
動的チェッカーは、2、3例を挙げると、アサーションの不成功又は違反、メモリエラー、及びゼロ除算エラーのようなソフトウェアプログラムにおける様々な種類のエラーの存在を確認するために使用される。動的チェッカー機能を備える一般的なツールの例には、幾つかのメモリアナライザ、プロファイラ、及びカバレッジアナライザがある。
典型的な実施において、動的チェッカーは、1又はそれ以上の具象な(concrete)入力を含むテストスイートを用いてソフトウェアプログラムを実行することによって、ソフトウェアプログラムを解析する。具象な入力は、ユーザによって手動で特定されて提供される。エラーを検出するために、ユーザは、エラーをトリガする具象な入力を提供する必要がある。然るに、ソフトウェアプログラムにおける十分に多くのパスを訓練し且つまれなバグを捕らえる高品質のテストスイートを保持することは困難である。
記号的実行は、ソフトウェアプログラムを動的に解析するための技術である。記号的実行は、実際のデータに代えてシンボリック値を入力値として使用し、プログラム変数の値をシンボリック表現として表す。結果として、記号的に実行されるソフトウェアプログラムによって計算される出力は、シンボリック入力の関数として表される。記号的実行により、ソフトウェアプログラム内の各パスは記号的に実行されてよい。
幾つかの動的チェッカーは記号的実行を実施し、記号的実行に基づく動的チェッカーと呼ばれることがある。従来の記号的実行に基づく動的チェッカーは、ヌルポインタエラー及び境界外(out-of-bound)アクセスエラーを含む単純なメモリエラーの検出のような、限られた欠陥検出を有する。更に、従来の記号的実行に基づく動的チェッカーにおける検出可能な欠陥のタイプは、検出される欠陥のタイプをユーザが容易に変更することができないようにハードコーディングされる。
本願で請求される対象は、如何なる欠点も解消し又は先に記載されたような環境においてのみ動作する実施形態に制限されない。むしろ、この背景は、本願で記載される幾つかの実施形態が実施され得る一例としての技術範囲を説明するためにのみ提供される。
本発明は、エラー検出が改善された、ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体を提供することを目的とする。
実施形態の一態様に従って、ソフトウェアプログラムを解析する方法は、ソフトウェアプログラムを中間表現へとコンパイルすることを含む。方法は、中間表現において、チェックパターンにおけるパターンと整合する命令を見つけることを更に含む。方法は、チェックパターンにおいて特定されるアクションに従って命令が変更されるインストルメントされた中間表現を生成することを更に含む。方法は、インストルメントされた中間表現を記号的に実行することを更に含む。
本願で記載される実施形態の目的及び利点は、少なくとも、特に特許請求の範囲において指摘される要素、特徴及び組み合わせによって、実現され達成されるであろう。
上記の概要及び下記の詳細な説明はいずれも例示及び説明のためであり、請求される発明の限定でないことが理解されるべきである。
本願発明の実施形態によれば、具象入力を手動入力することに伴う時間及び労力を軽減し且つ全てのエラーが特定される可能性を改善するように具象入力を供給することなしにソフトウェアプログラムを解析することが可能となる。
例となる関数、対応するテスト関数、及び従来の動的チェッカーによって生成される対応するエラーレポートを表す。 図1の例となる関数、及び記号的実行に基づく動的チェッカーによって生成される対応するエラーレポートを表す。 ソフトウェアプログラムを解析するシステムの例のブロック図である。 図3のシステムで実施され得るチェックパターンの様々な例を表す。 記号的実行に基づく動的チェッカーを用いてソフトウェアプログラムを解析する処理フローを概略的に表す。 記号的実行に基づく動的チェッカーを用いてソフトウェアプログラムを解析する方法の例のフローチャートである。 記号的実行に基づく動的チェッカーを用いてソフトウェアプログラムを解析するよう配置されるコンピュータ装置の例を表すブロック図である。
例となる実施形態は、添付の図面の使用を通じて、更なる特異性及び詳細を伴って記載及び説明されるであろう。
図1は、例となる関数102と、対応するテスト関数104と、従来の動的チェッカー108によって生成される対応するエラーレポート106とを表す。より詳細に、例となる関数102は、エラーを試験されているソフトウェアプログラムの部分であってよく、“func.c.”と呼ばれ得る。テストスイート(図示せず。)は、関数102を試験するためにユーザによって手動入力された様々な具象入力を含む。テスト関数104は、関数102へ送られるべき0、100及び200の値を含む具象入力を含み、“test.c.”と呼ばれ得る。関数102は2つの“if”記述を含むので、テスト関数104は、関数102における全ての可能なパスをトラバースするよう3つの具象入力を含む。
動作において、従来の動的チェッカー108は、引数として具象入力の夫々により関数102を呼び出すことを含め、テスト関数104を実行する。func(0)がテスト関数104によって呼び出される場合に、関数102の3行目にある第1の“if”記述はスキップされ、5行目にある第2の“if”記述から関数が実行される。func(0)は、第2の“if”記述の実行は、第1の“if”記述を実行せずに、未割り当てメモリを自由にするので、メモリエラーを引き起こす。然るに、従来の動的チェッカー108は、エラー(例えば、“Mismatched free()”)と、エラーが起こる関数102の6行目(例えば、“at func.c:6”)と、エラーを引き起こしたテスト関数104の2行目(例えば、“by text.c.:2”)とを特定するエラーレポート106を生成する。
func(100)及びfunc(200)もテスト関数104によって呼び出され、エラーレポート106から、func(200)がメモリリークエラーをもたらすことが分かる。
上記の例によって例示されるように、比較的簡単な関数102の全てのパスを実行し且つまれなバグ捕らえるには、3つの適切に選択された具象入力を要する。そのような具象入力は、通常は、ユーザ、例えば、関数102のプログラマによって手動で特定される。より複雑な関数及び/又は多数の関数を呼び出すプログラムに関し、全てのパスを実行し及び/又は全てのまれなバグを捕らえるよう十分且つ適切な具象入力を特定することは、複雑であり、時間がかかり、及び/又はユーザにとって間違いを起こしやすいことがある。
然るに、本願で論じられる幾つかの実施形態は、プログラム可能な記号的実行に基づく動的チェッカーに関する。幾つかの実施形態において、プログラム可能な記号的実行に基づく動的チェッカーは、具象入力を供給することなしにソフトウェアプログラムを解析して、具象入力を手動入力することに伴う時間及び労力を軽減し且つ全てのエラーが特定される可能性を改善するよう構成されてよい。
本発明の実施形態は、添付の図面を参照して説明されるであろう。
図2は、図1の例となる関数102と、本願で記載される少なくとも1つの実施形態に従って配置される記号的実行に基づく動的チェッカー202(以降「チェッカー202」)によって生成される対応するエラーレポート204とを表す。概して、チェッカー202は、1又はそれ以上のパターンに従ってアサーションを挿入することによって、対象のプログラム、例えば、関数102をインストルメントするよう構成されてよい。パターンは、デフォルトのパターン及び/又はユーザによって特定されるパターンを含んでよい。幾つかの実施形態において、インストルメンテーションは、対象のプログラムのコンパイルされたバージョンのような、対象のプログラムの中間表現に対して実行される。然るに、インストルメンテーションは言語非依存であってよい。
実施例において、例えば、チェッカー202は、関数102又は関数102を含むソフトウェアプログラムを中間表現へとコンパイルしてよい。チェッカー202は、中間表現において、対応するチェックパターンにおけるパターンと整合する命令を探して見つけてよい。チェッカー202は、対応するチェックパターンにおいて特定されるアクションに従って、整合した命令が変更されるインストルメントされた中間表現を生成してよい。例えば、命令は、以下で更に詳細に記載されるように対応するエラーレポートへの呼び出しを含む差し替え用命令によって置換されてよい。チェッカー202は次いで、インストルメントされた中間表現を記号的に実行してよく、関数102内、すなわち、より一般的には、対応するソフトウェアプログラム内の1又はそれ以上のエラーを示すエラーレポート204のようなレポートを生成してよい。
図3は、本願で記載される少なくとも1つの実施形態に従って配置される、ソフトウェアプログラムを解析する例となるシステム300のブロック図である。システム300は、本願記載されるようにソフトウェアプログラムを解析するようソフトウェアエディタに含まれてよく、及び/又は該ソフトウェアエディタと協働してよい。システム300は、記号的実行に基づく動的チェッカー302(以降「チェッカー302」)と、チェックパターンデータベース304とを有する。チェッカー302は、図2のチェッカー202の実施例である。
チェッカー302は、コンパイラ306と、アサーション・インストルメンテーションモジュール308と、記号的実行モジュール310とを有してよい。コンパイラ306と、アサーション・インストルメンテーションモジュール308と、記号的実行モジュール310とを有するチェッカー302は、ソフトウェア、ハードウェア、又はそれらの何らかの組み合わせにおいて実施されてよい。実施例において、コンパイラ306、アサーション・インストルメンテーションモジュール308及び記号的実行モジュール310は、本願で記載される機能及び動作を実行するよう処理装置によって実行される、メモリのような非一時的なコンピュータ可読媒体に記憶されたコンピュータ命令として実施される。然るに、図3に表されていないとしても、システム300は、非一時的なコンピュータ可読媒体、処理装置、及び/又は他のハードウェアを更に有してよい。
システム300は、全体として高度なソフトウェアコードを有するソフトウェアプログラム312を受け取るよう構成されてよい。ソフトウェアプログラム312の高度なソフトウェアコードは概して、テキストのような、ヒトが読める形式におけるソフトウェアコードを含んでよい。例えば、ソフトウェアプログラム312の高度なソフトウェアコードは、Perl、C、C++、C#、Java(登録商標)、JavaScript(登録商標)、Phython、Ruby、アセンブリ言語、Fortran、COBOL、SQL、及びPHPを含む(がこれらに限られない)様々な種類のソフトウェアプログラミング言語のいずれか1つにおいて記述されてよい。ソフトウェアプログラム312は、ソフトウェアエディタから、又は何らかの他のソースから受け取られてよい。
コンパイラ306は、ソフトウェアプログラム312を受け取り、それを中間表現314へとコンパイルするよう構成されてよい。ソフトウェアプログラム312をコンパイルすることは概して、ソフトウェアプログラム312をパースすること、パースされたソフトウェアプログラム312が構文的に正しいかどうかを決定すること、及びパースされた構文的に正しいソフトウェアプログラム312を中間表現314へ変換することを含んでよい。中間表現314は概して、バイト、コード、オブジェクトコード、マシンコード、仮想命令、LLVM、及びマシンコードの他の中間表現を含む(がこれらに限られない)機会により読み出し可能な形式におけるソフトウェアコードを含んでよい。
アサーション・インストルメンテーションモジュール308は、中間表現314を受け取り、中間表現314をインストルメントするよう構成されてよい。特に、アサーション・インストルメンテーションモジュール308は、中間表現314において、対応するチェックパターン316における対応するパターンと夫々整合する1又はそれ以上の命令を見つけるよう構成されてよい。アサーション・インストルメンテーションモジュール308は更に、対応するチェックパターン316において特定されるアクションに従って、整合した命令が夫々変更されるインストルメントされた中間表現318を生成するよう構成されてよい。チェックパターン316に関する更なる詳細は以下で記載される。
記号的実行モジュール310は、インストルメントされた中間表現318をアサーション・インストルメンテーションモジュール308から受け取り、インストルメントされた中間表現318を記号的に実行するよう構成されてよい。幾つかの実施形態において、インストルメントされた中間表現318は、シンボリック形式であってよく、従って、記号的実行モジュール310による記号的実行の準備ができている。代替的に、記号的実行モジュール310は、インストルメントされた中間表現318の記号的実行の前又はそれと同時に、インストルメントされた中間表現318をシンボリック形式へと変換してよい。
インストルメントされた中間表現318を記号的に実行することによって、記号的実行モジュール310は、インストルメントされた中間表現318内のパスの一部、大部分、又は全てを解析してよい。インストルメントされた中間表現318内のパスの解析に基づき、記号的実行モジュール310は、インストルメントされた中間表現318内でエラーを特定するよう構成されてよい。エラーは、ユーザにより定義されたエラーに加えて、とりわけ、論理エラー、ヌルポインタアクセスのような不正なメモリ位置のアクセス、初期化されていないポインタ、ゼロ除算、境界外メモリアクセス、メモリが割り当てられるが決して割り当てを解除されないメモリリーク、未割り当てメモリの自由化を含んでよい。特定されたエラーは、レポート320において集められて出力されてよい。幾つかの実施形態において、レポート320は、ソフトウェアプログラム310を開発した及び/又は試験しているユーザ、例えば、プログラマに提示されてよい。例えば、レポート320又はその部分は、ソフトウェアエディタのステータスウィンドウに表示されてよい。
上述されたように、チェックパターン316の夫々は、パターン及びアクションの両方を含んでよい。概して、パターンは2又はそれ以上の引数の間の関係を定義し、一方、アクションは条件を特定する。アクションは更に、命令がパターンによって特定される関係を有する2又はそれ以上の引数を含み且つ条件が満たされる場合に、中間表現314における命令を置換する差し替え用命令を特定してよい。
図4は、本願で記載される少なくとも1つの実施形態に従って配置される図3のシステム300で実施され得るチェックパターン400の様々な例を表す。チェックパターン400はチェックパターン400A〜400Dを含む。
チェックパターン400Aは、ヌルポインタアクセスを確認するよう構成されてよい。然るに、チェックパターン400Aは、引数%1及び%2の間の関係を定義するパターン“store %1,%2”を含む。チェックパターン400Aにおいて、関係は、引数%1を引数%2でメモリに記憶することを含む。チェックパターン400Aはまた、条件“if(%2==0)”と、エラーレポート呼び出し“call report_null_ptr_access”を含む差し替え用命令“%i”とを両方とも特定するアクション(Action:)を含む。代替的に、又は追加的に、差し替え用命令は、差し替え用命令において単に代替物となるいずれかのジェネリック型引数、例えば、%1、%2が、整合する命令において使用される対応する特定の引数によって満たされるところの条件及びエラーレポート呼び出しの両方を含んでよい。この及び他のチェックパターンに関して、整合する命令を差し替え用命令により置換することは、この例における“call report_null_ptr_access”のような特定のエラーレポートへの呼び出しを含む差し替え用命令の記号的実行が、図3のレポート320のような結果として得られるレポートにおける包含のために特定のエラーを報告する、結果として得られるインストルメントされた中間表現の記号的実行を可能にする。例えば、結果として得られるレポートにおける包含のために特定のエラーを報告することは、中間表現の、及び/又はエラーを引き起こしたインストルメントされた中間表現の、呼び出されるエラーレポートに基づきエラーのタイプを報告すること、及び/又はソフトウェアプログラムの対応する行を報告することを含んでよい。
チェックパターン400Bは、ゼロ除算エラーを確認するよう構成されてよい。チェックパターン400Bは、引数%1、%2及び%3の間の関係を定義するパターン“%3=fdiv%1,%2”を含む。チェックパターン400Bにおける関係は、引数%3を生成するよう引数%1が引数%1で割り算されることを含む。チェックパターン400Bは、条件“if(%2==0)”と、エラーレポート呼び出し“call report_div_by_zero”を含む差し替え用命令“%i”とを両方とも特定するアクション(Action:)を更に含む。代替的に、又は追加的に、差し替え用命令は、差し替え用命令において単に代替物となるいずれかのジェネリック型引数、例えば、%1、%2が、整合する命令において使用される対応する特定の引数によって満たされるところの条件及びエラーレポート呼び出しの両方を含んでよい。
チェックパターン400A及び400Bは、ヌルポインタアクセスエラー及びゼロ除算エラーを夫々含む一般的な又は既知のエラーを検出するために、本願で記載される実施形態に従って使用され得るチェックパターンの例である。本願で記載されるような適切なチェックパターンを用いて検出され得る一般的な又は既知のエラーの例には、とりわけ、論理エラー、ヌルポインタアクセスのような不正なメモリ位置のアクセス、初期化されていないポインタ、ゼロ除算、境界外メモリアクセス、メモリが割り当てられるが決して割り当てを解除されないメモリリーク、未割り当てメモリの自由化があるが、これらに限られない。
代替的に、又は追加的に、チェックパターンは、ユーザにより定義されるエラーを検出するために、本願で記載される実施形態に従って使用されてよい。チェックパターン400C及び400Dは、ユーザにより定義されるエラーを検出するために使用され得るチェックパターンの例である。特に、チェックパターン400Cは、計算結果の範囲が閾値に満たないかどうかを検出するために使用されてよく、チェックパターン400Dは、コードの一部が閾回数以内で実行されるかどうかを検出するために使用されてよい。他のチェックパターンが、他のユーザ定義エラーを検出するために定義されて使用されてよい。
チェックパターン400C及び400Dの更に詳細な説明がここで実例として与えられる。チェックパターン400Cは、引数%1、%2及び%3の間の関係を定義するパターン“%3=(add|sub|mul)%1,%2”を含む。チェックパターン400Cにおける関係は、引数%3を生成するよう引数%2が引数%1に足し算されるか、引数%1から引き算されるか、又は引数%1を掛け算されることを含む。チェックパターン400Cは、条件“if(%3>100)”と、エラーレポート呼び出し“call report_out_of_range”を含む差し替え用命令“%i”とを両方とも特定するアクション(Action:)を更に含む。代替的に、又は追加的に、差し替え用命令は、差し替え用命令において単に代替物となるいずれかのジェネリック型引数、例えば、%1、%2が、整合する命令において使用される対応する特定の引数によって満たされるところの条件及びエラーレポート呼び出しの両方を含んでよい。このように、チェックパターン400Cは、ユーザが、計算結果の範囲がこの例では100の閾値に満たないかどうかを検出することを可能にする。
チェックパターン400Dは、既に記載されたチェックパターン400Cと同じパターンを含む。チェックパターン400Dは、条件“if(user_count>=10)”と、エラーレポート呼び出し“call report_many_executions”を含む差し替え用命令“%i”とを両方とも特定するアクション(Action:)を更に含む。代替的に、又は追加的に、差し替え用命令は、差し替え用命令において単に代替物となるいずれかのジェネリック型引数、例えば、%1、%2が、整合する命令において使用される対応する特定の引数によって満たされるところの条件及びエラーレポート呼び出しの両方を含んでよい。このように、チェックパターン400Dは、ユーザが、コードの一部がこの例では10の閾回数以内で実行されるかどうかを検出することを可能にする。
図4のチェックパターン400の夫々は、チェックパターン400Aにおける“store %1,%2”、チェックパターン400Bにおける“%3==fdiv%1,%2”、並びにチェックパターン400C及び400Dにおける“%3=(add|sub|mul)%1,%2”のような単一のパターンを含む。代替的に、如何なる所与のチェックパターンも、チェックパターンのアクションにおいて特定される対応する条件を評価する前にソフトウェアプログラムの中間表現における命令によって整合される必要がある複数のパターンを含んでよい。それらの及び他の実施形態において、複数のパターンは、セミコロン若しくは他の適切な文字によって分けられてよく、又は別なふうに互いに区別されてよい。次の3行は、同じチェックパターンに全て含まれ得る3つのパターンの例である:
%1=load%2;
%3=(add|sub|mul)%1,%4;及び
store %3,%5。
上記のパターンは、単なる例示として与えられており、本願で記載される実施形態を制限するよう解釈されるべきではない。例えば、複数のパターンを備えるチェックパターンはわずか2つのパターン、又は3以上のパターンを含んでよい。更に、パターンの夫々は、上記の同じパターン及び/又は何らかの他の所望のパターンを含んでよい。
加えて、図4のチェックパターン400の夫々は、単一の差し替え用命令“%i”を含む。代替的に、又は追加的に、1又はそれ以上のチェックパターンは複数の差し替え用命令%i1、%i2、・・・、%iNを含んでよい。
図5は、本願で記載される少なくとも1つの実施形態に従って配置される記号的実行に基づく動的チェッカー(以降「チェッカー」)を用いてソフトウェアプログラムを解析する処理フロー500を概略的に表す。処理フロー500は、図3のチェッカー302との関連で記載される。
チェッカー302はソフトウェアプログラム502を受け取る。ソフトウェアプログラム502は、図3のソフトウェアプログラム312の実施例である。コンパイラ306は、ソフトウェアプログラム502を中間表現504へとコンパイルしてよい。中間表現504は、図3の中間表現314の実施例である。アサーション・インストルメンテーションモジュール308は中間表現504を受け取り、更に1又はそれ以上のチェックパターン506を受け取る。チェックパターン506は、図3のチェックパターン316の実施例である。
図5に表されているように、チェックパターン506は、ヌルポインタアクセスエラーを検出する第1のチェックパターン508と、ゼロ除算エラーを検出する第2のチェックパターン510を含む。第1のチェックパターン508は、“store %1,%2”のパターン508Aを含み、第2のチェックパターン510は、“%3=fdiv%1,%2”のパターン510Aを含む。然るに、アサーション・インストルメンテーションモジュール308は、パターン508A、510Aのいずれか一方又は両方に整合するあらゆる命令を中間表現504から検索する。
例示される実施形態では、アサーション・インストルメンテーションモジュール308は、中間表現504において、パターン508Aに整合する命令504Aを見つける。然るに、アサーション・インストルメンテーションモジュール308は、パターン508Aのアクションにおいて特定される条件508Bが命令504Aにおける引数のうちの適切な1又はそれ以上によって満足されるかどうかを評価する。特に、例示される実施形態では、アサーション・インストルメンテーションモジュール308は、命令504Aにおける第2の引数、すなわち、%ptrがゼロに等しいかどうかを評価する。条件508Bが満足されない場合は、アサーション・インストルメンテーションモジュール308は、同じか又は他のパターンに整合する他の命令を中間表現504において探してよい。しかし、中間表現504の2行目が%ptrにゼロの値を割り当てるので、条件504Bは満足される。
このように、アサーション・インストルメンテーションモジュール308は、チェックパターン508において特定されるアクションに従って命令504Aが変更されるインストルメントされた中間表現512を生成する。特に、例示される例では、命令504Aは、インストルメントされた中間表現において当該命令をチェックパターン508のアクションにおいて特定される差し替え用命令、すなわち、インストルメントされた中間表現512において512Aで表される、条件508B及びエラーレポート呼び出し508Cの両方を含む差し替え用命令により置換することによって、変更される。図5で表されるように、テキスト512Aは、差し替え用命令に含まれる条件の引数、すなわち、代替物%2が命令504において使用される対応する特定の引数、すなわち、%ptrによって満たされるところの、パターン508Aのアクションにおいて特定される差し替え用命令を含む。
図6は、本願で記載される少なくとも1つの実施形態に従って配置される記号的実行に基づく動的チェッカー(以降「チェッカー」)を用いてソフトウェアプログラム602を解析する例となる方法600のフローチャートである。方法600は、幾つかの実施形態において、図2又は図3のチェッカー202又は302のようなチェッカーによって実行される。別個のブロックとして表されているとしても、様々なブロックは、所望の実施に依存して、追加のブロックに分けられ、より少ないブロックにまとめられ、又は削除されてよい。方法600は、入力としてソフトウェアプログラム602及び1以上のチェックパターン604の両方を受け取ってよい。
方法600は、ソフトウェアプログラムが中間表現へとコンパイルされるブロック606で開始してよい。
ブロック608で、中間表現において、チェックパターン604の1つにおけるパターンに整合する命令が見つけられる。パターンに整合する命令を見つける前に、方法600は概して、チェックパターン604のうちの1以上の対応するチェックパターンにおける1以上のパターンに整合する命令を中間表現から探すことを含んでよい。
ブロック610で、チェックパターン604の対応する1つにおいて特定されるアクションに従って命令が変更されるインストルメントされた中間表現が生成される。それらの及び他の実施形態において、チェックパターンにおいて特定されるアクションに従って命令が変更されるインストルメントされた中間表現は、チェックパターンに含まれる差し替え用命令により中間表現における命令を置換することを含んでよい。更に、上述されたように、パターンは、2又はそれ以上の引数の間の関係を定義してよい。アクションは、条件と、命令がパターンによって特定される関係を有する2又はそれ以上の引数を含み且つ条件が満たされる場合に中間表現における命令を置換する差し替え用命令とを特定してよい。
ブロック612で、インストルメントされた中間表現は記号的に実行される。
ブロック614で、レポート616が、インストルメントされた中間表現の記号的実行に基づき生成される。レポートは、ソフトウェアプログラム602内の1又はそれ以上のエラーを示してよい。
然るに、本願で記載される幾つかの実施形態は、記号的実行に基づく動的チェッカーについての検出可能な欠陥タイプが、中間表現をインストルメントすることによってプログラムされることを可能にすることができる。代替的に、又は追加的に、本願で記載される幾つかの実施形態は、パターンと対応するアクションとの組において、検出可能な欠陥タイプを表してよい。
当業者には明らかなように、本願で開示されるこの及び他の処理及び方法に関して、そのような処理及び方法において実行される機能は異なる順序で実施されてよい。更に、説明されるステップ及び動作は単に例として提供されており、ステップ及び動作の幾つかは、開示される実施形態の本質から逸脱することなしに、任意であり、より少ないステップ及び動作にまとめられ、又は追加のステップ及び動作に拡張されてよい。
例えば、方法600は、複数のチェックパターンの対応する1つにおいて夫々含まれる複数のパターンのいずれかと整合する命令を中間表現から探すことを更に含んでよい。パターンの対応する1つと整合する夫々の命令に関し、中間表現からの対応する命令は、チェックパターンの対応する1つにおいて特定されるアクションに従って変更されてよい。加えて、パターンのいずれかと整合する命令を中間表現から探す前に、複数のチェックパターンの1つとして含めるよう利用可能なチェックパターンの組から少なくとも第1のチェックパターンを選択するのに有効なユーザ入力が受け取られてよい。方法600は、少なくとも第1のチェックパターンを選択するのに有効なユーザ入力を受け取る前に、第1のチェックパターンを定義するのに有効なユーザ入力を受け取ることを更に含んでよい。然るに、本願で記載される幾つかの実施形態は、ユーザが、特定の欠陥を検出し及び/又はソフトウェアプログラムを解析する場合に考慮されるチェックパターンのデータベース若しくは他のリポジトリから1以上のチェックパターンを選択するためのチェックパターンを定義することを可能にする。
本願で記載される幾つかの実施形態は、図6におけるブロック606、608、610、612及び/又は614のような図6の方法600に含まれる動作のうちの1又はそれ以上を実行するよう処理装置によって実行可能なコンピュータ命令を記憶した非一時的なコンピュータ可読媒体のような製品、及び/又はその変形を含む。非一時的なコンピュータ可読媒体及び処理装置は、例えば、図3のシステム300に含まれてよい。
図7は、本願で記載される少なくとも1つの実施形態に従って、記号的実行に基づく動的チェッカー(以降「チェッカー」)726を用いてソフトウェアプログラムを解析する用は位置される例となるコンピュータ装置700を表すブロック図である。コンピュータ装置700は、例えば、図3のシステム300に含まれるか又は該システム300に対応してよい。基本構成702において、コンピュータ装置700は、通常、1又はそれ以上のプロセッサ704と、システムメモリ706とを有する。メモリバス708が、プロセッサ704とシステムメモリ706との間の通信のために使用されてよい。
所望の構成に依存して、プロセッサ704は、マイクロプロセッサ(UP)、マイクロコントローラ(UC)、中央演算処理装置(CPU)、デジタル信号プロセッサ(DSP)、それらの何らかの組み合わせ、又は他の適切な処理装置を含む(がこれらに限られない)如何なるタイプであってもよい。プロセッサ704は、レベル1キャッシュ710及びレベル2キャッシュ712のようなキャッシングの1又はそれ以上のレベルと、プロセッサコア714と、レジスタ716とを有してよい。プロセッサコア714の例には、数値演算ユニット(AUL)、浮動小数点演算ユニット(FPU)、DSPコア、又はそれらの何れかの組み合わせがある。また、例となるメモリコントローラ718がプロセッサ704とともに使用されてよく、あるいは、幾つかの実施において、メモリコントローラ718はプロセッサ704の内部部品であってよい。
所望の構成に依存して、システムメモリ706は、揮発性メモリ(例えば、RAM)、不揮発性メモリ(例えば、ROM、フラッシュメモリ、等)、又はそれらの何れか組み合わせを含む(がこれらに限られない)如何なるタイプであってもよい。システムメモリ706は、OS720と、1又はそれ以上のアプリケーション722と、プログラムデータ724とを有してよい。アプリケーション722は、図6の方法600に関して記載されるようなソフトウェアプログラムを解析する動作を含む本願で記載される動作又は機能の1又はそれ以上を実行するよう配置されるチェッカー726を有してよい。プログラムデータ724は、テスト対象及びチェックパターン728を含んでよい。テスト対象は、例えば、チェッカー726によって解析されているソフトウェアプログラムを含んでよい。テスト対象及びチェックパターン728は、テスト対象においてエラーを検出するよう上述されたように解析及び/又は使用されてよい。幾つかの実施形態において、アプリケーション722は、図6の方法600のようなソフトウェアプログラムを解析する方法の実施が本願で記載されるように提供され得るように、OS720でプログラムデータ724により動作するよう配置されてよい。
コンピュータ装置700は、基本構成702と他の装置及びインターフェースとの間の通信を助けるよう追加の特徴又は機能及び追加のインターフェースを有してよい。例えば、バス/インターフェースコントローラ730が、記憶インターフェースバス734を介した基本構成702と1以上のデータ記憶装置732との間の通信を助けるために使用されてよい。データ記憶装置732は、リムーバブル記憶装置736、非リムーバブル記憶装置738、又はそれらの組み合わせであってよい。リムーバブル記憶装置及び非リムーバブル記憶装置の例には、2、3例を挙げると、フレキシブルディスクドライブ及びハードディスクドライブ(HDD)のような磁気ディスク装置、コンパクトディスク(CD)ドライブ又はデジタルバーサタイルディスク(DVD)ドライブのような光ディスクドライブ、ソリッドステートドライブ(SSD)、並びにテープドライブがある。コンピュータ記憶媒体の例には、コンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータのような情報の記憶のための何らかの方法又は技術において実施される揮発性及び不揮発性の、リムーバブル及び非リムーバブルの媒体がある。
システムメモリ706、リムーバブル記憶装置736、及び非リムーバブル記憶装置738は、非一時的なコンピュータ可読媒体の例である。非一時的なコンピュータ可読媒体の例には、RAM、ROM、EEPROM、フラッシュメモリ若しくは他のメモリ技術、CD−ROM、デジタルバーサタイルディスク(DVD)若しくは他の光ディスク、磁気カセット、磁気テープ、磁気ディスク記憶若しくは他の磁気記憶装置、又は所望の情報を記憶するために使用されてよく且つコンピュータ装置700によってアクセスされ得る何らかの他の非一時的な媒体があるが、これらに限られない。如何なるそのような非一時的なコンピュータ可読媒体も、コンピュータ装置700の部分であってよい。
コンピュータ装置700は、バス/インターフェースコントローラ730を介した様々なインターフェース装置(例えば、出力装置742、周辺機器インターフェース744、及び通信装置746)から基本構成702への通信を助けるためのインターフェースバス740を更に有してよい。例となる出力装置742は、1又はそれ以上のA/Vポート752を介してディスプレイ又はスピーカのような様々な外部装置と通信するよう構成され得るグラフィクス処理ユニット748及びオーディオ処理ユニット750を含む。例となる周辺機器インターフェース744は、1又はそれ以上のI/Oポート758を介して入力装置(例えば、キーボード、マウス、ペン、音声入力装置、タッチ入力装置、等)又は他の周辺機器(例えば、プリンタ、スキャナ、等)のような外部装置と通信するよう構成され得るシリアルインターフェースコントローラ754又はパラレルインターフェースコントローラ756を含む。例となる通信装置746は、1又はそれ以上の通信ポート764を介してネットワーク通信リンク上で1又はそれ以上の他のコンピュータ装置764と通信するのを助けるよう配置され得るネットワークコントローラ760を含む。
ネットワーク通信リンクは、通信媒体の一例であってよい。通信媒体は、通常、搬送波若しくは他の伝送メカニズムのような変調データ信号におけるコンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータによって具現されてよく、如何なる情報伝送媒体も含んでよい。「変調データ信号」は、その特性のうちの1又はそれ以上が信号における情報を符号化するように設定又は変更されている信号であってよい。一例として、制限なしに、通信媒体は、有線ネットワーク又は直接配線接続のような有線媒体と、音響、無線周波数(RF)、マイクロ波、赤外線、及び頼む千媒体のような無線媒体とを有してよい。本願で使用される語「コンピュータ可読媒体」は、記憶媒体及び通信媒体の両方を含んでよい。
コンピュータ装置700は、携帯電話機、パーソナルデジタルアシスタント(PDA)、パーソナルメディアプレイヤ装置、無線ウェブウォッチ装置、パーソナルヘッドセット装置、特定用途向け装置、又はこれらの機能のいずれかを含む複合型装置のようなスモールフォームファクタのポータブル(又はモバイル)電子機器の一部として実施されてよい。コンピュータ装置700はまた、ラップトップコンピュータ及び非ラップトップコンピュータの両構造を含むパーソナルコンピュータとして実施されてよい。
本願で挙げられている全ての例及び条件付き言語は、当該技術を促進することに発明者によって寄与された発明及び概念を読む者が理解するのを助ける教示を目的としており、そのような具体的に挙げられている例及び条件に制限されないと解釈されるべきである。本発明の実施形態が詳細に記載されてきたが、様々な変更、置換及び代替が本開示の精神及び適用範囲から逸脱することなしにそれらに対してなされ得ることが理解されるべきである。
上記の実施形態に関し、更に以下の付記を開示する。
(付記1)
ソフトウェアプログラムを解析する方法であって、
ソフトウェアプログラムを中間表現へとコンパイルし、
前記中間表現において、チェックパターンにおけるパターンと整合する命令を見つけ、
前記チェックパターンにおいて特定されるアクションに従って前記命令が変更されるインストルメントされた中間表現を生成し、
前記インストルメントされた中間表現を記号的に実行する
方法。
(付記2)
前記チェックパターンにおいて特定されるアクションに従って前記命令が変更されるインストルメントされた中間表現を生成することは、前記中間表現における前記命令を、前記チェックパターンに含まれる差し替え用命令により置換することを含む、
付記1に記載の方法。
(付記3)
前記差し替え用命令は、エラーレポートへの呼び出しを含む、
付記2に記載の方法。
(付記4)
前記パターンは、2又はそれ以上の引数の間の関係を定義し、
前記アクションは、条件と、
前記命令が前記パターンによって特定される前記関係を有する2又はそれ以上の引数を含み、且つ
前記条件が満たされる
場合に前記中間表現における前記命令を置換する差し替え用命令とを特定する、
付記1に記載の方法。
(付記5)
前記2又はそれ以上の引数は、第1の引数及び第2の引数を含み、
前記パターンは、前記第1の引数が前記第2の引数でメモリに格納されることを含み、
前記条件は、前記第2の引数がゼロに等しいことを含み、
前記差し替え用命令は、ヌルポインタアクセスレポートへの呼び出しを含む、
付記4に記載の方法。
(付記6)
前記2又はそれ以上の引数は、第1の引数、第2の引数、及び第3の引数を含み、
前記パターンは、前記第3の引数を生成するよう前記第1の引数を前記第2の引数で割り算することを含み、
前記条件は、前記第2の引数がゼロに等しいことを含み、
前記差し替え用命令は、ゼロ除算レポートへの呼び出しを含む、
付記4に記載の方法。
(付記7)
前記条件は、ユーザによって定義される条件を含み、前記差し替え用命令は、前記ユーザによって定義されるレポートへの呼び出しを含む、
付記4に記載の方法。
(付記8)
更に、前記インストルメントされた中間表現の記号的実行に基づきレポートを生成し、該レポートは、前記ソフトウェアプログラム内の1又はそれ以上のエラーを示す、
付記1に記載の方法。
(付記9)
更に、
複数のチェックパターンのうちの対応する1つにおいて夫々含まれる複数のパターンのいずれかに整合する命令を前記中間表現から探し、
前記複数のチェックパターンのうちの対応する1つに整合する夫々の命令について、前記複数のチェックパターンのうちの対応する1つにおいて特定されるアクションに従って前記中間表現からの対応する命令を変更し、
前記複数のパターンのいずれかに整合する命令を前記中間表現から探す前に、前記複数のチェックパターンの1つとして含めるよう利用可能なチェックパターンの組から少なくとも第1のチェックパターンを選択するのに有効なユーザ入力を受け取る
付記1に記載の方法。
(付記10)
少なくとも前記第1のチェックパターンを選択するのに有効なユーザ入力を受け取る前に、更に、前記第1のチェックパターンを定義するのに有効なユーザ入力を受け取る
付記9に記載の方法。
(付記11)
ソフトウェアプログラムを解析するシステムであって、
処理装置と、
ソフトウェアプログラムを中間表現へとコンパイルするよう前記処理装置によって実行可能なコンパイラと、前記中間表現においてチェックパターンにおけるパターンと整合する命令を見つけ、前記チェックパターンにおいて特定されるアクションに従って前記命令が変更されるインストルメントされた中間表現を生成するよう前記処理装置によって実行可能なアサーション・インストルメンテーションモジュールとを記憶する非一時的なコンピュータ可読媒体と、
前記インストルメントされた中間表現を記号的に実行するよう前記処理装置によって実行可能な記号的実行モジュールと
を有するシステム。
(付記12)
前記中間表現における前記命令を置換する前記チェックパターンに含まれる差し替え用命令は、エラーレポートへの呼び出しを含む、
付記11に記載のシステム。
(付記13)
前記パターンは、2又はそれ以上の引数の間の関係を定義し、
前記アクションは、条件と、
前記命令が前記パターンによって特定される前記関係を有する2又はそれ以上の引数を含み、且つ
前記条件が満たされる
場合に前記中間表現における前記命令を置換する差し替え用命令とを特定する、
付記11に記載のシステム。
(付記14)
前記2又はそれ以上の引数は、第1の引数及び第2の引数を含み、
前記パターンは、前記第1の引数が前記第2の引数でメモリに格納されることを含み、
前記条件は、前記第2の引数がゼロに等しいことを含み、
前記差し替え用命令は、ヌルポインタアクセスレポートへの呼び出しを含む、
付記13に記載のシステム。
(付記15)
前記2又はそれ以上の引数は、第1の引数、第2の引数、及び第3の引数を含み、
前記パターンは、前記第3の引数を生成するよう前記第1の引数を前記第2の引数で割り算することを含み、
前記条件は、前記第2の引数がゼロに等しいことを含み、
前記差し替え用命令は、ゼロ除算レポートへの呼び出しを含む、
付記13に記載のシステム。
(付記16)
ソフトウェアプログラムを解析する動作を実行するよう処理装置によって実行されるコンピュータ命令を記憶する非一時的なコンピュータ可読媒体であって、
前記動作は、
ソフトウェアプログラムを中間表現へとコンパイルし、
前記中間表現において、チェックパターンにおけるパターンと整合する命令を見つけ、
前記チェックパターンにおいて特定されるアクションに従って前記命令が変更されるインストルメントされた中間表現を生成し、
前記インストルメントされた中間表現を記号的に実行する
ことを含む、非一時的なコンピュータ可読媒体。
(付記17)
前記チェックパターンにおいて特定されるアクションに従って前記命令が変更されるインストルメントされた中間表現を生成することは、前記中間表現における前記命令を、前記チェックパターンに含まれる差し替え用命令により置換することを含む、
付記16に記載の非一時的なコンピュータ可読媒体。
(付記18)
前記動作は、前記インストルメントされた中間表現の記号的実行に基づきレポートを生成することを更に含み、該レポートは、前記ソフトウェアプログラム内の1又はそれ以上のエラーを示す、
付記16に記載の非一時的なコンピュータ可読媒体。
(付記19)
前記動作は、
複数のチェックパターンのうちの対応する1つにおいて夫々含まれる複数のパターンのいずれかに整合する命令を前記中間表現から探し、
前記複数のチェックパターンのうちの対応する1つに整合する夫々の命令について、前記複数のチェックパターンのうちの対応する1つにおいて特定されるアクションに従って前記中間表現からの対応する命令を変更し、
前記複数のパターンのいずれかに整合する命令を前記中間表現から探す前に、前記複数のチェックパターンの1つとして含めるよう利用可能なチェックパターンの組から少なくとも第1のチェックパターンを選択するのに有効なユーザ入力を受け取る
ことを更に含む、付記16に記載の非一時的なコンピュータ可読媒体。
(付記20)
前記動作は、少なくとも前記第1のチェックパターンを選択するのに有効なユーザ入力を受け取る前に、前記第1のチェックパターンを定義するのに有効なユーザ入力を受け取ることを更に含む、
付記19に記載の非一時的なコンピュータ可読媒体。
102 関数
202,302,726 動的チェッカー
204 エラーレポート
300 システム
304 チェックパターンデータベース
306 コンパイラ
308 アサーション・インストルメンテーションモジュール
310 記号的実行モジュール
312,502,602 ソフトウェアプログラム
314,504 中間表現
316,400,506、604 チェックパターン
318,512 インストルメントされた中間表現
320,616 レポート
504A 命令
508A,510 パターン
508B 条件
508C エラーレポート呼び出し
512A 差し替え用命令
700 コンピュータ装置
704 プロセッサ
706 システムメモリ

Claims (16)

  1. ソフトウェアプログラムを解析する方法であって、
    ソフトウェアプログラムを中間表現へとコンパイルし、
    前記中間表現において、チェックパターンにおけるパターンと整合する命令を見つけ、
    前記チェックパターンにおいて特定されるアクションに従って前記命令が変更されるインストルメントされた中間表現を生成し、
    前記インストルメントされた中間表現を記号的に実行する
    方法であり、
    前記チェックパターンにおいて特定されるアクションに従って前記命令が変更されるインストルメントされた中間表現を生成することは、前記中間表現における前記命令を、前記チェックパターンに含まれる差し替え用命令により置換することを含み、
    前記差し替え用命令は、エラーレポートへの呼び出しを含む、
    方法
  2. 前記パターンは、2又はそれ以上の引数の間の関係を定義し、
    前記アクションは、条件と、
    前記命令が前記パターンによって特定される前記関係を有する2又はそれ以上の引数を含み、且つ
    前記条件が満たされる
    場合に前記中間表現における前記命令を置換する前記差し替え用命令とを特定する、
    請求項1に記載の方法。
  3. 前記2又はそれ以上の引数は、第1の引数及び第2の引数を含み、
    前記パターンは、前記第1の引数が前記第2の引数でメモリに格納されることを含み、
    前記条件は、前記第2の引数がゼロに等しいことを含み、
    前記エラーレポートは、ヌルポインタアクセスレポートを含む
    請求項に記載の方法。
  4. 前記2又はそれ以上の引数は、第1の引数、第2の引数、及び第3の引数を含み、
    前記パターンは、前記第3の引数を生成するよう前記第1の引数を前記第2の引数で割り算することを含み、
    前記条件は、前記第2の引数がゼロに等しいことを含み、
    前記エラーレポートは、ゼロ除算レポートを含む
    請求項に記載の方法。
  5. 前記条件は、ユーザによって定義される条件を含み、前記エラーレポートは、前記ユーザによって定義されるレポートを含む
    請求項に記載の方法。
  6. 更に、前記インストルメントされた中間表現の記号的実行に基づきレポートを生成し、該レポートは、前記ソフトウェアプログラム内の1又はそれ以上のエラーを示す、
    請求項1に記載の方法。
  7. 更に、
    複数のチェックパターンのうちの対応する1つにおいて夫々含まれる複数のパターンのいずれかに整合する命令を前記中間表現から探し、
    前記複数のチェックパターンのうちの対応する1つに整合する夫々の命令について、前記複数のチェックパターンのうちの対応する1つにおいて特定されるアクションに従って前記中間表現からの対応する命令を変更し、
    前記複数のパターンのいずれかに整合する命令を前記中間表現から探す前に、前記複数のチェックパターンの1つとして含めるよう利用可能なチェックパターンの組から少なくとも第1のチェックパターンを選択するのに有効なユーザ入力を受け取る
    請求項1に記載の方法。
  8. 少なくとも前記第1のチェックパターンを選択するのに有効なユーザ入力を受け取る前に、更に、前記第1のチェックパターンを定義するのに有効なユーザ入力を受け取る
    請求項に記載の方法。
  9. ソフトウェアプログラムを解析するシステムであって、
    処理装置と、
    ソフトウェアプログラムを中間表現へとコンパイルするよう前記処理装置によって実行可能なコンパイラと、前記中間表現においてチェックパターンにおけるパターンと整合する命令を見つけ、前記チェックパターンにおいて特定されるアクションに従って前記命令が変更されるインストルメントされた中間表現を生成するよう前記処理装置によって実行可能なアサーション・インストルメンテーションモジュールとを記憶する非一時的なコンピュータ可読媒体と、
    前記インストルメントされた中間表現を記号的に実行するよう前記処理装置によって実行可能な記号的実行モジュールと
    を有するシステムであり、
    前記チェックパターンにおいて特定されるアクションに従って前記命令が変更されるインストルメントされた中間表現を生成することは、前記中間表現における前記命令を、前記チェックパターンに含まれる差し替え用命令により置換することを含み、
    前記差し替え用命令は、エラーレポートへの呼び出しを含む、
    システム
  10. 前記パターンは、2又はそれ以上の引数の間の関係を定義し、
    前記アクションは、条件と、
    前記命令が前記パターンによって特定される前記関係を有する2又はそれ以上の引数を含み、且つ
    前記条件が満たされる
    場合に前記中間表現における前記命令を置換する前記差し替え用命令とを特定する、
    請求項に記載のシステム。
  11. 前記2又はそれ以上の引数は、第1の引数及び第2の引数を含み、
    前記パターンは、前記第1の引数が前記第2の引数でメモリに格納されることを含み、
    前記条件は、前記第2の引数がゼロに等しいことを含み、
    前記エラーレポートは、ヌルポインタアクセスレポートを含む
    請求項10に記載のシステム。
  12. 前記2又はそれ以上の引数は、第1の引数、第2の引数、及び第3の引数を含み、
    前記パターンは、前記第3の引数を生成するよう前記第1の引数を前記第2の引数で割り算することを含み、
    前記条件は、前記第2の引数がゼロに等しいことを含み、
    前記エラーレポートは、ゼロ除算レポートを含む
    請求項10に記載のシステム。
  13. ソフトウェアプログラムを解析する動作を実行するよう処理装置によって実行されるコンピュータ命令を記憶する非一時的なコンピュータ可読媒体であって、
    前記動作は、
    ソフトウェアプログラムを中間表現へとコンパイルし、
    前記中間表現において、チェックパターンにおけるパターンと整合する命令を見つけ、
    前記チェックパターンにおいて特定されるアクションに従って前記命令が変更されるインストルメントされた中間表現を生成し、
    前記インストルメントされた中間表現を記号的に実行する
    ことを含む、非一時的なコンピュータ可読媒体であり、
    前記チェックパターンにおいて特定されるアクションに従って前記命令が変更されるインストルメントされた中間表現を生成することは、前記中間表現における前記命令を、前記チェックパターンに含まれる差し替え用命令により置換することを含み、
    前記差し替え用命令は、エラーレポートへの呼び出しを含む、
    非一時的なコンピュータ可読媒体
  14. 前記動作は、前記インストルメントされた中間表現の記号的実行に基づきレポートを生成することを更に含み、該レポートは、前記ソフトウェアプログラム内の1又はそれ以上のエラーを示す、
    請求項13に記載の非一時的なコンピュータ可読媒体。
  15. 前記動作は、
    複数のチェックパターンのうちの対応する1つにおいて夫々含まれる複数のパターンのいずれかに整合する命令を前記中間表現から探し、
    前記複数のチェックパターンのうちの対応する1つに整合する夫々の命令について、前記複数のチェックパターンのうちの対応する1つにおいて特定されるアクションに従って前記中間表現からの対応する命令を変更し、
    前記複数のパターンのいずれかに整合する命令を前記中間表現から探す前に、前記複数のチェックパターンの1つとして含めるよう利用可能なチェックパターンの組から少なくとも第1のチェックパターンを選択するのに有効なユーザ入力を受け取る
    ことを更に含む、請求項13に記載の非一時的なコンピュータ可読媒体。
  16. 前記動作は、少なくとも前記第1のチェックパターンを選択するのに有効なユーザ入力を受け取る前に、前記第1のチェックパターンを定義するのに有効なユーザ入力を受け取ることを更に含む、
    請求項15に記載の非一時的なコンピュータ可読媒体。
JP2014082583A 2013-04-30 2014-04-14 ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体 Active JP6303749B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/874,280 US9274925B2 (en) 2013-04-30 2013-04-30 Programmable symbolic execution based dynamic checker
US13/874,280 2013-04-30

Publications (2)

Publication Number Publication Date
JP2014219969A JP2014219969A (ja) 2014-11-20
JP6303749B2 true JP6303749B2 (ja) 2018-04-04

Family

ID=51790457

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014082583A Active JP6303749B2 (ja) 2013-04-30 2014-04-14 ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体

Country Status (2)

Country Link
US (1) US9274925B2 (ja)
JP (1) JP6303749B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11062615B1 (en) 2011-03-01 2021-07-13 Intelligibility Training LLC Methods and systems for remote language learning in a pandemic-aware world
US10019995B1 (en) 2011-03-01 2018-07-10 Alice J. Stiebel Methods and systems for language learning based on a series of pitch patterns
US10261764B2 (en) * 2014-05-13 2019-04-16 Oracle International Corporation Handling value types
US10545739B2 (en) 2016-04-05 2020-01-28 International Business Machines Corporation LLVM-based system C compiler for architecture synthesis
CN106407104B (zh) * 2016-08-24 2018-12-04 北京奇虎测腾安全技术有限公司 一种用于检测与内存空间释放相关的缺陷的方法及系统
CN109426614A (zh) * 2017-09-01 2019-03-05 深圳市源伞新科技有限公司 缺陷检测方法、设备、系统和计算机可读存储介质
US11074055B2 (en) * 2019-06-14 2021-07-27 International Business Machines Corporation Identification of components used in software binaries through approximate concrete execution

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0981411A (ja) * 1995-09-20 1997-03-28 Fujitsu Ltd コンパイラ
US5784553A (en) * 1996-01-16 1998-07-21 Parasoft Corporation Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs
US6481008B1 (en) * 1999-06-30 2002-11-12 Microsoft Corporation Instrumentation and optimization tools for heterogeneous programs
US20030145309A1 (en) * 2002-01-18 2003-07-31 Rajendra Inamdar Probe description language
US20050028132A1 (en) * 2003-07-31 2005-02-03 Srinivasamurthy Venugopal K. Application specific optimization of interpreters for embedded systems
US7788644B2 (en) * 2005-03-24 2010-08-31 Sap Ag Method and system for monitoring performance on a mobile device
US8161470B2 (en) * 2007-08-31 2012-04-17 International Business Machines Corporation Systems, methods, and computer products for automated injection of java bytecode instructions for java load time optimization via runtime checking with upcasts
US8234604B2 (en) * 2008-09-02 2012-07-31 International Business Machines Corporation Co-optimization of embedded systems utilizing symbolic execution
US8402444B2 (en) * 2009-10-09 2013-03-19 Microsoft Corporation Program analysis through predicate abstraction and refinement
US8595707B2 (en) * 2009-12-30 2013-11-26 Microsoft Corporation Processing predicates including pointer information
US8732670B1 (en) * 2010-06-29 2014-05-20 Ca, Inc. Ensuring determinism during programmatic replay in a virtual machine
US8769518B1 (en) * 2010-06-29 2014-07-01 Ca, Inc. Ensuring determinism during programmatic replay in a virtual machine
US8776026B2 (en) * 2010-10-01 2014-07-08 Ecole Polytechnique Federale De Lausanne System and method for in-vivo multi-path analysis of binary software
US8943487B2 (en) * 2011-01-20 2015-01-27 Fujitsu Limited Optimizing libraries for validating C++ programs using symbolic execution
US8819649B2 (en) * 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
US9003382B2 (en) * 2013-02-18 2015-04-07 Red Hat, Inc. Efficient just-in-time compilation
US11347498B2 (en) * 2013-02-26 2022-05-31 Red Hat, Inc. Bytecode modification
US8954935B2 (en) * 2013-03-14 2015-02-10 Pivotal Software, Inc. Method and system that filters byte-code instrumentation at the instrumentation level

Also Published As

Publication number Publication date
JP2014219969A (ja) 2014-11-20
US20140325489A1 (en) 2014-10-30
US9274925B2 (en) 2016-03-01

Similar Documents

Publication Publication Date Title
JP6303749B2 (ja) ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体
EP3788490B1 (en) Execution control with cross-level trace mapping
US9208057B2 (en) Efficient model checking technique for finding software defects
Costa et al. What's wrong with my benchmark results? Studying bad practices in JMH benchmarks
Gong et al. Jitprof: Pinpointing jit-unfriendly javascript code
US9594553B2 (en) Identifying semantic differences between source code versions
US8621441B2 (en) System and method for software immunization based on static and dynamic analysis
Xu et al. Go with the flow: Profiling copies to find runtime bloat
US8954926B2 (en) Code coverage detection with scriptable language unmodified source
US6823507B1 (en) Detection of memory-related errors in computer programs
Yan et al. Uncovering performance problems in Java applications with reference propagation profiling
US9658907B2 (en) Development tools for refactoring computer code
US20110145799A1 (en) Path-sensitive dataflow analysis including path refinement
US9336128B2 (en) Method and system for code analysis using symbolic types
CN110741354A (zh) 呈现代码实体调用之间的差异
Paltenghi et al. Bugs in quantum computing platforms: an empirical study
JP6342129B2 (ja) 混合モードプログラムのソースコードエラー位置検出装置及び方法
US20130179867A1 (en) Program Code Analysis System
Xu et al. Scalable runtime bloat detection using abstract dynamic slicing
US20140215483A1 (en) Resource-usage totalizing method, and resource-usage totalizing device
Reichelt et al. PeASS: A tool for identifying performance changes at code level
US10380313B1 (en) Implementation and evaluation of designs for heterogeneous computing platforms with hardware acceleration
US9158506B2 (en) Loop abstraction for model checking
Laguna et al. Pinpointing scale-dependent integer overflow bugs in large-scale parallel applications
US8756580B2 (en) Instance-based field affinity optimization

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170110

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171110

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171205

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180110

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: 20180206

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180219

R150 Certificate of patent or registration of utility model

Ref document number: 6303749

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150