(57)【特許請求の範囲】
【請求項１】
ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するコンピューター実行可能な方法であって、
プロセッサーを用いて、前記ソフトウェアアプリケーション用の入力データを処理する工程を含み、前記処理する工程は、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成する工程と、
前記１つ以上のコールグラフのそれぞれ用のルートパラメーターを特定する工程と、
前記１つ以上のルートパラメーターを、第１のエントリーポイントのセットとして設定する工程と、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングする工程と、を含み、
前記コンピューター実行可能な方法は、前記プロセッサーを用いて、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示する工程をさらに含むこと特徴とする方法。
【請求項２】
前記入力データは、前記ソフトウェアアプリケーションのソースコードと、前記第１のコール長値とを含む請求項１に記載の方法。
【請求項３】
前記ルートパラメーターは、前記１つ以上のコールグラフ中の呼び出されない関数である請求項１に記載の方法。
【請求項４】
前記コールグラフは、コール階層の形式である請求項１に記載の方法。
【請求項５】
前記第１のコール長値は、前記コールグラフの前記ルートパラメーターにリンクされた関数呼び出しの数を意味する請求項１に記載の方法。
【請求項６】
前記第１のエントリーポイントのセットをフィルタリングする工程は、
前記第１のエントリーポイントのセットのそれぞれ用の第２のコール長値を決定するため、前記第１のエントリーポイントのセットにリンクされた関数呼び出しの数を特定する工程と、
前記第１のコール長値と、前記第２のコール長値とを比較する工程と、を含む請求項１に記載の方法。
【請求項７】
ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するためのシステムであって、
機械実行可能な命令を保存するメモリーと、
プロセッサーと、
表示モジュールと、を含み、
前記プロセッサーは、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成し、
前記１つ以上のコールグラフのそれぞれ用のルートパラメーターを特定し、
前記１つ以上のルートパラメーターを第１のエントリーポイントのセットとして設定し、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングする前記命令を実行するよう構成され、
前記表示モジュールは、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示するよう構成されていることを特徴とするシステム。
【請求項８】
前記入力データは、前記ソフトウェアアプリケーションのソースコードと、前記第１のコール長値とを含む請求項７に記載のシステム。
【請求項９】
前記ルートパラメーターは、前記１つ以上のコールグラフ中の呼び出されない関数である請求項７に記載のシステム。
【請求項１０】
前記表示モジュールは、コール階層の形式の前記コールグラフを表示するようさらに構成されている請求項７に記載のシステム。
【請求項１１】
前記プロセッサーは、
前記第１のエントリーポイントのセットのそれぞれ用の第２のコール長値を決定するため、前記第１のエントリーポイントのセットにリンクされた関数呼び出しの数を特定し、
前記第１のコール長値と、前記第２のコール長値とを比較することによって、前記第１のエントリーポイントのセットをフィルタリングするようさらに構成されている請求項７に記載のシステム。
【請求項１２】
前記第１のコール長値は、前記コールグラフの前記ルートパラメーターにリンクされた関数呼び出しの数を意味する請求項７に記載のシステム。
【請求項１３】
ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するための方法をコンピューターに実行させるための命令を保存する非一時的コンピューター読み取り可能保存媒体であって、
前記方法は、
前記ソフトウェアアプリケーション用の入力データを処理する工程を含み、前記処理する工程は、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成する工程と、
前記１つ以上のコールグラフのそれぞれ用のルートパラメーターを特定する工程と、
前記１つ以上のルートパラメーターを、第１のエントリーポイントのセットとして設定する工程と、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングする工程と、を含み、
前記方法は、前記プロセッサーを用いて、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示する工程をさらに含むことを特徴とする非一時的コンピューター読み取り可能保存媒体。
【請求項１４】
前記入力データは、前記ソフトウェアアプリケーションのソースコードと、前記第１のコール長値とを含む請求項１３に記載の非一時的コンピューター読み取り可能保存媒体。
【請求項１５】
前記ルートパラメーターは、前記１つ以上のコールグラフ中の呼び出されない関数である請求項１３に記載の非一時的コンピューター読み取り可能保存媒体。
【請求項１６】
前記コールグラフは、コール階層の形式である請求項１３に記載の非一時的コンピューター読み取り可能保存媒体。
【請求項１７】
前記第１のコール長値は、前記コールグラフの前記ルートパラメーターにリンクされた関数呼び出しの数を意味する請求項１３に記載の非一時的コンピューター読み取り可能保存媒体。
【請求項１８】
前記第１のエントリーポイントのセットをフィルタリングする工程は、
前記第１のエントリーポイントのセットのそれぞれ用の第２のコール長値を決定するため、前記第１のエントリーポイントのセットにリンクされた関数呼び出しの数を特定する工程と、
前記第１のコール長値と、前記第２のコール長値とを比較する工程と、を含む請求項１３に記載の非一時的コンピューター読み取り可能保存媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアアプリケーションのコード解析一般に関する。より具体的に、本発明は、ソフトウェアアプリケーションにおける設定可能なエントリーポイントの特定および検証技術に関する。
【背景技術】
【０００２】
ソフトウェアアプリケーションは、複数の言語を用いて記述可能である。その上、アプリケーションプログラムを作成（記述）する全てのプログラマーは、自分独自のプログラムオブジェクトの記述方法および実行方法を有している。これら言語のそれぞれは、複数のＡＰＩ（Application Programing Interface）および指令文（directives）を利用可能である。また、非常に大量のソースコードのメンテナンスまたはアップグレードがしばしば要求される。製品システムのコードをデプロイ（deploy）する前、または、ソースコードの実装に取りかかる前に、コードにアクセスし、アプリケーションソースコードのエントリーポイント（entry points：プログラミングにおける入口点）を理解することが必要不可欠である。また、安全性の観点から、コードをレビューすることも重要である。
【０００３】
アプリケーションソースコードにおけるエントリーポイントは、インターフェースまたはソフトウェアアプリケーションの関数を実行するのに有用なエントリー関数である。アプリケーションには、複数のエントリーポイントが存在する。これらエントリーポイントは、順番に、または同時に呼び出されることができる。エントリーポイントは、アプリケーションの関数を正確に解析し、アプリケーションの不正利用（application exposure）を確認するために必要とされる。エントリーポイントの特定（identifying）は、アプリケーション用の均一なエントリー基準および出口（exit）基準を提供するのに有用である。
【０００４】
ソフトウェアアプリケーションの安全性評価の際には、エントリーポイントの特定が必要不可欠である。エントリーポイントは、アプリケーションに対する情報を提供し、それにより、データベース、サーバー、処理エンジンその他アプリケーションのコンポーネント（構成要素）を見つけ出すことができる。もし、これらエントリーポイントの安全性が確保されていなければ、アプリケーションの脆弱性となってしまう可能性がある。
【０００５】
アプリケーションのエントリーポイントを特定するためには、アプリケーションの情報（知識）を得ることが必要不可欠である。熟練した知識豊富な人がいない場合や（アプリケーションに関する情報が記載された）書類が無い場合、これらエントリーポイントを見つけ出すことは困難であり、また、多大な時間を要する工程となる。さらに、人手による検査（manual inspection）でのエントリーポイントの特定は、多大な時間を要する工程であって、また、不正確な結果を得てしまう。加えて、もし、エントリーポイントの特定を呼び出されない関数（uncalled function）を見つけ出すことによって実行すると、再度の検証が必要な膨大な関数リストが出来てしまうこととなる。呼び出されない関数の検証は、非常に多くの時間を要するだけでなく、退屈な工程であり、多くの場合、各関数を詳しく調べ、必要とされるエントリーポイントを抽出しなければならない。また、エントリーポイントの特定が完了したか否かを検証するために有用な技術が利用できない場合がある。
【０００６】
したがって、最小限のアプリケーションに対する知識で、または、書類が欠如していても、ユーザーによるソフトウェア用エントリーポイントの特定を補助することのできるシステムおよび方法が必要とされている。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するコンピューター実行可能な方法を提供することにある。前記方法は、プロセッサーを用いて、前記ソフトウェアアプリケーション用の入力データを処理する工程を含む。前記処理する工程は、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成する工程と、
前記１つ以上のコールグラフのそれぞれ用のルートパラメーターを特定する工程と、
前記１つ以上のルートパラメーターを、第１のエントリーポイントのセットとして設定する工程と、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングする工程と、を含む。
前記方法は、前記プロセッサーを用いて、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示する工程をさらに含む。
【０００８】
本発明のさらなる目的は、ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するためのシステムを提供することにある。該システムは、機械実行可能な（machine-executable）命令を保存するメモリーと、前記命令を実行するよう構成されたプロセッサーとを含む。前記プロセッサーは、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成し、
前記１つ以上のコールグラフ用のルートパラメーターを特定し、
前記１つ以上のルートパラメーターを、第１のエントリーポイントのセットとして設定し、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングするよう構成されている。
前記システムは、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示するよう構成された表示モジュールをさらに含む。
【０００９】
本発明のさらなる目的は、ソフトウェアアプリケーションに関連付けられたエントリーポイントを特定および検証するための方法をコンピューターに実行させるための命令を保存する非一時的コンピューター読み取り可能保存媒体（non-transitory computer-readable storage medium）を提供することにある。該方法は、プロセッサーを用いて、ソフトウェアアプリケーション用の入力データを処理する工程を含む。前記処理する工程は、
前記ソフトウェアアプリケーション用の１つ以上のコールグラフを生成する工程と、
前記１つ以上のコールグラフのそれぞれ用のルートパラメーターを特定する工程と、
前記１つ以上のルートパラメーターを、第１のエントリーポイントのセットとして設定する工程と、
第２のエントリーポイントのセットを生成するため、ユーザーによって提供された第１のコール長値を用いて、前記第１のエントリーポイントのセットをフィルタリングする工程と、を含む。
前記処理する方法は、前記プロセッサーを用いて、前記第２のエントリーポイントのセットを、それぞれの前記コールグラフと共に表示する工程をさらに含む。
【図面の簡単な説明】
【００１０】
本開示の一部をなし、本明細書に組み入れられる添付の図面は、本発明の実施例を図示するものであり、本発明の基本概念を説明するために、明細書の記載と共に参照される。
【００１１】
【図１】図１は、システムの基本設計概念（architecture）の実施例を示す図である。
【００１２】
【図２】図２は、図１の基本設計概念を利用したアプリケーションのエントリーポイント生成を含む工程を示すフローチャートの例である。
【００１３】
【図３】図３は、コンピューターシステムの実施例を示す図である。
【発明を実施するための形態】
【００１４】
添付の図面を参照して、本発明の実施形態が説明される。以下に、本発明の基本概念の特徴および実施例が記載されるが、本発明の範囲および基本概念から有意に離れない限り、それらの変更、代替その他の実装が可能である。以下の記載は、実施例を理解するためのもので、本発明の真の範囲および概念は、特許請求の範囲において示される。
【００１５】
１つ以上の構成要素は、モジュールとして記述される。例えば、モジュールは、論理ゲート（logical gate）、半導体デバイス、集積回路、その他の個々の要素を含むハードウェア回路内の自己充足な（self-contained）構成要素を含んでいてもよい。また、モジュールは、プロセッサー等の任意のハードウェア資源によって実行される任意のソフトウェアプログラムの一部であってもよい。ソフトウェアプログラムとしてのモジュールの実行は、プロセッサーまたはその他のハードウェア資源によって実行可能な論理命令（logical instructions）のセットを含んでいてもよい。さらに、モジュールは、命令のセットもしくはインターフェースを介したプログラムと組み合わせられていてもよい。
【００１６】
本発明は、ソフトウェアアプリケーションに関連付けられた１つ以上の設定可能なエントリーポイントを特定（identifying）および検証（verifying）するための方法およびシステムに関する。エントリーポイントのセット（集合、組）を図示するコールグラフ（call graph：コンピューターアプリケーションのサブルーチン同士の呼び出し関係を表現した有向グラフ）が生成され、表示される。
【００１７】
図１に示す例示のシステム１００は、入力データを受け付けるよう構成された入力受信モジュール１０２と、エントリーポイントの包括リスト（comprehensive list）を取得するよう構成された処理部１０４とを含む。処理部１０４は、生成部１０６と、特定モジュール１０８と、フィルタリング部１１０とを含む。システム１００は、フィルタリングされたエントリーポイントのセットを表示するよう構成された表示モジュール１１２をさらに含む。
【００１８】
入力受信モジュール１０２は、ソフトウェアアプリケーションに関する入力データを受信するよう構成されている。入力データは、特に限定されないが、ソースコードおよびコール長値（call length value）を含む。コール長値は、特に限定されないが、コール深度値（call depth value）を含む。
【００１９】
システム１００の動作例を、図２を参照して説明する。生成部１０６は、提供された、または受信したアプリケーションソースコードから１つ以上の中間表示を生成するよう構成されている（ステップ２０２）。さらに、１つ以上の中間表示を用いて、１つ以上のコールグラフが構成される（ステップ２０４）。コールグラフは、コール階層（call hierarchy）の形式で表示される。
【００２０】
ステップ２０６において、特定モジュール１０８は、エントリーポイントの参照セット（informative set）を準備するため、コールグラフ用の１つ以上のルートパラメーターを特定する。ルートパラメーターは、エントリーポイントのセットに関連付けられた１つ以上の呼び出されない関数（uncalled functions）を含む。呼び出されない関数は、エントリーポイントの上位セット（super-set）として機能してもよい。コールグラフが入力端（incoming edges）および出力端（outgoing edges）を有するグラフであることを考慮すれば、入力端は関数として存在し、出力端は該関数に呼び出される関数として存在する。
【００２１】
フィルタリング部１１０は、ユーザーによって提供される事前に定められた値を用いて、エントリーポイントの参照セットをフィルタリングする。ユーザーによって提供される事前に定められた値はコール長値を含み、コール長値は、コール深度の値を参照する（ステップ２０８）。以下に説明するステップ２０８および２１０では、呼び出されない関数の潜在的に大きなリスト（potentially large list）がフィルタリングされ、必要なエントリーポイントを取得することを容易とする。したがって、多大な時間を消費する、呼び出されない関数の人手によるレビューやソート（整理）工程が最小化される。
【００２２】
フィルタリング部１１０は、呼び出されない関数のそれぞれのコール深度またはコール経路（call chain）の長さを判別する際に、呼び出されない関数の上位セットの内の任意の関数に対して順々に適用される（ステップ２１０）。呼び出されない関数のそれぞれのコール長やコール深度の値は、ユーザーによって提供されたコール長またはコール深度と比較される（ステップ２１２）。もし、呼び出されない関数のコール長値またはコール深度値がユーザーによって提供された値よりも大きければ、呼び出されない関数は、必要なエントリーポイントのリストに追加される（ステップ２１４）。このフィルタリングされたエントリーポイントのセットは、表示モジュール１１２によって表示され、機能情報（functional knowledge）と共に検証される（ステップ２１６）。
【００２３】
例として、表示モジュール１１２は、フィルタリングされたエントリーポイントの参照セットを、それぞれのソフトウェアアプリケーションに関するコールグラフと共に表示する。また、エントリーポイントのセットを検証するため、視覚化された表示は、コール階層とともに提供されてもよい。表示モジュール１１２は、各エントリーポイントそれぞれのコール階層を表示する（ステップ２１６）。そのため、システム１００は、エントリーポイントの包括リストを取得し、コール階層を表示するための、統合され、自動化された方法を提供することとなる。システム１００によって提供されるこのような視覚化は、エントリーポイントに関する有用な情報（知識）およびカバレッジ（coverage：プログラムテストの際にテスト対象とする範囲）を提供することができる。上述の方法例のアプリケーションを以下に示すが、本発明はこれに限定されるものではない。
【００２４】
ソフトウェアアプリケーションは、ソースコードとして、以下の関数を有するものとする。また、コール経路の長さ＝２のエントリーポイントを取得する必要があるとする。なお、この“２”というコール経路の長さは、ユーザーによって提供される。
【００２５】
Ｖｏｉｄ  ｆｏｏ（）
｛
ｂａｒ１（）；
ｂａｒ２（）；
｝
【００２６】
Ｖｏｉｄ  ｂａｒ１（）
｛
ｂａｒ３（）；
｝
【００２７】
Ｖｏｉｄ  ｂａｒ２（）
｛
ｂａｒ３（）；
｝
【００２８】
Ｖｏｉｄ  ｆｕｎｃ（）
｛
ｂａｒ２（）；
｝
【００２９】
Ｖｏｉｄ  ｂａｒ３（）
｛｝
【００３０】
ｖｏｉｄ  ｆｕｎｃ２（）
｛
ｂａｒ３（）；
｝
【００３１】
Ｖｏｉｄ  ｂａｒ４（）
｛
｝
【００３２】
上述のコードのサンプルでは、以下のように可視化されたコールグラフ（例えば、コール階層の形式）が生成される。
0005619980.tif 000002
【００３３】
ここで、エントリーポイントの上位セット（例えば、呼び出されない関数のセット）は、｛ｆｏｏ（）、ｆｕｎｃ（）、ｆｕｎｃ２（）、ｂａｒ４（）｝となる。
【００３４】
ｆｏｏ（）のコール経路の長さは“２”である。
【００３５】
ｆｕｎｃ（）のコール経路の長さは“２”である。
【００３６】
ｆｕｎｃ２（）のコール経路の長さは“１”である。
【００３７】
ｂａｒ４（）のコール経路の長さは“０”である。
【００３８】
必要とされるコール長は“２”である。
【００３９】
したがって、フィルタリングされたエントリーポイントのセットは、｛ｆｏｏ（）、ｆｕｎｃ（）｝となる。
【００４０】
このフィルタリングされたエントリーポイントのセットは、検証のため、それぞれのコール階層とともに表示される。
【００４１】
このリストから、１つ以上の必要とされるエントリーポイントを選択することができる。
【００４２】
上述の技術を利用して、ユーザー要求の関数の最小コール長等のユーザーの要求毎に、ソフトウェアアプリケーションのエントリーポイントを特定および検証することができる。いくつかの実施形態では、アプリケーションに関する知識やアプリケーションに関する書類なしで、エントリーポイントを特定および検証することができる。特定されたエントリーポイントは、それぞれのコール階層と共に表示されるので、エントリーポイントの実用性が有効化される。また、呼び出されない関数の膨大なリストをレビューし、整理するのに必要な時間が大幅に削減される。
【００４３】
図３は、本開示と整合する(consistent with)実施形態を実行するコンピューターシステムのブロック図の１例である。コンピューターシステム６０１の変形を、上述のデバイスおよびアルゴリズムの実行に用いることができる。例えば、コンピューターシステム６０１は、図１のシステムを実行することができる。コンピューターシステム６０１は、中央演算処理部（ＣＰＵまたはプロセッサー）６０２を含んでいる。図２の実施例の方法を実行するプロセッサー６０２は、ユーザーまたはシステムで生成されたプログラムコンポーネントを実行する少なくとも１つのデータプロセッサーを含む。ユーザーは、個人、本開示に含まれるようなデバイスを用いる個人、もしくはデバイス自身である。プロセッサー６０２は、統合システム（バス）コントローラー、メモリー管理コントロールユニット、浮動小数点ユニット（floating point units）、画像処理ユニット、デジタル信号処理ユニット等の専門化した処理ユニットを含んでいてもよい。プロセッサー６０２は、ＡＭＤアスロン（AMD Athlon）、ＤｕｒｏｎまたはＯｐｔｅｒｏｎのようなマイクロプロセッサー、ＡＲＭ´ｓアプリケーション（ARM's application）、組み込みまたはセキュアープロセッサー（embedded or secure processor）、ＩＢＭパワーＰＣ（IBM PowerPC）、インテルコア（Intel’s core）、Ｉｔａｎｉｕｍ、Ｘｅｏｎ、Ｃｅｌｅｒｏｎ、またはその他のプロセッサー等を含んでいてもよい。プロセッサー６０２は、メインフレーム、分散プロセッサー（distributed processor）、マルチコア、平行、グリッド、その他の基本概念（architecture）を用いて、実行される。いくつかの実施形態では、ＡＳＩＣｓ（Application-Specific Integrated Circuits）、デジタル信号プロセッサー（DSPs）、ＦＰＧＡｓ（Field Programmable Gate Arrays）等の実装技術が用いられる。
【００４４】
プロセッサー６０２は、Ｉ／Ｏインターフェース６０３を介して、１つ以上の入力／出力（Ｉ／Ｏ）デバイスと通信可能に配置される。Ｉ／Ｏインターフェース６０３は、特に限定されないが、音声、アナログ、デジタル、モノラル、ＲＣＡ、ステレオ、ＩＥＥＥ−１３９４、シリアルバス、ユニバーサルシリアルバス（ＵＳＢ）、赤外線、ＰＳ／２、ＢＮＣ、同軸、コンポーネント、コンポジット、ＤＶＩ（Digital Visual Interface）、ＨＤＭＩ（High-Definition Multimedia Interface）（登録商標）、ＲＦアンテナ、Ｓ−ビデオ、ＶＧＡ、ＩＥＥＥ８０２．１１、ａ／ｂ／ｇ／ｎ／ｘ、ブルートゥース、Ｃｅｌｌｕｌａｒ（例えば、ＣＤＭＡ（Code-Division Multiple Access）、ＨＳＰＡ＋（High-Speed Packet Access）、ＧＳＭ（Global System for Mobile communications）（登録商標）、ＬＴＥ（Long-Term Evolution）、ＷｉＭａｘ等）等の通信プロトコル／方法を採用してもよい。
【００４５】
Ｉ／Ｏインターフェース６０３を用いて、コンピューターシステム６０１は、１つ以上のＩ／Ｏデバイスと通信を取る。例えば、入力デバイス６０４は、アンテナ、キーボード、マウス、ジョイスティック、（赤外線）遠隔コントロール、カメラ、カード読み取り機、ファックス機、ドングル（dongle）、生体読み取り機、マイク、タッチスクリーン、タッチパッド、トラックボール、センサー（例えば、加速度センサー、光センサー、ＧＰＳ、ジャイロスコープ、近接センサー等）、針、スキャナー、保存デバイス、トランシーバー、ビデオデバイス／ソース、バイザー（visors）等である。出力デバイス６０５は、プリンター、ファックス機、ビデオディスプレイ（例えば、ＣＲＴ（Cathode Ray Tube）、液晶ディスプレイ（ＬＣＤ）、ＬＥＤ（Light-Emitting Diode）、プラズマ等）、音声スピーカー等である。いくつかの実施形態では、トランシーバー６０６は、プロセッサー６０２と通信可能に配置されている。トランシーバー６０６は、様々な種類のワイヤレス送信または受信を容易にする。例えば、トランシーバー６０６は、トランシーバーチップ（例えば、テキサスインストゥルメンツＷｉＬｉｎｋ  ＷＬ１２８３、ブロードコム  ＢＣＭ４７５０ＩＵＢ８、インフィネオンテクノロジーズ  Ｘ−Ｇｏｌｄ  ６１８−ＰＭＢ９８００等）に操作可能に接続され、ＩＥＥＥ  ８０２．１１ａ／ｂ／ｇ／ｎ、ブルートゥース、ＦＭ、ＧＰＳ（Global Positioning System）、２Ｇ／３Ｇ  ＨＳＤＰＡ／ＨＳＵＰＡ通信等を提供するアンテナを含む。
【００４６】
いくつかの実施形態では、プロセッサー６０２は、ネットワークインターフェース６０７を介して、通信ネットワーク６０８に通信可能に配置される。ネットワークインターフェース６０７は、通信ネットワーク６０８と通信を取る。ネットワークインターフェース６０７は、特に限定されないが、ダイレクト接続（direct connect）、イーサネット（登録商標）（例えば、twisted pair 10/100/1000 Base T）、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）、トークンリング、ＩＥＥＥ  ８０２．１１ａ／ｂ／ｇ／ｎ／ｘ等の通信プロトコルを採用している。通信ネットワーク６０８は、特に限定されないが、ダイレクトインターコネクション（direct interconnection）、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）、ワイヤレスネットワーク（例えば、ワイヤレスアプリケーションプロトコルを用いたもの）、インターネット等である。ネットワークインターフェース６０７および通信ネットワーク６０８を用いて、コンピューターシステム６０１は、デバイス６１０、６１１および６１２と通信を取る。これらのデバイスは、特に限定されないが、パーソナルコンピューター、サーバー、ファックス機、プリンター、スキャナー、携帯電話等のモバイル機器、スマートフォン（例えば、アップルアイフォーン、ブラックベリー、アンドロイド系電話等）、タブレットコンピューター、電子書籍リーダー（アマゾン、キンドル、Ｎｏｏｋ等）、ラップトップコンピューター、ノート型コンピューター、ゲームコンソール（マイクロソフトＸｂｏｘ、任天堂ＤＳ、ソニープレイステーション等）等である。いくつかの実施形態では、コンピューターシステム６０１は、それ自身が、１つ以上のデバイスを統合している。
【００４７】
いくつかの実施形態では、プロセッサー６０２は、保存インターフェース６１２を介して、１つ以上のメモリーデバイス（例えば、ＲＡＭ６１３、ＲＯＭ６１４等）と通信可能に配置されている。保存インターフェース６１２は、特に限定されないが、ＳＡＴＡ（Serial Advanced Technology Attachment）、ＩＤＥ（Integrated Drive Electronics）、ＩＥＥＥ−１３９４、ＵＳＢ（Universal Serial Bus）、ファイバーチャンネル、ＳＣＳＩ（Small Computer Systems Interface）等の接続プロトコルを採用するメモリーデバイス、リムーバブルディスクドライブ等のメモリーデバイスに接続されている。メモリーデバイスは、ドラム、磁気ディスクドライブ、磁気光学ドライブ、光学ドライブ、ＲＡＩＤ（Redundant Array of Independent Discs）、固体メモリーデバイス、固体ドリブ等を含む。
【００４８】
メモリーデバイスは、特に限定されないが、オペレーティングシステム６１６、ユーザーインターフェース（アプリケーション）６１７、ウェブブラウザー６１８、メールサーバー６１９、メールクライアント６２０、ユーザー／アプリケーションデータ６２１（例えば、本開示で議論された任意のデータ変数またはデータ記録）等のプログラムまたはデータベースコンポーネントの一群を保存している。オペレーティングシステム６１６は、コンピューターシステムの操作およびリソース管理を容易にする。オペレーティングシステム６１６の例としては、特に限定されないが、アップルマッキントッシュＯＳ  Ｘ、Ｕｎｉｘ（登録商標）、Ｕｎｉｘ（登録商標）のようなシステム分散（例えば、ＢＳＤ（Berkeley Software Distribution）、ＦｒｅｅＢＳＤ、ＮｅｔＢＳＤ、ＯｐｅｎＢＳＤ等）、Ｌｉｎｕｘ分散（例えば、Ｒｅｄ  Ｈａｔ、Ｕｂｕｎｔｕ、Ｋｕｂｕｎｔｕ等）、ＩＢＭ  ＯＳ／２、マイクロソフトウィンドウズ（登録商標）（ＸＰ、Ｖｉｓｔａ／７／８等）、アップルｉＯＳ、グーグルアンドロイド、ブラックベリーＯＳ等である。ユーザーインターフェース６１７は、テキストまたは画像ファシリティーを介して、プログラムコンポーネントの実行、操作、インタラクション、実施、表示を容易にする。例えば、ユーザーインターフェース６１７は、カーソル、アイコン、チェックボックス、メニュー、スクローラー、ウィンドウ、ウィジェット（widget）等のコンピューターシステム６０１に操作可能に接続された表示システム上のコンピューター相互インターフェース要素である。ＧＵＩｓ（Graphical User Interfaces）は、特に限定されないが、アップルマッキントッシュオペレーティングシステムＡｑｕａ、ＩＢＭ  ＯＳ／２、マイクロソフトウィンドウズ（登録商標）（例えば、Aero, Metro等）、Ｕｎｉｘ  Ｘ−Ｗｉｎｄｏｗｓ、ウェブインターフェースライブラリ（例えば、ＡｃｔｉｖｅＸ、Ｊａｖａ（登録商標）、Ｊａｖａｓｃｒｉｐｔ（登録商標）、ＡＪＡＸ、ＨＴＭＬ、Ａｄｏｂｅフラッシュ等）等に採用されている。
【００４９】
いくつかの実施形態では、コンピューターシステム６０１は、プログラムコンポーネントに保存されているウェブブラウザー６１８を実行する。ウェブブラウザー６１８は、マイクロソフトＩｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ、グーグルＣｈｒｏｍｅ、Ｍｏｚｉｌｌａ  Ｆｉｒｅｆｏｘ、アップルＳａｆａｒｉ等のハイパーテキスト表示アプリケーションである。安全なウェブブラウザーは、ＨＴＴＰＳ（Secure Hypertext Transport Protocol）、ＳＳＬ（Secure Sockets Layer）、ＴＬＳ（Transport Layer Security）等を用いて提供される。ウェブブラウザー６１８は、ＡＪＡＸ、ＤＨＴＭＬ、アドビＦｌａｓｈ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｊａｖａ（登録商標）、ＡＰＩｓ（Application programming Interfaces）等のファシリティーを利用する。いくつかの実施形態では、コンピューターシステム６０１は、プログラムコンポーネントに保存されているメールサーバー６１９を実行する。メールサーバー６１９は、マイクロソフトＥｘｈａｎｇｅ等のインターネットメールサーバーである。メールサーバー６１９は、ＡＳＰ、ＡｃｔｉｖｅＸ、ＡＮＳＩ  Ｃ＋＋／Ｃ＃、マイクロソフト．Ｎｅｔ、ＣＧＩスクリプト、Ｊａｖａ（登録商標）、ＪａｖａＳｃｒｉｐｔ（登録商標）、ＰＥＲＬ、ＰＨＰ、Ｐｙｔｈｏｎ、ＷｅｂＯｂｊｅｃｔｓ等のファシリティーを利用する。メールサーバー６１９は、ＩＭＡＰ（Internet Message Access Protocol）、ＭＡＰＩ（Messaging Application Programming Interface）、マイクロソフトＥｘｃｈａｎｇｅ、ＰＯＰ（Post Office Protocol）、ＳＭＴＰ（Simple Mail Transfer Protocol）等の通信プロトコルを利用する。いくつかの実施形態では、コンピューターシステム６０１は、プログラムコンポーネント内に保存されているメールクライアント６２０を実行する。メールクライアント６２０は、アップルメール、マイクロソフトＥｎｔｏｕｒａｇｅ、マイクロソフトＯｕｔｌｏｏｋ、Ｍｏｚｉｌｌａ  Ｔｈｕｎｄｅｒｂｉｒｄ等のメール閲覧アプリケーションである。
【００５０】
いくつかの実施形態では、コンピューターシステム６０１は、本開示で説明したようなデータ、変数、記録、モジュール等のユーザー／アプリケーションデータ６２１を保存する。このようなデータベースは、フォールトトレラント（fault-tolerant）で、相関的で（relational）、拡張可能で（scalable）、安全な、ＯｒａｃｌｅやＳｙｂａｓｅ等のデータベース等である。また、このようなデータベースは、アレイ、ハッシュ、リンクリスト、構造体、構造化テキストファイル（例えば、ＸＭＬ）、テーブル等の規格化されたデータ構造やオブジェクト指向ベータベース（例えば、ＯｂｊｅｃｔＳｔｏｒｅ、Ｐｏｅｔ、Ｚｏｐｅ等）を用いて実行される。このようなデータベースは、集約され（consolidated）、または上述の様々なコンピューターシステム間で配布される。任意のコンピューターまたはデータベースコンポーネントの動作および構造は、組み合わせ可能であり、集約可能であり、どのような実際の組み合わせ例に対しても配布可能であることは理解されるところであろう。
【００５１】
図示されたステップは、図示の好ましい実施形態を説明するために用意されたものであり、進行している技術の発展は、特定の機能が実行される方法を変化させうることは予期されるであろう。これらの例は、図示する目的で存在しており、限定ではない。さらに、機能的に組み立てられたブロックの境界は、特定の機能およびそれらの関係が適切に実行される限り、任意に定義する事ができる。代替的な境界は、特定の機能およびそれらの関係が適切に実行される限り、定義することができる。関連のある分野における当業者にとって、ここで開示された技術に基づいて、代替手段（ここで述べられたものの同等物、拡張物、バリエーション、偏差等）は、明らかであろう。このような代替手段は、開示された実施例の範囲および考え方の範囲内である。また、特徴を図示している本発明の複数の実施形態が説明される。明細書中、「構成する」、「有する」、「含む」、「備える」およびそれらの他の形式は、同等な意味であり、ある事項またはこれらの文言のいずれか１つに続く事項はそのような事項の包括的なリストであるような意味ではなく、また、列挙された事項のみに限定されるという意味ではない。また、明細書および添付の請求項において使用されるように、単数形“a”、“an”、“the”は、文脈が明確に示していなければ、複数形も含むことに注意しなければならない。
【００５２】
さらに加えて、１つ以上のコンピューター読み取り可能保存メディア（non-transitory computer-readable storage media）を、本発明と矛盾のない実施形態の実装において、利用することができる。コンピューター読み取り可能保存メディアは、情報やデータがプロセッサーによって読み出せるように保存されている任意のタイプの物理メモリーである。したがって、コンピューター読み取り可能保存メディアは、１つ以上のプロセッサーによる実行されるインストラクションを保存しており、ここで述べた実施形態と矛盾のないステップやステージをプロセッサーに実行させるようなインストラクションを含む。用語“コンピューター読み取り可能媒体（computer-readable medium）”は、具体的な物品を含み、搬送波および過渡信号を含まないこと、すなわち、非一時的（non-transitory）であることは理解されるであろう。例として、ランダムアクセスメモリー（ＲＡＭ）、リードオンリーメモリー（ＲＯＭ）、揮発性メモリー、不揮発性メモリー、ハードドライブ、ＣＤＲＯＭ、ＤＶＤ、フラッシュドライブ、ディスク、およびその他既知の物路保存メディアが挙げられる。
【００５３】
本開示および実施例は例示として説明されたものであって、本実施形態の真の範囲および概念は、以下の特許請求の範囲によって表される。
【図１】
0005619980.tif 000003
【図２】
0005619980.tif 000004
【図３】
0005619980.tif 000005