(57)【要約】      （修正有）【課題】報告される静的解析アラームの数を減らし、それらの原因により近いそれらを報告する、複数の静的解析アラームを再配置するシステムを提供する。【解決手段】システムは、静的解析モジュール２０２および再配置モジュール２０４を含む。静的アナライザモジュールは、入力として受信したアプリケーションコードに対して静的解析を実行し、アプリケーションコードにおけるエラーを検出する、静的解析アラームのセットを生成する。中間再配置モジュール２０６は、静的解析アラームのセットを、アプリケーションコード内の最高のプログラムポイントで一時的に上方に再配置する。トレーサビリティリンクモジュール２０８は、予測可能なアラーム条件とそれらに対応する、関連するオリジナルの静的解析アラームとに基づいて中間再配置された静的解析アラームと静的解析アラームのセットにおける静的解析アラームとの間のトレーサビリティリンクを計算する。【選択図】図２
2020004363.tif 000002
【特許請求の範囲】
【請求項１】
複数の静的解析アラームを再配置するためのプロセッサ実装方法であって、
静的解析モジュールへの入力としてアプリケーションコードを提供するステップと、
静的解析アラームのセットを生成するために、前記アプリケーションコードに対して静的解析を実行するステップであって、前記静的解析アラームのセットは、前記アプリケーションコードにおけるエラーを検出する、ステップと、
前記静的解析アラームのセットの中間再配置を実行するステップであって、前記静的解析アラームのセットにおける各静的解析アラームは、前記静的解析アラームのセットによって検出されたエラーに影響を与えることなく、前記アプリケーションコードにおける最高のプログラムポイントで一時的に上方に再配置される、ステップと、
中間再配置された静的解析アラームと、前記静的解析アラームのセットからの対応する静的解析アラームとの間のトレーサビリティリンクを計算するステップと、
前記中間再配置の改良を実行するステップと、
改良された前記中間再配置された静的解析アラームと、前記静的解析アラームのセットからの対応する静的解析アラームとの間のトレーサビリティリンクを計算するステップと、
前記静的解析アラームのセットの最終的な再配置を得るために、改良された前記中間再配置された静的解析アラームのセットに対して最終的な再配置技術のセットを実行するステップと、
最終的な再配置された静的解析アラームと、前記静的解析アラームのセットからの対応する静的解析アラームとの間のトレーサビリティリンクを計算するステップと、
前記最終的な再配置された静的解析アラームのセットを表示するステップと、
を備える方法。
【請求項２】
静的解析、データフロー解析、抽象的解釈等などの１つ以上のコード解析技術を使用して、前記静的解析アラームのセットからの関連したオリジナルの静的解析アラームを用いて予測可能なアラーム条件を計算することによって、前記静的解析アラームのセットにおける静的解析アラームの各々は、生成のために一時的に原因ポイントにより近い上方に再配置される、請求項１に記載の方法。
【請求項３】
前記静的解析アラームのセットにおける前記中間再配置された静的解析アラームと前記静的解析アラームとの間の前記トレーサビリティリンクは、予測可能なアラーム条件と、関連するオリジナルの静的解析アラームとに基づいて計算される、請求項１に記載の方法。
【請求項４】
前記中間再配置の改良中に、前記中間再配置された静的解析アラームは、静的解析、データフロー解析、抽象的解釈等などの１以上のコード解析技術を使用して、前記中間再配置された静的解析アラームおよび前記静的解析アラームへのトレーサビリティリンクに基づいて、利用可能なアラーム条件を関連するオリジナルの静的解析アラームを用いて計算することに基づいて、前記アプリケーションコードにおける最高のポイントで後でマージされるか、またはマージされない、請求項１に記載の方法。
【請求項５】
前記静的解析アラームのセットにおける改良された前記中間再配置された静的解析アラームと前記静的解析アラームとの間の前記トレーサビリティリンクは、利用可能なアラーム条件と、関連するオリジナルの静的解析アラームとに基づいて計算される、請求項１に記載の方法。
【請求項６】
前記最終的な再配置技術のセットは、前記最終的な再配置された静的解析アラームを得るための改良された前記中間再配置された静的解析アラームの単純化、前記最終的な再配置された静的解析アラームからの冗長性の排除、および前記最終的な再配置された静的解析アラームからの前記冗長性の排除後に、静的解析アラームの全体数を増加させる再配置ケースを識別することによるフォールバックの実行を含む、請求項１に記載の方法。
【請求項７】
前記静的解析アラームのセットにおける前記最終的な再配置された静的解析アラームと前記静的解析アラームとの間のトレーサビリティリンクは、前記静的解析アラームのセットにおける改良された前記中間再配置された静的解析アラームと前記静的解析アラームとの間で計算されたトレーサビリティリンクに基づいて計算される、請求項１に記載の方法。
【請求項８】
複数の静的解析アラームを再配置するためのシステムであって、
命令および１以上のモジュール（１０８）を記憶するメモリ（１０２）と、
１以上の通信または入出力インターフェース（１０６）と、
前記１以上の通信インターフェース（１０６）を介して前記メモリ（１０２）に結合された１以上のハードウェアプロセッサ（１０４）と、を備え
前記１以上のハードウェアプロセッサ（１０４）は、前記１以上のモジュール（１０８）を実行するための前記命令によって構成され、
前記１以上のモジュール（１０８）は、
入力としてアプリケーションコードを受信し、静的解析アラームのセットを生成するために、受信された前記アプリケーションコードに対して静的解析を実行し、前記静的解析アラームのセットは、前記アプリケーションコードにおけるエラーを検出する、静的解析モジュール（２０２）と、
前記静的解析アラームのセットの中間再配置を実行する中間再配置モジュールであって、前記静的解析アラームのセットにおける各静的解析アラームは、前記静的解析アラームのセットによって検出されたエラーに影響を与えることなく、前記アプリケーションコードにおける最高のプログラムポイントで一時的に上方に再配置される、中間再配置モジュール（２０６）と、
中間再配置された静的解析アラームと、前記静的解析アラームのセットからの対応する静的解析アラームとの間のトレーサビリティリンクを計算するトレーサビリティリンクモジュール（２０８）と、
前記中間再配置の改良を実行する再配置改良モジュール（２１０）と、
改良された前記中間再配置された静的解析アラームと、前記静的解析アラームのセットからの対応する静的解析アラームとの間のトレーサビリティリンクを計算するトレーサビリティリンクモジュール（２０８）と、
前記静的解析アラームのセットの最終的な再配置を得るために、改良された前記中間再配置された静的解析アラームのセットに対して最終的な再配置技術のセットを実行する最終的な再配置モジュール（２１２）と、
最終的な再配置された静的解析アラームと、前記静的解析アラームのセットからの対応する静的解析アラームとの間のトレーサビリティリンクを計算する前記トレーサビリティリンクモジュール（２０８）と、
前記最終的な再配置された静的解析アラームのセットを表示するための通信または入出力インターフェース（１０６）と、
を備える、システム。
【請求項９】
コンピュータ可読プログラムが具現化された非一時的コンピュータ可読媒体であって、前記コンピュータ可読プログラムは、１以上のハードウェアプロセッサによって実行されるときに、
静的解析モジュールへの入力としてアプリケーションコードを提供することと、
静的解析アラームのセットを生成するために、前記アプリケーションコードに対して静的解析を行い、前記静的解析アラームのセットは、前記アプリケーションコードにおけるエラーを検出する、ことと、
前記静的解析アラームのセットの中間再配置を実行し、前記静的解析アラームのセットにおける各静的解析アラームは、前記静的解析アラームのセットによって検出されたエラーに影響を与えることなく、前記アプリケーションコードにおける最高のプログラムポイントで一時的に上方に再配置される、ことと、
中間再配置された静的解析アラームと、前記静的解析アラームのセットからの対応する静的解析アラームとの間のトレーサビリティリンクを計算することと、
前記中間再配置の改良を実行することと、
改良された前記中間再配置された静的解析アラームと、前記静的解析アラームのセットからの対応する静的解析アラームとの間のトレーサビリティリンクを計算することと、
前記静的解析アラームのセットの最終的な再配置を得るために、改良された前記中間再配置された静的解析アラームのセットに対して最終的な再配置技術のセットを実行することと、
最終的な再配置された静的解析アラームと、前記静的解析アラームのセットからの対応する静的解析アラームとの間のトレーサビリティリンクを計算することと、
前記最終的な再配置された静的解析アラームのセットを表示することと、
を行わせる、非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願及び優先権の相互参照
本出願は、２０１８年６月２５日に出願されたインド国非仮明細書第２０１８２１０２３６５５号からの優先権を主張し、その完全な開示は、その全体が参照により本明細書に組み込まれる。
【０００２】
本明細書の開示は、一般に、アプリケーションコードの静的解析から生成される静的解析アラームの分野に関し、より詳細には、アプリケーションコードにおける複数の静的解析アラームを再配置する（repositioning）ためのシステムおよび方法に関する。
【０００３】
テストは、ソフトウェアプログラムまたはアプリケーションまたは製品が期待されるビジネス要件および技術要件を満たしているかどうかを検証し、確認するプロセスである。ソフトウェアプログラムの品質および信頼性を保証するために実際に広く使用されている技術は、静的解析であり、ソフトウェアプログラムまたはアプリケーションコードは、実際にプログラムまたはアプリケーションコードを実行することなく、欠陥を検出するために解析される。静的解析中、アプリケーションコードは、静的解析ツールを使用して解析され、ツールは、アプリケーションコードにおける安全およびエラープログラムポイントの報告と共に、１以上の静的解析警告／アラームを生成する。静的解析ツールによって生成される静的解析アラームは、欠陥／エラーを表す場合もあればそうでない場合もあり、潜在的な欠陥を示すユーザへの警告である。生成されたアラームは、静的解析ツールによってユーザに報告され、警告に対応するアプリケーションコード内のプログラムポイントにおける安全性を決定する。
【０００４】
実際には、多数の静的解析アラームが生成され、それらのほとんどは静的解析ツールによって使用される近似値によって誤って生成される。誤って生成された静的解析アラームは、欠陥を表さないので、誤検知（ｆａｌｓｅ  ｐｏｓｉｔｉｖｅｓ）と呼ばれる。さらに、生成された静的解析アラームを誤検知および真の欠陥／エラーに分類するタスクはしばしば手動であり、非常に退屈であり、コストがかかる。生成された多数の静的解析アラーム、および生成された静的解析アラームを手動で分類することに伴うコストは、実際に静的解析ツールを採用する際の主要な懸念事項として認識されてきた。いくつかの既存の方法は、類似または関連する静的解析アラームを一緒にグループ化し、各グループを単一のアラームとして表す。しかし、静的解析アラームをグループ化するこれらの方法は、同じ変数または原因によって関連付けられたアラームをグループ化することができないことがあり、この失敗は、静的解析アラームの報告において冗長性をもたらす。
【０００５】
さらに、従来の静的解析ツールは、ランタイムエラーが起こりそうな位置（location）で静的解析アラームを報告する。ランタイムエラーが起こりそうな場合に静的解析アラームが報告されるので、ユーザは、静的解析アラームがエラーを表すかどうかを識別するために、報告されたアラームプログラムポイントから静的解析アラームの原因までアプリケーションコードを後方方向にトラバースしなければならない。さらに、トラバースプロセスは、工業用アプリケーションコードの大きなサイズおよび複雑さのため、厄介なタスクとなり得る。
【発明の概要】
【０００６】
本開示の実施形態は、従来のシステムにおいて本発明者らによって認識された上述の技術的問題の１以上に対する解決策として、技術的改善を提示する。例えば、一実施形態では、複数の静的解析アラームを再配置するためのシステムおよび方法が提供される。提案された再配置技術は、報告される静的解析アラームの数を減らすため、またはそれらの原因により近いそれらを報告するため、または両方の目的のために、オリジナルの報告のプログラムポイントからアプリケーションコードの上または下に静的解析アラームのセットからの静的解析アラームの各々を再配置する。さらに、再配置技術は静的解析アラームのセットの再配置が、それらによってカバーされないエラーに影響を及ぼさないことを保証する。再配置された静的解析アラームとそれの対応する静的解析アラームとの間のさらなるトレーサビリティリンクも維持される。
【０００７】
別の態様では、複数の静的解析アラームを再配置するための方法が開示される。この方法は、静的アナライザモジュールへの入力としてアプリケーションコードを提供するステップをさらに含む。さらに、本方法は静的解析モジュールによってアプリケーションコードに対して静的解析を実行して、静的解析アラームのセットを生成するステップを含み、静的解析アラームのセットは、アプリケーションコードにおけるエラーを検出する。さらに、本方法は静的解析アラームのセットの中間再配置を実行し、静的解析アラームのセットにおける各静的解析アラームは、静的解析アラームのセットによって検出されるエラーに影響を与えることなく、アプリケーションコードにおける最高のプログラムポイントで一時的に上方に再配置される。さらに、この方法は、中間再配置された静的解析アラームと、前記静的解析アラームのセットからのそれら応する静的解析アラームとの間のトレーサビリティリンクを計算することを含む。さらに、この方法は、中間再配置の改良（refinement）を実行するステップを含む。さらに、この方法は、改良された中間再配置された（refined intermediate repositioned）静的解析アラームと、静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクを計算することを含む。さらに、この方法は、改良された中間再配置された静的解析アラームのセットに対して最終的な再配置技術のセットを実行して、静的解析アラームのセットの最終的な再配置を得ることを含む。さらに、この方法は、最終的に再配置された静的解析アラームと、静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクを計算することを含む。最後に、この方法は、最終的な再配置された静的解析アラームのセットを表示することを含む。
【０００８】
別の態様では、複数の静的解析アラームを再配置するためのシステムであって、命令および１以上のモジュールを記憶するメモリと、１以上の通信インターフェースと、１以上の通信インターフェースを介してメモリに結合された１以上のハードウェアプロセッサとを含み、１以上のハードウェアプロセッサはアプリケーションコードを入力として受信し、受信したアプリケーションコードに対して静的解析を実行して静的解析アラームのセットを生成し、静的解析アラームのセットがアプリケーションコードにおけるエラーを検出する静的解析モジュールをさらに備える１以上のモジュールを実行するための命令によって構成される、システム。システムは静的解析アラームのセットの中間再配置を実行するための中間再配置モジュールをさらに含み、静的解析アラームのセットにおける各静的解析アラームは、静的解析アラームのセットによって検出されるエラーに影響を与えることなく、アプリケーションコードにおける最高のプログラムポイントで一時的に上方に再配置される。システムはさらに、中間再配置された静的解析アラームと、静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクを計算するためのトレーサビリティリンクモジュールを含む。システムは、中間再配置の改良を実行するための再配置改良モジュールをさらに含む。システムは、改良された中間再配置された静的解析アラームと、静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクを計算するためのトレーサビリティリンクモジュールをさらに含む。システムはさらに、改良された中間再配置された静的解析アラームのセットに対して最終的な再配置技術のセットを実行して、静的解析アラームのセットの最終的な再配置を得るための最終的な再配置モジュールを含む。システムは、最終的な再配置された静的解析アラームと、静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクを計算するためのトレーサビリティリンクモジュールをさらに含む。システムは、最終的な再配置された静的解析アラームのセットを表示するための通信インターフェースをさらに含む。
【０００９】
さらに別の態様では、コンピュータ可読プログラムが具現化された非一時的なコンピュータ可読媒体であって、コンピュータ可読プログラムが１以上のハードウェアプロセッサによって実行されると、アプリケーションコードが静的アナライザモジュールへの入力として提供されるようにする、コンピュータ可読媒体。さらに、プログラムは静的解析モジュールによってアプリケーションコードに対して静的解析を実行して、静的解析アラームのセットを生成することを含み、静的解析アラームのセットは、アプリケーションコードにおけるエラーを検出する。さらに、プログラムは静的解析アラームのセットの中間再配置を実行し、静的解析アラームのセットにおける各静的解析アラームは、静的解析アラームのセットによって検出されるエラーに影響を与えることなく、アプリケーションコードにおける最高のプログラムポイントで一時的に上方に再配置される。さらに、プログラムは、中間再配置された静的解析アラームと、静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクを計算することを含む。さらに、プログラムは、中間再配置の改良を実行することを含む。さらに、プログラムは、改良された中間再配置された静的解析アラームと、静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクを計算することを含む。さらに、プログラムは、改良された中間再配置された静的解析アラームのセットに対して最終的な再配置技術のセットを実行して、静的解析アラームのセットの最終的な再配置を得ることを含む。さらに、プログラムは最終的な再配置された静的解析アラームと、静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクを計算することを含み、最後に、プログラムは、最終的な再配置された静的解析アラームのセットを表示することを含む。
【００１０】
当然ながら、上記の一般的記載と下記の詳細な記載は、単に例示的かつ説明的なものであり、主張されているように発明を制限するものではない。
【００１１】
本開示に組み込まれ、その一部を構成する添付の図面は、例示的な実施形態を示し、説明と共に、開示された原理を説明するのに役立つ。
【図面の簡単な説明】
【００１２】
【図１】図１は、本発明のいくつかの実施形態による、複数の静的解析アラームを再配置するためのシステムの例示的な構成図を示す。
【図２】図２は、本発明のいくつかの実施形態による図１のシステムのメモリのモジュールに格納された様々なモジュールの機能構成図である。
【図３】図３は、本発明のいくつかの実施形態による、図１のシステムを用いて複数の静的解析アラームを再配置するための方法を示す例示的なフロー図である。
【図４】図４は、本開示のいくつかの実施形態による、中間再配置の改良の間に実行される計算のうちの１つを示す例示的なフロー図である。
【発明を実施するための形態】
【００１３】
例示的な実施形態は、添付の図面を参照して説明される。図において、参照番号の最も左の数字は、参照番号が最初に現れる図を識別する。都合のよい場合はいつでも、図面全体を通して同じ参照番号を使用して、同じまたは同様の部分を指す。開示された原理の例および特徴が本明細書に記載されているが、開示された実施形態の精神および範囲から逸脱することなく、修正、適応、および他の実施形態が可能である。以下の詳細な説明は例示としてのみ考慮され、真の範囲および精神は以下の特許請求の範囲によって示されることが意図される。
【００１４】
用語集−実施形態で使用される用語
本開示の文脈における表現「アプリケーションコード」または「アプリケーション」または「プログラム」または「プログラムコード」は、入力として与えられるソフトウェアコードを指す。
【００１５】
本開示の実施形態で使用される制御フローグラフ（ｃｏｎｔｒｏｌ  ｆｌｏｗ  ｇｒａｐｈ（ＣＦＧ））に関する表記が定義され、プログラムのＣＦＧは、（Ｎ、Ｅ）として表される有向グラフである。さらに、Ｎは（割り当ておよび制御条件のような）プログラムステートメントを表すノード（nodes）のセットであり、Ｅはエッジのセットであり、エッジ（Ｎ１，Ｎ２）は、いかなる介在ノードも伴わないＮ１∈ＮからＮ２∈Ｎへのプログラム制御の可能なフローを表す。
【００１６】
さらに、ノードｎ（node n）について、ｎの先行（predecessor）はｐｒｅｄ（ｎ）として表され、ｎの後続（successor）はｓｕｃｃ（ｎ）として表され、ｎの入口（entry）に対応するプログラムポイントはｅｎｔｒｙ（ｎ）として表され、ｎの出口（exit）に対応するプログラムポイントはｅｘｉｔ（ｎ）として表される。また、行ｍにおけるプログラムステートメントのノードはｎｍとして表される。
【００１７】
さらに、本開示の実施形態で使用される静的解析アラームに関する概念が定義され、ここで、αは静的解析モジュールによって生成され、再配置のために入力される静的解析アラームのセットを表し、Φｐは、セットαに属する静的解析アラームΦを表し、プログラムポイントｐで報告される。静的解析アラームΦのアラーム条件（alarm condition）は、静的解析アラームの手動分類中にユーザがチェックすべき条件を表し、ここで静的解析アラームΦは、アラーム条件が満たされたときの誤検知である。静的解析アラームΦのアラーム条件は、ｃｏｎｄ（Φ）で表される。さらに、数学的記号
【数１】
2020004363.tif 000003
は、例示的な実施形態の説明中に必要な場合にはいつでも、空のセットを表すために使用される。
【００１８】
アラーム条件ｃは、プログラムエントリからｐまでのすべてのパスがｃをそれのアラーム条件として静的解析アラームΦｑを含み、ポイントｑの後にｑからｐまでのどのパス上にもｃのオペランドの定義が続かない場合、プログラムポイントｐにおける「利用可能なアラーム条件」として表される。短縮表記「ａｖｃｏｎｄ」は、利用可能なアラーム条件（ａｖａｉｌａｂｌｅ  ａｌａｒｍ  ｃｏｎｄｉｔｉｏｎ）を表し、表記「ａｖｃｏｎｄｓ」は、利用可能なアラーム条件のセット（ａ  ｓｅｔ  ｏｆ  ａｖａｉｌａｂｌｅ  ａｌａｒｍ  ｃｏｎｄｉｔｉｏｎｓ）を表す。
【００１９】
アラーム条件ｃは、ｐからプログラム出口までのすべてのパスがｃをそれのアラーム条件として静的解析アラームΦｑを含み、ポイントｑの前にｐからｑまでのどのパス上にもｃのオペランドの定義がない場合、プログラムポイントｐにおいて「予測可能アラーム条件」として表される。短縮表記「ａｎｔｃｏｎｄ」は、予測可能なアラーム条件（ａｎｔｉｃｉｐａｂｌｅ  ａｌａｒｍ  ｃｏｎｄｉｔｉｏｎ）を表し、表記「ａｎｔｃｏｎｄｓ」は、予測可能なアラーム条件のセット（ａ  ｓｅｔ  ｏｆ  ａｎｔｉｃｉｐａｂｌｅ  ａｌａｒｍ  ｃｏｎｄｉｔｉｏｎｓ）を表す。
【００２０】
【数２】
2020004363.tif 000004
であり、ここでＣｐが再配置された静的アラーム条件である場合、アラームのセットＳのプログラムポイントｐへの「安全な再配置」（上方または下方への動き）が生じる：再配置されたアラーム（Ｃｐ）のアラーム条件が再配置されたＳにおける静的解析アラームのアラーム条件の共起（conjunction）と等価である場合、実行される再配置は、アラームのセットによって検出されるエラーに影響を及ぼさない。
【００２１】
次に、図面を参照し、より詳細には図１−図４を参照すると、類似の参照符号は、図面全体にわたって一貫して対応する特徴を示し、好ましい実施形態が示され、これらの実施形態は、以下の例示的なシステムおよび／または方法の文脈で説明される。
【００２２】
図１は、本発明の実施形態による複数の静的解析アラームを再配置するための装置１００の例示的な構成図を示す。提案されたシステムは、報告される静的解析アラームの数を減らすため、またはそれらの原因により近いそれら報告するため、または両方の目的のために、オリジナルの報告のプログラムポイントからアプリケーションコードの上または下に静的解析アラームのセットにおける静的解析アラームの各々を再配置する。さらに、システムによって実行される再配置技術は、静的解析アラームのセットの再配置が、それらによってカバーされないエラーに影響を及ぼさないことも保証する。再配置された静的解析アラームと、それの対応する静的解析アラームとの間のさらなるトレーサビリティリンクも維持される。
【００２３】
一実施形態では、システム１００は、１以上のプロセッサ１０４と、通信インターフェースまたは入出力（Ｉ／Ｏ）インターフェース１０６と、１以上のプロセッサ１０４に動作可能に結合された１以上のデータ記憶装置またはメモリ１０２とを含む。メモリ１０２は、１以上のモジュール１０８およびデータベース１１０を含む。ハードウェアプロセッサである１以上のプロセッサ１０４は、１以上のマイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、中央処理装置、状態機械、論理回路、および／または動作命令に基づいて信号を操作する任意のデバイスとして実装することができる。とりわけ、プロセッサは、メモリに格納されたコンピュータ可読命令をフェッチし、実行するように構成される。一実施形態では、システム１００は、ラップトップコンピュータ、ノートブック、ハンドヘルドデバイス、ワークステーション、メインフレームコンピュータ、サーバ、ネットワーククラウドなどの様々なコンピューティング・システムに実装することができる。
【００２４】
通信またはＩ／Ｏインターフェース１０６は、様々なソフトウェアおよびハードウェアインタフェース、例えば、ウェブインタフェース、グラフィカルユーザインタフェースなどを含むことができ、有線ネットワーク、例えば、ＬＡＮ、ケーブルなど、および無線ネットワーク、例えば、ＷＬＡＮ、セルラー、または衛星を含む、多種多様なネットワークＮ／Ｗおよびプロトコルタイプ内の複数の通信を容易にすることができる。一実施形態では、通信またはＩ／Ｏインターフェースがいくつかのデバイスを互いに、または別のサーバに接続するための１以上のポートを含むことができる。
【００２５】
メモリ１０２は、例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ）およびダイナミックランダムアクセスメモリ（ＤＲＡＭ）などの揮発性メモリ、および／または読み出し専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ、フラッシュメモリ、ハードディスク、光ディスク、および磁気テープなどの不揮発性メモリを含む、当技術分野で知られている任意のコンピュータ可読媒体を含むことができる。
【００２６】
図１に関して、図２は、本発明の実施形態による図１のシステム１００のメモリ１０２に格納された様々なモジュール１０８の構成図である。本開示の一実施形態では、システム１００は、静的解析モジュール２０２および再配置モジュール２０４を含む。再配置モジュール２０４は、中間再配置モジュール２０６、トレーサビリティリンクモジュール２０８、再配置改良モジュール２１０、および最終的な再配置モジュール２１２をさらに備え、前記モジュールは、ソフトウェアプログラムの論理的に自己完結した部分、自己完結したハードウェアコンポーネント、および／または実行されたときに本明細書で説明された上記方法を実行するハードウェアコンポーネントのそれぞれに埋め込まれたソフトウェアプログラムの論理的に自己完結した部分を有する自己完結したハードウェアコンポーネントのうちの少なくとも１つとして実装される。
【００２７】
本開示の一実施形態によれば、システム１００は、入力としてアプリケーションコードを受信するように構成された静的アナライザモジュール２０２を含む。受信したアプリケーションコードに対してさらに静的解析を実行して、静的解析アラームのセットを生成する。生成された静的解析アラームのセットは、アプリケーションコードにおけるエラーを検出する。静的アナライザモジュール２０２は、Ｆｒａｍａ−Ｃ、Ｃｐｐｃｈｅｃｋ、またはＣｌａｎｇなどの当技術分野で知られているツールとすることができる。
【００２８】
本開示の実施形態によれば、システム１００は、再配置モジュール２０４内に中間再配置モジュール２０６をさらに含む。中間再配置モジュール２０６は、静的解析アラームのセットの中間再配置を実行するように構成され、静的解析アラームのセットにおける各静的解析アラームは静的解析アラームのセットによって検出されるエラーに影響を与えることなく、アプリケーションコード内の最高のプログラムポイントで一時的に上方に再配置される。一実施形態では、以下に示すコードの以下の行は、アプリケーションコードＣＡを示す；
【数３】
2020004363.tif 000005
【００２９】
一実施形態では、静的アナライザモジュール２０２は、図示されたアプリケーションコードＣＡから６つの静的解析アラームを生成し、静的解析アラームは、２つの共通にチェックされたカテゴリのエラー、すなわち、境界外のアレイインデックス（array index out of bounds）（ＡＩＯＢ）およびゼロ除算（division by zero）（ＺＤ）に対応する。静的解析アラームは、２つのタイプのランタイムエラーが起こりそうな位置で報告される。さらなる表記ＡｎおよびＺｎは、それぞれ、ＡＩＯＢおよびＺＤエラーカテゴリに対応する行ｎにおける静的解析アラームを示すために使用される。
【００３０】
一実施形態では、中間再配置中に、ｐで報告されたすべての静的解析アラームΦは、ｐに達するすべての経路に沿った最高の吊り上げポイント（ｈｏｉｓｔｉｎｇ  ｐｏｉｎｔ）で安全に吊り上げられ（ｈｏｉｓｔｅｄ）（アプリケーションコード内で上方に再配置され）、静的解析アラームの吊り上げは、アプリケーションコード内で上方に静的解析アラームを再配置することを表す。経路上の最も高い吊り上げポイントは、ｃｏｎｄ（Φ）がｑｈにおける予測可能なアラーム条件であるが、同じ条件がｑｈの直前のいずれのプログラムポイントでももはや予測可能なアラーム条件ではないように、プログラムポイントｑｈとして識別される。したがって、中間再配置は、それの原因ポイント（cause point）により近い静的解析アラーム条件を吊り上げるだけでなく、複数の位置でアラーム条件を吊り上げることももたらす。例えば、図示のアプリケーションコードＣＡにおける静的解析アラームＡ１７およびＡ１９の静的解析アラーム条件ｉ≧０＆＆ｉ≦４は、２つの位置：ｅｘｉｔ（ｎ６）とｅｘｉｔ（ｎ８）で吊り上げられる。この中間再配置は、このポイントで吊り上げられた条件が常に真と評価されるので、ｅｘｉｔ（ｎ１３）における可能な第３の吊り上げを破棄する。
【００３１】
中間再配置技法は、静的解析、データフロー解析、抽象解釈などの１以上のコード解析技法を使用して、予測可能アラーム条件解析を実行し、予測可能アラーム条件解析結果を使用して、中間再配置を実行することを含む。予測可能アラーム条件解析中、予測可能アラーム条件（ａｎｔｉｃｉｐａｂｌｅ  ａｌａｒｍ  ｃｏｎｄｉｔｉｏｎｓ：ａｎｔｃｏｎｄｓ）（antconds）は、後方方向に解析を実行することによって静的解析アラームのセットαから計算される。ａｎｔｃｏｎｄｓの計算は、後方方向データフロー解析を参照することによって例示される。任意のプログラムポイントｐで計算されたａｎｔｃｏｎｄｓ  ｃ毎に、そのポイントにおけるｃの期待度（anticipability）に寄与する関連したオリジナルの静的解析アラームα’⊆α（ｒｅｌアラームとしても表される）も計算される。さらに、再配置された静的解析アラーム（再配置された条件としても表される）と、静的解析モジュール２０２によって最初に生成された静的解析アラームのセットαからのそれの対応する静的解析アラームとの間のトレーサビリティリンクを計算するために、ｒｅｌアラーム（rel-alarms）が使用される。一実施形態では、Ｐがすべてのプログラムポイントのセットを表せば、Ｖがプログラム内の変数のセットを表し、Ｃがプログラム変数、定数、および算術演算子および論理演算子を使用して形成することができるすべての条件のセットである。さらに、タプル（ｃ，Φ）は、ａｎｔｃｏｎｄｓ（ａｎｔｃｏｎｄ）ｃ∈Ｃを、それのｒｅｌアラームΦ∈αの１つと共に示すために使用される。したがって、プログラムポイントにおけるこの後方方向データフロー解析（ａｎｔｃｏｎｄｓ解析）によって計算される値は、Ｌｂ＝Ｃ×αのサブセットによって与えられる。
与えられた集合Ｓ⊆Ｌｂに対して、以下を定義することができる：
【数４】
2020004363.tif 000006
【００３２】
ａｎｔｃｏｎｄｓ解析は、全てのプログラムポイントｐ∈ＰにおいてＬｂフロー感応性（flow-sensitively）のサブセットを計算する。計算されたこれらの値のさらなる格子（lattice）は
【数５】
2020004363.tif 000007
であり、ここで、ＢはＬｂのパワーセットである。さらに、対応するｒｅｌアラームでａｎｔｃｏｎｄｓを計算するために、ミート（meet）
【数６】
2020004363.tif 000008
は次のように定義される：所与のＸ，Ｙ∈Ｂ、および
【数７】
2020004363.tif 000009
中間再配置のための手続き内設定におけるａｎｔｃｏｎｄｓ  解析のデータフロー方程式を以下に示す；
【数８】
2020004363.tif 000010
【００３３】
式（３）および式（２）におけるＡｎｔＩｎｎおよびＡｎｔＯｕｔｎは、それぞれ、ノードｎの入口（ｅｎｔｒｙ）および出口（ｅｘｉｔ）におけるａｎｔｃｏｎｄｓ解析によって計算されたａｎｔｃｏｎｄｓを表す。また、式（６）は、ｃｏｎｄ（Φ）を予測可能なアラーム条件として生成するための、ノードｎのステートメントに対して報告される静的解析アラームΦ毎の処理を示している。また、式（７）は、静的解析アラーム条件ｃｏｎｄ（Φ）がノードｎにおいて流れ込むａｎｔｃｏｎｄ  ｃｉｎによって暗示される場合に、ａｎｔｃｏｎｄとして生成されないことを示す。しかし、図示の場合、静的解析アラームΦは、ｃｉｎに関連付けられる。また、式（８）は、ノードｎにおけるａｎｔｃｏｎｄｓの計算を推移的に示す。その式は、（１）所与のノードｎのステートメント、および（２）事後条件（postcondition）Ｃｐに対する最も弱い前提条件（precondition）を返す、関数ｗｐｒｅｃｏｎｄ（ｎ，Ｃｐ）を仮定する。
【数９】
2020004363.tif 000011
は、｛＋、−、／、＊｝における算術演算子を示すために使用される。簡単にするために、ノードｎに関連付けられたステートメントのいくつかのケースのみが、式（８）に示されている。
【００３４】
静的解析アラームの中間再配置中、各静的解析アラームのアラーム条件は、アラームプログラムポイントに到達する各経路における最高のプログラムポイントで一時的に吊り上げられる。最高の吊り上げポイントは、その前にアラーム条件がもはや予測できなくなるポイントとして識別される。さらに、最も高い吊り上げポイントを識別する２つのケースについて以下に説明する；
ケース１：  ｍがｎの先行ノードであり、また分岐ノード（branching node）（すなわち、ｍのステートメントが制御条件である）である場合、ｅｎｔｒｙ（ｎ）において予測可能な静的解析アラーム条件ｃは、ｅｘｉｔ（ｍ）において予測できない。さらに、このケースは、ｃがノードｎを有するブランチ以外のｍから出てくるブランチのうちの１つを通して予測できないときに生じる。このケースでは、ａｎｔｃｏｎｄ  ｃは、ｅｎｔｒｙ（ｎ）で吊り上げられる。あるいは、ｅｎｔｒｙ（ｎ）で吊り上げられるａｎｔｃｏｎｄｓが以下の式（９）によって表される；
【数１０】
2020004363.tif 000012
図示のアプリケーションコードＣＡを考えると、Ａ１７（およびＡ１９）の条件ｉ≧０＆＆ｉ≦４は、ｅｎｔｒｙ（ｎ１３）では予測可能だが、ｅｘｉｔ（ｎ４）では予測可能ではなく、ｎ４はｎ１３の先行（predecessor）である。したがって、条件はｅｎｔｒｙ（ｎ１３）で吊り上げられる。
ケース２：（１）ノードｎがｃのオペランドの定義を含み、すなわち、ｃの予測可能性がｎによってキルされ（killed）、（２）ノードｎがｃから推移的に（transitively）にａｎｔｃｏｎｄを生成しない場合、ｅｘｉｔ（ｎ）において予測可能な条件ｃは、ｅｎｔｒｙ（ｎ）において予測可能ではない。
【００３５】
このケースでは、条件ｃは、ｅｘｉｔ（ｎ）で吊り上げられる。すなわち、ｅｘｉｔ（ｎ）で吊り上げるアラーム条件は、以下の式（１０）で表される；
【数１１】
2020004363.tif 000013
【００３６】
図示のアプリケーションコードＣＡを考えると、Ａ１７（およびＡ１９）のアラーム条件、ｉ≧０＆＆ｉ≦４は、ｅｘｉｔ  ｎ６では予測可能だが、ｅｎｔｒｙ  ｎ６では予測可能ではなく、ｎ６は、推移的に予測可能なアラーム条件を生成しない。したがって、条件は、ｅｘｉｔ（ｎ６）で吊り上げられる。同様に、この条件もｅｘｉｔ（ｎ８）で吊り上げられる。さらに、中間再配置の間、吊り上げが冗長であると判明した場合、それは破棄される。非冗長な吊り上げは以下の式（１１）および（１２）を用いて定義され、ここで、ａｌｗａｙｓＴｒｕｅ（ｃ，ｐ）は、条件ｃが常に以下に示すようにｐにおいて保持される場合にのみ真である；
【数１２】
2020004363.tif 000014
【００３７】
図示のアプリケーションコードＣＡを考えると、冗長な吊り上げの例として、ｅｎｔｒｙ（ｎ１３）におけるＡ１７およびＡ１９のアラーム条件の吊り上げは、冗長であり、ここで、吊り上げられたアラーム条件ｉ≧０＆＆ｉ≦４が、行２においてｉに値０が割り当てられているため、常に吊り上げ位置において保持される。
【００３８】
さらに、すべてのノードの入口（ｅｎｔｒｙ）および出口（ｅｘｉｔ）で吊り上げている静的解析アラームの中間再配置は、式（１１）および（１２）を使用してすべてのノードｎ∈Ｎを処理することによって実行される。中間再配置の例として図示のアプリケーションコードＣＡを考える；
（ｉ）  ｉ≧０＆＆ｉ≦４は、ｅｘｉｔ（ｎ６）およびｅｘｉｔ（ｎ８）において、Ａ１７およびＡ１９の両方をそれのｒｅｌアラームとして吊り上げられる。
（ｉｉ）ｎ≠０は、ｅｘｉｔ（ｎ２６）（それぞれ、ｅｎｔｒｙ（ｎ２９））において、Ｚ２９（それぞれ、Ｚ２９）をそれのｒｅｌアラームとして吊り上げられる。
（ｉｉｉ）  ｊ≧０  ＆＆  ｊ≦４は、ｅｘｉｔ（ｎ３４）において、Ａ３７をそれのｒｅｌアラームとして吊り上げられる。さらに、行３８でのインクリメント演算および推移により、ｊ≧−１＆＆ｊ≦３は、また、ｅｘｉｔ（ｎ３４）においてＡ３９をそれのｒｅｌアラームとして吊り上げられる。ケース（ｉ）および（ｉｉ）の各々において吊り上げられた２つの条件は、ｉｆステートメントの異なるブランチに属し、リファインメントステップ（refinement step）中にマージ（シンキング（sinking））する候補である。ケース（ｉｉｉ）では、同じポイントに再配置された２つの条件がリファインメントステップ中にそれらの共起を通じてマージされる。
【００３９】
本開示の実施形態によれば、システム１００は、再配置モジュール２０４内にトレーサビリティリンクモジュール２０８をさらに備える。トレーサビリティリンクモジュール２０８は、中間再配置、中間再配置および最終的な再配置の改良中などの複数のレベルでトレーサビリティリンクを計算するように構成される。
【００４０】
さらに、トレーサビリティリンクモジュール２０８は、中間再配置された静的解析アラームと、静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクを計算するように構成され、中間再配置された静的解析アラームと静的解析アラームのセットにおける静的解析アラームとの間のトレーサビリティリンクは、予測可能なアラーム条件とそれらに対応するｒｅｌアラーム（関連するオリジナルの静的解析アラーム）とに基づいて計算される。さらに、Ｓ⊆Ｌｂのａｎｔｃｏｎｄｓ  ｃごとに、対応するｒｅｌアラームは、ａｎｔｃｏｎｄｓ  ｃのｒｅｌアラームを返すために、ｒｅｌＡｌａｒｍｓ（ｃ，Ｓ）＝｛Φ｜＜ｃ，Φ＞∈Ｓ｝として表される。トレーサビリティリンクは、Ｈｏｉｓｔｅｎｔｒｙ（ｎ）（それぞれ、Ｈｏｉｓｔｅｘｉｔ（ｎ））内の吊り上げられた条件ｃから、ｒｅｌＡｌａｒｍｓ（ｃ，ＡｎｔＩｎｎ）（それぞれ、ｒｅｌＡｌａｒｍｓ（ｃ，ＡｎｔＯｕｔｎ））によって与えられるそれの対応するｒｅｌアラームまで生成される。
【００４１】
本開示の実施形態によれば、システム１００は、再配置モジュール２０４内に再配置改良モジュール２１０をさらに含む。再配置改良モジュール２１０は、中間再配置の改良を実行するように構成される。中間再配置の改良中に、中間再配置された静的解析アラームは、静的解析、データフロー解析、抽象的解釈などの１以上のコード解析技術を使用して、中間再配置された静的解析アラームおよび静的解析アラームへのトレーサビリティリンクに基づいて、利用可能なアラーム条件をそれらに関連するオリジナルの静的解析アラームで計算することに基づいて、アプリケーションコードＣＡにおける最高のポイントで後でマージされるか、またはマージされない。
【００４２】
さらに、１以上の技術に基づいて計算された利用可能なアラーム条件（ａｖａｉｌａｂｌｅ  ａｌａｒｍ  ｃｏｎｄｉｔｉｏｎｓ：ａｖｃｏｎｄｓ）は、中間再配置を改良し、さらに静的解析アラームのセットの最終的な再配置を得るために使用される。図示されたアプリケーションコードＣＡを考慮すると、ここで、ｃは、中間再配置において吊り上げられた条件からプログラムポイントｐにおいて計算されたａｖｃｏｎｄであり、ｐｒは、ｃに関連する単一のプログラムポイントである。さらに、中間再配置の改良中に、ｃに関連する位置ｐｒは、ｃが利用可能であり、それのノードがｐのノードを支配する最高のプログラムポイントとして計算される。さらに、プログラムポイントｐｒは、ｃの再配置位置と呼ばれる。さらに、ａｖｃｏｎｄｓは、推移的に計算され、ポイントｐで計算されたａｖｃｏｎｄ  ｃはｐｒで利用可能な条件ｃｒの変換バージョンであることができ、ｃは、ｐｒからｐへの経路に沿ってｃｒから推移的に計算される。さらに、ｐｒにおける条件ｃｒは、ｃの再配置条件と呼ばれる。したがって、ａｖｃｏｎｄｓ計算における推移性により、再配置位置ｐｒおよび再配置条件ｃｒは、任意のプログラムポイントで識別されたａｖｃｏｎｄごとに計算される。さらに、値ｃｒおよびｐｒは、最終的な再配置を実施するために後に使用される。さらに、任意のポイントで計算されたａｖｃｏｎｄは、正確に１つの再配置位置ｐｒおよび１つの再配置条件ｃｒを有する。さらに、ａｖｃｏｎｄｓが推移的に計算されない場合（このケースでは、ｃｒはｃと同じであるため）、ａｖｃｏｎｄ  ｃに対する再配置条件ｃｒを計算する必要はない。さらに、ａｖｃｏｎｄの関連する値ｃｒおよびｐｒは、それらの再配置のためのオリジナルの静的解析アラーム入力に依存するのではなく、中間再配置における吊り上げられた条件および位置に依存して計算される。ａｖｃｏｎｄｓとそれらに関連する値ｃｒおよびｐｒの計算を、順方向データフロー解析（ａｖｃｏｎｄｓ解析）を用いて示す。Ｐがすべてのプログラムポイントの集合であり、Ｃがプログラム変数、定数、および算術演算子および論理演算子を使用して形成できるすべての条件の集合である例を考察する。それの関連する再配置条件ｃｒ∈ｃおよび位置ｐｒ∈Ｐに対するａｖｃｏｎｄ  ｃ  ∈ｃは、関数ｆ：Ｃ→Ｃ×Ｐを用いてマッピングされる。さらに、関連する値を有する条件ｃは、タプル（ｃ，ｃｒ，ｐｒ）として表される。したがって、プログラムポイントｐにおける順方向解析（ａｖｃｏｎｄｓ分析）はＬｆのサブセットを計算する。
【数１３】
2020004363.tif 000015
さらに、ａｎｔｃｏｎｄｓ解析が、すべてのプログラムポイントｐ∈Ｐにおいてフローに敏感にＬｆのサブセットを計算すると、これらの値の格子（lattice）は、
【数１４】
2020004363.tif 000016
によって示される。
さらに、
【数１５】
2020004363.tif 000017
は、ジョインノード（join node）ｎの入口（ｅｎｔｒｙ）におけるデータフロー値のミートを示すために用いられる。ミート動作は、以下に示される。
【数１６】
2020004363.tif 000018
ミート（ｍｅｅｔ）動作は、冪等（ｉｄｅｍｐｏｔｅｎｔ）、可換（ｃｏｍｍｕｔａｔｉｖｅ）、および連想（ａｓｓｏｃｉａｔｉｖｅ）である。式を簡単にするために、ミート動作に対応するジョインノードｎは、ミートが実行されるときに既知であると仮定する。ミートポイントエントリ（ｎ）において、ミートポイントにおける２つの異なる経路を介して流入するｃの再配置位置が異なる場合にのみ、上記のミート動作は、ａｖｃｏｎｄ  ｃの再配置条件および位置をそれぞれｃおよびエントリ（ｎ）に更新する。他のケースでは、ｃに関連する値は変化しないままである。中間再配置の改良のための手続き内設定でａｖｃｏｎｄを推移的に計算するａｖｃｏｎｄｓ解析のデータフロー方程式を以下に示す。式（１４）および（１５）のＡｖＩｎｎおよびＡｖＯｕｔｎは、それぞれ、ノードｎの入口および出口でそれらに関連付けられた値を用いて計算されたａｖｃｏｎｄｓを表す；
【数１７】
2020004363.tif 000019
【００４３】
さらに、図４は、ＡｖＯｕｔｎの計算を示す。さらに、式（１６）および（１７）は、中間再配置において吊り上げられたすべての条件についてａｖｃｏｎｄが生成されることを示す。さらに、式（１７）は、ＡｖＩｎｎ内のいくつかの他のａｖｃｏｎｄがｃを暗示する場合、ｃ∈Ｈｏｉｓｔｅｎｔｒｙ（ｎ）に対するａｖｃｏｎｄを生成しない。しかし、中間再配置の間、ａｎｔｃｏｎｄｓは、ノードがそれらの条件の予測可能性を停止するときにのみ、ノードの出口で吊り上げられるので、そのような含意処理（implication handling）は式（１６）では必要とされない。さらに、式（１９）は、ａｖｃｏｎｄｓの推移計算を記述し、関数ｐｏｓｔｃｏｎｄ（ｎ，ｃｐ）は、所与の前提条件ｃｐと、所与のノードｎのステートメントに対する最も強い事後条件とを返す。さらに、前記式は、利用可能なアラーム条件のいずれかの再配置条件および位置を更新しない。したがって、ａｖｃｏｎｄ  ｃの関連する値は、ｃが生成されたとき（式（１６）または式（１７））、またはミート動作が実行されたときにのみ更新される。
【００４４】
さらに、トレーサビリティリンクモジュール２０８は、改良された中間再配置された静的解析アラームと、静的解析アラームのセットからのそれの対応する静的解析アラームとの間のトレーサビリティリンクを計算するように構成される。さらに、改良された中間再配置された静的解析アラームと、静的解析アラームのセットにおける静的解析アラームとの間のトレーサビリティリンクは、利用可能なアラーム条件およびそれらに関連するオリジナルの静的解析アラームに基づいて計算される。順方向トレーサビリティリンク解析は中間再配置の改良中に実行され、Ｃ×αのサブセットはすべてのプログラムポイントにおいてフローに敏感に計算され、順方向トレーサビリティリンク解析のミート動作は、式（１）によって示されるミート動作と同様である。
【００４５】
中間再配置の改良の間に実行される順方向トレーサビリティリンク解析のデータフロー方程式を以下に示す：
【数１８】
2020004363.tif 000020
中間再配置の改良の間に実行される順方向トレーサビリティリンク解析の上記データフロー方程式では、ｆｗｄＩｎｎおよびｆｗｄＯｕｔｎはそれぞれ、ノードｎの入口および出口で計算されたａｖｃｏｎｄを表す。いずれかのプログラムポイントにおける順方向トレーサビリティリンク解析のｆｗｄＩｎｎおよびｆｗｄＯｕｔｎによってそれぞれ表されるａｖｃｏｎｄｓは、中間再配置の改良の間に実行されるａｖｃｏｎｄｓ解析の式（１４）および（１５）によって同じプログラムポイントにおいて計算されるａｖｃｏｎｄｓと同じままである。
【００４６】
改良された中間再配置の計算：
中間再配置の改良のために利用されるａｖｃｏｎｄｓが識別され、識別されたａｖｃｏｎｄ  ｃごとに、ｃの再配置条件ｃｒがｃの再配置位置ｐｒに再配置され、再配置された条件ｃｒからｃの各ｒｅｌアラームにトレーサビリティリンクが作成される。利用されるａｖｃｏｎｄｓは、アプリケーションコードＣＡ内のすべてのノードｎを、式（２１）および式（２２）を使用して処理することによって識別され、式（２１）および（式２２）はそれぞれ、ノードｎの入口および出口の直後にもはや利用できないａｖｃｏｎｄｓを以下に示すように計算する；
【数１９】
2020004363.tif 000021
【００４７】
これらの上記の方程式は、中間再配置における２つのケースと同様の行上にある。２つの式による各ノードの処理は、以下のことを保証する：（１）プログラムポイントｐで生成された各ａｖｃｏｎｄ  ｃは、ｐで始まり、いくつかの他のａｖｃｏｎｄに推移的に帰着する場合を除いて、プログラム出口で終わるすべてのパスに沿って再配置するために利用され、そして（２）そのようなパスに沿った利用は１回だけであり、ｃが利用可能なパス上の最後のプログラムポイントで発生する。図示のアプリケーションコードＣＡにおけるｎ≠０のような数個のａｖｃｏｎｄｓがプログラムの終了ポイントに到達することができるが、任意のポイントに対して方程式（２１）および（２２）のいずれによっても計算されないので、提案された技術は再配置のためにすべての条件ｃ  ∈  ｃｏｎｄｓＩｎ（ｅｎｔｒｙ（Ｅｎｄ））を利用する。中間再配置の改良の計算は、以下の計算ステップを用いて説明される：
【数２０】
2020004363.tif 000022
【００４８】
本開示の実施形態によれば、システム１００は、再配置モジュール２０４内に最終的な再配置モジュール２１２をさらに含む。最終的な再配置モジュール２１２は、改良された中間再配置された静的解析アラームのセットに対して最終的な再配置技術のセットを実行して、静的解析アラームのセットの最終的な再配置を得るように構成される。さらに、最終的な再配置技術のセットは、最終的な再配置された静的解析アラームを得るための改良された中間再配置された静的解析アラームの単純化、最終的な再配置された静的解析アラームからの冗長性の除去、および最終的な再配置された静的解析アラームからの冗長性の除去後に静的解析アラームの総数を増加させる再配置ケースを識別することによるフォールバックの実行を含む。ａｖｃｏｎｄｓを使用する最終的な再配置は、以下に示すようないくつかのステップで実行され、各ステップは、以下に説明するような最終的な再配置技術のセットからの技術の各々を示す。
【００４９】
最終的な再配置ステップ１（改良された中間再配置された条件の簡素化）：
さらに、改良された中間再配置された条件を単純化する間、すべてのプログラムポイントは、そのポイントで再配置される条件を単純化するために処理される。単純化は、同じ変数によって関連付けられる再配置された条件の共起で実行される。トレーサビリティリンクモジュール２０８による単純化の後に生じる条件に対するトレーサビリティリンクは、単純化された条件のトレーサビリティリンクをマージすることによって得られる。プログラムエンドポイント（行４０）におけるａｖｃｏｎｄｓを使用し、図示されたアプリケーションコードＣＡを使用する例を考えると、ステップ１は、ｅｘｉｔ（ｎ３４）において、ｊ≧０＆＆ｊ≦４およびｊ≧−１＆＆ｊ≦３を、Ａ３７およびＡ３９へのそれぞれのそれらのリンクで再配置する。単純化ステップの後、これらの２つの条件は、ｊ≧０＆＆ｊ≦３を、Ａ３７およびＡ３９の両方へのそれのトレーサビリティリンクでもたらす。
【００５０】
最終的な再配置ステップ２（冗長性除去のための後処理）：
単純化ステップの後に生じる再配置は、いくらかの冗長性を有し得る。以下に示すアプリケーションコードＣＢの例を考える；
【数２１】
2020004363.tif 000023
【００５１】
３つのＡＩＯＢアラームを有するアプリケーションコードＣＢは、７行目、８行目、および１４行目において報告される。単純化ステップ１の後に再配置される条件は、ｅｎｔｒｙ（ｎ６）、ｅｘｉｔ（ｎ１２）、およびｅｎｔｒｙ（ｎ１８）である。これらの３つの再配置された条件は、それぞれ、５、１３、および１７行目のアサーションとして示される。前記アプリケーションコードＣＢにおいて、実行される再配置は、全体のアラームカウントを減少させない。さらに、ｅｎｔｒｙ（ｎ１８）（行１７）に再配置される条件は、２つの他の再配置される条件の存在下で冗長である：他の２つの条件は、この条件に対する支配的なアラームとして作用する。そのような冗長性を排除することによって再配置を改善するために、当技術分野で知られている静的解析アラームグループ化技術が単純化ステップ１の後に結果として生じる単純化された再配置された条件に適用され、さらに、グループ化技術によってフォロワ（follower）として識別される再配置された条件が破棄される。さらに、この最終的な再配置ステップ２を３つの再配置された条件に適用することによって、冗長な再配置された条件を破棄し、アラーム全体のカウントを１つ減らす。
【００５２】
最終的な再配置ステップ３（フォールバックのための後処理）
ステップ２の後に取得された再配置された静的解析条件（静的解析アラーム）は、２つの再配置目標が互いに影響し合うため（特定のシナリオで以下に示されるように）、またはａｎｔｃｏｎｄｓおよびａｖｃｏｎｄｓの推移的な計算のため、静的解析アラームの数を増加させ得る。以下に示すアプリケーションコードＣＣの例を考える；
【数２２】
2020004363.tif 000024
【００５３】
この図示のアプリケーションコードの例ＣＣは、２つの再配置目標の互いに対する影響を示すように作成される。この例は、１つのアラームＡ１７を有する。このアラームの条件、ｉ≧０＆＆ｉ≦４，はｅｎｔｒｙ（ｎ１５）においてａｖｃｏｎｄではない。さらに、ｅｎｔｒｙ（ｎ１３）で吊り上げられた条件は、中間再配置の間に式（１１）を介して破棄され、この破棄のため、条件はｅｎｔｒｙ（ｎ１３）で、したがってｅｎｔｒｙ（ｎ１５）でａｖｃｏｎｄされない。したがって、Ａ１７の再配置は、ｅｘｉｔ（ｎ６）およびｅｘｉｔ（ｎ８）で再配置される２つの条件をもたらす。冗長な条件は、それらの原因ポイントにより近い静的解析アラームを報告するために、中間再配置の間に破棄される。しかしながら、図示の例では、破棄により最終的な静的解析アラームのカウントが増加する。この破棄がない場合、条件は、最終的な静的解析アラームのカウントを増加させることなく、ｅｎｔｒｙ（ｎ１５）でのみ再配置される。これは２つの再配置目標が互いに影響し合うこと、すなわち、それらの原因により近いアラームを報告することが、アラームの数を増加させ得ることを示す。後処理ステップ３では、アラームの数が増加する状況が識別され、これらの状況における再配置が戻される（reverted）（フォールバックアプローチ（ｆａｌｌ  ｂａｃｋ  ａｐｐｒｏａｃｈ））、すなわち、再配置されたもの代わりにオリジナルの静的解析アラームが報告される。
【００５４】
最終的な再配置例：
アプリケーションコードＣＡにおける静的解析アラームに最終的な再配置技術のセットを適用することは、以下の最終的な再配置をもたらす。この例では、後処理ステップ２および３が単純化ステップ１の後に得られる再配置を変更（改善）しない。
（１）  ｉ≧０＆＆ｉ≦４は、Ａ１７およびＡ１９へのそれのトレーサビリティリンクでｅｎｔｒｙ（ｎ１１）に再配置され、再配置は、ｅｘｉｔ（ｎ１１）に適用されるとき、式２２によって識別される。
（２）  ｎ≠０は、Ｚ＿２７およびＺ＿２９へのそれのトレーサビリティリンクでｅｎｔｒｙ（ｎ３２）に再配置され、再配置はｅｎｔｒｙ（Ｅｎｄ）が特別なケースとして処理されるときに識別される。
（３）  ｊ≧０＆＆ｊ≦３は、Ａ３７およびＡ３７へのそれのトレーサビリティリンクでｅｘｉｔ（ｎ３４）に再配置される。
【００５５】
さらに、トレーサビリティリンクモジュール２０８は、最終的に再配置された静的解析アラームと、静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクを計算するようにも構成される。さらに、最終的な再配置された静的解析アラームと静的解析アラームのセットにおける静的解析アラームとの間のトレーサビリティリンクは、改良された中間再配置されたアラームと静的解析アラームのセットにおける静的解析アラームとの間で計算されたトレーサビリティリンクに基づいて計算される。さらに、最終的に再配置された静的解析アラームのセットは、静的解析アラームのセットからの静的解析アラームの報告および手動検査からの冗長性を低減するために、静的解析アラームのセットの代わりに通信またはＩ／Ｏ１０６に表示される。さらに、最終的に再配置された静的解析アラームとそれらに対応するオリジナルの静的解析アラームとの間のトレーサビリティリンクはユーザが同じものを要求する場合にのみ、通信またはＩ／Ｏインターフェース１０６に表示される。
【００５６】
図１−２に関して、図３は、装置１００を用いて複数の静的解析アラームを再配置するための方法を示す例示的なフロー図である。次に、本開示の方法のステップを、図１−２に示すシステム１００およびモジュール２０２−２１２のコンポーネント、ならびに流れ図を参照して説明する。ステップ３０２において、アプリケーションコードが静的アナライザモジュール２０２への入力として提供される。次のステップ３０４において、静的解析モジュール２０２によって受信されたアプリケーションコードに対して静的解析が実行され、静的解析アラームのセットが生成され、静的解析アラームのセットは、アプリケーションコードにおけるエラーを検出する。
【００５７】
次のステップ３０６では静的解析アラームのセットの中間再配置が中間再配置モジュール２０６で実行され、静的解析アラームのセットにおける各静的解析アラームは静的解析アラームのセットによって検出されるエラーに影響を与えることなく、アプリケーションコードにおける最高のプログラムポイントで一時的に上方に再配置される。さらに、静的解析アラームは、静的解析、データフロー解析、抽象的解釈などの１以上のコード解析技術を使用して、静的解析アラームのセットからのそれらに関連するオリジナルの静的解析アラームで予測可能なアラーム条件を計算することによって、それの生成のために原因ポイントにより近い上方に再配置される。次のステップ３０８では、トレーサビリティリンクモジュール２０８内で、中間再配置された静的解析アラームと静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクが計算される。さらに、中間再配置された静的解析アラームと静的解析アラームのセットにおける静的解析アラームとの間のトレーサビリティリンクは、予測可能なアラーム条件およびそれらに関連するオリジナルの静的解析アラームに基づいて計算される。
【００５８】
次のステップ３１０において、中間再配置の改良は、改良モジュール２１０を再配置することによって実行される。さらに、中間再配置の改良中に、中間再配置された静的解析アラームは、静的解析、データフロー解析、抽象的解釈などの１以上のコード解析技術を使用して、中間再配置された静的解析アラームおよび静的解析アラームへのそれらのトレーサビリティリンクに基づいて、利用可能なアラーム条件をそれらに関連するオリジナルの静的解析アラームで計算することに基づいて、アプリケーションコードにおける最高のポイントで後でマージされるか、またはマージされない。
【００５９】
次のステップ３１２において、トレーサビリティリンクはトレーサビリティリンクモジュール２０８内で、改良された中間再配置された静的解析アラームと静的解析アラームのセットからのそれらに対応する静的解析アラームとの間で計算される。さらに、改良された中間再配置された静的解析アラームとそれらに対応する静的解析アラームとの間のトレーサビリティリンクが、利用可能なアラーム条件とそれらに関連するオリジナルの静的解析アラームとに基づいて計算される。
【００６０】
次のステップ３１４において、最終的な再配置モジュール２１２内で、静的解析アラームのセットの最終的な再配置を得るために、最終的な再配置技術のセットが、改良された中間再配置された静的解析アラームのセットに対して実行される。さらに、最終的な再配置技術のセットは、最終的な再配置された静的解析アラームを得るための改良された中間再配置された静的解析アラームの単純化、最終的な再配置された静的解析アラームからの冗長性の除去、および最終的な再配置された静的解析アラームからの冗長性の除去後に静的解析アラームの総数を増加させる再配置ケースを識別することによるフォールバックの実行を含む。
【００６１】
次のステップ３１６において、トレーサビリティリンクモジュール２０８内で、最終的な再配置された静的解析アラームと静的解析アラームのセットからのそれらに対応する静的解析アラームとの間のトレーサビリティリンクが計算される。さらに、最終的な再配置された静的解析アラームと静的解析アラームのセットにおける静的解析アラームとの間のトレーサビリティリンクは、改良された中間再配置されたアラームと静的解析アラームのセットにおける静的解析アラームとの間で計算されたトレーサビリティリンクに基づいて計算される。次のステップ３１８において、最終的な再配置された静的解析アラームのセットが通信インターフェース１０６に表示される。さらに、最終的に再配置された静的解析アラームと、静的解析アラームのセットにおける静的解析アラームとの間のトレーサビリティリンクも、ユーザからの要求に応じて表示される。さらに、再配置された技法は、静的解析アラームのセットの報告および手動検査からの冗長性の低減をもたらす。
【００６２】
本開示の実施形態によれば、複数の静的解析アラームを再配置するためのシステム１００は静的解析アラームの数を減らすためのアラーム再配置技術の実用性および有効性を決定するために、以下の実施例の助けを借りて説明することもできる。
【００６３】
いくつかの実験が行われ、１つの実験セットアップは、市販の静的解析ツール（ＣＳＡＴ：ｓｔａｔｉｃ  ａｎａｌｙｓｉｓ  ｔｏｏｌ）の解析フレームワークの上に静的解析アラーム（ｓｔａｔｉｃ  ａｎａｌｙｓｉｓ  ａｌａｒｍｓ）の再配置（ｒｅｐｏｓｉｔｉｏｎｉｎｇ）を実施した。解析フレームワークはＣプログラムの解析をサポートし、関数サマリを使用してデータフロー解析を実施することを可能にする。ａｎｔｃｏｎｄｓ  解析とａｖｃｏｎｄｓ解析の両方のさらに限定されたバージョンは、ボトムアップ順序でのみデータフロー解析を解くことによって、機能間設定で実施された。さらに、ａｎｔｃｏｎｄｓ解析では、関数エントリで予測可能な条件は、関数が単一の場所から呼び出された場合にのみ、それの呼び出し側に伝播された。さらに、ａｖｃｏｎｄｓ解析では、関数の呼び出し（call invocation）に関係なく、関数出口で利用可能なすべての条件が呼び出し側に伝播された。このインプリメンテーションは静的解析アラームを複数のロケーションに再配置することをもたらし、上記で議論される特定のケースについて、フォールバックアプローチが実施され、これは、以下のセクションで詳細に説明される。
【００６４】
評価の目的でユースケースの例を考えると、１６個のオープンソースアプリケーションと４個の産業アプリケーションを含む２０個のアプリケーションを備える表１が以下に示される。
【表１】
2020004363.tif 000025
【００６５】
アプリケーションは、ｉ７  ２．５ＧＨｚプロセッサおよび１６ＧＢ  ＲＡＭを有するコンピュータ上の市販の静的解析ツールを使用して解析される。オープンソースアプリケーションは、当技術分野で知られているグループ化技法を評価するために使用されるベンチマークから選択される。さらに、通常チェックされる４つのランタイムエラーのカテゴリに対応する静的解析アラーム：ゼロ除算（ＺＤ）、境界外の配列インデックス（ＡＩＯＢ）、整数オーバーフロー／アンダーフロー（ＯＦＵＦ）、および初期化されていない変数（ＵＩＶ）が選択され、選択された静的解析アラームは、最新の静的解析アラームグループ化技術を使用する後処理の後であった。さらに、支配的な静的解析アラームのみが、再配置への入力として使用される。それらのアラーム条件内に関数呼び出しを有するさらなる静的解析アラームは、グループ化および再配置から除外される。さらに、表１は、再配置の前後のアラームの数と、列＃Ｉｎｐｕｔ、＃Ｏｕｔｐｕｔ、および％Ｒｅｄｕｃｔｉｏｎにそれぞれ表される、減少したアラームのパーセンテージとの結果を示す。減少したアラームのパーセンテージは０〜２０％の範囲であり、表１に示すように、中間の低減は７．２５％、平均低減は６．４７％。さらに、オープンソースアプリケーション上の平均低減は、産業アプリケーション上の１３．０７％と比較して、５．４１％である。さらに、表１は、再配置された条件の後処理（最終的な再配置技術のステップ２および３）からもたらされる改善も詳述する。表１の更なる列Ｒｅｄｕｎｄａｎｔ  ｃｏｎｄｓは最終的な再配置技術のステップ２におけるグループ化技術によって、フォロワとして識別された再配置された条件の数、すなわち、冗長な条件を提示する。さらに、Ｒｅｄｕｎｄａｎｔ  ｃｏｎｄｓの列は、最終的な再配置技術のステップ１によって計算された再配置された条件の約１％がステップ２によって冗長であると識別されることを示す。さらに、表１の列ｆａｌｌｂａｃｋはフォールバックが適用されたインスタンスの数２３を示し、フォールバックが実際にはめったに適用されないことを示す。これらの２３のフォールバックインスタンスのさらなる手動解析は、（ａ）３つのインスタンスがａｖｃｏｎｄｓ／ａｎｔｃｏｎｄｓ計算のために我々が有していた機能間インプリメンテーション（interfunctional implementation）の種類によるものであったこと、（ｂ）１８のインスタンスが互いに影響を与える２つの再配置目標によるものであったこと、および（ｃ）他の２つのケースが条件を推移的に計算することによるものであったことを示した。さらに、表１の結果は、異なる関数において最初に報告された静的解析アラームのマージは頻繁ではないが（列ｍｅｒｇｉｎｇに示される結果）、関数境界を横切って静的解析アラームを再配置することは非常に一般的であることを示す（列Ｒｅｐｏｓに示される結果）。この解析から、後方への再配置を停止する理由は、再配置されたアラームの約６％について、後方への再配置が、関数が複数の位置から呼び出されたときに関数の入口で停止したことを示していることが分かる（列Ｆｕｎｃ入力に示される結果）。後方再配置を停止する別の理由は、再配置されたアラームの���５９％について、後方再配置が分岐ノードによって停止し、再配置されたアラームがｉｆステートメントの一方の分岐（列Ｂｒａｎｃｈｅｓに示される結果）にのみ現れ、最後に他方の再配置されたアラーム（３５％）について、後方再配置がアラーム条件に現れる変数の定義（列Ｄｅｆｉｎｉｔｉｏｎｓに示される結果）によって停止したことであると理解することができる。
【００６６】
したがって、複数の静的解析アラームを再配置するためのシステムおよび方法が提供される。提案された再配置技術は、報告された静的解析アラームの数を減らすため、またはそれらの原因により近いそれらを報告するため、または両方の目的のために、それらのオリジナルの報告のプログラムポイントからアプリケーションコードの上または下に静的解析アラームのセットを再配置する。さらに、再配置された技術はまた、静的解析アラームの再配置が、それらによってカバーされないエラーに影響を与えることなく行われることを保証する。
【００６７】
本明細書は当業者が実施形態を実施および使用できるように、本明細書の主題を記載する。主題の実施形態の範囲は、特許請求の範囲によって定義され、当業者が思いつく他の修正を含み得る。そのような他の変更は、特許請求の範囲の文字通りの言語と異ならない類似の要素を有する場合、または特許請求の範囲の文字通りの言語と実質的な違いがない等価な要素を含む場合、特許請求の範囲内にあることが意図される。
【００６８】
当然のことながら、保護の範囲はそのようなプログラムに、および加えてメッセージを内部に有するコンピュータ可読手段に、拡張され、そのようなコンピュータ可読記憶手段はプログラムがサーバまたはモバイルデバイス、または任意の適切なプログラマブルデバイス上で動作するときに、方法の１以上のステップを実装するためのプログラムコード手段を含む。ハードウェアデバイスは例えば、サーバまたはパーソナルコンピュータなどの任意の種類のコンピュータ、あるいはそれらの任意の組合せを含む、プログラムすることができる任意の種類のデバイスとすることができる。デバイスはまた、例えば、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのハードウェア手段、またはハードウェア手段とソフトウェア手段の組み合わせ、例えば、ＡＳＩＣおよびＦＰＧＡ、または少なくとも１つのマイクロプロセッサおよびソフトウェアモジュールが内部に配置された少なくとも１つのメモリとすることができる手段を含むことができる。したがって、手段は、ハードウェア手段とソフトウェア手段の両方を含むことができる。本明細書で説明する方法の実施形態は、ハードウェアおよびソフトウェアで実施することができる。装置はまた、ソフトウェア手段を含んでもよい。あるいは、実施形態が例えば、複数のＣＰＵを使用して、異なるハードウェアデバイス上で実装されてもよい。
【００６９】
本明細書の実施形態は、ハードウェア要素およびソフトウェア要素を含むことができる。ソフトウェアで実施される実施形態は、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むが、これらに限定されない。本明細書で説明される様々なモジュールによって実行される機能は、他のモジュールまたは他のモジュールの組み合わせにおいて実装され得る。この説明の目的のために、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによって、またはそれに関連して使用するためのプログラムを備え、格納し、通信し、伝搬し、または移送することができる任意の装置であり得る。
【００７０】
図示のステップは、図示の例示的な実施形態を説明するために示されており、進行中の技術開発は、特定の機能が実行される方法を変えるであろうことが予期されるべきである。これらの実施例は、例示の目的でここに提示されるものであり、限定するものではない。さらに、機能的構築ブロックの境界は、説明の便宜上、本明細書において任意に定義されている。特定の機能及びそれらの関係が適切に実行される限り、代替の境界を定義することができる。本明細書中に含まれる教示に基づいて、代替物（本明細書中に記載されるもの等価物、拡張物、変形物、逸脱物（deviations）などを含む）は、当業者に明らかである。そのような代替物は、開示された実施形態の範囲および精神内に入る。また、「備える（comprising）」、「有する（having）」、「含む（containing）」、及び「含む（including）」という単語、及び同様な形式は、これらの単語のいずれか１つに続く１つ又は複数の項目がそのような１つ又は複数の項目の網羅的なリストであることを意味せず、又は列挙された１つ又は複数の項目だけに限定されることを意味しないという点で、意味が等価であり、オープンエンドであることが意図される。本明細書および添付の特許請求の範囲で使用されるように、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は文脈が明確に別段の指示をしない限り、複数の参照を含むことにも留意されたい。
【００７１】
さらに、１以上のコンピュータ可読記憶媒体を、本開示と一致する実施形態を実装する際に利用することができる。コンピュータ可読記憶媒体は、プロセッサによって読み取り可能な情報またはデータを記憶することができる任意のタイプの物理メモリを指す。したがって、コンピュータ可読記憶媒体は、１以上のプロセッサに本明細書で説明される実施形態と一致するステップまたはステージを実行させるための命令を含む、１以上のプロセッサによる実行のための命令を記憶することができる。用語「コンピュータ可読媒体」は有形のアイテムを含み、搬送波および過渡信号を除外する、すなわち、非一時的であると理解されるべきである。例としては、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、揮発性メモリ、不揮発性メモリ、ハードドライブ、ＣＤ  ＲＯＭ、ＤＶＤ、フラッシュドライブ、ディスク、および任意の他の既知の物理記憶媒体が挙げられる。
【００７２】
開示および実施例は例示としてのみ考えられ、開示された実施形態の真の範囲および精神は以下の特許請求の範囲によって示されることが意図される。
【図１】
2020004363.tif 000026
【図２】
2020004363.tif 000027
【図３】
2020004363.tif 000028
【図４】
2020004363.tif 000029
【外国語明細書】
2020004363000001.pdf