JP2018026135A - 静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法 - Google Patents

静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法 Download PDF

Info

Publication number
JP2018026135A
JP2018026135A JP2017156330A JP2017156330A JP2018026135A JP 2018026135 A JP2018026135 A JP 2018026135A JP 2017156330 A JP2017156330 A JP 2017156330A JP 2017156330 A JP2017156330 A JP 2017156330A JP 2018026135 A JP2018026135 A JP 2018026135A
Authority
JP
Japan
Prior art keywords
cause
static analysis
points
unknown
point
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.)
Pending
Application number
JP2017156330A
Other languages
English (en)
Inventor
トゥカラム ビー ムスケ
B Muske Tukaram
トゥカラム ビー ムスケ
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 JP2018026135A publication Critical patent/JP2018026135A/ja
Pending legal-status Critical Current

Links

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors

Abstract

【課題】静的解析の各警告に対応して生成される警告の原因を識別する。
【解決手段】静的解析の各警告に対応して生成される警告の原因を識別するために、システムはいくつかの種類の警告原因ポイントを、警告の原因をベースとしてモデル化する。システムは、未知数のタイプベースによる順位付け、語句の類似性又は近似性に基づく原因ポイントのグループ化、異なる測定基準に基づく寄与スコアベースによる原因ポイントの順位付けを行う。システムはまた、ユーザが原因ポイントについてのクエリに回答するワークフローを使用し、それらの回答は、静的解析の後続のラウンドで使用される。ユーザの回答と静的解析とのコラボレーションは、静的解析時に遭遇される未知数を解決するためのツールを補助して警告を淘汰し、警告の人手による検査を補助する。
【選択図】図1

Description

優先権
本願は、2016年8月11日出願のインド国特許出願(発明の名称:system and method for cause point analysis for effective handling of static analysis alarms)第201621027511号の優先権を主張する。
本明細書に記載される本発明は、一般的に、アプリケーションコードの静的解析時に、生成される1以上の警告の各々の原因ポイントの識別及び解析に関するものであり、より具体的には、対話型かつ反復型静的解析を用い、警告の原因を用いて、各警告を真の警告及び誤った警告に分類する、静的解析のマニュアルインスペクションのためのシステム及び方法に関する。
アプリケーションコードの欠陥検出のための静的解析技術は、ソフトウェアの品質及び信頼性を確保するために実際に広く用いられている。しかし、生成される1以上の警告の各々は未だ重大な懸念事項であり、警告のマニュアルインスペクションを通じて、警告を真のエラー又は誤った警告(誤検出)に分類するためにユーザの配慮を必要とする。
静的解析は、静的解析ツールと呼ばれるツールによって行われ、静的解析ツールは、通常、1以上の警告を生じる。安全なプログラムポイント又はエラープログラムポイントのいずれかとして対象のプログラムポイントを報告することを目的としている。静的解析を行う静的解析ツールが、エラー又は安全なプログラムポイントとしてそれらの対応するプログラムポイントを決定することができないとき、生成される1以上の警告は、取り得るランタイムエラーについての警告メッセージ又はユーザへ簡素な警告である。ユーザは、各警告を人手(マニュアル)で解析することになっている。警告の解析がソフトウェアアプリケーションを検証するために要求されるため、各警告は、最大限の配慮をすることを要求する。警告のレビューは、静的解析を通じて生成される警告から真のエラーを明らかにすることによって、システム障害がないこと又はランタイムでのエラーがないことの保証を提供する。この警告のマニュアルレビューは、コストが掛かり、時間を多く消費し、退屈である。また、警告の反復マニュアルレビューは、ユーザの解析業務への関心を低くする。
したがって、本システム及び方法は、アプリケーションコードの静的解析を行う際に、生成された警告の1以上の原因ポイントを識別し、警告の効果的かつ有効なマニュアルインスペクションのための警告原因ポイントを使用するためのものである。
以下は、実施形態の基本的な理解を提供するために、本開示の一部の実施形態の簡素化した概要を示す。この概要は、実施形態の広範な要約ではない。実施形態のキーとなる/クリティカルな要素を識別すること、又は実施形態の範囲を詳述することを意図するものではない。その唯一の目的は、以下に示されるより詳細な説明への序として簡素化した形態で一部の実施形態を示すためのものである。
前述のことを考慮して、本明細書の実施形態は、アプリケーションコードの静的解析時に生成される1以上の警告の各々の少なくとも1つの原因ポイントを識別し、1以上の警告と共に、1以上の原因ポイントを報告し、ユーザによる効率的かつ有効な警告のマニュアルインスペクションのために原因ポイントを用いるシステム及び方法を提供する。本開示は、アプリケーションコードの静的解析から生じる1以上の警告の各々の少なくとも1つの原因ポイントを識別するためのソースコードを解析するシステム及び方法も提供する。生成された警告の原因ポイントを識別する、原因ポイント解析は、1以上の警告のインスペクションでの人手による労力を低減し、より多くの警告のインスペクションを可能にし、また、与えられた時間内により多くのエラーを識別することを可能にする。原因ポイント解析は、静的解析のソースコード解析時又はソースコード解析後に行われうる。原因ポイントは、静的解析において不正確さを生じ、かつエラーに対する根本的な原因ではないプログラムポイントを意味することが理解されるであろう。
一態様では、1以上のインスペクションのためにアプリケーションコードの静的解析から生じる1以上の警告の各々の少なくとも1つの原因ポイントを識別する方法が開示される。前記方法は、1以上の警告、及び生成された1以上の警告の各々への少なくとも1つの原因ポイントを生成する1以上の理由を識別する。識別された少なくとも1つの原因ポイントは、原因ポイントが現れるプログラムステートメント及び解析の不正確さに対するソースのタイプに応じて各種タイプに分類される。更に、原因ポイントと関連付けられた少なくとも1つの未知数変数を有する。静的解析における不正確さのソースは、未知数として示され、これらは、アプリケーションコードの静的解析時に、値が正確に演算され得ない変数であることを留意する。原因ポイントが現れる不正確さのソース及びプログラムステートメント、又は静的解析における未知数は、C、C++及びJava(登録商標)のようなプログラミング言語通りに変化してもよい。よって、識別される原因ポイント及びそれらの異なるタイプは、静的解析によってチェックされるアプリケーションコードのプログラミング言語に応じて変化してもよいことが理解されるであろう。
更に、前記方法は、3つの測定基準を定義し、識別された原因ポイントを優先付けし、よって、原因ポイントを順位付け(ランク付け)する。これらの測定基準は、原因ポイントタイプ、寄与スコア、並びにそれらの類似性及び空間近似性である。原因ポイントの順位付けは、ユーザが、与えられた時間内に、より多くの警告をレビューすることを可能にし、また、与えられた時間内に、より多くのエラーを識別することを可能にする。更に、提案される順位付け(ランキング)スキームは、カスタマイズ可能であり、ユーザは、ユーザの要件に応じた警告原因ポイントを順位付けするために用いられる基準を修正又はカスタマイズすることができる。原因ポイントにおける未知数についての情報は、識別された全ての原因ポイントが、それと関連付けられた1以上のクエリを有するクエリの形態でユーザに求められる。系統的なアプローチは、ユーザに提示されるクエリをフレーム化するために用いられる。クエリへの回答であるユーザ入力を用いて、静的解析は、回答された原因ポイントに対応する警告が解消されることにより再び行われる。処理は、静的解析によって警告が生成されなくなるまで繰り返される。
別の態様では、1以上の警告のインスペクションのためのアプリケーションコードの静的解析から生じる1以上の警告の各々の少なくとも1つの原因点を識別するためのシステムが開示される。前記システムは、プロセッサと、前記プロセッサと通信接続されるメモリと、を備え、前記メモリは、前記プロセッサによって読み出し可能な命令を含む。更に、前記システムは、静的解析モジュールと、原因ポイント解析モジュールと、クエリ生成モジュールと、順位付けモジュールと、グループ化モジュールと、対話モジュールと、を備える。前記システムは、1以上の警告を生成する1以上の理由を識別し、これらの理由を用いて、前記システムは、生成された1以上の警告の各々への少なくとも1つの原因ポイントを識別する。識別された少なくとも1つの原因ポイントは、原因ポイントが現れるプログラムステートメント及び解析の不正確さに対するソースのタイプに応じた各種タイプに分類される。更に、原因ポイントと関連付けられた少なくとも1つの未知数変数を有する。静的解析における不正確さのソースは、未知数として示され、これらは、アプリケーションコードの静的解析時に、値が正確に演算され得ない変数であることを留意する。原因ポイントが現れる不正確さのソース及びプログラムステートメント、又は静的解析における未知数は、C、C++及びJava(登録商標)のようなプログラミング言語通りに変化してもよい。よって、識別される原因ポイント及びそれらの異なるタイプは、静的解析によってチェックされるアプリケーションコードのプログラミング言語に応じて変化してもよいことが理解されるであろう。
更に、この処理は、次のステップへ移り、3つの測定基準を定義し、識別された原因ポイントを優先付けし、よって、原因ポイントを順位付けする。これらの測定基準は、原因ポイントタイプ、寄与スコア、並びにそれらの類似性及び空間近似性である。原因ポイントの順位付けは、ユーザが、与えられた時間内に、より多くの警告をレビューすることを可能にし、また、与えられた時間内に、より多くのエラーを識別することを可能にする。更に、提案される順位付けスキームは、カスタマイズ可能であり、ユーザは、ユーザの要件に応じた警告原因ポイントを順位付けするために用いられる基準を修正又はカスタマイズすることができる。原因ポイントにおける未知数についての情報は、識別された全ての原因ポイントが、それと関連付けられた1以上のクエリを有するクエリの形態でユーザに求められる。系統的なアプローチは、ユーザに提示されるクエリをフレーム化するために用いられる。クエリへの回答であるユーザ入力を用いて、静的解析は、回答された原因ポイントに対応する警告が解消されることにより再び行われる。処理は、静的解析によって警告が生成されなくなるまで繰り返される。
本明細書に記載のブロック図は、本発明の原理を具現化する例示的なシステムの概念的な見方を示すことが当業者によって理解されるべきである。同様に、フローチャート、フロー図、状態遷移図、擬似コード等は、このようなコンピュータ装置又はプロセッサかどうかが明示的に示された、コンピュータ可読媒体で実質的に表され、コンピュータ装置又はプロセッサによってそのように実行される各種プロセスを示すことが理解されるであろう。
本明細書の実施形態は、図面を参照しながら以下の詳細な説明からより良く理解されるであろう。
図1は、本開示の実施形態に係る、静的解析の1以上の警告の各々の少なくとも1つの原因ポイントを識別し、警告の効率的かつ有効なマニュアルインスペクションのための原因ポイントを使用するためのシステムを示すブロック図である。 図2は、本開示の実施形態に係る、静的解析の1以上の警告の各々の少なくとも1つの原因ポイントを識別し、警告の効率的かつ有効なマニュアルインスペクションのための原因ポイントを使用するための方法を示すフロー図を示す。 図3は、本開示の実施形態に係る、静的解析の1以上の警告の各々の少なくとも1つの原因ポイントを識別し、警告の効率的かつ有効なマニュアルインスペクションのための原因ポイントを使用するためのプロセスを示す概要図である。
本開示の全ての特徴を示す本発明の一部の実施形態を詳細に説明する。
文言「構成される」、「有する」、「含む」、「備える」及びそれらの他の形式は、同等な意味であり、これら文言は、これらの文言のいずれか1つに続く事項又は複数の事項のオープンなリストを意味するが、そのような事項に限定されるような排他的でクローズドなリストを意味するものではなく、また、列挙された事項のみに限定されることを意味するものではない。
また、本明細書及び添付の特許請求の範囲において用いられる、単数形“a”、“an”、“the”は、文脈が明確に示していなければ、複数形も含むことを留意されなければならない。本明細書で説明されるシステム及び方法と同様又は同等な任意のシステム及び方法は、本開示の実施形態の実施又は試験に使用することができるが、好ましい、システム及び方法が説明される。説明及び理解の目的のための以下の説明では、本開示の範囲を限定しないことを意図する多数の実施形態を参照する。
本開示の1以上の構成要素は、明細書の理解のためにモジュールとして説明される。例えば、モジュールは、ロジックゲート、半導体デバイス、集積回路又は他のディスクリート構成要素を含むハードウェア回路において内蔵型の構成要素を含んでもよい。モジュールは、また、例示のプロセッサのためのハードウェアエンティティにより実行されるソフトウェアプログラムの一部であってもよい。ソフトウェアプログラムとしてのモジュールの実装は、プロセッサ又は他のハードウェアエンティティにより実行されるべきロジカルな命令のセットを含んでもよい。
開示される実施形態は、本開示の単なる例示であり、様々な形態で具体化されてもよい。
図面に示される要素は、以下により詳細に説明されるように相互運用する。しかし、詳細な説明を示す前に、以下の全ての説明は、記載される特定の実施にかかわらず、限定的ではなく、事実上、例示的であることが留意される。例えば、実施の、選択された態様、特徴又は構成要素は、メモリに記憶されるように示されるが、消耗警告システム及び方法と一致するシステム及び方法の全部又は一部は、他の機械可読媒体に亘って分散されて記憶される、又は他の機械可読媒体から読み出されてもよい。
本開示の方法のステップは、入力で動作し、出力を生成することにより、本開示の機能を実行するために、コンピュータ可読媒体上で明らかに具体化されたプログラムを実行する1以上のコンピュータプロセッサによって行われてもよい。適切なプロセッサは、実施例により、汎用又は特殊用途のマイクロプロセッサの両方を含む。一般的に、プロセッサは、(例えば、リードオンリーメモリ及び/又はランダムアクセスメモリのような)メモリから命令及びデータを受信し(読み出し)、メモリに命令及びデータを書き込む(記憶する)。コンピュータプログラム命令及びデータを明らかに具体化するために適したストレージデバイスは、例えば、EPROM、EEPROM及びフラッシュメモリデバイスを含む、半導体メモリデバイスのような不揮発性メモリ、内蔵ハードディスク及びリムーバブルディスクのような磁気ディスク、及びCD−ROMの全ての形態を含む。前述のいずれかは、特別に設計されたASIC(application−specific integrated circuits)又はFPGAs(Field−Programmable Gate Arrays)によって補われる又は組み込まれてもよい。コンピュータは、一般的に、内蔵ディスク(図示せず)又はリムーバブルディスクのような非一時的コンピュータ可読媒体からプログラム及びデータを受信する(読み出す)、及び非一時的コンピュータ可読媒体にプログラム及びデータを書き込む(記憶する)こともできる。
用語集−説明付きの、実施形態で用いられる用語
本明細書で説明された開示は、当業者に本開示を理解させるためのいくつかの用語及び概念を定義する。特定の変数又はプログラムステートメントの値が単に静的に未知数(unknown)であるため、静的解析での十分な精度を実現することは困難である。このような値は、静的解析時に非決定性選択として一般的に扱われる必要があり、解析を行うツールは、これらの未知数による多量の警告を生じる。これらの未知数の分類は、未知数変数へ値を提供する基本動作に依存する。未知数(unknowns)の分類は、以下のようになる。
・i−unknowns:i−unknownsは、プログラム入力の未知数値により発生し、当該値は、ユーザからの、ネットワーク又はファイル又はセンサからの実際の、ロード時間でリンクされる等の入力として、受け取られる。
・c−unknowns:c−unknownsは、プログラムにおいて複雑な演算の近似から得られる演算的な未知数である。例えば、ratiob+sizeのような非線形演算は、c−unknownsである。
・loop−unknowns:その境界が静的に決定され得ないループにより生成される実際の多くの未知数が存在する。
・ds−unknowns:ds−unknownsは、リスト、スタック、キュー又はアレイのような境界のないデータ構造の値を抽出することにより生じる。
・lib−unknowns:lib−unknownsは、そのボディが解析のために利用できないライブラリ又は外部関数への呼び出しから生じる未知数に対応する。
・p−unknowns:p−unknownsは、警告プログラムポイントへの既知であるが安全ではない値を実行する特定の実行経路の分かっていない不可能性に対応する。
本明細書で提案される開示は、静的解析の1以上の警告各々の少なくとも1つの原因ポイントを識別し、静的解析の対話型かつ反復型動作を行うことによって警告の効果的かつ有効なマニュアルインスペクションのための識別された原因ポイントを使用するためのシステム及び方法である。
図1を参照すると、システム100は、1以上の警告のインスペクションのためのアプリケーションコードの静的解析の1以上の警告の各々の少なくとも1つの原因ポイントを識別する。システムは、プロセッサ102と、プロセッサと通信接続され、プロセッサにより読み出し可能な命令を含むメモリ04と、静的解析モジュール106と、原因ポイント解析モジュール108と、クエリ生成モジュール110と、順位付けモジュール112と、グループ化モジュール114と、対話モジュール116と、を備える。
好ましい実施形態では、システム100の静的解析モジュール106は、array out of bound(AIOB)、divide by zero(ZD)、及びoverflow underflow(OFUF)等のようなランタイムエラータイプの少なくとも1以上の警告を識別するためのアプリケーションコードに亘る静的解析を行う。静的解析では、特定の変数又はプログラムステートメントの値は、それらが1以上の未知数と呼ばれるとき、既知ではありえない。1以上の未知数は、それらの基本動作に基づいていくつかのカテゴリに分類されうる(未知数値のソース)。このような場合には、1以上の未知数について、1以上の警告を導く静的解析を行うツールによって、取り得るすべての値が仮定される。これらの1以上の警告は、ツールにより報告される実際のエラーとは異なり、それらは、ツールがそれらの対応するプログラムポイントでのランタイムエラーについて確かではないため、ユーザへの警告メッセージである。
好ましい実施形態では、システム100の原因ポイントモジュール108は、1以上の未知数の各々に対する少なくとも1つの原因ポイント、及び、次に、静的解析時に生成される1以上の警告に対する少なくとも1つの原因ポイントを識別するように構成される。1以上の警告の少なくとも1つの原因ポイントは、警告表現に現れるプログラム変数の1以上の値が、アプリケーションコードの静的解析時に未知であることに起因する理由である。警告表現は、1以上の警告が報告されるプログラム表現を示し、未知数は、静的解析が、アプリケーションコードの静的解析時に要求されるそれらの値を演算することができないプログラム変数である。1以上の警告の各々の少なくとも1つの原因ポイントは、それらをタイプ及びそれらの対応するプログラムポイントと関連付けることにより、警告原因ポイントとして、1以上の未知数を生じる。原因ポイントのタイプは、それらの基本動作に基づいて分類されてもよい。未知数値の各々の起点は、プログラム言語に応じて変化し、モデル化の粒度及び静的解析警告のために識別される原因ポイントもまた、プログラム言語及び未知数のモデル化に応じて変化することが理解されるであろう。
更に、システム100の原因ポイント解析モジュール108は、1以上の未知数に対する原因ポイント、及び、次に、静的解析時に生成される1以上の警告の各々の少なくとも1つの原因ポイントをモデル化するように構成される。未知数である変数を生じる各プログラムポイントは、警告への原因ポイントと呼ばれることを留意する。あるプログラムポイントでの第1の未知数の原因ポイントは、第2の未知数が、第1の未知数から移行的にその値を受け取る場合、別のプログラムポイントでの第2の原因ポイントでもある。よって、1以上の未知数を直接的又は移行的に導く基本動作のみが原因ポイントとしてモデル化される。警告表現は、各警告に対応するプログラム表現であり、それに対する取り得るランタイムエラーについての警告メッセージが報告される。
更に、システム100は、未知数値の少なくとも1つの起点をそのプログラムポイントと関連付け、そのプログラムポイントは、未知数である変数を生じ、その未知数タイプとの関連付けを増加させる。ここでは、起点は、式(expression)又はループステートメント(loop statement)のいずれかであってもよい。未知数値の少なくとも1つの起点をそのプログラムポイントと関連付けることによる原因ポイントモデル化は、制御フロー経路による実行経路の近似により生成される警告に対して十分ではないことが理解されるであろう。よって、システム100は、経路不可能性に関する原因ポイントをモデル化するためにも構成される。警告は、既知であるが安全ではない値が警告点に到達する経路の不可能性を決定するために、解析することができないことにより生じる。いくつかの警告のみが経路不可能性により生成されることが理解されるであろう。
表1を参照すると、一例として、音静的解析器は、AIOBの4つの例、ZDの1つの例、及びOFUFの1つの例のような6つの警告を生成する。7行目の変数str及び9行目のboundの正確な値を発見することができないため、音静的解析器は、これらの警告を報告する。したがって、原因ポイント解析モジュール108は、それぞれ7行目及び9行目でCP及びCPとして2つの原因を識別し、警告を解消するために、ユーザからこれらのポイントでの変数str及びboundの値を求める。未知数vが、プログラムポイントpからプログラムポイントqへの一部の経路を通じて移行的にその値を受け取る場合、プログラムポイントpでの未知数uの原因ポイントは、プログラムポイントqでの未知数vの原因ポイントでもある。よって、未知数を直接的又は移行的に導く基本動作のみが原因ポイントとしてモデル化される。生成される警告に対応するプログラム表現における未知数の原因ポイントは、警告の原因ポイントと呼ばれる。
好ましい実施形態では、クエリ生成モジュール110は、識別される原因ポイントの各々に対応する1以上のクエリを生成するように構成される。1以上のクエリは、原因ポイントの各々での1以上の未知数の各々に対する要求値を識別することによって生成される。要求値は、値がエラーへ警告をもたらさないように、未知数での必要な前提条件を示す。警告での表現及び検証特性に応じて未知数の値を推定し、かつ、移行的従属変数に対する値のバックグラウンド置換を通じた警告ポイントから原因ポイントへの未知数の推定値を伝えることによって、1以上のクエリは、フレーム化される。更に、複数の警告が、原因ポイントにより生じたとき、原因ポイントでの必要な前提条件は、対応する1以上の警告の安全性のために必要な組み合わせ要件として演算される。
一例では、原因ポイントに対応するクエリへのユーザの回答がYESである場合、ユーザ静的解析の次の反復(イテレーション)は、クエリにおいて必要な前提条件が、警告の安全性に対しても十分な条件である場合、対応する警告を解放する。そして、クエリに対する回答がNOの場合、ユーザ解析の次の反復では、対応する警告が真のエラーとしてマークされる、又はクエリの原因ポイントがp‐unknownタイプの原因ポイントに変換される。クエリが期待される値に基づいて形成されるため、それらは、プログラムの期待される振る舞いを思い付くことをユーザを促し、それにより、原因ポイントでのデータ不変条件に関するプログラム状態の理解を改善する。別の実施形態では、ユーザ対話をより有効にし、関連性があるべきクエリにし、1以上の警告のインスペクションの状況において回答することをより具体的かつ容易にする。
好ましい実施形態では、警告のマニュアルインスペクションの有効性を改善するために、システム100の順位付けモジュール112は、1以上の警告の各々の識別された原因ポイントを順位付けする。原因ポイントは、それらの未知のタイプに基づいて優先度の高い又は低い順に順位付けされる。高い優先度の原因ポイントにより生じる1以上の警告は、真のエラーとなりやすくなり、他の未知のタイプにより生じる1以上の警告は、誤った警告となりやすくなる。未知数タイプベースの順位付けでは、原因ポイントは、それらの未知タイプに基づいて、i−unknown>lib−unknown>p−unknown>loop−unknown>c−unknown>ds−unknownの順に順位付けされる。この順位付けは、i−unknowns及びlib−unknownsにより生じる警告が真のエラーとなりやすく、c−unknowns及びds−unknownsにより生じる警告が誤った警告となりやすいという前提に基づく。
更に、i−unknownタイプによる原因ポイントは、部分的に定義された環境で動作するプログラムにおける自由変数についてのソースであり、それらの大部分を検証するための不具合は、ユーザによる入力値でなされた特定の仮定によるエラーを導く。検証された入力は、それらの検証時に付けられる制限による未知数ではない。lib関数の実装は、通常、ユーザにとって既知の仕様に付く。しかし、多くの場合、ユーザは、有効性又はlib関数呼び出しに戻される値を確認することを見落とす。よって、i−unknown及びlib−unknownタイプの原因ポイントは、高い優先度を与えられる。p−unknownによる原因ポイントは、安全ではない値の存在を示し、故に、警告プログラムポイントに到達する値の不可能性が保証されなければならない。更に、実際の大容量かつ高複雑性のアプリケーションが与えられると、安全ではない値を警告プログラムポイントへ運ぶ経路の存在は可能性が低い。loop−unknownsタイプによる原因ポイントは、潜在的に無限ループのカテゴリを含む。全ての複雑な演算動作又はデータ構造自体からの値の読み出しの全てが、エラーとして警告を生じるための原因ポイントの可能性を低減するので、c−unknown及びds−unknownタイプの原因ポイントは、低い優先度で処理される。
更に、順位付けモジュール112は、寄与スコアに基づいて原因ポイントを順位付けするようにも構成されうる。例えば、Cαをアラームαに対する一連の原因ポイントとする。|Cα|=1のとき、c∈Cαは、全原因αといわれる。そうでない場合、c∈Cαは、部分原因αといわれる。Sを、原因ポイントcにより生じられる一連の警告とする。Sを生じる際の寄与を測定するために、2つのスコアを定義する。
一つの例では、警告生成での原因ポイントcの総寄与スコア(tc−score)は、以下のように演算され、ここで、設定可能係数k≧2は、pc−scoreより高いfc−scoreを重み付けするために用いられる。
tc−score(c)=fc−score(c)*k+pc−score(c)
ここで、tc−scoreは、形成されるグループ内の原因ポイントを順位付けするために用いられ、高いスコアを有する原因ポイントは、低いスコアを有するものよりも優先される。合成したtc−scoreは、そのグループ化された原因ポイントの合計としてグループについて演算され、これは、同じ未知数タイプカテゴリに属するグループを順位付けするために用いられる。
システム100の順位付けモジュール112は、ユーザによってカスタマイズされてもよいことが理解されるであろう。カスタマイズ性は、静的解析ツールの重要な側面であるため、原因ポイントを順位付けするために用いられる順位付けスキームは、ユーザの要件に適合するようにカスタマイズされることが許可される。ユーザは、ユーザが、与えられた時間により多くの警告のマニュアルインスペクションを行おうとしているとき、主な基準として寄与スコアベースの順位付けを使用しうる。一般的に多くの警告は同一の原因ポイントにより生成されるため、寄与スコアは、与えられた時間でより多くの警告をレビューすることを補助する。故に、原因ポイントでの未知数の解消は、多くの警告を一度にレビューすることを補助することができる。このように、原因ポイント解析は、警告の十分なインスペクションを可能にする。寄与スコアが主な順位付け基準として用いられるとき、他の2つの基準、すなわち、未知数タイプ並びに類似性及び近似性ベースのグループ化は、類似の寄与スコアを有する原因ポイントに適用されてもよい。ユーザは、ユーザが与えられた時間により多くのエラーを識別しようとするとき、主な基準として未知数タイプベースの順位付けを用いるために順位付けモジュールをカスタマイズしてもよい。
好ましい実施形態では、システム100のグループ化モジュール114は、それらの語句の類似性又は近似性又はその両方に応じて、順位付けされた原因ポイントをグループ化するように構成される。原因ポイントのグループ化は、それらの未知数タイプに基づく原因ポイントの順位付け前又は後に適用されうることが理解されるであろう。原因ポイントが他の原因ポイントとグループ化され得ないとき、その特有のグループのメンバーのみとして扱われる。類似の原因ポイントの語句の類似性ベースのグループ化では、グループにおいて原因ポイントと関連付けられた質問又はクエリへの回答が共に又は一度に回答されるように、共にグループ化される。
一例を参照すると、同一のライブラリ関数への呼び出しにより発生する全ての原因ポイント、例えばreadSensor()、は、共にグループ化され、グループレベルでのクエリをフレーム化するための機会を表す。類似性識別は、未知数のタイプに基づいて変化してもよい。例えば、ds−unknown(それぞれのlib−unknown)タイプの原因ポイントにおけるデータ構造(それぞれのライブラリ関数)を表す識別子は、それぞれ演算される。原因ポイント全体の表現は、c−unknown及びp−unknownタイプの原因ポイントに一致される。i−unknown及びloop−unknownタイプの原因ポイントは、このようなグループ化から排除されてもよい。近似性ベースのグループ化では、同一の処理に属する原因ポイントは、それらの対応する質問が共に回答されるようにグループ化される。グループ化のこのタイプは、原因ポイントと関連付けられた一連のクエリに回答しつつ、複数のソースファイルと処理とを切り替えることを低減する。
好ましい実施形態では、システム100の対話モジュール116は、1以上の警告を生成する原因ポイントの各々に対するユーザからの入力を受け付けることによって、警告を解消するために対話型静的解析を行うように構成される。このモジュールは、ユーザへの識別された原因ポイントの各々に対応して生成されるクエリを提示する。モジュールは、ユーザに提示されるクエリへの回答として警告を生成する原因ポイントの各々に対するユーザからの入力を受け取る。更に、対話モジュール116は、統合レビューフレームワークを用いて、警告原因ポイント及びそれらに対応するクエリを報告してもよい。統合レビューフレームワークは、別のスタンドアローンなツールを実装する、又は統合開発環境(integrated development environment(Eclipse、Microsoft visual studio、NetBeans等のようなIDE)を拡張することによって得られてもよく、コードナビゲーションをサポートし、使用される静的解析ツールの結果を解釈する。対話モジュール116の重要な態様では、モジュールは、原因ポイントからそれによって発生する警告へ、及び警告からその原因ポイントへのトレースアビリティも提供する。トレースアビリティは、回答されるクエリにおいて原因ポイントにより生成される警告の位置特定の補助をユーザに提供する。例えば、ユーザは、クエリへの回答がNOであるときに、回答されるクエリに対応する原因ポイントによって生じる警告であることを知ることに関心を持つ。
好ましい実施形態では、対話モジュール116は、クエリへの回答としてユーザにより提示される入力を静的解析モジュール106に供給し、ユーザ入力を用いてアプリケーションコードの静的解析の次の反復を開始する。解析の次の反復は、同一モジュールによるアプリケーションコードの以前の静的解析と同数の警告又はより少ない数の警告を生成する静的解析モジュール106によって行われる。システム100の静的解析モジュール106は、ユーザ入力を有する静的解析の後続の反復のために増分解析を行う。増分解析は、2つの連続的なユーザ対話間の待ち時間を低減するためのものである。更に、原因ポイント解析モジュール108を用いた原因ポイント解析及び順位付けモジュールを用いた原因ポイントの順位付けが行われ、対話モジュール116は、ユーザ入力を受け付けるために原因ポイントに対応するクエリを再び報告する。このように、静的解析は、複数の反復及び対話型で行われ、警告は、原因ポイントの順位付けにより効率的かつ有効にレビューされる。
図2を参照すると、システム200は、1以上の警告のインスペクションのためにアプリケーションコードの静的解析時に生成される1以上の警告の各々の少なくとも1つの原因ポイントを識別する。
ステップ202において、方法は開始し、アプリケーションコードに亘って静的解析モジュール106を用いて静的解析を適用し、array out of bound(AIOB)、divide by zero(ZD)及びoverflow underflow(OFUF)等のような少なくとも1以上の警告を識別する。静的解析では、特定の変数又はプログラムステートメントの値は、それらが1以上の未知数と呼ばれるため、常に既知となりえない。1以上の未知数は、それらの基本動作(未知数値に対するソース)に基づいていくつかのカテゴリに分類されうる。このような場合には、1以上の未知数に対して、1以上の警告を導く静的解析を行うツールによって全ての取り得る値が仮定される。これら1以上の警告は、ツールによって報告される実際のエラーとは異なっており、警告は、それらの対応するプログラムポイントでのランタイムエラーについてツールが定かでないため、ユーザへの警告メッセージである。
ステップ204において、方法は、1以上の理由を識別する。1以上の警告を生成し、原因ポイント解析モジュール108を用いて、生成された1以上の警告の各々への少なくとも1つの原因ポイントとして理由をモデル化する。前記方法は、1以上の未知数の各々に対する少なくとも1つの原因ポイント、及び、次に、静的解析時に生成された1以上の警告に対する少なくとも1つの原因ポイントを識別する。1以上の警告の少なくとも1つの原因ポイントは、警告表現に現れるプログラム変数の1以上の値が、アプリケーションコードの静的解析時に未知数であるということによる理由である。警告表現は、それに対して1以上の警告が報告されるプログラム表現を示し、未知数は、静的解析が、アプリケーションコードの静的解析時に、要求されるそれらの値を演算することができないプログラム変数を示す。
1以上の警告の各々の少なくとも1つの原因ポイントは、それらをタイプ及びそれらの対応するプログラムポイントと関連付けることによって、警告原因ポイントとして1以上の未知数を生じる。原因ポイントのタイプは、それらの基本動作及びそれらの対応する未知数のタイプに基づいて分類されてもよい。各未知数値の起点は、プログラム言語及びモデル化の粒度に応じて変化してもよく、よって、静的解析警告に対して識別された原因ポイントもまたプログラム言語及びモデル化の粒度に応じて変化してもよいことが理解されるであろう。
ステップ206において、本方法は、クエリ生成モジュール110を用いて、識別された原因ポイントの各々に対応する1以上のクエリを生成する。1以上のクエリは、原因ポイントの各々での1以上の未知数の各々に対する要求値を識別することによって生成される。要求値は、値が決して警告をエラーにしないように未知数での必要条件又は十分条件を表す。警告での表現及び検証特性に応じて未知数の値を推定し、かつ、移行的従属変数に対する値のバックグラウンド置換を通じた警告ポイントから原因ポイントへの未知数の推定値を伝えることによって、1以上のクエリは、フレーム化される。更に、複数の警告が原因ポイントにより生じられるとき、原因ポイントでの必要条件又は十分条件は、対応する1以上の警告の安全性についての必要な組み合わせ要件として演算される。
ステップ208において、本方法は、順位付けモジュール112を用いて、識別された原因ポイントを優先し、かつ原因ポイントを順位付けするために、3つの測定基準を定義する。原因ポイントは、それらの未知数タイプに基づいて、高い又は低い優先度の順に順位付けされる。高い優先度の原因ポイントにより生じる1以上の警告は、真のエラーとなりやすく、他の未知数タイプにより生じる1以上の警告は、誤った警告となりやすい。未知数タイプベースの順位付けでは、原因ポイントは、それらの未知数タイプに基づいてi−unknown>lib−unknown>p−unknown>loop−unknown>c−unknown>ds−unknownの順に順位付けされる。この順位付けは、i−unknowns及びlib−unknownsにより生じる警告が真のエラーとなりやすく、c−unknowns及びds−unknownsにより生じる警告が誤った警告となりやすいという前提に基づく。更に、i−unknownタイプによる原因ポイントは、部分的に定義された環境で動作するプログラムにおける自由変数についてのソースであり、それらの大部分を検証するための不具合は、ユーザによる入力値でなされた特定の仮定によるエラーを導く。検証された入力は、それらの検証時の付けられる制限による未知数ではない。lib関数の実装は、通常、ユーザにとって既知の仕様に付く。しかし、多くの場合、ユーザは、有効性又はlib関数呼び出しに戻される値を確認することを見落とす。よって、i−unknown及びlib−unknownタイプの原因ポイントは、高い優先度を与えられる。p−unknownによる原因ポイントは、安全ではない値の存在を示し、故に、警告プログラムポイントに到達する値の不可能性が保証されなければならない。更に、実際の大容量かつ高複雑性のアプリケーションが与えられると、安全ではない値を警告プログラムポイントへ運ぶ経路の存在は可能性が低い。loop−unknownsタイプによる原因ポイントは、潜在的に無限ループのカテゴリを含む。全ての複雑な演算動作又はデータ構造自体からの値の読み出しの全てが、エラーとして警告を生じるための原因ポイントの可能性を低減するので、c−unknown及びds−unknownタイプの原因ポイントは、低い優先度で処理される。
ステップ210において、本方法は、語句の類似性又は近似性に応じて原因ポイントをグループ化するために、グループ化モジュール114を用いて系統的なアプローチを適用し、類似原因ポイントの語句類似性ベースのグループ化は、それらの対応する質問が共に回答されるように共にグループ化される。原因ポイントのグループ化は、未知数タイプに基づいて原因ポイントの順位付け前又は後に適用されうることが理解されるであろう。原因ポイントがいずれの原因ポイントともグループ化され得ないとき、その特有のグループのメンバーのみとして扱われる。類似原因ポイントの語句類似性ベースのグループ化では、グループにおいて原因ポイントと関連付けられた質問又はクエリへの回答が、共に又は一度に回答されるように、グループ化される。
最後に、ステップ212において、処理は、対話型静的解析を行い、警告を生成する原因ポイントの各々に対するユーザからの入力を受け付けることにより警告を解消する。対話型静的解析は、警告が静的解析モジュールにより生成されなくなるまで対話型で行われる。原因ポイント及び原因ポイントに対応するクエリは、対話モジュール116を用いてユーザに報告され、対話モジュールを用いてこれらのクエリへの回答としてユーザ入力を受け付ける。受け付けられたこれらのユーザ入力は、ステップ202へ供給され、次の反復(イテレーション)を開始し、回答された原因ポイントに対応する警告が解消されることによるユーザ入力を用いて再び静的解析を行う。処理、すなわち202から212へのステップは、警告が静的解析によって生成されなくなるまで繰り返される。
図3を参照すると、1以上の警告のインスペクションのためのアプリケーションコードの静的解析から生じる1以上の警告の各々の少なくとも1つの原因ポイントを識別するためのフローチャートを示す。フローチャートは、アプリケーションコードに亘って静的解析を開始及び適用し、1以上の警告を生成し、少なくとも1つの警告を生成する場合、処理は、次のステップへ移り、生成された1以上の警告の各々への少なくとも1つの原因ポイントを識別する。更に、処理は、原因ポイントで現れるプログラムステートメント及び解析の不正確さに対するソースに応じて原因ポイントを各種タイプに分類する。更に、原因ポイントと関連付けられた少なくとも1つの未知数変数を有する。静的解析における不正確さのソースは、未知数として示され、これらは、アプリケーションコードの静的解析時に、値が正確に演算され得ない変数であることが留意されるであろう。原因ポイントが現れる不正確さのソース及びプログラムステートメント、又は静的解析における未知数は、C、C++及びJava(登録商標)のようなプログラミング言語通りに変化してもよい。よって、識別される原因ポイント及びそれらの異なるタイプは、静的解析によってチェックされるアプリケーションコードのプログラミング言語に応じて変化してもよいことが理解されるであろう。
更に、この処理は、次のステップへ移り、3つの測定基準を定義し、識別された原因ポイントを優先付けし、よって、原因ポイントを順位付けする。これらの測定基準は、原因ポイントタイプ、寄与スコア、並びにそれらの類似性及び空間近似性である。原因ポイントの順位付けは、ユーザが、与えられた時間内に、より多くの警告をレビューすることを可能にし、また、与えられた時間内に、より多くのエラーを識別することを可能にする。更に、提案される順位付けスキームは、カスタマイズ可能であり、ユーザは、ユーザの要件に応じた警告原因ポイントを順位付けするために用いられる基準を修正又はカスタマイズすることができる。原因ポイントにおける未知数についての情報は、識別された全ての原因ポイントが、それと関連付けられた1以上のクエリを有するクエリの形態でユーザに求められる。系統的なアプローチは、ユーザに提示されるクエリをフレーム化するために用いられる。クエリへの回答であるユーザ入力を用いて、静的解析は、回答された原因ポイントに対応する警告が解消されることにより再び行われる。処理は、静的解析によって警告が生成されなくなるまで繰り返される。
記載された詳細な説明は、本明細書に本発明を記述して、当業者が実施形態を実行及び使用可能にする。本発明の実施形態の範囲は、特許請求の範囲によって定義され、当業者に生じる他の変更を含んでもよい。このような他の変更は、それらが特許請求の範囲の文言と異ならない類似の要素を有する場合、又はそれらが特許請求の範囲の文言との非実質的な差異を有する等価な要素を含む場合、特許請求の範囲の範囲内にあることを意図するものである。
本明細書の本開示の実施形態は、ソフトウェアの品質及びソフトウェアの信頼性を確保するためにアプリケーションコードにおける欠陥検出のための静的解析技術を適用しつつ、生成される警告の各々に対応する複数の警告の解消されない課題を解決する。静的解析は、通常、複数の警告で生じる。ユーザは、各警告を人手(マニュアル)で解析することになっている。警告の解析がソフトウェアアプリケーションを検証するために要求されるため、各警告は、最大限の配慮をすることを要求する。警告のレビューは、静的解析を通じて生成される警告から真のエラーを明らかにすることによって、システム障害がないこと又はランタイムでのエラーがないことの保証を提供する。この警告のマニュアルレビューは、コストが掛かり、時間を多く消費し、退屈である。また、警告の反復マニュアルレビューは、ユーザの解析業務への関心を低くする。
前述の詳細な説明は、各種実施形態を参照して提示されている。当業者及び本願に付随する技術は、説明された構造及び動作の方法における代替及び変更が、原理、趣旨及び範囲から有意義に逸脱することなく、実施されうることを理解するであろう。

Claims (14)

  1. アプリケーションコードに亘る静的解析の1以上の警告の各々の少なくとも1つの原因ポイントを識別するシステムであって、
    メモリと、
    前記メモリと通信接続されるプロセッサであって、前記メモリは、前記プロセッサによって読み取り可能な命令を含む、プロセッサと、
    前記アプリケーションコードに亘る静的解析を行い、1以上の警告を生成しつつ、プログラミングエラーを識別するためにアプリケーションコードを解析するように構成される静的解析モジュールと、
    前記静的解析時に生成される前記1以上の警告の各々についての少なくとも1つの原因ポイントを識別するように構成される原因ポイント解析モジュールであって、前記1以上の警告の少なくとも1つの原因ポイントは、警告表現に現れるプログラム変数の1以上の値が、前記アプリケーションコードの静的解析時に未知数であることによる理由であり、前記警告表現は、前記1以上の警告が報告されたプログラム表現を示し、前記未知数は、前記静的解析が、前記アプリケーションコードの静的解析時に、要求されるそれらの値を演算できない前記プログラム変数を示す、原因ポイント解析モジュールと、
    を備えるシステム。
  2. 対話型静的解析を行い、前記1以上の警告を生成する前記原因ポイントの各々についてユーザからの入力を受け付けることにより警告を解消するように構成される対話モジュールを更に備え、前記対話型静的解析は、警告が前記静的解析モジュールによって生成されなくなるまで反復型で行われる、請求項1に記載のシステム。
  3. 識別された前記原因ポイントの各々に対応する1以上のクエリを生成するように構成されるクエリ生成モジュールであって、前記1以上のクエリは、前記原因ポイントの各々における前記1以上の未知数の各々についての要求値を識別することによって生成され、それらの値により、対応して生成される警告が安全なプログラムポイントである、クエリ生成モジュールと、
    順位付けスキームに基づいて前記1以上の警告の、識別された1以上の原因ポイントを順位付けし、前記警告のマニュアルインスペクションの効率性を改善するように構成される順位付けモジュールと、
    前記原因ポイントの語句の類似性又は近似性に応じて、順位付けされた1以上の原因ポイントをグループ化するように構成されるグループ化モジュールであって、前記1以上の原因ポイントは、一度に前記1以上の原因ポイントの対応する1以上の未知数又はクエリに対する入力を受け付けるために共にグループ化される、グループ化モジュールと、
    を更に備える請求項1に記載のシステム。
  4. 前記1以上の警告の前記原因ポイントは、プログラミングエラーについての前記1以上の警告の生成のための1以上の理由を含み、前記1以上の理由は、array out of bound(AIOB)、divide by zero(ZD)、及びoverflow underflow(OFUF)を含む、請求項1に記載のシステム。
  5. 前記未知数の値の起点は、プログラムステートメントにおける式又はループステートメントのいずれかであり、前記未知数の値は、前記静的解析時に未知の変数に対して取り得る1以上の値からの非決定性選択として扱われる、請求項1に記載のシステム。
  6. 前記未知数についての前記1以上の理由は、各種タイプの原因ポイントとしてモデル化され、各原因ポイントは、未知数、未知数のタイプ、及び前記未知数が観察されたプログラムステートメントの関連付けである、請求項1に記載のシステム。
  7. 前記原因ポイントは、順位付けスキーム、未知数のタイプ、寄与スコア並びにそれらの類似性及び空間的近似に基づいて高い又は低い優先度の順序で順位付けされ、前記順位付けスキームは、ユーザの要件としてカスタマイズ可能である、請求項3に記載のシステム。
  8. アプリケーションコードに亘る静的解析の1以上の警告の各々の少なくとも1つの原因ポイントを識別する方法であって、
    前記アプリケーションコードに亘る静的解析を行い、1以上の警告を生成しつつ、プログラミングエラーを識別するためにアプリケーションコードを解析するステップと、
    原因ポイント解析モジュールを用いて、前記1以上の警告の各々についての少なくとも1つの原因ポイントを識別するステップであって、前記1以上の警告の少なくとも1つの原因ポイントは、警告表現に現れるプログラム変数の1以上の値が、前記アプリケーションコードの静的解析時に未知数であることによる理由であり、前記警告表現は、前記1以上の警告が報告されたプログラム表現を示し、前記未知数は、前記静的解析が、前記アプリケーションコードの静的解析時に、要求されるそれらの値を演算できない前記プログラム変数を示す、ステップと、
    を備える方法。
  9. 対話型静的解析を行い、前記警告を生成する前記原因ポイントの各々についてユーザからの入力を受け付けることにより前記警告を解消するステップを更に備え、前記対話型静的解析は、静的解析モジュールによって前記警告が生成されなくなるまで反復型で行われる、請求項8に記載の方法。
  10. 識別された前記原因ポイントの各々に対応する1以上のクエリを生成するステップであって、前記1以上のクエリは、前記原因ポイントの各々における前記1以上の未知数の各々についての要求値を識別することによって生成され、それらの値により、対応して生成される警告が安全なプログラムポイントである、ステップと、
    順位付けスキームに基づいて前記1以上の警告の、識別された1以上の原因ポイントを順位付けし、前記警告のマニュアルインスペクションの効率性を改善するステップと、
    前記原因ポイントの語句の類似性又は近似性に応じて、順位付けされた1以上の原因ポイントをグループ化するステップであって、前記1以上の原因ポイントは、一度にそれらの対応する1以上の未知数又はクエリに対する入力を受け付けるために共にグループ化される、ステップと、
    を更に備える請求項8に記載の方法。
  11. 前記1以上の警告の前記原因ポイントは、プログラミングエラーについての前記1以上の警告の生成のための1以上の理由を含み、前記1以上の理由は、array out of bound(AIOB)、divide by zero(ZD)、及びoverflow underflow(OFUF)を含む、請求項8に記載の方法。
  12. 前記未知数の値の起点は、プログラムステートメントの式又はループステートメントのいずれかであり、前記未知数の値は、前記静的解析時に未知の変数に対して取り得る1以上の値からの非決定性選択として扱われる、請求項8に記載の方法。
  13. 前記未知数についての前記1以上の理由は、各種タイプの原因ポイントとしてモデル化され、各原因ポイントは、未知数、未知数のタイプ、及び前記未知数が観察されたプログラムステートメントの関連付けである、請求項8に記載の方法。
  14. 前記順位付けスキームは、未知数のタイプ、寄与スコア並びにそれらの類似性及び空間的近似を含み、前記順位付けスキームは、ユーザの要件としてカスタマイズ可能である、請求項10に記載の方法。
JP2017156330A 2016-08-11 2017-08-14 静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法 Pending JP2018026135A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
IN201621027511 2016-08-11
IN201621027511 2016-08-11

Publications (1)

Publication Number Publication Date
JP2018026135A true JP2018026135A (ja) 2018-02-15

Family

ID=59677024

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017156330A Pending JP2018026135A (ja) 2016-08-11 2017-08-14 静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法

Country Status (3)

Country Link
US (1) US10747641B2 (ja)
EP (1) EP3285171B1 (ja)
JP (1) JP2018026135A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020004363A (ja) * 2018-06-25 2020-01-09 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 複数の静的解析アラームを再配置するための方法およびシステム
WO2020021588A1 (ja) * 2018-07-23 2020-01-30 三菱電機株式会社 点数化装置、点数化プログラム及び点数化方法
CN111240687A (zh) * 2020-01-09 2020-06-05 华东师范大学 源代码静态分析装置

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10747641B2 (en) * 2016-08-11 2020-08-18 Tata Consultancy Services Limited System and method for cause point analysis for effective handling of static analysis alarms
US10545848B2 (en) * 2016-10-11 2020-01-28 International Business Machines Corporation Boosting the efficiency of static program analysis using configuration tuning
US10664601B2 (en) * 2016-10-25 2020-05-26 Nanjing University Method and system automatic buffer overflow warning inspection and bug repair
US10241892B2 (en) * 2016-12-02 2019-03-26 International Business Machines Corporation Issuance of static analysis complaints
CN110175123A (zh) * 2019-05-22 2019-08-27 中国石油大学(华东) 一种基于符号表达式静态缺陷警报关联识别方法
EP3828713A1 (en) 2019-11-29 2021-06-02 Tata Consultancy Services Limited Method and system for non-impacting control dependencies based repositioning of static analysis alarms

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05173844A (ja) * 1991-12-19 1993-07-13 Nec Corp コーディングミス修正方式
JPH09185500A (ja) * 1995-12-28 1997-07-15 Nec Corp ソースプログラムの自動修正装置および自動修正方法
JP2008021244A (ja) * 2006-07-14 2008-01-31 Toshiba Corp ソースコード修正優先度付けシステムおよびその優先度付け方法
JP2012248050A (ja) * 2011-05-30 2012-12-13 Nec Commun Syst Ltd 静的解析支援装置、静的解析支援方法、及びプログラム
JP2014089700A (ja) * 2012-09-27 2014-05-15 Tata Consultancy Services Ltd ランタイム実行障害のソースを識別するシステム及び方法
JP2014170530A (ja) * 2013-02-28 2014-09-18 Tata Consultancy Services Ltd 静的解析中に発生した警告をグループ化するシステムおよび方法
JP2015026276A (ja) * 2013-07-26 2015-02-05 Necエンジニアリング株式会社 静的解析装置、静的解析方法、および、コンピュータ・プログラム
JP2015088191A (ja) * 2013-10-31 2015-05-07 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 静的解析警告のユーザインタフェース使用可能レビューを促進するシステム及び方法
JP2016071895A (ja) * 2014-09-29 2016-05-09 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited クラスタ化されたコード解析警告のレビューのための方法およびシステム

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090292941A1 (en) * 2008-05-22 2009-11-26 Nec Laboratories America, Inc. Proof-guided error diagnosis (ped) by triangulation of program error causes
US20100058475A1 (en) * 2008-08-26 2010-03-04 Nec Laboratories America, Inc. Feedback-guided fuzz testing for learning inputs of coma
US8359584B2 (en) * 2009-12-18 2013-01-22 Microsoft Corporation Debugging from a call graph
US8443342B2 (en) * 2010-06-01 2013-05-14 Microsoft Corporation Static analysis using interactive and integration tools
JP5303795B2 (ja) * 2010-06-02 2013-10-02 株式会社日立製作所 アプリケーションの解析方法、解析システム及び解析プログラム
US20120054724A1 (en) * 2010-08-31 2012-03-01 International Business Machines Corporation Incremental static analysis
US8621441B2 (en) * 2010-12-27 2013-12-31 Avaya Inc. System and method for software immunization based on static and dynamic analysis
JP5556655B2 (ja) * 2010-12-28 2014-07-23 富士通株式会社 解析支援プログラム,解析支援装置および解析支援方法
EP2718820B1 (en) 2011-06-08 2017-10-11 The MathWorks, Inc. Identifying and triaging software bugs through backward propagation of under-approximated values and empiric techniques
US8935674B2 (en) 2012-08-15 2015-01-13 International Business Machines Corporation Determining correctness conditions for use in static analysis
CN103294594B (zh) 2013-05-08 2016-01-06 南京大学 一种基于测试的静态分析误报消除方法
US9158922B2 (en) * 2013-05-29 2015-10-13 Lucent Sky Corporation Method, system, and computer-readable medium for automatically mitigating vulnerabilities in source code
US10747641B2 (en) * 2016-08-11 2020-08-18 Tata Consultancy Services Limited System and method for cause point analysis for effective handling of static analysis alarms

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05173844A (ja) * 1991-12-19 1993-07-13 Nec Corp コーディングミス修正方式
JPH09185500A (ja) * 1995-12-28 1997-07-15 Nec Corp ソースプログラムの自動修正装置および自動修正方法
JP2008021244A (ja) * 2006-07-14 2008-01-31 Toshiba Corp ソースコード修正優先度付けシステムおよびその優先度付け方法
JP2012248050A (ja) * 2011-05-30 2012-12-13 Nec Commun Syst Ltd 静的解析支援装置、静的解析支援方法、及びプログラム
JP2014089700A (ja) * 2012-09-27 2014-05-15 Tata Consultancy Services Ltd ランタイム実行障害のソースを識別するシステム及び方法
JP2014170530A (ja) * 2013-02-28 2014-09-18 Tata Consultancy Services Ltd 静的解析中に発生した警告をグループ化するシステムおよび方法
JP2015026276A (ja) * 2013-07-26 2015-02-05 Necエンジニアリング株式会社 静的解析装置、静的解析方法、および、コンピュータ・プログラム
JP2015088191A (ja) * 2013-10-31 2015-05-07 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 静的解析警告のユーザインタフェース使用可能レビューを促進するシステム及び方法
JP2016071895A (ja) * 2014-09-29 2016-05-09 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited クラスタ化されたコード解析警告のレビューのための方法およびシステム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020004363A (ja) * 2018-06-25 2020-01-09 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 複数の静的解析アラームを再配置するための方法およびシステム
WO2020021588A1 (ja) * 2018-07-23 2020-01-30 三菱電機株式会社 点数化装置、点数化プログラム及び点数化方法
CN111240687A (zh) * 2020-01-09 2020-06-05 华东师范大学 源代码静态分析装置

Also Published As

Publication number Publication date
EP3285171A1 (en) 2018-02-21
US20180046564A1 (en) 2018-02-15
US10747641B2 (en) 2020-08-18
EP3285171B1 (en) 2021-11-24

Similar Documents

Publication Publication Date Title
JP2018026135A (ja) 静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法
US8875110B2 (en) Code inspection executing system for performing a code inspection of ABAP source codes
US20230135819A1 (en) Systems and methods for diagnosing problems from error logs using natural language processing
Muske et al. Survey of approaches for handling static analysis alarms
US9824002B2 (en) Tracking of code base and defect diagnostic coupling with automated triage
US8589884B2 (en) Method and system for identifying regression test cases for a software
US9898387B2 (en) Development tools for logging and analyzing software bugs
Padgham et al. Model-based test oracle generation for automated unit testing of agent systems
US8881116B2 (en) Identifying and triaging software bugs through backward propagation of under-approximated values and empiric techniques
US8645761B2 (en) Precise fault localization
JP2017033562A (ja) 安全重視ソフトウェア開発のためのモデルベース技術および過程のためのシステムおよび方法
JP2017062780A (ja) 誤検出の効率的な排除に基づく静的解析
CN111104335B (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
WO2019055378A1 (en) METHOD AND APPARATUS FOR FINDING LONG PROCESSES IN A CODE
US11119901B2 (en) Time-limited dynamic testing pipelines
JP2019096292A (ja) 自動化されたソフトウェアプログラム修復候補の選択
JP2020102209A (ja) ソフトウェアプログラム不良位置の識別
US11645192B2 (en) Graph-based method for inductive bug localization
JP2009099111A (ja) 規則検査プログラム、規則検査方法および規則検査装置
Matragkas et al. A Traceability-Driven Approach to Model Transformation Testing.
JP5121891B2 (ja) 規則検査装置、規則検査方法及び規則検査プログラム
CN110515653B (zh) 文档生成方法、装置、电子设备及计算机可读存储介质
Dang A practical approach for ranking software warnings from multiple static code analysis reports
US20230121753A1 (en) Resiliency Verification of Modular Plants
CN110688144A (zh) 业务接口配置优化的方法、装置及电子设备

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171016

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180928

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181106

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190205

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20190625

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191017

C60 Trial request (containing other claim documents, opposition documents)

Free format text: JAPANESE INTERMEDIATE CODE: C60

Effective date: 20191017

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20191018

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20191108

C21 Notice of transfer of a case for reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C21

Effective date: 20191112

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20191220

C211 Notice of termination of reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C211

Effective date: 20200108

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20200630

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20200804

C13 Notice of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: C13

Effective date: 20200915

C19 Decision taken to dismiss amendment

Free format text: JAPANESE INTERMEDIATE CODE: C19

Effective date: 20200929

C30A Notification sent

Free format text: JAPANESE INTERMEDIATE CODE: C3012

Effective date: 20200929

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20201006

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20201215

C23 Notice of termination of proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C23

Effective date: 20210216

C03 Trial/appeal decision taken

Free format text: JAPANESE INTERMEDIATE CODE: C03

Effective date: 20210323

C30A Notification sent

Free format text: JAPANESE INTERMEDIATE CODE: C3012

Effective date: 20210323