(57)【特許請求の範囲】
【請求項１】
コンピューター実行可能命令を格納する１つ又は複数の物理記憶デバイスを含むコンピュータープログラム製品であって、前記コンピューター実行可能命令は、コンピューティングシステムの１つ又は複数のプロセッサーによって実行されると、前記コンピューティングシステムに、プライマリ目標コンポーネントの共同レビューを容易にするマルチテナント共同レビューサービスを動作させるように構成され、前記マルチテナント共同レビューサービスは、
前記マルチテナント共同レビューサービスによりサポートされる複数のテナントにわたって利用可能な、前記マルチテナント共同レビューサービスの複数の共通の機能を提供するステップと、
１つ又は複数のテナント固有の機能を前記マルチテナント共同レビューサービスに組み込むことができる、前記マルチテナント共同レビューサービスの機能拡張ポイントを提供するステップと
を含み、
前記複数のテナントのうちの少なくとも１つについて、対応するレビュー対象アーティファクトセットが、前記マルチテナント共同レビューサービスにおける第１の記憶装置及び前記複数のテナントのうちの前記少なくとも１つにおける第２の記憶装置の間で分散され、共同作業の対象である前記レビュー対象アーティファクトセットのプライマリ目標コンポーネントは前記第２の記憶装置において対応するテナントによって独自にアクセス可能に保持され、前記プライマリ目標コンポーネントの前記共同レビューをサポートする前記レビュー対象アーティファクトセットの１つ又は複数のセカンダリコンポーネントは前記第１の記憶装置において前記対応するテナントからリモートで保持されるコンピュータープログラム製品。
【請求項２】
前記プライマリ目標コンポーネントはソースコードドキュメントを含む請求項１に記載のコンピュータープログラム製品。
【請求項３】
前記プライマリ目標コンポーネントはテキストドキュメントを含む請求項１に記載のコンピュータープログラム製品。
【請求項４】
前記プライマリ目標コンポーネントはイメージを含む請求項１に記載のコンピュータープログラム製品。
【請求項５】
前記１つ又は複数のセカンダリコンポーネントは複数のディスカッションスレッドを含むスレッドデータを含み、各ディスカッションスレッドは前記プライマリ目標コンポーネントの対応する部分に対してコメントする請求項１に記載のコンピュータープログラム製品。
【請求項６】
前記レビューサービスは、前記複数のディスカッションスレッドのうちの１つが追加のコメントによって更新される場合に、対応するテナントのメンバーの少なくとも一部を更新するようにさらに構成される請求項５に記載のコンピュータープログラム製品。
【請求項７】
前記レビューサービスは、前記レビューサービス及びテナントがそれを通して通信することができるアプリケーションプログラミングインターフェイスを提供する請求項１に記載のコンピュータープログラム製品。
【請求項８】
前記レビューサービスは、前記プライマリ目標コンポーネントに関するテナント固有のメタデータを保持する請求項１に記載のコンピュータープログラム製品。
【請求項９】
前記テナント固有のメタデータは、前記テナントに対応する前記プライマリ目標コンポーネントのレビューに関するメンバーのステータスを含む請求項８に記載のコンピュータープログラム製品。
【請求項１０】
前記テナント固有のメタデータは、前記対応するテナントのメンバーシップを含む請求項８に記載のコンピュータープログラム製品。
【請求項１１】
前記レビューサービスはさらに、前記プライマリ目標コンポーネント又は前記プライマリ目標コンポーネントに対応する１つ又は複数の前記セカンダリコンポーネントが更新される場合に、対応するテナントのメンバーの少なくとも一部を更新するように構成される請求項１に記載のコンピュータープログラム製品。
【請求項１２】
１つ又は複数のプロセッサーを含み且つマルチテナント共同レビューサービスを動作させるように構成されるコンピューターシステムにおいて実施される、プライマリ目標コンポーネントの共同レビューを容易にする方法であって、
前記マルチテナント共同レビューサービスの複数のテナントの各々の少なくとも１つの対応するプライマリ目標コンポーネントのレビューを容易にするために、前記複数のテナントにわたって共通の機能を提供する、前記マルチテナント共同レビューサービスの１つ又は複数の共通の機能を含む、複数の共同の機能を提供するステップと、
前記複数のテナントのサブセットのみに対してそれぞれ固有の１つ又は複数のテナント固有の機能を前記マルチテナント共同レビューサービスに組み込むことができる、前記マルチテナント共同レビューサービスの機能拡張ポイントを提供するステップであって、各々のテナント固有の機能は前記複数のテナントのうちの特定のテナントによって提供され、少なくとも１つのテナント固有の機能が、前記マルチテナント共同レビューサービスに、前記複数のテナントのうちの少なくとも第２のテナントには提供されない、前記複数のテナントのうちの第１のテナントの対応するプライマリ目標コンポーネントのレビューを容易にするための機能を提供させる、ステップと、
対応するテナント固有の機能を修正する指示を前記複数のテナントのうちの１つから受け取るステップと、
前記指示に従って、前記テナント固有の機能を修正するステップと
を含む方法。
【請求項１３】
前記指示はアプリケーションプログラミングインターフェイスを介して受け取られ、前記修正するステップは自動的に生じる請求項１２に記載の方法。
【請求項１４】
前記テナント固有の機能を修正するステップは、
前記１つ又は複数のテナント固有の機能にテナント固有の機能を追加するステップ
を含む請求項１２に記載の方法。
【請求項１５】
前記テナント固有の機能を修正するステップは、
前記１つ又は複数のテナント固有の機能のうちのテナント固有の機能を修正するステップ
を含む請求項１２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチテナント共同レビューサービスに関する。
【背景技術】
【０００２】
[0001]コンピューターシステム及びサービスは、人々が生活し、働き、ビジネスを行う方法に革命をもたらした。そのようなシステム及びサービスの動作は、大部分が、コンピューターソフトウェアによって管理される。コンピューターソフトウェアは、多くの場合、ソースコード（すなわち、コンピュータープログラム）をドラフトするコンピュータープログラマーによって生成される。そのソースコードは、最終的に、実行の前及び／又は実行時に機械読み取り可能なコードへとコンパイル又は解釈される。
【０００３】
[0002]このようなコンピューティングシステム及びサービスの機能が増加するにつれて、コンピュータープログラムは、より一層複雑になってきている。多くのコンピュータープログラムは、１人の人間によって書くには複雑すぎる。したがって、コンピューター・プログラムは、しばしば、コンピュータープログラマーのチームによって協力して作成される。コンピュータープログラムの協調的な作成を容易にするために、様々な役に立つ従来の共同作成プログラムが存在する。例えば、このようなツールは、多くの場合、コードの最終バージョンが達成されるまで、チームがコードのあるバージョンから次のバージョンに移ることを可能にする。
【０００４】
[0003]書くことがより複雑になっていることに加えて、ソフトウェアは、コードのバージョンごとに慎重に見直されるべきである。したがって、共同レビュー（collaborative review）プログラムも存在する。このように、共同作成プログラムは、コードのあるバージョンから次へと移るために変更がなされることを可能にするが、共同レビュープログラムは、次のオーサリングの段階においてなされるべき変更を理解し計画するために、コードの各バージョンについての詳細なレビューを可能にする。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
マルチテナント共同レビューサービスを提供する。
【課題を解決するための手段】
【０００６】
[0004]本明細書に記載される少なくとも１つの実施例は、レビューのプライマリ（一次的な、primary）目標コンポーネント（goal component）を含むレビュー対象アーティファクトセット（review target artifact set）の共同レビューを容易にする方法を実行するマルチテナント共同レビューサービスに関する。一例として、プライマリ目標コンポーネントは、ソースコードドキュメントであってもよい。サービスは、レビューサービスによりサポートされる複数のテナントにわたって利用可能な共通の機能を提供するという点で、マルチテナントである。さらに、レビューサービスは、テナント固有の機能をレビューサービスに組み込むことができる機能拡張ポイント（extensibility point）を提供するという点で、拡張可能である。１つ又は複数のテナントのうちの各々について、レビュー対象アーティファクトセットのテナントがアクセス可能なサブセットが対応するテナントによって一意的にアクセス可能に維持されるように、及び、レビュー対象アーティファクトセットの集中化されたサービスサブセットが対応するテナントからリモートで維持されるように、対応するレビュー対象アーティファクトセットは分散される。
【０００７】
[0005]１つの実施例では、このレビュー対象アーティファクトセットの分散は、テナント専用の機密データがそのテナントにのみアクセス可能なままである一方で、機密性の低い又は機密でないデータがテナントから離れ、おそらくはレビューサービスに対してローカルであるように、テナントの機密性を保持するために行われる。いくつかの実施例では、特定の種類の変更がレビュー対象アーティファクトセットに対してなされる場合（例えば、おそらくはディスカッションスレッドへの投稿コメントの追加）、テナントの他のメンバーの少なくともいくつかはリアルタイムで通知される。このように、マルチテナントの共同の拡張可能なレビューサービスが説明される。
【０００８】
[0006]この概要は、詳細な説明で以下にさらに説明される概念の選択を簡略化した形で紹介するために設けられる。この概要は、特許請求される主題の重要な特徴又は不可欠な特徴を特定することを意図しておらず、特許請求される主題の範囲を決定する助けとして使用されることも意図していない。
【０００９】
[0007]上記の並びに他の利点及び特徴を得ることができる方法を説明するために、様々な実施例についてのより具体的な説明が、添付の図面を参照して提供される。これらの図面が単に例示的な実施例を示すものであって、したがって本発明の範囲を限定すると考えるべきでないと理解して、実施例は、以下の添付の図面の使用を通じてさらに具体的かつ詳細に記載され、説明される。
【図面の簡単な説明】
【００１０】
【図１】[0008]本明細書に記載の実施例を使用するために使用され得る例示的なコンピューティングシステムを示す。
【図２】[0009]レビュー対象アーティファクトセットを使用してプライマリ目標コンポーネントの共同レビューを容易にする、マルチテナント共同レビューサービスを含む、共同作業環境を示す。
【図３】[0010]各テナントをサポートする様々なデータを示すために提示されるレビュー対象アーティファクトセットを示す。
【図４】[0011]プライマリ目標コンポーネントの共同レビューを容易にする方法のフローチャートを示す。
【図５】[0012]クライアントの選択的なリアルタイムの更新を容易にするために修正の通知に応答するレビューサービスのための方法のフローチャートを示す。
【図６】[0013]共同マルチテナントレビューサービスを使用してプライマリ目標コンポーネントのテナント独自の共同レビューを容易にする方法のフローチャートを示す。
【図７】[0014]図２の共同作業環境のうちの１つの非常に具体的な実施例を示す。
【図８】[0015]リビジョン変更がコードの装飾として示される差分レビューを示す例示的なユーザーインターフェイスを示す。
【図９】[0016]現在のディスカッションスレッドデコレーションがコードを装飾することを除いて図８のユーザーインターフェイスと類似し、クライアント側アプリケーションがレビューサービスからの更新通知に応答してディスカッションスレッドでどのように更新することができるかを示すために使用される、例示的なユーザーインターフェイスを示す。
【発明を実施するための形態】
【００１１】
[0017]本明細書に記載の実施例によれば、マルチテナント共同レビューサービスが説明される。サービスは、複数のテナントの各々について、少なくとも１つのレビュー対象アーティファクトセット（review target artifact set）の共同レビューを容易にする。各レビュー対象アーティファクトセットは、レビューされるプライマリ目標コンポーネント（primary goal component）を含む。一例として、プライマリ目標コンポーネントは、ソースコードドキュメントであってもよい。レビューサービスは、テナント固有の機能をレビューサービスに組み込むことができる機能拡張ポイント（extensibility point）を提供するという点で、拡張可能である。したがって、すべてのテナントにとって利用できる共通の機能があってもよいが、テナントはなお、各テナントについて独自のエクスペリエンスを可能とされる。１つ又は複数のテナントについて、対応するレビュー対象アーティファクトセットは、レビュー対象アーティファクトセットのテナントアクセス可能なサブセットが対応するテナントによって一意的にアクセスできるように、及びレビュー対象アーティファクトセットの集中化されたサービスサブセットが対応するテナントから遠隔に維持されるように、分散される。この分散は、テナントの信頼度を保つために行われてもよい。まず、コンピューティングシステムに関するいくつかの導入的議論が図１に関して説明される。次いで、共同レビューサービスの実施例が図２から図７に関して説明される。最後に、例示的なクライアント側のエクスペリエンスが図８及び図９に関して説明される。
【００１２】
[0018]まず、コンピューティングシステムについての導入的な議論が図１に関して説明される。コンピューティングシステムは、現在、ますます多種多様な形態を取っている。コンピューティングシステムは、例えば、ハンドヘルドデバイス、アプライアンス、ラップトップコンピューター、デスクトップコンピューター、メインフレーム、分散コンピューティングシステム、又は従来はコンピューティングシステムと考えられていなかったデバイスですらあってもよい。この詳細な説明及び特許請求の範囲において、「コンピューティングシステム」という用語は、少なくとも１つの物理的な有形のプロセッサー及びプロセッサーによって実行することができるコンピューター実行可能命令を有することができる物理的な有形のメモリーを含む、任意の装置又はシステム（又はその組み合わせ）を含むものとして広く定義される。メモリーは、任意の形態をとることができ、コンピューティングシステムの性質及び形態に依存し得る。
【００１３】
[0019]コンピューティングシステムは、ネットワーク環境を介して分散されてもよいし、複数の構成コンピューティングシステムを含んでもよい。例えば、（ウェブサービスなどの）サービスは、多くの場合、ネットワークを介して分散されたコンピューティングシステムである。サービスの一例は本明細書に記載されるレビューサービスである。
【００１４】
[0020]図１に示すように、その最も基本的な構成において、コンピューティングシステム１００は、通常、少なくとも１つの処理ユニット１０２及びメモリー１０４を含む。メモリー１０４は、揮発性、不揮発性、又はこの２つの組み合わせであってもよい物理的なシステムメモリーであってもよい。「メモリー」という用語はまた、物理的記憶媒体などの不揮発性大容量記憶装置を指すように本明細書において用いてもよい。コンピューティングシステムが分散された場合、処理、メモリー及び／又は記憶の能力も同様に分散することができる。本明細書において使用されるとき、「モジュール」又は「コンポーネント」という用語は、コンピューティングシステム上で実行されるソフトウェアオブジェクト又はルーチンを指すことができる。本明細書に記載の異なるコンポーネント、モジュール、エンジン、及びサービスは、（例えば、別個のスレッドとして）コンピューティングシステム上で実行されるオブジェクト又はプロセスとして実施することができる。
【００１５】
[0021]以下の説明では、実施例は、１つ又は複数のコンピューティングシステムによって実行される行為（acts）を参照して説明される。このような行為がソフトウェアで実施される場合、行為を実行する関連付けられるコンピューティングシステムの１つ又は複数のプロセッサーは、コンピューター実行可能命令を実行したことに応答して、コンピューティングシステムの動作を指示する。このような動作の例はデータの操作を含む。コンピューター実行可能命令（及び操作されたデータ）は、コンピューティングシステム１００のメモリー１０４に格納することができる。
【００１６】
[0022]コンピューターシステム１００はまた、コンピューティングシステム１００が例えばネットワーク１１０を介して他のコンピューティングシステムと通信することを可能にする通信チャネル１０８を含んでもよい。コンピューティングシステムはまた、コンピューティングシステムのユーザーがインターフェイスすることができる１つ又は複数のユーザーインターフェイスを表示することができるディスプレイ１１２を含んでもよい。例えば、コンピューティングシステム１００がクライアントコンピューティングシステムである場合、ユーザーはディスプレイ１１２を使用してコンピューティングシステムとインタラクトすることができる。ディスプレイは、例えば、レビュー対象アーティファクトセットの一部をクライアントに対して表示してもよい。クライアントコンピューティングシステム上で実行されるアプリケーションは、本明細書において、「クライアント側アプリケーション」とも呼ぶ。レビューアプリケーションのコンテキストにおいて、クライアント側アプリケーションは、レビュー対象アーティファクトセットの一部を表示し、レビューサービスからレビュー対象アーティファクトセットに関する更新を受信し、ユーザー入力を解釈し、特定のタイプのユーザー入力をレビューサービスに通知することなどについて責任があってもよい。
【００１７】
[0023]本明細書に記載される実施例は、以下でより詳細に説明されるように、例えば１つ又は複数のプロセッサー及びシステムメモリーなどのコンピューターハードウェアを含む専用又は汎用コンピューターを含み、又は利用することができる。本明細書に記載の実施例はまた、コンピューター実行可能命令及び／又はデータ構造を運んだり格納したりするための物理的な及び他のコンピューター読み取り可能な媒体を含む。そのようなコンピューター読み取り可能な媒体は、汎用又は専用コンピューターシステムによってアクセスできる任意の利用可能な媒体とすることができる。コンピューター実行可能命令を格納するコンピューター読み取り可能な媒体は物理記憶媒体である。コンピューター実行可能命令を運ぶコンピューター読み取り可能な媒体は伝送媒体である。したがって、限定ではなく例として、本発明の実施例は、コンピューター記憶媒体及び伝送媒体という、少なくとも２つの明らかに異なる種類のコンピューター読み取り可能な媒体を含むことができる。
【００１８】
[0024]コンピューター記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ又は他の光ディスク記憶装置、磁気ディスク記憶装置又は他の磁気記憶装置、あるいは、コンピューター実行可能命令又はデータ構造の形で所望のプログラムコード手段を格納するために使用でき、汎用又は専用コンピューターによってアクセスすることができる任意の他の媒体を含む。
【００１９】
[0025]「ネットワーク」は、コンピューターシステム及び／又はモジュール及び／又は他の電子デバイス間での電子データの移送を可能にする１つ又は複数のデータリンクとして定義される。情報がコンピューターネットワーク又は別の通信接続（有線、無線、又は有線と無線の組み合わせのいずれか）を介してコンピューターに転送又は提供される場合、コンピューターはその接続を伝送媒体として適切にみなす。伝送媒体は、所望のプログラムコード手段をコンピューター実行可能命令又はデータ構造の形で運ぶのに使用することができ、汎用又は専用コンピューターによってアクセスすることができる、ネットワーク及び／又はデータリンクを含むことができる。上記の組み合わせはまた、コンピューター読み取り可能な媒体の範囲内に含まれるべきである。
【００２０】
[0026]さらに、様々なコンピューターシステムコンポーネントに到達すると、コンピューター実行可能命令又はデータ構造の形式のプログラムコード手段は、伝送媒体からコンピューター記憶媒体へ自動的に転送することができる（又はその逆も可能である）。例えば、ネットワーク又はデータリンクを介して受信されるコンピューター実行可能命令又はデータ構造は、ネットワークインターフェイスモジュール（例えば「ＮＩＣ」）内のＲＡＭにバッファすることができ、その後、最終的には、コンピューターシステムのＲＡＭ及び／又はコンピューターシステムにおける低揮発性のコンピューター記憶媒体に転送することができる。したがって、コンピューター記憶媒体が、伝送媒体をも（又は主として）利用するコンピューターシステムコンポーネントに含めることができることを理解すべきである。
【００２１】
[0027]コンピューター実行可能命令は、例えば、命令及びデータを含んでおり、これは、プロセッサーで実行されると、汎用コンピューター、専用コンピューター、又は専用処理デバイスに、特定の機能又は機能のグループを実行させる。コンピューター実行可能命令は、例えば、バイナリー、アセンブリ言語などの中間フォーマット命令、又はさらにソースコードであってもよい。主題は構造的特徴及び／又は方法論的動作に特有の言葉で説明されたが、添付の特許請求の範囲で定義される主題は、必ずしも説明された特徴又は上述の行為に限定されないことを理解すべきである。そのようなものではなく、説明される特徴及び行為は、特許請求の範囲を実施するための例示的形態として開示されている。
【００２２】
[0028]当業者であれば、本発明が、パーソナルコンピューター、デスクトップコンピューター、ラップトップコンピューター、メッセージプロセッサー、ハンドヘルドデバイス、マルチプロセッサーシステム、マイクロプロセッサーベース又はプログラム可能な家庭用電化製品、ネットワークＰＣ、ミニコンピューター、メインフレームコンピューター、携帯電話、ＰＤＡ、ページャー、ルーター、スイッチなどを含むを含む多くの種類のコンピューターシステム構成を有するネットワークコンピューティング環境で実施され得ることを理解するであろう。本発明はまた、ネットワークを通じて（有線データリンク、無線データリンクによって、又は有線と無線データリンクの組み合わせによって）リンクされるローカル及びリモートのコンピューターシステムの両方がタスクを実行する分散システム環境において実施することができる。分散システム環境では、プログラムモジュールは、ローカルとリモートの両方のメモリー記憶デバイスに配置することができる。
【００２３】
[0029]図２は、プライマリ目標コンポーネント（primary goal component）の共同レビュー（collaborative review）を容易にするマルチテナント共同レビューサービス２０１を含む共同作業環境（collaborative environment）２００を示す。レビューサービス２０１は、コンピューティングシステム又は複数の相互作用するコンピューティングシステムによって実行することができる。このようなコンピューティングシステムは、例えば、図１のコンピューティングシステム１００について上述されたように構造化されてもよい。レビューサービス２０１は、コンピューティングシステムのプロセッサーによって実行されるとコンピューティングシステムにレビューサービス又はレビューサービスの一部を動作させるように構造化されるコンピューター実行可能命令を有する１つ又は複数のコンピューター読み取り可能な記憶媒体を有するコンピュータープログラム製品を使用して実行される、ソフトウェアソリューションであってもよい。
【００２４】
[0030]レビューサービス２０１はマルチテナントであり、各テナントは１つ又は複数の対応するプライマリ目標コンポーネントを共同でレビューするメンバーを有する。例えば、１つのテナントがソフトウェアパッケージの１つのコンポーネントを協力してレビューしてもよいし、別のテナントがソフトウェアパッケージの別のコンポーネントを協力してレビューしてもよい。それによると、以下で説明されるメカニズムを使用して、テナント間で機密性が保持される。したがって、１つのテナントが１つの会社からのものであってもよいし、他のものが完全に無関係なプロジェクトに取り組んでいる他の会社からのものであってもよい。さらに、各テナントのプライマリ目標コンポーネントは異なっていてもよいので、各テナントは、異なる種類のプライマリ目標コンポーネントに取り組んでいてもよい。例えば、１つのテナントがソースコードのテキストに取り組んでいてもよい一方で、別のテナントが設計ドキュメントに取り組んでいてもよく、さらに別のテナントがワープロドキュメントに取り組んでいてもよい。
【００２５】
[0031]図２の例では、レビューサービス２０１は、３つのテナント２１１、２１２及び２１３にサービス提供するものとして示される。しかし、省略記号２１４は、レビューサービス２０１が、理論的な上限なく、わずか１つのテナントから数千のテナント又はそれ以上もの数のテナントまでを表してもよいことを表す。しかし、共同レビューサービス２０１のマルチテナント性及び拡張機能を十分に活用するには、少なくとも２つのテナントが存在することが好ましい。
【００２６】
[0032]図２に示されるこの例では、破線のボックスで表されるようなテナント２１１の３つのメンバー２２１、２２２及び２２３が存在する。加えて、点線のボックスで表されるようなテナント２１２の３つのメンバー２２３、２２４及び２２５が存在する。時折メンバーが２つの異なるチームで作業することができるときに、メンバー２２３がどのようにして２つのテナント２１１及び２１２のメンバーとなるかに注目されたい。最後に、断続的な一点鎖線ボックスにより表されるように、テナント２１３の２つのメンバー２２６及び２２７が存在する。
【００２７】
[0033]メンバーは、テナントに対応するチームのメンバーである人間であってもよく、その場合、メンバーは、レビューサービスとインターフェイスするために（おそらくはクライアント側アプリケーションを含む）クライアントコンピューティングシステムを使用することができる。あるいは、メンバーは、レビューを実行することが可能な（及びレビューを実行することを適切に許可された）人工知能を有するコンピューティングシステムによって実行される自動化された分析処理であってもよい。一例で、作者がソースコードドキュメントの繰り返し（又はバージョン）を公開していたと仮定する。さらに、ソースコードが参照されない変数又は標準の命名規則と一致しない名前を持つ変数を有すると仮定する。注釈機能（自動化された分析処理の例）は、参照されていない変数を見つけ、この変数が注釈を付けられるべきであることを決定するためにいくつかの計算を実行し、この変数に対応するディスカッションスレッドにいくつかのコメントを追加してもよい。
【００２８】
[0034]図２に示されるメンバーシップは、もちろん単なる一例である。テナントは任意の数のメンバーを有してもよく、時にはメンバーシップは動的に変化する。例えば、テナントがソースコードの一部に取り組んでいたソフトウェア開発チームに対応していた場合、そのチームに対する新規採用（new hire）は、その対応するテナントのメンバーとして追加される。
【００２９】
[0035]各テナント２１１から２１３は、それぞれ、自身のデータストア２３１から２３３を有する。これらのデータストアは２３１から２３３は、それぞれ、対応する各テナント２１１から２１３に対してローカルであってもよいが、そうである必要はない。にもかかわらず、データストアがどこにあるかにかかわらず、データストア２３１から２３３は、対応するテナント２１１から２１３によって一意に（uniquely）アクセスできる。この説明及び特許請求の範囲では、対応するデータストアは、そのテナントのメンバーではないエンティティがテナントについての特定の許可を有しない限り対応するデータストアへのアクセスを与えられないという点で、対応するテナントに対して「一意にアクセス可能」である。レビューサービスは、対応するテナントデータストア上で最も機密性の高いなテナントデータ（以下、「テナントアクセス可能なデータ」又は「テナントアクセス可能なサブセット」と呼ばれる）を保持することによってテナント間の高いレベルの機密性を維持し、テナントから離れた位置における及びレビューサービス２０１によってよりアクセス可能である機密性の低いデータやまったく機密性のないデータ（以下「集中型サービスデータ」又は「集中型サービスサブセット」と呼ぶ）を保持してもよい。例えば、そのような機密性が低いデータ又は機密性のないデータは、レビューサービス２０１にとってアクセス可能なデータストア２６０において保持することができる。しかし、データストア２６０に配置されるデータが機密性が低いとしても、レビューサービス２０１は、それでもなお、そのようなデータがそのデータを所有する対応するテナントにのみ提供されるように、保護を提供してそのようなデータへのアクセスに対してセキュリティを課してもよい。
【００３０】
[0036]レビューサービス２０１は、テナント２１１から２１３のすべてにわたって共通である１つ又は複数の機能を表す共通の機能２０２を含む。例えば、テナント２１１から２１３の各々がソフトウェア開発チームに対応し、各テナントのプライマリ目標コンポーネントがソースコードのテキストであると仮定する。共通の機能は、開発チームにかかわらず適用される機能を含んでもよい。おそらく、これらは、テナントの優先権（preferences）にかかわらずソフトウェア開発チームに役立ち得る機能である。例として、共通の機能２０２は、変更追跡（change tracking）機能、バージョン（versioning）機能、通知機能、ディスカッションスレッド機能、統計機能などを含んでもよい。
【００３１】
[0037]例えば、統計機能は、１）いくつの及びどのメンバーがプライマリ目標コンポーネントのレビューにアクティブに取り組んでいるか、２）任意の又は特定のメンバーがプライマリ目標コンポーネントについてコメントしてからどのくらいの時間が経過したか、３）誰がプライマリ目標コンポーネントにサインオフしたか、４）メンバーがレビューを開始したときからメンバーがプライマリ目標コンポーネントにサインオフするときまでの間の時間の平均の長さ、５）レビューサービスが（図３に関して説明される）レビュー対象アーティファクトセットに対する変更の通知を受信したときからこの変更がテナントの他のメンバーに配信されるときまでの間の平均時間、６）特定のテナントにサービス提供するために使用される処理、メモリー、及び他のリソース、などの統計を追跡してもよい。レビューサービス２０１は、それに提供される情報を用いて、任意の他の所望の統計もまた実行することができる。
【００３２】
[0038]レビューサービスがマルチテナントであり、すべてのテナントにわたって共通の機能を提供するという事実は、自身の共同レビューメカニズムを見つけるように各テナントを強制するのではなく、複数のテナントがレビューサービスを使用することを可能にする。それでもなお、各テナントに対する外観（appearance）がレビューサービスがちょうどそれらを支援しているものとなるように、各テナントのエクスペリエンスは他のテナントのエクスペリエンスから分離される。したがって、レビューサービスは、複数のテナントについて共同レビューを容易にする効率的な方法である。
【００３３】
[0039]レビューサービス２０１はまた、レビューサービスに組み込むことができるテナント固有の機能２４０を含む。これらのテナント固有の機能２４０は、各々が、テナント２１１から２１３のサブセットのみに適用することができる。簡単な例では、テナント固有の機能２４０は３つのテナント固有の機能２４１から２４３を含むが、省略記号２４４は他の数のテナント固有の機能が存在し得ることを表す。任意の所与のテナントは、それらに適用される１つ又は複数のテナント固有の機能を有してもよい。いくつかの場合には、テナント固有の機能がなく、適用される共通の機能２０２を単に有するテナントが存在してもよい。具体的な例として、おそらくはテナント固有の機能２４１がテナント２１１のみに適用されてもよく、テナント固有の機能２４２がテナント２１２のみに適用されてもよく、テナント固有の機能２４３がテナント２１３のみに適用されてもよい。
【００３４】
[0040]テナント固有の機能は、テナント２１１から２１３のすべてにわたっては適用されないかもしれないが、チームの目的や好みに特に適用され得る機能である。例として、あるチームがサインオフを使用し得る一方で、別のチームはそうでない場合がある。その場合、サインオフ機能は、テナント２１１に適用することができるが、テナント２１２及び２１３には適用することができない。別の例はポリシー機能である。例えば、あるテナントがレビューを完全であるとしてマークするために２つのサインオフを必要としてもよい一方で、別のテナントがサインオフを１つだけ必要としてもよい。両方のテナントが同じポリシー機能を使用し得る場合でも、それらは異なる構成又はしきい値を有し得る。別のテナントは、プライマリ目標コンポーネントのバージョンを比較するときに、リビジョンがどのように示されるかに関して特定の好みを有することができる。あるものはある方法（例えば、強調された黄色）で追加されたテキストを示すことを好んでもよい一方、別のものは別のメカニズム（例えば、下線）を好んでもよい。これらの選好はまた、テナント固有の機能の一部として表すことができる。１つの実施例では、テナント固有の機能２４１から２４３は、それぞれ、拡張可能マークアップ言語（ＸＭＬ）ドキュメントなどの階層的に構造化されたドキュメントである。しかし、テナント固有の機能は、代わりに、プラグインコード、又はレビューサービス２０１によって認識される任意の他のメカニズムであってもよい。
【００３５】
[0041]すでに述べたように、サーバー側の機能２４０は、テナント固有の機能を容易にするために提供される。また、各テナントについてさらにカスタマイズを提供するために、共通の機能２０２及び／又はテナント固有の機能２４０と協力するクライアント側の機能もあってもよい。
【００３６】
[0042]レビューサービス２０１は、テナント２１１から２１３がレビューサービス２０１と通信するために使用することができるアプリケーションプログラミングインターフェイス２５０を提供する。例えば、１つの具体例では、テナント２１１から２１３は、対応するテナントに適用されるテナント固有の機能２４０を修正する目的でレビューサービス２０１と通信することができる。例えば、テナントは、テナント固有の機能２４０にテナント固有の機能を追加することができ、おそらくはテナント固有の機能のうちの１つを修正したり置き換えたりすることができる。テナントはまた、ユーザーの好み、カスタマイズ、又は共通の機能２０２によって提供される他の設定データを設定してもよい。
【００３７】
[0043]図３は、各テナントについてのコラボレーションエクスペリエンスをサポートするさまざまなコンポーネントを示すために提示されるレビュー対象アーティファクトセット３００を示す。したがって、各テナントが異なるプライマリ目標コンポーネントを有するので、各テナントは、異なるレビュー対象アーティファクトセット３００を使用する。レビュー対象アーティファクトセット３００はオーサリングされた（作成された、authored）データ３１０を含む。オーサリングされたデータは、プライマリ目標コンポーネント３１１を含むが、また、プライマリ目標コンポーネント３１１についてコメントするセカンダリコンポーネント３１２を含む。
【００３８】
[0044]プライマリ目標コンポーネント３１１は実際にコラボレーションの対象となる。プライマリ目標コンポーネント３１１は、テキスト、イメージ、アイコン、又は他の任意のレンダリング可能なコンポーネント、又はそれらの組み合わせを含むことができる。例えば、プライマリ目標コンポーネントは、ソースコードドキュメント、デザインドキュメント、又はいくつかの他の種類のワードプロセッシングドキュメントなどのテキストドキュメントであってもよい。
【００３９】
[0045]オーサリングされたデータのセカンダリコンポーネント３１２は、プライマリ目標コンポーネント３１２の共同レビューをサポートするオーサリングされたデータ（例えば、他のテキスト）である。例として、セカンダリコンポーネント３１２は、プライマリ目標コンポーネント３１１の領域に対応するディスカッションスレッドであってもよい。この領域は、ワード、部分ライン（partial line）、任意の数のライン、又はプライマリ目標コンポーネント３１１の他の部分であってもよい。
【００４０】
[0046]より具体的には、プライマリ目標コンポーネント３１１がソースコードテキストであったと仮定すると、分岐命令の条件がどうあるべきかについての議論を含む分岐命令を強調するスレッドがあってもよい。質問を重視するテナントの複数のメンバーを有するそのディスカッションスレッドに対する複数の貢献者（contributors）があってもよい。
【００４１】
[0047]ソースコードの別の部分では、変数の整数の宣言（integer declaration）があってもよい。整数の宣言が実際には浮動小数点宣言であるべきかどうかについての問題に関するその宣言に関する対応するディスカッションスレッドがあってもよいし、小数値を取るためにその変数についてより正確であり得るいくつかの状況についての議論があってもよい。したがって、そのようなディスカッションスレッドを使用して、複数のマインドがプライマリ目標コンポーネントにおける非常にフォーカスされた問題に関して収集することができる。１つの実施例では、このようなディスカッションスレッドは、実質的にリアルタイムで更新される。これにより、プライマリ目標コンポーネントの様々な部分に関して、チームメンバーの思考の統合された効率的な収集が可能になる。
【００４２】
[0048]いくつかのディスカッションスレッドは設計指向型であってもよい。例えば、おそらくはレビューアは、識別されたクラスがまとまっている（cohesive）かどうかについてコメントしており、及び／又は、おそらくは特定のコンポーネントへの不要な結合を有する。
【００４３】
[0049]いくつかのディスカッションスレッドは論理指向型であってもよい。例えば、レビューアは、特定のパラメータ値（例えば、負の値）が識別された方法に渡される場合にコードの実行に対するいくつかの結果（例えば、システムがクラッシュする）についてコメントしてもよい。
【００４４】
[0050]いくつかのディスカッションスレッドは文体指向型（stylistically oriented）であってもよい。例えば、レビューアは、コードが何らかの方法で変更されるならばコードの識別された部分がより良く読むことができるとコメントしてもよい。
【００４５】
[0051]いくつかのディスカッションスレッドは、一般的であってもよいし、幾つかの種類の建設的なフィードバックを与えてもよい。例えば、レビューアは、コードのいくつかの特定された領域への修正について称賛を与えてもよいし、又はおそらくはコードの領域がすぐにどれだけ良くドラフトされるかについて称賛してもよい。
【００４６】
[0052]レビュー対象アーティファクトセット３００はまた、プライマリ目標コンポーネント３１１に関する又は他の管理上のテナント固有の事項に関するテナント固有のメタデータであるメタデータ３２２を含む。このようなメタデータ３２０の種類は限定されるものではないが、例えば、サインオフデータ、メンバーステータスデータ、テナントメンバーシップデータ、選好データ、カスタマイズデータ、作成日、サイズなどのプライマリ目標コンポーネント情報であってもよい。例えば、メンバーステータスデータは、レビューアがレビューを開始したかどうか、レビューの途中であるかどうか、作者を待っているかどうか、又はレビューに対してサインオフしたかどうかなどの、（但しこれらに限定されない）プライマリ目標コンポーネントのレビューの状態を含んでもよい。
【００４７】
[0053]レビューサービス２０１は、既に述べたように、テナントのデータストア（例えば、テナント２１１のデータストア２３１）とレビューサービス２０１のデータストア２６０との間で適切にレビュー対象アーティファクトセット３００を分散することにより、各テナントの機密性を維持する。テナント自体は、その好みの一部として、どのデータがどこに存在することが許可されるか、又はどのデータをレビューサービスにおいて格納するにはあまりに機密性が高いと考えるかを、指定することができる。例えば、おそらくはオーサリングされたデータ３１０の一部はテナントに配置され、オーサリングされたデータ３１０の一部はレビューサービスに配置される。
【００４８】
[0054]１つの実施例では、プライマリ目標コンポーネント３１１のほとんど又はすべてがテナントのデータストアに残っていてもよい一方で、（ディスカッションスレッドデータなどの）作成されたデータ３１０の他のセカンダリコンポーネント３１２がレビューサービスデータストア２６０においてリモートで格納されてもよい。また、おそらくはメタデータ３２０はまた、レビューサービスデータストア２６０に格納されてもよい。メタデータ３２０は、さらに、クライアントインターフェイスがそれに応じて更新することができるようにレビューサービス２０１がテナントに変更を適切に通知するために使用することができる他のポインター又は参照を含むことができる。
【００４９】
[0055]レビューサービス２０１がプライマリ目標コンポーネント自体のコピーを有していない場合があるがそれでもなおメンバーが適切な位置に対して使用しているクライアントに指示する必要があり得るときに、このようなポインター及び参照は特に有用である。例えば、レビューサービスはレビュー対象とされるソースコードドキュメントのコピーを実際には有していなくてもよいが、レビューサービスは、ディスカッションスレッドのコピーを有していてもよく、ソースコードテキスト内の特定のアドレス（例えば、行番号、列番号の範囲）とのそのディスカッションスレッドの相関を有してもよい。別の例として、クライアントがプライマリ目標コンポーネントの２つのバージョンを比較したい場合、レビューサービスは、これら２つのバージョンに対する適切な記憶位置へとクライアントを導くことができてもよい。
【００５０】
[0056]図４は、プライマリ目標コンポーネントの共同レビューを容易にする方法４００のフローチャートを示す。方法４００は、レビューサービスによってサポートされる複数のテナントにわたって利用できる共通の機能を提供すること（動作４０１）を含む。図２を参照すると、このような主要な機能は、例えば、共通の機能２０２であってもよい。方法４００はまた、テナント固有の機能をレビューサービスに組み込むことができる機能拡張ポイント（extensibility point）を提供すること（動作４０２）を含む。図２を参照すると、機能拡張ポイントは、ＡＰＩ２５０、又はテナント固有の機能がレビューサービス２０１にとって利用可能であることを可能にする他のメカニズムであってもよい。レビューサービスは、次いで、共通の機能とテナント固有の機能をを用いてリアルタイムのレビューサービスを実行する（動作４０３）。
【００５１】
[0057]少なくともいくつかの例では、「リアルタイム」のレビューサービスは、作成されたデータのプライマリ目標コンポーネント又はセカンダリコンポーネントに対して変更が生じた場合に、テナントの少なくとも一部のメンバーの各々を更新させる。例として、テナントメンバーがプライマリ目標コンポーネントの一部に関するディスカッションスレッドにコメントを追加すると仮定する。レビューサービスは、これが発生したと特定して、（プライマリ目標コンポーネントを作成及び／又はレビューしている）テナントの各メンバーに変更をすぐに通知することを決定することができる。そのように、テナントの各々の関連するレビューメンバーは、レビューサービスが通知することができるとすぐに、新しいコメントを見ることができる。いくつかの場合には、これにはわずかに数秒又は１秒の何分の１しかかからず、おそらくはプライマリ目標コンポーネントの特定の部分にフォーカスしてレビューサービスを通じて行われるリアルタイムの双方向の会話につながる。クライアントマシン上で、そのディスカッションスレッドは、ディスカッションスレッドが関係するプライマリ目標コンポーネントの対応する部分と視覚的に関連付けることができる。
【００５２】
[0058]変更をレンダリングするクライアント側アプリケーションオープンをレビューアが有すると仮定すると、この通知はクライアントアプリケーションに対して直接行うことができる。しかしながら、変更はまた、代替的に又はさらに電子メールによって送信されてもよく、それによって、クライアント側アプリケーションオープンを有していないレビューアであっても変更を通知されることを可能にしてもよい。しかし、本明細書に記載の原理は、レビューアに通知がされる方法に限定されるものではなく、特定の方法で通知されるレビューアの数に限定されるものでもない。
【００５３】
[0059]図５は、テナント上のレビューアにわたってクライアントマシンの選択的なリアルタイムの更新を容易にするために変更の通知に応答する、レビューサービスのための方法５００のフローチャートを示す。この方法では、レビューサービスは、テナント固有のメタデータ３２０及び作成されたデータ３１０うちの１つが更新される場合に対応するテナントのメンバーのうちの少なくとも一部を更新するように構成される。
【００５４】
[0060]レビューサービスは、テナントに対応する目標のレビューアーティファクトセットに対する更新の通知を受け取る（動作５０１）。レビューサービスは、次いで、必要に応じて、テナント固有のメタデータ又は集中されたサービスデータを更新する（動作５０２）。これを行うために、レビューサービス２０１は、共通の機能２０２のうちの１つ又は複数を実行してもよいし、また、対応するテナントに適用されるテナント固有の機能２４０を実行してもよい。
【００５５】
[0061]例えば、ソースコードドキュメントの特定の部分に関して既存のディスカッションスレッドに対してコメントが加えられる通知（以下、「コメント例の通知」と呼ぶ）をクライアントが受信すると仮定する。レビューサービスは、それによって、レビューサービスに格納されるスレッドの議論を更新する。第２の例として、クライアントが通知（以下、「サインオフ例の通知」と呼ぶ）を受信すると仮定する。その場合には、レビューサービスは、新しいサインオフの状態を反映するために、ソースコードドキュメントに対応するメタデータを更新する。
【００５６】
[0062]次いで、レビューサービスは、対応するテナントのメンバーがリアルタイムで変更を通知されるべきであるかどうかを判定する（判定ブロック５０３）。そのようなリアルタイムの通知がされるべきである場合（判定ブロック５０３の「はい」）、テナントの関連するメンバー（例えば、対応するプライマリ目標コンポーネントを共同でレビューしているメンバー）は、そのように通知される（動作５０４）。通知の形式は、メンバーに対して更新をレンダリングする際にクライアントマシンにとって役に立つ任意の情報を含むことができる。この通知の形成は、レビューサービス２０１が共通の機能２０２の１つ又は複数及び／又はテナントに対応するテナント固有の機能２４０の１つ又は複数を実行することに応答して実行されてもよい。
【００５７】
[0063]コメント例の通知では、レビューチームの各メンバーは、ディスカッションスレッドでの更新を通知されてもよい。クライアントへ戻る通知は、クライアントに適切な方法で通知を反映させることができる。例えば、この場合、ディスカッションスレッドに対応するプライマリ目標コンポーネントの一部にユーザーがナビゲートすると、ディスカッションスレッドが視覚的に強調された新しいコメントとともに現れてもよい。この場合又は他の場合において、プライマリ目標コンポーネントに関連付けられるディスカッションスレッドに新しいコメントが追加される場合を各レビューアに知らせるように、クライアント上で別の視覚化が表示されてもよい。
【００５８】
[0064]サインオフ例の通知では、サインオフは、テナントのチームメンバーが最終的な形でプライマリ目標コンポーネントを考えていることを示すので、重要なイベントであってもよい。したがって、各チームメンバーにこの特定のイベントが通知されてもよい。クライアントマシンは、このサインオフの状態を反映するために行われてもよい。
【００５９】
[0065]そのような通知がリアルタイムで行われるべきではないとレビューサービスが判定した場合（判定ブロック５０３の「いいえ」）、レビューサービスは、通知が全く生じるべきでないかどうかを判定することができる（判定ブロック５０５）。通知をするべきであるが、全くリアルタイムでない通知である場合（判定ブロック５０５の「はい」）、通知は後の配信のためにキューに入れられてもよい（動作５０６）。代替的に、通知がある場合、通知は、即時のものであってキューにいれられず、クライアント側アプリケーションに送信されるか、又は電子メールで送信することができる。この実施例では、レビューアは、クライアント側アプリケーションを開くか、又は単に電子メール通知を見るであろうし、その場合、通知についての別個のキューイングの必要はないであろう。いずれにせよ、いかなる通知の必要もない場合（判定ブロック５０５の「いいえ」）には、それ以上のアクションは行われない（動作５０７）。通知をいつ送信するか及び通知に何を含めるかを決定するための基準は、エクスペリエンスをカスタマイズするため及び／又はテナント固有の機能をサポートするために、テナントによって設定することができる。テナントの他のメンバーに通知するか否か、どのメンバーに通知するか、通知に何を含めるべきかについての決定は、１つ又は複数の共通の方法２０２及び／又は１つ又は複数のテナント固有の方法２４０の実行によって決定されてもよい。
【００６０】
[0066]図６は、共同マルチテナントレビューサービスを使用してプライマリ目標コンポーネントのテナント独自の共同レビューを容易にする方法６００のフローチャートを示す。前述のように、アプリケーションプログラミングインターフェイス２５０又は他のメカニズムは、テナント固有の機能２４０を修正するために使用されてもよい。アプリケーションプログラミングインターフェイス２５０はまた、テナントもしくはユーザーの好みやカスタマイズ設定を設定するために使用されてもよい。（例えば、アプリケーションプログラミングインターフェイス２５０を介して）テナント固有の機能を修正する指示を受け取ると（動作６０１）、レビューサービスは、テナント固有の機能を自動的に修正する（動作６０２）。そのような修正は、例えば、テナント固有の機能にテナント固有の機能を追加することや、おそらくはテナント固有の機能を修正又は置き換えることを含むことができる。
【００６１】
[0067]したがって、データへのアクセス及び全体的な機能の経験の両方における、テナントによる共同レビュー経験の分離を可能にするマルチテナント共同レビューシステムが説明された。効率化のために、複数のテナントが、テナントのすべて（又は少なくともかなりの部分）にわたって共通の機能を提供する単一のレビューサービスによってサービス提供されてもよい。
【００６２】
[0068]図７は、図２の共同作業環境２０１の１つの非常に具体的な実施例７００を示す。ここで、クライアント７１０は、クライアント７１１から７１５を含み、これらは、様々な異なるタイプのクライアントであって、本明細書に記載の原理が特定のクライアントタイプに限定されるものではないことを示す。図７の図示される例において、クライアント７１１は、ユーザーがリンクをクリックするとアプリケーションをインストールするスタンドアロンのグラフィカルユーザーインターフェイスクライアントであり、クライアント７１２はコマンドラインレビュークライアントであり、クライアント７１３はコマンドラインプロジェクトクライアントであり、クライアント７１４は共同サービスに特有のアプリケーション固有のクライアントであり、クライアント７１５は別のカスタムクライアントである。
【００６３】
[0069]データストア７２０は、アクセス制御技術を用いて制御することができるローカルのテナントストアを表す。図２におけるテナント固有の機能２４０によって表されるサービスの拡張に加えて、クライアント側の拡張性及びクライアント側の拡張７３１、７３２及び７３３によって表される拡張性があってもよい。必要ではないが、クライアント７１０はまた、設定情報を格納するためにＡＣＴＩＶＥ  ＤＩＲＥＣＴＯＲＹ（登録商標）７４０にアクセスすることができる。代替的に又はさらに、Ａｃｔｉｖｅ  Ｄｉｒｅｃｔｏｒｙは、レビューアや作者の情報を検索するために使用することができる。図７のサービス拡張７５０は、図２のテナント固有の機能２４０の例を表す。この場合、サービス拡張７５０は、クライアントにダッシュボードベースのユーザーインターフェイスコントロールを提供するダッシュボードサービス７５１を含む。ダッシュボードサービス７５１はデータベース７５２へのアクセスを有する。ダッシュボードサービス７５１は、どの未処理のレビューが注目／入力を必要としているかを見るためにユーザーが使用することができるクライアントエンドポイントである。
【００６４】
[0070]図７のサービス７６０は、図２のレビューサービス２０１の例である。この場合、レビューサービスの共通の機能は、ディスカバリーサービス７６１、レビューサービス７６２、及びプロジェクトサービス７６３を含む。サービス７６０は、プロジェクト設定ファイル７７１及びレビューメタデータ７７２へのアクセスを有する。１つの実施例では、サービス７６０及びサービス拡張７５０は、ＷＩＮＤＯＷＳ（登録商標）Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｆｏｕｎｄａｔｉｏｎ（ＷＣＦ）を使用して作成される。サービス７６０からの電子メール通知は、電子メールサーバーを介して行うことができる。
【００６５】
[0071]図８及び図９は、クライアント側アプリケーションのためのユーザーインターフェイスを表す例示的なユーザーインターフェイスを示す。これらの例は、目標のレビューアーティファクトセットに対する更新を通知する場合の、例示的なクライアントの経験を示す。図示される場合において、プライマリ目標コンポーネントは、行９０６から９２９が示される、ソースコードドキュメントである。これらが単なる例であることを理解した上で、図８及び図９についてさらに詳細に説明する。
【００６６】
[0072]図８は、本明細書において「オリジナルバージョン」及び「改訂バージョン」と呼ばれる複数のバージョンのコードを比較する差分表示を示すコード表示領域８０１を含む、差分表示ユーザーインターフェイス８００を示す。ユーザーインターフェイス８００はまた、ファイル選択領域８０２、レビューア状態領域８０３、コメント表示領域８０４を含む。ファイル選択領域８０２は、レビューされ得るいくつかのコードファイルをリストしており、ファイル８２１が選択されている。選択されたコードファイル８２１は、コード表示領域８０１に表示される。（ほとんどの場合のように）レビュー対象のコードはコード表示領域で表示することができるよりもはるかに大きいので、コード表示領域８０１はいくつかのナビゲーション支援（navigation aids）を有する。たとえば、コード表示領域８０１は、それぞれコードの垂直範囲及び水平範囲がコード表示領域８０１に示されるものを超える場合にはいつでも使用するために有効にされる垂直スクロールバー８１５及び水平スクロールバー８１６を有する。コード表示領域８０１はまた、コードの全体の範囲内で表示可能なコードの現在の垂直位置を表す位置基準インジケーター８１７及び８１８を有する。特に、基準インジケーター８１７はコードのオリジナルバージョン内の表示可能なコードの位置を示し、基準インジケーター８１８はコードの改訂バージョン内の表示可能なコードの位置を表す。
【００６７】
[0073]差分表示の使用により、レビューが異なるバージョンのコード間の差を迅速に確認することが可能となり、その結果、バージョン間でなされる特定の変更に対して深くフォーカスすることができる。本明細書に記載された原理は、コードのバージョン間の差異についての可視化の方法や実際の可視化自体に限定されるものではない。しかし、色を用いることは、差異を可視化することができる無限の様々な方法のうちの１つである。
【００６８】
[0074]とは言え、色の使用は、この特許出願では回避される。代わりに、右方向に面するハッシュ化されたボックスによってマークされる領域は、図８において、赤い強調表示に代えて使用される（ただし、そのような領域はそれでもなお「赤で強調される」ものとして図８を参照して本明細書で参照される）。さらに、左方向に面するハッシュ化されたボックスによってマークされる領域は、図８において、黄色の強調表示に代えて使用される（しかし、このような領域はそれでもなお図８を参照して「黄色で強調される」ものとして本明細書で参照される）。図８において下線によってマークされる領域は、図８において、緑の強調表示に代えて使用される（ただし、そのような地域はそれでもなお図８を参照して「緑で強調される」ものとして本明細書で参照される）。点でマークされた領域は、図８において、ピンク色の強調表示に代えて使用される（しかし、そのような領域はそれでもなお図８を参照して「ピンク色で強調される」ものとして参照される）。
【００６９】
[0075]図８を参照すると、コード表示領域は、本明細書においてオリジナルバージョン及び改訂バージョンと呼ばれる２つのバージョンのコードを比較する。全体的に赤で（図８において右方向に向かうハッシュマーキングで）強調される行は、基準バージョンに対して、現在のバージョンでは完全に削除された行である。赤い部分（右ハッシング）とピンクの部分（図８における点）の両方を有する行は、除去が行われたが、赤い部分（右ハッシング）が除去された特定の部分である行である。全体的に緑色（図８における下線）で強調される行は、基準バージョンに対して、現在のバージョンで完全に追加された行であるが、図８においてはこのような行の例は存在していない。黄色の部分（左ハッシング）及び緑色の部分（下線）を有する行は、追加がなされたが、緑色の部分（左ハッシング）が追加された特定の部分である行である。
【００７０】
[0076]差分表示ユーザーインターフェイス８００はまた、レビューア状態領域８０３とコメント領域８０４を示す。レビューア状態領域８０３は、レビューアがコードの現在のバージョンに対してサインオフしたことを示すためにレビューアがコントロール８３１を選択することを可能にする。コントロール８３２は、レビューアがコードに対する以前のサインオフを取り消すことを可能にする。コントロール８３３は、レビューアがレビューチームの他の人とインスタントメッセージを行うことを可能にする。
【００７１】
[0077]コメント領域８０４は、コード表示領域８０１に表示されるコメントに対する異なる表示を可能にする。しかし、図８においてはコード表示領域８０１に表示されるコメントがないので、図８のコメント領域８０４に表示されるコメントも同様に存在していない。
【００７２】
[0078]したがって、図８は、改訂マーキング又は表示されたコードのバージョンを比較する他の可視化を含む、差分表示ユーザーインターフェイス８００を示す。
[0079]図９は、図８のユーザーインターフェイス８００に類似する差分表示ユーザーインターフェイス９００を示す。実際には、差分表示ユーザーインターフェイス９００は、ここではコメントがコードに追加されてコードの特定の部分（この場合には、コードの行９１２）と関連することを除いて、図８のものと同じユーザーインターフェイスであってもよい。コメントの装飾９０１は、複数のコメンターからのコメントを含むことができディスカッションスレッドを含む。新しいコメントがディスカッションスレッドに追加されたことをレビューコンピューティングシステムがクライアント側アプリケーションに通知する場合に更新することができるものが、このディスカッションスレッドである。コメントの装飾９０１はまた、コメント装飾の状態（この場合は、ディスカッションスレッドの状態）を示す可視化（この場合はドロップダウンボックス９０２）を含むことができる。別の例として、状態の可視化は、コメントの装飾の程度（severity）を示してもよい。スレッドの状態が図９のドロップダウンボックス９０２の場合には、アクティブ状態は、スレッドがレビューアによって作成されたが、ディスカッションスレッドの主題がまだ作者によって対処されていないことを示す。保留（pending）状態は、作者がレビューアに同意するが、まだ修正が適用されていないことを示す。解決状態（resolve status）は、作者が問題を修正したか又はレビューアの質問に答えたことを示す。「ｗｏｎｔｆｉｘ」状態は、作者がディスカッションスレッドの提案に同意せず、したがって作者がその視点についての説明を提供し、スレッドを「修正しない（won’t fix）」としてマークしたことを示す。クローズ状態は作者とレビューアが修正を確認することを示す。
【００７３】
[0080]図９のコメント領域８０４’は、その内容において、図８のコメント領域８０４に比べて若干異なる。コメント領域８０４’は、ここでは、コード表示領域８０１’において表示されるコメントのすべてに対して異なる表示を有する。
【００７４】
[0081]したがって、マルチテナント共同レビューサービス及び共同作業環境が説明された。本発明は、その趣旨や本質的な特徴から逸脱することなく他の特定の形態で実施することができる。説明した実施例は、すべての点で単なる例示であり、限定的ではないものと考えられるべきである。したがって、本発明の範囲は、前述の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲と均等の意味及び範囲内のすべての変更は、その範囲内に包含されるべきである。
【図１】
0005980320.tif 000002
【図２】
0005980320.tif 000003
【図３】
0005980320.tif 000004
【図４】
0005980320.tif 000005
【図５】
0005980320.tif 000006
【図６】
0005980320.tif 000007
【図７】
0005980320.tif 000008
【図８】
0005980320.tif 000009
【図９】
0005980320.tif 000010