特許第5778808号(P5778808)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ タタ コンサルタンシー サービシズ リミテッドの特許一覧

特許5778808エントリーポイントを参照したソフトウェアアプリケーション解析システムおよび方法
<>
  • 特許5778808-エントリーポイントを参照したソフトウェアアプリケーション解析システムおよび方法 図000003
  • 特許5778808-エントリーポイントを参照したソフトウェアアプリケーション解析システムおよび方法 図000004
  • 特許5778808-エントリーポイントを参照したソフトウェアアプリケーション解析システムおよび方法 図000005
  • 特許5778808-エントリーポイントを参照したソフトウェアアプリケーション解析システムおよび方法 図000006
  • 特許5778808-エントリーポイントを参照したソフトウェアアプリケーション解析システムおよび方法 図000007
  • 特許5778808-エントリーポイントを参照したソフトウェアアプリケーション解析システムおよび方法 図000008
  • 特許5778808-エントリーポイントを参照したソフトウェアアプリケーション解析システムおよび方法 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5778808
(24)【登録日】2015年7月17日
(45)【発行日】2015年9月16日
(54)【発明の名称】エントリーポイントを参照したソフトウェアアプリケーション解析システムおよび方法
(51)【国際特許分類】
   G06F 11/36 20060101AFI20150827BHJP
【FI】
   G06F9/06 620P
【請求項の数】17
【外国語出願】
【全頁数】14
(21)【出願番号】特願2014-30157(P2014-30157)
(22)【出願日】2014年2月20日
(65)【公開番号】特開2014-194756(P2014-194756A)
(43)【公開日】2014年10月9日
【審査請求日】2014年2月25日
(31)【優先権主張番号】1201/MUM/2013
(32)【優先日】2013年3月28日
(33)【優先権主張国】IN
(73)【特許権者】
【識別番号】510337621
【氏名又は名称】タタ コンサルタンシー サービシズ リミテッド
【氏名又は名称原語表記】TATA Consultancy Services Limited
(74)【代理人】
【識別番号】100137095
【弁理士】
【氏名又は名称】江部 武史
(74)【代理人】
【識別番号】100173532
【弁理士】
【氏名又は名称】井上 彰文
(74)【代理人】
【識別番号】100091627
【弁理士】
【氏名又は名称】朝比 一夫
(72)【発明者】
【氏名】ラビ ハンマント マハムニ
(72)【発明者】
【氏名】プラガティ スリヴァスタヴァ
(72)【発明者】
【氏名】シュラワーン クマール
【審査官】 石川 亮
(56)【参考文献】
【文献】 特開2008−176793(JP,A)
【文献】 特開2004−227129(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/28
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
演算環境においてソフトウェアアプリケーションの解析を実行するための方法であって、
前記ソフトウェアアプリケーションのコンパイル可能なソースコードを入力データとして受け入れる工程と、
エントリーポイントの包括リストを取得するため、前記入力データを処理する工程と、を含み、
前記処理する工程は、
前記ソフトウェアアプリケーション用の1つ以上の参照構造を構築するため、前記入力データから1つ以上の中間表現を生成する工程と、
構築された前記参照構造から、前記ソフトウェアアプリケーションに関連する前記エントリーポイントのグループに相当する関連関数を特定する工程と、
パラメーターリストを参照し、非決定論的シーケンスを保証し、要求最小コール深度における前記特定されたエントリーポイントの全てを順に呼び出すラッパー関数を生成する工程と、を含み、
前記ラッパー関数は、シングルエントリーポイントとして扱われ、
前記ラッパー関数の解析は、前記シングルエントリーポイントの解析を可能とし、さらに、前記ソフトウェアアプリケーションの完全な解析に繋がる前記特定されたエントリーポイントの解析を可能とし、
前記ラッパー関数の解析は、前記エントリーポイントそれぞれの独立した解析を実行することなく、前記エントリーポイントの前記グループの前記解析をもたらし、
前記1つ以上の中間表現を生成する工程、前記特定する工程、前記ラッパー関数を生成する工程、および前記解析は、プロセッサーによって実行されることを特徴とする方法。
【請求項2】
前記参照構造は、前記ソフトウェアアプリケーションに対するコール階層をさらに含む請求項1に記載の方法。
【請求項3】
前記特定されたエントリーポイントは、前記パラメーターリストを参照して、または前記パラメーターリストを参照せずに呼び出される請求項1に記載の方法。
【請求項4】
前記特定されたエントリーポイントは、前記ソフトウェアアプリケーション内においてユニークであると見なされる請求項1に記載の方法。
【請求項5】
前記エントリーポイントの全ての呼び出しコンテキストは、正確な解析を保証するため、前記ラッパー関数が生成されると同時に保持される請求項1に記載の方法。
【請求項6】
前記ソフトウェアアプリケーションは、前記ラッパー関数を生成せず、さらに、前記要求最小コール深度における前記特定されたエントリーポイントの全てから構成される入力を生成して解析される請求項1に記載の方法。
【請求項7】
前記ラッパー関数は、コール階層内の呼び出されない関数をさらに含む請求項1に記載の方法。
【請求項8】
前記エントリーポイントのグループは、エントリーポイントの上位セットをさらに含む請求項1に記載の方法。
【請求項9】
演算環境においてソフトウェアアプリケーションの解析を実行するためのシステムであって、
プロセッサーと、
前記プロセッサーに接続されたメモリーと、を含み、
前記プロセッサーは、前記メモリー内に記録されたプログラムされた指示のセットを実行するよう構成され、
前記メモリーは、
前記ソフトウェアアプリケーションの1つ以上のソースコードを入力データとして受け入れ、さらに、エントリーポイントの包括リストを取得する受信モジュールと、
前記ソフトウェアアプリケーション用の1つ以上の参照構造を構築するため、前記入力データから1つ以上の中間表現を生成するよう構成された生成モジュールと、
前記参照構造から、前記ソフトウェアアプリケーションに関連する前記エントリーポイントのグループに相当する1つ以上の関連関数を特定する特定モジュールと、
パラメーターリストを参照し、非決定論的シーケンスを保証し、要求最小コール深度における前記特定されたエントリーポイントの全てを順に呼び出し、シングルエントリーポイントとして扱われるラッパー関数を生成するラッパー生成器と、
前記ラッパー関数の解析を提供し、前記シングルエントリーポイントの解析を可能とし、さらに、前記ソフトウェアアプリケーションの完全な解析に繋がる前記特定されたエントリーポイントの全ての解析を可能とする解析モジュールと、を含み、
前記ラッパー関数の前記解析は、前記エントリーポイントのそれぞれの独立した解析を実行せずに、前記エントリーポイントの前記グループの前記解析をもたらすことを特徴とするシステム。
【請求項10】
前記参照構造は、前記ソフトウェアアプリケーションに対するコール階層をさらに含む請求項9に記載のシステム。
【請求項11】
前記特定されたエントリーポイントは、前記パラメーターリストを参照して、または前記パラメーターリストを参照せずに呼び出される請求項9に記載のシステム。
【請求項12】
前記特定されたエントリーポイントは、前記ソフトウェアアプリケーション内においてユニークであると見なされる請求項9に記載のシステム。
【請求項13】
前記ラッパー生成器は、正確な解析を保証するため、前記ラッパー関数が生成されると同時に、前記エントリーポイントの全ての呼び出しコンテキストを保持する請求項9に記載のシステム。
【請求項14】
前記ラッパー関数は、外部から供給される請求項9に記載のシステム。
【請求項15】
前記解析モジュールは、前記特定されたエントリーポイントの全てから構成される入力を用い、さらに前記ラッパー関数を生成せずに、前記ソフトウェアアプリケーションを解析する請求項9に記載のシステム。
【請求項16】
前記関連関数は、コール階層内の呼び出されない関数をさらに含む請求項9に記載のシステム。
【請求項17】
前記エントリーポイントのグループは、エントリーポイントの上位セットをさらに含む請求項9に記載のシステム
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピューターソフトウェアアプリケーション解析の分野に関する。より具体的に、本発明は、演算環境(computing environment)におけるエントリーポイントの解析実行に関する。
【背景技術】
【0002】
静的解析(static analysis)技術は、ランタイムエラー(runtime errors)、リソースリーク(resource leaks)およびセキュリティー脆弱性(security vulnerabilities)を、ソフトウェアアプリケーションコードを実行することなく、静的に見つけ出すために用いられている。静的プログラム解析は、ソフトウェアプログラムを実行することなく、実行されるソフトウェアアプリケーションの解析を可能とする。場合によっては、静的プログラム解析は、特定のソースコードまたはオブジェクトコードに実行される。
【0003】
エントリーポイント(Entry point: プログラミングにおける入口点)は、ソフトウェアアプリケーションの機能(functionality)を実行するのに有用なインターフェース関数またはエントリー関数である。ソフトウェアアプリケーションは、アプリケーションへの複数のエントリーポイントを有していてもよい。これらエントリーポイントは、順番に、または同時に呼び出されることができる。エントリーポイントは、ソフトウェアアプリケーションの特定の機能の解析、およびソフトウェアプリケーションの不正利用(application exposure)の確認のために必要とされる。
【0004】
任意のソフトウェアアプリケーションは、静的解析ツーツに基づく標準セット(standard set)に対するランタイム欠陥(runtime defect)を特定するために、解析することができる。特定の状況において、複数のエントリーポイントがソフトウェアアプリケーション内に存在するとき、それぞれおよび全てのエントリーポイントは、複数のタスクが並列に実行される分離したタスクとして解析される。それぞれおよび全てのエントリーポイントを分離したタスクとして実行することによるアプリケーションの解析は、多大な時間を要する工程である。エントリーポイントのそれぞれをレビューする場合、全てのエントリーポイント用のレビューポイントまたは欠陥の数は膨大となり、それらエントリーポイントは1つ以上のエントリーポイントと同様の重複したレビューポイントを含む可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【0005】
したがって、エントリーポイントについての情報(知識)が無い場合に、ソフトウェアアプリケーションの解析を容易にするシステムおよび方法に対するニーズが存在する。このシステムおよび方法は、複数のエントリーポイントを考慮した完成したアプリケーションの解析を容易にし、全ての複数のエントリーポイントを同時に連続して実行することによって、解析時間を減少させ、同じ欠陥またはレビューポイントの重複する報告を減少させることができる。
【0006】
この概要は、演算環境においてエントリーポイントの解析を実行するためのシステムおよび方法に関する発想(コンセプト)を説明するために提供されるものであり、この発想は以下の詳細な説明において詳述される。この概要は、請求項に記載された本発明の本質的特徴を特定する意図はなく、請求項に記載された本発明の範囲を決定または限定するために用いられるものでもない。
【課題を解決するための手段】
【0007】
本発明の1つの実施形態において、演算環境においてソフトウェアアプリケーションの解析を実行するための方法が開示される。前記方法は、ソフトウェアアプリケーションのコンパイル可能なソースコードを入力データとして受け入れる工程と、エントリーポイントの包括リストを取得するため、入力データを処理する工程とを含む。この処理する工程は、ソフトウェアアプリケーション用の1つ以上の参照構造を構築するため、入力データから1つ以上の中間表現を生成する工程をさらに含む。処理する工程は、構築された参照構造から、関連関数を特定する工程をさらに含む。関連関数は、ソフトウェアアプリケーションに関連するエントリーポイントのグループに相当する。前記方法は、非決定論的シーケンスを保証し、1つのレベルのコール深度における特定されたエントリーポイントの全てを順に呼び出すラッパー関数を生成する工程をさらに含む。ラッパー関数は、シングルエントリーポイントとして扱われる。この解析は、ラッパー関数の解析がシングルエントリーポイントの解析を可能とし、さらに、アプリケーションの完全な解析をもたらす特定されたエントリーポイントの解析を可能とするよう実行される。ラッパー関数の解析は、エントリーポイントそれぞれの独立した解析を実行することなく、エントリーポイントのグループの解析をもたらす。これら1つ以上の中間表現を生成する工程、特定する工程、ラッパー関数を生成する工程、および解析は、プロセッサーによって実行される。
【0008】
本発明の1つの実施形態において、演算環境においてソフトウェアアプリケーションの解析を実行するためのシステムが開示される。前記システムは、プロセッサーと、メモリーとを含む。メモリーは、プロセッサーに接続されている。プロセッサーは、メモリー内に記録されたプログラムされた指示のセットを実行するよう構成されている。メモリーは、ソフトウェアアプリケーションの1つ以上のソースコードを入力データとして受け入れ、さらに、エントリーポイントの包括リストを取得する受信モジュールを含む。メモリーは、ソフトウェアアプリケーション用の1つ以上の参照構造を構築するため、入力データから1つ以上の中間表示を生成するよう構成された生成モジュールをさらに含む。メモリーは、参照構造から1つ以上の関連関数を特定する特定モジュールをさらに含む。関連関数は、ソフトウェアプリケーションに関連するエントリーポイントのグループに相当する。メモリーは、少なくとも1つのコール深度値における特定されたエントリーポイントの全てを順に呼び出すラッパー関数を生成するラッパー生成器をさらに含む。ラッパー関数は、シングルエントリーポイントとして扱われる。このソフトウェアアプリケーションの解析は、解析モジュールがラッパー関数の解析を提供し、シングルエントリーポイントの解析を可能とし、さらに、アプリケーションの完全な解析に繋がる特定されたエントリーポイントの全ての解析を可能とするように実行される。ラッパー関数の解析は、エントリーポイントそれぞれの独立した解析を実行することなく、エントリーポイントのグループの解析をもたらす。
【図面の簡単な説明】
【0009】
添付の図面を参照して、詳細な説明が記載される。図中において、参照番号の内、左端の数字は、その参照番号が最初に現れる図を特定する。各図において、同様の特徴およびコンポーネントを参照するために、同じ番号が用いられている。
【0010】
図1図1は、本発明の実施形態に係る演算環境においてエントリーポイントの解析のためのシステムのネットワーク実装を示す。
【0011】
図2図2は、本発明の実施形態に係る演算環境においてエントリーポイントの解析を実行するシステムを示す。
【0012】
図3図3は、本発明の実施形態に係る演算環境においてエントリーポイントの解析を実行するための方法を示す。
【0013】
図4図4は、本発明の実施形態に係る関連関数を特定するための方法を示す。
【0014】
図5図5は、本発明の実施形態に係るラッパー関数を生成するための方法を示す。
【0015】
図6図6は、本発明の実施形態に係るハードコードラッパー関数用の方法を示す。
【0016】
図7図7は、本発明の実施形態に係る1つ以上のエントリーポイントを含むアプリケーションコードを示す。
【発明を実施するための形態】
【0017】
演算環境においてエントリーポイントの解析を実行するためシステムおよび方法が開示される。ソフトウェアアプリケーション内のエントリーポイントは、解析され、同時に連続して実行される。ソフトウェアアプリケーションを解析するために、全てのエントリーポイントが、完成したアプリケーションを網羅(カバー)するシングルエントリーポイント(single entry point)として見なされる。
【0018】
ソフトウェアアプリケーションへのエントリーポイントが特定される。それぞれおよび全てのエントリーポイントの呼び出しコンテキスト(context:プログラムの実行に必要な情報)は特定され、呼び出しコンテキストはソフトウェアアプリケーションの解析のために保持される。中間表現(intermediate representation:プログラム等において、入力から構築されるデータ構造)は、アプリケーションソースコードから生成される。生成された中間表現は、ソフトウェアアプリケーションのコール階層(call hierarchy)を組み立てる。ソフトウェアアプリケーション内の呼び出されない関数(uncalled functions)は特定され、呼び出されない関数はエントリーポイントの上位セット(super-set)として機能する。全ての呼び出されない関数は、ソフトウェアアプリケーションへのエントリーポイントとして見なされる。
【0019】
ラッパー関数(wrapper function)は、呼び出しコンテキストを保持することによって特定されるエントリーポイントを呼び出すことによって生成される。ラッパー関数は、シングルエントリーポイントと見なされることによって、解析される。ラッパー関数は、全てのエントリーポイントを解析する。
【0020】
記述される演算環境においてエントリーポイントの解析を実行するためのシステムおよび方法の目的は、任意の数の異なる演算システム、環境、および/または構成において実施することができるが、本実施形態は、以下の例示的なシステムの状況で説明される。
【0021】
図1を参照すると、本発明の実施形態に係る、エントリーポイントの解析を実行するためのネットワーク実装100が図示されている。1つの実施形態において、システム102は、ソフトウェアアプリケーション内の呼び出されない関数を特定する。特定された呼び出されない関数は、ソフトウェアアプリケーションへのエントリーポイントの上位セットとして機能する。全てのエントリーポイントは、シングルエントリーポイントとしてラップされ(包まれ)、解析される。
【0022】
本発明は、システム102がサーバー上の解析ツールとして実装されているものとして説明されるものの、システム102は、ラップトップコンピューター、デスクトップコンピューター、ノートパソコン、ワークステーション、メインフレームコンピューター、サーバー、ネットワークサーバー等の様々な演算システムの形態で実装可能である。システム102は、以下まとめてユーザー104またはユーザーデバイス104上に存在するアプリケーションとして総称される1つ以上のユーザーデバイス104−1、104−2・・・104−Nを介して、複数のユーザーによってアクセスされてもよい。ユーザーデバイス104の例として、これに限定されるものではないが、携帯型コンピューター、携帯情報端末(PDA)、携帯用デバイス(handheld device)、およびワークステーションが挙げられる。ユーザーデバイス104は、ネットワーク106を介して、システム102と通信可能に接続されている。
【0023】
1つの実施形態では、ネットワーク106は、無線ネットワーク、有線ネットワークまたはこれらの組み合わせであってもよい。ネットワーク106は、イントラネット、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット等のような異なるタイプのネットワークのいずれか1つの様態で実装することができる。ネットワーク106は、専用ネットワーク(dedicated network)または共有ネットワーク(shared network)のいずれか一方であってもよい。共有ネットワークは、互いに通信を行うための様々なタイプのプロトコル(例えば、ハイパーテキストトランスファープロトコル(HTTP)、トランスミッションコントロールプロトコル/インターネットプロトコル(TCP/IP)、無線アプリケーションプロトコル(WAP)等)を用いる異なるタイプのネットワークの接続に相当する。さらに、ネットワーク106は、ルーター、ブリッジ、サーバー、演算デバイス、ストレージデバイス等を含む様々なネットワークデバイスを含んでいてもよい。
【0024】
図2を参照すると、本発明の実施形態に係るシステム102が図示されている。1つの実施形態において、システム102は、少なくとも1つのプロセッサー202と、入出力(I/O)インターフェース204と、メモリー206とを有している。少なくとも1つのプロセッサー202は、1つ以上のマイクロプロセッサー、マイクロコンピューター、マイクロコントローラー、デジタル信号プロセッサー、中央演算ユニット(CPU)、状態マシーン(state machine)、論理回路、および/または動作指示(operational instruction)に基づいて信号を操作する任意のデバイスの様態で実装することができる。その他の性能の内、少なくとも1つのプロセッサー202は、メモリー206内に記録されたコンピューター可読指示(computer-readable instruction)をフェッチ(fetch:メモリーから指示を取り出す動作)および実行するよう構成されている。
【0025】
I/Oインターフェース204は、様々なソフトウエアおよびハードウェアインターフェース(例えば、ウェブインターフェース、グラフィカルユーザーインターフェース(GUI)等)を備えていてもよい。I/Oインターフェース204は、システム102がユーザーと直接またはクライアントデバイス104を介して情報をやりとりすることを可能とする。さらに、I/Oインターフェース204は、システム102がウェブサーバーおよび外部データベース等の他の演算デバイス(図示せず)と通信可能としてもよい。I/Oインターフェース204は、有線ネットワーク(例えば、LAN、ケーブル等)および無線ネットワーク(WLAN、セルラー、または衛星等)を含む幅広いタイプのネットワークおよびプロトコル内における複数の通信を容易にすることができる。I/Oインターフェース204は、多数のデバイスを互いにまたは別のサーバーに接続するための1つ以上のポートを含んでいてもよい。
【0026】
メモリー206は、従来技術において既知のコンピューター可読媒体(例えば、SRAM(static random access memory)、DRAM(dynamic random access memory)のような揮発性メモリーおよび/またはROM(read only memory)、消去型プログラム可能ROM(erasable programmable ROM)、フラッシュメモリー、ハードディスク、光学ディスク、磁気テープのような不揮発性メモリー)を含んでいてもよい。メモリー206は、モジュール208と、データ230とを含んでいる。
【0027】
モジュール208は、特定のタスクを実行または特定の抽象データ型(abstract date type)を実装(インプリメント)するルーティン(routine:ある限定された仕事を実行するプログラム)、プログラム、オブジェクト、コンポーネント、データ構造等を含む。1つの実施形態において、モジュール208は、受信モジュール210と、生成モジュール212と、特定モジュール214と、ラッパー生成器216と、解析モジュール218と、その他のモジュール220とを含む。その他のモジュール220は、システム102のアプリケーションおよび機能を補うプログラムまたはコードされた指示を含んでいてもよい。
【0028】
これらの中で、データ230は、1つ以上のモジュール208によって処理、受信および生成されたデータを記録するための記録場所(repository)として機能する。また、データ230は、システムデータベース232と、その他のデータ234とを含む。その他のデータ234は、その他のモジュール220内の1つ以上のモジュールの実行結果として生成されたデータを含んでいてもよい。
【0029】
1つの実施形態において、最初に、ユーザーは、I/Oインターフェース204を介してシステム102にアクセスするため、クライアントデバイス104を使用する。システム102の働きは、以下に説明される図2および図3を用いて詳述される。システム102は、ソフトウェアプリケーション内のエントリーポイントを特定する。システム102は、参照構造(informative structure)を構築するため、ソフトウェアアプリケーションから1つ以上の中間表現を生成する。参照構造は、ソフトウェアアプリケーションに対するコール階層をさらに含んでいてもよい。さらに、システム102は、ソフトウェアアプリケーションへのエントリーポイントと見なされる呼び出されない関数を特定する。エントリーポイントはラップされ、ラッパー関数は、(ある)コール深度における特定されたエントリーポイントの全てを呼び出すように生成される。ラッパー関数は、シングルエントリーポイントと見なされ、解析される。
【0030】
図2および図3を参照し、システム102は、プロセッサー202と、プロセッサー202に接続されたメモリー206とを含んでいる。プロセッサー202は、メモリー206内に記録されているプログラムされた指示(programmed instruction)のセットを実行するよう構成されている。メモリー206は受信モジュール210を含み、受信モジュール210は、ソフトウェアアプリケーションに関連する1つ以上のエントリーポイントを、入力データとして受け付ける(ステップ302)よう構成されている。受信モジュール210は、エントリーポイントの包括リスト(comprehensive list)を取得するため、入力データを処理する(ステップ304)。1つの実施形態において、入力データは、ソースコードを含んでいてもよい。さらに、最小コール長値(minimum call length value)、すなわち、コール深度値は、取りうる全てのエントリーポイントを含むような1つの入力データとして見なされる。
【0031】
メモリー206は、入力データ、すなわち、ソースコードから1つ以上の中間表現を生成(ステップ306)するよう構成された生成モジュール212を含む。さらに、生成モジュール212は、ソフトウェアプリケーション用の1つ以上の参照構造の構築を容易にする。
【0032】
1つの実施形態において、参照構造は、ソフトウェアアプリケーションに対するコール階層をさらに含んでいる。生成モジュール212は、ソフトウェアアプリケーションのコール階層を組み立てる。別の実施形態において、中間表現を用いて、1つ以上のコールグラフ(call graph:コンピューターアプリケーションのサブルーチン同士の呼び出し関係を表現した有向グラフ)が構築され、コールグラフがコール階層の形式で表示される。
【0033】
1つの実施形態において、メモリー206は、参照構造から1つ以上の関連関数(relevant function)を特定する(ステップ308)よう構成された特定モジュール214を含む。1つの実施形態において、特定された関連関数は、ソフトウェアプリケーションのコール階層内の呼び出されない関数を含んでいてもよい。コール階層を用いることにより、特定モジュール214は、ソフトウェアアプリケーション内の呼び出されない関数を特定する。さらに、関連関数は、ソフトウェアアプリケーションに関連するエントリーポイントのグループ(群)に相当してもよい。さらに、エントリーポイントのグループは、エントリーポイントの上位セットをさらに含んでいる。
【0034】
最小コール深度値は、入力データの1つとして見なされるため、特定された呼び出されない関数の全ては、エントリーポイントとして扱われる。図3および図4を参照し、ステップ308は、ソフトウェアプリケーション内の呼び出されない関数を特定する工程(ステップ402)をさらに含む。ソフトウェアアプリケーション内の特定された呼び出されない関数は、エントリーポイントと見なされる(ステップ404)。
【0035】
本発明の別の実施形態において、メモリー206は、関連関数のそれぞれに対するラッパー関数を生成する(ステップ310)よう構成されたラッパー生成器216を含む。図5を参照し、ラッパー生成器216は、エントリーポイントをラップするために、エントリーポイントを特定する(ステップ502)。ラッパー生成器216は、全てのエントリーポイントをシングルエントリーポイント内へとラップする(ステップ504)。シングルエントリーポイントは、ソフトウェアアプリケーション全体で検討されるエントリーポイントの全てに関連するパラメーターの全てを含んでいてもよい。
【0036】
本発明の別の実施形態において、メモリー206は、解析モジュール218を含み、解析モジュールは、エントリーポイントに関連するパラメーターを収集することにより、ラッパー関数の解析を実行する。さらに、静的解析が、ソフトウェアアプリケーション全体を解析するために、全てのエントリーポイントを含むエントリーポイントに対して実行される。解析モジュール218は、エントリーポイント全体に関連するパラメーターの全てを含むシングルエントリーポイントを解析し、次に、エントリーポイントの全てを個別に解析することなく、エントリーポイントの全てを連続して解析する。
【0037】
ラッパー関数の解析(ステップ312)は、エントリーポイントの全てをシングルエントリーポイントとして解析する工程と、関連関数の解析とを含む。さらに、解析モジュール218は、関連関数の解析を行い、その結果、エントリーポイントそれぞれの独立した解析を実行せずに、エントリーポイントの全てのグループの解析を行うことができる。これにより、複数のエントリーポイントを有するアプリケーション全体の解析に係る所要時間を減少させることができる。アプリケーションを解析するため、それぞれ及び全ての特定されたエントリーポイントの呼び出しコンテキストが正確な結果のために保持される。呼び出しコンテキストは、それぞれのエントリーポイントの解析に影響を与えずに複数のエントリーポイントを連続的に実行することによって保持される。ラッパー関数内に生成されたアプリケーションコードは、特定された全てのエントリーポイントを呼び出し、さらに、if条件またはelse条件内にエントリーポイントをラップすることにより、アプリケーションコードを解析する。
【0038】
本発明の別の実施形態において、ラッパー生成器216によってラッパー関数を生成する工程は、非決定論的シーケンス(non-deterministic sequence)を保証し、最小レベルコール深度における全ての特定されたエントリーポイントを呼び出す。さらに、コール深度は、コール鎖(call chain)のサイズを含んでいてもよい。例えば、関数f1が他の如何なる関数も呼び出さない場合、コール深度は“1”となる。さらに、関数f2が関数f1を呼び出す場合、f2のコール深度は“2”となる。これは、コール鎖の長さを示す。さらに、ラッパー関数は、シングルエントリーポイントと見なすことができる。特定されたエントリーポイントは、アプリケーション内においてユニーク(一意的)であると見なすことができる。さらに、特定されたエントリーポイントは、パラメーターリストを参照することにより、またはパラメーターリストを参照せずに、呼び出される。例えば、関数f1(a,b,c)用に、パラメーターを用いて関数を呼び出す工程が定義される。マングル(難号化)された関数(mangled function)は、リンク(linking)のために用いられる。さらに、関数f1()用に、パラメーターを参照せずに関数を呼び出す工程が定義される。ここで、関数名のみがリンク用に用いられる。全てのエントリーポイントの呼び出しコンテキストは、正確な解析を保証するために、ラッパー関数が生成されると同時に保持される。さらに、ラッパー関数は、エントリーポイントを解析するために、外部から供給されてもよい。
【0039】
解析モジュール218によるラッパー関数の解析は、シングルエントリーポイントの解析を可能とし、さらに、アプリケーションの完全な解析に繋がる特定されたエントリーポイントの解析を可能とする。ラッパー関数の解析は、エントリーポイントそれぞれの独立した解析を実行することなく、エントリーポイントのグループの解析をもたらす。さらに、1つのエントリー関数の影響は、エントリー関数の全て用に、後続の別のエントリー関数によって呼び出される。
【0040】
システムは、1つのエントリー関数の影響が、全ての可能な置換(all possible permutations)において次々と呼び出され、無限シーケンスとなることをさらに保証する。
【0041】
本発明の別の実施形態において、ソフトウェアアプリケーションは、ラッパー関数を生成せず、さらに、特定されたエントリーポイントの全てから構成される入力を生成し、解析モジュール218によって、解析される。
【0042】
解析機(analyzer)内のハードコード(hard code:特定の動作環境を前提として書かれたコード)された初期設定のラッパーを考慮すれば、ラッパーが生成または供給されることを要求されない場合に、内部のラッパーが用いられてもよい。ハードコードされたラッパー用に、開始時点において、エントリー関数の1つのみがランダムに呼び出されることを前提とすることができる。パラメーターは、全ての場合を想定するため、非決定論的値(non-deterministic value)で提供される。別の実施形態において、グローバル変数(global variable)は、アプリケーション実行開始時点における宣言(declaration)毎に値を有すると見なされる。
【0043】
1つの例示的な実施形態において、ハードコードラッパー関数は、図6を参照して説明される。ハードコードラッパー関数を考慮し、entry1、entry2、entry3のような3つのエントリー関数が存在することを仮定する。このアプリケーションコード用では、entry1は1つの整数値パラメーターを有しており、entry2は2つの整数値パラメーターを有しており、さらに、entry3はパラメーターを有していない。ステップ604において、関数hard coded wrapper()が呼び出される。次のステップ606において、整数変数「choice」が初期化される。ステップ608において、関数random()のモジュール出力値が変数「choice」に割り当てられる。さらに、ケース分岐(switch case)が実行される。ケース“0”であれば、次のステップ610において、関数entry1()が、関数random()の出力の入力パラメーターを用いて実行される。ケース“1”であれば、関数entry2()呼び出しの次のステップ612が、関数random()の出力の入力パラメーターを用いて実行される。ケース“2”であれば、次のステップ614において、関数entry3()が呼び出される。ここで「random」は、ランダムな整数値を生成するツールと共に提供されるライブラリ関数である。
【0044】
別の実施形態において、最小コール深度“1”におけるエントリーポイントを取得するため、ソースコードとして以下の関数を有するソフトウェアアプリケーションを仮定する。

Test1.c
void foo(int inp1, int inp2)

bar1();
bar2();

void bar1()

bar3();

void bar2()

bar3();


Test2.c
void func(int inp1)

bar2();

void bar3()
{}
void func2()

bar3();

void bar4(char c)

【0045】
ソースコードの上記サンプル用に生成されたコール階層は、以下に示すようなものとなる。
【0046】
ここで、エントリーポイントの上位セット、すなわち、呼び出されない関数のセットは、{foo(), func(), func2(), bar4()}となる。
foo()のコール深度=3
func()のコール深度=3
func2()のコール深度=2
bar4()のコール深度=1
さらに、要求最小コール深度“1”用のエントリーポイントのセットは、{foo(), func(), func2(), bar4()}である。
要求最小コール深度“2”用のエントリーポイントのセットは、{foo(), func(), func2()}である。
要求最小コール深度“3”用のエントリーポイントのセットは、{foo(), func()}である。
【0047】
別の例示的な実施形態において、1つ以上のエントリーポイントを含むアプリケーションコードが、図7を参照して説明される。上述のテストケース用に、4つのエントリーポイントfoo、func、func2、bar4が存在する。Cファイルは、ラッパー関数によって生成される。ステップ702において、整数変数dummy、var1、var2、var3、および文字変数が初期化される。次のステップ704において、関数all entry points()が呼び出される。次のステップ706において、ループが初期化される。次のステップ708において、dummyが“0”ならば、入力パラメーターとしてvar1およびvar2を用いた関数foo()が呼び出される。次のステップ710において、dummyが“1”ならば、入力パラメーターとしてvar3を用いた関数func()が呼び出される。次のステップ712において、dummyが“2”ならば、関数func2()が呼び出される。次のステップ714において、dummyが“3”ならば、パラメーターとしてvar4を用いた関数bar4()が呼び出される。
【0048】
ラッパー生成器216は、全てのエントリーポイントを、ソフトウェアアプリケーションに関連するそれらのパラメーターと共に収集する。さらに、ラッパー生成器216は、パラメーターと共に全てのエントリーポイントを収集し、さらに、エントリーポイントに関連するパラメーター内に存在する変数を宣言する。
図1
図2
図3
図4
図5
図6
図7