(57)【特許請求の範囲】
【請求項１】
アプリケーションコードの静的解析で生成される誤検出の効率的な排除のための方法であって、
静的アナライザーモジュールを用いて複数の静的解析警告を生成するために、前記アプリケーションコードで静的解析を行うステップと、
アノテータモジュールを用いて前記複数の静的解析警告のそれぞれに対応するアサーションを生成するステップと、
ｃｎｖ変数識別モジュールを用いて静的解析により１以上の全種類非決定的値（ｃｏｍｐｌｅｔｅ−ｒａｎｇｅ  ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  ｖａｌｕｅ（ｃｎｖ））変数のセットを演算するステップであって、前記ｃｎｖ変数は、非決定論的選択関数によって生成された非決定論的値の全範囲を取る変数である、ステップと、
ｃｎｖ変数チェッカーモジュールを用いて、生成された前記アサーションに関する１以上の変数が、アサーションプログラムポイントのそれぞれにおいてｃｎｖ変数であるかチェックするステップと、
冗長性呼び出し識別モジュールを用いて、生成された前記アサーション内の１つ以上のｃｎｖ変数の存在に基づいて、前記複数の静的解析警告のそれぞれに対応する各生成されたアサーションに対する１以上の検証呼び出しが冗長であるか判定するステップと、
誤検出を効率的に排除させるために、１以上の判定された冗長性検証呼び出しをスキップするステップと、
アサーション検証モジュールを用いることにより、１以上の非冗長性検証呼び出しを検証するためにモデルチェッカーを呼び出すステップと、
検証の結果に応じて、誤検出として、対応する静的解析警告を、前記アサーション検証モジュールによって排除するステップと、
を備える方法。
【請求項２】
プログラムポイントでの変数のｃｎｖ状態は、変数の値を割り当てる又は制限し、前記プログラムポイントに到達するパスに依存し、前記変数の前記ｃｎｖ状態は、前記変数がｃｎｖ変数であるか、非ｃｎｖ変数であるかを示す請求項１に記載の方法。
【請求項３】
前記ｃｎｖ状態の演算は、少なくとも１つの静的解析技術を用いて、制御依存及びデータ依存の効果を考慮すること、及び少なくとも１つの近似を用いてそれらを演算することを含む請求項２に記載の方法。
【請求項４】
前記静的解析技術は、データフロー解析、アブストラクト‐インタープリテーション及び制御フローグラフトラバーサルを含む請求項３に記載の方法。
【請求項５】
前記変数が、プログラムポイントに到達する全てのパスに沿ってｃｎｖ変数であるとき、変数は、当該プログラムポイントでのｍｕｓｔ‐ｃｎｖ変数といわれる、請求項１に記載の方法。
【請求項６】
前記変数が、プログラムポイントに到達する一部のパスに沿ってｃｎｖ変数であるが、必ずしも前記プログラムポイントに到達する全てのパスに沿ってｃｎｖ変数であるというわけではないとき、変数は、当該プログラムポイントでのｍａｙ−ｃｎｖ変数といわれる、請求項１に記載の方法。
【請求項７】
演算で用いられる近似の性質のため、冗長性検証呼び出しの識別でのｍａｙ−ｃｎｖ変数の影響は、冗長性検証呼び出しの識別でのｍｕｓｔ‐ｃｎｖ変数の影響と異なる、請求項１に記載の方法。
【請求項８】
冗長性検証呼び出しの識別は、前記アサーションプログラムポイントでのｃｎｖ変数となるべき単一又は全てのアサーション変数の分類を用いる請求項１に記載の方法。
【請求項９】
アサーションコードの静的解析での誤検出の効率的な排除のためのシステムであって、  プロセッサと、
前記プロセッサと通信可能に結合され、前記プロセッサによって読み取り可能な命令を含むメモリと、
複数の静的解析警告を生成するために、アプリケーションコードを解析するように構成される静的アナライザーモジュールと、
前記複数の静的解析警告のそれぞれに対応するアサーションを生成するように構成されるアノテータモジュールと、
静的解析技術を用いて前記アプリケーションコードの各アサーションに対応する１以上のｃｎｖ変数のセットを演算するように構成され、前記ｃｎｖ変数は、非決定論的選択関数によって生成された非決定論的値の全範囲を取る変数である、全種類非決定的値（ｃｏｍｐｌｅｔｅ−ｒａｎｇｅ  ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  ｖａｌｕｅ（ｃｎｖ））変数識別モジュールと、
生成された前記アサーションに関する変数が、アサーションプログラムポイントのそれぞれにおいてｃｎｖ変数であるかチェックするように構成されるｃｎｖ変数チェッカーモジュールと、
生成された前記アサーション内の１つ以上のｃｎｖ変数の存在に基づいて、前記複数の静的解析警告のそれぞれに対応する、各生成されたアサーションに対する１以上の検証呼び出しが冗長であるか識別するように構成される冗長性呼び出し識別モジュールであって、前記システムは、誤検出を効率的に排除するために、１以上の判定された冗長性検証呼び出しをスキップする、冗長性呼び出し識別モジュールと、
１以上の非冗長性検証呼び出しを検証するためにモデルチェッカーを呼び出し、検証の結果に応じて、誤検出として、対応する静的解析警告を排除するように構成されるアサーション検証モジュールと、
を備えるシステム。
【請求項１０】
前記アサーション検証モジュールは、コンテクスト拡張又はインクリメンタル検証アプローチが用いられるかどうかに応じて、一回以上アサーションを識別する請求項９に記載のシステム。
【請求項１１】
アプリケーションコードの静的解析における誤検出の効率的な排除のための命令を記憶するコンピュータ可読媒体であって、前記命令は、
静的アナライザーモジュールを用いて複数の静的解析警告を生成するために、前記アプリケーションコードで静的解析を行うステップと、
アノテータモジュールを用いて前記複数の静的解析警告のそれぞれに対応するアサーションを生成するステップと、
ｃｎｖ変数識別モジュールを用いて静的解析により１以上の全種類非決定的値（ｃｏｍｐｌｅｔｅ−ｒａｎｇｅ  ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  ｖａｌｕｅ（ｃｎｖ））変数のセットを演算するステップであって、前記ｃｎｖ変数は、非決定論的選択関数によって生成された非決定論的値の全範囲を取る変数である、ステップと、
ｃｎｖ変数チェッカーモジュールを用いて、生成された前記アサーションに関する１以上の変数が、アサーションプログラムポイントのそれぞれにおいてｃｎｖ変数であるかチェックするステップと、
冗長性呼び出し識別モジュールを用いて、生成された前記アサーション内の１つ以上のｃｎｖ変数の存在に基づいて、前記複数の静的解析警告のそれぞれに対応する各生成されたアサーションに対する１以上の検証呼び出しが冗長であるか判定するステップと、
誤検出を効率的に排除させるために、１以上の判定された冗長性検証呼び出しをスキップするステップと、
アサーション検証モジュールを用いることにより、１以上の非冗長性検証呼び出しを検証するためにモデルチェッカーを呼び出すステップと、
検証の結果に応じて、誤検出として、対応する静的解析警告を、前記アサーション検証モジュールによって排除するステップと、
を備えるコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願及び優先権への相互参照
本願は、２０１５年９月１５日にインド国特許庁に提出された特許出願番号第３５３７／ＭＵＭ／２０１５号の利益を主張し、当該インド国特許出願の開示内容の全ては、本明細書に組み込まれる。
【０００２】
本明細書に記載される本発明は、一般的に、アプリケーションコードの静的解析から生じる解析警告から誤検出の効率的な排除に関するものであり、より具体的には、静的解析警告から誤検出の静的解析ベースの効率的な排除を容易にするシステム及び方法に関するものである。
【背景技術】
【０００３】
アプリケーションコードの欠陥検出のための静的解析技術は、ソフトウェアの品質及び信頼性を確保するために実際に広く用いられている。初めに、静的解析ツールを実行することにより、アプリケーションコードは、静的解析を用いて解析され、１以上の静的解析警告を生成する。ツールが、警告に対応するプログラムポイントにおける安全性について決定することができないときに、解析ツールによって、これらの警告は、生成され、ユーザに報告される。実際には、何度も、警告の大部分は、静的解析ツールによって用いられる概算によって誤って生成され、それらは、誤検出と呼ばれる。静的解析警告のマニュアルでのレビューは、静的解析ツールによって報告される静的解析警告から誤検出及び真のエラーをマニュアルで識別することにより、信頼できるソフトウェアを構成することの実際のニーズを満たすために不可避となっている。当該レビューがマニュアルで行われるため、マニュアルレビュー処理と関連付けられる高いコストが存在する。マニュアルレビューのコストは、静的解析結果の精度を向上させる、又は静的解析警告から誤検出を自動的に識別及び排除することによって、低減される。
【０００４】
モデル検査は、静的解析と比較して、特性識別においてより正確である。しかし、大規模なコード断片のモデル検査は、しばしば、ソフトウェアシステムのサイズ及び複雑さが増大するに従って、拡張性（スケーラビリティ）及び低いパフォーマンスの問題に直面する。これらの問題は、状態空間爆発によるモデルチェッカーによって直面される。
【０００５】
モデル検査及び静的解析は、アプリケーションコードにおいて警告を探索するためによく知られた技術である。これらの２つの技術は、ソフトウェアの品質及び信頼性を確保するために実際に価値があることが証明されているが、それらは、拡張性、精度及び効率のメトリクスで補完する。
【０００６】
補完される静的解析及びモデル検査の技術は、共に組み合わせられ、個別にそれらによって得られる結果よりも優れた結果を実現する。モデルチェッカーは、静的解析とのカスケードで用いられ、静的解析によって生成された誤検出を排除する。
【０００７】
増分（ｉｎｃｒｅｍｅｎｔａｌ）アプローチは、非常に大規模なコードアプリケーションでのモデルチェッカーの非拡張性の問題を解決するために用いられる。このアプローチは、最小コードコンテクストで開始し、その後、必要な場合にコンテクストを増加し、実際に有益となるものが探索される。このアプローチでは、アサーションのモデル検査は、コンテクストの外側から値を受け付ける変数が任意の値を取るようにモデル化されるスモール呼び出し（コーリング）コンテクストで開始する。コンテクストの外側からのこのような値を取る変数は、入力変数と呼ばれる。入力変数は、非決定的選択関数を通じて任意の値を生成することにより、初期化される。呼び出しコンテクストは、呼び出しチェインにおいてより高い場所への呼び出し元を含むために、必要な基準に拡張されてもよい。この呼び出しコンテクストが、出来る限り小さい呼び出しコンテクストを保持することによって拡張性を補助しているが、モデル検査を用いてアサーションを処理するために必要な時間を増加する同一のアサーションにためのモデルチェッカーへの複数の呼び出しを必要とする。呼び出しコンテクストの増分爆発（ｉｎｃｒｅｍｅｎｔａｌ  ｅｘｐａｎｓｉｏｎ）は、より小さいコンテクストでのモデル検査が反例を探索するときに要求される。生成される反例は、対応する入力変数への任意の値を生成するために、プログラムコードにおけるステートメントにより変数に割り当てられた値ではなく、コンテクストの外側に導入される非決定的選択関数である。すなわち、アサーションにおいて含まれる変数が、非決定的選択関数によって生成される、アサーションのポイントにおいて、任意の値を取ることが可能であるとき、アサーションは、値の一部又は値の他の組み合わせにより妨害される。このような場合には、モデルチェッカーを用いることは、対応する警告の解決での補助にはならず、アサーション検証は冗長である。
【０００８】
よって、本システム及び方法は、属性識別時に生成される静的解析警告から１以上の誤検出の静的解析ベースの効率的な排除を記述する。
【発明の概要】
【０００９】
以下は、実施形態の基本的な理解を提供するために、本開示の一部の実施形態の簡素化した概要を示す。この概要は、実施形態の広範な要約ではない。実施形態のキーとなる／クリティカルな要素を識別すること、又は実施形態の範囲を詳述することを意図するものではない。その唯一の目的は、以下に示されるより詳細な説明への序として簡素化した形態で一部の実施形態を示すためのものである。
【００１０】
前記の記載を考慮して、本明細書の実施形態は、誤検出の効率的な排除のためのモデルチェッカーへの冗長性検証呼び出しを識別するためのシステム及び方法を提供し、それにより、誤検出のモデル検査ベースの排除時のパフォーマンスを向上する。
【００１１】
一態様では、誤検出の効率的な排除のための方法を提供する。前記方法は、静的アナライザーモジュールを用いて静的解析警告を生成するために、前記アプリケーションコードで静的解析を行う。前記方法は、更に、アノテータモジュールを用いて静的解析警告のそれぞれに対応するアサーションを生成する。前記方法は、更に、ｃｎｖ変数識別モジュールを用いて静的解析により１以上の全種類非決定的値（ｃｏｍｐｌｅｔｅ−ｒａｎｇｅ  ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  ｖａｌｕｅ（ｃｎｖ））変数のセットを演算する。前記方法は、更に、ｃｎｖ変数チェッカーモジュールを用いて、１以上のアサーション変数が、アサーションプログラムポイントにおけるｃｎｖ変数であるかどうかをチェックする。更に、冗長性呼び出し識別モジュールを用いて、静的解析警告のそれぞれに対応する各生成されたアサーションに対する検証呼び出しが、冗長又は非冗長であるかどうかを判定する。また、次のステップでは、前記方法は、誤検出を効率的に排除させるために、冗長性検証呼び出しをスキップする。最終的に、最後のステップでは、誤検出の効率的な排除及びモデルチェッカの呼び出しを生じるために冗長性検証呼び出しを識別して、非冗長性アサーション検証呼び出しを識別し、アサーション検証モジュールを用いて検証の結果に応じて誤検出としての対応する静的解析警告を排除する。
【００１２】
別の態様では、アプリケーションコードの静的解析において誤検出の効率的な排除のためのシステムを提供する。前記システムは、プロセッサと、前記プロセッサと通信可能に結合され、前記プロセッサによって読み取り可能な命令を含むメモリと、複数の静的解析警告を生成するために、アプリケーションコードを解析するように構成される静的アナライザーモジュールと、前記複数の静的解析警告のそれぞれに対応するアサーションを生成するように構成されるアノテータモジュールと、静的解析技術を用いて前記アプリケーションコードの各アサーションに対応する１以上のｃｎｖ変数のセットを演算するように構成される全種類非決定的値（ｃｏｍｐｌｅｔｅ−ｒａｎｇｅ  ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  ｖａｌｕｅ（ｃｎｖ））変数識別モジュールと、生成された前記アサーションに対する変数が、アサーションプログラムポイントでのｃｎｖ変数であるか否かをチェックするように構成されるｃｎｖ変数チェッカーモジュールと、前記複数の静的解析警告のそれぞれに対応する、生成された各アサーションに対する１以上の検証呼び出しが、冗長である又は非冗長であるかどうかを識別する冗長性呼び出し識別モジュールであって、前記システムは、誤検出を効率的に排除するために、１以上の判定された冗長性検証呼び出しをスキップする、冗長性呼び出し識別モジュールと、１以上の非冗長性検証呼び出しを識別するためにモデルチェッカーを呼び出し、検証の結果に応じて、誤検出として、対応する静的解析警告を排除するアサーション識別モジュールと、を備える。
【００１３】
別の態様では、本開示は、また、データフロー解析を通じて全種類非決定的変数（以下ｃｎｖ変数という）の演算についても提供する。データフロー解析は、制御フローパスによる実行パスの静的近似に基づく。ｃｎｖ変数は、各種方法で演算され、異なる解析を用いて演算されうることが理解されるであろう。
【００１４】
本明細書に記載のブロック図は、本発明の原理を具現化する例示的なシステムの概念的な見方を示すことが当業者によって理解されるべきである。同様に、フローチャート、フロー図、状態遷移図、擬似コード等は、このようなコンピュータ装置又はプロセッサかどうかが明示的に示された、コンピュータ可読媒体で実質的に表され、コンピュータ装置又はプロセッサによってそのように実行される各種プロセスを示す。
【図面の簡単な説明】
【００１５】
本明細書の実施形態は、図面を参照しながら以下の詳細な説明からより良く理解されるであろう。
【図１】図１は、本開示の実施形態に係るアプリケーションコードの静的解析時に生成される静的解析警告からの誤検出の効率的な排除のためのシステムを示すブロック図である。
【図２】図２は、本開示の実施形態に係るアプリケーションコードの静的解析の誤検出の効率的な排除のための方法を示すブロック図である。
【発明を実施するための形態】
【００１６】
本開示の全ての特徴を示す本発明の一部の実施形態を詳細に説明する。
【００１７】
文言「構成される」、「有する」、「含む」、「備える」及びそれらの他の形式は、同等な意味であり、これら文言は、これらの文言のいずれか１つに続く事項または複数の事項のオープンなリストを意味するが、そのような事項に限定されるような排他的でクローズドなリストを意味するものではなく、また、列挙された事項のみに限定されることを意味するものではない。
【００１８】
また、本明細書及び添付の特許請求の範囲において用いられる、単数形“ａ”、“ａｎ”、“ｔｈｅ”は、文脈が明確に示していなければ、複数形も含むことを留意されなければならない。本明細書で説明されるシステム及び方法と同様又は同等な任意のシステム及び方法は、本開示の実施形態の実施又は試験に使用することができるが、好ましい、システム及び方法が説明される。説明及び理解の目的のための以下の説明では、本開示の範囲を限定しないことを意図する多数の実施形態を参照する。
【００１９】
本開示の１以上のコンポーネントは、明細書の理解のためにモジュールとして説明される。例えば、モジュールは、ロジックゲート、半導体デバイス、集積回路又は他のディスクリート構成要素を含むハードウェア回路において内蔵型の構成要素を含んでもよい。モジュールは、また、例示のプロセッサのためのハードウェアエンティティにより実行されるソフトウェアプログラムの一部であってもよい。ソフトウェアプログラムとしてのモジュールの実装は、プロセッサ又は他のハードウェアエンティティにより実行されるべきロジカルな命令のセットを含んでもよい。
【００２０】
開示される実施形態は、本開示の単なる例示であり、様々な形態で具体化されてもよい。
【００２１】
図面に示される要素は、以下により詳細に説明されるように相互運用する。しかし、詳細な説明を示す前に、以下の全ての説明は、記載される特定の実施にかかわらず、限定的ではなく、事実上、例示的であることが留意される。例えば、実施の、選択された態様、特徴又は構成要素は、メモリに記憶されるように示されるが、消耗警告システム及び方法と一致するシステム及び方法の全部又は一部は、他の機械可読媒体に亘って分散されて記憶される、又は他の機械可読媒体から読み出されてもよい。
【００２２】
本開示の方法のステップは、入力で動作し、出力を生成することにより、本開示の機能を実行するために、コンピュータ可読媒体上で明らかに具体化されたプログラムを実行する１以上のコンピュータプロセッサによって行われてもよい。適切なプロセッサは、実施例により、汎用又は特殊用途のマイクロプロセッサの両方を含む。一般的に、プロセッサは、（例えば、リードオンリーメモリ及び／又はランダムアクセスメモリのような）メモリから命令及びデータを受信し（読み出し）、メモリに命令及びデータを書き込む（記憶する）。コンピュータプログラム命令及びデータを明らかに具体化するために適したストレージデバイスは、例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭ及びフラッシュメモリデバイスを含む、半導体メモリデバイスのような不揮発性メモリ、内蔵ハードディスク及びリムーバブルディスクのような磁気ディスク、及びＣＤ−ＲＯＭの全ての形態を含む。前述のいずれかは、特別に設計されたＡＳＩＣ（ａｐｐｌｉｃａｔｉｏｎ−ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔｓ）又はＦＰＧＡｓ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙｓ）によって補われる又は組み込まれてもよい。コンピュータは、一般的に、内蔵ディスク（図示せず）又はリムーバブルディスクのような非一時的コンピュータ可読媒体からプログラム及びデータを受信する（読み出す）、及び非一時的コンピュータ可読媒体にプログラム及びデータを書き込む（記憶する）こともできる。
【００２３】
前述のことを考慮して、本明細書の実施形態は、誤検出の効率的な排除のための冗長性検証呼び出しを識別するためのシステム及び方法を提供し、これにより、誤検出のモデル検査ベースの排除時の性能を向上させる。一態様では、本開示は、制御フローパス（データフロー解析）による実行パスの静的近似を通じてｃｎｖ変数の演算のためにも提供する。
【００２４】
用語集−説明付きの、実施形態で用いられる用語
本明細書で説明された開示は、当業者に本開示を理解させるためのいくつかの用語及び概念を定義する。
ａ）アサーション変数（Ａｓｓｅｒｔｉｏｎ  Ｖａｒｉａｂｌｅｓ）：アサーションは、演算式で生じる変数の値での制約を記述するブール演算式（ｂｏｏｌｅａｎ  ｅｘｐｒｅｓｓｉｏｎ）である。アサーションで生じる変数は、アサーション変数と呼ばれる。
ｂ）入力変数：プロシージャ（ｐｒｏｃｅｄｕｒｅ）での演算は、呼び出しコンテクストからの値を取るグローバル変数及び仮引数に依存しうる。このような変数は、プロシージャの入力変数と呼ばれる。入力変数は、プロシージャ特有であり、それらは、可変変数である。これらの変数は、プロシージャトランジティブリ（ｐｒｏｃｅｄｕｒｅ  ｔｒａｎｓｉｔｉｖｅｌｙ）によって呼び出される（渡される）関数におけるパスを含むプロシージャにおけるパスのいずれかに書き込まれる前に、読み出される。
ｃ）非決定的選択関数（Ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｃｈｏｉｃｅ  Ｆｕｎｃｔｉｏｎｓ）：誤検出のモデル検査ベース排除時に、アサーションは、アサーションがプロシージャ又はそのトランジティブリコールド（ｔｒａｎｓｉｔｉｖｅｌｙ  ｃａｌｌｅｄ）関数のうちの１つのいずれかのステートメントに現れるプロシージャのコンテクストにおいて識別される。アサーション検証の拡張性のため、プロシージャは、呼び出し階層（ｃａｌｌ  ｈｉｅｒａｒｃｈｙ）でのアサーションにできるだけ近くなるように選択されてもよく、プロシージャの呼び出し元は無視される。しかし、プロシージャの入力変数へのコード割り当て値が無視されるため、これは、不正確さのコストを強いられ、アサーションは、入力の任意の値に対して識別されるべきである。任意の値は、非決定的選択関数を用いることにより、入力変数に割り当てられる。これらの関数によって生成される非決定的な値の範囲は、それらのリターンタイプによって決定される。
ｄ）全範囲非決定的値変数（Ｃｏｍｐｌｅｔｅ−ｒａｎｇｅ  Ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｖａｌｕｅ  Ｖａｒｉａｂｌｅｓ）：非決定的選択関数によってプロシージャの入力変数に割り当てられる値は、データ依存性の結果としてプロシージャにおける他の変数に割り当てられてもよい。これらの値は、制御又はデータ依存性を通じても制約されてもよい。非決定論的値の全範囲を取る変数は、全範囲非決定的値変数（ｃｎｖ変数）として分類され、プログラムステートメントにより割り当てられる固定値である他の変数のセットは、非ｃｎｖ変数として分類される（これらは、部分的な範囲のみを取る又は非決定的値の範囲にない）。
ｅ）全範囲非決定的値式（Ｃｏｍｐｌｅｔｅ−Ｒａｎｇｅ  Ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｖａｌｕｅ  Ｅｘｐｒｅｓｓｉｏｎｓ）：ステートメントで生じる式は、同一ポイントでの、同一コンテクストにおけるｃｎｖ変数を用いる評価が、式の値の全範囲で生じる場合、プロシージャの呼び出しコンテクストにおいてｃｎｖ式と呼ばれる。
【００２５】
本開示は、冗長性呼び出しを識別する及び排除することにより、アサーションにためのモデルチェッカー呼び出しの数を最小化することを本明細書で開示する。変数がアサーションのポイントでの全ての取り得る値を許可されない非冗長性呼び出しは、モデルチェッカーによって識別される。本開示では、ｃｎｖ変数の演算に影響を与える要因は、以下のようになる。
ａ）コンテクスト感度（Ｃｏｎｔｅｘｔ  Ｓｅｎｓｉｔｉｖｉｔｙ）：非決定的選択関数を含む割り当ては、アサーションの検証時／検証のための考慮下で呼び出しコンテクストを開始するプロシージャのスタートでの任意の値を入力変数に割り当てるために行われてもよい。プロシージャに対するこれらの関数に基づいて、変数は、プロシージャでのプログラムポイントにおいてｃｎｖ変数かどうかを識別される。異なるプロシージャは、それらに対する異なる入力変数を有してもよい。したがって、プログラムポイントにおける変数は、特定の呼び出しコンテクスト（プロシージャ）に対するｃｎｖ変数であるが、他の呼び出しコンテクスト（プロシージャ）ではない。
ｂ）フロー感度（Ｆｌｏｗ  Ｓｅｎｓｉｔｉｖｉｔｙ）：変数により取られる非決定的値の範囲は、プログラムポイント特有であり、異なるプログラムポイントで異なってもよい。フロー感度は、以下の２つの依存により、変数のｃｎｖ状態（変数がｃｎｖ変数であるか非ｃｎｖ変数であるか）に影響を与える：
ｉ）データ依存（Ｄａｔａ  Ｄｅｐｅｎｄｅｎｃｅ）：プログラムポイントでのｃｎｖ変数は、非ｃｎｖ変数の値に影響を与え、その状態に変換する又はその逆であってもよい。
ｉｉ）制御依存（Ｃｏｎｔｒｏｌ  Ｄｅｐｅｎｄｅｎｃｅ）：ｃｎｖ変数を含む条件は、分岐のそれらの真又は偽に沿って変数の値を制限し、よって、条件の効果の内側で非ｃｎｖ変数としてｃｎｖ変数をなす。しかし、条件の効果の外側で、非ｃｎｖ変数は、その状態を取り戻し、ｃｎｖ変数がちょうど条件の前である場合に、ｃｎｖ変数になる。
ｃ）Ｍａｙ／Ｍｕｓｔ到達可能性（Ｍａｙ／Ｍｕｓｔ  Ｒｅａｃｈａｂｉｌｉｔｙ）：プログラムポイントでの変数のｃｎｖ状態は、変数がｃｎｖであることに沿うパスに依存する。変数が、プログラムポイントに到達するパス毎に沿うｃｎｖ変数であるとき、変数は、当該ポイントにおいてｍｕｓｔ−ｃｎｖ変数であるといえる。変数が一部に沿うが、必ずしもプログラムポイントに到達する全てのパスを通じる必要はないｃｎｖ変数である場合、ｍａｙ−ｃｎｖ変数と呼ばれる。
【００２６】
モデル検査技術は、特性検証において正確であるが、拡張性が欠如しており、大規模かつ複雑なアプリケーションコードでのその広範な使用に損害を及ぼす。静的解析は、大規模かつ複雑なアプリケーションコードでのプログラミングエラーを探索可能である。しかし、静的解析の精度の欠如により、当該技術は、実際には、その多くが誤検出である多数の警告を生じる。静的解析及びモデル検査により直面されるこれらの問題を解決するために、それらは、交互に組み合わせられる（カスケード）。カスケードアプローチでは、アサーションは、静的解析により報告される各警告に対応して生成され、アサーションは、起こりうるエラー又は誤検出のいずれかとして警告を分類するために、モデルチェッカーを用いて識別される。アサーションがモデルチェッカーによって識別される場合、識別されるアサーションに対応する警告は、誤検出であり、排除される（ユーザへ最終的な報告から除去される）。モデルチェッカーによるアサーションの識別が、反例（ｃｏｕｎｔｅｒ  ｅｘａｍｐｌｅ）を生成するとき、警告は、維持し、排除されない。しかし、このアプローチは、性能が乏しいという問題を有する。
【００２７】
本明細書で提案される開示は、モデル検査の非拡張性で処理しつつ、誤検出の効率的な排除のためのシステム及び方法である。
【００２８】
本開示の例示的な実施形態に係る、アプリケーションコードの静的解析における誤検出のモデル検査ベースの効率的な排除のためのシステム（１００）は、図１に示される。システム（１００）は、プロセッサ（１０２）及びプロセッサ（１０２）と接続したメモリ（１０４）を含む。メモリ（１０２）は、静的アナライザモジュール（１０６）、アノテータモジュール（１０８）、ｃｎｖ変数識別モジュール（１１０）、ｃｎｖチェッカーモジュール（１１２）、冗長性呼び出し識別モジュール（１１４）及びアサーション検証モジュール（１１６）のような複数のモジュールを更に備える。
【００２９】
好ましい実施形態では、静的アナライザモジュール（１０６）は、複数の静的解析警告を生成するために、アプリケーションコードを解析するように構成される。これらの静的解析警告の多くは、誤って報告され、一般に、誤検出と呼ばれる。これらの誤検出は、静的解析の不正確さによるものである。
【００３０】
好ましい実施形態では、アノテータモジュール（１０８）は、アサーションを生成し、各生成されたアサーションは、複数の静的解析警告からの各静的解析警告に対応する。
【００３１】
好ましい実施形態では、ｃｎｖ変数識別モジュール（１１０）は、データフロー解析を用いて、ｃｎｖ変数の１以上のセットを演算するように構成される。ｃｎｖ変数の演算は、静的解析技術を通じたものであり、静的解析技術は、データフロー解析、アブストラクトインタープリテーション（ａｂｓｔｒａｃｔ  ｉｎｔｅｒｐｒｅｔａｔｉｏｎ）、制御フロー等でありうることが理解される。本開示では、ｃｎｖ変数の演算は、データフロー解析でのみ説明されている。冗長性としての検証呼び出しの識別でのｃｎｖ変数のセットの影響は、ｃｎｖ変数の演算における変動の依存とは異なっていてもよい。演算において用いられる近似のため、ｃｎｖ変数の演算において変動が生じる。
【００３２】
更に、ｃｎｖ変数識別モジュール（１１０）は、データフロー解析を通じてｃｎｖ変数を識別してもよい。データフロー解析は、制御フローパスによる実行パスの静的近似に基づく。２種類の近似が存在し、（ａ）制御フローパスによる実行パスの過大近似（ｏｖｅｒ−ａｐｐｒｏｘｉｍａｔｉｏｎ）、及び（ｂ）プログラムポイントでのセットの過大近似又は過小近似（ｕｎｄｅｒ−ａｐｐｒｏｘｉｍａｔｉｏｎ）である。ｃｎｖ変数識別モジュール（１１０）は、異なる２種類のｃｎｖ変数：ａ）  ｍａｙ−ｃｎｖ変数、及びｂ）  ｍｕｓｔ−ｃｎｖ変数を演算する。ｍａｙ−ｃｎｖ変数解析は、ｃｎｖ変数のセットを過大近似する一方で、ｍｕｓｔ−ｃｎｖ変数解析は、ｃｎｖ変数のセットを過小近似する。真のｃｎｖ変数の過大近似は、データフロー解析を用いて演算され、ここで、過大近似は、ｃｎｖ変数として一部の非ｃｎｖ変数の演算及び報告を含んでもよい。過大近似アプローチにより、解析は、より冗長であるが、低い精度の検証呼び出しを識別してもよい。過小近似アプローチにより、解析は、わずかに冗長だが、精度が向上した検証呼び出しを識別する。なぜなら、セットに含まれる各変数が、よりｃｎｖ変数になりやすいが、一部の偽物でないｃｎｖ変数を見落としてしまうためである。よって、プログラムポイントでの変数のｃｎｖ状態は、変数がｃｎｖ変数であることに沿うパスに依存する。変数が、プログラムポイントに到達するパス毎に沿うｃｎｖ変数であるとき、変数は、当該ポイントでのｍｕｓｔ−ｃｎｖ変数といわれる。変数が、一部のパスに沿うが、プログラムポイントに到達する全てのパスには沿わない場合、変数は、ｍａｙ−ｃｎｖ変数である。
【００３３】
好ましい実施形態では、ｃｎｖチェッカーモジュール（１１２）は、アサーションでの１以上の変数がｃｎｖ変数であるかどうかをチェックする。
【００３４】
好ましい実施形態では、冗長性呼び出し識別モジュール（１１４）は、モデルチェッカーへの１以上のアサーション検証呼び出しが、ｃｎｖ変数チェッカーモジュール（１１２）により得られる結果に基づいて、冗長又は非冗長であるかを識別する。ｃｎｖ変数は、全ての冗長性検証呼び出しを正確に識別しないが、アサーション検証呼び出しを識別するための効率的なアプローチを提供する。
【００３５】
好ましい実施形態では、アサーション検証モジュール（１１６）は、冗長性呼び出し識別モジュール（１１４）が、非冗長性として一部のアサーション検証呼び出しを識別するとき、複数のアサーションからアサーションを識別するためにモデルチェッカーを呼び出すように構成される。検証の結果に基づいて、識別されたアサーションに対応する警告は、エラー又は誤検出であると決定される。モデルチェッカーは、エントリー関数、及びアサーションとして表される、識別される特性を取る。特定されたエントリー関数は、アサーションが識別されるべき検証コードコンテクストを示す。アサーションが、全ての実行パスに対して保持する場合、モデルチェッカーは、検証成功を報告する（すなわち、アサーションは、与えられたコードコンテクストで保持する）。このような場合には、検証成功が、静的解析警告に対応するアサーションの検証に対して報告されるとき、警告は、誤検出であり、排除される。アサーションが、実行パスのいずれかに対して保持しない場合、モデルチェッカーは、特性違反に至るエラートレースを生じる又は特性の違反を単に報告し、対応する警告は維持する、すなわち、排除されない。
【００３６】
以下の表１に示されるように、本開示の実施形態に係る実施例を参照し、ここで、静的解析を用いるアプリケーションの検証は、ライン３９において、ゼロ除算警告を報告する。この警告は、静的アナライザにより誤って報告され、誤検出である。変数ｄｅｎｏｍがゼロになりうる唯一の方法は、ライン３４において、変数ｐがゼロである場合である。これは、ライン２３において、ゼロとなる関数ｆ３への呼び出しの実引数ｖａｒを要求し、これは、変数ｆａｃｔｏｒの値に依存する（ライン２２）。ｉ＜ｊを満たす指標変数の組み合わせに対するアレイａｒｒの初期化を与えると、ライン１２におけるアサイメントのＲＨＳは、ゼロにはならず、ｆａｃｔｏｒの実現性を除外し、ｄｅｎｏｍはゼロとなる。
【表１】
0006320475.tif 000002
【００３７】
実施例の警告を扱うためには、アサーションは、警告ポイントに加えられる。ライン３９におけるゼロ除算警告に対応する、アサーションは、ライン３８に加えられる。実施例の簡潔な説明のために、Ａｎは、ラインｎでのアサーションを示すために用いられ、プロシージャｆで開始する呼び出しコンテクストでのその検証は、Ｖ（Ａｎ，ｆ）と示される。与えられた表１では、モデルチェッカーへの第１の呼び出しは、ｆ３（ｐ  ａｎｄ  ｃｈ）のコンテクストの外側からの値を受け付ける変数に割り当てられた非決定的値を有するＶ（Ａ３８，ｆ３）である。これらの値は、ｆ３のスタートに割り当てられ、以下に示される。
【数１】
0006320475.tif 000003
【００３８】
モデルチェッカーは、０としてｐの値を選択することにより検証呼び出しＶ（Ａ３８，ｆ３）に対する反例を自明に探索する。反例が生成されるため、警告は、誤検出としてマークされることができず、よって、検証コードコンテクストは、関数ｆ３の呼び出し元（関数ｆ２）に拡張される必要がある。第２の検証呼び出しでは、Ｖ（Ａ３８，ｆ２）は、ｆ２（ｖａｒ，ｃｈ，ａｎｄ  ｆａｃｔｏｒ：上記の図に示される）のコンテクストの外側からの値を受け付ける変数に割り当てられた非決定的値で呼び出しコンテクストを拡張する。モデルチェッカーは、再度、ｖａｒ及び０となるべき係数を選択することにより、反例を報告する。同様に、反例生成で、コンテクストは、関数ｆ１に拡張される。第３の呼び出しでは、Ｖ（Ａ３８，ｆ１）は、ｆ１（ｃｈ）のコンテクストの外側からの値を受け付ける変数に非決定的値を割り当てる。ここで、値ｉ及びｊにかかわらず、モデルチェッカーは、係数に対する値０を探索することができず、アサーションＡ３８が常に保持することを宣言する。よって、検証呼び出しＶ（Ａ３８，ｆ１）は、誤検出となるライン３９での警告を排除する。
【００３９】
表１から、モデルチェッカーは、同一のアサーションに対して複数回呼び出され、第１及び第２の呼び出しは、誤検出の排除には寄与しない。これらの呼び出しは、反例を生成する。なぜなら、非決定的選択関数により割り当てられた値は、制約されないアサーションポイントに到達するためである。故に、これらの呼び出しは、実証可能な方法で冗長となってもよい。
【００４０】
プログラムポイントでの変数ｖのｃｎｖ状態は、ｖがｃｎｖであることに沿うパスに依存する。変数ｖが、プログラムポイントに到達する各パスに沿うｃｎｖであるとき、変数ｖは、当該ポイントでのｍｕｓｔ−ｃｎｖ変数と呼ばれる。ｃｎｖが、プログラムポイントに到達する一部のパスに沿うが、全てのパスに沿わない場合、ｍａｙ−ｃｎｖ変数となる。
【００４１】
ｉｎｔｒａ−ｐｒｏｃｅｄｕｒａ１設定に容易に引き上げられるｉｎｔｒａ−ｐｒｏｃｅｄｕｒａ１設定でのｃｎｖ変数の識別のためのデータフロー解析を参照する。データフロー解析では、Ｎは、解析されるプログラムの制御フローグラフにおけるノードのセットとし、Ｖは、プログラム変数のセットとする。ノードｎ∈Ｎで、変数ｖ∈Ｖのｃｎｖ状態のシェードとしてＳ＝｛ＣＮＶ，ｎＣＮＶ，ｎＣＮＶＴ，ｎＣＮＶＦ｝を定義する。
ｉ）ＣＮＶ：ｖはｃｎｖ変数である。
ｉｉ）ｎＣＮＶ：ｖは、非ｃｎｖ変数又は式へのデータ依存によりｃｎｖ変数ではない。
ｉｉｉ）ｎＣＮＶＴ：ｖは、制御依存によりｃｎｖ変数である（その値が、条件のｔｒｕｅの分岐から到達可能なパスに沿って制約されるとき）。
ｉｖ）ｎＣＮＶＦ：ｖは、制御依存によりｃｎｖ変数である（その値が、条件のｆａｌｓｅの分岐から到達可能なパスに沿って制約されるとき）。
【００４２】
データフロー解析を用いてｍａｙ−ｃｎｖ及びｍｕｓｔ−ｃｎｖ変数を演算するための束を以下に示す。前述のものは、本開示の例示的な実施形態にのみ関連するものであり、本開示の趣旨及び範囲から逸脱しない範囲で多数の変更がなされてもよいことが理解されるであろう。
【数２】
0006320475.tif 000004
【００４３】
【数３】
0006320475.tif 000005
【００４４】
【数４】
0006320475.tif 000006
【数５】
0006320475.tif 000007
【００４５】
表２に示されるように、本開示の実施形態に係る別の実施例によれば、１以上の冗長性検証呼び出し（ｒｅｄｕｎｄａｎｔ  ｖｅｒｉｆｉｃａｔｉｏｎ  ｃａｌｌｓ（ＲＶＣｓ））は、ｃｎｖ変数を通じて識別されてもよい。ＲＶＣｓの識別でのｍａｙ−ｃｎｖ及びｍｕｓｔ−ｃｎｖ変数の影響は、異なっており、これは、２つの演算で使用される近似の性質のためである。ｍａｙ−ｃｎｖ解析は、ｃｎｖ変数のセットを過大近似する一方で、ｍｕｓｔ−ｃｎｖは、ｃｎｖ変数のセットを過小近似する。過大近似により、ｍａｙ−ｃｎｖ変数は、よりＲＶＣｓを識別するが、精度が低くなる。過小近似により、ｍｕｓｔ−ｃｎｖ変数は、あまりＲＶＣｓを識別しないが、精度が増加する。なぜなら、セットに含まれる各変数は、よりｃｎｖ変数となりやすいが、一部の偽物でないｃｎｖ変数を見落としてしまうためである。
【表２】
0006320475.tif 000008
【００４６】
ｃｎｖ変数のセットのインパクトを解析するための実施例である表２を参照すると、ＲＶＣｓでのｍａｙ−ｃｎｖ及びｍｕｓｔ−ｃｎｖ変数は、２つの演算で使用される近似のために、異なっている。ｍｕｓｔ−ｃｎｖ変数解析は、ライン１２において、ｃｎｖ変数となる変数ｖを発見し、ＲＶＣとしてＶ（Ａ１２，ｆｏｏ）を発見する一方で、ｖは、ライン１２で値１を有するように保証される。ライン１１での条件がｖを含まないため、ｖは、制約されない。実際上、ライン１２で実行されるがライン５で実行されない実行パスを考慮する。明確には、ライン１２を通過する各パスは、ライン５も通過する必要があるため、このような実行パスはない。データフロー解析を用いて演算されるｃｎｖ変数のセットが真のｃｎｖ変数の過大近似であるため、非ｃｎｖ変数を含めることは、ｃｎｖ変数として報告される。このような誤った報告により、このような演算されたｃｎｖ変数の使用は、最終的には、誤検出を排除するために実際に要求される１以上のモデル検査呼び出しを排除する。
【００４７】
アプリケーションコードの静的解析時に生成される１以上の誤検出のモデルチェッカーベースの効率的な排除を促進するための方法（２００）を示す図２を参照する。
【００４８】
好ましい実施形態では、ステップ２０２において、アプリケーションコードは、静的アナライザーモジュール（１０６）により解析される。更に、解析に基づいて、警告が静的アナライザーモジュール（１０６）によって生成される。
【００４９】
好ましい実施形態では、ステップ２０４において、アノテータモジュール（１０８）は、静的アナライザーモジュール（１０６）により生成される各警告に対応するアサーションを生成するために用いられる。
【００５０】
好ましい実施形態では、ステップ２０６において、ｃｎｖ変数識別モジュール（１１０）は、アノテータモジュール（１０８）により生成されるアサーションの全てのプログラムポイントでのｃｎｖ変数のセットを識別する。
【００５１】
好ましい実施形態では、ステップ２０８において、ｃｎｖ変数チェッカーモジュール（１１２）は、アサーション変数がｃｎｖ変数かどうかをチェックする。次のステップ２１０において、アサーション変数がｃｎｖ変数である場合には、冗長性呼び出し識別モジュール（１１４）は、冗長性として対応するアサーションを識別するために、モデル検査呼び出しを識別するように構成される。
【００５２】
好ましい実施形態では、ステップ（２１２）において、アサーション変数がｃｎｖ変数ではないときには、アサーション識別モジュール（１１６）は、複数のアサーションからアサーションを識別するためにモデルチェッカーを呼び出す。検証結果に基づいて、識別されたアサーションに対応する警告は、エラー又は誤検出として決定される。
【００５３】
ステップ２０８の条件が、ｃｎｖ変数チェッカーモジュール（１１２）によってマッチされない、つまり、最後のステップ（２１２）において、アサーション変数がｃｎｖ変数ではない場合、アサーション識別モジュール（１１６）は、複数のアサーションからアサーションを識別するためにモデルチェッカーを呼び出す。検証結果に基づいて、識別されたアサーションに対応する警告は、エラー又は誤検出として決定される。
【００５４】
本明細書での本開示の実施形態は、検証呼び出しが、より反例を生成しやすいときに、アプリケーションコードの静的解析警告に対応する同一のアサーションについてモデルチェッカーを一又は複数回呼び出すという未解決の問題を解決する。よって、実施形態は、アプリケーションコードの静的解析時に生成される誤検出のモデル検査／モデルチェッカーベースの効率的な排除を促進するためのシステム及び方法を提供する。上記を考慮すると、本開示は、静的解析により生成される複数の誤検出から１以上の誤検出の効率的な排除に至ることが理解されるであろう。更に、上記は、本開示の例示的な実施形態のみに関するものであり、本開示の趣旨及び範囲から逸脱せずに多数の変更がなされてもよいことが理解されるべきである。
【図１】
0006320475.tif 000009
【図２】
0006320475.tif 000010