(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-07-11
(45)【発行日】2025-07-22
(54)【発明の名称】開発プロセス中の開発者の時間の計算
(51)【国際特許分類】
G06F 9/445 20180101AFI20250714BHJP
G06F 11/30 20060101ALI20250714BHJP
【FI】
G06F9/445 120
G06F11/30 155
(21)【出願番号】P 2023505704
(86)(22)【出願日】2021-07-28
(86)【国際出願番号】 CN2021108946
(87)【国際公開番号】W WO2022022572
(87)【国際公開日】2022-02-03
【審査請求日】2023-12-12
(32)【優先日】2020-07-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】ラドクリフ、ロザリンド、トイ、アレン
(72)【発明者】
【氏名】マッシオリ、ハンナ、ジャスティン
(72)【発明者】
【氏名】イレッディ、アーシ
【審査官】今川 悟
(56)【参考文献】
【文献】特開2007-272655(JP,A)
【文献】特開2016-057721(JP,A)
【文献】特開2011-164936(JP,A)
【文献】国際公開第2015/052823(WO,A1)
【文献】特開2013-186907(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/445
G06F 11/30
(57)【特許請求の範囲】
【請求項1】
コンピュータ実装方法であって、該コンピュータ実装方法が、
プロセッサによって、ソフトウェア開発アプリケーションからの
開発者の活動データ、および周辺機器によって生成された複数の入力信号を取り出すことと、
前記プロセッサによって、前記複数の入力信号と、前記活動データによって表されたすべてのイベントとの間の因果関係を決定することと、
前記プロセッサによって、因果関係の決定に応答して、前記複数の入力信号のうちの最初の信号と最後の信号の間の第1の時間間隔を計算すること
であって、前記第1の時間間隔が第1の作業項目に関連している、前記計算することと、
前記プロセッサによって、前記第1の時間間隔を推定された時間間隔と比較すること
であって、前記推定された時間間隔は、前記開発者が前記第1の作業項目を完了する為に必要とされる活動時間の推定時間である、前記比較することと、
前記プロセッサによって、前記比較に基づいて第2の作業項目のスケジュールを決定するこ
とと
を含
み、
該コンピュータ実装方法が、
前記プロセッサによって、前記複数の入力信号のうちの各連続する入力信号間の各時間間隔を計算することと、
前記プロセッサによって、各時間間隔をしきい値時間間隔と比較することと、
前記プロセッサによって、前記第1の時間間隔から、前記しきい値時間間隔を超える各時間間隔の長さを引くことと
をさらに含む、
コンピュータ実装方法。
【請求項2】
コンピュータ実装方法であって、該コンピュータ実装方法が、
プロセッサによって、ソフトウェア開発アプリケーションからの
開発者の活動データ、および周辺機器によって生成された複数の入力信号を取り出すことと、
前記プロセッサによって、前記複数の入力信号と、前記活動データによって表されたすべてのイベントとの間の因果関係を決定することと、
前記プロセッサによって、因果関係の決定に応答して、前記複数の入力信号のうちの最初の信号と最後の信号の間の第1の時間間隔を計算すること
であって、前記第1の時間間隔が第1の作業項目に関連している、前記計算することと、
前記プロセッサによって、前記第1の時間間隔を推定された時間間隔と比較すること
であって、前記推定された時間間隔は、前記開発者が前記第1の作業項目を完了する為に必要とされる活動時間の推定時間である、前記比較することと、
前記プロセッサによって、前記比較に基づいて第2の作業項目のスケジュールを決定することであって、前記第1の時間間隔が第1の作業項目に関連している、前記決定することと
を含
み、
該コンピュータ実装方法が、
前記プロセッサによって、前記ソフトウェア開発アプリケーションと通信するために一連のアプリケーション・プログラミング・インターフェイスから一つのアプリケーション・プログラミング・インターフェイスを選択すること
をさらに含む、
コンピュータ実装方法。
【請求項3】
コンピュータ実装方法であって、該コンピュータ実装方法が、
プロセッサによって、ソフトウェア開発アプリケーションからの
開発者の活動データ、および周辺機器によって生成された複数の入力信号を取り出すことと、
前記プロセッサによって、前記複数の入力信号と、前記活動データによって表されたすべてのイベントとの間の因果関係を決定することと、
前記プロセッサによって、因果関係の決定に応答して、前記複数の入力信号のうちの最初の信号と最後の信号の間の第1の時間間隔を計算すること
であって、前記第1の時間間隔が第1の作業項目に関連している、前記計算することと、
前記プロセッサによって、前記第1の時間間隔を推定された時間間隔と比較すること
であって、前記推定された時間間隔は、前記開発者が前記第1の作業項目を完了する為に必要とされる活動時間の推定時間である、前記比較することと、
前記プロセッサによって、前記比較に基づいて第2の作業項目のスケジュールを決定することであって、前記第1の時間間隔が第1の作業項目に関連している、前記決定することと
を含
み、
前記活動データがログ・ファイルまたは監査証跡を含む、
コンピュータ実装方法。
【請求項4】
コンピュータ実装方法であって、該コンピュータ実装方法が、
プロセッサによって、ソフトウェア開発アプリケーションからの
開発者の活動データ、および周辺機器によって生成された複数の入力信号を取り出すことと、
前記プロセッサによって、前記複数の入力信号と、前記活動データによって表されたすべてのイベントとの間の因果関係を決定することと、
前記プロセッサによって、因果関係の決定に応答して、前記複数の入力信号のうちの最初の信号と最後の信号の間の第1の時間間隔を計算すること
であって、前記第1の時間間隔が第1の作業項目に関連している、前記計算することと、
前記プロセッサによって、前記第1の時間間隔を推定された時間間隔と比較すること
であって、前記推定された時間間隔は、前記開発者が前記第1の作業項目を完了する為に必要とされる活動時間の推定時間である、前記比較することと、
前記プロセッサによって、前記比較に基づいて第2の作業項目のスケジュールを決定することであって、前記第1の時間間隔が第1の作業項目に関連している、前記決定することと
を含
み、
前記活動データがプレーン・テキストを含み、前記方法が、前記プロセッサによって、自然言語処理技術を適用して前記プレーン・テキストの意味を理解することをさらに含む、
コンピュータ実装方法。
【請求項5】
前記プロセッサによって、前記第1の時間間隔を推定された時間間隔と比較することが、前記第1の時間間隔が、前記推定された時間間隔よりしきい値時間間隔小さいかどうかを判定することを含む、請求項1~
4のいずれか一項に記載のコンピュータ実装方法。
【請求項6】
前記プロセッサによって、前記ソフトウェア開発アプリケーションがファイルに対して動作しているということを検出することと、
前記プロセッサによって、前記ファイルのパス名を検出することと、
前記プロセッサによって、第1の作業項目識別情報を前記パス名と比較して、前記第1の作業項目識別情報を検出することと
をさらに含む、請求項1~
5のいずれか一項に記載のコンピュータ実装方法。
【請求項7】
前記プロセッサによって、前記複数の入力信号のうちの各連続する入力信号間の各時間間隔を計算することと、
前記プロセッサによって、各時間間隔をしきい値時間間隔と比較することと、
前記プロセッサによって、前記第1の時間間隔から、前記しきい値時間間隔を超える各時間間隔の長さを引くことと
をさらに含む、請求項2
~4のいずれか一項に記載のコンピュータ実装方法。
【請求項8】
前記プロセッサによって、前記ソフトウェア開発アプリケーションと通信するために一連のアプリケーション・プログラミング・インターフェイスから一
つのアプリケーション・プログラミング・インターフェイスを選択することをさらに含む、請求項1
および3~4のいずれか1項に記載のコンピュータ実装方法。
【請求項9】
前記活動データがログ・ファイルまたは監査証跡を含む、請求項1~
2および4のいずれか一項に記載のコンピュータ実装方法。
【請求項10】
前記活動データがプレーン・テキストを含み、前記方法が、
前記プロセッサによって、自然言語処理技術を適用して前記プレーン・テキストの意味を理解することをさらに含む、請求項1~
3のいずれか一項に記載のコンピュータ実装方法。
【請求項11】
コンピュータ可読命令を含んでいるメモリと、
前記コンピュータ可読命令を実行するための1つまたは複数のプロセッサと
を備えているシステムであって、前記コンピュータ可読命令が、前記1つまたは複数のプロセッサを制御して、
プロセッサによって、ソフトウェア開発アプリケーションからの
開発者の活動データ、および周辺機器によって生成された複数の入力信号を取り出すことと、
前記プロセッサによって、前記入力データと、前記活動データによって表されたすべてのイベントとの間の因果関係を決定することと、
前記プロセッサによって、因果関係の決定に応答して、前記複数の入力信号のうちの最初の信号と最後の信号の間の第1の時間間隔を計算すること
であって、前記第1の時間間隔が第1の作業項目に関連している、前記計算することと、
前記プロセッサによって、前記第1の時間間隔を推定された時間間隔と比較すること
であって、前記推定された時間間隔は、前記開発者が前記第1の作業項目を完了する為に必要とされる活動時間の推定時間である、前記比較することと、
前記プロセッサによって、前記比較に基づいて第2の作業項目のスケジュールを決定するこ
とと
を含んでいる動作を実行
し、
前記動作が、
前記複数の入力信号のうちの各連続する入力信号間の各時間間隔を計算することと、
各時間間隔をしきい値時間間隔と比較することと、
前記第1の時間間隔から、前記しきい値時間間隔を超える各時間間隔の長さを引くことと
をさらに含む、
システム。
【請求項12】
コンピュータ可読命令を含んでいるメモリと、
前記コンピュータ可読命令を実行するための1つまたは複数のプロセッサと
を備えているシステムであって、前記コンピュータ可読命令が、前記1つまたは複数のプロセッサを制御して、
プロセッサによって、ソフトウェア開発アプリケーションからの
開発者の活動データ、および周辺機器によって生成された複数の入力信号を取り出すことと、
前記プロセッサによって、前記入力データと、前記活動データによって表されたすべてのイベントとの間の因果関係を決定することと、
前記プロセッサによって、因果関係の決定に応答して、前記複数の入力信号のうちの最初の信号と最後の信号の間の第1の時間間隔を計算すること
であって、前記第1の時間間隔が第1の作業項目に関連している、前記計算することと、
前記プロセッサによって、前記第1の時間間隔を推定された時間間隔と比較すること
であって、前記推定された時間間隔は、前記開発者が前記第1の作業項目を完了する為に必要とされる活動時間の推定時間である、前記比較することと、
前記プロセッサによって、前記比較に基づいて第2の作業項目のスケジュールを決定するこ
とと
を含んでいる動作を実行
し、
前記動作が、
前記ソフトウェア開発アプリケーションと通信するために一連のアプリケーション・プログラミング・インターフェイスから一つのアプリケーション・プログラミング・インターフェイスを選択すること
をさらに含む、
システム。
【請求項13】
コンピュータ可読命令を含んでいるメモリと、
前記コンピュータ可読命令を実行するための1つまたは複数のプロセッサと
を備えているシステムであって、前記コンピュータ可読命令が、前記1つまたは複数のプロセッサを制御して、
プロセッサによって、ソフトウェア開発アプリケーションからの
開発者の活動データ、および周辺機器によって生成された複数の入力信号を取り出すことと、
前記プロセッサによって、前記入力データと、前記活動データによって表されたすべてのイベントとの間の因果関係を決定することと、
前記プロセッサによって、因果関係の決定に応答して、前記複数の入力信号のうちの最初の信号と最後の信号の間の第1の時間間隔を計算すること
であって、前記第1の時間間隔が第1の作業項目に関連している、前記計算することと、
前記プロセッサによって、前記第1の時間間隔を推定された時間間隔と比較すること
であって、前記推定された時間間隔は、前記開発者が前記第1の作業項目を完了する為に必要とされる活動時間の推定時間である、前記比較することと、
前記プロセッサによって、前記比較に基づいて第2の作業項目のスケジュールを決定するこ
とと
を含んでいる動作を実行
し、
前記活動データがログ・ファイルまたは監査証跡を含む、
システム。
【請求項14】
コンピュータ可読命令を含んでいるメモリと、
前記コンピュータ可読命令を実行するための1つまたは複数のプロセッサと
を備えているシステムであって、前記コンピュータ可読命令が、前記1つまたは複数のプロセッサを制御して、
プロセッサによって、ソフトウェア開発アプリケーションからの
開発者の活動データ、および周辺機器によって生成された複数の入力信号を取り出すことと、
前記プロセッサによって、前記入力データと、前記活動データによって表されたすべてのイベントとの間の因果関係を決定することと、
前記プロセッサによって、因果関係の決定に応答して、前記複数の入力信号のうちの最初の信号と最後の信号の間の第1の時間間隔を計算すること
であって、前記第1の時間間隔が第1の作業項目に関連している、前記計算することと、
前記プロセッサによって、前記第1の時間間隔を推定された時間間隔と比較すること
であって、前記推定された時間間隔は、前記開発者が前記第1の作業項目を完了する為に必要とされる活動時間の推定時間である、前記比較することと、
前記プロセッサによって、前記比較に基づいて第2の作業項目のスケジュールを決定するこ
とと
を含んでいる動作を実行
し、
前記活動データがプレーン・テキストを含み、
前記動作が、
自然言語処理技術を適用して前記プレーン・テキストの意味を理解することをさらに含む、
システム。
【請求項15】
前記動作が、前記第1の時間間隔を推定された時間間隔と比較することが、前記第1の時間間隔が、前記推定された時間間隔よりしきい値時間間隔小さいかどうかを判定することを含む、請求項
11~
14のいずれか一項に記載のシステム。
【請求項16】
前記動作が、
前記ソフトウェア開発アプリケーションがファイルに対して動作しているということを検出することと、
前記ファイルのパス名を検出することと、
第1の作業項目識別情報を前記パス名と比較して、前記第1の作業項目識別情報を検出することと
をさらに含む、請求項
11~
15のいずれか一項に記載のシステム。
【請求項17】
前記動作が、
前記複数の入力信号のうちの各連続する入力信号間の各時間間隔を計算することと、
各時間間隔をしきい値時間間隔と比較することと、
前記第1の時間間隔から、前記しきい値時間間隔を超える各時間間隔の長さを引くことと
をさらに含む、請求項
12~14のいずれか一項に記載のシステム。
【請求項18】
前記動作が、前記ソフトウェア開発アプリケーションと通信するために一連のアプリケーション・プログラミング・インターフェイスから一
つのアプリケーション・プログラミング・インターフェイスを選択することをさらに含む、請求項
11および13~14のいずれか一項に記載のシステム。
【請求項19】
前記活動データがログ・ファイルまたは監査証跡を含む、請求項
11~12および14のいずれか一項に記載のシステム。
【請求項20】
コンピュータ・プログラムであって、
プロセッサに、
請求項1~10のいずれか一項に記載の方法の各ステップを実行させる前記コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、プログラム可能なコンピューティング・システムに関連しており、より詳細には、開発者の活動データを集計して開発プロセス中の時間を計算するコンピューティング・システムに関連している。
【背景技術】
【0002】
作業全体を完了するために実行された個別の活動に費やされた従業員の時間を追跡するためのコンピューティング・システムが採用される。従業員によって費やされた時間を監視する目的は、作業全体を完了することに関連する有効性、効率、または生産性、あるいはその組み合わせを向上させることである。コンピュータ・システムは、作業の説明および作業を完了することに費やされた時間に関する、ユーザによって入力された時間データを受信することができる。作業項目に費やされた活動時間を確認する能力は、ソフトウェア開発プロセスの有効性への洞察を提供することにとって重要である。
【発明の概要】
【0003】
本発明の実施形態は、第1の作業項目に関するソフトウェア・アプリケーションでの活動時間を計算するためのコンピュータ実装方法、コンピューティング・システム、およびコンピュータ・プログラム製品を対象にする。コンピュータ実装方法の非限定的な例は、ソフトウェア開発アプリケーションからの活動データ、および周辺機器によって生成された複数の入力信号を取り出すことを含む。この方法は、入力データと、活動データによって表されたすべてのイベントとの間の因果関係を決定することをさらに含む。因果関係の決定に応答して、複数の入力信号のうちの最初の信号と最後の信号の間の第1の時間間隔が計算される。第1の時間間隔が、推定された時間間隔と比較される。この比較に基づいて、第2の作業項目のスケジュールが決定され、第1の時間間隔が第1の作業項目に関連している。
【0004】
本発明の他の実施形態は、コンピュータ・システムおよびコンピュータ・プログラム製品において、前述の方法の特徴を実装する。
【0005】
その他の技術的特徴および利点が、本発明の技術によって実現される。本発明の実施形態および態様は、本明細書において詳細に説明され、請求される対象の一部と見なされる。さらによく理解するために、詳細な説明および図面を参照すること。
【0006】
本明細書に記載された専有権の詳細は、本明細書の最後にある特許請求の範囲において具体的に指摘され、明確に請求される。本発明の実施形態の前述およびその他の特徴と長所は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【0007】
【
図1】本発明の1つまたは複数の実施形態に従って、開発者の作業活動を監視するためのシステムのコンポーネントのブロック図を示す図である。
【
図2】本発明の1つまたは複数の実施形態に従って、開発者によって実行された能動的な作業を決定するためのプロセスのフロー図を示す図である。
【
図3】本発明の1つまたは複数の実施形態に従って、作業項目をスケジューリングするためのプロセスのフロー図を示す図である。
【
図4】本発明の1つまたは複数の実施形態に従って、クラウド・コンピューティング環境を示す図である。
【
図5】本発明の1つまたは複数の実施形態に従って、抽象モデル・レイヤを示す図である。
【
図6】本発明の1つまたは複数の実施形態を実装することにおいて使用するためのコンピュータ・システムのブロック図を示す図である。
【発明を実施するための形態】
【0008】
本明細書において示された図は、例示である。本発明から逸脱することなく、本明細書に記載された図または動作の多くの変形が存在することが可能である。例えば、動作は異なる順序で実行されることが可能であり、あるいは動作は追加、削除、または変更されることが可能である。また、「結合される」という用語およびその変形は、2つの要素間に通信経路が存在することを表しており、それらの要素間に要素/接続が介在しない要素間の直接的接続を意味していない。これらのすべての変形は、本明細書の一部であると見なされる。
【0009】
本発明の1つまたは複数の実施形態は、第1の作業項目を完了するためにソフトウェア開発アプリケーションを使用している開発者が費やす合計時間を監視するコンピューティング・システムを提供する。このシステムは、開発者がソフトウェア開発アプリケーションに能動的に従事する時間およびアプリケーションが自動化された機能を実行する時間を分離する。このシステムは、第1の作業項目を完了するためにソフトウェア開発アプリケーションに能動的に従事することに費やされた時間に基づいて、開発者の効率を計算する。
【0010】
最新のソフトウェア開発プロセスでは、ソフトウェア会社は、ソフトウェアのコーディング、テスト、およびデプロイに必要な作業を管理するためのパイプラインを確立する。パイプラインは、さまざまなソフトウェア開発アプリケーションで実行された作業を組み込む、事前に定義されて自動化された反復可能なプロセスである。会社は、作業項目を完了することに向かう開発者のソフトウェア開発アプリケーションへの従事の追跡を支援するために、時間追跡ソフトウェアをさらに採用する。時間追跡ソフトウェアは、開発者からの時間入力に依存することがある。しかし、自己申告システムの時間入力は、開発者がソフトウェア開発アプリケーションに能動的に従事した時間を正確に監視するのに有効ではない。従来の時間追跡システムは、開発者がソフトウェア開発アプリケーションを能動的に使用している時間と、ソフトウェア開発アプリケーションが自動化された機能を実行している時間を区別しない。
【0011】
本発明の1つまたは複数の実施形態は、さまざまなソフトウェア開発アプリケーションからのデータを集計するシステムを提供することによって、前述の欠点のうちの1つまたは複数に対処する。このシステムは、費やされた活動時間と、アプリケーションが自動化された機能を実行した時間を区別する。活動時間は、開発者の能動的な参加(例えば、コードの設計およびコードの編集)を必要とする時間を含む。自動化された機能の時間は、コードのコンパイル、自動化されたコード・エラー・チェック、およびコードの実行などの、開発者の参加を必要としない活動の時間を含む。このシステムは、作業項目に費やされた活動時間の集計を決定し、フィードバックをすべてのユーザに返す。
【0012】
ここで
図1を参照すると、本発明の1つまたは複数の実施形態に従って、ソフトウェア開発アプリケーションでの活動時間を決定するためのシステム100が概して示されている。システム100は、ソフトウェア開発者によって作業項目に費やされた時間を決定するための効率計算ユニット102を含んでいる。システム100は、システム100がさまざまなソフトウェア開発アプリケーションと情報をやりとりできるようにするために、一連のアプリケーション・プログラミング・インターフェイス104を含んでいる。システム100は、ソフトウェア開発作業項目をスケジューリングするための開発スケジューラ・ユニット106をさらに含んでいる。システム100は、ネットワーク108を介して、第1の開発者のコンピューティング・デバイス110および第2の開発者のコンピューティング・デバイス112にデータを送信し、これらのコンピューティング・デバイスからデータを収集するよう動作可能である。システム100は、コンピューティング・デバイス上でローカルに実行されるか、または外部接続を介して、例えばサーバ50上で実行され得る。2つの開発者コンピューティング・デバイス110、112のみが示されているが、システム100が3つ以上の開発者コンピューティング・デバイスと通信するよう動作可能であるということが理解される。
【0013】
効率計算ユニット102は、一連のアプリケーション・プログラミング・インターフェイス(API:application programming interfaces)104の各アプリケーション・プログラミング・インターフェイスを介して、ソフトウェア開発アプリケーションと通信することができる。効率計算ユニット102は、各APIを使用して、開発者によって使用された各ソフトウェア開発アプリケーションから活動データを取り出すことができる。活動データは、機能に関するイベントの説明およびアプリケーションの動作中に使用されたファイルを含む。イベントは、プログラムによって検出可能な、内部でプログラムによって開始されるか、または外部ソースによって開始され得る、任意の発生である。例えば、イベントは、周辺機器からの外部入力、周辺機器との接続もしくは切断、コマンド、メモリ容量に達すること、プログラミングのエラー、またはその他の計算の発生を含むことができる。
【0014】
活動データは、ソフトウェア開発アプリケーション、オペレーティング・システム、または第三者のアプリケーションによって生成された、ログ・ファイルおよび監査証跡を含む。ログ・ファイルは、ソフトウェア開発アプリケーションがどの動作を実行したか、および誰が動作を開始したかを含む。監査証跡は、ソフトウェア開発アプリケーションが特定の状態になるために発生した一連のイベントを含む。活動データは、アプリケーションに固有の監査証跡を含み、テキスト・ファイルまたはデータベース・テーブルとして格納され得る。活動データは、監査証跡に含まれないことがあるイベント(例えば、デバッグ・メッセージおよび例外)を含んでいる機能ログも含む。活動データは、データベース・クエリ、データにおける変更、およびデータベース機能における変更などのイベントを含んでいる、データベース・ログまたはメモリ・ログを含むこともできる。活動データは、アプリケーションへのアクセスおよびソフトウェア開発アプリケーションにアクセスしているユーザのIPアドレスなどのイベントを含んでいる、アクセス・ログを含むことができる。多くの事例では、活動データはプレーン・テキストの形態である。その場合、効率計算ユニット102は、活動データを分析するために自然言語処理(NLP:natural language processing)技術を採用することができる。例えば、効率計算ユニットは、活動データのテキストの意味を導出するために、単語埋め込みモデルおよび領域固有の辞書を採用することができる。活動データは、イベントごとにタイムスタンプ・データをさらに含む。2つ以上の機能が使用される場合、活動データは、機能ごとに発生する各イベントを含む。効率計算ユニット102は、必ずしも中心的機能としてではなく時間追跡機能を含んでいる任意のソフトウェア開発アプリケーションから活動データを受信するよう動作可能である。
【0015】
効率計算ユニット102は、周辺機器(例えば、キーボード、マウス、タッチ・スクリーン)からの入力を検出することによって、開発者による活動を追跡することができる。効率計算ユニット102は、ソフトウェア開発アプリケーションの動作中に開発者によって入力された各キーストローク、マウス・クリック、およびタッチ・スクリーン入力を検出することができるキーストローク・ロギング機能を含む。この機能は、入力信号に基づいて周辺機器の種類および入力を決定することを含む。例えば、効率計算ユニットは、入力信号に基づいてマウス・クリックとキーボード・ストロークを区別することができる。さらに、効率計算ユニット102は、入力信号に基づいて入力を決定することができる。例えば、効率計算ユニット102は、入力信号に基づいて、開発者がキーボードで単語「mouse」を書いたということを決定することができる。
【0016】
効率計算ユニット102は、活動データおよび周辺機器からの入力信号の比較によって、ソフトウェア開発アプリケーションが自動化された機能を操作しているのか、または開発者がアプリケーションに能動的に従事しているのかを、さらに判定することができる。本発明の一部の実施形態では、効率計算ユニット102は、ニューラル・ネットワークとして配置されることが可能であり、機械学習アルゴリズムを使用して、周辺機器からの入力信号とソフトウェア開発アプリケーションにおけるイベントの間の関係を検出することができる。効率計算ユニット102は、機械学習アルゴリズムを適用し、周辺機器からの入力信号および活動データ(例えば、監査証跡)を入力として受信することができる。効率計算ユニット102は、入力信号と活動データに記述されたイベントの間に関係が存在するかどうかを予測するようにトレーニングされ得る。周辺機器からの入力信号が、活動データに記録された検出可能なイベントの生成を引き起こす場合、関係が存在する。入力信号と活動データに記述されたイベントの間に関係が存在するかどうかは、定量化可能な結果が信頼区間の統計的下限および上限の範囲内であるかどうかに基づく。開発者がオフラインで作業している場合、効率計算ユニット102は、周辺機器から入力信号のログを受信し、メモリ・ストレージ・デバイスから活動データを受信することができる。
【0017】
効率計算ユニット102は、開発者が自動化された機能を開始することと、開発者がソフトウェア開発アプリケーションの機能を能動的に使用していることとを区別するようにトレーニングされ得る。例えば、効率計算ユニット102は、入力信号の周波数、入力信号の数、入力信号によって引き起こされたイベントの性質、またはさまざまなその他の関連するパラメータなどの、さまざまなパラメータに依存するようにトレーニングされ得る。例えば、効率計算ユニット102が第1の開発者のコンピューティング・デバイス110から入力信号を受信し、ソフトウェア・アプリケーションから監査証跡を受信した場合、監査証跡は、入力信号が自動化された機能の開始を引き起こしたということを示すことがある。この場合、効率計算ユニット102は、開発者が自動化された機能のみを開始し、開発者がソフトウェア開発アプリケーションで能動的に作業していないということを認識するようにトレーニングされ得る。ソフトウェア開発アプリケーションが自動化された機能を実行している場合、活動データは、自動化された機能の実行中に検出されたイベントの記録をまだ示す。この場合、効率計算ユニット102は、すべての周辺機器からすべての入力信号をまだ受信することができる。しかし、効率計算ユニット102は、イベントが、入力信号によって引き起こされず、ソフトウェア開発アプリケーションの自動化された機能に起因するということを認識するようにトレーニングされる。
【0018】
効率計算ユニット102は、開発者が能動的に参加しているということを決定した場合、周辺機器からの最初の入力信号といずれかの周辺機器からの最後の入力信号の間の時間間隔の長さを計算することができる。効率計算ユニット102は、各連続する入力信号間の単位時間間隔をさらに計算することができる。いずれかの単位時間間隔がしきい値量を超えた(例えば、開発者が30分間、何も入力しなかった)場合、効率計算ユニット102は、最初の入力信号と最後の入力信号の間の時間間隔から単位時間間隔(無活動時間)を差し引くことができる。無活動時間を引いた後の計算された時間値は、活動時間値であると見なされる。
【0019】
効率計算ユニット102は、開発者が作業項目に向かって作業している事例ごとに、活動時間値の合計を計算することができる。効率計算ユニット102は、開発者が同じ作業項目に向かって使用する各ソフトウェア開発アプリケーションの機能ごとに、活動時間値を計算することができる。言い換えると、開発者は、あるソフトウェア開発アプリケーションのコード・エディタのグラフィカル・ユーザ・インターフェイスを好み、別のソフトウェア開発アプリケーションのテスト機能を好むことがある。効率計算ユニット102は、両方のソフトウェア開発アプリケーションに費やされた活動時間値を計算し、両方の合計を生成することができる。一連のアプリケーション・プログラミング・インターフェイス104は、あるアプリケーションが別のアプリケーションと互換性がない場合でも、効率計算ユニットが複数のソフトウェア開発アプリケーションと通信できるようにする。APIは、あるソフトウェア開発アプリケーションと別のソフトウェア・アプリケーションの間の互換性に関わらず、効率計算ユニット102が活動データおよび入力信号データを取り出すことができるようにする。
【0020】
効率計算ユニット102は、開発者が同時に2つ以上の作業項目に従事していることに基づいて、費やされた活動時間値が調整される必要があるかどうかをさらに判定することができる。開発者は、定期的に、2つ以上のソフトウェア開発アプリケーションを同時に操作するか、アプリケーションの2つ以上の機能を使用するか、または1つの機能を使用して2つ以上の作業項目に従事することがある。例えば、ソフトウェア開発者は、コード・エディタを使用して2つの異なる作業項目のためのコードを編集することがある。効率計算ユニット102は、作業項目識別情報に基づいて第1の作業項目を第2の作業項目と区別することができる。作業項目識別情報は、各作業項目を識別するための使用される番号、タイトル、コード、または単語のセットである。ソフトウェア開発者は、コード・ファイルをリポジトリに格納し、必要とされる場合にコード・ファイルを取り出す。リポジトリから取り出された各コード・ファイルは、リポジトリ内の各コード・ファイルの場所を含んでいる文字列であるパス名を含む。パス名は、作業項目識別情報を含むことができる。開発者が作業項目に関して2つ以上のコード・ファイルを作成した場合、各コード・ファイルは、作業項目識別情報を含んでいるパス名を含むことができる。効率計算ユニット102は、パス名を分析し、パス名の一部を作業項目のマスター・リストと比較することができる。例えば、パス名が「...文字列/acme2/elevatorsensor/...」を含んでいることがあり、作業項目識別情報が「elevatorsensor」であることがある。効率計算ユニット102は、文字列「elevatorsensor」に一致する文字列についてパス名を検索し、開発者が取り出したコード・ファイルの作業項目を決定することができる。したがって、開発者が別の開発者のコードを再検討している場合でも、効率計算ユニット102は、その時間が正しい作業項目に起因すると認識することができる。
【0021】
効率計算ユニット102は、複数のソフトウェア開発アプリケーションから活動データを受信するよう動作可能である。効率計算ユニット102は、開発者が第1の作業項目を完了するためにソフトウェア開発アプリケーションを使用しているということを決定することができる。効率計算ユニット102は、開発者が第2の作業項目を完了するためにもソフトウェア開発アプリケーションを使用しているということをさらに決定することができる。効率計算ユニット102は、開発者が第2の作業項目に従事しているということを決定した場合、開発者が第2の項目に従事した時間の長さを計算することができる。この時間を計算するための方法は、前述したように入力信号のタイムスタンプを使用するが、第2の作業項目に起因する時間間隔から無活動時間が引かれない点が異なる。第2の作業項目に費やされた時間は、費やされた活動時間値から差し引かれる。
【0022】
本発明の1つまたは複数の実施形態に従って、効率計算ユニット102は、作業項目の完了に関して開発者の効率をさらに決定することができる。効率計算ユニット102は、開発者が作業項目に実際に費やした時間値を決定し、その値を時間の推定された長さと比較するよう動作可能である。効率計算ユニット102は、開発者の活動時間が、時間の推定された長さの上限または下限の範囲内であるかどうかを判定することができる。開発者の費やされた活動時間値が時間の推定された長さを超える場合、開発者は、平均を下回る効率を有していると見なされ得る。一方、開発者の費やされた活動時間値が時間の推定された長さ未満である場合、開発者は、平均を超える効率を有していると見なされ得る。時間の推定された長さは、ユーザ(例えば、スーパーバイザまたはプログラム・マネージャ)によって決定され得る。
【0023】
「ニューラル・ネットワーク」および「機械学習」という語句は、データから学習する電子システムの機能を広く表す。機械学習システム、エンジン、またはモジュールは、現在は不明である入力と出力の間の機能的関係を学習するために、外部クラウド環境(例えば、クラウド・コンピューティング環境50)などにおいてトレーニングされ得る機械学習アルゴリズムを含むことができる。1つまたは複数の実施形態では、機械学習機能は、現在は不明である機能を実行するようにトレーニングされる能力を有する効率計算ユニット102を使用して実装され得る。機械学習および認知科学では、ニューラル・ネットワークは、動物および特に脳の生物学的ニューラル・ネットワークから着想を得た、一群の統計学習モデルである。ニューラル・ネットワークは、多数の入力に依存するシステムおよび機能を推定または近似するために使用され得る。
【0024】
効率計算ユニット102は、シミュレートされた「ニューロン」として機能し、電子信号の形態で互いに「メッセージ」を交換する相互接続されたプロセッサ要素のいわゆる「神経形態学的」システムとして、具現化され得る。生物学的ニューロン間でメッセージを伝達するシナプス神経伝達物質接続のいわゆる「可塑性」と同様に、シミュレートされたニューロン間で電子メッセージを伝達する効率計算ユニット102内の接続には、特定の接続の強さまたは弱さに対応する数値的重みが提供される。トレーニング中に、これらの重みは、経験に基づいて調整されることが可能であり、効率計算ユニット102を入力に適応可能にし、学習可能にする。これらの入力ニューロンの活性化は、ネットワークの設計者によって決定された機能によって重み付けされて変換された後に、「隠れ」ニューロンと呼ばれることが多い他の下流のニューロンに渡される。このプロセスが、出力ニューロンが活性化されるまで繰り返される。活性化された出力ニューロンは、どの文字が読み取られたかを決定する。
【0025】
一連のアプリケーション・プログラミング・インターフェイス104は、効率計算ユニット102がさまざまなソフトウェア開発アプリケーションと通信できるようにする。アプリケーション・プログラミング・インターフェイス(API)は、効率計算ユニット102がソフトウェア開発アプリケーションと通信できるようにする中間のソフトウェアである。効率計算ユニット102は、ソフトウェア開発アプリケーションと通信するために、適切なAPIを選択することができる。選択されたアプリケーション・プログラミング・インターフェイスは、効率計算ユニット102が、ソフトウェア開発アプリケーションの説明およびこのアプリケーションを使用することに費やされた時間を決定するためのデータを要求して受信できるようにする。例えば、効率計算ユニット102は、APIを介して、ソフトウェア開発アプリケーションに対してログ・ファイルまたは監査証跡を要求し、受信することができる。
【0026】
開発スケジューラ・ユニット106は、計算済みの費やされた活動時間値に少なくとも部分的に基づいて、開発者に対して作業項目をスケジューリングするよう動作可能である。開発スケジューラ・ユニット106は、開発中のソフトウェア・アプリケーションの配信スケジュールを受信することができる。予想される完了日に基づいて、開発スケジューラ・ユニット106は、作業項目の完了予定日を定めることができる。スケジューラ・ユニット106は、作業順序を作成または調整し、この作業順序を開発者に送信することができる。作業順序は、電子メール、電子カレンダー上に作成された項目、またはその他の電子通信の形態であることができる。
【0027】
システム100は、通信ネットワーク108を介して第1の開発者のコンピューティング・デバイス110および第2の開発者のコンピューティング・デバイス112と動作可能に通信することができる。システム100は、通信ポート、有線トランシーバ、ワイヤレス・トランシーバ、またはネットワーク・カード、あるいはその組み合わせを介して通信ネットワークに接続することができる。通信ネットワーク108は、イーサネット(R)、光ファイバ、マイクロ波、xDSL(Digital Subscriber Line:デジタル加入者回線)、ワイヤレス・ローカル・エリア・ネットワーク(WLAN:Wireless Local Area Network)技術、ワイヤレス・セルラー技術、5G、Bluetooth技術、または任意のその他の適切な技術、あるいはその組み合わせなどの技術を使用してデータを送信することができる。
【0028】
計算ユニット102は、通信ネットワーク108を介して、第1の開発者のコンピューティング・デバイス110および第2の開発者のコンピューティング・デバイス112と動作可能に通信する。効率計算ユニット102は、例えば、MACアドレス、IPアドレス、登録コード、またはこれらの組み合わせのその他の適切な識別情報に基づいて、各コンピューティング・デバイスをさらに識別することができる。効率計算ユニット102は、第1および第2の開発者のコンピューティング・デバイス110、112上で操作されている1つまたは複数のソフトウェア開発アプリケーションと動作可能にさらに通信することができる。効率計算ユニット102は、どの開発者が各アプリケーションに記録されているかに基づいて、どの開発者がどのソフトウェア開発アプリケーションを使用しているかを識別することができる。開発者が複数のソフトウェア開発アプリケーションに記録されている場合、効率計算ユニット102は、各アプリケーションに記録されていることに基づいて開発者識別情報を識別することができる。
【0029】
図2を参照すると、本発明の1つまたは複数の実施形態に従って、費やされた活動時間値を決定するための方法200が示されている。ブロック202で、システムが、ユーザのコンピューティング・デバイスと動作可能に通信し、ユーザのコンピュータのコンピューティング・デバイス上で実行されているすべてのソフトウェア開発アプリケーションから活動データを継続的に受信する。活動データは、使用されるソフトウェア・アプリケーションの説明、開発者によって使用されるソフトウェア・アプリケーションの機能、ならびに機能の各々の開始時間および終了時間を示す時間データを含む。活動データは、ソフトウェア開発アプリケーションのログ・ファイルまたは監査証跡に含まれ得る。システムは、ユーザのコンピューティング・デバイスに接続された周辺機器からの入力信号に関する情報をさらに受信することができる。
【0030】
ブロック204で、システムは、開発者が各ソフトウェア開発アプリケーションを能動的に使用していた時間の長さを決定する。システムは、活動データおよび周辺機器からの入力データを取り出すことによって、費やされた活動時間値を計算することができる。システムは、機械学習アルゴリズムを適用し、周辺機器からの入力信号および活動データ(例えば、監査証跡)を入力として受信することができる。システムは、ユーザの周辺機器からの入力信号と活動データに記述されたイベントの間に関係が存在するかどうかを予測するようにトレーニングされる。システムは、周辺機器からの入力信号が、活動データに記録されたイベントの生成を引き起こす場合、入力信号とイベントの間の関係を検出する。次に、システムは、周辺機器からの最初の入力信号といずれかの周辺機器からの最後の入力信号の間の時間間隔の長さを計算することができる。システムは、各連続する入力信号間の単位時間間隔をさらに計算することができる。いずれかの単位時間間隔がしきい値量を超えた場合、システムは、最初の入力信号と最後の入力信号の間の時間間隔から単位時間間隔を差し引く。
【0031】
ブロック206で、システムは、開発者が第1の作業項目または第2の作業項目に従事したかどうかを検証する。システムは、開発者によって作業されたファイルごとにパス名を分析し、パス名の一部を作業項目のマスター・リストと比較することができる。第2の作業項目のパス名が検出されない場合、さらなる分析は不要である。第2の作業項目のパス名が検出された場合、システムは、入力データを分析し、第2の作業項目に関連する最初のタイムスタンプおよび最後のタイムスタンプを検出する。システムは、いずれかの周辺機器からの最初の時間の信号と最後の時間の信号の間の第2の作業項目の時間間隔を計算する。次に、システムは、ブロック208で、第1の作業項目に費やされた活動時間値から、第2の作業項目の時間間隔を引く。
【0032】
図3を参照すると、パイプライン・スケジュールを調整するための方法300が示されている。ブロック302で、システムが、開発者の現在の費やされた活動時間値を推定された活動時間値と比較する。推定された活動値は、作業項目を完了するために必要とされる合計活動時間の推定量である。推定された活動時間値は、ユーザ(例えば、プロジェクト・マネージャまたはスーパーバイザ)によって決定され得る。
【0033】
ブロック304で、システムは、開発者の実際に費やされた時間が、推定された費やされた時間値より小さいしきい値以内であるかどうかを判定する。しきい値は、ユーザ(例えば、プロジェクト・マネージャ)によって決定され得る。しきい値は、固定された時間または推定された活動時間値の割合であることができる。例えば、しきい値が5時間であり、推定された費やされた活動時間値が30時間であるとする。システムは、開発者に25時間の活動時間があるかどうかを判定することができる。例えば、しきい値が20%である場合、やはりシステムは、開発者に少なくとも25時間の活動時間があるかどうかを判定することができる。
【0034】
ブロック306で、開発者の実際に費やされた時間が、推定された活動時間値のしきい値以内である場合、システムは第2の作業項目をスケジューリングする。例えば、開発者が25時間、作業項目に従事した場合、開発者は、推定された30時間の5時間のしきい値にいる。25時間作業することに応答して、開発者の第1の作業項目の完了前に、開発者の第2の作業項目がスケジューリングされ得る。ブロック308で、開発者が費やされた平均活動時間のしきい値以内でない場合、システムは第2の作業項目をスケジューリングするのをやめる。
【0035】
本開示にはクラウド・コンピューティングに関する詳細な説明が含まれているが、本明細書において示された教示の実装は、クラウド・コンピューティング環境に限定されないと理解されるべきである。本発明の実施形態は、現在既知であるか、または今後開発される任意のその他の種類のコンピューティング環境と組み合わせて実装できる。
【0036】
クラウド・コンピューティングは、構成可能な計算リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス提供モデルであり、管理上の手間またはサービス・プロバイダとのやりとりを最小限に抑えて、これらのリソースを迅速にプロビジョニングおよび解放することができる。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、および少なくとも4つのデプロイメント・モデルを含んでよい。
【0037】
特徴は、次のとおりである。
【0038】
オンデマンドのセルフ・サービス:クラウドの利用者は、サーバの時間およびネットワーク・ストレージなどの計算能力を一方的に、サービス・プロバイダとの人間的なやりとりを必要とせず、必要に応じて自動的にプロビジョニングすることができる。
【0039】
幅広いネットワーク・アクセス:能力は、ネットワークを経由して利用可能であり、標準的なメカニズムを使用してアクセスできるため、異種のシン・クライアントまたはシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、およびPDA)による利用を促進する。
【0040】
リソース・プール:プロバイダの計算リソースは、プールされ、マルチテナント・モデルを使用して複数の利用者に提供され、さまざまな物理的および仮想的リソースが、要求に従って動的に割り当ておよび再割り当てされる。場所に依存しないという感覚があり、利用者は通常、提供されるリソースの正確な場所に関して管理することも知ることもないが、さらに高い抽象レベルでは、場所(例えば、国、州、またはデータセンター)を指定できる場合がある。
【0041】
迅速な順応性:能力は、迅速かつ柔軟に、場合によっては自動的にプロビジョニングされ、素早くスケールアウトし、迅速に解放されて素早くスケールインすることができる。プロビジョニングに使用できる能力は、利用者には、多くの場合、無制限のように見え、任意の量をいつでも購入できる。
【0042】
測定されるサービス:クラウド・システムは、計測機能を活用することによって、サービスの種類(例えば、ストレージ、処理、帯域幅、およびアクティブなユーザのアカウント)に適したある抽象レベルで、リソースの使用を自動的に制御および最適化する。リソースの使用状況は、監視、制御、および報告されることが可能であり、利用されるサービスのプロバイダと利用者の両方に透明性を提供する。
【0043】
サービス・モデルは、次のとおりである。
【0044】
SaaS(Software as a Service):利用者に提供される能力は、クラウド・インフラストラクチャ上で稼働しているプロバイダのアプリケーションを利用することである。それらのアプリケーションは、Webブラウザ(例えば、Webベースの電子メール)などのシン・クライアント・インターフェイスを介して、さまざまなクライアント・デバイスからアクセスできる。利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション機能を含む基盤になるクラウド・インフラストラクチャを、限定的なユーザ固有のアプリケーション構成設定は例外の可能性はあるが、管理することも制御することもない。
【0045】
PaaS(Platform as a Service):利用者に提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションをクラウド・インフラストラクチャにデプロイすることである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、デプロイされたアプリケーション、および場合によってはアプリケーション・ホスティング環境の構成を制御することができる。
【0046】
IaaS(Infrastructure as a Service):利用者に提供される能力は、処理、ストレージ、ネットワーク、およびその他の基本的な計算リソースをプロビジョニングすることであり、利用者は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをデプロイして実行できる。利用者は、基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、オペレーティング・システム、ストレージ、デプロイされたアプリケーションを制御することができ、場合によっては、選択されたネットワーク・コンポーネント(例えば、ホスト・ファイアウォール)を限定的に制御できる。
【0047】
デプロイメント・モデルは、次のとおりである。
【0048】
プライベート・クラウド:このクラウド・インフラストラクチャは、組織のためにのみ運用される。この組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
【0049】
コミュニティ・クラウド:このクラウド・インフラストラクチャは、複数の組織によって共有され、関心事(例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスに関する考慮事項)を共有している特定のコミュニティをサポートする。これらの組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
【0050】
パブリック・クラウド:このクラウド・インフラストラクチャは、一般ユーザまたは大規模な業界団体が使用できるようになっており、クラウド・サービスを販売する組織によって所有される。
【0051】
ハイブリッド・クラウド:このクラウド・インフラストラクチャは、データとアプリケーションの移植を可能にする標準化された技術または独自の技術(例えば、クラウド間の負荷バランスを調整するためのクラウド・バースト)によって固有の実体を残したまま互いに結合された2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の組成である。
【0052】
クラウド・コンピューティング環境は、ステートレス、疎結合、モジュール性、および意味的相互運用性に重点を置いたサービス指向の環境である。クラウド・コンピューティングの中心になるのは、相互接続されたノードのネットワークを含んでいるインフラストラクチャである。
【0053】
ここで
図4を参照すると、例示的なクラウド・コンピューティング環境50が示されている。図示されているように、クラウド・コンピューティング環境50は、クラウドの利用者によって使用されるローカル・コンピューティング・デバイス(例えば、パーソナル・デジタル・アシスタント(PDA:personal digital assistant)または携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはその組み合わせなど)が通信できる1つまたは複数のクラウド・コンピューティング・ノード10を含んでいる。ノード10は、互いに通信してよい。ノード10は、1つまたは複数のネットワーク内で、本明細書において前述されたプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、またはハイブリッド・クラウド、あるいはこれらの組み合わせなどに、物理的または仮想的にグループ化されてよい(図示されていない)。これによって、クラウド・コンピューティング環境50は、クラウドの利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のないインフラストラクチャ、プラットフォーム、またはSaaS、あるいはその組み合わせを提供できる。
図4に示されたコンピューティング・デバイス54A~Nの種類は、例示のみが意図されており、コンピューティング・ノード10およびクラウド・コンピューティング環境50は、任意の種類のネットワークまたはネットワーク・アドレス可能な接続(例えば、Webブラウザを使用した接続)あるいはその両方を経由して任意の種類のコンピュータ制御デバイスと通信することができると理解される。
【0054】
ここで
図5を参照すると、クラウド・コンピューティング環境50(
図4)によって提供される機能的抽象レイヤのセットが示されている。
図5に示されたコンポーネント、レイヤ、および機能は、例示のみが意図されており、本発明の実施形態がこれらに限定されないということが、あらかじめ理解されるべきである。図示されているように、次のレイヤおよび対応する機能が提供される。
【0055】
ハードウェアおよびソフトウェア・レイヤ60は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例としては、メインフレーム61、RISC(Reduced Instruction Set Computer)アーキテクチャベースのサーバ62、サーバ63、ブレード・サーバ64、ストレージ・デバイス65、ならびにネットワークおよびネットワーク・コンポーネント66が挙げられる。一部の実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
【0056】
仮想化レイヤ70は、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75などの仮想的実体を提供できる抽象レイヤを備える。
【0057】
一例を挙げると、管理レイヤ80は、以下で説明される機能を提供してよい。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実行するために利用される計算リソースおよびその他のリソースの動的調達を行う。計測および価格設定82は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡、およびそれらのリソースの利用に対する請求書またはインボイスの送付を行う。一例を挙げると、それらのリソースは、アプリケーション・ソフトウェア・ライセンスを含んでよい。セキュリティは、クラウドの利用者およびタスクのID検証を行うとともに、データおよびその他のリソースの保護を行う。ユーザ・ポータル83は、クラウド・コンピューティング環境へのアクセスを利用者およびシステム管理者に提供する。サービス・レベル管理84は、必要なサービス・レベルを満たすように、クラウドの計算リソースの割り当てと管理を行う。サービス水準合意(SLA:Service Level Agreement)計画および実行85は、今後の要求が予想されるクラウドの計算リソースの事前準備および調達を、SLAに従って行う。
【0058】
ワークロード・レイヤ90は、クラウド・コンピューティング環境で利用できる機能の例を示している。このレイヤから提供されてよいワークロードおよび機能の例としては、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想クラスルーム教育の配信93、データ解析処理94、トランザクション処理95、および開発者のログ・データの集計96が挙げられる。
【0059】
本開示が、現在既知であるか、または今後開発される任意のその他の種類のコンピューティング環境と組み合わせて実装され得るということが理解される。例えば、
図6は、本明細書に記載された技術を実装するための処理システム600のブロック図を示している。例では、処理システム600は、1つまたは複数の中央処理装置(プロセッサ)621a、621b、621cなど(集合的に、または一般的に、プロセッサ621または処理デバイスあるいはその両方と呼ばれる)を含む。本開示の態様では、各プロセッサ621は、縮小命令セット・コンピュータ(RISC:reduced instruction set computer)マイクロプロセッサを含むことができる。プロセッサ621は、システム・バス633を介して、システム・メモリ(例えば、ランダム・アクセス・メモリ(RAM:random access memory)624)およびさまざまなその他のコンポーネントに結合される。読み取り専用メモリ(ROM:Read only memory)622は、システム・バス633に結合され、処理システム600の特定の基本機能を制御する基本入出力システム(BIOS:basic input/output system)を含んでよい。
【0060】
システム・バス633に結合された入出力(I/O:input/output)アダプタ627およびネットワーク・アダプタ626がさらに示されている。I/Oアダプタ627は、ハード・ディスク623もしくはストレージ・デバイス625またはその両方、あるいは任意のその他の類似するコンポーネントと通信する小型コンピュータ・システム・インターフェイス(SCSI:small computer system interface)アダプタであってよい。I/Oアダプタ627、ハード・ディスク623、およびストレージ・デバイス625は、本明細書では、マス・ストレージ634と総称される。処理システム600上で実行するためのオペレーティング・システム640は、マス・ストレージ634に格納されてよい。ネットワーク・アダプタ626は、システム・バス633を外部ネットワーク636と相互接続し、処理システム600が他のそのようなシステムと通信できるようにする。
【0061】
ディスプレイ(例えば、表示モニタ)635は、ディスプレイ・アダプタ632によってシステム・バス633に接続され、ディスプレイ・アダプタ632は、グラフィックス重視のアプリケーションおよびビデオ・コントローラの性能を向上するために、グラフィックス・アダプタを含んでよい。本開示の1つの態様では、アダプタ626、627、または632、あるいはその組み合わせは、1つまたは複数のI/Oバスに接続されてよく、I/Oバスは、中間バス・ブリッジ(図示されていない)を介してシステム・バス633に接続される。ハード・ディスク・コントローラ、ネットワーク・アダプタ、およびグラフィックス・アダプタなどの周辺機器を接続するのに適したI/Oバスは、通常、PCI(Peripheral Component Interconnect)などの一般的なプロトコルを含む。ユーザ・インターフェイス・アダプタ628およびディスプレイ・アダプタ632を介してシステム・バス633に接続されているように、その他の入出力デバイスが示されている。入力デバイス629(例えば、キーボード、マイクロホン、タッチスクリーンなど)、入力ポインタ630(例えば、マウス、トラックパッド、タッチスクリーンなど)、またはスピーカ631、あるいはその組み合わせは、ユーザ・インターフェイス・アダプタ628を介してシステム・バス633に相互接続されてよく、例えばユーザ・インターフェイス・アダプタ628は、複数のデバイス・アダプタを1つの集積回路に統合するスーパーI/Oチップを含んでよい。
【0062】
本開示の一部の態様では、処理システム600は、グラフィックス・プロセッシング・ユニット637を含む。グラフィックス・プロセッシング・ユニット637は、ディスプレイへの出力を対象にしたフレーム・バッファ内の画像の作成を高速化するためにメモリを操作して変更するように設計された特殊な電子回路である。一般に、グラフィックス・プロセッシング・ユニット637は、コンピュータ・グラフィックスおよび画像処理の操作では非常に効率的であり、データの大きいブロックの処理が並列に実行されるアルゴリズムに関して汎用CPUよりも効果的にする高度な並列構造を有する。
【0063】
したがって、本明細書において構成されているように、処理システム600は、プロセッサ621の形態での処理能力と、システム・メモリ(例えば、RAM624)およびマス・ストレージ634を含んでいるストレージ能力と、キーボード629およびマウス630などの入力手段と、スピーカ631およびディスプレイ635を含んでいる出力能力とを含む。本開示の一部の態様では、システム・メモリ(例えば、RAM624)およびマス・ストレージ634の一部は、処理システム600に示されたさまざまなコンポーネントの機能を調整するために、オペレーティング・システム640を集合的に格納する。
【0064】
本明細書では、関連する図面を参照して、本発明のさまざまな実施形態が説明される。本発明の範囲を逸脱することなく、本発明の代替の実施形態が考案され得る。以下の説明および図面において、要素間のさまざまな接続および位置関係(例えば、上、下、隣接など)が示される。それらの接続または位置関係あるいはその両方は、特に規定されない限り、直接的または間接的であることができ、本発明はこの点において限定するよう意図されていない。したがって、実体の結合は、直接的結合または間接的結合を指すことができ、実体間の位置関係は、直接的位置関係または間接的位置関係であることができる。さらに、本明細書に記載されたさまざまな作業および工程段階は、本明細書に詳細に記載されない追加の段階または機能を含んでいるさらに包括的な手順または工程に組み込まれ得る。
【0065】
本明細書に記載された方法のうちの1つまたは複数は、データ信号上で論理機能を実装するための論理ゲートを含んでいる個別の論理回路、適切な組み合わせ論理ゲートを含んでいる特定用途向け集積回路(ASIC:application specific integrated circuit)、プログラマブル・ゲート・アレイ(PGA:programmable gate array)、フィールド・プログラマブル・ゲート・アレイ(FPGA:field programmable gate array)などの、それぞれ従来技術においてよく知られている、技術のいずれかまたは組み合わせを使用して実装され得る。
【0066】
簡潔さの目的で、本発明の態様の作成および使用に関連する従来技術は、本明細書に詳細に記載されることもあれば、記載されないこともある。具体的には、本明細書に記載されたさまざまな技術的特徴を実装するためのコンピューティング・システムおよび特定のコンピュータ・プログラムのさまざまな態様は、よく知られている。したがって、簡潔さのために、多くの従来の実装に関する詳細は、本明細書では、既知のシステムまたは工程あるいはその両方の詳細を提供することなく、簡潔にのみ述べられるか、または全体的に省略される。
【0067】
一部の実施形態では、さまざまな機能または動作は、特定の位置で、または1つまたは複数の装置もしくはシステムの動作に関連して、あるいはその両方で行われ得る。一部の実施形態では、特定の機能または動作の一部は、第1のデバイスまたは位置で実行されることが可能であり、機能または動作の残りの部分は、1つまたは複数の追加のデバイスまたは位置で実行され得る。
【0068】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「a」、「an」、および「the」は、特に文脈上明示的に示されない限り、複数形も含むことが意図されている。「備える」または「備えている」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組み合わせの存在を明示するが、1つまたは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
【0069】
下の特許請求におけるすべての手段またはステップおよび機能要素の対応する構造、材料、動作、および等価なものは、具体的に請求されるその他の請求された要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図されている。本開示は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態に限定されない。本開示の範囲から逸脱することなく多くの変更および変形が可能であることは、当業者にとって明らかである。本開示の原理および実際的な適用を最も適切に説明するため、およびその他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態に関して、本開示を理解できるようにするために、実施形態が選択されて説明された。
【0070】
本明細書において示された図は、例示である。本開示から逸脱することなく、本明細書に記載された図またはステップ(または動作)の多くの変形が存在することが可能である。例えば、動作は異なる順序で実行されることが可能であり、あるいは動作は追加、削除、または変更されることが可能である。また、「結合される」という用語は、2つの要素間に信号経路が存在することを表しており、それらの要素間に要素/接続が介在しない要素間の直接的接続を意味していない。これらすべての変形は、本開示の一部であると見なされる。
【0071】
以下の定義および略称が、特許請求の範囲および本明細書の解釈に使用される。本明細書において使用されているように、「備える」、「備えている」、「含む」、「含んでいる」、「有する」、「有している」、「含有する」、「含有している」という用語、またはこれらの任意のその他の変形は、非排他的包含をカバーするよう意図されている。例えば、要素のリストを含んでいる組成、混合、工程、方法、製品、または装置は、それらの要素のみに必ずしも限定されず、明示されていないか、またはそのような組成、混合、工程、方法、製品、または装置に固有の、その他の要素を含むことができる。
【0072】
さらに、「例示的」という用語は、本明細書では「例、事例、または実例としての役割を果たす」ことを意味するために使用される。「例示的」として本明細書に記載された実施形態または設計は、必ずしも他の実施形態または設計よりも好ましいか、または有利であると解釈されるべきではない。「少なくとも1つ」および「1つまたは複数」という用語は、1以上の任意の整数(すなわち、1、2、3、4など)を含んでいると理解される。「複数」という用語は、2以上の任意の整数(すなわち、2、3、4、5など)を含んでいると理解される。「接続」という用語は、間接的「接続」および直接的「接続」の両方を含むことができる。
【0073】
「約」、「実質的に」、「近似的に」、およびこれらの変形の用語は、本願書の出願時に使用できる機器に基づいて、特定の量の測定に関連付けられた誤差の程度を含むよう意図されている。例えば、「約」は、特定の値の±8%または5%、あるいは2%の範囲を含むことができる。
【0074】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読ストレージ媒体を含んでよい。
【0075】
コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読ストレージ媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー(R)・ディスク、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル・バーサタイル・ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、命令が記録されているパンチカードまたは溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読ストレージ媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を介して伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【0076】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読ストレージ媒体に格納するために転送する。
【0077】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードのいずれかであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide area network)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【0078】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【0079】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図のブロックあるいはその両方のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体がフローチャートまたはブロック図のブロックあるいはその両方のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読ストレージ媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【0080】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図のブロックあるいはその両方のブロックに指定される機能/動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
【0081】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【0082】
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、または開示された実施形態に制限されない。説明された実施形態の範囲を逸脱することのない多くの変更および変形が、当業者にとって明らかである。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書に記載された実施形態を理解できるようにするために選択されている。