本発明の実施の形態について、図面に基づいて以下に説明する。
<実施の形態1>
まず、本発明の実施の形態によるソフトウェア管理装置の構成について説明する。なお、本実施の形態においては、ソフトウェア管理装置単体で実現した場合について説明する。
図1は、本発明の実施の形態1によるソフトウェア管理装置1の構成の一例を示すブロック図である。なお、図1では、ソフトウェア管理装置1を構成する必要最小限の構成要素を示している。
図1に示すように、ソフトウェア管理装置1は、少なくともリビジョン情報取得部2と、開発者レベル管理部3と、制御部4とを備えている。
リビジョン情報取得部2は、ソースファイル内のソースコードの各行に対応するリビジョンと、ソースコードを改訂した改訂者とを含むリビジョン情報を取得する。
開発者レベル管理部3は、改訂者を含むソースコードの開発者のレベルを示す開発者レベルを管理し、リビジョン情報取得部2で取得されたリビジョン情報に含まれる改訂者に対応する開発者の開発者レベルを抽出する。
制御部4は、リビジョン情報取得部2で取得されたリビジョン情報と、開発者レベル管理部3で抽出された開発者レベルとに基づいて、ソースコードの各行を開発者レベルに応じて区別して表示するように制御する。
図2は、ソフトウェア管理装置1におけるソフトウェア機能に対応するハードウェア構成の一例を示す図である。
リビジョン情報取得部2、開発者レベル管理部3、および制御部4は、例えば図2のプロセッサ5がメモリ6等に記憶されたプログラムを実行することにより、当該プロセッサ5の機能として実現される。ただし、これらは、例えば複数のプロセッサ5が連携して実現されてもよい。
次に、図1のリビジョン情報取得部2、開発者レベル管理部3、および制御部4を含むソフトウェア管理装置1の他の構成について説明する。
図3は、ソフトウェア管理装置7の構成の一例を示すブロック図である。
図3に示すように、ソフトウェア管理装置7は、リビジョン情報取得部2と、開発者レベル管理部3と、制御部4とを備えている。また、リビジョン情報取得部2はリビジョン情報データベース8に接続され、開発者レベル管理部3は開発者レベルデータベース9に接続され、制御部4は表示装置10に接続されている。
リビジョン情報データベース8は、例えば、ハードディスク(HDD:Hard Disk Drive)または半導体メモリなどの記憶装置から構成されており、バージョン管理ツール(本発明では、説明を分かりやすくするためリビジョン管理ツールと呼ぶこととする)によって管理されるリビジョン情報を格納している。図4は、リビジョン情報データベース8に格納されるリビジョン情報の一例を示す図である。図4に示すように、リビジョン情報は、ソースコード改訂情報とリビジョン対応情報とを含んでいる。
ソースコード改訂情報は、ソースコードと、当該ソースコードを改訂したリビジョン番号とをソースコードの行ごとに対応付けている。ソースコード改訂情報によって、ソースコードの各行がどのリビジョンで改訂されたのかを判別することができる。リビジョン対応情報は、リビジョン番号と、コミッター(改訂者)名およびコミット日時(日時情報)等を含むコミットに関する情報であるコミット情報とを対応付けている。リビジョン管理ツールは、コミッターによって改訂されるごとにリビジョン情報の修正等を行う。
なお、本実施の形態1では、リビジョン番号は、改訂順に整数値が割り当てられているが、これに限るものではない。例えば、リビジョン番号は、改訂ごとにハッシュ値が割り当てられてもよい。また、リビジョン管理ツールは、ソフトウェア管理装置7の外部に設けられているものとする。
リビジョン情報取得部2は、リビジョン情報データベース8から対象ファイルのリビジョン情報を取得する。ここで、対象ファイルとは、例えば、上述のソフトウェア開発における各工程でバグが生じた場合に当該バグの原因を特定する際に対象となるファイルのことをいい、または改訂者が既存のソースコードを改訂する際に対象となるファイルのことをいう。リビジョン情報取得部2は、取得したリビジョン情報を開発者レベル管理部3および制御部4の各々に出力する。
開発者レベルデータベース9は、例えば、ハードディスク(HDD:Hard Disk Drive)または半導体メモリなどの記憶装置から構成されており、ソフトウェアを開発する開発者のレベルである開発者レベルを格納している。図5は、開発者レベルデータベース9に格納される開発者レベルの一例を示す図である。図5に示すように、開発者レベルデータベース9では、開発者名と、当該開発者の開発者レベルとが対応付けて格納されている。開発者レベルは、種々の方法で設定される。例えば、開発者を適宜に評価して、人手によって(手動で)開発者レベルを設定する方法がある。また、例えば、開発者の勤務年数等に基づいて自動的に開発者レベルを設定する方法がある。
なお、開発者レベルデータベース9は、リビジョン情報データベース8に格納されているリビジョン情報に含まれるコミッターと同一である開発者の開発レベル、およびコミッター以外の開発者の開発者レベルを格納している。すなわち、開発者レベルデータベース9では、ソフトウェアの開発に関与し得る者を開発者とし、当該開発者の開発者レベルを格納している。
開発者レベル管理部3は、リビジョン情報取得部2から入力されたリビジョン情報に基づいて、開発者レベルデータベース9から開発者レベルを抽出する。開発者レベル管理部3は、抽出した開発者レベルを制御部4に出力する。
制御部4は、リビジョン情報取得部2から入力されたリビジョン情報と、開発者レベル管理部3から入力された開発者レベルとに基づいて、対象ファイルにおけるソースコードの各行を開発者レベルに応じて区別して表示するように制御する。表示装置10は、制御部4の制御に従って、開発者レベルに応じて区別されたソースコードを表示する。
次に、本実施の形態1によるソフトウェア管理装置7の動作について説明する。なお、本文の例を用いた説明では、説明を分かりやすくするために1つのソースファイルに着目して動作を説明するが、本発明は複数のソースファイルに対しても適用可能である。
図6は、ソフトウェア管理装置7の動作の一例を示すフローチャートである。なお、ステップS101の前において、リビジョン情報取得部2は、どのファイルを対象ファイルとしているのかを把握しているものとする。
ステップS101において、リビジョン情報取得部2は、リビジョン情報データベース8からリビジョン情報を取得する。具体的には、リビジョン情報取得部2は、例えば図4に示すようなソースコード改訂情報およびリビジョン対応情報を含むリビジョン情報をリビジョン情報データベース8から取得する。そして、リビジョン情報取得部2は、リビジョン対応情報を開発者レベル管理部3に出力し、ソースコード改訂情報およびリビジョン対応情報を制御部4に出力する。
ステップS102において、開発者レベル管理部3は、リビジョン情報取得部2から入力されたリビジョン情報に含まれるリビジョン対応情報に基づいて、開発者レベルデータベース9から開発者レベルを取得する。
ここで、ステップS102の詳細について、図7を用いて説明する。
ステップS201において、開発者レベル管理部3には、リビジョン対応情報に含まれるコミッター名が入力される。
ステップS202において、開発者レベル管理部3は、リビジョン情報取得部2から入力されたコミッター名に対応する開発者名を開発者レベルデータベース9から検索し、コミッター名と開発者名とが一致した場合に当該開発者の開発者レベルを開発者レベルデータベース9から抽出する。そして、開発者レベル管理部3は、抽出した開発者レベルを制御部4に出力する。
例えば、リビジョン情報取得部2から開発者レベル管理部3に図4に示すリビジョン対応情報が入力され、開発者レベルデータベース9には図5に示す開発者レベルが格納されているものとする。このような場合において、開発者レベル管理部3は、例えばリビジョン番号「5」のときのコミッター名「Tanaka」に対応する開発者名「Tanaka」を開発者レベルデータベース9から検索し、開発者名「Tanaka」の開発者レベル「35」を抽出する。
図6に戻り、ステップS103において、制御部4は、リビジョン情報取得部2から入力されたリビジョン情報と、開発者レベル管理部3から入力された開発者レベルとに基づいて、対象ファイルのソースコードの各行を開発者レベルに応じて区別して表示するように制御する。具体的には、制御部4は、例えば図8に示すように、ソースコードの各行を開発者のレベルに応じて色分けして表示するように制御する。表示装置10には、開発者レベルに応じて色分けされたソースコードの各行が表示される。
例えば、リビジョン情報取得部2から制御部4に図4に示すリビジョン情報が入力され、開発者レベル管理部3から制御部4に図5に示す管理者レベルが入力されたものとする。制御部4は、リビジョン番号が「1」のときのコミッターは「Sasaki」であるため、リビジョン番号「1」のソースコードの行を、「Sasaki」の開発者レベル「90」に対応する色で表示するように制御する。他も同様に、リビジョン番号「5」のソースコードの行を、「Tanaka」の開発者レベル「35」に対応する色で表示するように制御する。リビジョン番号「3」のソースコードの行を、「Suzuki」の開発者レベル「60」に対応する色で表示するように制御する。
なお、ソースコードの各行を色分けして表示する方法として、例えば開発者レベルが勤務年数に基づいている場合は、開発者の勤務年数が1年未満のときは赤色、開発者の勤務年数が1年〜10年未満のときは黄色、開発者の勤務年数が10年以上であるときは青色にして表示するようにしてもよい。
本文ではソースコードを編集する(コーディングする)開発者とコミッターとが同一であるとして説明しているが、ソースコードを編集する開発者とコミッターとが異なる場合もあり得る。このような場合は、ソースコードを編集した開発者の開発者レベルではなく、編集されたソースコードを受け取ってソースコードのリビジョンの改訂を行ったコミッターの開発者レベルをもとにソースコードの各行が色分け表示される。よって、ソースコードの各行の色分けに反映されるコミッターの開発者レベルは、単にソースコードを編集する(コーディングの)能力としてではなく、他の開発者が編集したソースコードをチェックする能力も含めて捉えることになる。
次に、本実施の形態1の他の例(変形例1,2)について説明する。
<変形例1>
一般的に、開発者の開発レベルは、開発者の勤務年数の経過、または開発者の能力の向上に従って経時的に上がる。開発者レベルの向上を反映させるべく、開発者レベルデータベース9に格納されている開発者レベルも定期的に更新される。しかし、例えば図8に示すような表示を行う場合において、過去の開発者レベルが低いときに改訂したソースコードの行に対して、開発者レベルが過去の開発者レベルよりも上がった現在の開発者レベルに応じて色分けされてしまう(すなわち、改訂時の開発者レベルに応じた色分けができない)という問題がある。本変形例1は、このような問題を解決するものである。
図9は、開発者レベルデータベース9に格納される開発者レベルの一例を示す図である。
図9に示すように、開発者レベルデータベース9では、更新ごとに開発者レベルの履歴を格納している。図9では、3回の更新(更新A,B,C)が行われたことを示している。また、各リビジョンとともに更新日時を示している。例えば、開発者「Tanaka」に注目すると、「Tanaka」の開発レベルは、更新Aのときは「35」、更新Bのときは「50」、更新Cのときは「80」であることが分かる。なお、開発者レベルの設定方法は、上述と同様である。
図10は、図6のステップS102の詳細を示すフローチャートである。その他の動作は、図6と同様であるため、ここでは説明を省略する。
ステップS301において、開発者レベル管理部3には、リビジョン対応情報に含まれるコミッター名およびコミット日時が入力される。
ステップS302において、開発者レベル管理部3は、リビジョン情報取得部2から入力されたコミッター名およびコミット日時に基づいて、開発者レベルを開発者レベルデータベースから抽出する。そして、開発者レベル管理部3は、抽出した開発者レベルを制御部4に出力する。
例えば、リビジョン情報取得部2から開発者レベル管理部3に図4に示すリビジョン対応情報が入力され、開発者レベルデータベース9には図9に示す開発者レベルが格納されているものとする。このような場合において、開発者レベル管理部3は、例えばリビジョン番号「5」のときのコミッター名「Tanaka」に対応する開発者名「Tanaka」を開発者レベルデータベース9から検索する。そして、各更新A〜Cにおける開発者「Tanaka」のうち、コミット日時よりも過去であって最新の更新Bにおける開発者レベル「50」を抽出する。
上記より、ソースコードの各行を改訂時の開発レベルに応じて色分けして表示することができる。
<変形例2>
上述では、例えば図5に示すように、各開発者に対する開発者レベルの項目は1つである場合について説明したが、これに限るものではない。例えば、開発者の能力は、プログラミング言語の種別ごとに変わる場合がある。このような場合を想定して、開発者レベルを複数の項目にしてもよい。
図11は、開発者レベルデータベース9に格納される開発者レベルの一例を示す図である。図11の例では、各開発者に対して、「C/C++開発レベル」、「Java(登録商標)開発レベル」、および「Cobol開発レベル」の3つの項目が設定されている。
上記より、開発者レベル管理部3は、例えば対象ファイルのソースコードのプログラミング言語がC/C++である場合は、「C/C++開発レベル」を開発者レベルとして抽出すればよい。すなわち、開発者レベル管理部3は、実状に合った開発者レベルを抽出することができる。
以上のことから、本実施の形態1によれば、ソースコードの各行を開発者レベルに応じて区別して表示しているため、バグが発見された場合に開発者レベルが低いソースコードを優先して調べることによって、バグの原因を効率的に特定することが可能となる。また、既存のソースコードを改訂する場合において、ソースコードの各行の開発レベルを把握することができる。
なお、上記では、リビジョン管理ツールの管理によって、例えば図4に示すようなリビジョン情報がリビジョン情報データベース8に格納されている場合について説明した。しかし、ソースコードと当該ソースコードを改訂したリビジョン番号とをソースコードの行ごとに対応付けていないリビジョン情報を管理するリビジョン管理ツールがある。当該リビジョン管理ツールで管理されるリビジョン情報には、図4に示すようなソースコード改訂情報が含まれていない。このような場合において、リビジョン情報取得部2は、リビジョン情報データベース8から対象ファイルのリビジョン情報を全て取得し、取得したリビジョン情報に基づいて図4に示すようなソースコード改訂情報を生成するようにしてもよい。
リビジョン情報データベース8において、同姓のコミッターが複数存在する場合は、各コミッターを区別して格納する。開発者レベルデータベース9に格納される開発者名についても同様である。この場合、区別したコミッターと開発者名とを対応させる必要がある。
上記では、開発者レベルに応じてソースコードの各行を色分けして表示する場合について説明したが、これに限るものではない。開発者レベルが予め定められた閾値よりも低い場合は、対応するソースコードの行を太字等で強調したり、対応するソースコードの行が分かるような記号を付したりしてもよい。また、開発者レベルが予め定められた閾値よりも低いソースコードの行をリストアップしてもよい。
<実施の形態2>
まず、本発明の実施の形態2によるソフトウェア管理装置の構成について説明する。
図12は、本実施の形態2によるソフトウェア管理装置11の構成の一例を示すブロック図である。
図12に示すように、本実施の形態2によるソフトウェア管理装置11は、実行結果管理部12およびソースコード抽出部13を備えることを特徴としている。実行結果管理部12は、実行結果データベース14に接続されている。その他の構成および動作は、実施の形態1と同様であるため、ここでは詳細な説明を省略する。
リビジョン情報取得部2は、リビジョン情報データベース8から対象ファイルのリビジョン情報を取得するとともに、対象ファイルの実行結果を取得する。ここで、本実施の形態2による対象ファイルの実行結果とは、ソフトウェア開発の各工程(例えば、ビルド工程、テスト工程)での実行の成否のことをいう。実行結果は、例えばビルド工程で用いられるビルドツール、またはテスト工程で用いられるテストツールからリビジョン情報取得部2に入力される。このとき、実行結果とリビジョン情報とは、プラグインで対応付けられてリビジョン情報取得部2に入力される。このように、リビジョン情報取得部2は、対象ファイルを実行した時に、その実行結果とリビジョン情報とを取得する。リビジョン情報取得部2は、取得したリビジョン情報を開発者レベル管理部3および制御部4に出力し、取得した実行結果とリビジョン情報とを実行結果管理部12に出力する。
実行結果管理部12は、リビジョン情報取得部2から入力された実行結果とリビジョン情報とを対応付けて実行結果データベース14に格納するように管理する。また、実行結果管理部12は、実行結果データベース14に格納しているリビジョン情報をソースコード抽出部13に出力する。
実行結果データベース14は、例えば、ハードディスク(HDD:Hard Disk Drive)または半導体メモリなどの記憶装置から構成されており、実行結果管理部12の管理によって実行結果とリビジョン情報とを対応付けて格納している。図13は、実行結果データベース14に格納される実行結果の一例を示す図である。図13に示すように、実行結果データベース14では、実行したリビジョン番号ごとに、実行結果とリビジョン情報とを対応付けて格納している。例えば、リビジョン番号「1」およびリビジョン番号「5」の実行結果は「×(失敗)」であることを示しており、リビジョン番号「3」の実行結果は「○(成功)」であることを示している。
ソースコード抽出部13は、実行結果管理部12から入力されたリビジョン情報に基づいて、ソースコードの行を抽出する。ソースコード抽出部13は、抽出したソースコードの行を開発者レベル管理部3に出力する。
なお、実行結果管理部12およびソースコード抽出部13は、例えば図2のプロセッサ5がメモリ6等に記憶されたプログラムを実行することにより、当該プロセッサ5の機能として実現される。ただし、これらは、例えば複数のプロセッサ5が連携して実現されてもよい。
次に、本実施の形態2によるソフトウェア管理装置11の動作について説明する。
図14は、ソフトウェア管理装置11の動作の一例を示すフローチャートである。なお、図14のステップS406、ステップS408、およびステップS409は、図6のステップS102およびステップS103の各々に対応しているため、ここでは説明を省略する。
ステップS401において、リビジョン情報取得部2は、リビジョン情報データベース8から対象ファイルのリビジョン情報を取得するとともに、対象ファイルの実行結果を取得する。例えば、リビジョン情報取得部2は、実行結果と、図15に示すソースコード改訂情報を含むリビジョン情報とを取得する。なお、図15では、ソースコードの現リビジョンのリビジョン番号が「5」であり、それよりも過去に改訂されたリビジョンも含むリビジョン番号「2」、「3」、「4」、「5」のリビジョンの改訂内容の影響を受けていることを示している。すなわち、リビジョン情報取得部2は、図15に示すソースコード改訂情報を含む対象ファイルのリビジョン情報と、その実行結果を取得する。
ステップS402において、実行結果管理部12は、リビジョン情報取得部2から入力された実行結果とリビジョン情報とを対応付けて実行結果データベース14に格納するように管理する。図13の例では、実行結果データベース14には、リビジョン情報取得部2が今回取得したリビジョン番号「5」におけるリビジョン情報と実行結果とが格納されている。
ステップS403において、実行結果管理部12は、今回の対象ファイルの実行結果が失敗であるか否かの判断を行う。実行結果が失敗である場合は、ステップS404に移行する。一方、実行結果が失敗でない(すなわち、実行結果が成功である)場合は、処理を終了する。図13の例では、今回の対象ファイル(リビジョン番号「5」)の実行結果は「×(失敗)」となっている。
ステップS404において、実行結果管理部12は、過去に実行結果が成功である親リビジョンのリビジョン情報が実行結果データベース14に格納されているか否かの判断を行う。実行結果が成功である親リビジョンのリビジョン情報が実行結果データベース14に格納されている場合は、ステップS405に移行する。一方、実行結果が成功である親リビジョンのリビジョン情報が実行結果データベース14に格納されていない場合は、ステップS408に移行して実施の形態1と同様の処理が行われる。ここで、親リビジョンとは、対象ファイルにおける過去のリビジョン(改訂)のことをいう。図13の例では、リビジョン番号「5」の親リビジョンはリビジョン番号「1」およびリビジョン番号「3」であり、リビジョン番号「3」のときの実行結果は「○(成功)」である。
ステップS405において、実行結果管理部12は、今回のリビジョンのリビジョン情報と、過去に成功した親リビジョンのうちの最新の親リビジョンのリビジョン情報とを実行結果データベース14から抽出してソースコード抽出部13に出力する。図13の例では、実行結果管理部12は、リビジョン番号「5」(今回のリビジョン)のリビジョン情報と、リビジョン番号「3」(過去に成功した最新の親リビジョン)のリビジョン情報とを実行結果データベース14から抽出してソースコード抽出部13に出力する。なお、図13に示すリビジョン番号「3」のリビジョン情報に含まれるソースコード改訂情報は、例えば図16に示すソースコード改訂情報である。
ソースコード抽出部13は、実行結果管理部12から入力された今回のリビジョンのリビジョン情報と、過去に成功した最新の親リビジョンのリビジョン情報との差分をとり、当該差分部分のソースコードの行を改訂したコミッターを特定する。例えば、リビジョン番号「5」(今回のリビジョン)のリビジョン情報と、リビジョン番号「3」(過去に成功した最新の親リビジョン)のリビジョン情報との差分をとると、当該差分部分はリビジョン番号「4」およびリビジョン番号「5」に対応するソースコードの行となる。そして、ビジョン番号「4」およびリビジョン番号「5」のときに改訂したコミッターを特定する。
ステップS407において、制御部4は、リビジョン情報取得部2から入力されたリビジョン情報と、開発者レベル管理部3から入力された開発者レベルとに基づいて、対象ファイルのソースコードの各行をソースコード抽出部13で特定されたコミッターの開発者レベルに応じて区別して表示するように制御する。具体的には、制御部4は、例えば図17に示すように、リビジョン番号「4」およびリビジョン番号「5」に対応するソースコードの各行を開発者のレベルに応じて色分けして表示するように制御する。表示装置10には、開発者レベルに応じて色分けされたソースコードの各行が表示される。
以上のことから、本実施の形態2によれば、今回失敗したリビジョン情報と、過去に成功した最新のリビジョン情報との差分部分のソースコードの行を色分けして表示しているため、ソースコードの全部の行を色分けして表示する実施の形態1よりも効率的にバグの原因を特定することができる。
<実施の形態3>
まず、本発明の実施の形態3によるソフトウェア管理装置の構成について説明する。
図18は、本実施の形態3によるソフトウェア管理装置15の構成の一例を示すブロック図である。
図18に示すように、本実施の形態3によるソフトウェア管理装置15は、実施の形態2によるソフトウェア管理装置11(図12参照)のソースコード抽出部13に代えて、開発者評価部16を備えることを特徴としている。その他の構成および動作は、実施の形態2と同様であるため、ここでは詳細な説明を省略する。
開発者評価部16は、実行結果管理部12から入力されたリビジョン情報に基づいて、開発者の評価を行う。具体的には、開発者評価部16は、開発者レベルを下げる開発者(コミッター)を特定し、当該開発者の開発者レベルを下げると判断する。
なお、開発者評価部16は、例えば図2のプロセッサ5がメモリ6等に記憶されたプログラムを実行することにより、当該プロセッサ5の機能として実現される。ただし、これらは、例えば複数のプロセッサ5が連携して実現されてもよい。
次に、本実施の形態3によるソフトウェア管理装置15の動作について説明する。
図19は、ソフトウェア管理装置15の動作の一例を示すフローチャートである。
ステップS501において、リビジョン情報取得部2は、リビジョン情報データベース8から対象ファイルのリビジョン情報を取得するとともに、対象ファイルの実行結果を取得する。例えば、リビジョン情報取得部2は、実行結果と、図20に示すソースコード改訂情報を含むリビジョン情報とを取得する。なお、図20では、ソースコードの現リビジョンのリビジョン番号が「6」であり、それよりも過去に改訂されたリビジョンも含むリビジョン番号「2」、「3」、「4」、「6」のリビジョンの改訂内容の影響を受けていることを示している。すなわち、リビジョン情報取得部2は、図20に示すソースコードを有する対象ファイルのリビジョン情報と、その実行結果を取得する。
ステップS502において、実行結果管理部12は、リビジョン情報取得部2から入力された実行結果とリビジョン情報とを対応付けて実行結果データベース14に格納するように管理する。例えば、図21に示すように、実行結果データベース14には、リビジョン情報取得部2が今回取得したリビジョン番号「6」におけるリビジョン情報と実行結果とが格納されている。
ステップS503において、実行結果管理部12は、今回の対象ファイルの実行結果が成功であるか否かの判断を行う。実行結果が成功である場合は、ステップS504に移行する。一方、実行結果が成功でない(すなわち、実行結果が失敗である)場合は、処理を終了する。図21の例では、今回の対象ファイル(リビジョン番号「6」)の実行結果は「○(成功)」となっている。
ステップS504において、実行結果管理部12は、実行結果データベース14に格納されている最新の親リビジョンの実行結果が失敗であるか否かの判断を行う。最新の親リビジョンの実行結果が失敗である場合は、ステップS505に移行する。一方、最新の親リビジョンの実行結果が失敗でない(最新の親リビジョンンの実行結果が成功である、または親リビジョンが実行結果データベース14に格納されていない)場合は、処理を終了する。図21の例では、リビジョン番号「6」の親リビジョンはリビジョン番号「1」、リビジョン番号「3」、およびリビジョン番号「5」であり、リビジョン番号「1」およびリビジョン番号「5」のときの実行結果は「×(失敗)」である。
ステップS505において、実行結果管理部12は、今回のリビジョンのリビジョン情報と、過去に失敗した親リビジョンのうちの最新の親リビジョンのリビジョン情報とを実行結果データベース14から抽出して開発者評価部16に出力する。図21の例では、実行結果管理部12は、リビジョン番号「6」(今回のリビジョン)のリビジョン情報と、リビジョン番号「5」(過去に失敗した最新の親リビジョン)のリビジョン情報とを実行結果データベース14から抽出して開発者評価部16に出力する。なお、図21に示すリビジョン番号「5」のリビジョン情報に含まれるソースコード改訂情報は、図22に示すソースコード改訂情報であるものとする。
開発者評価部16は、実行結果管理部12から入力された今回のリビジョンのリビジョン情報と、過去に失敗した最新の親リビジョンのリビジョン情報との差分をとり、過去に失敗した最新の親リビジョンにおける当該差分部分に対応するリビジョンのコミッターを特定し、特定したコミッターの開発者レベルを下げると判断する。例えば、今回のリビジョンであるリビジョン番号「6」のリビジョン情報と、過去に失敗した最新の親リビジョンであるリビジョン番号「5」のリビジョン情報との差分をとると、当該差分部分は今回のリビジョンにおいてはリビジョン番号「6」に対応するソースコードの行となる(例では、過去に失敗した最新の親リビジョンから今回のリビジョンの間に改訂されたリビジョンがリビジョン番号「6」のリビジョンだけであるのでリビジョン番号「6」だけが対象となるが、過去に失敗した最新の親リビジョンから改訂されたリビジョンが複数ある場合は各リビジョンに対応するソースコードの行を対象とする)。過去に失敗した最新の親リビジョンにおいて、この行はリビジョン番号「5」のリビジョンに対応する(例では、過去に失敗した最新の親リビジョンのリビジョン番号と差分部分に対応するリビジョンのリビジョン番号が同一であるが異なる場合もあり得る)。これにより、バグがリビジョン番号「5」のリビジョンにより埋め込まれていたと推定できるので、開発者評価部16は、リビジョン情報よりリビジョン番号「5」において改訂したコミッターを特定し、当該コミッターの開発者レベルを下げると判断する。
ステップS506において、開発者レベル管理部3は、開発者評価部16で特定されたコミッターに対応する開発者の開発者レベルを下げる。すなわち、開発者レベル管理部3は、開発者レベルデータベース9に格納されている開発者レベルの更新を行う。例えば、開発者レベルデータベース9に図5に示す開発者レベルが格納されている場合において、開発者レベル管理部3は、開発者評価部16で特定されたコミッター(ここでは「Tanaka」)の開発者レベルを「35」から「30」に下げる(図23参照)。なお、開発者レベルをどのように下げるのかについては、任意の方法で決定すればよい。
以上のことから、本実施の形態3によれば、過去に改訂を失敗したコミッターを特定し、当該コミッターの開発者レベルを下げているため、より適切な開発者レベルの評価を行うことができる。また、このように更新された開発者レベルに応じてソースコードの各行を区別して表示することによって、バグの原因を効率的に特定することが可能となる。また、既存のソースコードを改訂する場合において、ソースコードの各行の開発レベルを把握することができる。
なお、図19のステップS505とステップS506との間において、開発レベルを下げると判断されたコミッター名と、当該コミッターが改訂したソースコードとを表示し、コミッターの開発レベルを下げるか否かをユーザに確認するようにしてもよい。この場合、開発者の評価をより慎重に行うことができる。
<実施の形態4>
実施の形態3では、失敗したリビジョンにおけるリビジョン情報と、その後に成功したリビジョンにおけるリビジョン情報との差分部分にバグの原因があるものとして、当該差分部分を失敗したときに改訂したコミッターの開発者レベルを下げる場合について説明した。しかし、上記の差分部分は、バグの原因以外の部分も含まれることがあり、開発者レベルが適切に評価されているとはいえなかった。本発明の実施の形態4では、このような問題を解決したものであり、以下に詳細を説明する。なお、本実施の形態4によるソフトウェア管理装置の構成は、実施の形態3によるソフトウェア管理装置15(図18参照)の構成と同様である。以下では、実施の形態4によるソフトウェア管理装置は、図18に示すソフトウェア管理装置15であるものとして説明する。
図24は、本実施の形態4によるソフトウェア管理装置15の動作の一例を示すフローチャートである。
ステップS601において、リビジョン情報取得部2は、リビジョン情報データベース8から対象ファイルのリビジョン情報を取得するとともに、対象ファイルの実行結果を取得する。
ステップS602において、実行結果管理部12は、リビジョン情報取得部2から入力された実行結果とリビジョン情報とを対応付けて実行結果データベース14に格納するように管理する。
ステップS603において、実行結果管理部12は、今回(第2のタイミング)の対象ファイルの実行結果が失敗であるか否かの判断を行う。実行結果が失敗である場合は、ステップS604に移行する。一方、実行結果が失敗でない(すなわち、実行結果が成功である)場合は、ステップS606に移行する。
ステップS604において、実行結果管理部12は、過去(第1のタイミング)に実行結果が成功である親リビジョンのリビジョン情報が実行結果データベース14に格納されているか否かの判断を行う。実行結果が成功である親リビジョンのリビジョン情報が実行結果データベース14に格納されている場合は、ステップS605に移行する。一方、実行結果が成功である親リビジョンのリビジョン情報が実行結果データベース14に格納されていない場合は、処理を終了する。
ステップS605において、実行結果管理部12は、今回のリビジョンのリビジョン情報と、過去に成功した親リビジョンのうちの最新の親リビジョンのリビジョン情報とを実行結果データベース14から抽出して開発者評価部16に出力する。
開発者評価部16は、実行結果管理部12から入力された今回のリビジョンのリビジョン情報と、過去に失敗した最新の親リビジョンのリビジョン情報との差分をとり、当該差分部分に対応するリビジョンをバグ原因候補リビジョン(第1のリビジョン)として記憶する。なお、バグ原因候補リビジョンは、開発者評価部16に記憶してもよく、他の記憶部(図示せず)に記憶してもよい。
例えば、図25に示すソースコード改訂情報が今回(ここでは実行結果は失敗)のリビジョンのリビジョン情報に含まれており、図26に示すソースコード改訂情報が過去に成功した最新の親リビジョンのリビジョン情報に含まれている場合において、開発者評価部16は、各リビジョン情報の差分部分に対応するリビジョン番号「7」およびリビジョン番号「8」をバグ原因候補リビジョンとする。なお、図25はリビジョン番号「8」のときに実行されたソースコード改訂情報を示し、図26はリビジョン番号「6」のときに実行されたソースコード改訂情報を示している。
ステップS606において、開発者評価部16は、バグ原因候補リビジョンが記憶されているか否かの判断を行う。バグ原因候補リビジョンが記憶されている場合は、ステップS607に移行する。一方、バグ原因候補リビジョンが記憶されていない場合は、処理を終了する。
ステップS607において、開発者評価部16は、過去に失敗した最新の親リビジョンのリビジョン情報と、今回(第3のタイミング)のリビジョン(第2のリビジョン)のリビジョン情報との差分をとり、当該差分部分にバグ原因候補リビジョンに対応するソースコードの行が含まれているか否かの判断を行う。バグ原因候補リビジョンに対応するソースコードの行が含まれている場合は、ステップS608に移行する。一方、バグ原因候補リビジョンに対応するソースコードの行が含まれていない場合は、処理を終了する。
ステップS608において、開発者評価部16は、バグ原因候補リビジョンに記憶されているリビジョンの内、当該差分部分のソースコードに改訂を行ったリビジョンのコミッターの開発レベルを下げると判断し、バグ原因候補リビジョンに対応するソースコードの行を今回改訂したコミッターの開発者レベルを上げると判断する。
例えば、図27に示すソースコード改訂情報が今回(ここでは、実行結果は成功)のリビジョンのリビジョン情報に含まれており、図25に示すソースコード改訂情報におけるリビジョン番号「7」およびリビジョン番号「8」がバグ原因候補リビジョンであるものとする。このような場合において、各リビジョン情報の差分部分におけるリビジョン番号「9」に対応するソースコードをリビジョン番号「7」のときに改訂したコミッターの開発レベルを下げると判断し、リビジョン番号「9」のときに改訂したコミッターの開発レベルを上げると判断する。なお、図27は、リビジョン番号「10」のときに実行されたソースコード改訂情報を示している。
ステップS609において、開発者レベル管理部3は、開発者評価部16で特定されたコミッターに対応する開発者の開発者レベルを変更する。具体的には、開発者レベル管理部3は、実行結果が失敗となった原因となるソースコードを改訂したコミッター(図25の例では、リビジョン番号「7」のときに改訂したコミッター)の開発者レベルを下げる。また、開発者レベル管理部3は、実行結果が成功となった(過去の失敗を解消した)原因となるソースコードを改訂したコミッター(図27の例では、リビジョン番号「9」のときに改訂したコミッター)の開発者レベルを上げる。
ステップS610において、バグ原因候補リビジョンとして記憶していたすべてのリビジョンをバグ原因候補リビジョンから消去する。
以上のことから、本実施の形態4によれば、実施の形態3よりも精度良く、過去に改訂を失敗したコミッターを特定することができる。また、過去の失敗を解消したコミッターの評価を上げているため、より適切な開発者の評価を行うことができる。
なお、図24のステップS608とステップS609との間において、開発レベルを変更する判断されたコミッター名と、当該コミッターが改訂したソースコードとを表示し、コミッターの開発レベルを変更するか否かをユーザに確認するようにしてもよい。この場合、開発者の評価をより慎重に行うことができる。
<実施の形態5>
本発明の実施の形態5では、ソフトウェア開発における静的解析工程等の問題のある(バグの原因となる)ソースコードの行が特定できる場合においてエラーまたは警告が出たときに、当該エラーまたは警告を生じさせたコミッターの評価を下げることを特徴としている。以下では、静的解析工程に関してのみ記述するが、問題のあるソースコードの行が特定できるツールを用いる場合は静的解析工程に限らず本実施の形態の対象とすることが可能である。なお、本実施の形態5によるソフトウェア管理装置の構成は、実施の形態3によるソフトウェア管理装置15(図18参照)の構成と同様である。ただし、実行結果データベース14には必ずしも過去のリビジョンの実行結果を蓄積する必要はない。以下では、実施の形態5によるソフトウェア管理装置は、図18に示すソフトウェア管理装置15であるものとして説明する。
図28は、本実施の形態5によるソフトウェア管理装置15の動作の一例を示すフローチャートである。
ステップS701において、リビジョン情報取得部2は、リビジョン情報データベース8から対象ファイルのリビジョン情報を取得するとともに、対象ファイルの実行結果を取得する。ここで、本実施の形態5における対象ファイルの実行結果とは、ソフトウェア開発における静的解析工程での実行結果のことであり、ソースコードのエラーまたは警告が生じている箇所(行)を指摘するものである。静的解析工程では、ソースコードがコーディングルール等に従っているか(コーディングルール等に反していないか)否かを判断しており、ソースコードがコーディングルール等に従っていない場合は、エラーまたは警告を示す実行結果がリビジョン情報取得部2に入力される。また、実行結果およびリビジョン情報は、プラグインで対応付けられてリビジョン情報取得部2に入力される。
例えば、リビジョン情報取得部2は、実行結果と、図29に示すソースコード改訂情報を含むリビジョン情報とを取得する。なお、図29では、今回、リビジョン番号「6」のソースコードの行が改訂されたことを示している。すなわち、リビジョン情報取得部2は、図29に示すソースコード改訂情報を含む対象ファイルのリビジョン情報と、その実行結果を取得する。
ステップS702において、実行結果管理部12は、リビジョン情報取得部2から入力された実行結果とリビジョン情報とを対応付けて実行結果データベース14に格納するように管理する。例えば、図30に示すように、実行結果データベース14には、リビジョン情報取得部2が今回取得したリビジョン番号「6」のリビジョン情報と実行結果(図30では図示せず)が格納されている。
ステップS703において、実行結果管理部12は、今回の対象ファイルの実行結果においてエラーまたは警告が生じている箇所があるか否かの判断を行う。エラーまたは警告が生じている箇所がある場合は、ステップS704に移行する。一方、エラーまたは警告が生じている箇所がない場合は、処理を終了する。
ステップS704において、実行結果管理部12は、今回のリビジョンのリビジョン情報と、過去の最新の親リビジョンのリビジョン情報とを実行結果データベース14から抽出して開発者評価部16に出力する。図30の例では、実行結果管理部12は、リビジョン番号「6」(今回のリビジョン)のリビジョン情報と、リビジョン番号「5」のリビジョン情報とを実行結果データベース14から抽出して開発者評価部16に出力する。
開発者評価部16は、実行結果管理部12から入力された今回のリビジョンのリビジョン情報と、過去の最新の親リビジョンのリビジョン情報との差分をとり、当該差分部分が静的解析によるエラーまたは警告の該当箇所である場合は、当該差分部分の静的解析によるエラーまたは警告の該当箇所を改訂したコミッターの開発者レベルを下げると判断する。図29の例では、リビジョン番号「6」が今回のリビジョンのリビジョン情報と過去の最新の親リビジョンのリビジョン情報との差分部分に該当し、リビジョン番号「6」に対応するソースコードにおいて、「=」の前後にスペースを入れなければならないコーディングルールに従っておらず、静的解析の実行結果においてエラーまたは警告の該当箇所になっている。よって、リビジョン情報よりリビジョン番号「6」のリビジョンのコミッターを特定し、当該コミッターの開発者レベルを下げると判断する。
ステップS705において、開発者レベル管理部3は、開発者評価部16で特定されたコミッターに対応する開発者の開発者レベルを下げる。すなわち、開発者レベル管理部3は、開発者レベルデータベース9に格納されている開発者レベルの更新を行う。例えば、開発者レベルデータベース9に図5に示す開発者レベルが格納されている場合において、開発者レベル管理部3は、開発者評価部16で特定されたコミッター(ここでは「Sasaki」)の開発者レベルを「90」から「80」に下げる(図31参照)。
以上のことから、本実施の形態5によれば、静的解析においてエラーまたは警告が出るソースコードを記述したコミッターの開発レベルを下げているため、より適切な開発者レベルの評価を行うことができる。
なお、図28のステップS704とステップS705との間において、開発レベルを下げると判断されたコミッター名と、当該コミッターが改訂したソースコードとを表示し、コミッターの開発レベルを下げるか否かをユーザに確認するようにしてもよい。この場合、開発者の評価をより慎重に行うことができる。
<実施の形態6>
まず、本実施の形態6によるソフトウェア管理装置の構成について説明する。
図32は、本実施の形態6によるソフトウェア管理装置17の構成の一例を示すブロック図である。
図32に示すように、本実施の形態6によるソフトウェア管理装置17は、ファイルレベル評価部18を備えることを特徴としている。その他の構成および動作は、実施の形態1と同様であるため、ここでは詳細な説明を省略する。
ファイルレベル評価部18は、リビジョン情報取得部2から入力された対象ファイルのリビジョン情報と、開発者レベル管理部3から入力された対象ファイルに寄与する開発者レベルとに基づいて、ソースファイルおよびソフトウェアのうちの少なくとも1つのレベルを評価する。
次に、本実施の形態6によるソフトウェア管理装置17の動作について説明する。
図33は、ソフトウェア管理装置17の動作の一例を示すフローチャートである。なお、図33のステップS801およびステップS802は、図6のステップS101およびステップS102に対応しているため、ここでは説明を省略する。
ステップS803において、ファイルレベル評価部18は、対象ファイルのレベルを評価する。具体的には、ファイルレベル評価部18は、リビジョン情報取得部2から入力された対象ファイルのリビジョン情報と、開発者レベル管理部3から入力された対象ファイルに寄与する開発者レベルとに基づいて、例えば図34に示すような、開発者レベルごとにソースコードの行数を集計する。そして、ファイルレベル評価部18は、対象ファイルのソースコードの全ての行に対して、予め定められた開発者レベル以上のコミッターが改訂したソースコードの行数の割合を算出し、算出した割合をファイルのレベルとする。ここで、予め定められた開発者レベルとは、ユーザが任意に設定したものである。
ステップS804において、ファイルレベル評価部18は、対象ファイルを含む複数のファイルから一のソフトウェアが構成されているか否かの判断を行う。ソフトウェアが対象ファイルを含む複数のファイルから構成されている場合は、ステップS805に移行する。一方、ソフトウェアが対象ファイルを含む複数のファイルから構成されていない場合は、処理を終了する。
ステップS805において、ファイルレベル評価部18は、ソフトウェアを構成する複数のファイルのレベルに基づいて、当該ソフトウェアのレベルを算出する。ソフトウェアのレベルは、例えば、各ファイルのレベルの平均としてもよい。なお、ステップS805の処理を行う場合は、ステップS803においてソフトウェアを構成する各ファイルのレベルが算出されている必要がある。
以上のことから、本実施の形態6によれば、対象ファイルのレベル、または対象ファイルを含むソフトウェアのレベルを把握することができる。
以上で説明したソフトウェア管理装置は、サーバ、および携帯通信端末(例えば、携帯電話、スマートフォン、およびタブレット端末など)を適宜に組み合わせてシステムとして構築されるソフトウェア管理装置にも適用することができる。この場合、ソフトウェア管理装置の各機能あるいは各構成要素は、上記システムを構築する各機能に分散して配置される。
具体的には、一例としてソフトウェア管理装置の機能をサーバに配置することができる。例えば、図35に示すように、ユーザ側に図3に示す表示装置10と同様の機能を有する表示装置10を備え、サーバ19に図3に示すソフトウェア管理装置7と同様の機能を有する各構成要素を備えることによってソフトウェア管理システムを構築することができる。なお、サーバ19に備えられる各構成要素は、適宜にサーバ19および表示装置10に分散して配置するようにしてもよい。また、図12,18,32に示す各構成要素についても同様である。
また、他の一例として、ソフトウェア管理装置の機能をサーバおよび携帯通信端末に配置することができる。例えば、図36に示すように、ユーザ側に図3に示す表示装置10と同様の機能を有する表示装置10を備え、サーバ20に図3に示すリビジョン情報取得部2および開発者レベル管理部3を備え、携帯通信端末21に図3に示す制御部4を備えることによってソフトウェア管理システムを構築することができる。なお、サーバ20および携帯通信端末21に備えられる各構成要素は、適宜に表示装置10、サーバ20、および携帯通信端末21に分散して配置するようにしてもよい。また、図12,18,32に示す各構成要素についても同様である。
上記の構成とした場合であっても、上記の実施の形態と同様の効果が得られる。
また、上記の実施の形態における動作を実行するソフトウェア(ソフトウェア管理方法)を、例えばサーバや携帯通信端末に組み込んでもよい。
具体的には、一例として、上記のソフトウェア管理方法は、ソースファイル内のソースコードの各行に対応するリビジョンと、ソースコードを改訂した改訂者とを含むリビジョン情報を取得し、改訂者を含むソースコードの開発者のレベルを示す開発者レベルを管理し、取得したリビジョン情報に含まれる改訂者に対応する開発者の開発者レベルを抽出し、取得したリビジョン情報と、抽出された開発者レベルとに基づいて、ソースコードの各行を開発者レベルに応じて区別して表示するように制御する。
上記より、上記の実施の形態における動作を実行するソフトウェアをサーバや携帯通信端末に組み込んで動作させることによって、上記の実施の形態と同様の効果が得られる。
なお、図1,3,12,18,32,35,36において、リビジョン情報取得部2、開発者レベル管理部3、制御部4、実行結果管理部12、ソースコード抽出部13、開発者評価部16、およびファイルレベル評価部18の各々は、図2のプロセッサ5がメモリ6等に記憶されたソフトウェアプログラムに従って動作することにより実現された。しかし、これに代えて、リビジョン情報取得部2、開発者レベル管理部3、制御部4、実行結果管理部12、ソースコード抽出部13、開発者評価部16、およびファイルレベル評価部18の各々は、ハードウェア(例えば、電気信号に対して特定の演算あるいは処理を行うように構成された演算/処理回路等)として構成するようにしてもよい。また、上記の両者を混在させてもよい。
また、ソフトウェアのリビジョン情報取得部2、開発者レベル管理部3、制御部4、実行結果管理部12、ソースコード抽出部13、開発者評価部16、およびファイルレベル評価部18の各々と、ハードウェアのリビジョン情報取得部2、開発者レベル管理部3、制御部4、実行結果管理部12、ソースコード抽出部13、開発者評価部16、およびファイルレベル評価部18の各々とを組み合わせた概念として、「部」という語に代えて「処理回路」という語を用いることもできる。
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
本発明は詳細に説明されたが、上記した説明は、すべての態様において、例示であって、この発明がそれに限定されるものではない。例示されていない無数の変形例が、この発明の範囲から外れることなく想定され得るものと解される。