(58)【調査した分野】(Int.Cl.,DB名)
コンピューター実行可能命令を格納する1つ又は複数の物理記憶デバイスを含むコンピュータープログラム製品であって、前記コンピューター実行可能命令は、コンピューティングシステムの1つ又は複数のプロセッサーによって実行されると、前記コンピューティングシステムに、プライマリ目標コンポーネントの共同レビューを容易にするマルチテナント共同レビューサービスを動作させるように構成され、前記マルチテナント共同レビューサービスは、
前記マルチテナント共同レビューサービスによりサポートされる複数のテナントにわたって利用可能な、前記マルチテナント共同レビューサービスの複数の共通の機能を提供するステップと、
1つ又は複数のテナント固有の機能を前記マルチテナント共同レビューサービスに組み込むことができる、前記マルチテナント共同レビューサービスの機能拡張ポイントを提供するステップと
を含み、
前記複数のテナントのうちの少なくとも1つについて、対応するレビュー対象アーティファクトセットが、前記マルチテナント共同レビューサービスにおける第1の記憶装置及び前記複数のテナントのうちの前記少なくとも1つにおける第2の記憶装置の間で分散され、共同作業の対象である前記レビュー対象アーティファクトセットのプライマリ目標コンポーネントは前記第2の記憶装置において対応するテナントによって独自にアクセス可能に保持され、前記プライマリ目標コンポーネントの前記共同レビューをサポートする前記レビュー対象アーティファクトセットの1つ又は複数のセカンダリコンポーネントは前記第1の記憶装置において前記対応するテナントからリモートで保持されるコンピュータープログラム製品。
前記1つ又は複数のセカンダリコンポーネントは複数のディスカッションスレッドを含むスレッドデータを含み、各ディスカッションスレッドは前記プライマリ目標コンポーネントの対応する部分に対してコメントする請求項1に記載のコンピュータープログラム製品。
前記レビューサービスは、前記複数のディスカッションスレッドのうちの1つが追加のコメントによって更新される場合に、対応するテナントのメンバーの少なくとも一部を更新するようにさらに構成される請求項5に記載のコンピュータープログラム製品。
前記レビューサービスは、前記レビューサービス及びテナントがそれを通して通信することができるアプリケーションプログラミングインターフェイスを提供する請求項1に記載のコンピュータープログラム製品。
前記レビューサービスはさらに、前記プライマリ目標コンポーネント又は前記プライマリ目標コンポーネントに対応する1つ又は複数の前記セカンダリコンポーネントが更新される場合に、対応するテナントのメンバーの少なくとも一部を更新するように構成される請求項1に記載のコンピュータープログラム製品。
1つ又は複数のプロセッサーを含み且つマルチテナント共同レビューサービスを動作させるように構成されるコンピューターシステムにおいて実施される、プライマリ目標コンポーネントの共同レビューを容易にする方法であって、
前記マルチテナント共同レビューサービスの複数のテナントの各々の少なくとも1つの対応するプライマリ目標コンポーネントのレビューを容易にするために、前記複数のテナントにわたって共通の機能を提供する、前記マルチテナント共同レビューサービスの1つ又は複数の共通の機能を含む、複数の共同の機能を提供するステップと、
前記複数のテナントのサブセットのみに対してそれぞれ固有の1つ又は複数のテナント固有の機能を前記マルチテナント共同レビューサービスに組み込むことができる、前記マルチテナント共同レビューサービスの機能拡張ポイントを提供するステップであって、各々のテナント固有の機能は前記複数のテナントのうちの特定のテナントによって提供され、少なくとも1つのテナント固有の機能が、前記マルチテナント共同レビューサービスに、前記複数のテナントのうちの少なくとも第2のテナントには提供されない、前記複数のテナントのうちの第1のテナントの対応するプライマリ目標コンポーネントのレビューを容易にするための機能を提供させる、ステップと、
対応するテナント固有の機能を修正する指示を前記複数のテナントのうちの1つから受け取るステップと、
前記指示に従って、前記テナント固有の機能を修正するステップと
を含む方法。
【発明を実施するための形態】
【0011】
[0017]本明細書に記載の実施例によれば、マルチテナント共同レビューサービスが説明される。サービスは、複数のテナントの各々について、少なくとも1つのレビュー対象アーティファクトセット(review target artifact set)の共同レビューを容易にする。各レビュー対象アーティファクトセットは、レビューされるプライマリ目標コンポーネント(primary goal component)を含む。一例として、プライマリ目標コンポーネントは、ソースコードドキュメントであってもよい。レビューサービスは、テナント固有の機能をレビューサービスに組み込むことができる機能拡張ポイント(extensibility point)を提供するという点で、拡張可能である。したがって、すべてのテナントにとって利用できる共通の機能があってもよいが、テナントはなお、各テナントについて独自のエクスペリエンスを可能とされる。1つ又は複数のテナントについて、対応するレビュー対象アーティファクトセットは、レビュー対象アーティファクトセットのテナントアクセス可能なサブセットが対応するテナントによって一意的にアクセスできるように、及びレビュー対象アーティファクトセットの集中化されたサービスサブセットが対応するテナントから遠隔に維持されるように、分散される。この分散は、テナントの信頼度を保つために行われてもよい。まず、コンピューティングシステムに関するいくつかの導入的議論が
図1に関して説明される。次いで、共同レビューサービスの実施例が
図2から
図7に関して説明される。最後に、例示的なクライアント側のエクスペリエンスが
図8及び
図9に関して説明される。
【0012】
[0018]まず、コンピューティングシステムについての導入的な議論が
図1に関して説明される。コンピューティングシステムは、現在、ますます多種多様な形態を取っている。コンピューティングシステムは、例えば、ハンドヘルドデバイス、アプライアンス、ラップトップコンピューター、デスクトップコンピューター、メインフレーム、分散コンピューティングシステム、又は従来はコンピューティングシステムと考えられていなかったデバイスですらあってもよい。この詳細な説明及び特許請求の範囲において、「コンピューティングシステム」という用語は、少なくとも1つの物理的な有形のプロセッサー及びプロセッサーによって実行することができるコンピューター実行可能命令を有することができる物理的な有形のメモリーを含む、任意の装置又はシステム(又はその組み合わせ)を含むものとして広く定義される。メモリーは、任意の形態をとることができ、コンピューティングシステムの性質及び形態に依存し得る。
【0013】
[0019]コンピューティングシステムは、ネットワーク環境を介して分散されてもよいし、複数の構成コンピューティングシステムを含んでもよい。例えば、(ウェブサービスなどの)サービスは、多くの場合、ネットワークを介して分散されたコンピューティングシステムである。サービスの一例は本明細書に記載されるレビューサービスである。
【0014】
[0020]
図1に示すように、その最も基本的な構成において、コンピューティングシステム100は、通常、少なくとも1つの処理ユニット102及びメモリー104を含む。メモリー104は、揮発性、不揮発性、又はこの2つの組み合わせであってもよい物理的なシステムメモリーであってもよい。「メモリー」という用語はまた、物理的記憶媒体などの不揮発性大容量記憶装置を指すように本明細書において用いてもよい。コンピューティングシステムが分散された場合、処理、メモリー及び/又は記憶の能力も同様に分散することができる。本明細書において使用されるとき、「モジュール」又は「コンポーネント」という用語は、コンピューティングシステム上で実行されるソフトウェアオブジェクト又はルーチンを指すことができる。本明細書に記載の異なるコンポーネント、モジュール、エンジン、及びサービスは、(例えば、別個のスレッドとして)コンピューティングシステム上で実行されるオブジェクト又はプロセスとして実施することができる。
【0015】
[0021]以下の説明では、実施例は、1つ又は複数のコンピューティングシステムによって実行される行為(acts)を参照して説明される。このような行為がソフトウェアで実施される場合、行為を実行する関連付けられるコンピューティングシステムの1つ又は複数のプロセッサーは、コンピューター実行可能命令を実行したことに応答して、コンピューティングシステムの動作を指示する。このような動作の例はデータの操作を含む。コンピューター実行可能命令(及び操作されたデータ)は、コンピューティングシステム100のメモリー104に格納することができる。
【0016】
[0022]コンピューターシステム100はまた、コンピューティングシステム100が例えばネットワーク110を介して他のコンピューティングシステムと通信することを可能にする通信チャネル108を含んでもよい。コンピューティングシステムはまた、コンピューティングシステムのユーザーがインターフェイスすることができる1つ又は複数のユーザーインターフェイスを表示することができるディスプレイ112を含んでもよい。例えば、コンピューティングシステム100がクライアントコンピューティングシステムである場合、ユーザーはディスプレイ112を使用してコンピューティングシステムとインタラクトすることができる。ディスプレイは、例えば、レビュー対象アーティファクトセットの一部をクライアントに対して表示してもよい。クライアントコンピューティングシステム上で実行されるアプリケーションは、本明細書において、「クライアント側アプリケーション」とも呼ぶ。レビューアプリケーションのコンテキストにおいて、クライアント側アプリケーションは、レビュー対象アーティファクトセットの一部を表示し、レビューサービスからレビュー対象アーティファクトセットに関する更新を受信し、ユーザー入力を解釈し、特定のタイプのユーザー入力をレビューサービスに通知することなどについて責任があってもよい。
【0017】
[0023]本明細書に記載される実施例は、以下でより詳細に説明されるように、例えば1つ又は複数のプロセッサー及びシステムメモリーなどのコンピューターハードウェアを含む専用又は汎用コンピューターを含み、又は利用することができる。本明細書に記載の実施例はまた、コンピューター実行可能命令及び/又はデータ構造を運んだり格納したりするための物理的な及び他のコンピューター読み取り可能な媒体を含む。そのようなコンピューター読み取り可能な媒体は、汎用又は専用コンピューターシステムによってアクセスできる任意の利用可能な媒体とすることができる。コンピューター実行可能命令を格納するコンピューター読み取り可能な媒体は物理記憶媒体である。コンピューター実行可能命令を運ぶコンピューター読み取り可能な媒体は伝送媒体である。したがって、限定ではなく例として、本発明の実施例は、コンピューター記憶媒体及び伝送媒体という、少なくとも2つの明らかに異なる種類のコンピューター読み取り可能な媒体を含むことができる。
【0018】
[0024]コンピューター記憶媒体は、RAM、ROM、EEPROM、CD−ROM又は他の光ディスク記憶装置、磁気ディスク記憶装置又は他の磁気記憶装置、あるいは、コンピューター実行可能命令又はデータ構造の形で所望のプログラムコード手段を格納するために使用でき、汎用又は専用コンピューターによってアクセスすることができる任意の他の媒体を含む。
【0019】
[0025]「ネットワーク」は、コンピューターシステム及び/又はモジュール及び/又は他の電子デバイス間での電子データの移送を可能にする1つ又は複数のデータリンクとして定義される。情報がコンピューターネットワーク又は別の通信接続(有線、無線、又は有線と無線の組み合わせのいずれか)を介してコンピューターに転送又は提供される場合、コンピューターはその接続を伝送媒体として適切にみなす。伝送媒体は、所望のプログラムコード手段をコンピューター実行可能命令又はデータ構造の形で運ぶのに使用することができ、汎用又は専用コンピューターによってアクセスすることができる、ネットワーク及び/又はデータリンクを含むことができる。上記の組み合わせはまた、コンピューター読み取り可能な媒体の範囲内に含まれるべきである。
【0020】
[0026]さらに、様々なコンピューターシステムコンポーネントに到達すると、コンピューター実行可能命令又はデータ構造の形式のプログラムコード手段は、伝送媒体からコンピューター記憶媒体へ自動的に転送することができる(又はその逆も可能である)。例えば、ネットワーク又はデータリンクを介して受信されるコンピューター実行可能命令又はデータ構造は、ネットワークインターフェイスモジュール(例えば「NIC」)内のRAMにバッファすることができ、その後、最終的には、コンピューターシステムのRAM及び/又はコンピューターシステムにおける低揮発性のコンピューター記憶媒体に転送することができる。したがって、コンピューター記憶媒体が、伝送媒体をも(又は主として)利用するコンピューターシステムコンポーネントに含めることができることを理解すべきである。
【0021】
[0027]コンピューター実行可能命令は、例えば、命令及びデータを含んでおり、これは、プロセッサーで実行されると、汎用コンピューター、専用コンピューター、又は専用処理デバイスに、特定の機能又は機能のグループを実行させる。コンピューター実行可能命令は、例えば、バイナリー、アセンブリ言語などの中間フォーマット命令、又はさらにソースコードであってもよい。主題は構造的特徴及び/又は方法論的動作に特有の言葉で説明されたが、添付の特許請求の範囲で定義される主題は、必ずしも説明された特徴又は上述の行為に限定されないことを理解すべきである。そのようなものではなく、説明される特徴及び行為は、特許請求の範囲を実施するための例示的形態として開示されている。
【0022】
[0028]当業者であれば、本発明が、パーソナルコンピューター、デスクトップコンピューター、ラップトップコンピューター、メッセージプロセッサー、ハンドヘルドデバイス、マルチプロセッサーシステム、マイクロプロセッサーベース又はプログラム可能な家庭用電化製品、ネットワークPC、ミニコンピューター、メインフレームコンピューター、携帯電話、PDA、ページャー、ルーター、スイッチなどを含むを含む多くの種類のコンピューターシステム構成を有するネットワークコンピューティング環境で実施され得ることを理解するであろう。本発明はまた、ネットワークを通じて(有線データリンク、無線データリンクによって、又は有線と無線データリンクの組み合わせによって)リンクされるローカル及びリモートのコンピューターシステムの両方がタスクを実行する分散システム環境において実施することができる。分散システム環境では、プログラムモジュールは、ローカルとリモートの両方のメモリー記憶デバイスに配置することができる。
【0023】
[0029]
図2は、プライマリ目標コンポーネント(primary goal component)の共同レビュー(collaborative review)を容易にするマルチテナント共同レビューサービス201を含む共同作業環境(collaborative environment)200を示す。レビューサービス201は、コンピューティングシステム又は複数の相互作用するコンピューティングシステムによって実行することができる。このようなコンピューティングシステムは、例えば、
図1のコンピューティングシステム100について上述されたように構造化されてもよい。レビューサービス201は、コンピューティングシステムのプロセッサーによって実行されるとコンピューティングシステムにレビューサービス又はレビューサービスの一部を動作させるように構造化されるコンピューター実行可能命令を有する1つ又は複数のコンピューター読み取り可能な記憶媒体を有するコンピュータープログラム製品を使用して実行される、ソフトウェアソリューションであってもよい。
【0024】
[0030]レビューサービス201はマルチテナントであり、各テナントは1つ又は複数の対応するプライマリ目標コンポーネントを共同でレビューするメンバーを有する。例えば、1つのテナントがソフトウェアパッケージの1つのコンポーネントを協力してレビューしてもよいし、別のテナントがソフトウェアパッケージの別のコンポーネントを協力してレビューしてもよい。それによると、以下で説明されるメカニズムを使用して、テナント間で機密性が保持される。したがって、1つのテナントが1つの会社からのものであってもよいし、他のものが完全に無関係なプロジェクトに取り組んでいる他の会社からのものであってもよい。さらに、各テナントのプライマリ目標コンポーネントは異なっていてもよいので、各テナントは、異なる種類のプライマリ目標コンポーネントに取り組んでいてもよい。例えば、1つのテナントがソースコードのテキストに取り組んでいてもよい一方で、別のテナントが設計ドキュメントに取り組んでいてもよく、さらに別のテナントがワープロドキュメントに取り組んでいてもよい。
【0025】
[0031]
図2の例では、レビューサービス201は、3つのテナント211、212及び213にサービス提供するものとして示される。しかし、省略記号214は、レビューサービス201が、理論的な上限なく、わずか1つのテナントから数千のテナント又はそれ以上もの数のテナントまでを表してもよいことを表す。しかし、共同レビューサービス201のマルチテナント性及び拡張機能を十分に活用するには、少なくとも2つのテナントが存在することが好ましい。
【0026】
[0032]
図2に示されるこの例では、破線のボックスで表されるようなテナント211の3つのメンバー221、222及び223が存在する。加えて、点線のボックスで表されるようなテナント212の3つのメンバー223、224及び225が存在する。時折メンバーが2つの異なるチームで作業することができるときに、メンバー223がどのようにして2つのテナント211及び212のメンバーとなるかに注目されたい。最後に、断続的な一点鎖線ボックスにより表されるように、テナント213の2つのメンバー226及び227が存在する。
【0027】
[0033]メンバーは、テナントに対応するチームのメンバーである人間であってもよく、その場合、メンバーは、レビューサービスとインターフェイスするために(おそらくはクライアント側アプリケーションを含む)クライアントコンピューティングシステムを使用することができる。あるいは、メンバーは、レビューを実行することが可能な(及びレビューを実行することを適切に許可された)人工知能を有するコンピューティングシステムによって実行される自動化された分析処理であってもよい。一例で、作者がソースコードドキュメントの繰り返し(又はバージョン)を公開していたと仮定する。さらに、ソースコードが参照されない変数又は標準の命名規則と一致しない名前を持つ変数を有すると仮定する。注釈機能(自動化された分析処理の例)は、参照されていない変数を見つけ、この変数が注釈を付けられるべきであることを決定するためにいくつかの計算を実行し、この変数に対応するディスカッションスレッドにいくつかのコメントを追加してもよい。
【0028】
[0034]
図2に示されるメンバーシップは、もちろん単なる一例である。テナントは任意の数のメンバーを有してもよく、時にはメンバーシップは動的に変化する。例えば、テナントがソースコードの一部に取り組んでいたソフトウェア開発チームに対応していた場合、そのチームに対する新規採用(new hire)は、その対応するテナントのメンバーとして追加される。
【0029】
[0035]各テナント211から213は、それぞれ、自身のデータストア231から233を有する。これらのデータストアは231から233は、それぞれ、対応する各テナント211から213に対してローカルであってもよいが、そうである必要はない。にもかかわらず、データストアがどこにあるかにかかわらず、データストア231から233は、対応するテナント211から213によって一意に(uniquely)アクセスできる。この説明及び特許請求の範囲では、対応するデータストアは、そのテナントのメンバーではないエンティティがテナントについての特定の許可を有しない限り対応するデータストアへのアクセスを与えられないという点で、対応するテナントに対して「一意にアクセス可能」である。レビューサービスは、対応するテナントデータストア上で最も機密性の高いなテナントデータ(以下、「テナントアクセス可能なデータ」又は「テナントアクセス可能なサブセット」と呼ばれる)を保持することによってテナント間の高いレベルの機密性を維持し、テナントから離れた位置における及びレビューサービス201によってよりアクセス可能である機密性の低いデータやまったく機密性のないデータ(以下「集中型サービスデータ」又は「集中型サービスサブセット」と呼ぶ)を保持してもよい。例えば、そのような機密性が低いデータ又は機密性のないデータは、レビューサービス201にとってアクセス可能なデータストア260において保持することができる。しかし、データストア260に配置されるデータが機密性が低いとしても、レビューサービス201は、それでもなお、そのようなデータがそのデータを所有する対応するテナントにのみ提供されるように、保護を提供してそのようなデータへのアクセスに対してセキュリティを課してもよい。
【0030】
[0036]レビューサービス201は、テナント211から213のすべてにわたって共通である1つ又は複数の機能を表す共通の機能202を含む。例えば、テナント211から213の各々がソフトウェア開発チームに対応し、各テナントのプライマリ目標コンポーネントがソースコードのテキストであると仮定する。共通の機能は、開発チームにかかわらず適用される機能を含んでもよい。おそらく、これらは、テナントの優先権(preferences)にかかわらずソフトウェア開発チームに役立ち得る機能である。例として、共通の機能202は、変更追跡(change tracking)機能、バージョン(versioning)機能、通知機能、ディスカッションスレッド機能、統計機能などを含んでもよい。
【0031】
[0037]例えば、統計機能は、1)いくつの及びどのメンバーがプライマリ目標コンポーネントのレビューにアクティブに取り組んでいるか、2)任意の又は特定のメンバーがプライマリ目標コンポーネントについてコメントしてからどのくらいの時間が経過したか、3)誰がプライマリ目標コンポーネントにサインオフしたか、4)メンバーがレビューを開始したときからメンバーがプライマリ目標コンポーネントにサインオフするときまでの間の時間の平均の長さ、5)レビューサービスが(
図3に関して説明される)レビュー対象アーティファクトセットに対する変更の通知を受信したときからこの変更がテナントの他のメンバーに配信されるときまでの間の平均時間、6)特定のテナントにサービス提供するために使用される処理、メモリー、及び他のリソース、などの統計を追跡してもよい。レビューサービス201は、それに提供される情報を用いて、任意の他の所望の統計もまた実行することができる。
【0032】
[0038]レビューサービスがマルチテナントであり、すべてのテナントにわたって共通の機能を提供するという事実は、自身の共同レビューメカニズムを見つけるように各テナントを強制するのではなく、複数のテナントがレビューサービスを使用することを可能にする。それでもなお、各テナントに対する外観(appearance)がレビューサービスがちょうどそれらを支援しているものとなるように、各テナントのエクスペリエンスは他のテナントのエクスペリエンスから分離される。したがって、レビューサービスは、複数のテナントについて共同レビューを容易にする効率的な方法である。
【0033】
[0039]レビューサービス201はまた、レビューサービスに組み込むことができるテナント固有の機能240を含む。これらのテナント固有の機能240は、各々が、テナント211から213のサブセットのみに適用することができる。簡単な例では、テナント固有の機能240は3つのテナント固有の機能241から243を含むが、省略記号244は他の数のテナント固有の機能が存在し得ることを表す。任意の所与のテナントは、それらに適用される1つ又は複数のテナント固有の機能を有してもよい。いくつかの場合には、テナント固有の機能がなく、適用される共通の機能202を単に有するテナントが存在してもよい。具体的な例として、おそらくはテナント固有の機能241がテナント211のみに適用されてもよく、テナント固有の機能242がテナント212のみに適用されてもよく、テナント固有の機能243がテナント213のみに適用されてもよい。
【0034】
[0040]テナント固有の機能は、テナント211から213のすべてにわたっては適用されないかもしれないが、チームの目的や好みに特に適用され得る機能である。例として、あるチームがサインオフを使用し得る一方で、別のチームはそうでない場合がある。その場合、サインオフ機能は、テナント211に適用することができるが、テナント212及び213には適用することができない。別の例はポリシー機能である。例えば、あるテナントがレビューを完全であるとしてマークするために2つのサインオフを必要としてもよい一方で、別のテナントがサインオフを1つだけ必要としてもよい。両方のテナントが同じポリシー機能を使用し得る場合でも、それらは異なる構成又はしきい値を有し得る。別のテナントは、プライマリ目標コンポーネントのバージョンを比較するときに、リビジョンがどのように示されるかに関して特定の好みを有することができる。あるものはある方法(例えば、強調された黄色)で追加されたテキストを示すことを好んでもよい一方、別のものは別のメカニズム(例えば、下線)を好んでもよい。これらの選好はまた、テナント固有の機能の一部として表すことができる。1つの実施例では、テナント固有の機能241から243は、それぞれ、拡張可能マークアップ言語(XML)ドキュメントなどの階層的に構造化されたドキュメントである。しかし、テナント固有の機能は、代わりに、プラグインコード、又はレビューサービス201によって認識される任意の他のメカニズムであってもよい。
【0035】
[0041]すでに述べたように、サーバー側の機能240は、テナント固有の機能を容易にするために提供される。また、各テナントについてさらにカスタマイズを提供するために、共通の機能202及び/又はテナント固有の機能240と協力するクライアント側の機能もあってもよい。
【0036】
[0042]レビューサービス201は、テナント211から213がレビューサービス201と通信するために使用することができるアプリケーションプログラミングインターフェイス250を提供する。例えば、1つの具体例では、テナント211から213は、対応するテナントに適用されるテナント固有の機能240を修正する目的でレビューサービス201と通信することができる。例えば、テナントは、テナント固有の機能240にテナント固有の機能を追加することができ、おそらくはテナント固有の機能のうちの1つを修正したり置き換えたりすることができる。テナントはまた、ユーザーの好み、カスタマイズ、又は共通の機能202によって提供される他の設定データを設定してもよい。
【0037】
[0043]
図3は、各テナントについてのコラボレーションエクスペリエンスをサポートするさまざまなコンポーネントを示すために提示されるレビュー対象アーティファクトセット300を示す。したがって、各テナントが異なるプライマリ目標コンポーネントを有するので、各テナントは、異なるレビュー対象アーティファクトセット300を使用する。レビュー対象アーティファクトセット300はオーサリングされた(作成された、authored)データ310を含む。オーサリングされたデータは、プライマリ目標コンポーネント311を含むが、また、プライマリ目標コンポーネント311についてコメントするセカンダリコンポーネント312を含む。
【0038】
[0044]プライマリ目標コンポーネント311は実際にコラボレーションの対象となる。プライマリ目標コンポーネント311は、テキスト、イメージ、アイコン、又は他の任意のレンダリング可能なコンポーネント、又はそれらの組み合わせを含むことができる。例えば、プライマリ目標コンポーネントは、ソースコードドキュメント、デザインドキュメント、又はいくつかの他の種類のワードプロセッシングドキュメントなどのテキストドキュメントであってもよい。
【0039】
[0045]オーサリングされたデータのセカンダリコンポーネント312は、プライマリ目標コンポーネント312の共同レビューをサポートするオーサリングされたデータ(例えば、他のテキスト)である。例として、セカンダリコンポーネント312は、プライマリ目標コンポーネント311の領域に対応するディスカッションスレッドであってもよい。この領域は、ワード、部分ライン(partial line)、任意の数のライン、又はプライマリ目標コンポーネント311の他の部分であってもよい。
【0040】
[0046]より具体的には、プライマリ目標コンポーネント311がソースコードテキストであったと仮定すると、分岐命令の条件がどうあるべきかについての議論を含む分岐命令を強調するスレッドがあってもよい。質問を重視するテナントの複数のメンバーを有するそのディスカッションスレッドに対する複数の貢献者(contributors)があってもよい。
【0041】
[0047]ソースコードの別の部分では、変数の整数の宣言(integer declaration)があってもよい。整数の宣言が実際には浮動小数点宣言であるべきかどうかについての問題に関するその宣言に関する対応するディスカッションスレッドがあってもよいし、小数値を取るためにその変数についてより正確であり得るいくつかの状況についての議論があってもよい。したがって、そのようなディスカッションスレッドを使用して、複数のマインドがプライマリ目標コンポーネントにおける非常にフォーカスされた問題に関して収集することができる。1つの実施例では、このようなディスカッションスレッドは、実質的にリアルタイムで更新される。これにより、プライマリ目標コンポーネントの様々な部分に関して、チームメンバーの思考の統合された効率的な収集が可能になる。
【0042】
[0048]いくつかのディスカッションスレッドは設計指向型であってもよい。例えば、おそらくはレビューアは、識別されたクラスがまとまっている(cohesive)かどうかについてコメントしており、及び/又は、おそらくは特定のコンポーネントへの不要な結合を有する。
【0043】
[0049]いくつかのディスカッションスレッドは論理指向型であってもよい。例えば、レビューアは、特定のパラメータ値(例えば、負の値)が識別された方法に渡される場合にコードの実行に対するいくつかの結果(例えば、システムがクラッシュする)についてコメントしてもよい。
【0044】
[0050]いくつかのディスカッションスレッドは文体指向型(stylistically oriented)であってもよい。例えば、レビューアは、コードが何らかの方法で変更されるならばコードの識別された部分がより良く読むことができるとコメントしてもよい。
【0045】
[0051]いくつかのディスカッションスレッドは、一般的であってもよいし、幾つかの種類の建設的なフィードバックを与えてもよい。例えば、レビューアは、コードのいくつかの特定された領域への修正について称賛を与えてもよいし、又はおそらくはコードの領域がすぐにどれだけ良くドラフトされるかについて称賛してもよい。
【0046】
[0052]レビュー対象アーティファクトセット300はまた、プライマリ目標コンポーネント311に関する又は他の管理上のテナント固有の事項に関するテナント固有のメタデータであるメタデータ322を含む。このようなメタデータ320の種類は限定されるものではないが、例えば、サインオフデータ、メンバーステータスデータ、テナントメンバーシップデータ、選好データ、カスタマイズデータ、作成日、サイズなどのプライマリ目標コンポーネント情報であってもよい。例えば、メンバーステータスデータは、レビューアがレビューを開始したかどうか、レビューの途中であるかどうか、作者を待っているかどうか、又はレビューに対してサインオフしたかどうかなどの、(但しこれらに限定されない)プライマリ目標コンポーネントのレビューの状態を含んでもよい。
【0047】
[0053]レビューサービス201は、既に述べたように、テナントのデータストア(例えば、テナント211のデータストア231)とレビューサービス201のデータストア260との間で適切にレビュー対象アーティファクトセット300を分散することにより、各テナントの機密性を維持する。テナント自体は、その好みの一部として、どのデータがどこに存在することが許可されるか、又はどのデータをレビューサービスにおいて格納するにはあまりに機密性が高いと考えるかを、指定することができる。例えば、おそらくはオーサリングされたデータ310の一部はテナントに配置され、オーサリングされたデータ310の一部はレビューサービスに配置される。
【0048】
[0054]1つの実施例では、プライマリ目標コンポーネント311のほとんど又はすべてがテナントのデータストアに残っていてもよい一方で、(ディスカッションスレッドデータなどの)作成されたデータ310の他のセカンダリコンポーネント312がレビューサービスデータストア260においてリモートで格納されてもよい。また、おそらくはメタデータ320はまた、レビューサービスデータストア260に格納されてもよい。メタデータ320は、さらに、クライアントインターフェイスがそれに応じて更新することができるようにレビューサービス201がテナントに変更を適切に通知するために使用することができる他のポインター又は参照を含むことができる。
【0049】
[0055]レビューサービス201がプライマリ目標コンポーネント自体のコピーを有していない場合があるがそれでもなおメンバーが適切な位置に対して使用しているクライアントに指示する必要があり得るときに、このようなポインター及び参照は特に有用である。例えば、レビューサービスはレビュー対象とされるソースコードドキュメントのコピーを実際には有していなくてもよいが、レビューサービスは、ディスカッションスレッドのコピーを有していてもよく、ソースコードテキスト内の特定のアドレス(例えば、行番号、列番号の範囲)とのそのディスカッションスレッドの相関を有してもよい。別の例として、クライアントがプライマリ目標コンポーネントの2つのバージョンを比較したい場合、レビューサービスは、これら2つのバージョンに対する適切な記憶位置へとクライアントを導くことができてもよい。
【0050】
[0056]
図4は、プライマリ目標コンポーネントの共同レビューを容易にする方法400のフローチャートを示す。方法400は、レビューサービスによってサポートされる複数のテナントにわたって利用できる共通の機能を提供すること(動作401)を含む。
図2を参照すると、このような主要な機能は、例えば、共通の機能202であってもよい。方法400はまた、テナント固有の機能をレビューサービスに組み込むことができる機能拡張ポイント(extensibility point)を提供すること(動作402)を含む。
図2を参照すると、機能拡張ポイントは、API250、又はテナント固有の機能がレビューサービス201にとって利用可能であることを可能にする他のメカニズムであってもよい。レビューサービスは、次いで、共通の機能とテナント固有の機能をを用いてリアルタイムのレビューサービスを実行する(動作403)。
【0051】
[0057]少なくともいくつかの例では、「リアルタイム」のレビューサービスは、作成されたデータのプライマリ目標コンポーネント又はセカンダリコンポーネントに対して変更が生じた場合に、テナントの少なくとも一部のメンバーの各々を更新させる。例として、テナントメンバーがプライマリ目標コンポーネントの一部に関するディスカッションスレッドにコメントを追加すると仮定する。レビューサービスは、これが発生したと特定して、(プライマリ目標コンポーネントを作成及び/又はレビューしている)テナントの各メンバーに変更をすぐに通知することを決定することができる。そのように、テナントの各々の関連するレビューメンバーは、レビューサービスが通知することができるとすぐに、新しいコメントを見ることができる。いくつかの場合には、これにはわずかに数秒又は1秒の何分の1しかかからず、おそらくはプライマリ目標コンポーネントの特定の部分にフォーカスしてレビューサービスを通じて行われるリアルタイムの双方向の会話につながる。クライアントマシン上で、そのディスカッションスレッドは、ディスカッションスレッドが関係するプライマリ目標コンポーネントの対応する部分と視覚的に関連付けることができる。
【0052】
[0058]変更をレンダリングするクライアント側アプリケーションオープンをレビューアが有すると仮定すると、この通知はクライアントアプリケーションに対して直接行うことができる。しかしながら、変更はまた、代替的に又はさらに電子メールによって送信されてもよく、それによって、クライアント側アプリケーションオープンを有していないレビューアであっても変更を通知されることを可能にしてもよい。しかし、本明細書に記載の原理は、レビューアに通知がされる方法に限定されるものではなく、特定の方法で通知されるレビューアの数に限定されるものでもない。
【0053】
[0059]
図5は、テナント上のレビューアにわたってクライアントマシンの選択的なリアルタイムの更新を容易にするために変更の通知に応答する、レビューサービスのための方法500のフローチャートを示す。この方法では、レビューサービスは、テナント固有のメタデータ320及び作成されたデータ310うちの1つが更新される場合に対応するテナントのメンバーのうちの少なくとも一部を更新するように構成される。
【0054】
[0060]レビューサービスは、テナントに対応する目標のレビューアーティファクトセットに対する更新の通知を受け取る(動作501)。レビューサービスは、次いで、必要に応じて、テナント固有のメタデータ又は集中されたサービスデータを更新する(動作502)。これを行うために、レビューサービス201は、共通の機能202のうちの1つ又は複数を実行してもよいし、また、対応するテナントに適用されるテナント固有の機能240を実行してもよい。
【0055】
[0061]例えば、ソースコードドキュメントの特定の部分に関して既存のディスカッションスレッドに対してコメントが加えられる通知(以下、「コメント例の通知」と呼ぶ)をクライアントが受信すると仮定する。レビューサービスは、それによって、レビューサービスに格納されるスレッドの議論を更新する。第2の例として、クライアントが通知(以下、「サインオフ例の通知」と呼ぶ)を受信すると仮定する。その場合には、レビューサービスは、新しいサインオフの状態を反映するために、ソースコードドキュメントに対応するメタデータを更新する。
【0056】
[0062]次いで、レビューサービスは、対応するテナントのメンバーがリアルタイムで変更を通知されるべきであるかどうかを判定する(判定ブロック503)。そのようなリアルタイムの通知がされるべきである場合(判定ブロック503の「はい」)、テナントの関連するメンバー(例えば、対応するプライマリ目標コンポーネントを共同でレビューしているメンバー)は、そのように通知される(動作504)。通知の形式は、メンバーに対して更新をレンダリングする際にクライアントマシンにとって役に立つ任意の情報を含むことができる。この通知の形成は、レビューサービス201が共通の機能202の1つ又は複数及び/又はテナントに対応するテナント固有の機能240の1つ又は複数を実行することに応答して実行されてもよい。
【0057】
[0063]コメント例の通知では、レビューチームの各メンバーは、ディスカッションスレッドでの更新を通知されてもよい。クライアントへ戻る通知は、クライアントに適切な方法で通知を反映させることができる。例えば、この場合、ディスカッションスレッドに対応するプライマリ目標コンポーネントの一部にユーザーがナビゲートすると、ディスカッションスレッドが視覚的に強調された新しいコメントとともに現れてもよい。この場合又は他の場合において、プライマリ目標コンポーネントに関連付けられるディスカッションスレッドに新しいコメントが追加される場合を各レビューアに知らせるように、クライアント上で別の視覚化が表示されてもよい。
【0058】
[0064]サインオフ例の通知では、サインオフは、テナントのチームメンバーが最終的な形でプライマリ目標コンポーネントを考えていることを示すので、重要なイベントであってもよい。したがって、各チームメンバーにこの特定のイベントが通知されてもよい。クライアントマシンは、このサインオフの状態を反映するために行われてもよい。
【0059】
[0065]そのような通知がリアルタイムで行われるべきではないとレビューサービスが判定した場合(判定ブロック503の「いいえ」)、レビューサービスは、通知が全く生じるべきでないかどうかを判定することができる(判定ブロック505)。通知をするべきであるが、全くリアルタイムでない通知である場合(判定ブロック505の「はい」)、通知は後の配信のためにキューに入れられてもよい(動作506)。代替的に、通知がある場合、通知は、即時のものであってキューにいれられず、クライアント側アプリケーションに送信されるか、又は電子メールで送信することができる。この実施例では、レビューアは、クライアント側アプリケーションを開くか、又は単に電子メール通知を見るであろうし、その場合、通知についての別個のキューイングの必要はないであろう。いずれにせよ、いかなる通知の必要もない場合(判定ブロック505の「いいえ」)には、それ以上のアクションは行われない(動作507)。通知をいつ送信するか及び通知に何を含めるかを決定するための基準は、エクスペリエンスをカスタマイズするため及び/又はテナント固有の機能をサポートするために、テナントによって設定することができる。テナントの他のメンバーに通知するか否か、どのメンバーに通知するか、通知に何を含めるべきかについての決定は、1つ又は複数の共通の方法202及び/又は1つ又は複数のテナント固有の方法240の実行によって決定されてもよい。
【0060】
[0066]
図6は、共同マルチテナントレビューサービスを使用してプライマリ目標コンポーネントのテナント独自の共同レビューを容易にする方法600のフローチャートを示す。前述のように、アプリケーションプログラミングインターフェイス250又は他のメカニズムは、テナント固有の機能240を修正するために使用されてもよい。アプリケーションプログラミングインターフェイス250はまた、テナントもしくはユーザーの好みやカスタマイズ設定を設定するために使用されてもよい。(例えば、アプリケーションプログラミングインターフェイス250を介して)テナント固有の機能を修正する指示を受け取ると(動作601)、レビューサービスは、テナント固有の機能を自動的に修正する(動作602)。そのような修正は、例えば、テナント固有の機能にテナント固有の機能を追加することや、おそらくはテナント固有の機能を修正又は置き換えることを含むことができる。
【0061】
[0067]したがって、データへのアクセス及び全体的な機能の経験の両方における、テナントによる共同レビュー経験の分離を可能にするマルチテナント共同レビューシステムが説明された。効率化のために、複数のテナントが、テナントのすべて(又は少なくともかなりの部分)にわたって共通の機能を提供する単一のレビューサービスによってサービス提供されてもよい。
【0062】
[0068]
図7は、
図2の共同作業環境201の1つの非常に具体的な実施例700を示す。ここで、クライアント710は、クライアント711から715を含み、これらは、様々な異なるタイプのクライアントであって、本明細書に記載の原理が特定のクライアントタイプに限定されるものではないことを示す。
図7の図示される例において、クライアント711は、ユーザーがリンクをクリックするとアプリケーションをインストールするスタンドアロンのグラフィカルユーザーインターフェイスクライアントであり、クライアント712はコマンドラインレビュークライアントであり、クライアント713はコマンドラインプロジェクトクライアントであり、クライアント714は共同サービスに特有のアプリケーション固有のクライアントであり、クライアント715は別のカスタムクライアントである。
【0063】
[0069]データストア720は、アクセス制御技術を用いて制御することができるローカルのテナントストアを表す。
図2におけるテナント固有の機能240によって表されるサービスの拡張に加えて、クライアント側の拡張性及びクライアント側の拡張731、732及び733によって表される拡張性があってもよい。必要ではないが、クライアント710はまた、設定情報を格納するためにACTIVE DIRECTORY(登録商標)740にアクセスすることができる。代替的に又はさらに、Active Directoryは、レビューアや作者の情報を検索するために使用することができる。
図7のサービス拡張750は、
図2のテナント固有の機能240の例を表す。この場合、サービス拡張750は、クライアントにダッシュボードベースのユーザーインターフェイスコントロールを提供するダッシュボードサービス751を含む。ダッシュボードサービス751はデータベース752へのアクセスを有する。ダッシュボードサービス751は、どの未処理のレビューが注目/入力を必要としているかを見るためにユーザーが使用することができるクライアントエンドポイントである。
【0064】
[0070]
図7のサービス760は、
図2のレビューサービス201の例である。この場合、レビューサービスの共通の機能は、ディスカバリーサービス761、レビューサービス762、及びプロジェクトサービス763を含む。サービス760は、プロジェクト設定ファイル771及びレビューメタデータ772へのアクセスを有する。1つの実施例では、サービス760及びサービス拡張750は、WINDOWS(登録商標)Communication Foundation(WCF)を使用して作成される。サービス760からの電子メール通知は、電子メールサーバーを介して行うことができる。
【0065】
[0071]
図8及び
図9は、クライアント側アプリケーションのためのユーザーインターフェイスを表す例示的なユーザーインターフェイスを示す。これらの例は、目標のレビューアーティファクトセットに対する更新を通知する場合の、例示的なクライアントの経験を示す。図示される場合において、プライマリ目標コンポーネントは、行906から929が示される、ソースコードドキュメントである。これらが単なる例であることを理解した上で、
図8及び
図9についてさらに詳細に説明する。
【0066】
[0072]
図8は、本明細書において「オリジナルバージョン」及び「改訂バージョン」と呼ばれる複数のバージョンのコードを比較する差分表示を示すコード表示領域801を含む、差分表示ユーザーインターフェイス800を示す。ユーザーインターフェイス800はまた、ファイル選択領域802、レビューア状態領域803、コメント表示領域804を含む。ファイル選択領域802は、レビューされ得るいくつかのコードファイルをリストしており、ファイル821が選択されている。選択されたコードファイル821は、コード表示領域801に表示される。(ほとんどの場合のように)レビュー対象のコードはコード表示領域で表示することができるよりもはるかに大きいので、コード表示領域801はいくつかのナビゲーション支援(navigation aids)を有する。たとえば、コード表示領域801は、それぞれコードの垂直範囲及び水平範囲がコード表示領域801に示されるものを超える場合にはいつでも使用するために有効にされる垂直スクロールバー815及び水平スクロールバー816を有する。コード表示領域801はまた、コードの全体の範囲内で表示可能なコードの現在の垂直位置を表す位置基準インジケーター817及び818を有する。特に、基準インジケーター817はコードのオリジナルバージョン内の表示可能なコードの位置を示し、基準インジケーター818はコードの改訂バージョン内の表示可能なコードの位置を表す。
【0067】
[0073]差分表示の使用により、レビューが異なるバージョンのコード間の差を迅速に確認することが可能となり、その結果、バージョン間でなされる特定の変更に対して深くフォーカスすることができる。本明細書に記載された原理は、コードのバージョン間の差異についての可視化の方法や実際の可視化自体に限定されるものではない。しかし、色を用いることは、差異を可視化することができる無限の様々な方法のうちの1つである。
【0068】
[0074]とは言え、色の使用は、この特許出願では回避される。代わりに、右方向に面するハッシュ化されたボックスによってマークされる領域は、
図8において、赤い強調表示に代えて使用される(ただし、そのような領域はそれでもなお「赤で強調される」ものとして
図8を参照して本明細書で参照される)。さらに、左方向に面するハッシュ化されたボックスによってマークされる領域は、
図8において、黄色の強調表示に代えて使用される(しかし、このような領域はそれでもなお
図8を参照して「黄色で強調される」ものとして本明細書で参照される)。
図8において下線によってマークされる領域は、
図8において、緑の強調表示に代えて使用される(ただし、そのような地域はそれでもなお
図8を参照して「緑で強調される」ものとして本明細書で参照される)。点でマークされた領域は、
図8において、ピンク色の強調表示に代えて使用される(しかし、そのような領域はそれでもなお
図8を参照して「ピンク色で強調される」ものとして参照される)。
【0069】
[0075]
図8を参照すると、コード表示領域は、本明細書においてオリジナルバージョン及び改訂バージョンと呼ばれる2つのバージョンのコードを比較する。全体的に赤で(
図8において右方向に向かうハッシュマーキングで)強調される行は、基準バージョンに対して、現在のバージョンでは完全に削除された行である。赤い部分(右ハッシング)とピンクの部分(
図8における点)の両方を有する行は、除去が行われたが、赤い部分(右ハッシング)が除去された特定の部分である行である。全体的に緑色(
図8における下線)で強調される行は、基準バージョンに対して、現在のバージョンで完全に追加された行であるが、
図8においてはこのような行の例は存在していない。黄色の部分(左ハッシング)及び緑色の部分(下線)を有する行は、追加がなされたが、緑色の部分(左ハッシング)が追加された特定の部分である行である。
【0070】
[0076]差分表示ユーザーインターフェイス800はまた、レビューア状態領域803とコメント領域804を示す。レビューア状態領域803は、レビューアがコードの現在のバージョンに対してサインオフしたことを示すためにレビューアがコントロール831を選択することを可能にする。コントロール832は、レビューアがコードに対する以前のサインオフを取り消すことを可能にする。コントロール833は、レビューアがレビューチームの他の人とインスタントメッセージを行うことを可能にする。
【0071】
[0077]コメント領域804は、コード表示領域801に表示されるコメントに対する異なる表示を可能にする。しかし、
図8においてはコード表示領域801に表示されるコメントがないので、
図8のコメント領域804に表示されるコメントも同様に存在していない。
【0072】
[0078]したがって、
図8は、改訂マーキング又は表示されたコードのバージョンを比較する他の可視化を含む、差分表示ユーザーインターフェイス800を示す。
[0079]
図9は、
図8のユーザーインターフェイス800に類似する差分表示ユーザーインターフェイス900を示す。実際には、差分表示ユーザーインターフェイス900は、ここではコメントがコードに追加されてコードの特定の部分(この場合には、コードの行912)と関連することを除いて、
図8のものと同じユーザーインターフェイスであってもよい。コメントの装飾901は、複数のコメンターからのコメントを含むことができディスカッションスレッドを含む。新しいコメントがディスカッションスレッドに追加されたことをレビューコンピューティングシステムがクライアント側アプリケーションに通知する場合に更新することができるものが、このディスカッションスレッドである。コメントの装飾901はまた、コメント装飾の状態(この場合は、ディスカッションスレッドの状態)を示す可視化(この場合はドロップダウンボックス902)を含むことができる。別の例として、状態の可視化は、コメントの装飾の程度(severity)を示してもよい。スレッドの状態が
図9のドロップダウンボックス902の場合には、アクティブ状態は、スレッドがレビューアによって作成されたが、ディスカッションスレッドの主題がまだ作者によって対処されていないことを示す。保留(pending)状態は、作者がレビューアに同意するが、まだ修正が適用されていないことを示す。解決状態(resolve status)は、作者が問題を修正したか又はレビューアの質問に答えたことを示す。「wontfix」状態は、作者がディスカッションスレッドの提案に同意せず、したがって作者がその視点についての説明を提供し、スレッドを「修正しない(won’t fix)」としてマークしたことを示す。クローズ状態は作者とレビューアが修正を確認することを示す。
【0073】
[0080]
図9のコメント領域804’は、その内容において、
図8のコメント領域804に比べて若干異なる。コメント領域804’は、ここでは、コード表示領域801’において表示されるコメントのすべてに対して異なる表示を有する。
【0074】
[0081]したがって、マルチテナント共同レビューサービス及び共同作業環境が説明された。本発明は、その趣旨や本質的な特徴から逸脱することなく他の特定の形態で実施することができる。説明した実施例は、すべての点で単なる例示であり、限定的ではないものと考えられるべきである。したがって、本発明の範囲は、前述の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲と均等の意味及び範囲内のすべての変更は、その範囲内に包含されるべきである。