(57)【要約】      （修正有）【課題】アプリケーションコードの静的解析中に発生した警告をグループ化する方法およびシステム。【解決手段】解析モジュール２１２は、警告を発生するためにアプリケーションコードを解析する。特定モジュール２１４は、構造的かつ意味的に類似する関心度に基づいて、発生した類似する警告を特定するように構成されている。その結果、類似する警告の関心度（ＥＯＩ）は同じ順序で現れる同じオペレーターを有し、類似する警告のＥＯＩにおける変数は、アプリケーションコードにおける同じ修正ポイントから値を得る。グループ化モジュール２１６は、特定された類似する警告の１または２以上のグループを形成する。計算モジュール２１８は、各グループから代表的な警告を計算するように構成されている。その結果、代表的な警告とそれ以外の警告はそれらのレビュー判断の関係に従う。【選択図】図２
2014170530.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションコードの静的解析中に発生した警告をグループ化する方法であって、当該方法は、
前記警告を発生するために前記アプリケーションコードを解析する工程と、
前記警告から、構造的かつ意味的に類似する関心度（ＥＯＩ）を有する類似する警告を特定する工程と、
前記警告の１または２以上のグループを形成する工程と、を含み、
前記１または２以上のグループのそれぞれは、前記類似する警告を含み、
前記解析する工程と、前記特定する工程と、前記形成する工程とは、メモリーに保存された、プログラム化した命令を使用するプロセッサによって実行されることを特徴とするアプリケーションコードの静的解析中に発生した警告をグループ化する方法。
【請求項２】
前記１または２以上のグループのそれぞれから代表的な警告を計算する工程とをさらに含み、
前記代表的な警告以外の前記グループにおける前記警告は、前記代表的な警告のレビュー判断に従い、
前記代表的な警告のレビューは、前記代表的な警告以外の前記グループにおける前記警告の前記レビューを保証する請求項１に記載のアプリケーションコードの静的解析中に発生した警告をグループ化する方法。
【請求項３】
前記計算する工程は、
情報計算のフォワードフローにおける前記代表的な警告を計算するためのマストリーチングエクスプレッションズ（ＭＲＥｓ）を計算する工程、または、
情報計算のバックワードフローにおける前記代表的な警告を計算するためのマストライブエクスプレッションズ（ＭＬＥｓ）を計算する工程、をさらに含む請求項２に記載のアプリケーションコードの静的解析中に発生した警告をグループ化する方法。
【請求項４】
前記類似する警告は、互いに到達可能であり、
前記類似する警告の前記ＥＯＩからの変数は、前記類似する警告のプログラムポイント間で修正されず、
前記類似する警告のうちの少なくとも一つの警告のＥＯＩによって得られる値は、前記少なくとも一つの警告以外の類似する警告の前記ＥＯＩからの値を含む請求項１に記載のアプリケーションコードの静的解析中に発生した警告をグループ化する方法。
【請求項５】
前記１または２以上のグループは、前記アプリケーションコードのシグナル認証のために形成される請求項１に記載のアプリケーションコードの静的解析中に発生した警告をグループ化する方法。
【請求項６】
アプリケーションコードの静的解析中に発生した警告をグループ化するシステムであって、当該システムは、
プロセッサーと、
前記プロセッサーに連結されたメモリーとを含み、
前記プロセッサーは、前記メモリーに保存された複数のモジュールを実行することができ、
前記複数のモジュールは、
前記警告を発生するために前記アプリケーションコードを解析するように構成された解析モジュールと、
前記警告から、構造的かつ意味的に類似する関心度（ＥＯＩ）を有する類似する警告を特定するように構成された特定モジュールと、
前記警告の１または２以上のグループを形成するように構成されたグループ化モジュールと、を含み、
前記１または２以上のグループのそれぞれは、前記類似する警告を含むことを特徴とする警告をグループ化するシステム。
【請求項７】
前記１または２以上のグループのそれぞれから代表的な警告を計算するように構成された計算モジュールをさらに含み、
前記代表的な警告以外の前記グループにおける前記警告は、前記代表的な警告のレビュー判断に従い、
前記代表的な警告のレビューは、前記代表的な警告以外の前記グループにおける前記警告の前記レビューを保証する請求項６に記載のアプリケーションコードの静的解析中に発生した警告をグループ化するシステム。
【請求項８】
前記計算モジュールは、
情報計算のフォワードフローにおける前記代表的な警告を計算するためのマストリーチングエクスプレッションズ（ＭＲＥｓ）を計算するように構成されている、または、
情報計算のバックワードフローにおける前記代表的な警告を計算するためのマストライブエクスプレッションズ（ＭＬＥｓ）を計算するように構成されている請求項７に記載のアプリケーションコードの静的解析中に発生した警告をグループ化するシステム。
【請求項９】
前記類似する警告は、互いに到達可能であり、
前記類似する警告の前記ＥＯＩからの変数は、前記類似する警告のプログラムポイント間で修正されず、
前記類似する警告のうちの少なくとも一つの警告のＥＯＩによって得られる値は、前記少なくとも一つの警告以外の類似する警告の前記ＥＯＩからの値を含む請求項６に記載のアプリケーションコードの静的解析中に発生した警告をグループ化するシステム。
【請求項１０】
前記１または２以上のグループは、前記アプリケーションコードのシグナル認証のために形成される請求項６に記載のアプリケーションコードの静的解析中に発生した警告をグループ化するシステム。
【請求項１１】
アプリケーションコードの静的解析中に発生した警告をグループ化するシステムであって、当該システムは、
前記警告を発生するために前記アプリケーションコードを解析するように構成された解析モジュールと、
前記警告から類似する警告を特定するように構成された特定モジュールと、
前記警告の１または２以上のグループを形成するように構成されたグループ化モジュールと、を含み、
前記類似する警告の関心度（ＥＯＩ）は、同じ順番で現れる同じオペレーターを有し、
前記類似する警告の前記ＥＯＩにおける変数は、前記アプリケーションコードにおける同じ修正ポイントからの変数を得、
前記１または２以上のグループのそれぞれは、前記類似する警告を含み、
前記解析と、前記特定と、前記形成とは、メモリーに保存された、プログラム化した命令を使用するプロセッサによって実行されることを特徴とするアプリケーションコードの静的解析中に発生した警告をグループ化するシステム。
【請求項１２】
特定のグループにおける前記類似する警告のうちの一つの警告のレビューは、前記一つの警告以外の前記特定のグループにおける前記類似する警告の前記レビューを保証する請求項１１に記載のアプリケーションコードの静的解析中に発生した警告をグループ化するシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、静的解析中に発生した警告に関する。より具体的に、本発明は、静的解析中に発生した警告のグループ化に関する。
【背景技術】
【０００２】
安全で重要なソフトウェアアプリケーションの検証および認証における静的解析の使用は、最も重要である。しかしながら、ソフトウェアアプリケーションの静的解析は、誤検出としてよく取り上げられ、誤って報告される多くの警告を引き起こす。静的解析によって発生した全ての警告は、警告が安全であるか安全でないかを確認するために、マニュアルでレビューする必要がある。発生した多くの警告のマニュアルでのレビューは、時間を必要とし、高コストになっている。多くの警告は、抽出的概念の使用、配列処理を除外することや解析を内部手続的に実行することのような意識的な設計決定の結果である。また、変数をランタイムでとることができるという実際の値を決定するための静的解析の能力が低下すると、多くの警告が発生するようになる。
【０００３】
現在、静的解析によって発生した警告を解析またはレビューするユーザーは、各警告を個別にレビューしなければならない。静的解析をより正確にする、抽象解釈（Abstract Interpretation）、ディファレンスバウンドマトリックス（Difference Bound Matrix）およびモデル検査（Model-checking）のような多くの技術が存在する。しかしながら、上記の技術は、まだ多くの警告を発生し、警告を解析するために必要とされるマニュアルでのレビューを低減可能な程度にまで、低減できていない。
【０００４】
さらに、他の従来技術は、警告の重大性または優先度に基づいて、警告のグループ化を提供する。しかし、これらの技術は、警告のレビューを低減できていない。警告のレビューにおける冗長性の特定に基づいて、レビューの低減を保証する技術は存在していない。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、静的解析中に発生した警告をグループ化するシステムおよび方法を提供することにある。以下に詳細に記載された概要は、特許請求の範囲に記載された発明の本質的な特徴を特定する意図ではなく、特許請求の範囲に記載された発明を限定または決定する意図ではない。
【課題を解決するための手段】
【０００６】
本発明の一つの実施形態において、アプリケーションコードの静的解析中に発生した警告をグループ化するシステムが開示されている。このシステムは、プロセッサーと、プロセッサーに連結されたメモリーとを含む。プロセッサーは、メモリーに保存された複数のモジュールを実行することができる。複数のモジュールは、警告を発生するためのアプリケーションコードを解析するように構成された解析モジュールと、警告から類似する警告を特定するように構成された特定モジュールとを含む。類似する警告は、構造的かつ意味的に類似する関心度（EOI）を有する。また、複数のモジュールは、警告の１または２以上のグループを形成するように構成されたグループ化モジュールを含み、警告の１または２以上のグループのそれぞれは、類似する警告を含む。
【０００７】
本発明の一つの実施形態において、アプリケーションコードの静的解析中に発生した警告をグループ化する方法が開示されている。この方法は、警告を発生するためにアプリケーションコードを解析する工程を含む。その方法は、警告から類似する警告を特定する工程をさらに含む。類似する警告は、構造的かつ意味的に類似する関心度（EOI）を有する。また、方法は、警告の１または２以上のグループを形成する工程を含む。警告の１または２以上のグループのそれぞれは、類似する警告を含む。解析工程と、特定工程と、形成工程とは、メモリー中に保存された、プログラム化した命令を使用するプロセッサーによって実行される。
【０００８】
本発明の一つの実施形態において、アプリケーションコードの静的解析中に発生した警告をグループ化するシステムが開示されている。このシステムは、警告を発生するためにアプリケーションコードを解析するように構成された解析モジュールを含む。そのシステムは、警告から類似する警告を特定するように構成された特定モジュールをさらに含む。
類似する警告の関心度（EOI）は、同じ指令に現れる同じオペレーターを有する。そして、類似する警告のEOIにおける変数は、アプリケーションコードにおける同じ修正ポイントからの値を得る。システムは、警告の１または２以上のグループを形成するように構成されたグループ化モジュールを含む。警告の１または２以上のグループのそれぞれは、類似する警告を含む。
【図面の簡単な説明】
【０００９】
詳細な説明は、添付の図面を参照して説明される。図において、符号の左側の数字は、図番を特定している。図中、同じ番号が同じ特徴および同じ構成に付されている。
【００１０】
【図１】図１は、本発明の実施形態に係る、静的解析中に発生した警告をグループ化するシステムのネットワーク実施例を示す図である。
【００１１】
【図２】図２は、本発明の実施形態に係る、静的解析中に発生した警告をグループ化するシステムを示す図である。
【００１２】
【図３】図３は、本発明のシステムの実施形態に係る、マストリーチングエクスプレッションズ（Must Reaching Expressions）（MREs）を使用するリーダー警告（leader warnings）のセットの計算方法を示す図である。
【００１３】
【図４】図４は、本発明のシステムの実施形態に係る、マストライブエクスプレッションズ（Must Live Expressions）（MLEs）を使用するリーダー警告（leader warnings）のセットの改良方法を示す図である。
【００１４】
【図５】図５は、本発明のシステムの実施形態に係る、静的解析中に発生した警告をグループ化する方法を示す図である。
【発明を実施するための形態】
【００１５】
アプリケーションコードの静的解析中に発生した警告をグループ化するシステムおよび方法を説明する。まず、警告はアプリケーションコードの解析で発生する。発生した警告は、警告の類似性に基づいてさらに分類またはグループ化される。類似性に基づいて警告をグループ化するために、種々のコンストレイント（制限）（constraints）が満たされる必要がある。そのコンストレイントは、警告の構造的かつ意味的に類似する関心度（EOIs）を含んでいる。警告は、フォワードフロー（forward flow）またはバックワードフロー（backward flow）において互いに到達可能である。警告のＥＯＩｓからの変数は、警告のプログラムポイント間で修正されない。ＥＯＩの値のための少なくとも一つの警告は、他の警告のＥＯＩｓからの値を含む。
【００１６】
また、代表的な警告は、代表的な警告のレビューが各グループにおける代表的な警告以外の警告のレビューを保証するように、警告の各グループから計算される。代表的な警告が安全であると分かった場合、代表的な警告以外の警告もまた安全であり、レビューの必要はない。しかしながら、代表的な警告が安全でないと分かった場合、各グループにおける代表的な警告以外の警告は、個別にレビューされなければならない。
【００１７】
別の実施形態において、警告の関心度（EOIs）が同じ順番で現れる同じオペレーターを有し、ＥＯＩｓにおけるポジションによって関連付けられるＥＯＩ変数が同じ修正ポイントからの値を得るのなら、発生した警告はグループ化される。形成されたグループにおける警告の一つは、ＥＯＩ変数の修正ポイントによって提供された値を検討し、レビューされる。そして、レビューされた警告が安全であれば、レビューされた警告以外の、同じグループからの警告もまた安全であり、レビューの必要はない。他の場合において、レビューされた警告が安全でないとき、グループにおける各警告は個別にレビューされる必要がある。
【００１８】
静的解析中に発生した警告をグループ化するシステムおよび方法の態様は、いくつもの異なるコンピューターシステム、環境および／または構成で実施されてもよいが、実施形態は以下の具体的なシステムで説明される。
【００１９】
図１を参照して、図１は、本発明の実施形態に係る、アプリケーションコードの静的解析中に発生した１または２以上の警告をグループ化するシステム１０２のネットワーク実施例１００が示す。一つの実施形態において、システム１０２は、静的解析中に発生した警告をグループ化する。一つの実施形態において、システム１０２は、警告を発生するために、アプリケーションコードを解析する。発生した警告は、警告の類似性に基づいて特定される。類似性は、１または２以上のコンストレイントに基づいている。特定された警告は、類似する警告および同様の警告と称されてもよい。類似性に基づく警告は取り替え可能である。また、警告の１または２以上のグループが形成される。警告の１または２以上のグループのそれぞれは、類似する警告を含んでいる。また、システム１０２は、警告の各グループから代表的な警告を計算する。その結果、各グループにおける代表的な警告以外の警告は、代表的な警告のレビュー判断（review judgment）に従う。そして、代表的な警告のレビューは、各グループにおける代表的な警告以外の警告のレビューを保証する。
【００２０】
システム１０２の別の実施形態において、特定された類似する警告の関心度（EOIs）が同じ順番で現れる同じオペレーターを有し、類似する警告のＥＯＩからのＥＯＩ変数が同じ修正ポイントからの値を得るように、類似する警告は発生した警告間で特定される。ＥＯＩ変数は、ＥＯＩにおける位置によって関連付けられている。また、システム１０２は、警告の１または２以上のグループを形成し、警告の１または２以上のグループのそれぞれは、類似する警告を含んでいる。形成された各グループにおける類似する警告のうちの一つの警告のレビューは、形成された各グループにおけるレビューされた警告以外の類似する警告のレビューを保証する。その一つの警告は、修正ポイントによってＥＯＩ変数に提供される値を考慮し、レビューされる。警告がレビューで安全であると分かれば、その警告以外の類似する警告も安全であり、個別にレビューされる必要はない。その警告がレビューで安全でない場合、グループにおける全ての類似する警告は個別にレビューされなければならない。
【００２１】
本発明は、システム１０２がサーバー上で実行されることを考慮して説明されているが、システム１０２は、ラップトップコンピューター、デスクトップコンピューター、ノート型コンピューター、ワークステーション、メインフレームコンピューター、サーバー、ネットワークサーバーなどの種々のコンピューターシステムで実行される。システム１０２は、１または２以上のユーザーデバイス１０４−１、１０４−２・・・１０４−Ｎ（以下、これらをまとめてユーザー１０４またはユーザーデバイス１０４にあるアプリケーションという）を通して多くのユーザーによってアクセスされる。ユーザーデバイス１０４は、特に限定されないが、ポータブルコンピューター、パーソナルデジタルアシスタント、携帯用デバイス、ワークステーションなどが挙げられる。ユーザーデバイス１０４は、ネットワーク１０６を介してシステム１０２に通信可能に連結されている。
【００２２】
一つの実施形態において、ネットワーク１０６は、ワイヤレスネットワーク、有線ネットワークまたはそれらの組合せであってもよい。ネットワーク１０６は、イントラネット、ローカルエリアネットワーク（LAN）、ワイドエリアネットワーク（WAN）、インターネット等の異なる種類のネットワークの一つとして実行される。ネットワーク１０６は、専用ネットワークまたは共有ネットワークのいずれかであってもよい。共有ネットワークは、種々のプロトコルを使用する異なるタイプのネットワークの接続（association）を表す。例えば、種々のプロトコルは、互いに通信する、ハイパーテキスト転送プロトコル（HTTP）、伝送制御プロトコル／インターネットプロトコル（TCP/IP）、ワイヤレスアプリケーションプロトコル（WAP）などである。また、ネットワーク１０６は、ルーター、ブリッジ、サーバー、コンピューターデバイス、ストレージデバイス等を含む種々のネットワークデバイスを含んでいる。
【００２３】
図２を参照すると、図２は、本発明の実施形態に係るシステム１０２を示す。一つの実施形態において、システム１０２は、少なくとも一つのプロセッサー２０２と、入力／出力（I/O）インターフェース２０４と、メモリー２０６とを含んでいる。少なくとも一つのプロセッサー２０２は、１または２以上の、マイクロプロセッサー、マイクロコンピューター、マイクロコントローラー、デジタルシグナルプロセッサー、中央処理装置、ステートマシーン（state machines）、ロジック回路および／または操作上の命令に基づく信号をコントロールするいずれのデバイスなどとして実行される。他の性能として、少なくとも一つプロセッサー２０２は、メモリー２０６に保存されたコンピューター読み取り可能な命令をフェッチして実行するように構成されている。
【００２４】
Ｉ／Ｏインターフェース２０４は、種々のソフトウェアおよびハードウェアインターフェース（例えば、ウェブインターフェース、グラフィカルユーザーインターフェースなど）を含んでいる。Ｉ／Ｏインターフェース２０４は、クライアントデバイス１０４を介して、またはクライアントデバイス１０４と直接に、ユーザーとシステム１０２とを交信させる。また、Ｉ／Ｏインターフェース２０４は、システム１０２が他のコンピューターデバイス（例えば、図示されていない、ウェブサーバーおよび外部データサーバー）と通信することを可能にしている。Ｉ／Ｏインターフェース２０４は、有線ネットワーク（例えば、LAN、ケーブルなど）およびワイヤレスネットワーク（例えば、WLAN、セル方式、通信衛星など）を含む多種多様のネットワークおよびプロトコルタイプ内で多重通信を促進することができる。Ｉ／Ｏインターフェース２０４は、多くのデバイスを、互いに、または別のサーバーに接続するための１または２以上のポートを含んでいてもよい。
【００２５】
メモリー２０６は、技術分野で知られている、いずれのコンピューター読み取り可能媒体も含む。例えば、それは、スタティックランダムアクセスメモリ（SRAM）およびダイナミックランダムアクセスメモリ（DRAM）のような揮発性メモリ、および／または、読み取り専用メモリ（ROM）、消去可能ROM、フラッシュメモリ、ハードディスク、光学ディスクおよび磁気テープのような非揮発性メモリなどを含む。
【００２６】
モジュール２０８は、ルーティン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。それは、特定のタスクを実行するか、特定の抽象データタイプを実装する。一つの実施形態において、モジュール２０８は、解析モジュール２１２と、特定モジュール２１４と、グループ化モジュール２１６と、計算モジュール２１８と、その他のモジュール２２０とを含んでいる。その他のモジュール２２０は、システム１０２のアプリケーションおよび機能を補うプログラムまたはコードされた命令を含んでいる。
【００２７】
データ２１０は、とりわけ、１または２以上のモジュールによって所有され、受信され、発生されたデータを保存するレポジトリ（repository）として作用する。データ２１０は、また、システムデータベース２２２と、他のデータ２２４とを含んでいる。他のデータ２２４は、他のモジュール２２０における１または２以上のモジュールの実行の結果として発生されたデータを含んでいる。
【００２８】
一つの実施形態において、まず、ユーザーは、Ｉ／Ｏインターフェース２０４を介してシステム１０２にアクセスするクライアントデバイス１０４を使用する。ユーザーは、システム１０２を使用するために、Ｉ／Ｏインターフェース２０４を使用するクライアントデバイスを登録する。システム１０２のワークは、図３と図４で詳細に説明される。システム１０２は、アプリケーションコードの静的解析中に発生した警告のグループ化を提供するように構成されている。アプリケーションコードの静的解析中に発生した警告のグループ化を提供するために、システム１０２は、まず、警告を発生するためのアプリケーションコードを解析する。具体的に、本実施形態において、アプリケーションコードは、モジュール２１２を解析することによって解析される。
【００２９】
また、特定モジュール２１４は、複数の警告から類似する警告を特定するように構成されている。類似する警告は、構造的かつ意味的に類似する関心度（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.  }
【００３２】
上述されたプログラムにおいて、３ゼロ除算（Zero Division）（ZD）と６配列インデックス範囲外（Array Index Out of Bound）（AIOB）警告が存在する。なぜなら、分母‘ｆａｃｔｏｒ’と配列インデックス‘ｎ’の値は、それぞれ、静的に未知であるからである。表記ＺＤｎと表記ＡＩＯＢｎは、それぞれ、ライン‘ｎ’でＺＤとＡＩＯＢポイントを示すために使用される。２以上のそのようなポイントがシングルラインに存在する場合、プログラムにおけるポイントは、左から右に見られるポイントの位置と区別され、接頭上付き文字として示される。例えば、ライン１５からの第１および第２のＡＩＯＢポイントは、それぞれ、１ＡＩＯＢ１５および２ＡＩＯＢ１５として示される。上記プログラムにおいて、全てのＺＤ警告は、それ自身で類似する警告である。なぜなら、ＺＤ警告は、同じ分母式‘ｆａｃｔｏｒ’を有し、分母式‘ｆａｃｔｏｒ’の値は、ＺＤ６ポイントとＺＤ１２ポイントとの間で修正されない。上記例において、分母式だけがＥＯＩｓとして考えられる。なぜなら、もしそれが、値‘０’の評価につながるのなら、分母式は、チェックすることによって与えられるＺＤ警告ポイントをレビューするために十分であるからである。
【００３３】
また、グループ化モジュール２１６は、警告の１または２以上のグループを形成するように構成されている。そのような警告の１または２以上のグループのそれぞれは、類似する警告を含む。上述されたプログラムにおいて、ＺＤ警告は、類似する警告であるので、ともにグループ化されている。システム１０２は、シングルコード認証のために、静的解析によって発生した類似する警告のグループ化を実行する。
【００３４】
また、計算モジュール２１８は、類似する警告のグループのそれぞれから代表的な警告を計算するように構成されている。その結果、類似する警告のグループにおける代表的な警告以外の警告は、代表的な警告のレビュー判断に従う。代表的な警告のレビューの間、代表的な警告が安全であると分かることは、グループにおける代表的な警告以外の類似する警告のレビューを保証する。他の場合において、代表的な警告が安全でないと分かれば、グループにおける類似する警告の全ては個別にレビューされる必要がある。計算モジュール２１８は、情報計算のフォワードフローにおいて各グループから代表的な警告を計算するため、マストリーチングエクスプレッションズ（Must Reaching Expressions）（MREs）の計算と、情報計算のバックワードフローにおいて各グループから代表的な警告を計算するため、マストライブエクスプレッションズ（Must Live Expressions）（MLEs）の計算とをさらに実行する。代表的な警告は、リーダー警告（Leader Warnings）（LW）として示され、各グループにおける代表的な警告以外の警告は、フォロワー警告（Follower Warning）（FW）として示される。上述されたプログラムコードにおいて、ＺＤ警告のグループから、ＺＤ６は、ＬＷとして安全に選択されてもよい。なぜなら、他の警告は、ＬＷのレビュー判断に従うように観測されるからである。
【００３５】
形成された類似する警告のグループからの警告は、そのＥＯＩが同じグループから、すなわち、もし下記が存在するのなら任意の警告のための他の警告ポイントに正確に到達し（Must Reaching Expression-MRE）、または、正確に生存する（Must Live Expression-MLE）場合に限り、ＬＷとして選択される。
−警告Ｗに類似するとして特定された他の警告から１また２以上のＭＲＥ／ＭＬＥが存在する。ＷはＦＷでなければならない。
−警告Ｗに類似するとして特定された他の警告からＭＲＥ／ＭＬＥが存在しない。正確にＷはＦＷでなければならない。
【００３６】
また、上述したプログラムを参照すると、ＺＤ６警告は、ＬＷとして選択されてもよい。なぜなら、ＺＤ６の分母式（dominator expression）は後のＺＤポイントに正確に到達するからである。すなわち、ＺＤ９とＺＤ１２に対する全てのパスは、ＺＤ６を含み、分母変数‘ｆａｃｔｏｒ’はその間で修正されない。したがって、ＺＤ９とＺＤ１２（FWs）の分母によって求められる値は、ＺＤ６の分母によって求められる値に含まれている。この場合において、ＺＤ６警告はレビューで安全であると分かり、ＦＷｓは安全であると保証される。ＺＤ６警告が安全でなければ、ＦＷｓが安全でない。後者の場合において、ＦＷｓは、必ずしも安全でないと観測される必要はない。なぜなら、ＦＷｓが安全でないことを防止するいくつかの付加チェックが存在するからである。
【００３７】
一般に、欠陥／安全でないとして発生した警告を見つける可能性はとても低い。ＬＷとＦＷｓとの間の与えられたレビュー判断関係と、欠陥として発生した警告を見つける可能性に関し、レビューのためのリーダー警告（LWs）のみが存在することが観測される。したがって、類似する警告の提案されたグループ化は、レビュー中、ユーザーがＦＷｓに注目することを避け、レビューの低減につながる。
【００３８】
また、上述したプログラムを参照すると、プログラムにおける６ ＡＩＯＢポイントは、ＡＩＯＢ警告である。なぜなら、それらのインデックス値は静的に知られることができないからである。ＡＩＯＢ警告は、類似する警告としてまた観測されてもよい。なぜなら、ＡＩＯＢ警告のインデックスは、同じであり、ライン７と１６との間で修正されないからである。ＡＩＯＢ警告のうちのいずれか２つのＡＩＯＢ警告は、２つのＡＩＯＢ警告の関連する配列インデックス（array index）および配列サイズが（array size）同じである場合に限り、類似する警告である。配列インデックスのみがＡＩＯＢ警告の認証との関連でＥＯＩとして考えられ、そのインデックスチェックのための範囲（bound）（配列サイズ）を得ることが要求されているので、インデックスされた配列がＥＯＩから除外される。配列サイズにアクセスされた配列から焦点をシフトする理由は、類似する警告として、警告の最大可能数を特定することである。配列がＥＯＩの一部として扱われると、警告１ＡＩＯＢ１５および２ＡＩＯＮ１５は、類似する警告として特定されないかもしれない。
【００３９】
類似する警告として特定されたＡＩＯＢ警告は、シングル警告としてそれをレビューするためにグループ化される。グループ化されたＡＩＯＢ警告に関し、ＡＩＯＢ７は、ＬＷとして計算されない。なぜなら、ＡＩＯＢ７のインデックスは、他のＡＩＯＢポイントに正確に到達しないし、レビュー判断関係の要求された保証はこの選択と与えられないからである。同様に、ＡＩＯＢ９およびＡＩＯＮ１２警告は、ＬＷとして考慮されない。しかしながら、１ＡＩＯＢ１５または同じラインからの他の警告は、グループのＬＷとしてとられる。なぜなら、この選択は、ＬＷとＦＷｓとの間の要求されたレビュー判断関係を保証するからである。１ＡＩＯＢ１５のインデックスによって評価された値は、他のＡＩＯＢのインデックスによって評価された値を含む。これは、１ＡＩＯＢ１５のインデックス（n）が前のＡＩＯＢポイントで正確に生存しているということを観測することによって保証される。すなわち、計算されたＦＷｓを通るパスが１ＡＩＯＢ１５（LW）を通り、インデックス‘ｎ’が中間で修正されないということを観察することによって保証される。警告１ＡＩＯＢ１５のレビューは、形成されたグループにおける他の警告のレビューを保証する。
【００４０】
上述されたプログラムは、単一変数とＥＯＩｓ（ZD用のfactor, AIOB用のn）を考慮するだけである。しかし、類似する警告として特定された警告は、仮にそれらのＥＯＩｓが（var1+var2-var3）または（arr1[0]+arr[i]）のような複素式（complex expression）であるとしても、グループ化される。アプリケーションレベルでの類似する警告として特定される警告のグループ化は、発生した警告の数を減らし、レビュープロセス中の多重認証サイクルを回避し、レビューを低減する。
【００４１】
計算モジュール２１８は、リーダー警告の計算のためのＭＲＥｓとＭＬＥｓを計算する。マストリーチングエクスプレッション（ＭＲＥ）は、以下のように規定される。Ｐに来る全てのパスがＰＥを通り、ＰＥとＰとの間のセグメントパスが‘ｅ’のいくつかのｒ−値のｌ−値アカーレンス（occurrence）を含まない場合、プログラムポイントＰＥからの式‘ｅ’は、プログラムポイントＰでのＭＲＥである。すなわち、ＰＥはＰに先行し、ＰＥで‘ｅ’によって得られた値は、それがＰで得られるのなら、‘ｅ’の値を含む。上述されたプログラムからのＭＲＥｓのいくつかの例は、以下の通りである。
−ＺＤ６の分母は、ＺＤ９への各パスとしてＺＤ９とＺＤ１２でＭＲＥである。ＺＤ１２は、ＺＤ６を通り、変数‘ｆａｃｔｏｒ’は中間で修正されない。
−ＺＤ９の分母は、ＺＤ１２でＭＲＥである。しかし、ＺＤ９がＺＤ６に先行しないので、ＺＤ６でＭＲＥであることができない。
−ＡＩＯＢ７（またはＡＩＯＢ１０、ＡＩＯＢ１３）のインデックスｎは、他のいずれのＡＩＯＢポイントでＭＲＥでない。なぜなら、それらを含むことなくパスが存在するからである。
【００４２】
また、ＭＲＥｓは、データフロー解析（Data Flow Analysis）（DFA）を使用して効率的に計算される。ＤＦＡは、アプリケーションにける種々のプログラムポイントで値または値のセットとしてフロー情報を収集する。ファンクションサマリーに基づくアプローチは、コンテクストおよびフローセンシティブ態様（context and flow sensitive manner）で、要求されたＭＲＥｓを計算するために解決するＤＦＡに使用される。ＭＲＥｓ計算のための以下に示されたデータフロー形式化は、フォワードフロー解析を表し、同時にシングル認証機能性をターゲットとする。例えば、ＺＤ警告とＡＩＯＢ警告をグループ化するための要求されたＭＲＥｓは、別々に計算されなければならない。利用できる式とは違って、考慮されたＥＯＩｓは、それらがＩＲ表現（入力ソースプログラム用に作られた抽象構文木）であるように、実際の式である。以下のデータフロー方程式は、ＣＦＧ（制御フローグラフ）におけるノード‘ｎ’のために示される。
2014170530.tif 000003
【００４３】
2014170530.tif 000004
【００４４】
‘Ｏｕｔｎ’のための方程式は、キルコンポーネント（kill component）がＧｅｎｎ＋Ｉｎｎから計算されるので、標準ＤＦＡ方程式から誘導される。この変化は、ＭＲＥｓが”ｖａｌ＝ａｒｒ［ｖａｌ］“のような同じプログラムポイントで発生され、消される（killed）ように、組み込まれる（具現化される）。インデックス‘ｖａｌ’は、このプログラムポイント後、ＭＲＥとして流出することを期待されていない。
【００４５】
より効率的にＭＲＥｓを計算するために、以下のポイントが考慮される。
−警告のみの解析と共にプログラムポイントを考慮する。安全または安全でないとして特定されたＰＯＩｓがＭＲＥ計算から無視される。
−ＭＲＥｓ計算からの関数呼び出しおよび揮発性関数を含むＥＯＩｓを無視する。なぜなら、計算されたＬＷとＦＷｓのレビュー判断で要求された保証がそれらの存在とともに与えられることができないからである。
−修正された変数の情報は、分離“May-Kill/Modified”データフロー問題として計算されるべきである。
−配列が計算する消された情報に含まれるとき、保守的なアプローチが採られるべきである。（ａｒｒ［０］＋ｂ）のような関数は、‘ｉ’の値が未知であるとき、“ａｒｒ［ｉ］＝ｎ”プログラムポイント後に到達されるべきでない。
【００４６】
マストライブエクスプレッション（Must Live Expression）（MLE）は、以下のように規定される。Ｐを通る全てのパスがＰＥを通り、ＰとＰＥとの間のセグメントパスが‘ｅ’のいくつかのｒ−値のｌ−値アカーレンスを含まない場合、プログラムポイントＰＥからの式‘ｅ‘は、プログラムポイントＰでＭＬＥである。すなわち、ＰがＰＥに先行し、ＰＥで‘ｅ‘によって得られた値は、それがＰで得られるのなら、‘ｅ‘の値を含む。上述されたプログラムからのＭＬＥｓのいくつかの例は、以下の通りである。
−１ＡＩＯＢ１５のｎのインデックスは、ＡＩＯＢ７からの全てのパスがはまた１ＡＩＯＢ１５を通り、それらのインデックスｎが中間で修正されないように、ＡＩＯＢ７でＭＬＥである。同様に、ライン１５での警告からのインデックスは、ＡＩＯＢ７、ＡＩＯＢ１０、ＡＩＯＢ１３でＭＬＥｓである。
−ＡＩＯＢ１３のインデックスは、ＡＩＯＢ７とＡＩＯＢ１０警告でＭＬＥである。なぜなら、ＡＩＯＢ７とＡＩＯＢ１０を通り、ＡＩＯＢ１３を通らないパスが存在するからである。
【００４７】
また、ＭＬＥｓは、データフロー解析（DFA）を使用して効率的に計算される。ＭＬＥｓ計算のための形式化は、Ｉｎｎの方程式における変化のみを有し、ＭＲＥｓ計算のための形式化と同様である。この変化は、情報計算のバックワードフローを考慮するために組み込まれ（具現化される）、以下に示される。
2014170530.tif 000005
効率的なＭＲＥｓ計算のために与えられる考慮が、ＭＬＥｓ計算のために同様にあってもよい。
【００４８】
計算モジュール２１８は、不要なＭＲＥ／ＭＬＥの特定を避けるために、最適化をさらに実行する。説明されたＤＦＡは、ＭＲＥ／ＭＬＥが各警告ポイントで発生することを示す。ＤＦＡを解いている間、警告ポイントが他の警告ポイントから流れ込むＭＲＥ／ＭＬＥを観測すると、現在の警告用のＭＲＥ／ＭＬＥは発生する必要がない。そのようなＭＲＥ／ＭＬＥの発生は、効率的な目的のために回避される。なぜなら、各警告は明確にＦＷであり、この計算はいずれの値も加えない。これは、ＤＦＡで計算されるデータを低減するだけでなく、ＬＷｓとＦＷｓの計算が以下に説明されるように速くなる。
【００４９】
任意の警告Ｗで、他のどの類似する警告ポイントからもＭＲＥ／ＭＬＥが存在しない場合、ＷはＬＷである。最初に、発生した各警告は、ＦＷなしにそれ自身のグループを有するＬＷとしてレビューされる。警告のグループ化から最大の利益を成し遂げるために、ＬＷｓの数は最小であるべきである。ＬＷｓの数は、これらの初期のＬＷｓを他のＬＷと関連付けることによって、すなわち、それらをＦＷｓに変換することによって、低減される。このタイプのグループ化の後、全ての警告は、シングルグループに属していなければならず、同時にＬＷとＦＷであることができない。また、正確に形成された類似する警告のグループは、ゼロを含むいくつものＦＷｓと１つのＬＷとを正確に含んでいる。
【００５０】
以下、類似する警告のグループ化の後計算されるＬＷｓのセットを示すために、表記ＬＷｏを使用する。一つの実施形態において、計算モジュール２１８は、要求されたＬＷｏを計算するためにグラフに基づくアプローチを実行する。最初に、ツリーの数が発生された警告の数と等しくなるように、（警告を示している）１つのノードのみを有するツリーとして、発生した警告に示す。警告ポイントＷで、ＭＲＥｓ／ＭＬＥｓは計算され、警告ＷＬから発生された各ＭＲＥ／ＭＬＥにとって、有向辺は、Ｗに相当する頂点（vertex）に関連する頂点ＷＬから加えられる。そのような辺（edge）は、以下の二つの点が当てはまる場合にのみ加えられる必要がある。
−ＷとＷＬの警告のＥＯＩｓ（および配列サイズのような他の要求される情報）が類似する場合。
−ＷＬに相当する頂点に入ってくる辺がない場合。
【００５１】
第１のコンストレイントとは、類似する警告のみとして特定された警告を関連付けるために要求される。そして、両方の警告（ＷとＷＬ）がＦＷｓであるように保証されるように、第２のコンストレイントは、不必要（冗長）な辺の付加を避けるよう要求される。ＷＬが入ってくる辺を有するとき、それはＬＷであることができない。ＭＲＥとＭＬＥが生じるように、一度、辺の付加が完了すると、結果として得られるフォレストはＬＷｓとそれらに関連付けられたＦＷｓを示す。ここで、フォレストにおける各ツリーは、類似するように特定された警告のグループである。入ってくる辺なしに頂点は、グループのＬＷであり、ＬＷから走査されることができる全ての頂点は、グループのＦＷｓである。したがって、形成されたグループの数は、フォレストにおけるツリーの数である。最初に、効率的な目的のために、ＬＷｓ（ＬＷｏ）は、ＭＲＥｓを使用して計算され、それから、ＭＬＥｓはこれらのＬＷｓのみのために計算される。計算されたＭＬＥｓを後で使用して、ＭＲＥｓにより手に入れられた前のＬＷｏは、より小さいＬＷｓを得るためにさらに改良される。
【００５２】
具体的実施例として、上述したプログラムを検討する。フォレストにおける頂点は、警告を示すために使用されている同じ表記を有する任意の警告に相当して示されている。まず、これらすべての頂点は、入ってくる辺（incoming edge）または出ていく辺（outgoing edge）を有しない。有向辺は、ＺＤのためのＭＲＥｓの結果を使用して説明されるように加えられ、ＡＩＯＢと手に入れられたフォレストは図３に示される。以下は、図３に示されるフォレストから得られた観測である。
・ＺＤ６のインデックスは、ＺＤ９とＺＤ１２に対するＭＲＥであり、したがって、ＺＤ６からＺＤ９とＺＤ１２にそれぞれの辺がある。
・ＺＤ９のインデックスがＺＤ１２に対するＭＲＥに対するインデックスであるとしても、それぞれの辺は、ＺＤ９のための頂点が（エッジ付加の第２のコンストレイントにより）入ってくる辺を有しているので、加えられない。
【００５３】
図３におけるフォレストは、シングルＬＷのようなＺＤ６と、ＦＷｓのようなＺＤ９とＺＤ１２を有するＺＤに期待されるようなＬＷＯを表す。ＡＩＯＢのためのＬＷＯは、１つの警告の代わりにレビュー用のＬＷｓとして４つの警告を表しているので、期待値ではない。これは、ＭＲＥｓが期待されたＬＷｏを計算するために常に十分ではなく、それはＭＬＥｓを使用する改良を要求するからである。ＭＬＥｓは、ＭＲＥｓを使用して得られるＬＷｓのためにのみ計算され、エッジはそれらの計算結果により付け足される。ＭＬＥｓを使用して得られた、改良されたＬＷｏは、図４に示される。図４は、要求されるようなＬＷとしてのシングルＡＩＯＢ警告を示している。
【００５４】
本発明の別の実施形態において、システム１０２は、修正ポイントに基づくグループ化（MPG）を使用する静的解析中に発生した複数の警告のグループ化を提供する。まず、解析モジュール２１２は、複数の警告を発生するためにアプリケーションコードを解析するように構成されている。また、特定モジュール２１４は、複数の警告から類似する警告を特定するように構成されている。その結果、類似する警告の関心度（EOIs）は同じ順番で現れる同じオペレーターを有し、ＥＯＩｓにおける位置によって関連付られるＥＯＩ変数がアプリケーションコードにおける同じ修正ポイントから値を得る。グループ化モジュール２１６は、複数の警告の１または２以上のグループを形成するように構成されている。その各グループは、類似する警告を含んでいる。レビューされた警告がＥＯＩ変数の修正ポイントによって提供される値を考慮することで安全であることがわかるとき、形成されたグループにおける類似する警告のうちの一つの警告のレビューは、レビューされた警告以外のグループにおける類似する警告のレビューを保証する。また、グループ化モジュール２１４は、各ＭＰＧグループに対して、修正ポイントを関連付け、報告する。関連付けられた修正ポイントは、グループにおける類似する警告からのＥＯＩ変数の修正ポイントである。
【００５５】
グループ化モジュール２１６は、類似する警告の１または２以上のグループを形成するために到達定義（Reaching Definitions）の計算をさらに実行する。グループからの警告が関連付けられた修正ポイントからＥＯＩ変数値を考慮するレビューで安全であると分かると、同じグループから他の警告をレビューする必要がない。他の場合において、レビュー後にグループから選択された警告が安全であると分からないと、グループから各警告を個別にレビューする必要がある。
【００５６】
具体的実施例として、以下に示されるプログラムを検討する。
int arr[10];
void func(const int* baseAddr, const int* currPtr)
{ // ｖａｌは、０から９の値の割り当てを得る。
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] = ...;
}
【００５７】
上記プログラムは、一例を示している。Ｖａｌ変数の値（０から９）は、ポインタの算術演算を使用して計算され、配列インデックス使用のための多数の関数（multiple functions）に送られる。最も静的な解析ツールは、警告のようなこれらのＡＩＯＢポイントを報告する。なぜなら、ｖａｒのための値は静的に決定されない。各警告のレビューは、それぞれのインデックス変数（ｐ１、ｐ２、ｐ３）によってとられる値を見つけることを要求し、したがって、警告ポイントからｖａｌ（ポインタの算術演算のもの）の定義ポイントにマニュアルで走査することを要求する。ユーザーは、警告が発見された値に基づいて安全であるか安全でないか決定する。こうして、すべての警告をまとめて（collectively）レビューすることは相当な努力を必要とする。
【００５８】
そのような状況において、特定モジュール２１４は、警告を特定する。警告のＥＯＩ変数は同じ修正（または定義）ポイントから値を得る。グループ化モジュール２１６は、レビューの努力が最小化されるように、特定された警告をグループ化する。そのような修正ポイントともに、レビューの観点（review perspective）からの他のパラメーターは、シングルグループにおいてそれらを扱うためにマッチすべきである。ＥＯＩｓが多数の変数を含む複素式であるとき、ＥＯＩｓは、オペレーターの同じ順番を観察しなければならず、ＥＯＩｓにおけるそれらの位置によって関連付けられた変数は、同じ修正ポイントを見つけなければならない。
【００５９】
例えば、
・配列サイズは、ＭＰＧを使用するＡＩＯＢ警告をグループ化するためにマッチすべきである。
・ｖ＋ｌ、ｖ、ｖ−ｌのようなＥＯＩｓを有する警告は、ＥＯＩｓが構造の点で異なるので、ＭＰＧを使用してグループ化されない。
・ＥＯＩｓのようなａ＋ｂ＋ｃ ＆ ａ＋ｂ＋ｃを有する警告は、各変数（ａ、ｂ、ｃ）が同じ修正ポイントから値を得る場合に限り、ＭＰＧを使用してグループ化される。
【００６０】
ＶＷは、ＭＰＧグループ化警告ポイントでＥＯＩによって得られる変数のセットである。レビュー中、ユーザーは、たいてい、修正ポイントで割り当てられているＥＯＩ変数の値を参照し、レビューの下、ＥＯＩを評価する。修正ポイントから得られた変数の値を考慮して得ると、ＶＭは、同じＥＯＩのための値のセットである。今、直観的に、ＭＰＧグループ化警告にとって、ＶＷ≦ＶＭは明らかである。ユーザーがＭＰＧグループ化警告がＶＭを考慮して安全であると観測すると、グループ化された警告の全ての安全性が明確に保証される。この状況において、他のＭＰＧグループ化警告の個別のレビューは、不必要であり、避けられる。他の状況において、警告がＶＭを使用して安全として特定されなければ、全てのＭＰＧグループ化警告はユーザーによって個別にレビューされなければならない。
【００６１】
上記プログラムにおけるＡＩＯＢ警告は、ＭＰＧのようにグループ化される。なぜなら、それらの配列サイズは等しく、インデックスは同じ修正ポイントから値を得るからである。レビュー中、ユーザーは、ｖａｌの報告された修正ポイントを直接見るインデックス変数用の要求された値を見つける。ここで、ユーザーは、変数ｖａｌの値が配列範囲［０..９］であり、したがって、インデックスは範囲内にある。これにより、警告のＭＰＧグループから選択された警告は、安全であるとわかり、他の警告のレビューは省略される。
【００６２】
本発明の他の実施形態において、システム１０２は、計算モジュール２１８によって計算されたＬＷｓ用のＭＰＧにのみ基づく警告のグループ化を実行するように構成されている。各グループからのＦＷｓは、ＦＷｓのレビュー判断がＬＷのそれと同じであるので、無視される。ＭＰＧに基づくＬＷｓのグループ化は、高効率につながり、警告のマニュアルレビューに要求される努力をさらに低減する。
【００６３】
図５と６を参照して、図５と６は、本発明の実施形態に係る、静的解析中に発生した１または２以上の警告をグループ化する方法５００と６００を示す。方法５００と６００は、コンピューター実行可能な命令の一般的状況を説明する。一般的に、コンピューター実行可能な命令は、ルーティーン、プログラム、オブジェクト、コンポーネント、データ構造、手順、モジュール、関数等を含む。それらは、特別な機能を実行し、または特別なアブストラクトデータタイプを実行する。方法５００と６００は、分散コンピューティング環境で実行されてもよい。その機能はコミュニケーションネットワークを介してリンクされた遠隔処理デバイスによって実行される。分散コンピューティング環境において、コンピューター実行可能な命令は、メモリーストレージデバイスを含む、ローカルコンピューターストレージ媒体とリモートコンピューターストレージ媒体との両方に位置される。
【００６４】
方法５００が説明する順番は、限定と解釈されない。記載された方法ブロックのいずれも方法５００または代替方法を実行するために、いずれにおいても組み合わせられることができる。加えて、個々のブロックは、本発明の主旨や範囲を逸脱することなく、方法５００から除去されてもよい。また、方法は、適切なハードウェア、ソフトウェア、ファームウェアまたはそれらの組合せにおいて実行されることができる。しかし、説明を簡単にするために、以下に記載される実施形態において、方法５００は、上述されたシステム１０２において実行されるとして説明される。
【００６５】
ブロック５０２で、アプリケーションコードが解析される。一つの実施例において、アプリケーションコードは、解析モジュール２１２によって警告を発生するために解析される。
【００６６】
ブロック５０４で、警告から類似する警告が特定される。一つの実施例において、類似する警告は、特定モジュール２１４によって特定される。
【００６７】
ブロック５０６で、警告の１または２以上のグループのそれぞれは、類似する警告が形成されることを含む。一つの実施例において、１または２以上のグループは、グループ化モジュール２１６によって形成される。
【００６８】
静的解析中に発生した１または２以上の警告をグループ化する方法およびシステムの実施例が構造的特徴および／または方法に対して説明されたが、本発明は、説明された、特別な特徴または方法に必ずしも限定されない。むしろ、特別な特徴および方法は、静的解析中に発生した１または２以上の警告をグループ化する方法およびシステムの一例に過ぎない。
【図１】
2014170530.tif 000006
【図２】
2014170530.tif 000007
【図３】
2014170530.tif 000008
【図４】
2014170530.tif 000009
【図５】
2014170530.tif 000010
【外国語明細書】
2014170530.tif 000011
2014170530.tif 000012
2014170530.tif 000013
2014170530.tif 000014
2014170530.tif 000015
2014170530.tif 000016
2014170530.tif 000017
2014170530.tif 000018
2014170530.tif 000019
2014170530.tif 000020
2014170530.tif 000021
2014170530.tif 000022
2014170530.tif 000023
2014170530.tif 000024
2014170530.tif 000025
2014170530.tif 000026
2014170530.tif 000027
2014170530.tif 000028
2014170530.tif 000029
2014170530.tif 000030
2014170530.tif 000031
2014170530.tif 000032
2014170530.tif 000033
2014170530.tif 000034
2014170530.tif 000035
【図１】
2014170530.tif 000036
【図２】
2014170530.tif 000037
【図３】
2014170530.tif 000038
【図４】
2014170530.tif 000039
【図５】
2014170530.tif 000040