図面 (/)

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

出願人 富士通株式会社
発明者 吉田浩章
出願日 2014年4月14日 (7年1ヶ月経過) 出願番号 2014-082583
公開日 2014年11月20日 (6年6ヶ月経過) 公開番号 2014-219969
状態 特許登録済
技術分野 デバッグ/監視 ストアードプログラム 特別なプログラム実行装置
主要キーワード テストスイート 論理エラー テスト関数 シンボリック表現 プレイヤ装置 インストルメンテーション 差し替え用 ゼロ除算
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2014年11月20日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (8)

課題

エラー検出が改善されたソフトウェアプログラム解析方法等を提供する。

解決手段

方法600は、ソフトウェアプログラム602を中間表現へとコンパイルすること606を含む。方法600は、中間表現において、チェックパターン604におけるパターン整合する命令を見つけること608を更に含む。方法600は、チェックパターンにおいて特定されるアクションに従って命令が変更されるインストルメントされた中間表現を生成すること610を更に含む。方法600は、インストルメントされた中間表現を記号的に実行すること612を更に含む。

概要

背景

動的チェッカーは、2、3例を挙げると、アサーション不成功又は違反メモリエラー、及びゼロ除算エラーのようなソフトウェアプログラムにおける様々な種類のエラーの存在を確認するために使用される。動的チェッカー機能を備える一般的なツールの例には、幾つかのメモリアナライザプロファイラ、及びカバレッジアナライザがある。

典型的な実施において、動的チェッカーは、1又はそれ以上の具象な(concrete)入力を含むテストスイートを用いてソフトウェアプログラムを実行することによって、ソフトウェアプログラムを解析する。具象な入力は、ユーザによって手動で特定されて提供される。エラーを検出するために、ユーザは、エラーをトリガする具象な入力を提供する必要がある。然るに、ソフトウェアプログラムにおける十分に多くのパス訓練し且つまれなバグを捕らえる高品質のテストスイートを保持することは困難である。

記号的実行は、ソフトウェアプログラムを動的に解析するための技術である。記号的実行は、実際のデータに代えてシンボリック値を入力値として使用し、プログラム変数の値をシンボリック表現として表す。結果として、記号的に実行されるソフトウェアプログラムによって計算される出力は、シンボリック入力の関数として表される。記号的実行により、ソフトウェアプログラム内の各パスは記号的に実行されてよい。

幾つかの動的チェッカーは記号的実行を実施し、記号的実行に基づく動的チェッカーと呼ばれることがある。従来の記号的実行に基づく動的チェッカーは、ヌルポインタエラー及び境界外(out-of-bound)アクセスエラーを含む単純なメモリエラーの検出のような、限られた欠陥検出を有する。更に、従来の記号的実行に基づく動的チェッカーにおける検出可能な欠陥のタイプは、検出される欠陥のタイプをユーザが容易に変更することができないようにハードコーディングされる。

本願で請求される対象は、如何なる欠点も解消し又は先に記載されたような環境においてのみ動作する実施形態に制限されない。むしろ、この背景は、本願で記載される幾つかの実施形態が実施され得る一例としての技術範囲を説明するためにのみ提供される。

概要

エラー検出が改善されたソフトウェアプログラム解析方法等を提供する。方法600は、ソフトウェアプログラム602を中間表現へとコンパイルすること606を含む。方法600は、中間表現において、チェックパターン604におけるパターン整合する命令を見つけること608を更に含む。方法600は、チェックパターンにおいて特定されるアクションに従って命令が変更されるインストルメントされた中間表現を生成すること610を更に含む。方法600は、インストルメントされた中間表現を記号的に実行すること612を更に含む。

目的

エラーを検出するために、ユーザは、エラーをトリガする具象な入力を提供する

効果

実績

技術文献被引用数
0件
牽制数
0件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項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に記載の非一時的なコンピュータ可読媒体。

技術分野

0001

本願で論じられる実施形態は、プログラム可能記号的実行に基づく動的チェッカーに関する。

背景技術

0002

動的チェッカーは、2、3例を挙げると、アサーション不成功又は違反メモリエラー、及びゼロ除算エラーのようなソフトウェアプログラムにおける様々な種類のエラーの存在を確認するために使用される。動的チェッカー機能を備える一般的なツールの例には、幾つかのメモリアナライザプロファイラ、及びカバレッジアナライザがある。

0003

典型的な実施において、動的チェッカーは、1又はそれ以上の具象な(concrete)入力を含むテストスイートを用いてソフトウェアプログラムを実行することによって、ソフトウェアプログラムを解析する。具象な入力は、ユーザによって手動で特定されて提供される。エラーを検出するために、ユーザは、エラーをトリガする具象な入力を提供する必要がある。然るに、ソフトウェアプログラムにおける十分に多くのパス訓練し且つまれなバグを捕らえる高品質のテストスイートを保持することは困難である。

0004

記号的実行は、ソフトウェアプログラムを動的に解析するための技術である。記号的実行は、実際のデータに代えてシンボリック値を入力値として使用し、プログラム変数の値をシンボリック表現として表す。結果として、記号的に実行されるソフトウェアプログラムによって計算される出力は、シンボリック入力の関数として表される。記号的実行により、ソフトウェアプログラム内の各パスは記号的に実行されてよい。

0005

幾つかの動的チェッカーは記号的実行を実施し、記号的実行に基づく動的チェッカーと呼ばれることがある。従来の記号的実行に基づく動的チェッカーは、ヌルポインタエラー及び境界外(out-of-bound)アクセスエラーを含む単純なメモリエラーの検出のような、限られた欠陥検出を有する。更に、従来の記号的実行に基づく動的チェッカーにおける検出可能な欠陥のタイプは、検出される欠陥のタイプをユーザが容易に変更することができないようにハードコーディングされる。

0006

本願で請求される対象は、如何なる欠点も解消し又は先に記載されたような環境においてのみ動作する実施形態に制限されない。むしろ、この背景は、本願で記載される幾つかの実施形態が実施され得る一例としての技術範囲を説明するためにのみ提供される。

発明が解決しようとする課題

0007

本発明は、エラー検出が改善された、ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体を提供することを目的とする。

課題を解決するための手段

0008

実施形態の一態様に従って、ソフトウェアプログラムを解析する方法は、ソフトウェアプログラムを中間表現へとコンパイルすることを含む。方法は、中間表現において、チェックパターンにおけるパターン整合する命令を見つけることを更に含む。方法は、チェックパターンにおいて特定されるアクションに従って命令が変更されるインストルメントされた中間表現を生成することを更に含む。方法は、インストルメントされた中間表現を記号的に実行することを更に含む。

0009

本願で記載される実施形態の目的及び利点は、少なくとも、特に特許請求の範囲において指摘される要素、特徴及び組み合わせによって、実現され達成されるであろう。

0010

上記の概要及び下記の詳細な説明はいずれも例示及び説明のためであり、請求される発明の限定でないことが理解されるべきである。

発明の効果

0011

本願発明の実施形態によれば、具象入力を手動入力することに伴う時間及び労力を軽減し且つ全てのエラーが特定される可能性を改善するように具象入力を供給することなしにソフトウェアプログラムを解析することが可能となる。

図面の簡単な説明

0012

例となる関数、対応するテスト関数、及び従来の動的チェッカーによって生成される対応するエラーレポートを表す。
図1の例となる関数、及び記号的実行に基づく動的チェッカーによって生成される対応するエラーレポートを表す。
ソフトウェアプログラムを解析するシステムの例のブロック図である。
図3のシステムで実施され得るチェックパターンの様々な例を表す。
記号的実行に基づく動的チェッカーを用いてソフトウェアプログラムを解析する処理フローを概略的に表す。
記号的実行に基づく動的チェッカーを用いてソフトウェアプログラムを解析する方法の例のフローチャートである。
記号的実行に基づく動的チェッカーを用いてソフトウェアプログラムを解析するよう配置されるコンピュータ装置の例を表すブロック図である。

実施例

0013

例となる実施形態は、添付の図面の使用を通じて、更なる特異性及び詳細を伴って記載及び説明されるであろう。

0014

図1は、例となる関数102と、対応するテスト関数104と、従来の動的チェッカー108によって生成される対応するエラーレポート106とを表す。より詳細に、例となる関数102は、エラーを試験されているソフトウェアプログラムの部分であってよく、“func.c.”と呼ばれ得る。テストスイート(図示せず。)は、関数102を試験するためにユーザによって手動入力された様々な具象入力を含む。テスト関数104は、関数102へ送られるべき0、100及び200の値を含む具象入力を含み、“test.c.”と呼ばれ得る。関数102は2つの“if”記述を含むので、テスト関数104は、関数102における全ての可能なパスをトラバースするよう3つの具象入力を含む。

0015

動作において、従来の動的チェッカー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を生成する。

0016

func(100)及びfunc(200)もテスト関数104によって呼び出され、エラーレポート106から、func(200)がメモリリークエラーをもたらすことが分かる。

0017

上記の例によって例示されるように、比較的簡単な関数102の全てのパスを実行し且つまれなバグ捕らえるには、3つの適切に選択された具象入力を要する。そのような具象入力は、通常は、ユーザ、例えば、関数102のプログラマによって手動で特定される。より複雑な関数及び/又は多数の関数を呼び出すプログラムに関し、全てのパスを実行し及び/又は全てのまれなバグを捕らえるよう十分且つ適切な具象入力を特定することは、複雑であり、時間がかかり、及び/又はユーザにとって間違いを起こしやすいことがある。

0018

然るに、本願で論じられる幾つかの実施形態は、プログラム可能な記号的実行に基づく動的チェッカーに関する。幾つかの実施形態において、プログラム可能な記号的実行に基づく動的チェッカーは、具象入力を供給することなしにソフトウェアプログラムを解析して、具象入力を手動入力することに伴う時間及び労力を軽減し且つ全てのエラーが特定される可能性を改善するよう構成されてよい。

0019

本発明の実施形態は、添付の図面を参照して説明されるであろう。

0020

図2は、図1の例となる関数102と、本願で記載される少なくとも1つの実施形態に従って配置される記号的実行に基づく動的チェッカー202(以降「チェッカー202」)によって生成される対応するエラーレポート204とを表す。概して、チェッカー202は、1又はそれ以上のパターンに従ってアサーションを挿入することによって、対象のプログラム、例えば、関数102をインストルメントするよう構成されてよい。パターンは、デフォルトのパターン及び/又はユーザによって特定されるパターンを含んでよい。幾つかの実施形態において、インストルメンテーションは、対象のプログラムのコンパイルされたバージョンのような、対象のプログラムの中間表現に対して実行される。然るに、インストルメンテーションは言語非依存であってよい。

0021

実施例において、例えば、チェッカー202は、関数102又は関数102を含むソフトウェアプログラムを中間表現へとコンパイルしてよい。チェッカー202は、中間表現において、対応するチェックパターンにおけるパターンと整合する命令を探して見つけてよい。チェッカー202は、対応するチェックパターンにおいて特定されるアクションに従って、整合した命令が変更されるインストルメントされた中間表現を生成してよい。例えば、命令は、以下で更に詳細に記載されるように対応するエラーレポートへの呼び出しを含む差し替え用命令によって置換されてよい。チェッカー202は次いで、インストルメントされた中間表現を記号的に実行してよく、関数102内、すなわち、より一般的には、対応するソフトウェアプログラム内の1又はそれ以上のエラーを示すエラーレポート204のようなレポートを生成してよい。

0022

図3は、本願で記載される少なくとも1つの実施形態に従って配置される、ソフトウェアプログラムを解析する例となるシステム300のブロック図である。システム300は、本願記載されるようにソフトウェアプログラムを解析するようソフトウェアエディタに含まれてよく、及び/又は該ソフトウェアエディタと協働してよい。システム300は、記号的実行に基づく動的チェッカー302(以降「チェッカー302」)と、チェックパターンデータベース304とを有する。チェッカー302は、図2のチェッカー202の実施例である。

0023

チェッカー302は、コンパイラ306と、アサーション・インストルメンテーションモジュール308と、記号的実行モジュール310とを有してよい。コンパイラ306と、アサーション・インストルメンテーションモジュール308と、記号的実行モジュール310とを有するチェッカー302は、ソフトウェア、ハードウェア、又はそれらの何らかの組み合わせにおいて実施されてよい。実施例において、コンパイラ306、アサーション・インストルメンテーションモジュール308及び記号的実行モジュール310は、本願で記載される機能及び動作を実行するよう処理装置によって実行される、メモリのような非一時的なコンピュータ可読媒体に記憶されたコンピュータ命令として実施される。然るに、図3に表されていないとしても、システム300は、非一時的なコンピュータ可読媒体、処理装置、及び/又は他のハードウェアを更に有してよい。

0024

システム300は、全体として高度なソフトウェアコードを有するソフトウェアプログラム312を受け取るよう構成されてよい。ソフトウェアプログラム312の高度なソフトウェアコードは概して、テキストのような、ヒトが読める形式におけるソフトウェアコードを含んでよい。例えば、ソフトウェアプログラム312の高度なソフトウェアコードは、Perl、C、C++、C#、Java(登録商標)、JavaScript(登録商標)、Phython、Ruby、アセンブリ言語、Fortran、COBOLSQL、及びPHPを含む(がこれらに限られない)様々な種類のソフトウェアプログラミング言語のいずれか1つにおいて記述されてよい。ソフトウェアプログラム312は、ソフトウェアエディタから、又は何らかの他のソースから受け取られてよい。

0025

コンパイラ306は、ソフトウェアプログラム312を受け取り、それを中間表現314へとコンパイルするよう構成されてよい。ソフトウェアプログラム312をコンパイルすることは概して、ソフトウェアプログラム312をパースすること、パースされたソフトウェアプログラム312が構文的に正しいかどうかを決定すること、及びパースされた構文的に正しいソフトウェアプログラム312を中間表現314へ変換することを含んでよい。中間表現314は概して、バイト、コード、オブジェクトコードマシンコード仮想命令LLVM、及びマシンコードの他の中間表現を含む(がこれらに限られない)機会により読み出し可能な形式におけるソフトウェアコードを含んでよい。

0026

アサーション・インストルメンテーションモジュール308は、中間表現314を受け取り、中間表現314をインストルメントするよう構成されてよい。特に、アサーション・インストルメンテーションモジュール308は、中間表現314において、対応するチェックパターン316における対応するパターンと夫々整合する1又はそれ以上の命令を見つけるよう構成されてよい。アサーション・インストルメンテーションモジュール308は更に、対応するチェックパターン316において特定されるアクションに従って、整合した命令が夫々変更されるインストルメントされた中間表現318を生成するよう構成されてよい。チェックパターン316に関する更なる詳細は以下で記載される。

0027

記号的実行モジュール310は、インストルメントされた中間表現318をアサーション・インストルメンテーションモジュール308から受け取り、インストルメントされた中間表現318を記号的に実行するよう構成されてよい。幾つかの実施形態において、インストルメントされた中間表現318は、シンボリック形式であってよく、従って、記号的実行モジュール310による記号的実行の準備ができている。代替的に、記号的実行モジュール310は、インストルメントされた中間表現318の記号的実行の前又はそれと同時に、インストルメントされた中間表現318をシンボリック形式へと変換してよい。

0028

インストルメントされた中間表現318を記号的に実行することによって、記号的実行モジュール310は、インストルメントされた中間表現318内のパスの一部、大部分、又は全てを解析してよい。インストルメントされた中間表現318内のパスの解析に基づき、記号的実行モジュール310は、インストルメントされた中間表現318内でエラーを特定するよう構成されてよい。エラーは、ユーザにより定義されたエラーに加えて、とりわけ、論理エラー、ヌルポインタアクセスのような不正なメモリ位置のアクセス、初期化されていないポインタ、ゼロ除算、境界外メモリアクセス、メモリが割り当てられるが決して割り当てを解除されないメモリリーク、未割り当てメモリの自由化を含んでよい。特定されたエラーは、レポート320において集められて出力されてよい。幾つかの実施形態において、レポート320は、ソフトウェアプログラム310を開発した及び/又は試験しているユーザ、例えば、プログラマに提示されてよい。例えば、レポート320又はその部分は、ソフトウェアエディタのステータスウィンドウに表示されてよい。

0029

上述されたように、チェックパターン316の夫々は、パターン及びアクションの両方を含んでよい。概して、パターンは2又はそれ以上の引数の間の関係を定義し、一方、アクションは条件を特定する。アクションは更に、命令がパターンによって特定される関係を有する2又はそれ以上の引数を含み且つ条件が満たされる場合に、中間表現314における命令を置換する差し替え用命令を特定してよい。

0030

図4は、本願で記載される少なくとも1つの実施形態に従って配置される図3のシステム300で実施され得るチェックパターン400の様々な例を表す。チェックパターン400はチェックパターン400A〜400Dを含む。

0031

チェックパターン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のような結果として得られるレポートにおける包含のために特定のエラーを報告する、結果として得られるインストルメントされた中間表現の記号的実行を可能にする。例えば、結果として得られるレポートにおける包含のために特定のエラーを報告することは、中間表現の、及び/又はエラーを引き起こしたインストルメントされた中間表現の、呼び出されるエラーレポートに基づきエラーのタイプを報告すること、及び/又はソフトウェアプログラムの対応する行を報告することを含んでよい。

0032

チェックパターン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が、整合する命令において使用される対応する特定の引数によって満たされるところの条件及びエラーレポート呼び出しの両方を含んでよい。

0033

チェックパターン400A及び400Bは、ヌルポインタアクセスエラー及びゼロ除算エラーを夫々含む一般的な又は既知のエラーを検出するために、本願で記載される実施形態に従って使用され得るチェックパターンの例である。本願で記載されるような適切なチェックパターンを用いて検出され得る一般的な又は既知のエラーの例には、とりわけ、論理エラー、ヌルポインタアクセスのような不正なメモリ位置のアクセス、初期化されていないポインタ、ゼロ除算、境界外メモリアクセス、メモリが割り当てられるが決して割り当てを解除されないメモリリーク、未割り当てメモリの自由化があるが、これらに限られない。

0034

代替的に、又は追加的に、チェックパターンは、ユーザにより定義されるエラーを検出するために、本願で記載される実施形態に従って使用されてよい。チェックパターン400C及び400Dは、ユーザにより定義されるエラーを検出するために使用され得るチェックパターンの例である。特に、チェックパターン400Cは、計算結果の範囲が閾値に満たないかどうかを検出するために使用されてよく、チェックパターン400Dは、コードの一部が閾回数以内で実行されるかどうかを検出するために使用されてよい。他のチェックパターンが、他のユーザ定義エラーを検出するために定義されて使用されてよい。

0035

チェックパターン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の閾値に満たないかどうかを検出することを可能にする。

0036

チェックパターン400Dは、既に記載されたチェックパターン400Cと同じパターンを含む。チェックパターン400Dは、条件“if(user_count>=10)”と、エラーレポート呼び出し“call report_many_executions”を含む差し替え用命令“%i”とを両方とも特定するアクション(Action:)を更に含む。代替的に、又は追加的に、差し替え用命令は、差し替え用命令において単に代替物となるいずれかのジェネリック型引数、例えば、%1、%2が、整合する命令において使用される対応する特定の引数によって満たされるところの条件及びエラーレポート呼び出しの両方を含んでよい。このように、チェックパターン400Dは、ユーザが、コードの一部がこの例では10の閾回数以内で実行されるかどうかを検出することを可能にする。

0037

図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以上のパターンを含んでよい。更に、パターンの夫々は、上記の同じパターン及び/又は何らかの他の所望のパターンを含んでよい。

0038

加えて、図4のチェックパターン400の夫々は、単一の差し替え用命令“%i”を含む。代替的に、又は追加的に、1又はそれ以上のチェックパターンは複数の差し替え用命令%i1、%i2、・・・、%iNを含んでよい。

0039

図5は、本願で記載される少なくとも1つの実施形態に従って配置される記号的実行に基づく動的チェッカー(以降「チェッカー」)を用いてソフトウェアプログラムを解析する処理フロー500を概略的に表す。処理フロー500は、図3のチェッカー302との関連で記載される。

0040

チェッカー302はソフトウェアプログラム502を受け取る。ソフトウェアプログラム502は、図3のソフトウェアプログラム312の実施例である。コンパイラ306は、ソフトウェアプログラム502を中間表現504へとコンパイルしてよい。中間表現504は、図3の中間表現314の実施例である。アサーション・インストルメンテーションモジュール308は中間表現504を受け取り、更に1又はそれ以上のチェックパターン506を受け取る。チェックパターン506は、図3のチェックパターン316の実施例である。

0041

図5に表されているように、チェックパターン506は、ヌルポインタアクセスエラーを検出する第1のチェックパターン508と、ゼロ除算エラーを検出する第2のチェックパターン510を含む。第1のチェックパターン508は、“store %1,%2”のパターン508Aを含み、第2のチェックパターン510は、“%3=fdiv%1,%2”のパターン510Aを含む。然るに、アサーション・インストルメンテーションモジュール308は、パターン508A、510Aのいずれか一方又は両方に整合するあらゆる命令を中間表現504から検索する。

0042

例示される実施形態では、アサーション・インストルメンテーションモジュール308は、中間表現504において、パターン508Aに整合する命令504Aを見つける。然るに、アサーション・インストルメンテーションモジュール308は、パターン508Aのアクションにおいて特定される条件508Bが命令504Aにおける引数のうちの適切な1又はそれ以上によって満足されるかどうかを評価する。特に、例示される実施形態では、アサーション・インストルメンテーションモジュール308は、命令504Aにおける第2の引数、すなわち、%ptrがゼロに等しいかどうかを評価する。条件508Bが満足されない場合は、アサーション・インストルメンテーションモジュール308は、同じか又は他のパターンに整合する他の命令を中間表現504において探してよい。しかし、中間表現504の2行目が%ptrにゼロの値を割り当てるので、条件504Bは満足される。

0043

このように、アサーション・インストルメンテーションモジュール308は、チェックパターン508において特定されるアクションに従って命令504Aが変更されるインストルメントされた中間表現512を生成する。特に、例示される例では、命令504Aは、インストルメントされた中間表現において当該命令をチェックパターン508のアクションにおいて特定される差し替え用命令、すなわち、インストルメントされた中間表現512において512Aで表される、条件508B及びエラーレポート呼び出し508Cの両方を含む差し替え用命令により置換することによって、変更される。図5で表されるように、テキスト512Aは、差し替え用命令に含まれる条件の引数、すなわち、代替物%2が命令504において使用される対応する特定の引数、すなわち、%ptrによって満たされるところの、パターン508Aのアクションにおいて特定される差し替え用命令を含む。

0044

図6は、本願で記載される少なくとも1つの実施形態に従って配置される記号的実行に基づく動的チェッカー(以降「チェッカー」)を用いてソフトウェアプログラム602を解析する例となる方法600のフローチャートである。方法600は、幾つかの実施形態において、図2又は図3のチェッカー202又は302のようなチェッカーによって実行される。別個のブロックとして表されているとしても、様々なブロックは、所望の実施に依存して、追加のブロックに分けられ、より少ないブロックにまとめられ、又は削除されてよい。方法600は、入力としてソフトウェアプログラム602及び1以上のチェックパターン604の両方を受け取ってよい。

0045

方法600は、ソフトウェアプログラムが中間表現へとコンパイルされるブロック606で開始してよい。

0046

ブロック608で、中間表現において、チェックパターン604の1つにおけるパターンに整合する命令が見つけられる。パターンに整合する命令を見つける前に、方法600は概して、チェックパターン604のうちの1以上の対応するチェックパターンにおける1以上のパターンに整合する命令を中間表現から探すことを含んでよい。

0047

ブロック610で、チェックパターン604の対応する1つにおいて特定されるアクションに従って命令が変更されるインストルメントされた中間表現が生成される。それらの及び他の実施形態において、チェックパターンにおいて特定されるアクションに従って命令が変更されるインストルメントされた中間表現は、チェックパターンに含まれる差し替え用命令により中間表現における命令を置換することを含んでよい。更に、上述されたように、パターンは、2又はそれ以上の引数の間の関係を定義してよい。アクションは、条件と、命令がパターンによって特定される関係を有する2又はそれ以上の引数を含み且つ条件が満たされる場合に中間表現における命令を置換する差し替え用命令とを特定してよい。

0048

ブロック612で、インストルメントされた中間表現は記号的に実行される。

0049

ブロック614で、レポート616が、インストルメントされた中間表現の記号的実行に基づき生成される。レポートは、ソフトウェアプログラム602内の1又はそれ以上のエラーを示してよい。

0050

然るに、本願で記載される幾つかの実施形態は、記号的実行に基づく動的チェッカーについての検出可能な欠陥タイプが、中間表現をインストルメントすることによってプログラムされることを可能にすることができる。代替的に、又は追加的に、本願で記載される幾つかの実施形態は、パターンと対応するアクションとの組において、検出可能な欠陥タイプを表してよい。

0051

業者には明らかなように、本願で開示されるこの及び他の処理及び方法に関して、そのような処理及び方法において実行される機能は異なる順序で実施されてよい。更に、説明されるステップ及び動作は単に例として提供されており、ステップ及び動作の幾つかは、開示される実施形態の本質から逸脱することなしに、任意であり、より少ないステップ及び動作にまとめられ、又は追加のステップ及び動作に拡張されてよい。

0052

例えば、方法600は、複数のチェックパターンの対応する1つにおいて夫々含まれる複数のパターンのいずれかと整合する命令を中間表現から探すことを更に含んでよい。パターンの対応する1つと整合する夫々の命令に関し、中間表現からの対応する命令は、チェックパターンの対応する1つにおいて特定されるアクションに従って変更されてよい。加えて、パターンのいずれかと整合する命令を中間表現から探す前に、複数のチェックパターンの1つとして含めるよう利用可能なチェックパターンの組から少なくとも第1のチェックパターンを選択するのに有効なユーザ入力が受け取られてよい。方法600は、少なくとも第1のチェックパターンを選択するのに有効なユーザ入力を受け取る前に、第1のチェックパターンを定義するのに有効なユーザ入力を受け取ることを更に含んでよい。然るに、本願で記載される幾つかの実施形態は、ユーザが、特定の欠陥を検出し及び/又はソフトウェアプログラムを解析する場合に考慮されるチェックパターンのデータベース若しくは他のリポジトリから1以上のチェックパターンを選択するためのチェックパターンを定義することを可能にする。

0053

本願で記載される幾つかの実施形態は、図6におけるブロック606、608、610、612及び/又は614のような図6の方法600に含まれる動作のうちの1又はそれ以上を実行するよう処理装置によって実行可能なコンピュータ命令を記憶した非一時的なコンピュータ可読媒体のような製品、及び/又はその変形を含む。非一時的なコンピュータ可読媒体及び処理装置は、例えば、図3のシステム300に含まれてよい。

0054

図7は、本願で記載される少なくとも1つの実施形態に従って、記号的実行に基づく動的チェッカー(以降「チェッカー」)726を用いてソフトウェアプログラムを解析する用は位置される例となるコンピュータ装置700を表すブロック図である。コンピュータ装置700は、例えば、図3のシステム300に含まれるか又は該システム300に対応してよい。基本構成702において、コンピュータ装置700は、通常、1又はそれ以上のプロセッサ704と、システムメモリ706とを有する。メモリバス708が、プロセッサ704とシステムメモリ706との間の通信のために使用されてよい。

0055

所望の構成に依存して、プロセッサ704は、マイクロプロセッサ(UP)、マイクロコントローラ(UC)、中央演算処理装置(CPU)、デジタル信号プロセッサ(DSP)、それらの何らかの組み合わせ、又は他の適切な処理装置を含む(がこれらに限られない)如何なるタイプであってもよい。プロセッサ704は、レベル1キャッシュ710及びレベルキャッシュ712のようなキャッシングの1又はそれ以上のレベルと、プロセッサコア714と、レジスタ716とを有してよい。プロセッサコア714の例には、数値演算ユニット(AUL)、浮動小数点演算ユニットFPU)、DSPコア、又はそれらの何れかの組み合わせがある。また、例となるメモリコントローラ718がプロセッサ704とともに使用されてよく、あるいは、幾つかの実施において、メモリコントローラ718はプロセッサ704の内部部品であってよい。

0056

所望の構成に依存して、システムメモリ706は、揮発性メモリ(例えば、RAM)、不揮発性メモリ(例えば、ROM、フラッシュメモリ、等)、又はそれらの何れか組み合わせを含む(がこれらに限られない)如何なるタイプであってもよい。システムメモリ706は、OS720と、1又はそれ以上のアプリケーション722と、プログラムデータ724とを有してよい。アプリケーション722は、図6の方法600に関して記載されるようなソフトウェアプログラムを解析する動作を含む本願で記載される動作又は機能の1又はそれ以上を実行するよう配置されるチェッカー726を有してよい。プログラムデータ724は、テスト対象及びチェックパターン728を含んでよい。テスト対象は、例えば、チェッカー726によって解析されているソフトウェアプログラムを含んでよい。テスト対象及びチェックパターン728は、テスト対象においてエラーを検出するよう上述されたように解析及び/又は使用されてよい。幾つかの実施形態において、アプリケーション722は、図6の方法600のようなソフトウェアプログラムを解析する方法の実施が本願で記載されるように提供され得るように、OS720でプログラムデータ724により動作するよう配置されてよい。

0057

コンピュータ装置700は、基本構成702と他の装置及びインターフェースとの間の通信を助けるよう追加の特徴又は機能及び追加のインターフェースを有してよい。例えば、バスインターフェースコントローラ730が、記憶インターフェースバス734を介した基本構成702と1以上のデータ記憶装置732との間の通信を助けるために使用されてよい。データ記憶装置732は、リムーバブル記憶装置736、非リムーバブル記憶装置738、又はそれらの組み合わせであってよい。リムーバブル記憶装置及び非リムーバブル記憶装置の例には、2、3例を挙げると、フレキシブルディスクドライブ及びハードディスクドライブ(HDD)のような磁気ディスク装置コンパクトディスク(CD)ドライブ又はデジタルバータイルディスク(DVD)ドライブのような光ディスクドライブソリッドステートドライブSSD)、並びにテープドライブがある。コンピュータ記憶媒体の例には、コンピュータ可読命令、データ構造プログラムモジュール、又は他のデータのような情報の記憶のための何らかの方法又は技術において実施される揮発性及び不揮発性の、リムーバブル及び非リムーバブルの媒体がある。

0058

システムメモリ706、リムーバブル記憶装置736、及び非リムーバブル記憶装置738は、非一時的なコンピュータ可読媒体の例である。非一時的なコンピュータ可読媒体の例には、RAM、ROM、EEPROM、フラッシュメモリ若しくは他のメモリ技術CD−ROM、デジタルバーサタイルディスク(DVD)若しくは他の光ディスク磁気カセット磁気テープ磁気ディスク記憶若しくは他の磁気記憶装置、又は所望の情報を記憶するために使用されてよく且つコンピュータ装置700によってアクセスされ得る何らかの他の非一時的な媒体があるが、これらに限られない。如何なるそのような非一時的なコンピュータ可読媒体も、コンピュータ装置700の部分であってよい。

0059

コンピュータ装置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を含む。

0060

ネットワーク通信リンクは、通信媒体の一例であってよい。通信媒体は、通常、搬送波若しくは他の伝送メカニズムのような変調データ信号におけるコンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータによって具現されてよく、如何なる情報伝送媒体も含んでよい。「変調データ信号」は、その特性のうちの1又はそれ以上が信号における情報を符号化するように設定又は変更されている信号であってよい。一例として、制限なしに、通信媒体は、有線ネットワーク又は直接配線接続のような有線媒体と、音響、無線周波数(RF)、マイクロ波赤外線、及び頼む千媒体のような無線媒体とを有してよい。本願で使用される語「コンピュータ可読媒体」は、記憶媒体及び通信媒体の両方を含んでよい。

0061

コンピュータ装置700は、携帯電話機パーソナルデジタルアシスタント(PDA)、パーソナルメディアプレイヤ装置無線ウェブウォッチ装置、パーソナルヘッドセット装置特定用途向け装置、又はこれらの機能のいずれかを含む複合型装置のようなスモールフォームファクタポータブル(又はモバイル電子機器の一部として実施されてよい。コンピュータ装置700はまた、ラップトップコンピュータ及び非ラップトップコンピュータの両構造を含むパーソナルコンピュータとして実施されてよい。

0062

本願で挙げられている全ての例及び条件付き言語は、当該技術を促進することに発明者によって寄与された発明及び概念読む者が理解するのを助ける教示を目的としており、そのような具体的に挙げられている例及び条件に制限されないと解釈されるべきである。本発明の実施形態が詳細に記載されてきたが、様々な変更、置換及び代替が本開示の精神及び適用範囲から逸脱することなしにそれらに対してなされ得ることが理解されるべきである。

0063

上記の実施形態に関し、更に以下の付記を開示する。
(付記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に記載の非一時的なコンピュータ可読媒体。

0064

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 システムメモリ

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

関連する公募課題一覧

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ