(57)【要約】      （修正有）【課題】静的解析の各警告に対応して生成される警告の原因を識別する。【解決手段】静的解析の各警告に対応して生成される警告の原因を識別するために、システムはいくつかの種類の警告原因ポイントを、警告の原因をベースとしてモデル化する。システムは、未知数のタイプベースによる順位付け、語句の類似性又は近似性に基づく原因ポイントのグループ化、異なる測定基準に基づく寄与スコアベースによる原因ポイントの順位付けを行う。システムはまた、ユーザが原因ポイントについてのクエリに回答するワークフローを使用し、それらの回答は、静的解析の後続のラウンドで使用される。ユーザの回答と静的解析とのコラボレーションは、静的解析時に遭遇される未知数を解決するためのツールを補助して警告を淘汰し、警告の人手による検査を補助する。【選択図】図１
2018026135.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションコードに亘る静的解析の１以上の警告の各々の少なくとも１つの原因ポイントを識別するシステムであって、
メモリと、
前記メモリと通信接続されるプロセッサであって、前記メモリは、前記プロセッサによって読み取り可能な命令を含む、プロセッサと、
前記アプリケーションコードに亘る静的解析を行い、１以上の警告を生成しつつ、プログラミングエラーを識別するためにアプリケーションコードを解析するように構成される静的解析モジュールと、
前記静的解析時に生成される前記１以上の警告の各々についての少なくとも１つの原因ポイントを識別するように構成される原因ポイント解析モジュールであって、前記１以上の警告の少なくとも１つの原因ポイントは、警告表現に現れるプログラム変数の１以上の値が、前記アプリケーションコードの静的解析時に未知数であることによる理由であり、前記警告表現は、前記１以上の警告が報告されたプログラム表現を示し、前記未知数は、前記静的解析が、前記アプリケーションコードの静的解析時に、要求されるそれらの値を演算できない前記プログラム変数を示す、原因ポイント解析モジュールと、
を備えるシステム。
【請求項２】
対話型静的解析を行い、前記１以上の警告を生成する前記原因ポイントの各々についてユーザからの入力を受け付けることにより警告を解消するように構成される対話モジュールを更に備え、前記対話型静的解析は、警告が前記静的解析モジュールによって生成されなくなるまで反復型で行われる、請求項１に記載のシステム。
【請求項３】
識別された前記原因ポイントの各々に対応する１以上のクエリを生成するように構成されるクエリ生成モジュールであって、前記１以上のクエリは、前記原因ポイントの各々における前記１以上の未知数の各々についての要求値を識別することによって生成され、それらの値により、対応して生成される警告が安全なプログラムポイントである、クエリ生成モジュールと、
順位付けスキームに基づいて前記１以上の警告の、識別された１以上の原因ポイントを順位付けし、前記警告のマニュアルインスペクションの効率性を改善するように構成される順位付けモジュールと、
前記原因ポイントの語句の類似性又は近似性に応じて、順位付けされた１以上の原因ポイントをグループ化するように構成されるグループ化モジュールであって、前記１以上の原因ポイントは、一度に前記１以上の原因ポイントの対応する１以上の未知数又はクエリに対する入力を受け付けるために共にグループ化される、グループ化モジュールと、
を更に備える請求項１に記載のシステム。
【請求項４】
前記１以上の警告の前記原因ポイントは、プログラミングエラーについての前記１以上の警告の生成のための１以上の理由を含み、前記１以上の理由は、ａｒｒａｙ  ｏｕｔ  ｏｆ  ｂｏｕｎｄ（ＡＩＯＢ）、ｄｉｖｉｄｅ  ｂｙ  ｚｅｒｏ（ＺＤ）、及びｏｖｅｒｆｌｏｗ  ｕｎｄｅｒｆｌｏｗ（ＯＦＵＦ）を含む、請求項１に記載のシステム。
【請求項５】
前記未知数の値の起点は、プログラムステートメントにおける式又はループステートメントのいずれかであり、前記未知数の値は、前記静的解析時に未知の変数に対して取り得る１以上の値からの非決定性選択として扱われる、請求項１に記載のシステム。
【請求項６】
前記未知数についての前記１以上の理由は、各種タイプの原因ポイントとしてモデル化され、各原因ポイントは、未知数、未知数のタイプ、及び前記未知数が観察されたプログラムステートメントの関連付けである、請求項１に記載のシステム。
【請求項７】
前記原因ポイントは、順位付けスキーム、未知数のタイプ、寄与スコア並びにそれらの類似性及び空間的近似に基づいて高い又は低い優先度の順序で順位付けされ、前記順位付けスキームは、ユーザの要件としてカスタマイズ可能である、請求項３に記載のシステム。
【請求項８】
アプリケーションコードに亘る静的解析の１以上の警告の各々の少なくとも１つの原因ポイントを識別する方法であって、
前記アプリケーションコードに亘る静的解析を行い、１以上の警告を生成しつつ、プログラミングエラーを識別するためにアプリケーションコードを解析するステップと、
原因ポイント解析モジュールを用いて、前記１以上の警告の各々についての少なくとも１つの原因ポイントを識別するステップであって、前記１以上の警告の少なくとも１つの原因ポイントは、警告表現に現れるプログラム変数の１以上の値が、前記アプリケーションコードの静的解析時に未知数であることによる理由であり、前記警告表現は、前記１以上の警告が報告されたプログラム表現を示し、前記未知数は、前記静的解析が、前記アプリケーションコードの静的解析時に、要求されるそれらの値を演算できない前記プログラム変数を示す、ステップと、
を備える方法。
【請求項９】
対話型静的解析を行い、前記警告を生成する前記原因ポイントの各々についてユーザからの入力を受け付けることにより前記警告を解消するステップを更に備え、前記対話型静的解析は、静的解析モジュールによって前記警告が生成されなくなるまで反復型で行われる、請求項８に記載の方法。
【請求項１０】
識別された前記原因ポイントの各々に対応する１以上のクエリを生成するステップであって、前記１以上のクエリは、前記原因ポイントの各々における前記１以上の未知数の各々についての要求値を識別することによって生成され、それらの値により、対応して生成される警告が安全なプログラムポイントである、ステップと、
順位付けスキームに基づいて前記１以上の警告の、識別された１以上の原因ポイントを順位付けし、前記警告のマニュアルインスペクションの効率性を改善するステップと、
前記原因ポイントの語句の類似性又は近似性に応じて、順位付けされた１以上の原因ポイントをグループ化するステップであって、前記１以上の原因ポイントは、一度にそれらの対応する１以上の未知数又はクエリに対する入力を受け付けるために共にグループ化される、ステップと、
を更に備える請求項８に記載の方法。
【請求項１１】
前記１以上の警告の前記原因ポイントは、プログラミングエラーについての前記１以上の警告の生成のための１以上の理由を含み、前記１以上の理由は、ａｒｒａｙ  ｏｕｔ  ｏｆ  ｂｏｕｎｄ（ＡＩＯＢ）、ｄｉｖｉｄｅ  ｂｙ  ｚｅｒｏ（ＺＤ）、及びｏｖｅｒｆｌｏｗ  ｕｎｄｅｒｆｌｏｗ（ＯＦＵＦ）を含む、請求項８に記載の方法。
【請求項１２】
前記未知数の値の起点は、プログラムステートメントの式又はループステートメントのいずれかであり、前記未知数の値は、前記静的解析時に未知の変数に対して取り得る１以上の値からの非決定性選択として扱われる、請求項８に記載の方法。
【請求項１３】
前記未知数についての前記１以上の理由は、各種タイプの原因ポイントとしてモデル化され、各原因ポイントは、未知数、未知数のタイプ、及び前記未知数が観察されたプログラムステートメントの関連付けである、請求項８に記載の方法。
【請求項１４】
前記順位付けスキームは、未知数のタイプ、寄与スコア並びにそれらの類似性及び空間的近似を含み、前記順位付けスキームは、ユーザの要件としてカスタマイズ可能である、請求項１０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権
本願は、２０１６年８月１１日出願のインド国特許出願（発明の名称：ｓｙｓｔｅｍ  ａｎｄ  ｍｅｔｈｏｄ  ｆｏｒ  ｃａｕｓｅ  ｐｏｉｎｔ  ａｎａｌｙｓｉｓ  ｆｏｒ  ｅｆｆｅｃｔｉｖｅ  ｈａｎｄｌｉｎｇ  ｏｆ  ｓｔａｔｉｃ  ａｎａｌｙｓｉｓ  ａｌａｒｍｓ）第２０１６２１０２７５１１号の優先権を主張する。
【０００２】
本明細書に記載される本発明は、一般的に、アプリケーションコードの静的解析時に、生成される１以上の警告の各々の原因ポイントの識別及び解析に関するものであり、より具体的には、対話型かつ反復型静的解析を用い、警告の原因を用いて、各警告を真の警告及び誤った警告に分類する、静的解析のマニュアルインスペクションのためのシステム及び方法に関する。
【背景技術】
【０００３】
アプリケーションコードの欠陥検出のための静的解析技術は、ソフトウェアの品質及び信頼性を確保するために実際に広く用いられている。しかし、生成される１以上の警告の各々は未だ重大な懸念事項であり、警告のマニュアルインスペクションを通じて、警告を真のエラー又は誤った警告（誤検出）に分類するためにユーザの配慮を必要とする。
【０００４】
静的解析は、静的解析ツールと呼ばれるツールによって行われ、静的解析ツールは、通常、１以上の警告を生じる。安全なプログラムポイント又はエラープログラムポイントのいずれかとして対象のプログラムポイントを報告することを目的としている。静的解析を行う静的解析ツールが、エラー又は安全なプログラムポイントとしてそれらの対応するプログラムポイントを決定することができないとき、生成される１以上の警告は、取り得るランタイムエラーについての警告メッセージ又はユーザへ簡素な警告である。ユーザは、各警告を人手（マニュアル）で解析することになっている。警告の解析がソフトウェアアプリケーションを検証するために要求されるため、各警告は、最大限の配慮をすることを要求する。警告のレビューは、静的解析を通じて生成される警告から真のエラーを明らかにすることによって、システム障害がないこと又はランタイムでのエラーがないことの保証を提供する。この警告のマニュアルレビューは、コストが掛かり、時間を多く消費し、退屈である。また、警告の反復マニュアルレビューは、ユーザの解析業務への関心を低くする。
【０００５】
したがって、本システム及び方法は、アプリケーションコードの静的解析を行う際に、生成された警告の１以上の原因ポイントを識別し、警告の効果的かつ有効なマニュアルインスペクションのための警告原因ポイントを使用するためのものである。
【発明の概要】
【０００６】
以下は、実施形態の基本的な理解を提供するために、本開示の一部の実施形態の簡素化した概要を示す。この概要は、実施形態の広範な要約ではない。実施形態のキーとなる／クリティカルな要素を識別すること、又は実施形態の範囲を詳述することを意図するものではない。その唯一の目的は、以下に示されるより詳細な説明への序として簡素化した形態で一部の実施形態を示すためのものである。
【０００７】
前述のことを考慮して、本明細書の実施形態は、アプリケーションコードの静的解析時に生成される１以上の警告の各々の少なくとも１つの原因ポイントを識別し、１以上の警告と共に、１以上の原因ポイントを報告し、ユーザによる効率的かつ有効な警告のマニュアルインスペクションのために原因ポイントを用いるシステム及び方法を提供する。本開示は、アプリケーションコードの静的解析から生じる１以上の警告の各々の少なくとも１つの原因ポイントを識別するためのソースコードを解析するシステム及び方法も提供する。生成された警告の原因ポイントを識別する、原因ポイント解析は、１以上の警告のインスペクションでの人手による労力を低減し、より多くの警告のインスペクションを可能にし、また、与えられた時間内により多くのエラーを識別することを可能にする。原因ポイント解析は、静的解析のソースコード解析時又はソースコード解析後に行われうる。原因ポイントは、静的解析において不正確さを生じ、かつエラーに対する根本的な原因ではないプログラムポイントを意味することが理解されるであろう。
【０００８】
一態様では、１以上のインスペクションのためにアプリケーションコードの静的解析から生じる１以上の警告の各々の少なくとも１つの原因ポイントを識別する方法が開示される。前記方法は、１以上の警告、及び生成された１以上の警告の各々への少なくとも１つの原因ポイントを生成する１以上の理由を識別する。識別された少なくとも１つの原因ポイントは、原因ポイントが現れるプログラムステートメント及び解析の不正確さに対するソースのタイプに応じて各種タイプに分類される。更に、原因ポイントと関連付けられた少なくとも１つの未知数変数を有する。静的解析における不正確さのソースは、未知数として示され、これらは、アプリケーションコードの静的解析時に、値が正確に演算され得ない変数であることを留意する。原因ポイントが現れる不正確さのソース及びプログラムステートメント、又は静的解析における未知数は、Ｃ、Ｃ＋＋及びＪａｖａ（登録商標）のようなプログラミング言語通りに変化してもよい。よって、識別される原因ポイント及びそれらの異なるタイプは、静的解析によってチェックされるアプリケーションコードのプログラミング言語に応じて変化してもよいことが理解されるであろう。
【０００９】
更に、前記方法は、３つの測定基準を定義し、識別された原因ポイントを優先付けし、よって、原因ポイントを順位付け（ランク付け）する。これらの測定基準は、原因ポイントタイプ、寄与スコア、並びにそれらの類似性及び空間近似性である。原因ポイントの順位付けは、ユーザが、与えられた時間内に、より多くの警告をレビューすることを可能にし、また、与えられた時間内に、より多くのエラーを識別することを可能にする。更に、提案される順位付け（ランキング）スキームは、カスタマイズ可能であり、ユーザは、ユーザの要件に応じた警告原因ポイントを順位付けするために用いられる基準を修正又はカスタマイズすることができる。原因ポイントにおける未知数についての情報は、識別された全ての原因ポイントが、それと関連付けられた１以上のクエリを有するクエリの形態でユーザに求められる。系統的なアプローチは、ユーザに提示されるクエリをフレーム化するために用いられる。クエリへの回答であるユーザ入力を用いて、静的解析は、回答された原因ポイントに対応する警告が解消されることにより再び行われる。処理は、静的解析によって警告が生成されなくなるまで繰り返される。
【００１０】
別の態様では、１以上の警告のインスペクションのためのアプリケーションコードの静的解析から生じる１以上の警告の各々の少なくとも１つの原因点を識別するためのシステムが開示される。前記システムは、プロセッサと、前記プロセッサと通信接続されるメモリと、を備え、前記メモリは、前記プロセッサによって読み出し可能な命令を含む。更に、前記システムは、静的解析モジュールと、原因ポイント解析モジュールと、クエリ生成モジュールと、順位付けモジュールと、グループ化モジュールと、対話モジュールと、を備える。前記システムは、１以上の警告を生成する１以上の理由を識別し、これらの理由を用いて、前記システムは、生成された１以上の警告の各々への少なくとも１つの原因ポイントを識別する。識別された少なくとも１つの原因ポイントは、原因ポイントが現れるプログラムステートメント及び解析の不正確さに対するソースのタイプに応じた各種タイプに分類される。更に、原因ポイントと関連付けられた少なくとも１つの未知数変数を有する。静的解析における不正確さのソースは、未知数として示され、これらは、アプリケーションコードの静的解析時に、値が正確に演算され得ない変数であることを留意する。原因ポイントが現れる不正確さのソース及びプログラムステートメント、又は静的解析における未知数は、Ｃ、Ｃ＋＋及びＪａｖａ（登録商標）のようなプログラミング言語通りに変化してもよい。よって、識別される原因ポイント及びそれらの異なるタイプは、静的解析によってチェックされるアプリケーションコードのプログラミング言語に応じて変化してもよいことが理解されるであろう。
【００１１】
更に、この処理は、次のステップへ移り、３つの測定基準を定義し、識別された原因ポイントを優先付けし、よって、原因ポイントを順位付けする。これらの測定基準は、原因ポイントタイプ、寄与スコア、並びにそれらの類似性及び空間近似性である。原因ポイントの順位付けは、ユーザが、与えられた時間内に、より多くの警告をレビューすることを可能にし、また、与えられた時間内に、より多くのエラーを識別することを可能にする。更に、提案される順位付けスキームは、カスタマイズ可能であり、ユーザは、ユーザの要件に応じた警告原因ポイントを順位付けするために用いられる基準を修正又はカスタマイズすることができる。原因ポイントにおける未知数についての情報は、識別された全ての原因ポイントが、それと関連付けられた１以上のクエリを有するクエリの形態でユーザに求められる。系統的なアプローチは、ユーザに提示されるクエリをフレーム化するために用いられる。クエリへの回答であるユーザ入力を用いて、静的解析は、回答された原因ポイントに対応する警告が解消されることにより再び行われる。処理は、静的解析によって警告が生成されなくなるまで繰り返される。
【００１２】
本明細書に記載のブロック図は、本発明の原理を具現化する例示的なシステムの概念的な見方を示すことが当業者によって理解されるべきである。同様に、フローチャート、フロー図、状態遷移図、擬似コード等は、このようなコンピュータ装置又はプロセッサかどうかが明示的に示された、コンピュータ可読媒体で実質的に表され、コンピュータ装置又はプロセッサによってそのように実行される各種プロセスを示すことが理解されるであろう。
【図面の簡単な説明】
【００１３】
本明細書の実施形態は、図面を参照しながら以下の詳細な説明からより良く理解されるであろう。
【００１４】
【図１】図１は、本開示の実施形態に係る、静的解析の１以上の警告の各々の少なくとも１つの原因ポイントを識別し、警告の効率的かつ有効なマニュアルインスペクションのための原因ポイントを使用するためのシステムを示すブロック図である。
【図２】図２は、本開示の実施形態に係る、静的解析の１以上の警告の各々の少なくとも１つの原因ポイントを識別し、警告の効率的かつ有効なマニュアルインスペクションのための原因ポイントを使用するための方法を示すフロー図を示す。
【図３】図３は、本開示の実施形態に係る、静的解析の１以上の警告の各々の少なくとも１つの原因ポイントを識別し、警告の効率的かつ有効なマニュアルインスペクションのための原因ポイントを使用するためのプロセスを示す概要図である。
【発明を実施するための形態】
【００１５】
本開示の全ての特徴を示す本発明の一部の実施形態を詳細に説明する。
【００１６】
文言「構成される」、「有する」、「含む」、「備える」及びそれらの他の形式は、同等な意味であり、これら文言は、これらの文言のいずれか１つに続く事項又は複数の事項のオープンなリストを意味するが、そのような事項に限定されるような排他的でクローズドなリストを意味するものではなく、また、列挙された事項のみに限定されることを意味するものではない。
【００１７】
また、本明細書及び添付の特許請求の範囲において用いられる、単数形“ａ”、“ａｎ”、“ｔｈｅ”は、文脈が明確に示していなければ、複数形も含むことを留意されなければならない。本明細書で説明されるシステム及び方法と同様又は同等な任意のシステム及び方法は、本開示の実施形態の実施又は試験に使用することができるが、好ましい、システム及び方法が説明される。説明及び理解の目的のための以下の説明では、本開示の範囲を限定しないことを意図する多数の実施形態を参照する。
【００１８】
本開示の１以上の構成要素は、明細書の理解のためにモジュールとして説明される。例えば、モジュールは、ロジックゲート、半導体デバイス、集積回路又は他のディスクリート構成要素を含むハードウェア回路において内蔵型の構成要素を含んでもよい。モジュールは、また、例示のプロセッサのためのハードウェアエンティティにより実行されるソフトウェアプログラムの一部であってもよい。ソフトウェアプログラムとしてのモジュールの実装は、プロセッサ又は他のハードウェアエンティティにより実行されるべきロジカルな命令のセットを含んでもよい。
【００１９】
開示される実施形態は、本開示の単なる例示であり、様々な形態で具体化されてもよい。
【００２０】
図面に示される要素は、以下により詳細に説明されるように相互運用する。しかし、詳細な説明を示す前に、以下の全ての説明は、記載される特定の実施にかかわらず、限定的ではなく、事実上、例示的であることが留意される。例えば、実施の、選択された態様、特徴又は構成要素は、メモリに記憶されるように示されるが、消耗警告システム及び方法と一致するシステム及び方法の全部又は一部は、他の機械可読媒体に亘って分散されて記憶される、又は他の機械可読媒体から読み出されてもよい。
【００２１】
本開示の方法のステップは、入力で動作し、出力を生成することにより、本開示の機能を実行するために、コンピュータ可読媒体上で明らかに具体化されたプログラムを実行する１以上のコンピュータプロセッサによって行われてもよい。適切なプロセッサは、実施例により、汎用又は特殊用途のマイクロプロセッサの両方を含む。一般的に、プロセッサは、（例えば、リードオンリーメモリ及び／又はランダムアクセスメモリのような）メモリから命令及びデータを受信し（読み出し）、メモリに命令及びデータを書き込む（記憶する）。コンピュータプログラム命令及びデータを明らかに具体化するために適したストレージデバイスは、例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭ及びフラッシュメモリデバイスを含む、半導体メモリデバイスのような不揮発性メモリ、内蔵ハードディスク及びリムーバブルディスクのような磁気ディスク、及びＣＤ−ＲＯＭの全ての形態を含む。前述のいずれかは、特別に設計されたＡＳＩＣ（ａｐｐｌｉｃａｔｉｏｎ−ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔｓ）又はＦＰＧＡｓ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙｓ）によって補われる又は組み込まれてもよい。コンピュータは、一般的に、内蔵ディスク（図示せず）又はリムーバブルディスクのような非一時的コンピュータ可読媒体からプログラム及びデータを受信する（読み出す）、及び非一時的コンピュータ可読媒体にプログラム及びデータを書き込む（記憶する）こともできる。
【００２２】
用語集−説明付きの、実施形態で用いられる用語
本明細書で説明された開示は、当業者に本開示を理解させるためのいくつかの用語及び概念を定義する。特定の変数又はプログラムステートメントの値が単に静的に未知数（ｕｎｋｎｏｗｎ）であるため、静的解析での十分な精度を実現することは困難である。このような値は、静的解析時に非決定性選択として一般的に扱われる必要があり、解析を行うツールは、これらの未知数による多量の警告を生じる。これらの未知数の分類は、未知数変数へ値を提供する基本動作に依存する。未知数（ｕｎｋｎｏｗｎｓ）の分類は、以下のようになる。
・ｉ−ｕｎｋｎｏｗｎｓ：ｉ−ｕｎｋｎｏｗｎｓは、プログラム入力の未知数値により発生し、当該値は、ユーザからの、ネットワーク又はファイル又はセンサからの実際の、ロード時間でリンクされる等の入力として、受け取られる。
・ｃ−ｕｎｋｎｏｗｎｓ：ｃ−ｕｎｋｎｏｗｎｓは、プログラムにおいて複雑な演算の近似から得られる演算的な未知数である。例えば、ｒａｔｉｏ＊ａ＊ｂ＋ｓｉｚｅのような非線形演算は、ｃ−ｕｎｋｎｏｗｎｓである。
・ｌｏｏｐ−ｕｎｋｎｏｗｎｓ：その境界が静的に決定され得ないループにより生成される実際の多くの未知数が存在する。
・ｄｓ−ｕｎｋｎｏｗｎｓ：ｄｓ−ｕｎｋｎｏｗｎｓは、リスト、スタック、キュー又はアレイのような境界のないデータ構造の値を抽出することにより生じる。
・ｌｉｂ−ｕｎｋｎｏｗｎｓ：ｌｉｂ−ｕｎｋｎｏｗｎｓは、そのボディが解析のために利用できないライブラリ又は外部関数への呼び出しから生じる未知数に対応する。
・ｐ−ｕｎｋｎｏｗｎｓ：ｐ−ｕｎｋｎｏｗｎｓは、警告プログラムポイントへの既知であるが安全ではない値を実行する特定の実行経路の分かっていない不可能性に対応する。
【００２３】
本明細書で提案される開示は、静的解析の１以上の警告各々の少なくとも１つの原因ポイントを識別し、静的解析の対話型かつ反復型動作を行うことによって警告の効果的かつ有効なマニュアルインスペクションのための識別された原因ポイントを使用するためのシステム及び方法である。
【００２４】
図１を参照すると、システム１００は、１以上の警告のインスペクションのためのアプリケーションコードの静的解析の１以上の警告の各々の少なくとも１つの原因ポイントを識別する。システムは、プロセッサ１０２と、プロセッサと通信接続され、プロセッサにより読み出し可能な命令を含むメモリ０４と、静的解析モジュール１０６と、原因ポイント解析モジュール１０８と、クエリ生成モジュール１１０と、順位付けモジュール１１２と、グループ化モジュール１１４と、対話モジュール１１６と、を備える。
【００２５】
好ましい実施形態では、システム１００の静的解析モジュール１０６は、ａｒｒａｙ  ｏｕｔ  ｏｆ  ｂｏｕｎｄ（ＡＩＯＢ）、ｄｉｖｉｄｅ  ｂｙ  ｚｅｒｏ（ＺＤ）、及びｏｖｅｒｆｌｏｗ  ｕｎｄｅｒｆｌｏｗ（ＯＦＵＦ）等のようなランタイムエラータイプの少なくとも１以上の警告を識別するためのアプリケーションコードに亘る静的解析を行う。静的解析では、特定の変数又はプログラムステートメントの値は、それらが１以上の未知数と呼ばれるとき、既知ではありえない。１以上の未知数は、それらの基本動作に基づいていくつかのカテゴリに分類されうる（未知数値のソース）。このような場合には、１以上の未知数について、１以上の警告を導く静的解析を行うツールによって、取り得るすべての値が仮定される。これらの１以上の警告は、ツールにより報告される実際のエラーとは異なり、それらは、ツールがそれらの対応するプログラムポイントでのランタイムエラーについて確かではないため、ユーザへの警告メッセージである。
【００２６】
好ましい実施形態では、システム１００の原因ポイントモジュール１０８は、１以上の未知数の各々に対する少なくとも１つの原因ポイント、及び、次に、静的解析時に生成される１以上の警告に対する少なくとも１つの原因ポイントを識別するように構成される。１以上の警告の少なくとも１つの原因ポイントは、警告表現に現れるプログラム変数の１以上の値が、アプリケーションコードの静的解析時に未知であることに起因する理由である。警告表現は、１以上の警告が報告されるプログラム表現を示し、未知数は、静的解析が、アプリケーションコードの静的解析時に要求されるそれらの値を演算することができないプログラム変数である。１以上の警告の各々の少なくとも１つの原因ポイントは、それらをタイプ及びそれらの対応するプログラムポイントと関連付けることにより、警告原因ポイントとして、１以上の未知数を生じる。原因ポイントのタイプは、それらの基本動作に基づいて分類されてもよい。未知数値の各々の起点は、プログラム言語に応じて変化し、モデル化の粒度及び静的解析警告のために識別される原因ポイントもまた、プログラム言語及び未知数のモデル化に応じて変化することが理解されるであろう。
【００２７】
更に、システム１００の原因ポイント解析モジュール１０８は、１以上の未知数に対する原因ポイント、及び、次に、静的解析時に生成される１以上の警告の各々の少なくとも１つの原因ポイントをモデル化するように構成される。未知数である変数を生じる各プログラムポイントは、警告への原因ポイントと呼ばれることを留意する。あるプログラムポイントでの第１の未知数の原因ポイントは、第２の未知数が、第１の未知数から移行的にその値を受け取る場合、別のプログラムポイントでの第２の原因ポイントでもある。よって、１以上の未知数を直接的又は移行的に導く基本動作のみが原因ポイントとしてモデル化される。警告表現は、各警告に対応するプログラム表現であり、それに対する取り得るランタイムエラーについての警告メッセージが報告される。
【００２８】
更に、システム１００は、未知数値の少なくとも１つの起点をそのプログラムポイントと関連付け、そのプログラムポイントは、未知数である変数を生じ、その未知数タイプとの関連付けを増加させる。ここでは、起点は、式（ｅｘｐｒｅｓｓｉｏｎ）又はループステートメント（ｌｏｏｐ  ｓｔａｔｅｍｅｎｔ）のいずれかであってもよい。未知数値の少なくとも１つの起点をそのプログラムポイントと関連付けることによる原因ポイントモデル化は、制御フロー経路による実行経路の近似により生成される警告に対して十分ではないことが理解されるであろう。よって、システム１００は、経路不可能性に関する原因ポイントをモデル化するためにも構成される。警告は、既知であるが安全ではない値が警告点に到達する経路の不可能性を決定するために、解析することができないことにより生じる。いくつかの警告のみが経路不可能性により生成されることが理解されるであろう。
【表１】
2018026135.tif 000003
【００２９】
表１を参照すると、一例として、音静的解析器は、ＡＩＯＢの４つの例、ＺＤの１つの例、及びＯＦＵＦの１つの例のような６つの警告を生成する。７行目の変数ｓｔｒ及び９行目のｂｏｕｎｄの正確な値を発見することができないため、音静的解析器は、これらの警告を報告する。したがって、原因ポイント解析モジュール１０８は、それぞれ７行目及び９行目でＣＰ７及びＣＰ９として２つの原因を識別し、警告を解消するために、ユーザからこれらのポイントでの変数ｓｔｒ及びｂｏｕｎｄの値を求める。未知数ｖが、プログラムポイントｐからプログラムポイントｑへの一部の経路を通じて移行的にその値を受け取る場合、プログラムポイントｐでの未知数ｕの原因ポイントは、プログラムポイントｑでの未知数ｖの原因ポイントでもある。よって、未知数を直接的又は移行的に導く基本動作のみが原因ポイントとしてモデル化される。生成される警告に対応するプログラム表現における未知数の原因ポイントは、警告の原因ポイントと呼ばれる。
【００３０】
好ましい実施形態では、クエリ生成モジュール１１０は、識別される原因ポイントの各々に対応する１以上のクエリを生成するように構成される。１以上のクエリは、原因ポイントの各々での１以上の未知数の各々に対する要求値を識別することによって生成される。要求値は、値がエラーへ警告をもたらさないように、未知数での必要な前提条件を示す。警告での表現及び検証特性に応じて未知数の値を推定し、かつ、移行的従属変数に対する値のバックグラウンド置換を通じた警告ポイントから原因ポイントへの未知数の推定値を伝えることによって、１以上のクエリは、フレーム化される。更に、複数の警告が、原因ポイントにより生じたとき、原因ポイントでの必要な前提条件は、対応する１以上の警告の安全性のために必要な組み合わせ要件として演算される。
【００３１】
一例では、原因ポイントに対応するクエリへのユーザの回答がＹＥＳである場合、ユーザ静的解析の次の反復（イテレーション）は、クエリにおいて必要な前提条件が、警告の安全性に対しても十分な条件である場合、対応する警告を解放する。そして、クエリに対する回答がＮＯの場合、ユーザ解析の次の反復では、対応する警告が真のエラーとしてマークされる、又はクエリの原因ポイントがｐ‐ｕｎｋｎｏｗｎタイプの原因ポイントに変換される。クエリが期待される値に基づいて形成されるため、それらは、プログラムの期待される振る舞いを思い付くことをユーザを促し、それにより、原因ポイントでのデータ不変条件に関するプログラム状態の理解を改善する。別の実施形態では、ユーザ対話をより有効にし、関連性があるべきクエリにし、１以上の警告のインスペクションの状況において回答することをより具体的かつ容易にする。
【００３２】
好ましい実施形態では、警告のマニュアルインスペクションの有効性を改善するために、システム１００の順位付けモジュール１１２は、１以上の警告の各々の識別された原因ポイントを順位付けする。原因ポイントは、それらの未知のタイプに基づいて優先度の高い又は低い順に順位付けされる。高い優先度の原因ポイントにより生じる１以上の警告は、真のエラーとなりやすくなり、他の未知のタイプにより生じる１以上の警告は、誤った警告となりやすくなる。未知数タイプベースの順位付けでは、原因ポイントは、それらの未知タイプに基づいて、ｉ−ｕｎｋｎｏｗｎ＞ｌｉｂ−ｕｎｋｎｏｗｎ＞ｐ−ｕｎｋｎｏｗｎ＞ｌｏｏｐ−ｕｎｋｎｏｗｎ＞ｃ−ｕｎｋｎｏｗｎ＞ｄｓ−ｕｎｋｎｏｗｎの順に順位付けされる。この順位付けは、ｉ−ｕｎｋｎｏｗｎｓ及びｌｉｂ−ｕｎｋｎｏｗｎｓにより生じる警告が真のエラーとなりやすく、ｃ−ｕｎｋｎｏｗｎｓ及びｄｓ−ｕｎｋｎｏｗｎｓにより生じる警告が誤った警告となりやすいという前提に基づく。
【００３３】
更に、ｉ−ｕｎｋｎｏｗｎタイプによる原因ポイントは、部分的に定義された環境で動作するプログラムにおける自由変数についてのソースであり、それらの大部分を検証するための不具合は、ユーザによる入力値でなされた特定の仮定によるエラーを導く。検証された入力は、それらの検証時に付けられる制限による未知数ではない。ｌｉｂ関数の実装は、通常、ユーザにとって既知の仕様に付く。しかし、多くの場合、ユーザは、有効性又はｌｉｂ関数呼び出しに戻される値を確認することを見落とす。よって、ｉ−ｕｎｋｎｏｗｎ及びｌｉｂ−ｕｎｋｎｏｗｎタイプの原因ポイントは、高い優先度を与えられる。ｐ−ｕｎｋｎｏｗｎによる原因ポイントは、安全ではない値の存在を示し、故に、警告プログラムポイントに到達する値の不可能性が保証されなければならない。更に、実際の大容量かつ高複雑性のアプリケーションが与えられると、安全ではない値を警告プログラムポイントへ運ぶ経路の存在は可能性が低い。ｌｏｏｐ−ｕｎｋｎｏｗｎｓタイプによる原因ポイントは、潜在的に無限ループのカテゴリを含む。全ての複雑な演算動作又はデータ構造自体からの値の読み出しの全てが、エラーとして警告を生じるための原因ポイントの可能性を低減するので、ｃ−ｕｎｋｎｏｗｎ及びｄｓ−ｕｎｋｎｏｗｎタイプの原因ポイントは、低い優先度で処理される。
【００３４】
更に、順位付けモジュール１１２は、寄与スコアに基づいて原因ポイントを順位付けするようにも構成されうる。例えば、Ｃαをアラームαに対する一連の原因ポイントとする。｜Ｃα｜＝１のとき、ｃ∈Ｃαは、全原因αといわれる。そうでない場合、ｃ∈Ｃαは、部分原因αといわれる。Ｓｃを、原因ポイントｃにより生じられる一連の警告とする。Ｓｃを生じる際の寄与を測定するために、２つのスコアを定義する。
【数１】
2018026135.tif 000004
【００３５】
一つの例では、警告生成での原因ポイントｃの総寄与スコア（ｔｃ−ｓｃｏｒｅ）は、以下のように演算され、ここで、設定可能係数ｋ≧２は、ｐｃ−ｓｃｏｒｅより高いｆｃ−ｓｃｏｒｅを重み付けするために用いられる。
ｔｃ−ｓｃｏｒｅ（ｃ）＝ｆｃ−ｓｃｏｒｅ（ｃ）＊ｋ＋ｐｃ−ｓｃｏｒｅ（ｃ）
ここで、ｔｃ−ｓｃｏｒｅは、形成されるグループ内の原因ポイントを順位付けするために用いられ、高いスコアを有する原因ポイントは、低いスコアを有するものよりも優先される。合成したｔｃ−ｓｃｏｒｅは、そのグループ化された原因ポイントの合計としてグループについて演算され、これは、同じ未知数タイプカテゴリに属するグループを順位付けするために用いられる。
【００３６】
システム１００の順位付けモジュール１１２は、ユーザによってカスタマイズされてもよいことが理解されるであろう。カスタマイズ性は、静的解析ツールの重要な側面であるため、原因ポイントを順位付けするために用いられる順位付けスキームは、ユーザの要件に適合するようにカスタマイズされることが許可される。ユーザは、ユーザが、与えられた時間により多くの警告のマニュアルインスペクションを行おうとしているとき、主な基準として寄与スコアベースの順位付けを使用しうる。一般的に多くの警告は同一の原因ポイントにより生成されるため、寄与スコアは、与えられた時間でより多くの警告をレビューすることを補助する。故に、原因ポイントでの未知数の解消は、多くの警告を一度にレビューすることを補助することができる。このように、原因ポイント解析は、警告の十分なインスペクションを可能にする。寄与スコアが主な順位付け基準として用いられるとき、他の２つの基準、すなわち、未知数タイプ並びに類似性及び近似性ベースのグループ化は、類似の寄与スコアを有する原因ポイントに適用されてもよい。ユーザは、ユーザが与えられた時間により多くのエラーを識別しようとするとき、主な基準として未知数タイプベースの順位付けを用いるために順位付けモジュールをカスタマイズしてもよい。
【００３７】
好ましい実施形態では、システム１００のグループ化モジュール１１４は、それらの語句の類似性又は近似性又はその両方に応じて、順位付けされた原因ポイントをグループ化するように構成される。原因ポイントのグループ化は、それらの未知数タイプに基づく原因ポイントの順位付け前又は後に適用されうることが理解されるであろう。原因ポイントが他の原因ポイントとグループ化され得ないとき、その特有のグループのメンバーのみとして扱われる。類似の原因ポイントの語句の類似性ベースのグループ化では、グループにおいて原因ポイントと関連付けられた質問又はクエリへの回答が共に又は一度に回答されるように、共にグループ化される。
【００３８】
一例を参照すると、同一のライブラリ関数への呼び出しにより発生する全ての原因ポイント、例えばｒｅａｄＳｅｎｓｏｒ（）、は、共にグループ化され、グループレベルでのクエリをフレーム化するための機会を表す。類似性識別は、未知数のタイプに基づいて変化してもよい。例えば、ｄｓ−ｕｎｋｎｏｗｎ（それぞれのｌｉｂ−ｕｎｋｎｏｗｎ）タイプの原因ポイントにおけるデータ構造（それぞれのライブラリ関数）を表す識別子は、それぞれ演算される。原因ポイント全体の表現は、ｃ−ｕｎｋｎｏｗｎ及びｐ−ｕｎｋｎｏｗｎタイプの原因ポイントに一致される。ｉ−ｕｎｋｎｏｗｎ及びｌｏｏｐ−ｕｎｋｎｏｗｎタイプの原因ポイントは、このようなグループ化から排除されてもよい。近似性ベースのグループ化では、同一の処理に属する原因ポイントは、それらの対応する質問が共に回答されるようにグループ化される。グループ化のこのタイプは、原因ポイントと関連付けられた一連のクエリに回答しつつ、複数のソースファイルと処理とを切り替えることを低減する。
【００３９】
好ましい実施形態では、システム１００の対話モジュール１１６は、１以上の警告を生成する原因ポイントの各々に対するユーザからの入力を受け付けることによって、警告を解消するために対話型静的解析を行うように構成される。このモジュールは、ユーザへの識別された原因ポイントの各々に対応して生成されるクエリを提示する。モジュールは、ユーザに提示されるクエリへの回答として警告を生成する原因ポイントの各々に対するユーザからの入力を受け取る。更に、対話モジュール１１６は、統合レビューフレームワークを用いて、警告原因ポイント及びそれらに対応するクエリを報告してもよい。統合レビューフレームワークは、別のスタンドアローンなツールを実装する、又は統合開発環境（ｉｎｔｅｇｒａｔｅｄ  ｄｅｖｅｌｏｐｍｅｎｔ  ｅｎｖｉｒｏｎｍｅｎｔ（Ｅｃｌｉｐｓｅ、Ｍｉｃｒｏｓｏｆｔ  ｖｉｓｕａｌ  ｓｔｕｄｉｏ、ＮｅｔＢｅａｎｓ等のようなＩＤＥ）を拡張することによって得られてもよく、コードナビゲーションをサポートし、使用される静的解析ツールの結果を解釈する。対話モジュール１１６の重要な態様では、モジュールは、原因ポイントからそれによって発生する警告へ、及び警告からその原因ポイントへのトレースアビリティも提供する。トレースアビリティは、回答されるクエリにおいて原因ポイントにより生成される警告の位置特定の補助をユーザに提供する。例えば、ユーザは、クエリへの回答がＮＯであるときに、回答されるクエリに対応する原因ポイントによって生じる警告であることを知ることに関心を持つ。
【００４０】
好ましい実施形態では、対話モジュール１１６は、クエリへの回答としてユーザにより提示される入力を静的解析モジュール１０６に供給し、ユーザ入力を用いてアプリケーションコードの静的解析の次の反復を開始する。解析の次の反復は、同一モジュールによるアプリケーションコードの以前の静的解析と同数の警告又はより少ない数の警告を生成する静的解析モジュール１０６によって行われる。システム１００の静的解析モジュール１０６は、ユーザ入力を有する静的解析の後続の反復のために増分解析を行う。増分解析は、２つの連続的なユーザ対話間の待ち時間を低減するためのものである。更に、原因ポイント解析モジュール１０８を用いた原因ポイント解析及び順位付けモジュールを用いた原因ポイントの順位付けが行われ、対話モジュール１１６は、ユーザ入力を受け付けるために原因ポイントに対応するクエリを再び報告する。このように、静的解析は、複数の反復及び対話型で行われ、警告は、原因ポイントの順位付けにより効率的かつ有効にレビューされる。
【００４１】
図２を参照すると、システム２００は、１以上の警告のインスペクションのためにアプリケーションコードの静的解析時に生成される１以上の警告の各々の少なくとも１つの原因ポイントを識別する。
【００４２】
ステップ２０２において、方法は開始し、アプリケーションコードに亘って静的解析モジュール１０６を用いて静的解析を適用し、ａｒｒａｙ  ｏｕｔ  ｏｆ  ｂｏｕｎｄ（ＡＩＯＢ）、ｄｉｖｉｄｅ  ｂｙ  ｚｅｒｏ（ＺＤ）及びｏｖｅｒｆｌｏｗ  ｕｎｄｅｒｆｌｏｗ（ＯＦＵＦ）等のような少なくとも１以上の警告を識別する。静的解析では、特定の変数又はプログラムステートメントの値は、それらが１以上の未知数と呼ばれるため、常に既知となりえない。１以上の未知数は、それらの基本動作（未知数値に対するソース）に基づいていくつかのカテゴリに分類されうる。このような場合には、１以上の未知数に対して、１以上の警告を導く静的解析を行うツールによって全ての取り得る値が仮定される。これら１以上の警告は、ツールによって報告される実際のエラーとは異なっており、警告は、それらの対応するプログラムポイントでのランタイムエラーについてツールが定かでないため、ユーザへの警告メッセージである。
【００４３】
ステップ２０４において、方法は、１以上の理由を識別する。１以上の警告を生成し、原因ポイント解析モジュール１０８を用いて、生成された１以上の警告の各々への少なくとも１つの原因ポイントとして理由をモデル化する。前記方法は、１以上の未知数の各々に対する少なくとも１つの原因ポイント、及び、次に、静的解析時に生成された１以上の警告に対する少なくとも１つの原因ポイントを識別する。１以上の警告の少なくとも１つの原因ポイントは、警告表現に現れるプログラム変数の１以上の値が、アプリケーションコードの静的解析時に未知数であるということによる理由である。警告表現は、それに対して１以上の警告が報告されるプログラム表現を示し、未知数は、静的解析が、アプリケーションコードの静的解析時に、要求されるそれらの値を演算することができないプログラム変数を示す。
【００４４】
１以上の警告の各々の少なくとも１つの原因ポイントは、それらをタイプ及びそれらの対応するプログラムポイントと関連付けることによって、警告原因ポイントとして１以上の未知数を生じる。原因ポイントのタイプは、それらの基本動作及びそれらの対応する未知数のタイプに基づいて分類されてもよい。各未知数値の起点は、プログラム言語及びモデル化の粒度に応じて変化してもよく、よって、静的解析警告に対して識別された原因ポイントもまたプログラム言語及びモデル化の粒度に応じて変化してもよいことが理解されるであろう。
【００４５】
ステップ２０６において、本方法は、クエリ生成モジュール１１０を用いて、識別された原因ポイントの各々に対応する１以上のクエリを生成する。１以上のクエリは、原因ポイントの各々での１以上の未知数の各々に対する要求値を識別することによって生成される。要求値は、値が決して警告をエラーにしないように未知数での必要条件又は十分条件を表す。警告での表現及び検証特性に応じて未知数の値を推定し、かつ、移行的従属変数に対する値のバックグラウンド置換を通じた警告ポイントから原因ポイントへの未知数の推定値を伝えることによって、１以上のクエリは、フレーム化される。更に、複数の警告が原因ポイントにより生じられるとき、原因ポイントでの必要条件又は十分条件は、対応する１以上の警告の安全性についての必要な組み合わせ要件として演算される。
【００４６】
ステップ２０８において、本方法は、順位付けモジュール１１２を用いて、識別された原因ポイントを優先し、かつ原因ポイントを順位付けするために、３つの測定基準を定義する。原因ポイントは、それらの未知数タイプに基づいて、高い又は低い優先度の順に順位付けされる。高い優先度の原因ポイントにより生じる１以上の警告は、真のエラーとなりやすく、他の未知数タイプにより生じる１以上の警告は、誤った警告となりやすい。未知数タイプベースの順位付けでは、原因ポイントは、それらの未知数タイプに基づいてｉ−ｕｎｋｎｏｗｎ＞ｌｉｂ−ｕｎｋｎｏｗｎ＞ｐ−ｕｎｋｎｏｗｎ＞ｌｏｏｐ−ｕｎｋｎｏｗｎ＞ｃ−ｕｎｋｎｏｗｎ＞ｄｓ−ｕｎｋｎｏｗｎの順に順位付けされる。この順位付けは、ｉ−ｕｎｋｎｏｗｎｓ及びｌｉｂ−ｕｎｋｎｏｗｎｓにより生じる警告が真のエラーとなりやすく、ｃ−ｕｎｋｎｏｗｎｓ及びｄｓ−ｕｎｋｎｏｗｎｓにより生じる警告が誤った警告となりやすいという前提に基づく。更に、ｉ−ｕｎｋｎｏｗｎタイプによる原因ポイントは、部分的に定義された環境で動作するプログラムにおける自由変数についてのソースであり、それらの大部分を検証するための不具合は、ユーザによる入力値でなされた特定の仮定によるエラーを導く。検証された入力は、それらの検証時の付けられる制限による未知数ではない。ｌｉｂ関数の実装は、通常、ユーザにとって既知の仕様に付く。しかし、多くの場合、ユーザは、有効性又はｌｉｂ関数呼び出しに戻される値を確認することを見落とす。よって、ｉ−ｕｎｋｎｏｗｎ及びｌｉｂ−ｕｎｋｎｏｗｎタイプの原因ポイントは、高い優先度を与えられる。ｐ−ｕｎｋｎｏｗｎによる原因ポイントは、安全ではない値の存在を示し、故に、警告プログラムポイントに到達する値の不可能性が保証されなければならない。更に、実際の大容量かつ高複雑性のアプリケーションが与えられると、安全ではない値を警告プログラムポイントへ運ぶ経路の存在は可能性が低い。ｌｏｏｐ−ｕｎｋｎｏｗｎｓタイプによる原因ポイントは、潜在的に無限ループのカテゴリを含む。全ての複雑な演算動作又はデータ構造自体からの値の読み出しの全てが、エラーとして警告を生じるための原因ポイントの可能性を低減するので、ｃ−ｕｎｋｎｏｗｎ及びｄｓ−ｕｎｋｎｏｗｎタイプの原因ポイントは、低い優先度で処理される。
【００４７】
ステップ２１０において、本方法は、語句の類似性又は近似性に応じて原因ポイントをグループ化するために、グループ化モジュール１１４を用いて系統的なアプローチを適用し、類似原因ポイントの語句類似性ベースのグループ化は、それらの対応する質問が共に回答されるように共にグループ化される。原因ポイントのグループ化は、未知数タイプに基づいて原因ポイントの順位付け前又は後に適用されうることが理解されるであろう。原因ポイントがいずれの原因ポイントともグループ化され得ないとき、その特有のグループのメンバーのみとして扱われる。類似原因ポイントの語句類似性ベースのグループ化では、グループにおいて原因ポイントと関連付けられた質問又はクエリへの回答が、共に又は一度に回答されるように、グループ化される。
【００４８】
最後に、ステップ２１２において、処理は、対話型静的解析を行い、警告を生成する原因ポイントの各々に対するユーザからの入力を受け付けることにより警告を解消する。対話型静的解析は、警告が静的解析モジュールにより生成されなくなるまで対話型で行われる。原因ポイント及び原因ポイントに対応するクエリは、対話モジュール１１６を用いてユーザに報告され、対話モジュールを用いてこれらのクエリへの回答としてユーザ入力を受け付ける。受け付けられたこれらのユーザ入力は、ステップ２０２へ供給され、次の反復（イテレーション）を開始し、回答された原因ポイントに対応する警告が解消されることによるユーザ入力を用いて再び静的解析を行う。処理、すなわち２０２から２１２へのステップは、警告が静的解析によって生成されなくなるまで繰り返される。
【００４９】
図３を参照すると、１以上の警告のインスペクションのためのアプリケーションコードの静的解析から生じる１以上の警告の各々の少なくとも１つの原因ポイントを識別するためのフローチャートを示す。フローチャートは、アプリケーションコードに亘って静的解析を開始及び適用し、１以上の警告を生成し、少なくとも１つの警告を生成する場合、処理は、次のステップへ移り、生成された１以上の警告の各々への少なくとも１つの原因ポイントを識別する。更に、処理は、原因ポイントで現れるプログラムステートメント及び解析の不正確さに対するソースに応じて原因ポイントを各種タイプに分類する。更に、原因ポイントと関連付けられた少なくとも１つの未知数変数を有する。静的解析における不正確さのソースは、未知数として示され、これらは、アプリケーションコードの静的解析時に、値が正確に演算され得ない変数であることが留意されるであろう。原因ポイントが現れる不正確さのソース及びプログラムステートメント、又は静的解析における未知数は、Ｃ、Ｃ＋＋及びＪａｖａ（登録商標）のようなプログラミング言語通りに変化してもよい。よって、識別される原因ポイント及びそれらの異なるタイプは、静的解析によってチェックされるアプリケーションコードのプログラミング言語に応じて変化してもよいことが理解されるであろう。
【００５０】
更に、この処理は、次のステップへ移り、３つの測定基準を定義し、識別された原因ポイントを優先付けし、よって、原因ポイントを順位付けする。これらの測定基準は、原因ポイントタイプ、寄与スコア、並びにそれらの類似性及び空間近似性である。原因ポイントの順位付けは、ユーザが、与えられた時間内に、より多くの警告をレビューすることを可能にし、また、与えられた時間内に、より多くのエラーを識別することを可能にする。更に、提案される順位付けスキームは、カスタマイズ可能であり、ユーザは、ユーザの要件に応じた警告原因ポイントを順位付けするために用いられる基準を修正又はカスタマイズすることができる。原因ポイントにおける未知数についての情報は、識別された全ての原因ポイントが、それと関連付けられた１以上のクエリを有するクエリの形態でユーザに求められる。系統的なアプローチは、ユーザに提示されるクエリをフレーム化するために用いられる。クエリへの回答であるユーザ入力を用いて、静的解析は、回答された原因ポイントに対応する警告が解消されることにより再び行われる。処理は、静的解析によって警告が生成されなくなるまで繰り返される。
【００５１】
記載された詳細な説明は、本明細書に本発明を記述して、当業者が実施形態を実行及び使用可能にする。本発明の実施形態の範囲は、特許請求の範囲によって定義され、当業者に生じる他の変更を含んでもよい。このような他の変更は、それらが特許請求の範囲の文言と異ならない類似の要素を有する場合、又はそれらが特許請求の範囲の文言との非実質的な差異を有する等価な要素を含む場合、特許請求の範囲の範囲内にあることを意図するものである。
【００５２】
本明細書の本開示の実施形態は、ソフトウェアの品質及びソフトウェアの信頼性を確保するためにアプリケーションコードにおける欠陥検出のための静的解析技術を適用しつつ、生成される警告の各々に対応する複数の警告の解消されない課題を解決する。静的解析は、通常、複数の警告で生じる。ユーザは、各警告を人手（マニュアル）で解析することになっている。警告の解析がソフトウェアアプリケーションを検証するために要求されるため、各警告は、最大限の配慮をすることを要求する。警告のレビューは、静的解析を通じて生成される警告から真のエラーを明らかにすることによって、システム障害がないこと又はランタイムでのエラーがないことの保証を提供する。この警告のマニュアルレビューは、コストが掛かり、時間を多く消費し、退屈である。また、警告の反復マニュアルレビューは、ユーザの解析業務への関心を低くする。
【００５３】
前述の詳細な説明は、各種実施形態を参照して提示されている。当業者及び本願に付随する技術は、説明された構造及び動作の方法における代替及び変更が、原理、趣旨及び範囲から有意義に逸脱することなく、実施されうることを理解するであろう。
【図１】
2018026135.tif 000005
【図２】
2018026135.tif 000006
【図３】
2018026135.tif 000007
【外国語明細書】
2018026135000001.pdf