JP5901668B2 - 静的解析中に発生した警告をグループ化するシステムおよび方法 - Google Patents

静的解析中に発生した警告をグループ化するシステムおよび方法 Download PDF

Info

Publication number
JP5901668B2
JP5901668B2 JP2014025029A JP2014025029A JP5901668B2 JP 5901668 B2 JP5901668 B2 JP 5901668B2 JP 2014025029 A JP2014025029 A JP 2014025029A JP 2014025029 A JP2014025029 A JP 2014025029A JP 5901668 B2 JP5901668 B2 JP 5901668B2
Authority
JP
Japan
Prior art keywords
warnings
similar
alerts
warning
application 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.)
Expired - Fee Related
Application number
JP2014025029A
Other languages
English (en)
Other versions
JP2014170530A (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.)
Tata Consultancy Services Ltd
Original Assignee
Tata Consultancy Services 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 Tata Consultancy Services Ltd filed Critical Tata Consultancy Services Ltd
Publication of JP2014170530A publication Critical patent/JP2014170530A/ja
Application granted granted Critical
Publication of JP5901668B2 publication Critical patent/JP5901668B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44589Program code verification, e.g. Java bytecode verification, proof-carrying code
    • 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

Description

本発明は、静的解析中に発生した警告に関する。より具体的に、本発明は、静的解析中に発生した警告のグループ化に関する。
安全で重要なソフトウェアアプリケーションの検証および認証における静的解析の使用は、最も重要である。しかしながら、ソフトウェアアプリケーションの静的解析は、誤検出としてよく取り上げられ、誤って報告される多くの警告を引き起こす。静的解析によって発生した全ての警告は、警告が安全であるか安全でないかを確認するために、マニュアルでレビューする必要がある。発生した多くの警告のマニュアルでのレビューは、時間を必要とし、高コストになっている。多くの警告は、抽出的概念の使用、配列処理を除外することや解析を内部手続的に実行することのような意識的な設計決定の結果である。また、変数をランタイムでとることができるという実際の値を決定するための静的解析の能力が低下すると、多くの警告が発生するようになる。
現在、静的解析によって発生した警告を解析またはレビューするユーザーは、各警告を個別にレビューしなければならない。静的解析をより正確にする、抽象解釈(Abstract Interpretation)、ディファレンスバウンドマトリックス(Difference Bound Matrix)およびモデル検査(Model-checking)のような多くの技術が存在する。しかしながら、上記の技術は、まだ多くの警告を発生し、警告を解析するために必要とされるマニュアルでのレビューを低減可能な程度にまで、低減できていない。
さらに、他の従来技術は、警告の重大性または優先度に基づいて、警告のグループ化を提供する。しかし、これらの技術は、警告のレビューを低減できていない。警告のレビューにおける冗長性の特定に基づいて、レビューの低減を保証する技術は存在していない。
本発明の目的は、静的解析中に発生した警告をグループ化するシステムおよび方法を提供することにある。以下に詳細に記載された概要は、特許請求の範囲に記載された発明の本質的な特徴を特定する意図ではなく、特許請求の範囲に記載された発明を限定または決定する意図ではない。
本発明の一つの実施形態において、アプリケーションコードの静的解析中に発生した複数の警告をグループ化するシステムが開示されている。このシステムは、プロセッサーと、プロセッサーに連結されたメモリーとを含む。プロセッサーは、メモリーに保存された複数のモジュールを実行することができる。複数のモジュールは、複数の警告を発生させるためアプリケーションコードを解析するように構成された解析モジュールと、複数の警告から複数の類似する警告を特定するように構成された特定モジュールとを含む。複数の類似する警告は、構造的かつ意味的に類似する関心のある式(EOI)を有する。また、複数のモジュールは、1または2以上の警告のグループを形成するように構成されたグループ化モジュールを含み、1または2以上の警告のグループのそれぞれは、複数の類似する警告を含む。
本発明の一つの実施形態において、アプリケーションコードの静的解析中に発生した複数の警告をグループ化する方法が開示されている。この方法は、複数の警告を発生させるためにアプリケーションコードを解析する工程を含む。その方法は、複数の警告から複数の類似する警告を特定する工程をさらに含む。複数の類似する警告は、構造的かつ意味的に類似する関心のある式(EOI)を有する。また、方法は、1または2以上の警告のグループを形成する工程を含む。1または2以上の警告のグループのそれぞれは、複数の類似する警告を含む。解析工程と、特定工程と、形成工程とは、メモリー中に保存された、プログラム化した命令を使用するプロセッサーによって実行される。
本発明の一つの実施形態において、アプリケーションコードの静的解析中に発生した複数の警告をグループ化するシステムが開示されている。このシステムは、警告を発生させるためにアプリケーションコードを解析するように構成された解析モジュールを含む。そのシステムは、複数の警告から類似する警告を特定するように構成された特定モジュールをさらに含む。複数の類似する警告の関心のある式(EOI)は、同じ順番で現れる同じオペレーターを有する。そして、複数の類似する警告のEOIにおける変数は、アプリケーションコードにおける同じ修正ポイントからの値を得る。システムは、1または2以上の警告のグループを形成するように構成されたグループ化モジュールを含む。1または2以上の警告のグループのそれぞれは、複数の類似する警告を含む。
詳細な説明は、添付の図面を参照して説明される。図において、符号の左側の数字は、図番を特定している。図中、同じ番号が同じ特徴および同じ構成に付されている。
図1は、本発明の実施形態に係る、静的解析中に発生した警告をグループ化するシステムのネットワーク実施例を示す図である。
図2は、本発明の実施形態に係る、静的解析中に発生した警告をグループ化するシステムを示す図である。
図3は、本発明のシステムの実施形態に係る、マストリーチングエクスプレッションズ(Must Reaching Expressions)(MREs)を使用するリーダー警告(leader warnings)のセットの計算方法を示す図である。
図4は、本発明のシステムの実施形態に係る、マストライブエクスプレッションズ(Must Live Expressions)(MLEs)を使用するリーダー警告(leader warnings)のセットの改良方法を示す図である。
図5は、本発明のシステムの実施形態に係る、静的解析中に発生した警告をグループ化する方法を示す図である。
アプリケーションコードの静的解析中に発生した警告をグループ化するシステムおよび方法を説明する。まず、警告はアプリケーションコードの解析で発生する。発生した警告は、警告の類似性に基づいてさらに分類またはグループ化される。類似性に基づいて警告をグループ化するために、種々のコンストレイント(制限)(constraints)が満たされる必要がある。そのコンストレイントは、警告の構造的かつ意味的に類似する関心のある式(EOIs)を含んでいる。警告は、フォワードフロー(forward flow)またはバックワードフロー(backward flow)において互いに到達可能である。警告のEOIsからの変数は、警告のプログラムポイント間で修正されない。EOIの値のための少なくとも一つの警告は、他の警告のEOIsからの値を含む。
また、代表的な警告は、代表的な警告のレビューが各グループにおける代表的な警告以外の警告のレビューを保証するように、警告の各グループから計算される。代表的な警告が安全であると分かった場合、代表的な警告以外の警告もまた安全であり、レビューの必要はない。しかしながら、代表的な警告が安全でないと分かった場合、各グループにおける代表的な警告以外の警告は、個別にレビューされなければならない。
別の実施形態において、警告の関心のある式(EOIs)が同じ順番で現れる同じオペレーターを有し、EOIsにおけるポジションによって関連付けられるEOI変数が同じ修正ポイントからの値を得るのなら、発生した警告はグループ化される。形成されたグループにおける警告の一つは、EOI変数の修正ポイントによって提供された値を検討し、レビューされる。そして、レビューされた警告が安全であれば、レビューされた警告以外の、同じグループからの警告もまた安全であり、レビューの必要はない。他の場合において、レビューされた警告が安全でないとき、グループにおける各警告は個別にレビューされる必要がある。
静的解析中に発生した警告をグループ化するシステムおよび方法の態様は、いくつもの異なるコンピューターシステム、環境および/または構成で実施されてもよいが、実施形態は以下の具体的なシステムで説明される。
図1を参照して、図1は、本発明の実施形態に係る、アプリケーションコードの静的解析中に発生した1または2以上の警告をグループ化するシステム102のネットワーク実施例100が示す。一つの実施形態において、システム102は、静的解析中に発生した警告をグループ化する。一つの実施形態において、システム102は、警告を発生するために、アプリケーションコードを解析する。発生した警告は、警告の類似性に基づいて特定される。類似性は、1または2以上のコンストレイントに基づいている。特定された警告は、類似する警告および同様の警告と称されてもよい。類似性に基づく警告は取り替え可能である。また、警告の1または2以上のグループが形成される。警告の1または2以上のグループのそれぞれは、類似する警告を含んでいる。また、システム102は、警告の各グループから代表的な警告を計算する。その結果、各グループにおける代表的な警告以外の警告は、代表的な警告のレビュー判断(review judgment)に従う。そして、代表的な警告のレビューは、各グループにおける代表的な警告以外の警告のレビューを保証する。
システム102の別の実施形態において、特定された類似する警告の関心のある式(EOIs)が同じ順番で現れる同じオペレーターを有し、類似する警告のEOIからのEOI変数が同じ修正ポイントからの値を得るように、類似する警告は発生した警告間で特定される。EOI変数は、EOIにおける位置によって関連付けられている。また、システム102は、警告の1または2以上のグループを形成し、警告の1または2以上のグループのそれぞれは、類似する警告を含んでいる。形成された各グループにおける類似する警告のうちの一つの警告のレビューは、形成された各グループにおけるレビューされた警告以外の類似する警告のレビューを保証する。その一つの警告は、修正ポイントによってEOI変数に提供される値を考慮し、レビューされる。警告がレビューで安全であると分かれば、その警告以外の類似する警告も安全であり、個別にレビューされる必要はない。その警告がレビューで安全でない場合、グループにおける全ての類似する警告は個別にレビューされなければならない。
本発明は、システム102がサーバー上で実行されることを考慮して説明されているが、システム102は、ラップトップコンピューター、デスクトップコンピューター、ノート型コンピューター、ワークステーション、メインフレームコンピューター、サーバー、ネットワークサーバーなどの種々のコンピューターシステムで実行される。システム102は、1または2以上のユーザーデバイス104−1、104−2・・・104−N(以下、これらをまとめてユーザー104またはユーザーデバイス104にあるアプリケーションという)を通して多くのユーザーによってアクセスされる。ユーザーデバイス104は、特に限定されないが、ポータブルコンピューター、パーソナルデジタルアシスタント、携帯用デバイス、ワークステーションなどが挙げられる。ユーザーデバイス104は、ネットワーク106を介してシステム102に通信可能に連結されている。
一つの実施形態において、ネットワーク106は、ワイヤレスネットワーク、有線ネットワークまたはそれらの組合せであってもよい。ネットワーク106は、イントラネット、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット等の異なる種類のネットワークの一つとして実行される。ネットワーク106は、専用ネットワークまたは共有ネットワークのいずれかであってもよい。共有ネットワークは、種々のプロトコルを使用する異なるタイプのネットワークの接続(association)を表す。例えば、種々のプロトコルは、互いに通信する、ハイパーテキスト転送プロトコル(HTTP)、伝送制御プロトコル/インターネットプロトコル(TCP/IP)、ワイヤレスアプリケーションプロトコル(WAP)などである。また、ネットワーク106は、ルーター、ブリッジ、サーバー、コンピューターデバイス、ストレージデバイス等を含む種々のネットワークデバイスを含んでいる。
図2を参照すると、図2は、本発明の実施形態に係るシステム102を示す。一つの実施形態において、システム102は、少なくとも一つのプロセッサー202と、入力/出力(I/O)インターフェース204と、メモリー206とを含んでいる。少なくとも一つのプロセッサー202は、1または2以上の、マイクロプロセッサー、マイクロコンピューター、マイクロコントローラー、デジタルシグナルプロセッサー、中央処理装置、ステートマシーン(state machines)、ロジック回路および/または操作上の命令に基づく信号をコントロールするいずれのデバイスなどとして実行される。他の性能として、少なくとも一つプロセッサー202は、メモリー206に保存されたコンピューター読み取り可能な命令をフェッチして実行するように構成されている。
I/Oインターフェース204は、種々のソフトウェアおよびハードウェアインターフェース(例えば、ウェブインターフェース、グラフィカルユーザーインターフェースなど)を含んでいる。I/Oインターフェース204は、クライアントデバイス104を介して、またはクライアントデバイス104と直接に、ユーザーとシステム102とを交信させる。また、I/Oインターフェース204は、システム102が他のコンピューターデバイス(例えば、図示されていない、ウェブサーバーおよび外部データサーバー)と通信することを可能にしている。I/Oインターフェース204は、有線ネットワーク(例えば、LAN、ケーブルなど)およびワイヤレスネットワーク(例えば、WLAN、セル方式、通信衛星など)を含む多種多様のネットワークおよびプロトコルタイプ内で多重通信を促進することができる。I/Oインターフェース204は、多くのデバイスを、互いに、または別のサーバーに接続するための1または2以上のポートを含んでいてもよい。
メモリー206は、技術分野で知られている、いずれのコンピューター読み取り可能媒体も含む。例えば、それは、スタティックランダムアクセスメモリ(SRAM)およびダイナミックランダムアクセスメモリ(DRAM)のような揮発性メモリ、および/または、読み取り専用メモリ(ROM)、消去可能ROM、フラッシュメモリ、ハードディスク、光学ディスクおよび磁気テープのような非揮発性メモリなどを含む。
モジュール208は、ルーティン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。それは、特定のタスクを実行するか、特定の抽象データタイプを実装する。一つの実施形態において、モジュール208は、解析モジュール212と、特定モジュール214と、グループ化モジュール216と、計算モジュール218と、その他のモジュール220とを含んでいる。その他のモジュール220は、システム102のアプリケーションおよび機能を補うプログラムまたはコードされた命令を含んでいる。
データ210は、とりわけ、1または2以上のモジュールによって所有され、受信され、発生されたデータを保存するレポジトリ(repository)として作用する。データ210は、また、システムデータベース222と、他のデータ224とを含んでいる。他のデータ224は、他のモジュール220における1または2以上のモジュールの実行の結果として発生されたデータを含んでいる。
一つの実施形態において、まず、ユーザーは、I/Oインターフェース204を介してシステム102にアクセスするクライアントデバイス104を使用する。ユーザーは、システム102を使用するために、I/Oインターフェース204を使用するクライアントデバイスを登録する。システム102のワークは、図3と図4で詳細に説明される。システム102は、アプリケーションコードの静的解析中に発生した警告のグループ化を提供するように構成されている。アプリケーションコードの静的解析中に発生した警告のグループ化を提供するために、システム102は、まず、警告を発生するためのアプリケーションコードを解析する。具体的に、本実施形態において、アプリケーションコードは、モジュール212を解析することによって解析される。
また、特定モジュール214は、複数の警告から類似する警告を特定するように構成されている。類似する警告は、構造的かつ意味的に類似する関心のある式(EOI)を有する。また、類似する警告は、互いに連絡可能である。類似する警告のEOIからの変数は、類似する警告のプログラムポイント間で修正されない。そして、類似する警告のうちの少なくとも一つの警告のEOIによって評価される値は、その一つの警告以外の類似する警告のEOIからの値を含んでいる。
構造的に類似するEOIsは、異なる値に評価(判断)するかもしれないので、類似する警告は、構造的に似ているだけでなく、意味的にも似ているべきである。例えば、“v+a”(aはローカル変数)と“v+a”(aはグローバル変数)のような2つのEOIを検討する。上記EOIは、類似するとして扱われない。なぜなら、それらは、異なる値に評価し、したがって、上記EOIで発生した警告は類似するとして考えられることができないからである。また、さらなる例として、それらのEOIs“v+l”と“l+v”で発生した警告は、類似するとして扱われることができない。なぜなら、これらのEOIは、それらが同じ値に評価したとしても、異なる構造を有するからである。類似する警告を特定するために、警告は、意味的に類似するだけでなく、構造的にも類似するべきである。
具体例として、以下に示されるプログラムを検討する。
#define SIZE 10
int rColors[SIZE], gColors[SIZE], bColors[SIZE];
1. void func(int r, int g, int b)
2. {
3. // ‘n’と’factor’の値は知られていない。
4. ...
5. factor = getDivFactor();
6. if((r/factor > rval1) && ...)
7. rColors[n] = r;
8.
9. if((g/factor > gval1) && ...)
10. gColors[n] = g;
11.
12. if((b/factor > bval1) && ...)
13. bColors[n] = b;
14.
15. gradient = getGradient(
rColors[n],gColors[n],bColors[n]);
16. ...
17. }
上述されたプログラムにおいて、3ゼロ除算(Zero Division)(ZD)と6配列インデックス範囲外(Array Index Out of Bound)(AIOB)警告が存在する。なぜなら、分母‘factor’と配列インデックス‘n’の値は、それぞれ、静的に未知であるからである。表記ZDnと表記AIOBnは、それぞれ、ライン‘n’でZDとAIOBポイントを示すために使用される。2以上のそのようなポイントがシングルラインに存在する場合、プログラムにおけるポイントは、左から右に見られるポイントの位置と区別され、接頭上付き文字として示される。例えば、ライン15からの第1および第2のAIOBポイントは、それぞれ、AIOB15およびAIOB15として示される。上記プログラムにおいて、全てのZD警告は、それ自身で類似する警告である。なぜなら、ZD警告は、同じ分母式‘factor’を有し、分母式‘factor’の値は、ZDポイントとZD12ポイントとの間で修正されない。上記例において、分母式だけがEOIsとして考えられる。なぜなら、もしそれが、値‘0’の評価につながるのなら、分母式は、チェックすることによって与えられるZD警告ポイントをレビューするために十分であるからである。
また、グループ化モジュール216は、警告の1または2以上のグループを形成するように構成されている。そのような警告の1または2以上のグループのそれぞれは、類似する警告を含む。上述されたプログラムにおいて、ZD警告は、類似する警告であるので、ともにグループ化されている。システム102は、シングルコード認証のために、静的解析によって発生した類似する警告のグループ化を実行する。
また、計算モジュール218は、類似する警告のグループのそれぞれから代表的な警告を計算するように構成されている。その結果、類似する警告のグループにおける代表的な警告以外の警告は、代表的な警告のレビュー判断に従う。代表的な警告のレビューの間、代表的な警告が安全であると分かることは、グループにおける代表的な警告以外の類似する警告のレビューを保証する。他の場合において、代表的な警告が安全でないと分かれば、グループにおける類似する警告の全ては個別にレビューされる必要がある。計算モジュール218は、情報計算のフォワードフローにおいて各グループから代表的な警告を計算するため、マストリーチングエクスプレッションズ(Must Reaching Expressions)(MREs)の計算と、情報計算のバックワードフローにおいて各グループから代表的な警告を計算するため、マストライブエクスプレッションズ(Must Live Expressions)(MLEs)の計算とをさらに実行する。代表的な警告は、リーダー警告(Leader Warnings)(LW)として示され、各グループにおける代表的な警告以外の警告は、フォロワー警告(Follower Warning)(FW)として示される。上述されたプログラムコードにおいて、ZD警告のグループから、ZDは、LWとして安全に選択されてもよい。なぜなら、他の警告は、LWのレビュー判断に従うように観測されるからである。
形成された類似する警告のグループからの警告は、そのEOIが同じグループから、すなわち、もし下記が存在するのなら任意の警告のための他の警告ポイントに正確に到達し(Must Reaching Expression-MRE)、または、正確に生存する(Must Live Expression-MLE)場合に限り、LWとして選択される。
−警告Wに類似するとして特定された他の警告から1また2以上のMRE/MLEが存在する。WはFWでなければならない。
−警告Wに類似するとして特定された他の警告からMRE/MLEが存在しない。正確にWはFWでなければならない。
また、上述したプログラムを参照すると、ZD警告は、LWとして選択されてもよい。なぜなら、ZDの分母式(dominator expression)は後のZDポイントに正確に到達するからである。すなわち、ZDとZD12に対する全てのパスは、ZDを含み、分母変数‘factor’はその間で修正されない。したがって、ZDとZD12(FWs)の分母によって求められる値は、ZDの分母によって求められる値に含まれている。この場合において、ZD警告はレビューで安全であると分かり、FWsは安全であると保証される。ZD警告が安全でなければ、FWsが安全でない。後者の場合において、FWsは、必ずしも安全でないと観測される必要はない。なぜなら、FWsが安全でないことを防止するいくつかの付加チェックが存在するからである。
一般に、欠陥/安全でないとして発生した警告を見つける可能性はとても低い。LWとFWsとの間の与えられたレビュー判断関係と、欠陥として発生した警告を見つける可能性に関し、レビューのためのリーダー警告(LWs)のみが存在することが観測される。したがって、類似する警告の提案されたグループ化は、レビュー中、ユーザーがFWsに注目することを避け、レビューの低減につながる。
また、上述したプログラムを参照すると、プログラムにおける6 AIOBポイントは、AIOB警告である。なぜなら、それらのインデックス値は静的に知られることができないからである。AIOB警告は、類似する警告としてまた観測されてもよい。なぜなら、AIOB警告のインデックスは、同じであり、ライン7と16との間で修正されないからである。AIOB警告のうちのいずれか2つのAIOB警告は、2つのAIOB警告の関連する配列インデックス(array index)および配列サイズが(array size)同じである場合に限り、類似する警告である。配列インデックスのみがAIOB警告の認証との関連でEOIとして考えられ、そのインデックスチェックのための範囲(bound)(配列サイズ)を得ることが要求されているので、インデックスされた配列がEOIから除外される。配列サイズにアクセスされた配列から焦点をシフトする理由は、類似する警告として、警告の最大可能数を特定することである。配列がEOIの一部として扱われると、警告AIOB15およびAION15は、類似する警告として特定されないかもしれない。
類似する警告として特定されたAIOB警告は、シングル警告としてそれをレビューするためにグループ化される。グループ化されたAIOB警告に関し、AIOBは、LWとして計算されない。なぜなら、AIOBのインデックスは、他のAIOBポイントに正確に到達しないし、レビュー判断関係の要求された保証はこの選択と与えられないからである。同様に、AIOBおよびAION12警告は、LWとして考慮されない。しかしながら、AIOB15または同じラインからの他の警告は、グループのLWとしてとられる。なぜなら、この選択は、LWとFWsとの間の要求されたレビュー判断関係を保証するからである。AIOB15のインデックスによって評価された値は、他のAIOBのインデックスによって評価された値を含む。これは、AIOB15のインデックス(n)が前のAIOBポイントで正確に生存しているということを観測することによって保証される。すなわち、計算されたFWsを通るパスがAIOB15(LW)を通り、インデックス‘n’が中間で修正されないということを観察することによって保証される。警告AIOB15のレビューは、形成されたグループにおける他の警告のレビューを保証する。
上述されたプログラムは、単一変数とEOIs(ZD用のfactor, AIOB用のn)を考慮するだけである。しかし、類似する警告として特定された警告は、仮にそれらのEOIsが(var1+var2-var3)または(arr1[0]+arr[i])のような複素式(complex expression)であるとしても、グループ化される。アプリケーションレベルでの類似する警告として特定される警告のグループ化は、発生した警告の数を減らし、レビュープロセス中の多重認証サイクルを回避し、レビューを低減する。
計算モジュール218は、リーダー警告の計算のためのMREsとMLEsを計算する。マストリーチングエクスプレッション(MRE)は、以下のように規定される。Pに来る全てのパスがPを通り、PとPとの間のセグメントパスが‘e’のいくつかのr−値のl−値アカーレンス(occurrence)を含まない場合、プログラムポイントPからの式‘e’は、プログラムポイントPでのMREである。すなわち、PはPに先行し、Pで‘e’によって得られた値は、それがPで得られるのなら、‘e’の値を含む。上述されたプログラムからのMREsのいくつかの例は、以下の通りである。
−ZDの分母は、ZDへの各パスとしてZDとZD12でMREである。ZD12は、ZDを通り、変数‘factor’は中間で修正されない。
−ZDの分母は、ZD12でMREである。しかし、ZDがZDに先行しないので、ZDでMREであることができない。
−AIOB(またはAIOB10、AIOB13)のインデックスnは、他のいずれのAIOBポイントでMREでない。なぜなら、それらを含むことなくパスが存在するからである。
また、MREsは、データフロー解析(Data Flow Analysis)(DFA)を使用して効率的に計算される。DFAは、アプリケーションにける種々のプログラムポイントで値または値のセットとしてフロー情報を収集する。ファンクションサマリーに基づくアプローチは、コンテクストおよびフローセンシティブ態様(context and flow sensitive manner)で、要求されたMREsを計算するために解決するDFAに使用される。MREs計算のための以下に示されたデータフロー形式化は、フォワードフロー解析を表し、同時にシングル認証機能性をターゲットとする。例えば、ZD警告とAIOB警告をグループ化するための要求されたMREsは、別々に計算されなければならない。利用できる式とは違って、考慮されたEOIsは、それらがIR表現(入力ソースプログラム用に作られた抽象構文木)であるように、実際の式である。以下のデータフロー方程式は、CFG(制御フローグラフ)におけるノード‘n’のために示される。

Figure 0005901668
Figure 0005901668
‘Out’のための方程式は、キルコンポーネント(kill component)がGen+Inから計算されるので、標準DFA方程式から誘導される。この変化は、MREsが”val=arr[val]“のような同じプログラムポイントで発生され、消される(killed)ように、組み込まれる(具現化される)。インデックス‘val’は、このプログラムポイント後、MREとして流出することを期待されていない。
より効率的にMREsを計算するために、以下のポイントが考慮される。
−警告のみの解析と共にプログラムポイントを考慮する。安全または安全でないとして特定されたPOIsがMRE計算から無視される。
−MREs計算からの関数呼び出しおよび揮発性関数を含むEOIsを無視する。なぜなら、計算されたLWとFWsのレビュー判断で要求された保証がそれらの存在とともに与えられることができないからである。
−修正された変数の情報は、分離“May-Kill/Modified”データフロー問題として計算されるべきである。
−配列が計算する消された情報に含まれるとき、保守的なアプローチが採られるべきである。(arr[0]+b)のような関数は、‘i’の値が未知であるとき、“arr[i]=n”プログラムポイント後に到達されるべきでない。
マストライブエクスプレッション(Must Live Expression)(MLE)は、以下のように規定される。Pを通る全てのパスがPを通り、PとPとの間のセグメントパスが‘e’のいくつかのr−値のl−値アカーレンスを含まない場合、プログラムポイントPからの式‘e‘は、プログラムポイントPでMLEである。すなわち、PがPに先行し、Pで‘e‘によって得られた値は、それがPで得られるのなら、‘e‘の値を含む。上述されたプログラムからのMLEsのいくつかの例は、以下の通りである。
AIOB15のnのインデックスは、AIOBからの全てのパスがはまたAIOB15を通り、それらのインデックスnが中間で修正されないように、AIOBでMLEである。同様に、ライン15での警告からのインデックスは、AIOB、AIOB10、AIOB13でMLEsである。
−AIOB13のインデックスは、AIOBとAIOB10警告でMLEである。なぜなら、AIOBとAIOB10を通り、AIOB13を通らないパスが存在するからである。
また、MLEsは、データフロー解析(DFA)を使用して効率的に計算される。MLEs計算のための形式化は、Inの方程式における変化のみを有し、MREs計算のための形式化と同様である。この変化は、情報計算のバックワードフローを考慮するために組み込まれ(具現化される)、以下に示される。
Figure 0005901668

効率的なMREs計算のために与えられる考慮が、MLEs計算のために同様にあってもよい。
計算モジュール218は、不要なMRE/MLEの特定を避けるために、最適化をさらに実行する。説明されたDFAは、MRE/MLEが各警告ポイントで発生することを示す。DFAを解いている間、警告ポイントが他の警告ポイントから流れ込むMRE/MLEを観測すると、現在の警告用のMRE/MLEは発生する必要がない。そのようなMRE/MLEの発生は、効率的な目的のために回避される。なぜなら、各警告は明確にFWであり、この計算はいずれの値も加えない。これは、DFAで計算されるデータを低減するだけでなく、LWsとFWsの計算が以下に説明されるように速くなる。
任意の警告Wで、他のどの類似する警告ポイントからもMRE/MLEが存在しない場合、WはLWである。最初に、発生した各警告は、FWなしにそれ自身のグループを有するLWとしてレビューされる。警告のグループ化から最大の利益を成し遂げるために、LWsの数は最小であるべきである。LWsの数は、これらの初期のLWsを他のLWと関連付けることによって、すなわち、それらをFWsに変換することによって、低減される。このタイプのグループ化の後、全ての警告は、シングルグループに属していなければならず、同時にLWとFWであることができない。また、正確に形成された類似する警告のグループは、ゼロを含むいくつものFWsと1つのLWとを正確に含んでいる。
以下、類似する警告のグループ化の後計算されるLWsのセットを示すために、表記LWoを使用する。一つの実施形態において、計算モジュール218は、要求されたLWoを計算するためにグラフに基づくアプローチを実行する。最初に、ツリーの数が発生された警告の数と等しくなるように、(警告を示している)1つのノードのみを有するツリーとして、発生した警告に示す。警告ポイントWで、MREs/MLEsは計算され、警告Wから発生された各MRE/MLEにとって、有向辺は、Wに相当する頂点(vertex)に関連する頂点Wから加えられる。そのような辺(edge)は、以下の二つの点が当てはまる場合にのみ加えられる必要がある。
−WとWの警告のEOIs(および配列サイズのような他の要求される情報)が類似する場合。
−WLに相当する頂点に入ってくる辺がない場合。
第1のコンストレイントとは、類似する警告のみとして特定された警告を関連付けるために要求される。そして、両方の警告(WとW)がFWsであるように保証されるように、第2のコンストレイントは、不必要(冗長)な辺の付加を避けるよう要求される。Wが入ってくる辺を有するとき、それはLWであることができない。MREとMLEが生じるように、一度、辺の付加が完了すると、結果として得られるフォレストはLWsとそれらに関連付けられたFWsを示す。ここで、フォレストにおける各ツリーは、類似するように特定された警告のグループである。入ってくる辺なしに頂点は、グループのLWであり、LWから走査されることができる全ての頂点は、グループのFWsである。したがって、形成されたグループの数は、フォレストにおけるツリーの数である。最初に、効率的な目的のために、LWs(LWo)は、MREsを使用して計算され、それから、MLEsはこれらのLWsのみのために計算される。計算されたMLEsを後で使用して、MREsにより手に入れられた前のLWoは、より小さいLWsを得るためにさらに改良される。
具体的実施例として、上述したプログラムを検討する。フォレストにおける頂点は、警告を示すために使用されている同じ表記を有する任意の警告に相当して示されている。まず、これらすべての頂点は、入ってくる辺(incoming edge)または出ていく辺(outgoing edge)を有しない。有向辺は、ZDのためのMREsの結果を使用して説明されるように加えられ、AIOBと手に入れられたフォレストは図3に示される。以下は、図3に示されるフォレストから得られた観測である。
・ZDのインデックスは、ZDとZD12に対するMREであり、したがって、ZDからZDとZD12にそれぞれの辺がある。
・ZDのインデックスがZD12に対するMREに対するインデックスであるとしても、それぞれの辺は、ZDのための頂点が(エッジ付加の第2のコンストレイントにより)入ってくる辺を有しているので、加えられない。
図3におけるフォレストは、シングルLWのようなZDと、FWsのようなZDとZD12を有するZDに期待されるようなLWを表す。AIOBのためのLWは、1つの警告の代わりにレビュー用のLWsとして4つの警告を表しているので、期待値ではない。これは、MREsが期待されたLWoを計算するために常に十分ではなく、それはMLEsを使用する改良を要求するからである。MLEsは、MREsを使用して得られるLWsのためにのみ計算され、エッジはそれらの計算結果により付け足される。MLEsを使用して得られた、改良されたLWoは、図4に示される。図4は、要求されるようなLWとしてのシングルAIOB警告を示している。
本発明の別の実施形態において、システム102は、修正ポイントに基づくグループ化(MPG)を使用する静的解析中に発生した複数の警告のグループ化を提供する。まず、解析モジュール212は、複数の警告を発生するためにアプリケーションコードを解析するように構成されている。また、特定モジュール214は、複数の警告から類似する警告を特定するように構成されている。その結果、類似する警告の関心のある式(EOIs)は同じ順番で現れる同じオペレーターを有し、EOIsにおける位置によって関連付られるEOI変数がアプリケーションコードにおける同じ修正ポイントから値を得る。グループ化モジュール216は、複数の警告の1または2以上のグループを形成するように構成されている。その各グループは、類似する警告を含んでいる。レビューされた警告がEOI変数の修正ポイントによって提供される値を考慮することで安全であることがわかるとき、形成されたグループにおける類似する警告のうちの一つの警告のレビューは、レビューされた警告以外のグループにおける類似する警告のレビューを保証する。また、グループ化モジュール214は、各MPGグループに対して、修正ポイントを関連付け、報告する。関連付けられた修正ポイントは、グループにおける類似する警告からのEOI変数の修正ポイントである。
グループ化モジュール216は、類似する警告の1または2以上のグループを形成するために到達定義(Reaching Definitions)の計算をさらに実行する。グループからの警告が関連付けられた修正ポイントからEOI変数値を考慮するレビューで安全であると分かると、同じグループから他の警告をレビューする必要がない。他の場合において、レビュー後にグループから選択された警告が安全であると分からないと、グループから各警告を個別にレビューする必要がある。
具体的実施例として、以下に示されるプログラムを検討する。
int arr[10];
void func(const int* baseAddr, const int* currPtr)
{ // valは、0から9の値の割り当てを得る。
int val = currPtr - baseAddr;
switch (switchVar)
{
case 1: func1(val); break;
case 2: func2(val); break;
case 3: func3(val); break;
default: break;
}
}
void func1(int p1)
{
if(...) arr[p1] = ...;
else if (...) arr[p1] = ...;
}
void func2(int p2)
{
if(...) arr[p2] = ...;
else if (...) arr[p2] = ...;
}
void func3(int p3)
{
if(...) arr[p3] = ...;
else if (...) arr[p3] = ...;
}
上記プログラムは、一例を示している。Val変数の値(0から9)は、ポインタの算術演算を使用して計算され、配列インデックス使用のための多数の関数(multiple functions)に送られる。最も静的な解析ツールは、警告のようなこれらのAIOBポイントを報告する。なぜなら、varのための値は静的に決定されない。各警告のレビューは、それぞれのインデックス変数(p1、p2、p3)によってとられる値を見つけることを要求し、したがって、警告ポイントからval(ポインタの算術演算のもの)の定義ポイントにマニュアルで走査することを要求する。ユーザーは、警告が発見された値に基づいて安全であるか安全でないか決定する。こうして、すべての警告をまとめて(collectively)レビューすることは相当な努力を必要とする。
そのような状況において、特定モジュール214は、警告を特定する。警告のEOI変数は同じ修正(または定義)ポイントから値を得る。グループ化モジュール216は、レビューの努力が最小化されるように、特定された警告をグループ化する。そのような修正ポイントともに、レビューの観点(review perspective)からの他のパラメーターは、シングルグループにおいてそれらを扱うためにマッチすべきである。EOIsが多数の変数を含む複素式であるとき、EOIsは、オペレーターの同じ順番を観察しなければならず、EOIsにおけるそれらの位置によって関連付けられた変数は、同じ修正ポイントを見つけなければならない。
例えば、
・配列サイズは、MPGを使用するAIOB警告をグループ化するためにマッチすべきである。
・v+l、v、v−lのようなEOIsを有する警告は、EOIsが構造の点で異なるので、MPGを使用してグループ化されない。
・EOIsのようなa+b+c & a+b+cを有する警告は、各変数(a、b、c)が同じ修正ポイントから値を得る場合に限り、MPGを使用してグループ化される。
は、MPGグループ化警告ポイントでEOIによって得られる変数のセットである。レビュー中、ユーザーは、たいてい、修正ポイントで割り当てられているEOI変数の値を参照し、レビューの下、EOIを評価する。修正ポイントから得られた変数の値を考慮して得ると、Vは、同じEOIのための値のセットである。今、直観的に、MPGグループ化警告にとって、V≦Vは明らかである。ユーザーがMPGグループ化警告がVを考慮して安全であると観測すると、グループ化された警告の全ての安全性が明確に保証される。この状況において、他のMPGグループ化警告の個別のレビューは、不必要であり、避けられる。他の状況において、警告がVを使用して安全として特定されなければ、全てのMPGグループ化警告はユーザーによって個別にレビューされなければならない。
上記プログラムにおけるAIOB警告は、MPGのようにグループ化される。なぜなら、それらの配列サイズは等しく、インデックスは同じ修正ポイントから値を得るからである。レビュー中、ユーザーは、valの報告された修正ポイントを直接見るインデックス変数用の要求された値を見つける。ここで、ユーザーは、変数valの値が配列範囲[0..9]であり、したがって、インデックスは範囲内にある。これにより、警告のMPGグループから選択された警告は、安全であるとわかり、他の警告のレビューは省略される。
本発明の他の実施形態において、システム102は、計算モジュール218によって計算されたLWs用のMPGにのみ基づく警告のグループ化を実行するように構成されている。各グループからのFWsは、FWsのレビュー判断がLWのそれと同じであるので、無視される。MPGに基づくLWsのグループ化は、高効率につながり、警告のマニュアルレビューに要求される努力をさらに低減する。
図5と6を参照して、図5と6は、本発明の実施形態に係る、静的解析中に発生した1または2以上の警告をグループ化する方法500と600を示す。方法500と600は、コンピューター実行可能な命令の一般的状況を説明する。一般的に、コンピューター実行可能な命令は、ルーティーン、プログラム、オブジェクト、コンポーネント、データ構造、手順、モジュール、関数等を含む。それらは、特別な機能を実行し、または特別なアブストラクトデータタイプを実行する。方法500と600は、分散コンピューティング環境で実行されてもよい。その機能はコミュニケーションネットワークを介してリンクされた遠隔処理デバイスによって実行される。分散コンピューティング環境において、コンピューター実行可能な命令は、メモリーストレージデバイスを含む、ローカルコンピューターストレージ媒体とリモートコンピューターストレージ媒体との両方に位置される。
方法500が説明する順番は、限定と解釈されない。記載された方法ブロックのいずれも方法500または代替方法を実行するために、いずれにおいても組み合わせられることができる。加えて、個々のブロックは、本発明の主旨や範囲を逸脱することなく、方法500から除去されてもよい。また、方法は、適切なハードウェア、ソフトウェア、ファームウェアまたはそれらの組合せにおいて実行されることができる。しかし、説明を簡単にするために、以下に記載される実施形態において、方法500は、上述されたシステム102において実行されるとして説明される。
ブロック502で、アプリケーションコードが解析される。一つの実施例において、アプリケーションコードは、解析モジュール212によって警告を発生するために解析される。
ブロック504で、警告から類似する警告が特定される。一つの実施例において、類似する警告は、特定モジュール214によって特定される。
ブロック506で、警告の1または2以上のグループのそれぞれは、類似する警告が形成されることを含む。一つの実施例において、1または2以上のグループは、グループ化モジュール216によって形成される。
静的解析中に発生した1または2以上の警告をグループ化する方法およびシステムの実施例が構造的特徴および/または方法に対して説明されたが、本発明は、説明された、特別な特徴または方法に必ずしも限定されない。むしろ、特別な特徴および方法は、静的解析中に発生した1または2以上の警告をグループ化する方法およびシステムの一例に過ぎない。

Claims (10)

  1. アプリケーションコードの静的解析中に発生した複数の警告をグループ化する方法であって、当該方法は、
    前記複数の警告を発生させるために前記アプリケーションコードを解析する工程と、
    前記複数の警告から、構造的かつ意味的に類似する関心のある式(EOI)を有する複数の類似する警告を特定する工程と、
    前記複数の類似する警告をそれぞれ含む、1または2以上の前記警告のグループを形成する工程と、
    前記複数の類似する警告のグループのそれぞれから代表的な警告を計算する工程と、を含み、
    前記代表的な警告を計算する工程は、前記複数の類似する警告の前記グループ内の前記代表的な警告以外の警告が、前記代表的な警告のレビュー判断に従うように、実行され、
    記代表的な警告が安全であると判断された場合、当該グループ内の前記代表的な警告以外の警告が安全であると判明し、前記代表的な警告が安全ではないと判断された場合、当該グループ内の警告が個別にレビューされる必要があることが判明し
    前記解析する工程と、前記特定する工程と、前記形成する工程と、前記計算する工程とは、メモリーに保存された、プログラム化した命令を使用するプロセッサーによって実行されることを特徴とするアプリケーションコードの静的解析中に発生した複数の警告をグループ化する方法。
  2. 情報計算のフォワードフローにおける前記代表的な警告を計算するためのマストリーチングエクスプレッションズ(MREs)を計算する工程、または、
    情報計算のバックワードフローにおける前記代表的な警告を計算するためのマストライブエクスプレッションズ(MLEs)を計算する工程、をさらに含む請求項1に記載のアプリケーションコードの静的解析中に発生した複数の警告をグループ化する方法。
  3. 前記複数の類似する警告は、互いに到達可能であり、
    前記複数の類似する警告の前記EOIからの変数は、前記複数の類似する警告のプログラムポイント間で修正されず、
    前記複数の類似する警告のうちの一つの前記警告の前記EOIによって得られる値は、前記一つの警告以外の前記複数の類似する警告の前記EOIからの値を含む請求項1に記載のアプリケーションコードの静的解析中に発生した複数の警告をグループ化する方法。
  4. 前記1または2以上の警告のグループは、前記アプリケーションコードのシングルコード認証のために形成される請求項1に記載のアプリケーションコードの静的解析中に発生した複数の警告をグループ化する方法。
  5. アプリケーションコードの静的解析中に発生した複数の警告をグループ化するシステムであって、当該システムは、
    プロセッサーと、
    前記プロセッサーに連結されたメモリーとを含み、
    前記プロセッサーは、前記メモリーに保存された複数のモジュールを実行することができ、
    前記複数のモジュールは、
    前記複数の警告を発生させるために前記アプリケーションコードを解析するように構成された解析モジュールと、
    前記複数の警告から、構造的かつ意味的に類似する関心のある式(EOI)を有する複数の類似する警告を特定するように構成された特定モジュールと、
    前記複数の類似する警告をそれぞれ含む、1または2以上の前記警告のグループを形成するように構成されたグループ化モジュールと、
    前記複数の類似する警告のグループのそれぞれから代表的な警告を計算するように構成された計算モジュールと、を含み、
    前記計算モジュールは、前記複数の類似する警告の前記グループ内の前記代表的な警告以外の警告が、前記代表的な警告のレビュー判断に従うように、前記代表的な警告を計算し、
    記代表的な警告が安全であると判断された場合、当該グループ内の前記代表的な警告以外の警告が安全であると判明し、前記代表的な警告が安全ではないと判断された場合、当該グループ内の警告が個別にレビューされる必要があることが判明することを特徴とするアプリケーションコードの静的解析中に発生した複数の警告をグループ化するシステム。
  6. 前記計算モジュールは、
    情報計算のフォワードフローにおける前記代表的な警告を計算するためのマストリーチングエクスプレッションズ(MREs)を計算するように構成されている、または、
    情報計算のバックワードフローにおける前記代表的な警告を計算するためのマストライブエクスプレッションズ(MLEs)を計算するように構成されている請求項5に記載のアプリケーションコードの静的解析中に発生した複数の警告をグループ化するシステム。
  7. 前記複数の類似する警告は、互いに到達可能であり、
    前記複数の類似する警告の前記EOIからの変数は、前記複数の類似する警告のプログラムポイント間で修正されず、
    前記複数の類似する警告のうちの一つの前記警告の前記EOIによって得られる値は、前記一つの警告以外の前記複数の類似する警告の前記EOIからの値を含む請求項5に記載のアプリケーションコードの静的解析中に発生した複数の警告をグループ化するシステム。
  8. 前記1または2以上の警告のグループは、前記アプリケーションコードのシングルコード認証のために形成される請求項5に記載のアプリケーションコードの静的解析中に発生した複数の警告をグループ化するシステム。
  9. アプリケーションコードの静的解析中に発生した複数の警告をグループ化するシステムであって、当該システムは、
    前記複数の警告を発生させるために前記アプリケーションコードを解析するように構成された解析モジュールと、
    前記複数の警告から複数の類似する警告を特定するように構成された特定モジュールと、
    前記複数の類似する警告をそれぞれ含む、1または2以上の前記警告のグループを形成するように構成されたグループ化モジュールと、
    前記複数の類似する警告のグループのそれぞれから代表的な警告を計算するように構成された計算モジュールと、を含み、
    前記複数の類似する警告の関心のある式(EOI)は、同じ順番で現れる同じオペレーターを有し、
    前記複数の類似する警告の前記EOIにおける変数は、前記アプリケーションコードにおける同じ修正ポイントからの変数を取得し、
    前記計算モジュールは、前記複数の類似する警告の前記グループ内の前記代表的な警告以外の警告が、前記代表的な警告のレビュー判断に従うように、前記代表的な警告を計算し、
    記代表的な警告が安全であると判断された場合、当該グループ内の前記代表的な警告以外の警告が安全であると判明し、前記代表的な警告が安全ではないと判断された場合、当該グループ内の警告が個別にレビューされる必要があることが判明することを特徴とするアプリケーションコードの静的解析中に発生した複数の警告をグループ化するシステム。
  10. 特定のグループにおける前記複数の類似する警告の前記代表的な警告のレビューは、前記特定のグループにおける前記代表的な警告以外の前記複数の類似する警告のレビューを保証し、前記各警告の前記レビューは前記各警告に対応する前記修正ポイントにおける前記変数の値を参照することにより実行される請求項9に記載のアプリケーションコードの静的解析中に発生した複数の警告をグループ化するシステム。
JP2014025029A 2013-02-28 2014-02-13 静的解析中に発生した警告をグループ化するシステムおよび方法 Expired - Fee Related JP5901668B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
IN596/MUM/2013 2013-02-28
IN596MU2013 2013-02-28

Publications (2)

Publication Number Publication Date
JP2014170530A JP2014170530A (ja) 2014-09-18
JP5901668B2 true JP5901668B2 (ja) 2016-04-13

Family

ID=51389277

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014025029A Expired - Fee Related JP5901668B2 (ja) 2013-02-28 2014-02-13 静的解析中に発生した警告をグループ化するシステムおよび方法

Country Status (2)

Country Link
US (1) US9384017B2 (ja)
JP (1) JP5901668B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8707111B2 (en) * 2011-02-09 2014-04-22 Ebay Inc. High-volume distributed script error handling
JP6116639B2 (ja) * 2014-09-29 2017-04-19 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited クラスタ化されたコード解析警告のレビューのための方法およびシステム
EP3285171B1 (en) * 2016-08-11 2021-11-24 Tata Consultancy Services Limited System and method for cause point analysis for effective handling of static analysis alarms
JP6840966B2 (ja) 2016-09-15 2021-03-10 富士通株式会社 参考情報出力プログラム、参考情報出力方法、及び参考情報出力装置
EP3564819B1 (en) 2016-12-29 2021-03-17 Mitsubishi Electric Corporation Program analysis system, program analyzer, program analysis method, and analysis program
US11200144B1 (en) * 2017-09-05 2021-12-14 Amazon Technologies, Inc. Refinement of static analysis of program code
CN107844415B (zh) * 2017-09-28 2021-02-05 西安电子科技大学 一种基于插值的模型检测路径缩减方法、计算机

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4720778A (en) * 1985-01-31 1988-01-19 Hewlett Packard Company Software debugging analyzer
US5764883A (en) * 1996-03-28 1998-06-09 Hewlett-Packard Co. System and method for checking for dynamic resource misuse in a computer program
JP4457127B2 (ja) * 1998-11-27 2010-04-28 パナソニック株式会社 プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体
JP3857842B2 (ja) * 1999-11-16 2006-12-13 富士通株式会社 プログラム分析装置及び記録媒体
US6978443B2 (en) * 2002-01-07 2005-12-20 Hewlett-Packard Development Company, L.P. Method and apparatus for organizing warning messages
US20070128899A1 (en) * 2003-01-12 2007-06-07 Yaron Mayer System and method for improving the efficiency, comfort, and/or reliability in Operating Systems, such as for example Windows
JP4203478B2 (ja) 2005-02-15 2009-01-07 リンナイ株式会社 給湯システム
US20070016894A1 (en) * 2005-07-15 2007-01-18 Sreedhar Vugranam C System and method for static analysis using fault paths
US8141049B2 (en) * 2007-03-14 2012-03-20 Nec Laboratories America, Inc. System and method for scalable flow and context-sensitive pointer alias analysis
JP5369565B2 (ja) * 2008-09-12 2013-12-18 日本電気株式会社 プログラムのエラー情報出力装置、エラー情報出力方法およびエラー情報出力プログラム
US8726254B2 (en) * 2009-06-20 2014-05-13 Microsoft Corporation Embedded annotation and program analysis
US8527966B2 (en) * 2009-09-17 2013-09-03 International Business Machines Corporation Source code inspection method and system
JP5342407B2 (ja) * 2009-10-30 2013-11-13 株式会社日立製作所 プログラム解析方法、プログラム解析プログラムおよびプログラム解析装置
US20110276843A1 (en) 2010-05-05 2011-11-10 International Business Machines Corporation Intelligent error-reporting apparatus and method
WO2012079818A1 (en) * 2010-12-16 2012-06-21 International Business Machines Corporation A method for validating run-time references
US20120222009A1 (en) 2011-02-24 2012-08-30 Ayewah Nathaniel E Defective code warning resolution analysis
JP5665128B2 (ja) * 2011-05-30 2015-02-04 日本電気通信システム株式会社 静的解析支援装置、静的解析支援方法、及びプログラム

Also Published As

Publication number Publication date
US20140244645A1 (en) 2014-08-28
US9384017B2 (en) 2016-07-05
JP2014170530A (ja) 2014-09-18

Similar Documents

Publication Publication Date Title
JP5901668B2 (ja) 静的解析中に発生した警告をグループ化するシステムおよび方法
US11748480B2 (en) Policy-based detection of anomalous control and data flow paths in an application program
US10387236B2 (en) Processing data errors for a data processing system
US10095602B2 (en) Automated code analyzer
US9712551B2 (en) Methods and systems for architecture-centric threat modeling, analysis and visualization
US10176234B2 (en) Impact analysis
Vieira et al. Defending against web application vulnerabilities
US20210092160A1 (en) Data set creation with crowd-based reinforcement
US9600244B1 (en) Cognitive editor
US9613362B2 (en) Monitoring a situation by comparing parallel data streams
US20190079759A1 (en) Method and Apparatus for Finding Long Methods in Code
US11868489B2 (en) Method and system for enhancing data privacy of an industrial system or electric power system
US20230208882A1 (en) Policy - aware vulnerability mapping and attack planning
US11115439B2 (en) Automated security solutions identification and architecture design
US10268461B2 (en) Global data flow optimization for machine learning programs
Schrettner et al. Impact analysis in the presence of dependence clusters using Static Execute After in WebKit
JP5706940B2 (ja) ランタイム実行障害のソースを識別するシステム及び方法
WO2015055373A2 (en) Case-based reasoning
US9619765B2 (en) Monitoring a situation by generating an overall similarity score
TW201546629A (zh) 語意限制技術
US20150112914A1 (en) Case-based reasoning
US20150112912A1 (en) Case-based reasoning
Aditham et al. A novel control-flow based intrusion detection technique for big data systems
CN110554925A (zh) 面向死锁检查的非阻塞mpi程序符号执行方法、系统及介质
US20150112913A1 (en) Case-based reasoning

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141216

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150316

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150331

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150901

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151130

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160308

R150 Certificate of patent or registration of utility model

Ref document number: 5901668

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees