以下の発明の詳細な説明は、単なる例示であり、且つ実施態様若しくは実施態様の適用若しくは使用又はそれらの組み合わせを限定することが意図されるものでない。その上、前述の「技術分野」若しくは「発明の概要」の項、又は「発明を実施するための形態」の項に示されている明示又は黙示の情報に拘束される意図はない。
ここで、1以上の実施態様が図面を参照して説明されるが、全体を通して同様の参照番号は同様の要素を指す為に使用されている。以下の説明において、説明の目的の為に、1以上の実施態様のより完全な理解を提供する為に、多数の特定の詳細が記載されている。しかしながら、様々な場合において、1以上の実施態様がこれらの特定の詳細なしに実施されることができることは明らかである。
人工知能(「AI:Artificial intelligence」)モデルは、様々なソースコード理解タスク(source code understanding tasks)、例えば、欠陥検出、コード要約、コード補完、バグ修正、関数及び変数の命名、コード推奨若しくはソフトウェア開発ワークフロー又はそれらの組み合わせ等、において使用される。しかしながら、AIモデルの品質は、該モデルがソースコードのタスク関連の観点を学習しているかどうかに基づいて妨げられる可能性があり、特には、小さな入力摂動(input perturbations)が誤った予測につながる可能性がある場合である。
本発明の様々な実施態様が、コードの複雑さのアウェアネス(awareness)を組み込むことができる、効率的、効果的、及び自律的な(例えば、直接的な人間の案内なし)のAIモデルトレーニングを容易にするところの、コンピュータ処理システム、コンピュータに実装された方法、装置、コンピュータプログラム若しくはコンピュータプログラム製品又はそれらの組み合わせを対象とすることができる。例えば、本明細書において記載されている1以上の実施態様が、コードの複雑さに基づいてソースコードサンプルを介して1以上のAIモデルをトレーニングすることができる。例えば、本明細書における1以上の実施態様は、トレーニングデータセットに含まれるソースコードサンプルから1以上の複雑性メトリックを抽出することができる。さらに、本明細書において記載されている様々な実施態様は、抽出された複雑性メトリックに基づいてソースコードサンプルをランク付けすることができる。加えて、本明細書において記載されている1以上の実施態様は、ランキングに基づくトレーニングの為に、ソースコードサンプルをAIモデルに供給することができる。例えば、該AIモデルは、ソースコードの複雑さの順にソースコードサンプルでトレーニングされることができる。例えば、該AIモデルをトレーニングする為に使用されるソースコードサンプルの複雑さは、該トレーニングの実行中に増加する可能性がある。
コンピュータ処理システムコンピュータに実装された方法、装置、コンピュータプログラム若しくはコンピュータプログラム製品又はそれらの組み合わせは、ハードウェア若しくはソフトウェア又はそれらの組み合わせを使用して、本質的に高度に技術的で、抽象的でなく、人間による一連の精神的行為として実行することができない問題(例えば、AIモデルをトレーニングすること)を解決する。例えば、1個人又は複数の個人は、1以上のAIモデルをトレーニングする為に使用される膨大な量のソースコードデータを容易に分析し、そしてランク付けすることはできない。また、本明細書において記載されている1以上の実施態様は、コードの複雑さのアウェアネスをトレーニング技法に組み込むことによって、慣用的なAIモデルトレーニングに対する技術的改善を構成することができる。さらに、本明細書において記載されている1以上の実施態様は、AIモデルの品質を改善することによって実用的なアプリケーションを有することができる。例えば、本明細書において記載された様々な実施態様は、タスク関連信号に関するAIモデルのトレーニングを容易にすることができる。加えて、本明細書において記載されている様々な実施態様は、ソースコードサンプルがトレーニング中にAIモデルに供給されるところの順序を制御することができる。
図1は、1以上のソースコード理解タスクの為に、1以上のAIモデルのトレーニングにおいて、コードの複雑さのアウェアネスを組み込むことができる例示の非限定的なシステム100のブロック図を示す。本明細書において記載されている他の実施態様において使用される同様の要素の繰り返しの記載は、簡潔の為に省略されている。本発明の様々な実施態様におけるシステム(例えば、システム100等)、装置又は方法の観点は、1以上のマシン内で具現化された1以上のマシン実行可能なコンポーネント、例えば、1以上のマシンに関連付けられた1以上のコンピュータ可読媒体内で具現化された1以上のマシン実行可能なコンポーネント、を構成する。そのようなコンポーネントは、1以上のマシン(例えば、コンピュータ、コンピューティングデバイス若しくは仮想マシン又はそれらの組み合わせ等)によって実行される場合に、本明細書において記載されている動作を該マシンに実行させることができる。
図1に示されているように、システム100は、1以上のサーバ102、1以上のネットワーク104、及び1以上の入力デバイス106を備えていることができる。サーバ102は、トレーニングコンポーネント110を備えていることができる。トレーニングコンポーネント110はさらに、通信コンポーネント112及び抽出コンポーネント114を備えていることができる。また、サーバ102は、少なくとも1つのメモリ116を備えているか、又は少なくとも1つのメモリ116に関連付けられていることができる。サーバ102はさらに、様々なコンポーネント、例えばトレーニングコンポーネント110及び関連付けられたコンポーネント、メモリ116若しくはプロセッサ120又はそれらの組み合わせに限定されない様々なコンポーネント、に接続することができるシステムバス118を備えていることができる。サーバ102が図1に示されているが、他の実施態様において、様々なタイプの複数のデバイスが、図1に示されている機能に関連付けられているか又はこれらの機能を備えていることができる。更に、サーバ102は1以上のクラウドコンピューティング環境と通信することができる。
1以上のネットワーク104は、有線及び無線ネットワーク、例えば、セルラーネットワーク、ワイドエリアネットワーク(WAN:wide area network)(例えば、インターネット)又はローカルエリアネットワーク(LAN:local area network)を包含するが、これらに限定されない上記有線及び無線ネットワーク、を包含することができる。例えば、サーバ102は、事実上、任意の所望の有線技術又は無線技術、例えばセルラー、WAN、ワイファイ(Wi-Fi:wireless fidelity)、Wi-Max、WLAN若しくはブルートゥース(登録商標)(Bluetooth(登録商標))技術又はそれらの組み合わせ等を包含するがこれらに限定されない上記の有線技術又は無線技術、を使用して、1以上の入力デバイス106と通信することができる(逆もまた同様)。更に、示された実施態様において、トレーニングコンポーネント110は1以上のサーバ102上に設けられることができるが、システム100のアーキテクチャはこれに限定されないことが理解されるべきである。例えば、1つのトレーニングコンポーネント110、又はトレーニングコンポーネント110の1以上のコンポーネントは、別のコンピュータデバイス、例えば、別のサーバデバイス、クライアントデバイス等、において配置されることができる。
1以上の入力デバイス106が、1以上のコンピュータ化されたデバイスを備えていることができ、それは、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、携帯電話(例えば、スマートフォン)、コンピュータ化されたタブレット(例えば、プロセッサを備えている)、スマートウォッチ、キーボード、タッチスクリーン若しくはマウス又はそれらの組み合わせ等を包含するが、これらに限定されない。1以上のソースコードサンプル122若しくはAIモデル124又はそれらの組み合わせをシステム100に入力し、それによって、上記のデータをサーバ102と(例えば、直接接続を介して若しくは1以上のネットワーク104を介して又はそれらの組み合わせを介して)共有する為に、1以上の入力デバイス106が使用される。例えば、1以上の入力デバイス106は、データを通信コンポーネント112に(例えば、直接接続を介して若しくは1以上のネットワーク104を介して又はそれらの組み合わせを介して)送信することができる。加えて、1以上の入力デバイス106は、システム100によって生成された1以上の出力をユーザに提示することができる1以上のディスプレイを備えることができる。例えば、該1以上のディスプレイは、陰極管ディスプレイ(「CRT:cathode tube display」)、発光ダイオードディスプレイ(「LED:light-emitting diode display」)、エレクトロルミネセンスディスプレイ(「ELD:electroluminescent display」)、プラズマディスプレイパネル(「PDP:plasma display panel」)、液晶ディスプレイ(「LCD:liquid crystal display」)若しくは有機発光ダイオードディスプレイ(「OLED:organic light-emitting diode」)又はそれらの組み合わせ等を包含するが、これらに限定されない。
様々な実施態様において、1以上の入力デバイス106若しくは1以上のネットワーク104又はそれらの組み合わせが、1以上の設定若しくは1以上の設定コマンド又はそれらの組み合わせをシステム100に入力する為に使用されることができる。例えば、本明細書において記載されている様々な実施態様において、1以上の入力デバイス106が、サーバ102を操作すること若しくは操ること又はそれらの組み合わせを行う為に若しくはコンポーネントを関連付ける為に又はそれらの組み合わせを行う為に使用されることができる。加えて、1以上の入力デバイス106が、サーバ102若しくは関連コンポーネント又はそれらの組み合わせによって生成された1以上の出力(例えば、ディスプレイ、データ、視覚化等)を表示する為に使用されることができる。さらに、1以上の実施態様において、1以上の入力デバイス106が、クラウドコンピューティング環境内に含まれることができるように、又はクラウドコンピューティング環境に接続されることができるように、又はラウドコンピューティング環境内に含まれ且つ接続されることができるように、動作可能に接続されうる。
例えば、1以上の実施態様において、1以上の入力デバイス106が、1以上のソースコードサンプル122をシステム100内に入力する為に使用されることができ、ここで、該1以上のソースコードサンプル122は、1以上のメモリ116内に格納されることができる。更に、トレーニングコンポーネント110は、1以上のソースコードサンプル122を利用して、(例えば、1以上のソースコード理解タスクの為に)1以上のAIモデル124をトレーニングすることができる。1以上の実施態様において、1以上の入力デバイス106がまた、1以上のAIモデル124をシステム100内に入力する為に使用されることができ、ここで、該1以上のAIモデル124は1以上のメモリ116内に格納されることができ、若しくはトレーニングコンポーネント110によってトレーニングする為に使用されることができ、又は、上記の入力且つトレーニングをする為に使用されることができる。更に、様々な実施態様において、1以上の入力デバイス106が、AIモデル124トレーニングの1以上の設定若しくはパラメータ又はそれらの組み合わせを定義する為に使用されることができる。例えば、1以上の入力デバイス106が、本明細書において記載された1以上の実施態様に従って、1以上のコード複雑性メトリックを定義する為に使用されることができる。様々な実施態様において、通信コンポーネント112は、本明細書において記載されている1以上の実施態様に従って、1以上の入力(例えば、1以上の入力デバイス106を介してシステム100内に入力される)をトレーニングコンポーネント110の関連コンポーネントと共有することができる。
様々な実施態様において、1以上のAIモデル124が、1以上の機械学習タスクを容易にする為に使用されることができる。1以上の実施態様において、AIモデル124は、抽象バージョンのニューロンに似ている可能性がある、相互接続された多数の処理ユニットをシミュレートすることができる。例えば、該処理ユニットは、接続強度(例えば、当技術分野では一般的に「重み」(weights)と云われることができる)を変えることによって、接続された複数の層(例えば、1以上の入力層、1以上の隠れ層、若しくは1以上の出力層又はそれらの組み合わせ)に配置されることができる。AIモデル124はトレーニングを通じて学習することができ、ここで、既知の結果を有するデータがコンピュータモデル内に入力され、該データに関する出力が既知の結果と比較され、若しくはコンピュータモデルの重みが比較に基づいて自律的に調整されて、既知の結果が再現され、又は上記比較と上記再現とが組み合わされて実行される。1以上のAIモデル124がトレーニングするにつれて、該コンピュータモデルはますます正確になることができる。従って、トレーニングされたAIモデル124は、トレーニングデータから学習した教訓に基づいて、不明な結果を有するデータを正確に分析して、1以上の機械学習タスクを容易にすることができる。例示的なAIモデル124は、パーセプトロン(「P」perceptron)、フィードフォワード(「FF」,feed forward)、動径基底関数ネットワーク(「RBF」,radial basis network)、ディープフィードフォワード(「DFF」,deep feed forward)、リカレントニューラルネットワーク(「RNN」,recurrent neural network)、長期/短期記憶メモリ(「LSTM」long/short term memory)、gated recurrent unit (「GRU」,gated recurrent unit)、オートエンコーダ(「AE」、auto encoder)、変分AE(「VAE」,variational AE)、ディノイジングAE(「DAE」,denoising AE)、スパースAE(「SAE」,sparse AE)、マルコフ連鎖(「MC」,markov chain)、ホップフィールド・ネットワーク(「HN」,Hopfield network)、ボルツマン・マシン(「BM」,Boltzmann machine)、ディープ・ビリーフ・ネットワーク(「DBN」,deep belief network)、ディープ畳み込みネットワーク(「DCN」,deep convolutional network)、デコンボリューショナルネットワーク(「DN」,deconvolutional network)、ディープ・コンボリューショナル逆グラフィックネットワーク(「DCIGN」,deep convolutional inverse graphics network)、敵対的生成ネットワーク(「GAN」,generative adversarial network)、リキッドステートマシン(「LSM」,liquid state machine)、エクストリーム・ラーニング・マシン(「ELM」,extreme learning machine)、エコー状態ネットワーク(「ESN」,echo state network)、ディープ・レジデュアル・ネットワーク(「DRN」,deep residual network)、コホネン・ネットワーク(「KN」,kohonen network)、サポートベクターマシン(「SVM」,support vector machine)、若しくはニューラルチューリングマシン(「NTM」,neural turing machine)又はそれらの組み合わせを包含することが出来るが、これらに限定されない。
1以上の実施態様において、トレーニングコンポーネント110は、1以上のソースコード理解タスクの為に1以上のソースコードサンプル122で1以上のAIモデル124をトレーニングし、ここで、ソースコードサンプル122は、コードの複雑さ(例えば、1以上の複雑性メトリックによって定義されるコードの複雑さ)に基づいてランク付けされることができる。例えば、抽出コンポーネント114は、1以上のコードの複雑性メトリックを1以上のソースコードサンプル122から抽出することができる。本明細書において言及される場合に、語「コードの複雑さ」は、所与のコンピュータアプリケーションソースコードに固有の複雑さを云うことができる。コードの複雑さは、コンピューターソフトウェアの効率に影響を与える可能性がある。例えば、コードの複雑さが増大するにつれて、欠陥を含むソースコードサンプルの可能性がまた、増す可能性がある。
様々な実施態様において、コードの複雑さは、1以上の複雑性メトリック126、若しくは複数の複雑性メトリック126の関数(function of multiple complexity metrics)又はそれらの組み合わせを介して、循環的複雑さ(cyclomatic complexity)若しくはハルステッド複雑さ(Halstead complexity)又はそれらの組み合わせの観点から測定することができる。例えば、1以上の複雑性メトリック126は、循環的複雑性メトリック(cyclomatic complexity metric)、コードのソース行数(「SLOC」:source lines of code)(例えば、ソースコード若しくは実行可能コード又はそれらの組み合わせの行数)、ハルステッドボリューム(Halstead volume)、保守性指標(maintainability index)、継承のカップリング/深さ(coupling/depth of inheritance)、コグニティブの複雑さ(cognitive complexity)、リワーク率(rework ratio)、プラグラムボリューム(program volume)、プログラム難易度計算(program difficulty calculation)(例えば、ソースコードを書くこと又は理解することの難しさ)、労力の計算(effort calculation)(例えば、コーディング時間の尺度)、プログラムの長さ尺度、プログラム語彙尺度、クラスの数、コメント行の数、コメント行の密度、ディレクトリの数、ファイルの数、関数の数、ビュー内のプロジェクトの数、ステートメント(statements)の数、又はそれらの組み合わせ等の尺度であるが、これらに限定されない。1以上の実施態様において、1以上の複雑性メトリック126は、ソースコードサンプル122に含まれている1以上のセマンティックアーティファクトの関数であることができる。例示的なアーティファクトは、決定点、if条件、反復ループ、線形独立パスの数、所与のソースコードを変更するコミットの数、所与のソースコードに貢献している開発者の数、所与のソースコードに関連付けられた会話の数、又はそれらの組み合わせ等を包含するが、これらに限定されない。例えば、コードの複雑さは、ソースコードを通るパスの数に基づいて計算されることができる。関数の制御フローが分割される場所では、該複雑さが増大する可能性がある(例えば、複雑さカウンターは分割ごとに段階的に増加する可能性がある)。
様々な実施態様において、抽出コンポーネント114は、1以上のAIモデル124をトレーニングする為に各ソースコードサンプル122を分析することができる。更に、抽出コンポーネント114は、各ソースコードサンプル122に関して1以上の複雑性メトリック126を抽出して、ソースコードサンプル122のコードの複雑さを判断することができる。例えば、抽出コンポーネント114は、ソースコードサンプル122の各々から1つのタイプの複雑性メトリック126を抽出して、ソースコードサンプル122のコードの複雑さを特徴付けることができる。別の例において、抽出コンポーネント114は、各ソースコードサンプル122から複数のタイプの複雑性メトリック126を抽出して(例えば、ソースコードサンプルごとに2つ以上の複雑性メトリック126を抽出する)、ソースコードサンプル122のコードの複雑さを特徴付けることができる。様々な実施態様において、抽出コンポーネント114は、ソースコードサンプル122から抽出された複数の複雑性メトリック126の関数として、ソースコードサンプル122のコードの複雑さを特徴付けることができる。1以上の複雑性メトリック126を抽出する為に抽出コンポーネント114によって使用される抽出方法は、抽出される複雑性メトリック126に応じて変化することができる。例えば、抽出コンポーネント114は、Frama-Cを使用して、1以上の複雑性メトリック126を抽出することができる。例えば、1以上の複雑性メトリック126が、ソースコードサンプル122の1以上の関連アーティファクトをカウントする(例えば、コードの行をカウントする)ことによって抽出されることができる。別の例において、抽出コンポーネント114は、1以上の複雑性メトリックを抽出する為の1以上の分析ツール、例えば、循環的複雑性アナライザー(cyclomatic complexity analyzer)(例えば、リザード(Lizard)アナライザーツール)、マッケーブ(McCabe)複雑性アナライザー(例えば、マッケーブ(mccabe)アナライザーツール)、ピコドイーコル(pycodequal)アナライザーツール、ゼノン(xenon)アナライザーツール、シクロコンプ(cyclocomp)アナライザーツール、サイクロ(saikuro)アナライザーツール、シメトリクス(cmetrics)アナライザー、シーエスカウント(cscout)アナライザーツール、これらの組み合わせ等を包含するが、これらに限定されない。
1以上の実施態様において、抽出コンポーネント114は、1以上の複雑性データベース128中の関連するソースコードサンプル122の識別とともに、1以上のメモリ116中の1以上の抽出された複雑性メトリック126を格納することができる。例えば、1以上の複雑性データベース128は、分析されたソースコードサンプル122、及び各分析されたソースコードサンプル122に関連付けられた抽出複雑性メトリック126をリストする1以上のチャート、テーブル、ログ等を含むことができる。
図2は、本明細書において記載されている1以上の実施態様に従うランク付けコンポーネント202をさらに備えている、例示の非限定的なシステム100の図を示す。本明細書において記載されている他の実施態様において使用される同様の要素の繰り返しの記載は、簡潔の為に省略されている。様々な実施態様において、ランク付けコンポーネント202は、1以上の抽出複雑性メトリック126に基づいてコードの複雑さのプログレッシブ順序で1以上のソースコードサンプル122をランク付けすることができる。
例えば、ランク付けコンポーネント202は、抽出された1以上の複雑性メトリック126によって定義されている通り、コードの複雑さを増大させることによって、トレーニング中に含まれるソースコードサンプル122をランク付けすることができる。ランク付けコンポーネント202によって実行される複雑性ランク付けは、例えば、単一の抽出された複雑性メトリック126、複数の複雑性メトリック126、若しくは複数の複雑性メトリック126の関数又はそれらの組み合わせに基づくことができる。1以上の実施態様において、1以上の入力デバイス106が、どの1以上の複雑性メトリック126がランク付けコンポーネント202によって実行されるランキングの基礎として機能できるかを定義する為に使用されることができる。例えば、1以上の入力デバイス106が、ランク付けコンポーネント202に、個々のSLOC尺度に従ってソースコードサンプル122をランク付けするように指示する為に使用されることができる。1以上の実施態様において、ランク付けコンポーネント202は、抽出コンポーネント114によって抽出された複数の複雑性メトリック126の関数(例えば、1以上の入力デバイス106によって定義される)に基づいて、1以上のソースコードサンプル122をランク付けすることができる。様々な実施態様において、ランク付けコンポーネント202は、トレーニングされるべきAIモデル124のタイプ若しくは完了されるべきソースコード理解タスク又はそれらの組み合わせに基づいて、ランキングの基礎となる複雑性メトリック126を選択することができる。どの複雑性メトリック126が該ランキングの基礎を形成するかを選択することにより、1以上の入力デバイス106は、AIモデル124の学習に影響を与える為に、使用されることができる。
様々な実施態様において、トレーニングコンポーネント110は、ランク付けコンポーネント202によって実行されるランク付けに基づく順序で、1以上のソースコードサンプル122をサンプリングすることができる。例えば、トレーニングコンポーネント110は、(例えば、コードの複雑さの観点において)複雑さが増大する複数のソースコードサンプル122をプログレッシブにサンプリングすることができる。それによって、トレーニングコンポーネント110は、最初はトレーニング中に(例えば、コードの複雑さの観点において)それほど複雑でない複数のソースコードサンプル122で1以上のAIモデル124をトレーニングし、そして、サンプルの複雑さをプログレッシブに増大させることができる。例えば、トレーニングコンポーネント110は、ランク付けコンポーネント202によって実行される複雑さに基づくランク付けに従って、ソースコードサンプル122をサンプリングすることができる。
ソースコードサンプル122は、該AIモデルによる学習の為に必要な同じ特性を含むことができ、一方、最初のソースコードサンプル122は、該AIモデルが正確に分析することが(例えば、トレーニングデータセットのより複雑なソースコードサンプルと比較して)相対的に容易である可能性がある。コードの複雑さが増大するソースコードサンプル122をプログレッシブに選択することにより、AIモデルのパフォーマンスを向上させることができる。例えば、コードの複雑さがより高いソースコードサンプル122ほど、(例えば、AIモデル124に割り当てられたソースコード理解タスクに関係のないステートメント若しくは構造又はそれらの組み合わせの形態で)ノイズの量が多くなる可能性がある。ノイズの多いサンプルの導入をトレーニングプロセスにおける後半まで保留することによって、AIモデル124は、以前のトレーニングの反復を活用してその学習を改善することができる。
本明細書において記載されている様々な実施態様の有効性を実証する為に、システム100は、複数のデータセットにおける脆弱性検出のユースケースに関して使用された。しかしながら、様々な実施態様は、他のソースコード理解タスクに適用可能である。システム100の有効性を実証する為に使用される例示的なデータセットは、s-bAbI合成データセット(「s-bAbI」)、ジュリエットテストスイート(the Juliet Test Suite)(「ジュリエット」)及びD2Aデータセットを包含する。該s-bAbI、ジュリエット及びD2Aのデータセットが、本明細書において記載されている様々な実施態様の有効性を実証する為に使用される。しかしながら、トレーニングコンポーネント110の機能は、例示的なs-bAbI、ジュリエット及びD2Aのデータセットに限定されず、むしろ、他のソースコードのデータセットが分析されることができる。S-bAbIは、バッファオーバーフローの脆弱性に焦点を当てた、重要な制御フローを有する構文的に有効なCプログラムを含む。脆弱性検出タスクの目的の為に、s-bAbIジェネレーターが、データセットを作成する為に使用され、ここで、「UNSAFE」タグを有するサンプルは1のラベル付けがされることができ、及び「SAFE」タグを有するサンプルは0のラベル付けがされることができる。ジュリエットデータセットは、静的アナライザーをテストする為に設計された、様々な脆弱性タイプを有する合成サンプルを含む。ジュリエットのテストケースから、「悪い(bad)」としてタグ付けされ且つジュリエットのmanifest.xmlに従って明確なバグ情報を有するところのサンプルは、1としてラベル付けされることができ、一方、「良い(good)」としてタグ付けされたサンプルは、0としてラベル付けされることができる。該D2Aデータセットは、複数のGithubプロジェクト、すなわち、OpenSSL、FFMpeg、HTTPD、Nginx及びlibtiff、で構築された実際の脆弱性検出データセットである。該D2Aデータセットは、バグ修正コミットの前後に、連続したリポジトリバージョンのインファー静的アナライザー(Infer static analyzer)の出力に加えて差分分析を使用して導出された、詳細なトレースレベルのバグ情報を含む。D2Aトレースから関数レベルのサンプルを抽出すると、(例えば、修正前のコミットから)1としてラベル付けされたトレーニング関数と、(例えば、修正後のコミットから)0としてラベル付けされたトレーニング関数とをもたらすことができる。
1以上の実施態様において、グラフニューラルネットワーク(graph neural network)(「GNN」)AIモデル124が、システム100の有効性を実証する為に使用されることができる。GNNモデルは、ソースコードのグラフレベル表現を操作することができる。例えば、GNNモデルはコードプロパティグラフのバグパターンを学習することができる。様々な例において、埋め込みサイズが64にされることができ、その後に256の隠れサイズと5つのアンローリングタイムステップ(unrolling time steps)を有するGNN層が続く。ノード表現は、全てのノードトークンの埋め込みの合計によって取得されることができ、及びグラフ表現の読み出しは、グローバルアテンション層(global attention layer)として構築されることができる。最終的な予測は、256個と2個の出力次元を有する2層の多層パーセプトロンによって生成されることができる。本明細書において記載されている様々な実施態様に従うと、トレーニングコンポーネント110は、様々なデータ分割(例えば、80:10:10のトレーニング(train):検証(validate):テスト(test)の分割)若しくは最適化スキーム(例えば、ドロップアウト若しくは異なるトレーニング損失、クロスエントロピー損失、又はそれらの組み合わせ)又はそれらの組み合わせにわたって1以上のAIモデル124をトレーニングすることを容易にすることができる。
図3は、本明細書において記載されている1以上の実施態様に従う、難易度尺度(difficulty measure)の複雑性メトリック126に関して、s-bAbIソースコードサンプルの為の複雑さの分布を示すことができる例示の非限定的なグラフ300の図を示す。本明細書において記載されている他の実施態様において使用される同様の要素の繰り返しの記載は、簡潔の為に省略されている。図3に示されているように、s-bAbIデータセットは、(例えば、難易度尺度の複雑さのメトリックによって特徴付けられるような)コードの複雑さが変化するソースコードサンプル122を含むことができる。様々な実施態様において、抽出コンポーネント114は、本明細書において記載されている様々な実施態様に従って、複雑性メトリック126の抽出に基づいてグラフ300を生成することができる。
図4は、本明細書において記載されている1以上の実施態様に従って、従来のトレーニング技法と比較したシステム100の有効性を実証することができる例示の非限定的なグラフ400の図を示す。本明細書において記載されている他の実施態様において使用される同様の要素の繰り返しの記載は、簡潔の為に省略されている。グラフ400は、複雑さが増大する複数のソースコードサンプル122において、ソースコードサンプル122でAIモデル124をトレーニングすることによって、AIモデル124の性能が著しく改善されることができることを実証することができる。リコール(recall)が、図4~図5における例示的なAIモデル124の性能を評価する為に性能測定基準として利用される。高められた性能は信号アウェアネスに限定されない。
グラフ400は、GNN AIモデルに関して、s-bAbIデータセットにおいてシステム100を使用することから生成された結果を示す。図4に示されているように、「ベースライン」は、従来のトレーニング構成(例えば、ランダム化されたサンプリング)に関する結果を云うことができる。「ボリューム」(volume)は、ボリューム尺度の複雑性メトリック126が、ソースコードサンプル122をランク付けする為に使用されるところのAIモデル124をトレーニングするシステム100に関する結果を云うことができる。「sloc」は、SLOCの複雑性メトリック126が、ソースコードサンプル122をランク付けする為に使用されるところのAIモデル124をトレーニングするシステム100に関する結果を云うことができる。「労力」(effort)は、労力尺度の複雑度メトリック126がソースコードサンプル122をランク付けする為に使用されるところのAIモデル124をトレーニングするシステム100に関する結果を云うことができる。「難易度」(difficulty)は、難易度尺度の複雑性メトリック126がソースコードサンプル122をランク付けするために使用されるところのAIモデル124をトレーニングするシステム100に関する結果を云うことができる。
図4に示されているように、リコールメトリック(recall metric)は、トレーニングコンポーネント110を介して達成されることができる改善されたAIモデル124の性能を実証する為に使用されることができる。脆弱性検出のコンテキストにおいて(例えば、本明細書において記載されているグラフ、例えばグラフ400、を生成する為に使用されるソースコード理解タスク)、該リコールメトリックは、AIモデル124が正しく生成するところの脆弱なサンプルの割合(例えば、真の積極的予測)を測定することができる、残りの予測は偽陰性である。例えば、真の積極的予測それぞれは、ループ内のAIモデル124を使用して、デルタ-デバッギング(Delta-Debugging)スタイルの最小化サイクルに付されることができる。引き続き、AIモデル124は、真の積極的予測サンプル1-最小バージョン(true positive prediction samples 1-minumal version)のそれぞれにおけるその予測について照会されることができる。更に、1-最小バージョンは、元のプログラムサンプルのバグの有無について確認されることができる。グラフ400は、システム100によって実行される複雑さに基づくランク付けされたトレーニングが、コードの複雑さのアウェアネストレーニングによって該AIモデルの性能を向上させることができることを実証する。例えば、難易度尺度の複雑性メトリック126に基づくランク付けは、従来のトレーニング技法と比較して、32%の改善を達成することができる。
図5は、本明細書において記載されている1以上の実施態様に従う、従来のトレーニング技法と比較したシステム100の有効性を実証することができる、例示の非限定的なグラフ500の図を示す。本明細書において記載されている他の実施態様において使用される同様の要素の繰り返しの記載は、簡潔の為に省略されている。グラフ500は、複数の複雑さでランク付けされたトレーニングスキームにわたるGNN AIモデルに関する。図5は、本明細書において記載されている様々な実施態様の有効性を実証する為に、GNN AIモデル124を使用しているが、トレーニングコンポーネント110は、他のタイプのAIモデル124のトレーニング若しくはパフォーマンス又はそれらの組み合わせを高める為に使用されることができる(例えば、トレーニングコンポーネント110の特徴は、GNN AIモデル124に限定されない)。
図6は、本明細書において記載されている1以上の実施態様に従って、様々なトレーニング構成を介してトレーニングされたAIモデル124の為に検証性能曲線を比較することができる例示の非限定的なグラフ602の図を示す。本明細書において記載されている他の実施態様において使用される同様の要素の繰り返しの記載は、簡潔の為に省略されている。グラフ602は、ジュリエット(Juliet)データセットでトレーニングされたGNN AIモデル124の為に複雑さでランク付けされたトレーニングによってモデル学習がどのように変化することができるかを示すことができる。線604は、ランダムサンプリングトレーニング構成とみなすことができる。線606は、SLOCの複雑性メトリック126に基づいて、複雑さでランク付けされたサンプリングとみなすことができる。線608は、難易度尺度(difficulty measure)の複雑性メトリック126に基づいて、複雑さでランク付けされたサンプリングとみなすことができる。線610は、ボリューム尺度(volume measure)の複雑性メトリック126に基づいて、複雑さでランク付けされたサンプリングとみなすことができる。線612は、労力尺度(effort measure)の複雑さメトリック126に基づいて、複雑さでランク付けされたサンプリングとみなすことができる。
グラフ602は、様々なトレーニング構成、例えばランダムサンプリングトレーニング対複雑さでランク付けされたトレーニングスキームを包含する上記の様々なトレーニング構成、の為に検証精度曲線を表すことができる。該検証精度曲線は検証セットにおけるAIモデルのトレーニングが進むので、該検証精度曲線は検証セットにおけるAIモデルの暫定的な精度を表すことができる。図6は、ランダムサンプリング及び複雑さでランク付けされたサンプリングスキームの両方が、本明細書において記載されている様々な実施態様に従って、複雑さでランク付けされたサンプリングを用いて異なるトレーニングルートを介して90%超の精度に達することができることを示す。
図7は、本明細書において記載されている1以上の実施態様に従って、様々なトレーニング構成を介してトレーニングされたAIモデル124の為に検証性能曲線を比較することができる例示の非限定的なグラフ700の図を示す。本明細書において記載されている他の実施態様において使用される同様の要素の繰り返しの記載は、簡潔の為に省略されている。グラフ700は、D2AデータセットでトレーニングされたGNN AIモデル124の為に複雑さでランク付けされたトレーニングによってモデル学習がどのように変化することができるかを示すことができる。GNN AIモデル124及びD2Aデータセットは、本明細書において記載されている様々な実施態様の有効性を実証するために使用されるが、システム100のアーキテクチャはそのように限定されない。例えば、トレーニングコンポーネント110は、本明細書において記載されている1以上の実施態様に従って、様々なデータセットにおける様々なAIモデル124の為に複雑さに基づくサンプリングを容易にすることができる。線702は、ランダムサンプリングトレーニング構成とみなすことができる。線704は、循環的複雑性メトリック126に基づいて、複雑さでランク付けされたサンプリングとみなすことができる。線706は、SLOCの複雑性メトリック126に基づいて、複雑さでランク付けされたサンプリングとみなすことができる。様々な実施態様において、トレーニング経路若しくは学習挙動又はそれらの組み合わせは、異なるデータセットとモデルメトリックとの組み合わせによって異なる可能性がある(例えば、複雑さに基づくサンプリングは、自然なトレーニングと同じか又はそれより少ないエポック(epoch)において最適な精度を達成することができる)。
図8は、本明細書において記載されている1以上の実施態様に従って、1以上のAIモデル124をトレーニングする為にシステム100によって使用されることができる例示の非限定的な、コンピュータに実装された方法800の流れ図を示す。本明細書において記載されている他の実施態様において使用されている同様の要素の繰り返しの記載は、簡潔の為に省略されている。
工程802で、コンピュータに実装された方法800は、1以上のソースコード理解タスクの為に、1以上のAIモデル124を、プロセッサ120に動作可能に接続されたシステム100によって(例えば、通信コンポーネント112、ネットワーク104若しくは入力デバイス106又はそれらの任意の組み合わせを介して)受信することを含むことができる。ソースコード理解タスクの例は、欠陥検出、コード要約、コード補完、バグ修正、関数及び変数の命名、コード推奨、ソフトウェア開発ワークフロー又はそれらの組み合わせ等を包含することができるが、これらに限定されない。
工程804で、コンピュータに実装された方法 800は、ソースコードサンプル122における1以上のAIモデル124を、システム100によってトレーニング(例えば、トレーニングコンポーネント110を介して)を含むことができ、ここで、ソースコードサンプル122は、コードの複雑さに基づいてランク付けされることができる。本明細書において記載されている様々な実施態様に従うと、ソースコードサンプル122のコードの複雑さは、1以上のコードの複雑性メトリック126によって特徴付けられることができる(例えば、本明細書において記載された様々な実施態様に従って、抽出コンポーネント114によって抽出され、測定され若しくは決定され、又はそれらの任意の組み合わせが実行されることができる)。1以上の実施態様において、工程804でのトレーニングは、コードの複雑さが増大するソースコードサンプル122をプログレッシブにサンプリングすることができる。
図9は、本明細書において記載されている1以上の実施態様に従って、1以上のAIモデル124をトレーニングする為に、システム100によって使用されることができる例示の非限定的な、コンピュータに実装された方法900の流れ図を示す。本明細書において記載されている他の実施態様において使用される同様の要素の繰り返しの記載は、簡潔の為に省略されている。
工程902で、コンピュータに実装された方法900は、ソースコードサンプル122から1以上のセマンティックアーティファクトに関連付けられた1以上の複雑性メトリック126を、プロセッサ120に接続されたシステム100によって(例えば、抽出コンポーネント114を介して)抽出することを含むことができる。例えば、1以上の複雑性メトリック126は、ソースコードサンプル122の循環的複雑性若しくはハルステッド(Halstead)複雑性又はそれらの組み合わせを特徴付けることができる。
工程904で、コンピュータに実装された方法900は、1以上の抽出された複雑性メトリック126に基づいてコードの複雑さのプログレッシブ順序で該ソースコードサンプルを、システム100によって(例えば、ランク付けコンポーネント202を介して)ランク付けすることを含むことができる。例えば、ソースコードサンプル122は、コードの複雑さの増加に従ってランク付けされることができる。工程906で、コンピュータに実装された方法900は、該トレーニングが複雑さが増大する複数のソースコードサンプル122をプログレッシブにサンプリングするように、工程904におけるランク付けによって定義された順序でソースコードサンプル122をサンプリングして、1以上のAIモデルを、システム100によって(例えば、トレーニングコンポーネント110を介して)トレーニングすることを含むことができる。
本開示はクラウドコンピューティングに関する詳細な説明を含むが、本明細書に列挙される教示の実装はクラウドコンピューティング環境に限定されないことが理解されるべきである。むしろ、本発明の実施態様は、現在知られている又は後で開発される任意の他のタイプのコンピューティング環境と組み合わせて実装されることができる。
クラウドコンピューティングは、最小限の管理労力又はサービスのプロバイダとの相互作用で迅速にプロビジョニングされ且つ解放されることができる構成可能なコンピューティングリソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理(processing)、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス)の共有プールへの便利なオンデマンドネットワークアクセスを可能にする為のサービス提供のモデルである。このクラウドモデルは、少なくとも5つの特徴、少なくとも3つのサービスモデル、及び少なくとも4つのデプロイメントモデル(deployment model)を含みうる。
特徴は下記の通りである。
オンデマンドセルフサービス(On-demand self-service):クラウドコンシューマ(cloud consumer)は、サービスのプロバイダとのヒューマンインターラクション(human interaction)を必要とせずに、必要に応じて、コンピューティング機能、例えばサーバ時間及びネットワークストレージ、を一方的にプロビジョニングすることができる。
ブロードネットワークアクセス:機能は、ネットワークを介して利用可能であり、及び異種のシン(thin)クライアント・プラットフォーム又はシック(thick)クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、及びPDA)による使用を促進する標準的なメカニズムを介してアクセスされる。
リソースのプーリング:プロバイダのコンピューティングリソースは、マルチテナントモデルを使用して複数のコンシューマにサービスを提供するためにプールされ、及び様々な物理リソースと仮想リソースが需要に従って動的に割り当てられ及び再割り当てされる。コンシューマは一般的に、提供されたリソースの正確な場所についての制御又は知識を有していないが、より高いレベルの抽象化での場所(例えば、国、州又はデータセンター)を特定できうるという点で、場所に依存しないといえる。
迅速な順応性:機能は、迅速かつ弾力的にプロビジョニングされ、場合によっては自動的に、迅速にスケールアウトされ、迅速にリリースされて迅速にスケールインされうる。コンシューマにとって、プロビジョニングに利用可能な機能はしばしば、無制限であり及びいつでも任意の量で購入されることができる。
サービスの測定:クラウド・システムは、サービスのタイプ(例えば、ストレージ、処理、帯域幅、及びアクティブなユーザアカウント)に適した何らかの抽象化レベルでの計量機能を用いることによって、リソースの使用を自動的に制御し及び最適化する。リソース使用は監視され、制御され、及び報告され、利用されるサービスのプロバイダ及びコンシューマの両方についての透明性を提供することができる。
サービスモデルは下記の通りである。
サービスとしてのソフトウェア(SaaS:Software as a Service):クラウドインフラストラクチャにおいて実行しているプロバイダのアプリケーションを使用する為に、コンシューマに提供される機能である。該アプリケーションは、シン・クライアント・インタフェース、例えばウェブブラウザ(例えば、ウェブ・ベースの電子メール)、を通じて、様々なクライアントデバイスからアクセス可能である。該コンシューマは、制限されたユーザ固有のアプリケーション構成設定のありうる例外として、基礎をなすクラウドインフラストラクチャ、例えばネットワーク、サーバ、オペレーティングシステム、ストレージ、又は個々のアプリケーション機能さえも包含する基礎をなすクラウドインフラストラクチャ、を管理又は制御しない。
サービスとしてのプラットフォーム(PaaS:Platform as a Service):プロバイダによってサポートされるプログラミング言語及びツールを用いて生成された、コンシューマが生成した又は取得したアプリケーションを、クラウドインフラストラクチャ上にデプロイする為に、該コンシューマに提供される機能である。該コンシューマは、基礎をなすクラウドインフラストラクチャ、例えばネットワーク、サーバ、オペレーティングシステム、又はストレージを包含する基礎をなすクラウドインフラストラクチャ、を管理又は制御しないが、デプロイされたアプリケーション、及び場合によってはアプリケーション・ホスティング環境構成に対して制御を有する。
サービスとしてのインフラストラクチャ(IaaS:Infrastructure as a Service):コンシューマが、オペレーティングシステム及びアプリケーションを含むことができる任意のソフトウェアをデプロイ及び実行することができる、処理、ストレージ、ネットワーク、及び他の基本的なコンピューティングリソースをプロビジョニングする為に、該コンシューマに提供される機能である。該コンシューマは、基礎をなすクラウドインフラストラクチャを管理又は制御しないが、オペレーティングシステム、ストレージ、デプロイされたアプリケーションに対する制御、及び場合によっては、ネットワーク・コンポーネント(例えば、ホストのファイアウォール)の選択することの制限された制御を有する。
デプロイメントモデル(Deployment Models)は下記の通りである。
プライベート・クラウド:クラウドインフラストラクチャは、ある組織の為のみに運営される。該クラウドインフラストラクチャは、該組織又は第三者によって管理され得、及びオンプレミス(on-premises)又はオフプレミス(off-premises)に存在しうる。
コミュニティ・クラウド:クラウドインフラストラクチャは、幾つかの組織によって共有され、及び共通の関心事項(例えば、ミッション、セキュリティ要件、ポリシー、及びコンプライアンス考慮事項)を有する特定のコミュニティをサポートする。該クラウドインフラストラクチャは、該組織又は第三者によって管理され得、及びオンプレミス又はオフプレミスに存在しうる。
パブリック・クラウド:クラウドインフラストラクチャは、一般公衆又は大規模な業界グループに対して利用可能であり、及びクラウドサービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウドインフラストラクチャは、固有のエンティティのままであるが、データ及びアプリケーションの移行性を可能にする標準化された又は専用の技術(例えば、クラウド間の負荷分散のためのクラウド・バースティング)によって一緒にされる2以上のクラウド(プライベート、コミュニティ、又はパブリック)の混成物である。
クラウドコンピューティング環境は、無国籍性(statelessness)、低結合性、モジュール性、及びセマンティック相互運用性(semantic interoperability)に焦点を有する指向されたサービスである。クラウドコンピューティングの中核(heart)は、相互接続されたノードのネットワークを含むインフラストラクチャである。
ここで図10を参照すると、例示的なクラウドコンピューティング環境1000が図示されている。示される通り、クラウドコンピューティング環境1000は、1以上のクラウドコンピューティングノード1002を包含し、クラウドコンシューマによって使用されるローカルコンピューティングデバイス、例えば携帯情報端末(PDA:personal digital assistant)又は携帯電話1004、デスクトップコンピュータ1006、ラップトップコンピュータ1008若しくは自動車コンピュータシステム1010等又はそれらの組み合わせ、が、該クラウドコンピューティングノード1002と通信しうる。ノード1002は互いに通信しうる。該ノード1002は、物理的又は仮想的に、1以上のネットワーク、例えば本明細書において上述されたプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド若しくはハイブリッド・クラウド又はそれらの組み合わせ、にグループ化されうる(図示されていない)。このことは、クラウドコンシューマがローカルコンピューティングデバイスにおいてリソースを維持する必要がないサービスとして、インフラストラクチャ、プラットフォーム若しくはソフトウェア又はそれらの組み合わせをクラウドコンピューティング環境1000が提供することを許す。図10に示されているコンピューティングデバイス1004~1010のタイプは、例示のみであることを意図されていること、及びコンピューティングノード1002及びクラウドコンピューティング環境1000は、任意のタイプのネットワーク若しくはネットワークアドレス可能接続又はそれらの組み合わせを介して(例えば、ウェブブラウザを使用して)任意のタイプのコンピュータ化されたデバイスと通信することができることが理解される。
ここで図11を参照すると、クラウドコンピューティング環境1000(図10)によって提供される機能的抽象化層のセットが示されている。本明細書に記載されている他の実施態様において使用されている同様の要素の繰り返しの記述は、簡潔にする為に省略されている。図11に示されている構成要素、層及び機能は、単に例示であることが意図されていること、及び本発明の実施態様はそれらに限定されないことが理解されるべきである。図示されている通り、下記の層及び対応する機能が提供される。
ハードウェア及びソフトウェア層1102は、ハードウェアコンポーネント及びソフトウェアコンポーネントを包含する。ハードウェアコンポーネントの例は、メインフレーム1104、RISC(Reduced Instruction Set Computer(縮小命令セット・コンピュータ))アーキテクチャ・ベースのサーバ1106、サーバ1108、ブレード・サーバ1110、ストレージデバイス1112、並びにネットワーク及びネットワーキング・コンポーネント1114を包含する。幾つかの実施態様において、ソフトウェアコンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア1116及びデータベース・ソフトウェア1118を包含する。
仮想化層1120は、抽象化層を提供し、この抽象化層から、仮想エンティティの下記の例が提供される:すなわち、仮想サーバ1122、仮想ストレージ1124、仮想ネットワーク1126、例えば仮想プライベート・ネットワークを包含する該仮想ネットワーク1126、仮想アプリケーション及びオペレーティングシステム1128、並びに仮想クライアント1130。
一つの例においては、管理層1132は、以下で説明されている機能を提供しうる。リソース・プロビジョニング1134は、クラウドコンピューティング環境内でタスクを実行する為に利用されるコンピューティングリソース及び他のリソースの動的な調達を提供する。計量及び価格決定1136は、リソースがクラウドコンピューティング環境内で利用される場合のコスト追跡と、これらのリソースの消費についての課金又は請求とを提供する。一つの例においては、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを包含しうる。セキュリティは、クラウドコンシューマ及びタスクに対する識別検証と、データ及び他のリソースに対する保護とを提供する。ユーザ・ポータル1138は、コンシューマ及びシステム管理者の為に、クラウドコンピューティング環境へのアクセスを提供する。サービス・レベル管理1140は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソースの割り当て及び管理を提供する。サービス・レベル・アグリーメント(SLA:Service Level Agreement)の計画及び履行1142は、将来の要件がSLAに従って予測されるクラウド・コンピューティング・リソースの為の事前配置及びその調達を提供する。
ワークロード層1144は、クラウドコンピューティング環境が利用されうる機能の例を提供する。この層から提供されうるワークロード及び機能の例は、マッピング及びナビゲーション1146、ソフトウェア開発及びライフサイクル管理1148、仮想クラスルーム教育配信1150、データ分析処理1152、トランザクション処理1154、及びAIモデルトレーニング1156を包含する。本発明の様々な実施態様は、図10~図11を参照して記載されたクラウドコンピューティング環境を利用して、複雑さに基づくトレーニングスキームを介してソースコード理解タスクの為に1以上のAIモデルをトレーニングすることができる。
本発明は、統合の可能な技術的詳細レベルで、システム、方法、コンピュータプログラム若しくはコンピュータプログラム製品又はそれらの組み合わせでありうる。該コンピュータプログラム製品は、プロセッサに本発明の観点を実行させる為のコンピュータ可読プログラム命令を有する1以上のコンピュータ可読記憶媒体を包含しうる。該コンピュータ可読記憶媒体は、命令実行デバイスによって使用する為の命令を保持且つ記憶することができる有形のデバイスであることができる。該コンピュータ可読記憶媒体は、例えば、電子ストレージデバイス、磁気ストレージデバイス、光ストレージデバイス、電磁ストレージデバイス、半導体ストレージデバイス、又はこれらの任意の適切な組み合わせでありうるが、これらに限定されない。該コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、下記を包含する:ポータブルコンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、消去可能なプログラム可能な読み取り専用メモリ(EPROM(erasable programmable read-only memory)又はフラッシュメモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリスティック、フロッピーディスク、機械的に符号化されたデバイス、例えばパンチカード若しくは命令が記録されている溝内の隆起構造又はこれらの任意の適切な組み合わせ。本明細書において使用される場合、コンピュータ可読記憶媒体は、一時的な信号それ自体、例えば電波又は他の自由に伝播する電磁波、導波管若しく他の伝送媒体を伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、又は電線を介して送信される電気信号、であると解釈されるべきでない。
本明細書において記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から個々のコンピューティングデバイス/処理デバイスに、又はネットワーク、例えばインターネット、ローカルエリアネットワーク、ワイドエリアネットワーク若しくはワイヤレスネットワーク又はそれらの組み合わせ、を介して外部コンピュータ又は外部記憶デバイスにダウンロードされることができる。該ネットワークは、銅線伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ若しくはエッジサーバ又はこれらの組み合わせで構成されうる。各コンピューティングデバイス/処理デバイスにおけるネットワークアダプターカード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そして、該コンピュータ可読プログラム命令を、個々のコンピューティングデバイス/処理デバイス内にコンピュータ可読記憶媒体中に記憶する為に送信する。
本発明の動作を実行する為のコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路の為の構成データ、又は、1以上のプログラミング言語、例えばオブジェクト指向プログラミング言語(例えば、Smalltalk、C++等)、慣用的な手続き型プログラミング言語(例えば「C」プログラミング言語又は同様のプログラミング言語)、の任意の組み合わせで書かれているソースコード又はオブジェクトコードのいずれか、でありうる。該コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に、ユーザのコンピュータ上で部分的に、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に、ユーザのコンピュータ上で部分的に且つリモートコンピュータ上で部分的に、又はリモートコンピュータ若しくはサーバ上で全体的に、実行されうる。後者のシナリオにおいて、該リモートコンピュータは、任意のタイプのネットワーク、例えばローカルエリアネットワーク(LAN:local area network)若しくはワイドエリアネットワーク(WAN:wide area network)、を介してユーザのコンピュータに接続されうるか、又は該接続は(例えば、インターネットサービスプロバイダを使用したインターネットを通じて)外部コンピュータに対して行われうる。幾つかの実施態様において、電子回路、例えばプログラマブル論理回路、フィールドプログラマブルゲートアレイ(FPGA:field-programmable gate arrays)又はプログラマブルロジックアレイ(PLA:programmable logic arrays)、は、本発明の観点を実行する為に、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をパーソナライズすることによって、コンピュータ可読プログラム命令を実行しうる。
本発明の観点は、本発明の実施態様に従う、方法、装置(システム)及びコンピュータプログラム若しくはコンピュータプログラム製品のフローチャート図若しくはブロック図又はそれらの組み合わせを参照して本明細書において記載されている。該フローチャート図若しくは該ブロック図又はそれらの組み合わせの各ブロック、並びに該フローチャート図若しくは該ブロック図又はそれらの組み合わせにおける複数のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装されることができることが理解されるであろう。
これらのコンピュータ可読プログラム命令は、該コンピュータ又は他のプログラム可能なデータ処理装置のプロセッサを介して実行する命令が該フローチャート若しくはブロック図又はそれらの組み合わせの1以上のブロックにおいて特定された機能/動作を実装するための手段を生成するように、コンピュータのプロセッサ又は他のプログラム可能なデータ処理装置に提供されて、マシンを作り出しうる。これらのコンピュータ可読プログラム命令はまた、記憶された命令を有するコンピュータ可読記憶媒体は、該フローチャート図若しくはブロック図又はそれらの組み合わせの1以上のブロックにおいて特定される機能/動作の観点を実装する命令を含む製造品を含むように、コンピュータプログラム可能なデータ処理装置若しくは他のデバイス又はこれらの組み合わせに特定の様式で機能するように指示することができるコンピュータ可読記憶媒体中に記憶されうる。
該コンピュータ可読プログラム命令はまた、コンピュータ上、他のプログラム可能なデータ処理装置上又は他のデバイス上で実行される命令が、該フローチャート若しくはブロック図若しくはそれらの組み合わせの1以上のブロックにおいて特定される機能/動作を実装するように、上記のコンピュータ上、他のプログラム可能なデータ処理装置上又は他のデバイス上にロードされて、コンピュータ、他のプログラム可能な装置又は他のデバイス上で一連の動作ステップを実行させて、コンピュータに実装されたプロセスを生成しうる。
図面中のフローチャート及びブロック図は、本発明の様々な実施態様に従う、システム、方法及びコンピュータプログラム若しくはコンピュータプログラム製品のありうる実装の、アーキテクチャ、機能及び動作を示す。これに関連して、該フローチャート又はブロック図における各ブロックは、命令のモジュール、セグメント、又はその一部を表し得、それは、特定された1以上の論理機能を実装する為の1以上の実行可能命令を含む。幾つかの代替の実装において、該ブロックにおいて示されている機能は、図面中に示されている順序とは異なって生じうる。例えば、連続して示されている2つのブロックは、実際には、関与する機能に依存して、同時に、実質的に同時に、部分的又は全体的に時間的に重複する様式で実行される1つのステップとして達成されうるか、又は該ブロックは、逆の順序で実行されうる。該ブロック図若しくはフローチャート図又はこれらの組み合わせの各ブロック、並びに該ブロック図若しくはフローチャート図又はこれらの組み合わせの複数のブロックの組み合わせは、特定された機能又は動作を実行する特別な目的のハードウェアベースのシステムによって実装できることができ、又は特別な目的のハードウェアとコンピュータ命令との組み合わせを実行することができることにまた留意されたい。
本明細書において記載されている様々な実施態様の為の追加のコンテキストを提供する為に、図12及び下記の議論は、本明細書において記載されている実施態様の様々な実施態様が実装されることができる適切なコンピューティング環境1200の一般的な記載を提供することが意図されている。該実施態様は、1以上のコンピュータ上で実行することができるコンピュータ実行可能命令の一般的なコンテキストにおいて上記で説明されているが、当業者は、実施態様がまた、他のプログラムモジュールと組み合わせで、若しくはハードウェアとソフトウェアとの組み合わせで、又は他のプログラムモジュール及びハードウェアとソフトウェアの組み合わせで、実装されることができることを理解するであろう。
一般的に、プログラムモジュールは、特定のタスクを実行する又は特定の抽象データタイプを実装するところの、ルーチン、プログラム、コンポーネント、データ構造等を包含する。その上、当業者は、本発明の方法が、他のコンピュータシステム構成、例えば、シングルプロセッサコンピュータシステム若しくはマルチプロセッサコンピュータシステム、ミニコンピュータ、メインフレームコンピュータ、モノのインターネット(「IoT」(Internet of Things))デバイス、分散コンピューティングシステム、並びにパーソナルコンピュータ、ハンドヘルドコンピューティングデバイス、マイクロプロセッサベースの電子機器若しくはプログラム可能な消費者向け電子機器等を包含する他のコンピュータシステム構成(ここで、それらのそれぞれは、1以上の関連付けられたデバイスに動作可能に結合されることができる)、を用いて実施されることができることを理解するであろう。
本明細書における実施態様の図示された実施態様はまた、通信ネットワークを通じてリンクされているリモート処理デバイスによって或るタスクが実行されるところの分散コンピューティング環境において実施されることができる。分散コンピューティング環境において、プログラムモジュールはローカルメモリストレージデバイスとリモートメモリストレージデバイスとの両方に配置されることができる。例えば、1以上の実施態様において、コンピュータ実行可能コンポーネントは、1以上の分散メモリユニットを備えていることができるメモリから、又は1以上の分散メモリユニットから構成されることができるメモリから実行されることができる。本明細書において使用される場合、語「メモリ」及び「メモリユニット」は交換可能である。更に、本明細書において記載される1以上の実施態様は、コンピュータ実行可能コンポーネント、例えば、1以上の分散メモリユニットからコードを実行する為に結合又は協調して動作する複数のプロセッサ、のコードを分散方式において実行することができる。
本明細書において使用される場合、語「メモリ」は、1つの場所にある単一のメモリ若しくはメモリユニット、又は1以上の場所にある複数のメモリ若しくはメモリユニットを包含することができる。
コンピューティングデバイスは典型的に、様々な媒体を含み、該媒体は、コンピュータ可読記憶媒体、機械可読記憶媒体若しくは通信媒体、又はそれらの組み合わせを包含することができ、ここで、2つの語は、本明細書において、下記の通り、互いに異なる方法で使用されている。コンピュータ可読記憶媒体又は機械可読記憶媒体は、コンピュータによってアクセスされることができる任意の利用可能な記憶媒体であることができ、且つ揮発性媒体及び不揮発性媒体、リムーバブル媒体及び非リムーバブル媒体の両方を包含する。限定ではなく例として、コンピュータ可読記憶媒体又は機械可読記憶媒体は、情報、例えば、コンピュータ可読命令又は機械可読命令、プログラムモジュール、構造化データ又は非構造化データ、を記憶する為の任意の方法又は技術に関連して実装されることができる。
コンピュータ可読記憶媒体は、ランダムアクセスメモリ(「RAM:random access memory」)、読み取り専用メモリ(「ROM:read only memory」)、電気的に消去可能なプログラム可能な読み取り専用メモリ(「EEPROM:electrically erasable programmable read only memory」)、フラッシュメモリ、又は他のメモリ技術、コンパクトディスク読み取り専用メモリ(「CD ROM:compact disk read only memory」)、デジタルバーサタイルディスク(「DVD:digital versatile disk」)、ブルーレイディスク(「BD:Blu-ray(登録商標) disc」)、若しくは他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ若しくは他の磁気ストレージデバイス、ソリッドステートドライブ若しくは他のソリッドステートストレージデバイス、又は必要な情報を保存するために使用できる他の有形メディア若しくは非一時的メディア又はそれらの組み合わせを包含するが、これらに限定されない。この点に関して、ストレージ、メモリ又はコンピュータ可読媒体に適用される場合に、語「有形」又は「非一時的」は、修飾子としての一時的な信号自体の伝播のみを除外し、且つ一時的な信号自体を伝播するだけではないところの、全ての標準的なストレージ、メモリ又はコンピュータ可読媒体に対する権利を放棄しない。
コンピュータ可読記憶媒体は、媒体によって記憶された情報に関する様々な動作の為に、例えば、アクセス要求、クエリ又は他のデータ検索プロトコルを介して、1以上のローカル又はリモートコンピューティングデバイスによってアクセスされることができる。
通信媒体は典型的に、コンピュータ可読命令、データ構造、プログラムモジュール又は他の構造化データ若しくは非構造化データを、データ信号、例えば変調されたデータ信号、例えば、搬送波若しくは他のトランスポートメカニズムで具現化し、且つ任意の情報配信又はトランスポート媒体を包含する。語「変調されたデータ信号」又は複数の信号は、1以上の信号に情報を符号化するように設定又は変更された1以上のその特性を有する信号を云う。限定ではなく一例として、通信媒体は、有線媒体(wired media)、例えば有線ネットワーク又は直接配線接続を包含する優先媒体、並びに無線媒体、例えば、音響、RF、赤外線及び他の無線媒体、を包含する。
再び図12を参照すると、本明細書において記載されている観点の様々な実施態様を実装する為の例示的環境1200はコンピュータ1202を備えており、該コンピュータ1202は、処理ユニット1204、システムメモリ1206、及びシステムバス1208を備えている。システムバス1208は、システムメモリ1206を備えているがこれに限定されないシステム構成要素を処理ユニット1204に結合する。処理ユニット1204は、様々な市販のプロセッサのいずれかであることができる。デュアルマイクロプロセッサ及び他のマルチプロセッサアーキテクチャがまた、処理ユニット1204として使用されることができる。
システムバス1208は、様々な商業的に利用可能なバスアーキテクチャのいずれかを使用して、(メモリコントローラを伴う又は伴わない)メモリバス、周辺バス及びローカルバスにさらに相互接続することができる幾つかの種類のバス構造のいずれかであることができる。システムメモリ1206は、ROM 1210及びRAM 1212を備えている。基本入出力システム(「BIOS:basic input/output system」)は、不揮発性メモリ、例えば、ROM、消去可能なプログラマブル読み取り専用メモリ(「EPROM:erasable programmable read only memory」)、EEPROM、内に格納されることができ、そのBIOSは、コンピュータ1202内の要素間で情報を転送するのに役立つ基本ルーチン、例えば起動中、を含む。RAM 1212はまた、データをキャッシュする為に、高速RAM、例えばスタティックRAM、を包含することができる。
コンピュータ1202は更に、内部ハードディスクドライブ(「HDD」)1214(例えば、EIDE、SATA)、1以上の外部ストレージデバイス1216(例えば、磁気フロッピーディスクドライブ(「FDD」)1216、メモリスティック或いはフラッシュドライブリーダ、若しくはメモリカードリーダ、又はそれらの組み合わせ等)、並びに光ディスクドライブ1220(例えば、CD-ROMディスク、DVD、BD等を包含する)。内部HDD 1214は、コンピュータ1202内に配置されているように示されているが、内部HDD 1214はまた、適切なシャーシ(図示せず)中での外部使用の為に構成されることができる。加えて、環境1200中に示されていないが、ソリッドステートドライブ(「SSD:solid state drive」)が、HDD 1214に加えて又はHDD 1214の代わりに使用されることができる。HDD 1214、1以上の外部ストレージデバイス 1216及び光ディスクドライブ1220はそれぞれ、HDDインタフェース 1224、外部ストレージインタフェース1226、及び光学ドライブインタフェース1228によってシステムバス1208に接続されることができる。外部ドライブ実装の為のインタフェース1224は、ユニバーサルシリアルバス(「USB:Universal Serial Bus」)及び電気電子学会(「IEEE:Institute of Electrical and Electronics Engineers」)1394インタフェース技術のうちの少なくとも一つ又は両方を包含することができる。他の外部ドライブ接続技術は、本明細書において記載されている実施態様の意図の範囲内である。
ドライブ及びそれらの関連づけられたコンピュータ可読記憶媒体は、データ、データ構造、コンピュータ実行可能命令等の不揮発性ストレージを提供する。コンピュータ1202について、ドライブ及び記憶媒体は、適切なデジタル形式での任意のデータの記憶に適応する。上記のコンピュータ可読記憶媒体の記載は、それぞれのタイプのストレージデバイスに言及しているが、現在存在するか又は将来開発されるかにかかわらず、コンピュータによって読み取り可能である他の種類の記憶媒体がまた例示的な動作環境において使用されることができ、さらに、そのような記憶媒体は、本明細書において記載されている方法を実行する為のコンピュータ実行可能命令を含むことができることが当業者によって認識されるべきである。
幾つかのプログラムモジュールが、ドライブ及びRAM 1212に格納されることができ、該幾つかのプログラムモジュールは、オペレーティングシステム1230、1以上のアプリケーションプログラム1232、他のプログラムモジュール1234、及びプログラムデータ1236を包含する。オペレーティングシステム、アプリケーション、モジュール若しくはデータ又はそれらの組み合わせの全て又はその一部がまた、RAM 1212中にキャッシュされることができる。本明細書において記載されているシステム及び方法は、様々な商業的に利用可能なオペレーティングシステム又はオペレーティングシステムの組み合わせを利用して実装されることができる。
コンピュータ1202は任意的に、エミュレーション技術を含んでいてもよい。例えば、ハイパーバイザ(図示せず)又は他の中継ぎ(intermediary)は、オペレーティングシステム1230の為のハードウェア環境をエミュレートすることができ、及び該エミュレートされたハードウェアは任意的に、図12に示されているハードウェアとは異なることができる。そのような実施態様において、オペレーティングシステム1230は、コンピュータ1202においてホストされている複数の仮想マシン(「VM:virtual machine」)うちの1つのVMを含むことができる。その上、オペレーティングシステム1230は、アプリケーション1232の為のランタイム環境、例えばJavaランタイム環境又は.NETフレームワーク、を提供することができる。ランタイム環境は、該ランタイム環境を含む任意のオペレーティングシステム上でアプリケーション1232が実行することを可能にする一貫した実行環境である。同様に、オペレーティングシステム1230はコンテナをサポートすることができ、及びアプリケーション1232はコンテナの形態であることができ、該コンテナは、軽量でスタンドアロンの実行可能なソフトウェアパッケージ、例えば、コード、ランタイム、システムツール、システムライブラリ及びアプリケーションの為の設定を包含する上記ソフトウェアパッケージ、であることができる。
さらに、コンピュータ1202は、セキュリティモジュール、例えばトラステッドプロセッシングモジュール(「TPM:trusted processing module」)、を使用可能にすることができる。例えば、TPMの場合、ブートコンポーネントは次回のブートコンポーネントをハッシュし、そして、結果がセキュリティで保護された値と一致することを待ってから、次のブートコンポーネントをロードする。このプロセスは、コンピュータ1202のコード実行スタック内の任意の層で行うことができ、例えば、アプリケーション実行レベルにおいて又はオペレーティングシステム(「OS」)カーネルレベルにおいて適用され、それによってコード実行の任意のレベルにおいてセキュリティを有効にする。
ユーザは、1以上の有線/無線入力デバイス、例えば、キーボード1238、タッチスクリーン1240、及びポインティングデバイス、例えばマウス1242、を介して、コマンド及び情報をコンピュータ1202内に入力することができる。他の入力デバイス(図示せず)は、マイクロフォン、赤外線(「IR:infrared」)リモコン、無線周波数(「RF:radio frequency」)リモコン、又は他のリモコン、ジョイスティック、仮想現実コントローラ若しくは仮想現実ヘッドセット又はそれらの組み合わせ、ゲームパッド、スタイラスペン、画像入力デバイス、1以上のカメラ、ジェスチャセンサー入力デバイス、視覚運動センサー入力デバイス、感情若しくは顔検出デバイス、バイオメトリック入力デバイス、例えば指紋若しくは虹彩スキャナー、等、を包含することができる。これらの入力デバイス及び他の入力デバイスはしばしば、システムバス1208に結合されることができる入力デバイスインタフェース1244を介して処理ユニット1204に接続されるが、他のインタフェース、例えばパラレルポート、IEEE1394シリアルポート、ゲームポート、USBポート、IRインタフェース、BLUETOOTH(登録商標)インタフェース等、によって接続されることができる。
モニター1246又は他のタイプの表示装置がまた、インタフェース、例えばビデオアダプター1248、を介してシステムバス1208に接続されることができる。モニター1246に加えて、コンピュータは典型的に、他の周辺出力装置(図示せず)、例えば、スピーカー若しくはプリンター又はそれらの組み合わせ等、を包含する。
コンピュータ1202は、1以上のリモートコンピュータ、例えば1以上のリモートコンピュータ1250、への有線若しくは無線通信又はそれらの組み合わせを介した論理接続を使用して、ネットワーク化された環境において動作することができる。1以上のリモートコンピュータ1250は、ワークステーション、サーバコンピュータ、ルータ、パーソナルコンピュータ、ポータブルコンピュータ、マイクロプロセッサベースのエンターテインメント機器、ピアデバイス、又は他の一般的なネットワークノードであることができ、及び典型的には、コンピュータ1202に関連して記載された要素の多く又は全てを包含するが、簡潔にする為に、メモリ/ストレージデバイス1252のみが図示されている。図示された論理接続は、ローカルエリアネットワーク(「LAN」)1254若しくは大きなネットワーク、例えば広域ネットワーク(「WAN」)1256、又はそれらの組み合わせへの有線若しくは無線接続又はそれらの組み合わせを包含する。そのようなLAN及びWANネットワーキング環境は、オフィス及び会社においては一般的であり、並びに企業規模のコンピュータネットワーク、例えばイントラネット、を促進し、それらの全ては、グローバル通信ネットワーク、例えばインターネット、に接続されることができる。
LANネットワーキング環境において使用される場合、コンピュータ1202は、有線通信若しくは無線通信又はそれらの組み合わせのネットワーク・インターフェース又はアダプタ1258を介してローカルネットワーク1254に接続されることができる。該アダプタ1258は、LAN 1254への有線通信又は無線通信を容易にすることができ、それはまた、無線モードにおいてアダプタ1258と通信する為に、その上に配置された無線アクセスポイント(「AP:access point」)を包含することができる。
WANネットワーキング環境において使用される場合、コンピュータ1202は、モデム1260を備えていることができ、又はWAN 1256を介して通信を確立する為の他の手段を介して、例えばインターネットを介して、WAN 1256上の通信サーバに接続されることができる。モデム1260は、内蔵又は外付けの有線又は無線装置であり、入力装置インタフェース1244を介してシステムバス1208に接続されることができる。ネットワーク化された環境において、コンピュータ1202又はその一部に関連して示されているプログラムモジュールは、リモートメモリ/ストレージデバイス1252内に格納されることができる。示されているネットワーク接続は例であり、及びコンピュータ間の通信リンクを確立する他の手段が使用されることができることが理解されるであろう。
LAN又はWANネットワーキング環境のいずれかにおいて使用される場合、コンピュータ1202は、上述された外部ストレージデバイス1216に加えて、又は外部ストレージデバイス1216の代わりに、クラウドストレージシステム又は他のネットワークベースのストレージシステムにアクセスすることができる。一般的に、コンピュータ1202とクラウドストレージシステムとの間の接続は、LAN 1254又はWAN 1256を介して、例えばアダプタ1258又はモデム1260によって、それぞれ確立することができる。コンピュータ1202を、関連付けられたクラウドストレージシステムに接続することに応じて、外部ストレージインタフェース1226は、アダプタ1258若しくはモデム1260又はそれらの組み合わせの助けを借りて、他のタイプの外部ストレージと同様に、該クラウドストレージシステムによって提供されるストレージを管理することができる。例えば、外部ストレージインタフェース1226は、あたかもそれらのソースがコンピュータ1202に物理的に接続されていたかのように、クラウドストレージソースへのアクセスを提供するように構成されることができる。
コンピュータ1202は、無線通信において動作可能に配置された任意のワイヤレスデバイス又はエンティティ、例えば、プリンター、スキャナー、デスクトップ若しくはポータブルコンピュータ又はそれらの組み合わせ、ポータブルデータアシスタント、通信衛星、ワイヤレスで検出可能なタグに関連付けられた機器又は場所(例えば、キオスク、ニューススタンド、店舗の棚等)並びに電話、と通信するように動作可能であることができる。これは、ワイファイ(「Wi-Fi:Wireless Fidelity」)及びブルートゥース(登録商標)(BLUETOOTH(登録商標))ワイヤレス技術を包含する。従って、該通信は、慣用的なネットワークのように事前定義された構造であることができ、又は少なくとも2つのデバイス間の単なるアドホック(ad hoc)通信であることができる。
上で記載されていることは、システム、コンピュータプログラム製品、及びコンピュータに実装された方法の単なる例を包含する。もちろん、本開示を説明する目的の為に、構成要素、製品若しくはコンピュータに実装された方法又はそれらの組み合わせの考えられる全ての組み合わせを説明することは不可能であるが、当業者は、本開示の多くの更なる組み合わせが可能であることを認識することができる。その上、語「包含する」(includes)、「有する」(has)、「所有する」(possesses)等が、発明の詳細な説明、特許請求の範囲、要約書及び図面において使用されている限りにおいて、そのような語は、請求項において移行語として使用される場合、語「含む」(comprising)として解釈される。様々な実施態様の説明が、本説明の目的の為に提示されたものであり、開示された実施態様が網羅的であること又は開示された実施態様に限定されることは意図されていない。多くの修正及び変形が、上記された実施態様の範囲及び精神から逸脱することなしに、当業者に明らかであろう。本明細書において使用されている語は、実施態様の原理、市場において見られる技術に対する実際の適用又は技術的改善を最も良く説明する為に、又は当業者が本明細書において開示されている実施態様を理解することができるようにする為に選択された。