(57)【特許請求の範囲】
【請求項１】
複数のユーザ間でのソースコードの共有を支援する装置であって、
第１のユーザが使用する第１の端末から、当該第１のユーザが作成した情報であって前記ソースコードに対する確定されていない変更を示す情報である未確定変更情報と、当該第１のユーザとの間で当該未確定変更情報を共有する第２のユーザを示すユーザ情報とを受信する受信部と、
前記未確定変更情報と前記ユーザ情報とを含む共有変更情報を生成する生成部と、
前記第２のユーザが使用する第２の端末に、前記共有変更情報を送信する送信部と
を含み、
前記生成部は、前記共有変更情報を生成する際に、前記未確定変更情報により示される確定されていない変更を確定させる指示を行う権限を前記第１のユーザが有することを示す権限情報を当該共有変更情報に含め、その後、当該第１のユーザが当該確定させる指示を行う前に、当該確定させる指示を行う権限を前記第２のユーザが有することを示すように当該権限情報を変更する、装置。
【請求項２】
前記受信部は、前記第１の端末から、前記第１のユーザが作成した情報であって前記ソースコードに対する追加の変更を示す情報である追加変更情報を受信し、
前記生成部は、前記共有変更情報に含まれる前記未確定変更情報を前記追加変更情報に基づいて変更し、
前記送信部は、前記第２の端末に、前記追加変更情報を送信する、請求項１の装置。
【請求項３】
前記生成部は、前記未確定変更情報により示される確定されていない変更を確定させた確定変更情報を生成した後、前記共有変更情報を削除し、
前記送信部は、前記第２の端末に、前記確定変更情報が生成された旨の情報と、前記共有変更情報が削除された旨の情報とを送信する、請求項１の装置。
【請求項４】
前記受信部は、前記未確定変更情報と、前記第１のユーザを更に示す前記ユーザ情報とを受信し、
前記送信部は、前記第１の端末及び前記第２の端末に、前記共有変更情報を送信する、請求項１の装置。
【請求項５】
前記受信部は、前記第１の端末から、前記第１のユーザが作成した情報であって前記ソースコードに対する追加の変更を示す情報である第１の追加変更情報を受信し、かつ、前記第２の端末から、前記第２のユーザが作成した情報であって前記ソースコードに対する追加の変更を示す情報である第２の追加変更情報を受信し、
前記生成部は、前記共有変更情報に含まれる前記未確定変更情報を前記第１の追加変更情報及び前記第２の追加変更情報に基づいて変更し、
前記送信部は、前記第２の端末に、前記第１の追加変更情報を送信し、かつ、前記第１の端末に、前記第２の追加変更情報を送信する、請求項４の装置。
【請求項６】
前記第１の追加変更情報により示される追加の変更に要した作業量と、前記第２の追加変更情報により示される追加の変更に要した作業量とを区別して記録する記録部を更に含む、請求項５の装置。
【請求項７】
前記受信部は、前記第１の端末から、前記第１のユーザが行った指示であって前記未確定変更情報により示される確定されていない変更を確定させる指示を示す確定指示情報を受信し、
前記生成部は、前記確定指示情報の受信に応じて、前記未確定変更情報により示される確定されていない変更を確定させた確定変更情報を生成した後、前記共有変更情報を削除し、
前記送信部は、前記第２の端末に、前記確定変更情報が生成された旨の情報と、前記共有変更情報が削除された旨の情報とを送信する、請求項４の装置。
【請求項８】
複数のユーザ間でのソースコードの共有を支援する方法であって、
第１のユーザが使用する第１の端末から、当該第１のユーザが作成した情報であって前記ソースコードに対する確定されていない変更を示す情報である未確定変更情報と、当該第１のユーザとの間で当該未確定変更情報を共有する第２のユーザを示すユーザ情報とを受信するステップと、
前記未確定変更情報と前記ユーザ情報とを含む共有変更情報を生成するステップと、
前記第２のユーザが使用する第２の端末に、前記共有変更情報を送信するステップと
を含み、
前記生成するステップでは、前記共有変更情報を生成する際に、前記未確定変更情報により示される確定されていない変更を確定させる指示を行う権限を前記第１のユーザが有することを示す権限情報を当該共有変更情報に含め、その後、当該第１のユーザが当該確定させる指示を行う前に、当該確定させる指示を行う権限を前記第２のユーザが有することを示すように当該権限情報を変更する、方法。
【請求項９】
複数のユーザ間でのソースコードの共有を支援する装置として、コンピュータを機能させるプログラムであって、
前記コンピュータを、
第１のユーザが使用する第１の端末から、当該第１のユーザが作成した情報であって前記ソースコードに対する確定されていない変更を示す情報である未確定変更情報と、当該第１のユーザとの間で当該未確定変更情報を共有する第２のユーザを示すユーザ情報とを受信する受信部と、
前記未確定変更情報と前記ユーザ情報とを含む共有変更情報を生成する生成部と、
前記第２のユーザが使用する第２の端末に、前記共有変更情報を送信する送信部と
して機能させ、
前記生成部は、前記共有変更情報を生成する際に、前記未確定変更情報により示される確定されていない変更を確定させる指示を行う権限を前記第１のユーザが有することを示す権限情報を当該共有変更情報に含め、その後、当該第１のユーザが当該確定させる指示を行う前に、当該確定させる指示を行う権限を前記第２のユーザが有することを示すように当該権限情報を変更する、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードの共有を支援する装置及び方法に関する。特に、本発明は、複数のユーザ間でのソースコードの共有を支援する装置及び方法に関する。
【背景技術】
【０００２】
ソフトウェア開発プロジェクトでは、１つの作業（タスク）を複数の開発者が担当しており、各開発者の作業が密接に絡んでいる場合が多い。例えば、ある開発者がソースコードを開発し、別の開発者がそのソースコードの単体試験のコードを開発するような場合である。このような場合には、ソースコードに合わせた試験のコードの開発が必要になる。よって、複数の開発者間でソースコードを共有する必要が生じる。ソースコードを共有するためにソフトウェア構成管理ツールが利用される。
【０００３】
この他にも、コンピュータを用いて共同作業を行う技術は知られている（例えば、非特許文献１、２、及び、特許文献１、２参照）。
【０００４】
非特許文献１は、共有ボタンをクリックすれば、友達、クラスメート、同僚、家族など誰もがドキュメントを閲覧、コメント、編集できるようになり、他のユーザがドキュメントを編集していると、変更やテキストのハイライト表示に合わせて、そのユーザのカーソルが表示されるＧｏｏｇｌｅ（登録商標）ドキュメントを開示する。
【０００５】
非特許文献２は、１つのセッションで、かつ、マルチユーザのチャットでの多数のドキュメントをサポートする無料の共同作業用のエディタであるＧｏｂｂｙを開示する。
【０００６】
特許文献１は、少なくとも２のクライアントとそのクライアントにネットワークを介して接続されうるサーバとを備えうるコンピューティング環境において、その少なくとも２のクライアントのうちの１つのクライアント上で実行されるアプリケーションのローカル環境のクローンをサーバ上に構築する技法を開示する。
【０００７】
特許文献２は、複数のグループ協同作業エージェントを多地点通信サーバを介して互いに通信回線で接続してなり、その各グループ協同作業エージェントは、情報の通信をする通信サーバと、基礎的な作業を支援する基礎作業支援サーバと、多者間の会議を支援する多者間会議サーバと、ソフトウェア開発業務を支援するソフトウェア開発支援サーバと、通信サーバにより行われる通信のための情報を管理する通信情報ベースと、基礎作業支援サーバにより行われる基礎作業実行のための知識を管理する基礎作業知識ベースと、多者間会議サーバにより行われる会議に関する知識を管理する会議知識ベースと、ソフトウェア開発支援サーバにより行われるソフトウェア開発に関する知識を管理するソフトウェア開発知識ベースと、利用者との間で直接に情報のやりとりをする統合利用者インタフェースとからなるソフトウェア分散協同開発支援システムを開示する。
【０００８】
また、ソースコードの変更管理を行う技術も知られている（例えば、特許文献３参照）。
【０００９】
特許文献３は、クライアント端末機から受信したソースコードファイルを構文解析し、構文ツリーに分解する構文解析手段と、構文ツリーの要素毎に、ソースコードファイルの前のバージョンにおけるソースコードファイルとの変更差分を抽出するリポジトリ編集手段と、変更差分を保持するリポジトリ情報保持部とを備えるソースコード管理サーバを開示する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１２−１１８６７４号公報
【特許文献２】特開平６−２８１６４号公報
【特許文献３】特開２００５−３４６６６０号公報
【非特許文献】
【００１１】
【非特許文献１】Ｇｏｏｇｌｅドキュメント、［online］、［平成２６年７月１７日検索］、インターネット＜URL：http://www.google.com/intl/ja/docs/about/index.html＞
【非特許文献２】Ｇｏｂｂｙ、［online］、［平成２６年７月１７日検索］、インターネット＜URL：http://gobby.0x539.de/trac/wiki/WikiStart＞
【発明の概要】
【発明が解決しようとする課題】
【００１２】
上述したように、ソースコードを共有するためにソフトウェア構成管理ツールが利用される。ところが、ソフトウェア構成管理ツールでソースコードを共有するためには、ソースコード管理サーバへの確定作業を実施する必要がある。つまり、一度手元のソースコードを保存し、ソースコードに対する変更を確定させる確定作業を行う必要がある。確定作業が実施されると、それ以降、ソースコードは修正できなくなる。よって、確定作業を実施することは、不安定なソースコードがソースコード管理サーバに紛れ込む要因になる。その結果、ビルドの失敗やテストの失敗を誘発し、プロジェクトの運営に支障を来すこととなる。また、密接に協働作業を実施する開発者チームにおいては、確定作業が頻繁に行われるため、開発作業におけるボトルネックになってしまう。従って、確定作業を実施することにより生産性が低下するという課題があった。
【００１３】
こうしたことから、従来、個人開発用のブランチを利用し、プロジェクト全体への影響を最小限にすることも行われてきた。しかしながら、この場合も、ソースコードの確定作業は依然として必要であり、また、ブランチの管理も必要なので、生産性低下の課題は残ってしまう。
【００１４】
尚、非特許文献１、２、及び、特許文献１〜３に記載されたように、コンピュータを用いて共同作業を行う技術や、ソースコードの変更管理を行う技術は公知であったが、何れの技術も、上記課題を解決する手段を提示するものではない。
【００１５】
本発明の目的は、ソースコードに対する変更を確定させる確定作業を行うことなく、複数のユーザ間でのソースコードの共有を実現することにある。
【課題を解決するための手段】
【００１６】
かかる目的のもと、本発明は、複数のユーザ間でのソースコードの共有を支援する装置であって、第１のユーザが使用する第１の端末から、第１のユーザが作成した情報であってソースコードに対する確定されていない変更を示す情報である未確定変更情報を受信する受信部と、第１のユーザとの間で未確定変更情報を共有する第２のユーザを特定する特定部と、第２のユーザが使用する第２の端末に、未確定変更情報を送信する送信部とを含む、装置を提供する。
【００１７】
ここで、この装置は、未確定変更情報と、第２のユーザを示すユーザ情報とを含む共有変更情報を生成する生成部を更に含み、特定部は、共有変更情報に未確定変更情報と共に含まれるユーザ情報に基づいて、第２のユーザを特定する、ものであってよい。
【００１８】
その場合、受信部は、第１の端末から、第１のユーザが作成した情報であってソースコードに対する追加の変更を示す情報である追加変更情報を受信し、生成部は、共有変更情報に含まれる未確定変更情報を追加変更情報に基づいて変更し、送信部は、第２の端末に、追加変更情報を送信する、ものであってよい。
【００１９】
また、生成部は、未確定変更情報により示される確定されていない変更を確定させた確定変更情報を生成した後、共有変更情報を削除し、送信部は、第２の端末に、確定変更情報が生成された旨の情報と、共有変更情報が削除された旨の情報とを送信する、ものであってよい。
【００２０】
一方、この装置は、未確定変更情報と、第１のユーザを示す第１のユーザ情報と、第２のユーザを示す第２のユーザ情報とを含む共有変更情報を生成する生成部を更に含み、特定部は、共有変更情報に未確定変更情報と共に含まれる第１のユーザ情報及び第２のユーザ情報に基づいて、未確定変更情報を共有する第１のユーザ及び第２のユーザを特定し、送信部は、第１の端末及び第２の端末に、共有変更情報を送信する、ものであってもよい。
【００２１】
その場合、受信部は、第１の端末から、第１のユーザが作成した情報であってソースコードに対する追加の変更を示す情報である第１の追加変更情報を受信し、かつ、第２の端末から、第２のユーザが作成した情報であってソースコードに対する追加の変更を示す情報である第２の追加変更情報を受信し、生成部は、共有変更情報に含まれる未確定変更情報を第１の追加変更情報及び第２の追加変更情報に基づいて変更し、送信部は、第２の端末に、第１の追加変更情報を送信し、かつ、第１の端末に、第２の追加変更情報を送信する、ものであってよい。そして、この場合、第１の追加変更情報により示される追加の変更に要した作業量と、第２の追加変更情報により示される追加の変更に要した作業量とを区別して記録する記録部を更に含む、ものであってよい。
【００２２】
また、受信部は、第１の端末から、第１のユーザが行った指示であって未確定変更情報により示される確定されていない変更を確定させる指示を示す確定指示情報を受信し、生成部は、確定指示情報の受信に応じて、未確定変更情報により示される確定されていない変更を確定させた確定変更情報を生成した後、共有変更情報を削除し、送信部は、第２の端末に、確定変更情報が生成された旨の情報と、共有変更情報が削除された旨の情報とを送信する、ものであってよい。そして、この場合、生成部は、第１のユーザが作成した未確定変更情報の受信に応じて共有変更情報を生成する際に、第１のユーザが確定させる指示を行う権限を有することを示す権限情報を共有変更情報に含め、その後、第１のユーザが確定させる指示を行う前に、確定させる指示を行う権限を第２のユーザが有することを示すように権限情報を変更する、ものであってよい。
【００２３】
また、本発明は、複数のユーザ間でのソースコードの共有を支援する方法であって、第１のユーザが使用する第１の端末から、第１のユーザが作成した情報であってソースコードに対する確定されていない変更を示す情報である未確定変更情報を受信するステップと、第１のユーザとの間で未確定変更情報を共有する第２のユーザを特定するステップと、第２のユーザが使用する第２の端末に、未確定変更情報を送信するステップとを含む、方法も提供する。
【００２４】
更に、本発明は、複数のユーザ間でのソースコードの共有を支援する装置として、コンピュータを機能させるプログラムであって、コンピュータを、第１のユーザが使用する第１の端末から、第１のユーザが作成した情報であってソースコードに対する確定されていない変更を示す情報である未確定変更情報を受信する受信部と、第１のユーザとの間で未確定変更情報を共有する第２のユーザを特定する特定部と、第２のユーザが使用する第２の端末に、未確定変更情報を送信する送信部として機能させる、プログラムも提供する。
【発明の効果】
【００２５】
本発明によれば、ソースコードに対する変更を確定させる確定作業を行うことなく、複数のユーザ間でのソースコードの共有を実現できる。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施の形態の課題について説明するための図である。
【図２】本発明の実施の形態の概要について示した図である。
【図３】本発明の実施の形態が適用されるコンピュータシステムの全体構成例を示した図である。
【図４】本発明の実施の形態における共有変更セットサーバの機能構成例を示したブロック図である。
【図５】本発明の実施の形態における共有変更セットサーバの共有変更セット作成時の動作例を示したシーケンス図である。
【図６】本発明の実施の形態における共有変更セットサーバの共有変更セット変更時の動作例を示したシーケンス図である。
【図７】本発明の実施の形態における共有変更セットサーバの共有変更セット確定時の動作例を示したシーケンス図である。
【図８】本発明の実施の形態における共有変更セットサーバのハードウェア構成例を示した図である。
【発明を実施するための形態】
【００２７】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
【００２８】
［本実施の形態の課題］
図１は、本実施の形態の課題について説明するための図である。この図は、開発者Ａがソースコードを開発し、開発者Ｂがそのソースコードをテストするためのソースコードであるテストコードを開発する場面を示している。
【００２９】
開発者Ａは、自身の端末装置のワークスペース１００ａにソースコードをロードして変更を行っている。また、開発者Ｂは、自身の端末装置のワークスペース１００ｂにテストコードをロードして変更を行っている。その際、変更に関する情報は、図中、三角形で表した変更セットという単位で各ワークスペース内に保持される。変更セットとは、ファイル、フォルダ及びコンポーネントに対する変更を、関連するグループごとに収集して、１回の操作でワークスペース又はストリームに適用できるようにするリポジトリオブジェクトである。また、変更セットは、確定及び未確定の何れかの属性を持つものとする。以下では、確定の属性を持つ変更セットを確定変更セットと呼び、未確定の属性を持つ変更セットを未確定変更セットと呼ぶことにする。
【００３０】
ここで、確定変更セット及び未確定変更セットについて説明する。図では、確定変更セットを黒の三角形で表し、未確定変更セットを白の三角形で表している。開発者Ａ，Ｂはそれぞれワークスペース１００ａ，１００ｂで変更したソースコードを保存する。ところが、ソースコードを保存しただけでは、変更は確定されない。確定作業を実施して初めて、変更が確定され、変更セットは、以降変更できない確定変更セットになる。そして、この確定変更セットのみが、ソースコード管理サーバのストリーム２００を介して共有されることになる。一方、確定作業が行われていない未確定変更セットは共有されない。
【００３１】
例えば、図は、開発者Ａが２つの変更セットの確定作業を行ったときの状態を示している。確定作業が行われると、ソースコードはそれ以上変更できなくなる。そして、確定変更セットは、図示するように、ストリーム２００にデリバーされる。これにより、開発者Ｂは、図示するように、ストリーム２００から確定変更セットをアクセプトする。開発者Ａ，Ｂが互いに密接な作業をする場合には、これらのデリバー及びアクセプトといった作業が頻繁に行われる。従って、ストリーム２００に不安定なコードが入り込む可能性がある。一方、開発者Ｂは、未確定変更セットをアクセプトすることはできない。
【００３２】
［本実施の形態の概要］
そこで、本実施の形態では、未確定変更セットに対して、プライベート及び共有の何れかの属性を持たせることとする。即ち、図１に示した未確定変更セットは、プライベートの属性を持つ未確定変更セットとし、共有の属性を持つ未確定変更セットを新たに設ける。以下では、共有の属性を持つ未確定変更セットを、特に、共有変更セットと呼ぶことにする。共有変更セットは、複数の開発者間での確定前の変更セットの共有を可能とするものである。これにより、共有変更セットを設けなかった場合における煩雑な作業が回避され、開発効率が向上する。
【００３３】
図２は、本実施の形態の概要について示した図である。この図も、開発者Ａがソースコードを開発し、開発者Ｂがそのソースコードをテストするためのソースコードであるテストコードを開発する場面を示している。
【００３４】
開発者Ａは、自身の端末装置のワークスペース１００ａにソースコードをロードして変更を行っている。また、開発者Ｂは、自身の端末装置のワークスペース１００ｂにテストコードをロードして変更を行っている。この図でも、確定変更セットを黒の三角形で表し、未確定変更セットを白の三角形で表しており、新たに設けた共有変更セットは斜線ハッチングの三角形で表している。この状態で、テスト済みの確定変更セットついては、図１と同様に、アクセプトが実施される。また、共有されない未確定変更セットは、他の開発者からは見えないようになっている。一方、ワークスペース１００ａの共有変更セットと、ワークスペース１００ｂの共有変更セットとは、点線で囲んで示すように共有される。即ち、例えばワークスペース１００ａの共有変更セットの変更はリアルタイムでワークスペース１００ｂの共有変更セットに反映されるので、開発者Ａ，Ｂは、共有変更セットの実体としては、同じものを見ていることになる。
【００３５】
［コンピュータシステムの全体構成］
図３は、このような概略動作を実現するためのコンピュータシステムの全体構成例を示した図である。図示するように、このコンピュータシステムは、端末装置１０ａ，１０ｂと、ソースコード管理サーバ２０と、共有変更セットサーバ３０とが、ネットワーク８０を介して接続されることにより、構成されている。尚、図では、端末装置１０ａ，１０ｂを示したが、これらを区別する必要がない場合は、端末装置１０と称する。また、図には、２台の端末装置１０しか示していないが、３台以上の端末装置１０を設けてもよい。
【００３６】
端末装置１０は、開発者がソースコードを開発する際に用いられるコンピュータ装置である。具体的には、開発者がワークスペースにソースコード管理サーバ２０からソースコードをロードし、ソースコードに対する変更を行う。そして、変更後のソースコードを保存したり、変更を確定させる確定作業を行ったりする。ここで、端末装置１０としては、デスクトップＰＣ（Personal Computer）、ノートＰＣ等を用いるとよい。
【００３７】
ソースコード管理サーバ２０は、ソースコード及びその変更履歴を管理するサーバコンピュータである。具体的には、ソースコードを保管し、端末装置１０から要求があると、端末装置１０にソースコードを送信する。また、ある端末装置１０からデリバーされた確定変更セットを保持し、別の端末装置１０からアクセプト要求があると、確定変更セットをその端末装置１０に送信する。ここで、ソースコード管理サーバ２０としては、ＰＣ等を用いるとよい。
【００３８】
共有変更セットサーバ３０は、共有変更セットの共有及び同期を実現するためのサーバコンピュータである。具体的には、ある端末装置１０から共有変更セットを受信すると、共有変更セットを保持し、別の端末装置１０に共有変更セットを送信する。また、ある端末装置１０から共有変更セットに対する追加変更内容を受信すると、保持していた共有変更セットに追加変更内容を反映し、別の端末装置１０に追加変更内容を送信する。更に、ある端末装置１０から共有変更セットを確定する指示を受信すると、保持していた共有変更セットに基づいて確定変更セットを生成して共有変更セットは削除し、別の端末装置１０に共有変更セットが確定された旨及び共有変更セットが削除された旨を送信する。ここで、共有変更セットサーバ３０としては、ＰＣ等を用いるとよい。
【００３９】
ネットワーク８０は、端末装置１０とソースコード管理サーバ２０と共有変更セットサーバ３０との間の情報通信に用いられる通信手段であり、例えば、ＬＡＮ（Local Area Network）である。
【００４０】
［本実施の形態における共有変更セットサーバの機能構成］
図４は、本実施の形態における共有変更セットサーバ３０の機能構成例を示した図である。図示するように、共有変更セットサーバ３０は、受信部３１と、共有変更セット管理部３２と、共有変更セット記憶部３３と、送信部３４とを含む。
【００４１】
受信部３１は、端末装置１０で未確定変更セットを共有する指示がなされると、未確定変更セットの情報とこれを共有するユーザの情報とを端末装置１０から受信する。また、端末装置１０で共有変更セットに変更を追加する指示がなされると、共有変更セットに対する追加変更の情報を端末装置１０から受信する。更に、端末装置１０で共有変更セットを確定する指示がなされると、共有変更セットの確定指示の情報を端末装置１０から受信する。本実施の形態では、未確定変更情報の一例として、未確定変更セットを用いており、追加変更情報の一例として、追加変更の情報を用いており、確定指示情報の一例として、確定指示の情報を用いている。また、未確定変更情報を受信する受信部、追加変更情報を受信する受信部、確定指示情報を受信する受信部の一例として、受信部３１を設けている。
【００４２】
共有変更セット管理部３２は、受信部３１が未確定変更セットの情報とこれを共有するユーザの情報とを受信すると、未確定変更セットとユーザの情報とを含む共有変更セットを作成する。そして、共有変更セットの情報とユーザの情報とを送信部３４に受け渡す。また、共有変更セット管理部３２は、受信部３１が共有変更セットに対する追加変更の情報を受信すると、共有変更セットに対する追加変更を行う。そして、共有変更セットに含まれるユーザの情報のうち、共有変更セットに変更を追加する指示を行っていないユーザの情報を取得し、追加変更の情報とこの取得したユーザの情報とを送信部３４に受け渡す。更に、共有変更セット管理部３２は、受信部３１が共有変更セットの確定指示の情報を受信すると、共有変更セットを確定変更セットとしてソースコード管理サーバ２０へデリバーし、共有変更セットを削除する。そして、共有変更セットに含まれていたユーザの情報のうち、共有変更セットを確定する指示を行っていないユーザの情報を取得し、共有変更セットがデリバーされた旨の情報と共有変更セットが削除された旨の情報とこの取得したユーザの情報とを送信部３４に受け渡す。本実施の形態では、共有変更情報の一例として、共有変更セットを用いており、確定変更情報の一例として、確定変更セットを用いている。また、共有変更情報を生成する生成部、未確定変更情報を変更する生成部、確定変更情報を生成した後、共有変更情報を削除する生成部の一例として、共有変更セット管理部３２を設けている。更に、ユーザを特定する特定部の一例として、共有変更セット管理部３２を設けている。
【００４３】
共有変更セット記憶部３３は、共有変更セット管理部３２が作成した共有変更セットを、変更セットを識別する変更セットＩＤに関連付けて記憶する。
【００４４】
送信部３４は、共有変更セット管理部３２が共有変更セットを作成すると、共有変更セットの情報を端末装置１０に送信する。また、共有変更セット管理部３２が共有変更セットに対する追加変更を行うと、共有変更セットに対する追加変更の情報を端末装置１０に送信する。更に、共有変更セット管理部３２が共有変更セットを確定変更セットとしてソースコード管理サーバ２０へデリバーして共有変更セットを削除すると、その旨の情報を端末装置１０に送信する。送信部３４は、これらの送信を行う際に、共有変更セット管理部３２から受け取ったユーザの情報に基づいて、端末装置１０のアドレスを特定する。本実施の形態では、未確定変更情報を送信する送信部、追加変更情報を送信する送信部、確定変更情報が生成された旨の情報と共有変更情報が削除された旨の情報を送信する送信部の一例として、送信部３４を設けている。
【００４５】
［本実施の形態における共有変更セットサーバの動作］
次に、図４に示した構成を有する共有変更セットサーバ３０の動作について説明する。尚、この動作に先立ち、第１のユーザの一例としての開発者Ａが第１の端末の一例としての端末装置１０ａから、第２のユーザの一例としての開発者Ｂが第２の端末の一例としての端末装置１０ｂから、それぞれ共有変更セットサーバ３０に接続しているものとする。そして、共有変更セットサーバ３０は、開発者ＡのユーザＩＤと端末装置１０ａのアドレスとの対応、及び、開発者ＢのユーザＩＤと端末装置１０ｂのアドレスとの対応を含む対応情報を保持しているものとする。
【００４６】
図５は、共有変更セットサーバ３０の共有変更セット作成時の動作例を示したシーケンス図である。開発者Ａが変更セットを作成してこの変更セットを確定前に開発者Ｂと共有する指示を端末装置１０ａから共有変更セットサーバ３０へ送信することにより、この動作は開始する。
【００４７】
端末装置１０ａが変更セットの情報とこれを共有するユーザの情報とを共有変更セットサーバ３０に送信すると、共有変更セットサーバ３０では、受信部３１が、これらの情報を受信する（ステップ３０１）。ここで、変更セットの情報には、変更セットと、変更セットを識別する変更セットＩＤとを含めてよい。また、ユーザの情報には、開発者ＢのユーザＩＤを含めてよい。ユーザの情報には、更に開発者ＡのユーザＩＤを含めてもよいが、開発者ＡのユーザＩＤは、ユーザの情報に明示的に含めずに、端末装置１０ａのアドレスに基づいて上記対応情報を検索することにより取得してもよい。
【００４８】
次に、共有変更セットサーバ３０では、共有変更セット管理部３２が、共有変更セットを作成する（ステップ３０２）。ここで、共有変更セットには、変更セットと、これを共有する開発者のユーザＩＤとを含めてよい。その際、開発者のユーザＩＤには、開発者ＡのユーザＩＤと、開発者ＢのユーザＩＤとを含めてよい。そして、開発者ＡのユーザＩＤには、その共有変更セットを作成した開発者のユーザＩＤである旨の情報を付し、開発者ＢのユーザＩＤには、その共有変更セットを作成した開発者以外の開発者のユーザＩＤである旨の情報を付してもよい。このようにして作成された共有変更セットは、変更セットＩＤに関連付けて共有変更セット記憶部３３に記憶される。
【００４９】
その後、共有変更セットサーバ３０では、送信部３４が、共有変更セットの情報を端末装置１０ａに送信する（ステップ３０３）。ここで、共有変更セットの情報には、ステップ３０２で作成された共有変更セットと、ステップ３０１で受信された変更セットＩＤとを含めてよい。また、端末装置１０ａのアドレスとしては、ステップ３０１での情報の受信時に把握されたアドレスを用いればよい。これにより、端末装置１０ａが保持する変更セットのうち、この動作例で共有が指示された変更セットは、ステップ３０２で作成された共有変更セットで置き換えられることになる。
【００５０】
また、共有変更セットサーバ３０では、送信部３４が、共有変更セットの情報を端末装置１０ｂにも送信する（ステップ３０４）。ここで、共有変更セットの情報には、ステップ３０２で作成された共有変更セットと、ステップ３０１で受信された変更セットＩＤとを含めてよい。また、端末装置１０ｂのアドレスは、ステップ３０１で受信された開発者ＢのユーザＩＤに基づいて上記対応情報を検索することにより取得すればよい。これにより、端末装置１０ａが保持する共有変更セットと、端末装置１０ｂが保持する共有変更セットとは、同期されることになる。尚、このとき、開発者Ｂが端末装置１０ｂで同じソースコードに対する変更セットを作成していたとすると、端末装置１０ｂは、開発者Ａが作成した変更セットにおける変更と、開発者Ｂが作成した変更セットにおける変更とをマージするためのＵＩ（User Interface）を表示してよい。
【００５１】
尚、この動作例では、共有変更セットサーバ３０が共有変更セットを端末装置１０ａ及び端末装置１０ｂへ送るようにしたが、この限りではない。例えば、共有変更セットサーバ３０は、未確定変更セットを端末装置１０ｂへ送り、既に未確定変更セットを保持している端末装置１０ａへは未確定変更セットを送らないようにしてもよい。
【００５２】
図６は、共有変更セットサーバ３０の共有変更セット変更時の動作例を示したシーケンス図である。開発者Ａが共有変更セットに変更を追加する指示を端末装置１０ａから共有変更セットサーバ３０へ送信することにより、この動作は開始する。
【００５３】
端末装置１０ａが共有変更セットに対する追加変更の情報を共有変更セットサーバ３０に送信すると、共有変更セットサーバ３０では、受信部３１が、この情報を受信する（ステップ３２１）。ここで、追加変更の情報には、追加変更の内容と、共有変更セットを識別する変更セットＩＤとを含めてよい。
【００５４】
次に、共有変更セットサーバ３０では、共有変更セット管理部３２が、共有変更セットを、追加変更の内容に基づいて書き換える（ステップ３２２）。具体的には、ステップ３２１で受信された変更セットＩＤに関連付けて共有変更セット記憶部３３に記憶された共有変更セットを特定し、この特定された共有変更セットを書き換える。
【００５５】
その後、共有変更セットサーバ３０では、送信部３４が、共有変更セットに対する追加変更の情報を端末装置１０ｂに送信する（ステップ３２３）。ここで、追加変更の情報には、ステップ３２１で受信された追加変更の内容と変更セットＩＤとを含めてよい。また、端末装置１０ｂのアドレスは、次のようにして取得すればよい。即ち、まず、ステップ３２１で受信された変更セットＩＤに関連付けて共有変更セット記憶部３３に記憶された共有変更セットを取得する。次に、この共有変更セットにこれを作成した開発者以外の開発者のユーザＩＤとして含まれる開発者ＢのユーザＩＤを取得し、これに基づいて上記対応情報を検索することにより取得すればよい。これにより、端末装置１０ａが保持する共有変更セットと、端末装置１０ｂが保持する共有変更セットとは、同期されることになる。尚、このとき、開発者Ｂが端末装置１０ｂで同じ共有変更セットに対する追加変更を行っていたとすると、端末装置１０ｂは、開発者Ａが行った共有変更セットに対する追加変更と、開発者Ｂが行った共有変更セットに対する追加変更とをマージするためのＵＩを表示してよい。
【００５６】
尚、この動作例では、端末装置１０ａが共有変更セットに対する追加変更の情報を共有変更セットサーバ３０へ送ると、共有変更セットサーバ３０が追加変更の情報を端末装置１０ｂへ送るようにしたが、この限りではない。端末装置１０ｂが共有変更セットに対する追加変更の情報を共有変更セットサーバ３０へ送ると、共有変更セットサーバ３０が追加変更の情報を端末装置１０ａへ送るようにしてもよい。
【００５７】
図７は、共有変更セットサーバ３０の共有変更セット確定時の動作例を示したシーケンス図である。開発者Ａが共有変更セットを確定する指示を端末装置１０ａから共有変更セットサーバ３０へ送信することにより、この動作は開始する。
【００５８】
端末装置１０ａが共有変更セットの確定指示の情報を共有変更セットサーバ３０に送信すると、共有変更セットサーバ３０では、受信部３１が、この情報を受信する（ステップ３４１）。ここで、確定指示の情報には、共有変更セットを識別する変更セットＩＤを含めてよい。
【００５９】
次に、共有変更セットサーバ３０では、共有変更セット管理部３２が、共有変更セットを確定し、確定した共有変更セットを確定変更セットとしてソースコード管理サーバ２０へデリバーする（ステップ３４２）。
【００６０】
次いで、共有変更セット管理部３２は、共有変更セットを共有変更セット記憶部３３から削除する（ステップ３４３）。具体的には、ステップ３４１で受信された変更セットＩＤに関連付けて共有変更セット記憶部３３に記憶された共有変更セットを特定し、この特定された共有変更セットを削除する。
【００６１】
その後、共有変更セットサーバ３０では、送信部３４が、共有変更セットが削除されたことと、共有変更セットが確定変更セットとしてソースコード管理サーバ２０へデリバーされたこととを、端末装置１０ｂに通知する（ステップ３４４）。ここで、この通知には、共有変更セットの削除が完了したことの通知と、共有変更セットのデリバーが完了したことの通知と、共有変更セットを識別する変更セットＩＤとを含めてよい。また、端末装置１０ｂのアドレスは、次のようにして取得すればよい。即ち、まず、ステップ３４１で受信された変更セットＩＤに関連付けて共有変更セット記憶部３３に記憶された共有変更セットを取得する。次に、この共有変更セットにこれを作成した開発者以外の開発者のユーザＩＤとして含まれる開発者ＢのユーザＩＤを取得し、これに基づいて上記対応情報を検索することにより取得すればよい。これにより、端末装置１０ｂから共有変更セットが削除される。また、端末装置１０ｂは、ソースコード管理サーバ２０から、ステップ３４２でデリバーされた確定変更セットを取得することになる。
【００６２】
［本実施の形態における共有変更セットサーバの動作の変形例］
第１の変形例は、共有変更セットの所有者の設定に関するものである。共有変更セットの所有者とは、共有変更セットを共有する開発者のうち、共有変更セットの確定作業を実行する権限を有する開発者のことをいう。つまり、共有変更セットの所有者のみが、共有変更セットの確定作業を実行できる。ここで、共有変更セットの所有者は、初期状態では共有変更セットの作成者であるが、共有変更セットを共有する他の開発者を、共有変更セットの新たな所有者としてもよい。尚、共有変更セットの所有者は、確定作業前であればいつでも変更できるが、確定作業後は変更できないものとする。
【００６３】
具体的には、図５のステップ３０２で、共有変更セット管理部３２が、共有変更セットを作成する際に、開発者Ａが所有者であることを示す所有者情報を共有変更セットに含めておく。その後、図示しないが、開発者Ａが確定指示を行う前に、受信部３１が、端末装置１０ａから所有者を開発者Ｂに変更する変更指示を受信する。これにより、共有変更セット管理部３２が、共有変更セットに含まれる所有者情報を、開発者Ｂが所有者であることを示すように変更するとよい。この場合において、所有者情報は、ユーザが確定させる指示を行う権限を有することを示す権限情報の一例である。
【００６４】
第２の変形例は、開発者ごとの作業時間の計測に関するものである。この変形例は、共有変更セットの作業量メトリックスを持つものとする。これにより、例えば、協働で作業した開発者の変更作業に要した時間や変更作業を行った量を記録する。ここで、変更作業を行った量としては、計測対象がテキストであれば、変更作業を行ったテキストの量をそのまま用いればよい。一方、計測対象がバイナリファイルであれば、バイナリファイルを作成するのに要した時間を、変更作業を行ったテキストの量に換算して用いるとよい。
【００６５】
具体的には、図６のステップ３２２で、共有変更セット管理部３２が、共有変更セットを書き換える際に、例えば、書き換えたテキストの量を記録するとよい。この場合において、共有変更セット管理部３２の記録する機能は、作業量を記録する記録部の一例である。
【００６６】
［本実施の形態の効果］
本実施の形態によれば、確定作業（コミット、チェックイン、コンプリート）を行っていない状態でも、協働開発を実施することが可能となる。これは、ペアプログラミング等にも利用することができる。
【００６７】
また、本実施の形態によれば、作業量を減らすことができると共に、確定作業を行ってしまった場合のソフトウェアの不安定要素を軽減することができる。その結果、ビルドミスの低減により、テストを実施している他の開発者への影響度が軽減されるという効果や、生産性の向上につながるという効果が得られる。
【００６８】
尚、ファイルサーバを共有する場合との相違点としては、以下のことが挙げられる。第一に、ファイルサーバを共有する場合は、ファイルの全体を共有することになり、本実施の形態のように、変更セットのみを共有することにはならない。第二に、ファイルサーバを共有する場合は、開発者同士が行った変更により不安定な状況になる可能性があるが、本実施の形態では、そのようなことはない。例えば、図１の「src/source1.java」は確定はしたものの、まだ試験を実施していないので、ファイルサーバで共有してしまうと、開発者Ｂに多大な影響を与えてしまうリスクがある。
【００６９】
［本実施の形態における共有変更セットサーバのハードウェア構成］
図８は、本実施の形態における共有変更セットサーバ３０のハードウェア構成例を示した図である。図示するように、共有変更セットサーバ３０は、演算手段であるＣＰＵ（Central Processing Unit）３０ａと、Ｍ／Ｂ（マザーボード）チップセット３０ｂを介してＣＰＵ３０ａに接続されたメインメモリ３０ｃと、同じくＭ／Ｂチップセット３０ｂを介してＣＰＵ３０ａに接続された表示機構３０ｄとを備える。また、Ｍ／Ｂチップセット３０ｂには、ブリッジ回路３０ｅを介して、ネットワークインターフェイス３０ｆと、磁気ディスク装置（ＨＤＤ）３０ｇと、音声機構３０ｈと、キーボード／マウス３０ｉと、光学ドライブ３０ｊとが接続されている。
【００７０】
尚、図８において、各構成要素は、バスを介して接続される。例えば、ＣＰＵ３０ａとＭ／Ｂチップセット３０ｂの間や、Ｍ／Ｂチップセット３０ｂとメインメモリ３０ｃの間は、ＣＰＵバスを介して接続される。また、Ｍ／Ｂチップセット３０ｂと表示機構３０ｄとの間は、ＡＧＰ（Accelerated Graphics Port）を介して接続されてもよいが、表示機構３０ｄがＰＣＩ Ｅｘｐｒｅｓｓ対応のビデオカードを含む場合、Ｍ／Ｂチップセット３０ｂとこのビデオカードの間は、ＰＣＩ Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バスを介して接続される。また、ブリッジ回路３０ｅと接続する場合、ネットワークインターフェイス３０ｆについては、例えば、ＰＣＩ Ｅｘｐｒｅｓｓを用いることができる。また、磁気ディスク装置３０ｇについては、例えば、シリアルＡＴＡ（AT Attachment）、パラレル転送のＡＴＡ、ＰＣＩ（Peripheral Components Interconnect）を用いることができる。更に、キーボード／マウス３０ｉ、及び、光学ドライブ３０ｊについては、ＵＳＢ（Universal Serial Bus）を用いることができる。
【００７１】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【００７２】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００７３】
１０…端末装置、２０…ソースコード管理サーバ、３０…共有変更セットサーバ、３１…受信部、３２…共有変更セット管理部、３３…共有変更セット記憶部、３４…送信部、８０…ネットワーク
【図１】
0006029117.tif 000002
【図２】
0006029117.tif 000003
【図３】
0006029117.tif 000004
【図４】
0006029117.tif 000005
【図５】
0006029117.tif 000006
【図６】
0006029117.tif 000007
【図７】
0006029117.tif 000008
【図８】
0006029117.tif 000009