(57)【要約】【課題】  ソースコードやテストコードの変更や修正作業においてコードクローンに係る状況把握や問題検出を効率よく行う。【解決手段】  上記課題を解決するため、ソースコードやテストコード内のコードクローンを検出し、その分布状況を解析する。そして、解析結果から得られるコードクローン間の競合関係、担当チームとの関係、修正作業の優先度や順序などの情報を、コードクローンのチーム担当またがりの検出や修正作業順序の最適化などの目的に応じた形式で可視化する。【選択図】  図５
2015090596.tif 000002
【特許請求の範囲】
【請求項１】
開発管理対象ソフトウェアのソースコード、またはテストコードを入力して、コードクローンの所在を検出するコードクローン検出部と、
前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報を入力して、前記コードクローン検出部の検出結果とより、各構成要素に対するコードクローンの分布を解析し、コードクローンと、構成要素との対応関係を表わすコードクローン分布情報を出力するコードクローン分布解析部と、
前記コードクローン分布情報よりコードクローンを対象とする変更あるいは修正作業における作業依存関係情報を出力する作業依存関係情報生成部と、
を備えたことを特徴とするソフトウェア開発管理装置。
【請求項２】
請求項１に記載するソフトウェア開発管理装置において、
前記作業依存関係情報生成部に対応する部分が、
前記開発管理対象ソフトウェアの各構成要素に対する担当チームの情報を入力して、前記コードクローン分布情報とより、前記開発管理対象ソフトウェアの構成要素と担当チームの関係、および、各構成要素に対するコードクローンの分布状況を一つのマトリクスで表現した開発管理マトリクスを作成して出力するマトリクス生成部
であることを特徴とするソフトウェア開発管理装置。
【請求項３】
請求項１に記載するソフトウェア開発管理装置において、
前記作業依存関係情報生成部に対応する部分が、
前記コードクローン分布情報に従って、コードクローンのクローンIDを行、列のインデクスとするマトリクステーブルを作成するテーブル作成部と、
前記コードクローン分布情報に従って、それぞれのコードクローンの組に対して修正が競合するかどうかを判定し、結果を修正競合関係にあるコードクローンの組の配列として表わす修正競合情報を出力する修正競合判定部と、
前記修正競合情報に基づいて前記マトリクステーブルに、行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、開発管理マトリクスを作成して、出力するマトリクス要素入力部と、
を備えるマトリクス生成部
であることを特徴とするソフトウェア開発管理装置。
【請求項４】
請求項３に記載するソフトウェア開発管理装置において、
各コードクローンに対して優先度を決定可能とする修正優先度の決め方を定めた情報修正優先度ポリシーを入力して、前記コードクローン分布情報に含まれる各コードクローンの修正優先度を決定して、結果をコードクローンIDと修正優先度情報を対応付けたコードクローン修正優先度情報を出力するコードクローン修正優先度決定部を更に備え、
前記マトリクス生成部に、前記コードクローン修正優先度情報に従い、前記修正競合情報にあるコードクローンの組の修正優先度を比較し、その結果を修正優先度比較結果として出力する修正優先度比較部を更に備え、
前記マトリクス要素入力部が、前記修正競合情報と前記修正優先度比較結果に基づいて前記マトリクステーブルに、修正競合の関係のあるコードクローンの組のIDがaとbであり、aの方がbより優先度が高い場合、b行a列の要素に行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、またはaとbの優先度が同じ場合、b行a列の要素、およびa行b列の要素のいずれにも行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力して、開発管理マトリクスを作成して、出力することを特徴とするソフトウェア開発管理装置。
【請求項５】
CPUと記憶装置と入力装置と出力装置とを少なくとも有する情報処理装置として実現されるソフトウェア開発管理装置において、
開発管理対象ソフトウェアのソースコード、またはテストコード、前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報を入力するステップと、
前記開発管理対象ソフトウェアのソースコード、またはテストコードからコードクローンの所在を検出するステップと、
前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報と、及び前記コードクローンの検出結果から各構成要素に対するコードクローンの分布を解析し、コードクローンと、構成要素との対応関係を表わすコードクローン分布情報を出力するステップと、
前記コードクローン分布情報からコードクローンを対象とする変更あるいは修正作業における作業依存関係の情報を出力するステップとを有することを特徴とするソフトウェア開発管理方法。
【請求項６】
請求項５に記載するソフトウェア開発管理方法において、
更に、前記開発管理対象ソフトウェアの各構成要素に対する担当チームの情報を入力するステップを有し、
前記作業依存関係の情報を出力するステップを、
前記開発管理対象ソフトウェアの各構成要素に対する担当チームの情報と、前記コードクローン分布情報とから前記開発管理対象ソフトウェアの構成要素と担当チームの関係、および、各構成要素に対するコードクローンの分布状況を一つのマトリクスで表現した開発管理マトリクスを作成して出力するステップとを有するように替えたことを特徴とするソフトウェア開発管理方法。
【請求項７】
請求項５に記載するソフトウェア開発管理方法において、
前記作業依存関係の情報を出力するステップを、
前記コードクローン分布情報に従って、コードクローンのクローンIDを行、列のインデクスとするマトリクステーブルを作成するステップと、
前記コードクローン分布情報に従って、それぞれのコードクローンの組に対して修正が競合するかどうかを判定し、結果を修正競合関係にあるコードクローンの組の配列として表わす修正競合情報を出力するステップと、
前記修正競合情報に基づいて前記マトリクステーブルに、行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、開発管理マトリクスを作成して、出力するステップとを有するように替えたことを特徴とするソフトウェア開発管理方法。
【請求項８】
請求項７に記載するソフトウェア開発管理方法において、
各コードクローンに対して優先度を決定可能とする修正優先度の決め方を定めた情報修正優先度ポリシーを入力して、前記コードクローン分布情報に含まれる各コードクローンの修正優先度を決定して、結果をコードクローンと修正優先度情報を対応付けたコードクローン修正優先度情報を出力するステップと、
前記コードクローン修正優先度情報に従い、前記修正競合情報にあるコードクローンの組の修正優先度を比較し、その結果を修正優先度比較結果として出力するステップとを更に有し、
前記開発管理マトリクスを作成して、出力するステップを、前記修正競合情報と前記修正優先度比較結果に基づいて前記マトリクステーブルに、修正競合の関係のあるコードクローンの組のIDがaとbであり、aの方がbより優先度が高い場合、b行a列の要素に行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、またはaとbの優先度が同じ場合、b行a列の要素、およびa行b列の要素のいずれにも行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力して、開発管理マトリクスを作成して、出力するステップに替えたことを特徴とするソフトウェア開発管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発の変更、修正プロセスを最適化するソフトウェア開発管理装置およびその方法に関する。
【背景技術】
【０００２】
既存の開発成果物の流用や再利用は開発の省力化のために頻繁になされる活動である。そのような成果物は製品や機能等の差分を反映した変更を取り入れながら時間の経過にともない異なる担当者に引き継がれることにもなる。ソフトウェアの大規模化や開発の短期化にともないソフトウェア開発が多チーム化すると、チームや製品をまたがって類似のコード等が拡散しやすい。
【０００３】
このような状況では、相互に同一または類似のコードであるコードクローン（同一あるいは類似したコード片）等の所在を的確に把握すること、及び変更や修正は相互に一体となって作業を行うことが求められる。
たとえば、あるチームで不具合が発見されると、不具合が複数箇所に拡散しているすべてを検出し、修正し、テストすることが求められる。
【０００４】
また、製品に応じた改造を内在させた相互に類似のコピーが累積していくと、類似の複数の成果物として拡散したクローン等を１個にまとめる共通化作業が求められるようにもなってくる。テストやメンテナンスの作業品質や開発効率の向上が期待できるためである。
しかし、開発の大規模化等にともない検出されるクローン等も大量になると網羅的な把握にもとづく作業推進が困難になってくる。その結果として、品質や開発コストや開発期間に悪影響を及ぼすことが知られている。
【０００５】
かかる背景をふまえ、特許文献１では、ソースコードのコードクローンの精査すべき量の多さや精査時間の長さを、解決すべき課題として扱っている。
【０００６】
同様な事象は、ソースコードのクローンに限らず、たとえば、テストコードの変更作業においても発生しうる。すなわち、類似するテストコードの等価な変更をまとめて行うべきところ、テストコードの総数や規模あるいは類似関係が増えるほど、作業もれや作業の効率低下が増加しうる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−４８６３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
コードクローン解析により検出されるコードクローンに関する件数等、その情報は大量になることが少なくなく、このため多くのコードクローンの集合から共通化等の作業の候補として選び出すような精査において、作業品質と効率を向上させることは容易でない。
その上、コードクローンセット同士が、互いに疎とは限らない点に注意を要する。
例えば、
(1)複数の類似コードや複数のコードクローンセット間同士の所在に重なりがある場合。
(2)コードクローンのペアが所有者や担当チームが異なる複数モジュールにまたがり、
変更等の作業にも、複数の担当やチームの関与が必要となる場合。
などを挙げることができる。
【０００９】
結果として、コードクローンに係る変更作業や修正作業同士に依存関係が生じる場合がある。例えば、コードクローンセット１とコードクローンセット２には両方に属しているソースファイルがあり、片方を共通化するともう一方の観点で共通化できないような場合がこれに該当し、多くのコードクローンの集合から共通化の為の変更作業の候補を判定し選択することは容易ではない。
【００１０】
さらに、共通化等の変更作業において、その順序性が要求されることがある。たとえば、コード削減量を重視するために、規模が大きなコードクローンを優先的に共通化して、競合する規模の小さなコードクローンを無視したり共通化の優先度を下げる場合である。このような作業の順序性に関わる情報も含めて、網羅的にコードクローンの存在状況を検出し、多数検出されるコードクローン群のなかから、コードクローン間の競合や修正作業の順序性等の依存関係を的確に把握することは容易でなく、変更作業や修正作業の漏れや作業の手戻りを誘発しやすい。
【００１１】
クローン等の相互に類似するソフトウェア開発の成果物（ソースコードやテストコード等）の分布、さらには類似する組（セット）と別の類似する組との間の関係を考慮し、変更や修正作業の依存関係を把握することが作業品質を維持するうえで重要な課題となる。
【課題を解決するための手段】
【００１２】
上記課題を解決するために本発明では、ソフトウェア開発管理装置を、開発管理対象ソフトウェアのソースコード、またはテストコードを入力して、コードクローンの所在を検出するコードクローン検出部と、前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報を入力して、前記コードクローン検出部の検出結果とより、各構成要素に対するコードクローンの分布を解析し、コードクローンIDと、構成要素との対応関係を表わすコードクローン分布情報を出力するコードクローン分布解析部と、前記コードクローン分布情報よりコードクローンを対象とする変更あるいは修正作業における作業依存関係情報を出力する作業依存関係情報生成部とを備えた構成した。
【００１３】
また、上記課題を解決するために本発明では、前記ソフトウェア開発管理装置において、前記作業依存関係情報生成部に対応する部分が、前記開発管理対象ソフトウェアの各構成要素に対する担当チームの情報を入力して、前記コードクローン分布情報とより、前記開発管理対象ソフトウェアの構成要素と担当チームの関係、および、各構成要素に対するコードクローンの分布状況を一つのマトリクスで表現した開発管理マトリクスを作成して出力するマトリクス生成部であるように構成した。
【００１４】
また、上記課題を解決するために本発明では、前記ソフトウェア開発管理装置において、前記作業依存関係情報生成部に対応する部分が、前記コードクローン分布情報に従って、コードクローンのクローンIDを行、列のインデクスとするマトリクステーブルを作成するテーブル作成部と、前記コードクローン分布情報に従って、それぞれのコードクローンの組に対して修正が競合するかどうかを判定し、結果を修正競合関係にあるコードクローンの組の配列として表わす修正競合情報を出力する修正競合判定部と、前記修正競合情報に基づいて前記マトリクステーブルに、行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、開発管理マトリクスを作成して、出力するマトリクス要素入力部とを備えて構成した。
【００１５】
また、上記課題を解決するために本発明では、前記ソフトウェア開発管理装置を、各コードクローンに対して優先度を決定可能とする修正優先度の決め方を定めた情報修正優先度ポリシーを入力して、前記コードクローン分布情報に含まれる各コードクローンの修正優先度を決定して、結果をコードクローンIDと修正優先度情報を対応付けたコードクローン修正優先度情報を出力するコードクローン修正優先度決定部を更に備え、前記マトリクス生成部に、前記コードクローン修正優先度情報に従い、前記修正競合情報にあるコードクローンの組の修正優先度を比較し、その結果を修正優先度比較結果として出力する修正優先度比較部を更に備え、前記マトリクス要素入力部が、前記修正競合情報と前記修正優先度比較結果に基づいて前記マトリクステーブルに、修正競合の関係のあるコードクローンの組のIDがaとbであり、aの方がbより優先度が高い場合、b行a列の要素に行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、またはaとbの優先度が同じ場合、b行a列の要素、およびa行b列の要素のいずれにも行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力して、開発管理マトリクスを作成して、出力するように構成した。
【００１６】
また、上記課題を解決するために本発明では、CPUと記憶装置と入力装置と出力装置とを少なくとも有する情報処理装置として実現されるソフトウェア開発管理装置にて実行されるソフトウェア開発管理方法において、開発管理対象ソフトウェアのソースコード、またはテストコード、前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報、並びに前記開発管理対象ソフトウェアの各構成要素に対する担当チームの情報を入力するステップと、前記開発管理対象ソフトウェアのソースコード、またはテストコードからコードクローンの所在を検出するステップと、前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報と、及び前記コードクローンの検出結果から各構成要素に対するコードクローンの分布を解析し、コードクローンIDと、構成要素との対応関係を表わすコードクローン分布情報を出力するステップと、前記コードクローン分布情報からコードクローンを対象とする変更あるいは修正作業における作業依存関係の情報を出力するステップとを有するように構成した。
【発明の効果】
【００１７】
本発明によれば、チーム担当範囲をまたがる、修正漏れの危険性の高いコードクローンを容易に検出することが可能になる。これにより、コードクローンの修正漏れを防止することができる。また、コードクローン間の修正の競合や優先度の関係を容易に把握することが可能になる。これにより、コードクローン修正作業の順序を最適化し、手戻りを減らすことができる。
【００１８】
特にSPL(Software Product Line)による製品開発ではコア資産と非コア資産で管理階層の分離が必要であり、本発明の適用によりコア資産の構築や管理を効率化する効果が見込まれる。
【図面の簡単な説明】
【００１９】
【図１】本発明の第一の実施例のソフトウェア開発管理装置のハードウェアの全体構成図の例である。
【図２】本発明の第一の実施例のソフトウェア開発管理装置のソフトウェアの全体構成図の例である。
【図３】本発明の第一の実施例の開発管理対象ソフトウェアの例である。
【図４】本発明の第一の実施例の開発管理対象ソフトウェアのコードクローン分布状況の例である。
【図５】本発明の第一の実施例のソフトウェア開発管理プログラムの機能構成とデータフローの例である。
【図６】本発明の第一の実施例のソフトウェア開発管理プログラムの全体処理のフローチャートの例である。
【図７】本発明の第一の実施例のコードクローン分布解析処理のフローチャートの例である。
【図８】本発明の第一の実施例のコードクローン検出結果の例である。
【図９】本発明の第一の実施例の構成要素情報の例である。
【図１０】本発明の第一の実施例のコードクローン分布情報の例である。
【図１１】本発明の第一の実施例のマトリクス生成部の機能構成とデータフローの例である。
【図１２】本発明の第一の実施例の担当チーム情報の例である。
【図１３】本発明の第一の実施例のテーブルの例である。
【図１４】本発明の第一の実施例の開発管理マトリクスの例である。
【図１５】本発明の第一の実施例のマトリクス生成処理のフローチャートの例である。
【図１６】本発明の第二の実施例の開発管理ソフトウェアの例である。
【図１７】本発明の第二の実施例のソフトウェア開発管理プログラムの機能構成とデータフローの例である。
【図１８】本発明の第二の実施例のマトリクス生成部の機能構成とデータフローの例である。
【図１９】本発明の第二の実施例のマトリクス生成処理のフローチャートの例である。
【図２０】本発明の第二の実施例のテーブルの例である。
【図２１】本発明の第二の実施例の修正競合情報の例である。
【図２２】本発明の第二の実施例の開発管理マトリクスの例である。
【図２３】本発明の第三の実施例のソフトウェア開発管理装置のソフトウェアの全体構成図の例である。
【図２４】本発明の第三の実施例の開発管理マトリクスの例である。
【図２５】本発明の第三の実施例のソフトウェア開発管理プログラムの機能構成とデータフローの例である。
【図２６】本発明の第三の実施例のソフトウェア開発管理プログラムの全体処理のフローチャートの例である。
【図２７】本発明の第三の実施例のコードクローン修正優先度情報の例である。
【図２８】本発明の第三の実施例のマトリクス生成部の機能構成とデータフローの例である。
【図２９】本発明の第三の実施例のマトリクス生成処理のフローチャートの例である。
【図３０】本発明の第三の実施例の開発管理マトリクスの例である。
【図３１】本発明の第三の実施例の開発管理マトリクスの例である。
【発明を実施するための形態】
【００２０】
以下、本発明に係る各実施形態を、図を用いて説明する。開発管理対象としてソフトウェア開発における類似する成果物間の関係を、「コードクローン」で代表させて示すものとするが、「コードクローン」でないとしても「開発の成果物の相互に類似する複数の部分」が管理対象であるならば、本発明の趣旨を逸脱しない。したがって、以下の実施例では、「コードクローン」は「開発の成果物の相互に類似する複数の部分」等で読み替え可能である。
さらにコードは、ソースコード以外にもテストコード等であってもよい。
【実施例１】
【００２１】
本実施例では、作業依存関係のひとつであるコードクローンのチーム担当範囲またがりを検出するソフトウェア開発管理装置の例を説明する。
図１を用いて本発明の第一実施形態に係るソフトウェア開発管理装置のハードウェア構成について説明する。
図１は、本発明の第一の実施形態に係るソフトウェア開発管理装置のハードウェア構成を示すブロック図である。
【００２２】
図１に示すようにソフトウェア開発管理装置１１は、例えば、パーソナルコンピュータやサーバや専用ハードウェアなどであり、ＣＰＵ（Central Processing Unit）１、ＲＯＭ（Read Only Memory）２、ＲＡＭ（Random Access Memory）３、ＨＤＤ（Hard Disk Drive）５、入力装置９、表示装置１０、ＮＩＣ（Network Interface Card）８、ＣＤＲＯＭドライブ６が、ＢＵＳ４により接続された形態である。
【００２３】
ＣＰＵ１は、コンピュータの主要な部分であって、演算処理および各部を制御する中心であり、ＨＤＤ５に格納されたソフトウェア開発管理プログラム２１を、ＲＡＭ３にロードして実行する。
ＲＯＭ２は、起動プログラムであるＢＩＯＳなどを記憶する読み出し専用の半導体記憶装置である。
ＲＡＭ３は、ＯＳ（Operating System）やソフトウェア開発管理プログラム２１などの各種プログラムやワークデータ等を記憶する書き換え可能な半導体記憶装置であり、ソフトウェア開発管理装置１１の主記憶装置になる。
ＨＤＤ５は、大容量の記憶装置であり、ＯＳやソフトウェア開発管理プログラムなどの各種プログラム、プログラムに使用されるデータなどを格納する補助記憶装置である。
ＣＤＲＯＭドライブ６は、ＣＤＲＯＭ（Compact Disc Read Only Memory）７に記憶されたプログラムやデータを読み取る装置である。
ＮＩＣ８は、ネットワークとの通信を制御する装置である。
入力装置９は、各種操作指示をおこなうキーボードやマウスなどのポインティングデバイスである。
表示装置１０は、各種情報を表示するＬＣＤ（Liquid Crystal Display）などの表示のための装置である。
【００２４】
なお、各種プログラムやデータ等を格納するのは、ＨＤＤ５に限らずＳＳＤなどの半導体記憶装置なども用いることができ、記憶媒体としてはＣＤＲＯＭに限らずＤＶＤやその他の磁気、光学、半導体などを用いた媒体を用いることができる。また、ＮＩＣ８を介してネットワークからプログラムやデータをダウンロードしてＨＤＤ５やＲＡＭ３に記憶してもよい。なお、プログラムやデータは、特定のＯＳ上で動作するか、ＯＳを必要としないか、特定のＯＳやアプリケーション群を構成するファイルの一部であるかは問わない。
本実施形態のソフトウェア開発管理装置は、図１に示したハードウェア構成で、ＨＤＤ５に格納されたソフトウェア開発管理プログラムが、ＲＡＭ３にロードされて、ＣＰＵ１がプログラムを解釈実行することにより、その機能が実行される。
【００２５】
図２を用いて本発明の一実施形態に係るソフトウェア開発管理装置のソフトウェア構成について説明する。
図２に示すようにソフトウェア開発管理装置のソフトウェア部分は、アプリケーションソフトウェアとしてソフトウェア開発管理プログラム２１と、ユーティリティ・ライブラリプログラム２５、ＯＳ２６よりなる。
ＯＳ２６は、ハードウェアとソフトウェアの仲立ちとなり、ユーザに対してのインタフェースを提供する基本プログラムであり、ユーティリティ・ライブラリプログラム２５は、ＯＳ２６の機能をアプリケーションソフトウェアに隠蔽し、アプリケーションソフトウェアに様々な機能を提供するプログラムである。
ソフトウェア開発管理プログラム２１は、ソフトウェア開発管理装置１１のアプリケーションソフトウェアであり、コードクローン検出部２２、コードクローン分布解析部２３、マトリクス生成部２４の３つのモジュールよりなる。これらの各モジュールの処理については、後に詳説する。
【００２６】
先ず、図３を用いて本実施形態のソフトウェア開発管理装置が開発管理対象とするソフトウェアについて説明する。
本実施形態のソフトウェア開発管理装置が開発管理対象とするソフトウェア３１は、複数の構成要素で構成されているものとし、各構成要素に対して、開発や修正などを担当するチームが決められているとする。
以下、構成要素の単位はモジュールとして説明するが、モジュールに限らず、ファイルや関数を単位としてもよい。
【００２７】
また、ソフトウェア開発における類似する成果物としてコードクローンを代表して示すものとするが、コードクローンとして検出されない場合でも、類似性を検出できるならば、コードクローン検出部２２、コードクローン分布解析部２３は、類似成果物検出部２２、類似成果物分布解析部２３等と、「コードクローン」を「開発の成果物の相互に類似する複数の部分」等と解釈して読み替えて、管理対象としてもよい。
【００２８】
図３は、開発管理対象ソフトウェア３１の一例を示した図である。図３の例では、対象ソフトウェアはモジュールm1、 m2、 … 、 m5で構成されており、モジュールm1、 m2をチームAが担当し、モジュールm3、 m4、 m5をチームBが担当すると指定されている。
また、開発管理対象ソフトウェア３１は、複数のコードクローンを含んでいることを想定する。
【００２９】
図４は開発管理対象ソフトウェア３１の中にコードクローンが含まれている様子を示した図である。コードクローンの識別子であるクローンIDが1と2のコードクローンが存在しており、クローンID1のコードクローンはモジュールm1、 m2、 m3に含まれ、クローンID2のコードクローンはモジュールm3、 m5に含まれている。クローンID2のコードクローンはチームBの担当範囲内のみに存在しているが、クローンID1のコードクローンはチームの担当範囲をまたがって存在している。
【００３０】
次に、図５ないし図６を用いて本発明の第一の実施形態に係るソフトウェア開発管理プログラムの機能と、その処理について説明する。
図５は、本発明の第一の実施形態に係るソフトウェア開発管理プログラム全体の機能構成およびデータフローを示した図である。
【００３１】
図５に示すようにソフトウェア開発管理プログラム２１は、開発管理対象ソフトウェアのソースコード５１に対して、公知の技術によるコードクローン検出ツールを実行することによりソースコード内のコードクローンを検出するモジュールであるコードクローン検出部２２と、コードクローン検出の結果５２と開発管理対象ソフトウェアの構成要素情報５３を元に解析を行い、各ソフトウェア構成要素に対するコードクローンの分布情報５４を得るモジュールであるコードクローン分布解析部２３と、コードクローン分布情報５４と構成要素情報５３と構成要素の担当チーム情報５５を参照し、ソフトウェアの開発を管理するための開発管理マトリクス５６を生成するモジュールであるマトリクス生成部２４を備える。
なお、開発管理マトリクス５６は実施例１における作業依存関係情報の一例に相当し、マトリクス生成部２４は請求項１における作業依存関係情報生成部の一例に相当する。
コードクローン検出部２２が実行するコードクローン検出ツールとしては、例えば、一般的に使用されているものとしては、“ＣＣＦｉｎｄｅｒＸ”があるが、その他のコードクローン検出ツールでもよい。
なお、ソフトウェア開発管理プログラム２１の中では、当該処理の一時的なデータとして、コードクローン検出部２２がコードクローン検出結果５２を生成し、コードクローン分布解析部２３がコードクローン分布情報５４を生成し、ＲＡＭ３およびＨＤＤ５に一時的に格納されるが、ソフトウェア開発管理プログラム２１の永続的な構成要素ではない。
【００３２】
ソフトウェア開発管理プログラム２１への入力として、ソースコード５１と構成要素情報５３と担当チーム情報５５がある。これらの入力はＮＩＣ８や入力装置９やＣＤＲＯＭ７やＨＤＤ５などからＲＡＭ３にロードされるデータである。
構成要素情報５３は開発管理対象ソフトウェアの全てのソースコードファイル名、開発管理対象ソフトウェアの全ての構成要素の名前、および、それらファイルと構成要素との対応関係の情報を表すデータである。
担当チーム情報５５は開発管理対象ソフトウェアの各構成要素に対する担当チームの情報を表すデータである。
【００３３】
ソフトウェア開発管理プログラム２１の出力として、開発管理マトリクス５６がある。開発管理マトリクス５６は、開発管理対象ソフトウェアの構成要素と担当チームの関係、および、各構成要素に対するコードクローンの分布状況を一つのマトリクスで表現したものである。
【００３４】
図６は、ソフトウェア開発管理プログラム２１の全体の処理手順を示したフローチャートである。
先ず、ステップＳ６１において、ソースコード５１と構成要素情報５３と担当チーム情報５５をソフトウェア開発管理プログラム２１に入力する。
次に、ステップＳ６２において、コードクローン検出部２２が、コードクローン検出ツールを実行し、ステップＳ６１で入力されたソースコード５１のコードクローンを検出し、コードクローン検出結果５２を出力する。
【００３５】
次に、ステップＳ６３において、コードクローン分布解析部２３が、ステップＳ６２で出力されたコードクローン検出結果とステップＳ６１で入力された構成要素情報５３を元に各構成要素に対するコードクローンの分布を解析し、コードクローン分布情報５４を出力する。
次に、ステップＳ６４において、マトリクス生成部２４が、ステップＳ６１で入力された構成要素情報５３と担当チーム情報５５を元にテーブルを作成し、ステップＳ６３で出力されたコードクローン分布情報５４を元にテーブルに要素を入力することで開発管理マトリクス５６を生成する。
最後に、ステップＳ６５において、表示装置１０にステップＳ６４で生成した開発管理マトリクス５６を表示し、一連の処理を終了する。
【００３６】
図８、９、１０および図７のフローチャートを用いて、コードクローン分布解析部２３およびステップＳ６３のコードクローン分布解析処理の詳細について説明する。コードクローン分布解析部２３への入力として、コードクローン検出結果５２と構成要素情報５３がある。
【００３７】
図４の開発管理対象ソフトウェア３１のコードクローン分布状況に対応するコードクローン検出結果５２の一例を図８に示す。図８の例においては、コードクローンの識別子であるクローンIDを入力する列８１とそのコードクローンが検出されたファイル名を入力する列８２を備えるテーブルにより、コードクローン検出結果５２を表現している。
例えば行８３はクローンIDに1が、ファイル名にC:\aaa\file1.cが入力されている。これは、ファイルC:\aaa\file1.cでクローンIDが1のコードクローンが検出されたということを示している。
【００３８】
構成要素情報５３の一例を図９に示す。図９の例においては、ソースコードのファイル名を入力する列９１とそのファイルが対応するモジュール名を入力する列９２を備えるテーブルにより、構成要素情報を表現している。
例えば行９３はファイル名にC:\aaa\file1.cが、モジュール名にm1が入力されている。これは、ファイルC:\aaa\file1.cがモジュールm1に対応していることを表している。
これらの入力情報を解析することで、検出されたコードクローン全てに対してそのコードクローンを含んでいる構成要素を特定し、これをコードクローン分布情報５４として出力する。コードクローン分布情報５４の一例を図１０に示す。
【００３９】
図１０の例においては、コードクローンの識別子であるクローンIDを入力する列１０１とそのコードクローンを含んでいるモジュール名を入力する列１０２を備えるテーブルにより、コードクローン分布情報を表現している。
例えば行１０３はクローンIDに1、モジュール名にm1が入力されている。これは、クローンIDが1であるコードクローンをモジュールm1が含んでいることを表している。
なお、図８、９、１０で示したコードクローン検出結果５２、構成要素情報５３、コードクローン分布情報５４の例においては、データ構造としてテーブルを用いているが、同等の情報が表現可能であればグラフやツリーなど他のデータ構造を用いてもよい。
【００４０】
コードクローン分布情報５４を得る手順は様々に考えられるが、図８、図９で示した入力に対しては例えば図７のフローチャートに示す次のような手順がある。
先ず、ステップＳ７１において、N=1とする。
次に、ステップＳ７２において、コードクローン検出結果５２のN行目のデータレコードを取り出し、クローンIDの列の値を変数CID、ファイル名の列の値を変数FILEに代入する。
次に、ステップＳ７３において、構成要素情報５３のテーブルから、ファイル名の列が変数FILEの値と一致する行を検索し、見つかった行のモジュール名の列の値を変数MODULEに代入する。
【００４１】
次に、ステップＳ７４において、｛変数CID、変数MODULE｝の組合せのデータが、コードクローン分布情報５４の既登録のデータレコードと一致するものがあるか否かを検索する。一致するものがある場合はステップＳ７６へ移行し、一致するものが無い場合はステップＳ７５へ移行する。
次に、ステップＳ７５において、コードクローン分布情報５４のテーブルの新しい行に、クローンIDの列に変数CIDの値、モジュール名の列に変数MODULEの値を記録する。
次に、ステップＳ７６において、N行目がコードクローン検出結果５２の最後の行であるならば、コードクローン分布解析処理を終了する。そうでないならば、ステップＳ７７においてN=N+1として、ステップＳ７２に戻る。
【００４２】
図１１を用いてマトリクス生成部２４の構成、およびデータフローについて説明する。
マトリクス生成部２４は、図１１に示されるように、テーブル作成部１１１と、マトリクス要素入力部１１３よりなる。
テーブル作成部１１１は、担当チーム情報５５(後述)を元に、開発管理対象ソフトウェア３１の構成要素を担当チーム別にブロックをなすようにソートしたものを列インデクス、ソースコード５１から検出されたコードクローンのクローンIDを行インデクスとするテーブル１１２を作成するモジュールである。
【００４３】
マトリクス要素入力部１１３は、テーブル作成部１１１が作成したテーブル１１２にコードクローン分布情報を元にデータを入力し、開発管理マトリクスを作成するモジュールである。マトリクス生成部２４への入力として、担当チーム情報５５とコードクローン分布情報５４がある。
【００４４】
担当チーム情報５５の一例を図１２に示す。図１２の例においては、モジュール名を入力する列１２１とそのモジュールを担当するチーム名を入力する列１２２を備えるテーブルにより、担当チーム情報５５を表現している。例えば行１２３はモジュール名にm1、チーム名にチームAが入力されている。これは、モジュールm1をチームAが担当していることを表している。
【００４５】
テーブル１１２はマトリクス生成処理の一時的なデータであり、ＲＡＭ３およびＨＤＤ５に一時的に格納されるが、マトリクス生成部２４の永続的な構成要素ではない。図１３は図１２の担当チーム情報５５と図１０のコードクローン分布情報５４を元に作られたテーブル１１２の一例である。
図１３に示すように、テーブル１１２の列インデクスは開発管理対象ソフトウェア３１の構成要素となり、インデクスの順番は担当チーム別にブロックをなすようにソートされる。
【００４６】
図１３の例においては、開発管理対象ソフトウェア３１の構成要素であるモジュールm1、 m2、…、 m5が列インデクスとなっており、同じチームが担当であるm1、m2とm3、m4、m5がそれぞれブロックをなしている。また、テーブル１１２の行インデクスはソースコード５１から検出されたコードクローンのクローンIDとなる。図１３の例においては、クローンID：1、2が行インデクスとなっている。
【００４７】
マトリクス生成部２４の出力として、開発管理マトリクス５６がある。本実施例における開発管理マトリクス５６は、開発管理対象ソフトウェア３１のコードクローンの分布状況を表したものである。
図１４は図１３のテーブル１１２に図１０のコードクローン分布情報５４を元にデータを入力して得られる開発管理マトリクス５６である。図１４に示すように、各要素には、その要素の列インデクスに対応する構成要素に、行インデクスのクローンIDに対応するコードクローンが含まれる場合、×が入力される。例えば、1行m1列要素の値は×であり、これは、モジュールm1がクローンID1のコードクローンを含んでいることを表している。なお、本実施例ではマトリクスの要素は空欄、×の2値を用いるが、その他、整数値などを用いてもよい。
【００４８】
図１５のフローチャートを用いて図６ステップＳ６４のマトリクス生成処理について説明する。
先ず、ステップＳ１５１において、マトリクス生成部２４への入力である担当チーム情報５５とコードクローン分布情報５４が入力される。
次に、ステップＳ１５２において、入力データを元に、テーブル作成部１１１が、開発管理対象ソフトウェア３１の構成要素を担当チーム別にブロックをなすようにソートしたものを列インデクス、ソースコード５１から検出されたコードクローンのクローンIDを行インデクスとするテーブル１１２を作成する。
次に、ステップＳ１５３において、マトリクス要素入力部１１３がコードクローン分布情報５４を参照し、各行のデータに対して、テーブル１１２の対応する箇所に×を入力する。
コードクローン分布情報５４の全ての行に対して入力が完了したら、テーブル１１２を開発管理マトリクス５６として出力し、処理を終了する。
【００４９】
本実施例から得られるソフトウェア開発管理プログラム２１により出力された開発管理マトリクス５６を利用することにより、チーム担当範囲をまたがるコードクローンの検出を容易に行うことができる。
例えば、以下の方法を実施すればよい。
１．開発管理マトリクス５６の各行に対して、×が入力されている担当チームブロックの数を数え上げる。
２．×が入力されている担当チームブロックの数が二つ以上である行のクローンIDに対応するコードクローンを、チーム担当範囲をまたがるコードクローンであると判定する。
【００５０】
例えば、図１４の開発管理マトリクス５６においては、1行の×が入力されている担当チームブロックの数を数えると2であり、2行の×が入力されている担当チームブロックの数を数えると1である。これより、コードクローン2は一つのチーム担当範囲に収まっている、コードクローン1はチーム担当範囲をまたがってしまっていることがわかる。
【実施例２】
【００５１】
本実施例では、作業依存関係のひとつであるコードクローンの修正作業間の順序性を可視化し、最適化するソフトウェア開発管理装置の例を説明する。実施例２におけるソフトウェア開発管理プログラムを実行するソフトウェア開発管理装置１１のハードウェア構成とソフトウェア構成の一例を示す図は、図１および図２に示した実施例１におけるハードウェア構成とソフトウェア構成の図と同様である。以後、実施例１と同一の機能を有する部分および処理手順については説明を省略する。
【００５２】
先ず、図１６を用いて本実施形態のソフトウェア開発管理装置が開発管理対象とするソフトウェアについて説明する。
本実施形態における開発管理対象ソフトウェアは、複数の構成要素で構成されているものとする。以下、構成要素の単位はモジュールとして説明するが、モジュールに限らず、ファイルや関数を単位としてもよい。また、本実施形態における開発管理対象ソフトウェアは、複数のコードクローンを含んでいることを想定する。
図１６の例では、対象ソフトウェアはモジュールm1、 m2、…、 m5で構成されている。また、クローンIDが1、 2、 3、 4、 5のコードクローンが存在しており、各モジュール内に偏在している。例えば、図１６の例では、モジュールm1内にはクローンIDが1、2の二つのコードクローンが存在している。
【００５３】
図１７は本実施例におけるソフトウェア開発管理プログラム２１の一例を示すブロック図である。実施例１のソフトウェア開発管理プログラム２１の図５との違いは、担当チーム情報が入力されない点であり、他の構成要素は同等である。また、本実施例のソフトウェア開発管理プログラム２１の処理手順を示すフローチャートは実施例１の図６のフローチャートと同様である。
【００５４】
本実施例では、マトリクス生成部２４の機能と、ステップＳ６４のマトリクス生成処理の内容が実施例１と異なる。
図１８と図１９を用いて、ステップＳ６４のマトリクス生成処理の詳細について説明する。図１８はマトリクス生成部２４の機能構成とデータフローを示す図である。図１８に示されるように、マトリクス生成部２４は、テーブル作成部１１１と、修正競合判定部１８１と、マトリクス要素入力部１１３よりなる。
【００５５】
テーブル作成部１１１は、コードクローン分布情報５４を元に、コードクローンのクローンIDを行、列のインデクスとするテーブル１１２を作成するモジュールである。
修正競合判定部１８１は、コードクローン分布情報５４を元に、それぞれのコードクローンの組に対して修正が競合するかどうか(修正が競合するとは、一方のコードクローンに対して修正を行なったとき、もう一方のコードクローンの修正に影響を及ぼして、もう一方のコードクローンの修正が困難、または不可となること。)を判定し、結果を修正競合情報１８２として出力するモジュールである。
【００５６】
マトリクス要素入力部１１３は、修正競合情報１８２に基づいてテーブル作成部１１１が作成したテーブル１１２にデータを入力し、開発管理マトリクス５６を作成するモジュールである。
マトリクス生成部２４への入力として、コードクローン分布情報５４がある。コードクローン分布情報５４の内容は実施例１で説明したものと同様である。
マトリクス生成処理の一時的なデータとして、テーブル１１２および修正競合情報１８２がある。これらはＲＡＭ３およびＨＤＤ５に一時的に格納されるが、マトリクス生成部２４の永続的な構成要素ではない。
【００５７】
図２０は図１６の開発管理対象ソフトウェア３１に対応するテーブル１１２の一例である。図２０に示すように、本実施例のテーブル１１２の行インデクスおよび列インデクスは共にコードクローン検出処理で検出されたすべてのコードクローンのクローンIDとなる。図２０の例においては、クローンIDが1、2、3、4、5が行と列のインデクスとなっている。
【００５８】
修正競合情報１８２は修正が競合関係にあるコードクローンの組の情報である。
修正競合情報１８２の例を図２１に示す。図２１の例においては、修正競合関係にあるコードクローンの組の配列により修正競合情報１８２を表している。例えば、項２１１はコードクローンの組(1、2)が入力されている。これは、クローンIDが1と2であるコードクローンが修正の競合関係にあることを表している。
【００５９】
マトリクス生成部２４の出力として、開発管理マトリクス５６がある。本実施例における開発管理マトリクス５６はコードクローン間の修正の競合関係を可視化したものであり、行と列のインデクスに対応するコードクローン間に修正の競合関係がある場合、その要素に×が入力される。
図２２は図２０のテーブル１１２に図２１の修正競合情報１８２を元にデータを入力して得られる開発管理マトリクス５６である。図２２においては、例えば、1行2列要素に×が入力されている。これはクローンIDが1と2のコードクローン間に、修正競合関係があることを表している。なお、本実施例ではマトリクスの要素は空欄、×の2値を用いるが、その他、整数値などを用いてもよい。
【００６０】
図１９のフローチャートを用いて図６ステップＳ６４のマトリクス生成処理について説明する。
先ず、ステップＳ１５１において、マトリクス生成部への入力であるコードクローン分布情報５４が入力される。
次に、ステップＳ１５２において、テーブル作成部１１１が、コードクローン分布情報５４を元に、コードクローンのクローンIDを行、列のインデクスとするテーブル１１２を作成する。
【００６１】
次に、ステップＳ１９１において、修正競合判定部１８１が、コードクローン分布情報５４を元に、それぞれのコードクローンの組に対して修正が競合するかどうかを判定し、結果を修正競合情報１８２として出力する。ただし、修正の競合判定は、コードクローンの組に対して、その両方を含む構成要素が存在するとき「競合する」、そうでないとき「競合しない」と判定する。
【００６２】
例えば、図１０に示したコードクローン分布情報５４においては、行１０４はクローンIDが1モジュール名がm3となっており、行１０５はクローンIDが2モジュール名がm3となっている。これはm3がクローンIDが1と2のコードクローンを両方含んでいることを表している。従ってこの場合、コードクローンの組(1, 2)は「競合する」となる。
【００６３】
次に、ステップＳ１５３において、マトリクス要素入力部１１３が、修正競合情報１８２を参照し、テーブル１１２の対応する箇所に×を入力する。修正競合情報１８２の全てのデータに対して入力が完了したら、テーブル１１２を開発管理マトリクス５６として出力し、処理を終了する。
【００６４】
本実施例のソフトウェア開発管理プログラム２１により出力された開発管理マトリクス５６を用いて、コードクローン修正作業順序を最適化する方法について説明する。
開発管理マトリクス５６のインデクスの順序がコードクローンの修正順序を表現していると考える。
開発管理マトリクス５６のb行a列に×が入力されているとき、コードクローンaとbの間には修正競合関係がある。従って、片方を修正後にもう片方を修正した場合、修正済みの方に影響が生じて再修正が必要になり、手戻りを引き起こす可能性がある。
【００６５】
手戻りとは、先に行なった片方の修正処理を、後で行なうもう片方の修正後に、先の修正処理に戻って、再修正処理が必要となることである。この手戻りは、×がマトリクスの左上から右下への対角線に対して近いほど小さく、遠いほど大きい。
【００６６】
例えば図２２の開発管理マトリクス５６においては、1行2列の×はクローン2の修正からクローン1の修正への手戻りの可能性を表しており、対角線からの距離が近い。また、1行5列の×はクローン5の修正からクローン1の修正への手戻りの可能性を表しており、対角線からの距離が遠い。ここで、インデクスの順番は1、2、3、4、5となっているため、クローン修正作業の順番は1、2、3、4、5であるから、2から1への手戻りは1ステップ前に戻ることであるから小さく、5から1への手戻りは4ステップ前に戻ることになるから大きいことになる。よって、対角線と×の間の距離が手戻りの大きさに対応していることが分かる。
【００６７】
以上の事から、開発管理マトリクス５６のインデクスの順序を、×がマトリクスの対角線にできるだけ近くなるように並べ替えることで、手戻りの小さなコードクローン修正順序を得ることができる。
【００６８】
開発管理マトリクス５６のインデクスの順序を×がマトリクスの対角線にできるだけ近くなるように並べ替える処理は、公知の技術を使用できる。マトリックス表現に基づく工程・組織設計のための手法となっているDSM(Design Structure Matrix)の縦軸と横軸に並べられたタスクの順序を、後戻り作業が発生するリスクを減らすために入れ替えて、タスクの順序を変更する手法が適用できる。すなわち、開発管理マトリクス５６のインデクスの順序を×がマトリクスの対角線にできるだけ近くなるように並べ替えるアルゴリズムには，パス探索による方法，隣接行列のべき乗による方法，グラフ理論による方法など，様々な方法がある。それらのうちいずれかの方法を採用して、本実施例では、図に示していない競合作業指針導出部が実施する。
【００６９】
図２４は図２２の開発管理マトリクス５６のインデクスの順序を、×がマトリクスの対角線にできるだけ近くなるように並べ替えた一例である。クローン修正作業の順番が5、1、2、3、4となり、手戻りの可能性があるステップ数が最大2ステップに減っている。
このように、本実施例のソフトウェア開発管理プログラム２１により出力された開発管理マトリクス５６を用いて、コードクローン修正作業順序を最適化することができる。
【実施例３】
【００７０】
本実施例では、与えられた修正優先度ポリシーの下でコードクローンの修正作業順序を最適化するソフトウェア開発管理装置の例を説明する。
実施例３におけるソフトウェア開発管理プログラムを実行するソフトウェア開発管理装置１１のハードウェア構成の一例を示すブロック図は、図１に示す実施例１、２におけるハードウェア構成のブロック図と同様である。
【００７１】
図２３は、本発明の第三の実施形態に係るソフトウェア開発管理装置のソフトウェア構成を示す図である。実施例１、２における図２のソフトウェア構成との違いは、ソフトウェア開発管理プログラム２１を構成するモジュールとしてコードクローン修正優先度決定部がある点であり、その他の構成は同様である。
以後、実施例１あるいは実施例２と同一の機能を有する部分および処理手順については説明を省略する。
【００７２】
先ず、図１６を用いて本実施形態のソフトウェア開発管理装置が開発管理対象とするソフトウェアについて説明する。本実施形態における開発管理対象ソフトウェアは、実施例２において図１６で示したものと同様である。さらに、本実施例においてはコードクローンの修正に優先度があることを想定する。
【００７３】
修正の優先度の決め方は様々に考えられる。例えば、コードクローンの規模の大きさ、修正の容易さ、チーム担当範囲をまたぐか否か、などがある。
規模の大きいコードクローンほど、修正によって得られる設計の改善効果が大きいため、修正の優先度は高いと考えられる。また、修正が容易なコードクローンほど、少ない工数で修正を完了できるため、修正の優先度は高いと考えられる。また、チーム担当範囲をまたぐようなクローンは保守困難化の原因となるため、修正の優先度は高いと考えられる。このような、修正優先度の決め方の指針を、修正優先度ポリシーと呼ぶこととする。
【００７４】
図２５は本実施例のソフトウェア開発管理プログラム２１の一例を示すブロック図である。実施例２の図１７との違いは、修正優先度ポリシー２５１が入力される点と、コードクローン修正優先度決定部２５２を備える点であり、他の構成要素は同等である。
修正優先度ポリシー２５１は、各コードクローンに対して優先度を決定可能なように修正優先度の決め方の指針を具体的に定めた情報である。例えば、「規模が大きいコードクローンほど優先度が高い」という指針の場合は、「３０行以上のコードクローンならば優先度Ａ、１０行以上２９行以下のコードクローンならば優先度Ｂ、９行以下のコードクローンならば優先度Ｃとする」などの修正優先度ポリシー２５１が考えられる。なお、この行数に対する優先度決定の閾値は一例であり、優先度の決め方として妥当であれば別の閾値を用いてもよい。この例では優先度の表現方法としてアルファベットによるランクを用いているが、行数をそのまま優先度の値とするなど、数値により優先度を表現してもよい。
【００７５】
また、コードクローンの規模以外の指針を用いてもよく、さらに複数の指針を合わせて用いてもよい。複数の指針を合わせて用いる場合の例として、コードクローンの規模と修正の容易さの２つの指針を合わせて優先度を決定する方法を示す。まず、コードクローンの規模により第一優先度Ａ，Ｂ，Ｃを決定する。次に、修正の容易さにより第二優先度ａ，ｂ，ｃを決定する。そしてこれらの第一、第二優先度を並べることにより複合優先度（Ａ，ａ），（Ａ，ｂ），（Ａ，ｃ），（Ｂ，ａ），（Ｂ，ｂ），（Ｂ，ｃ），（Ｃ，ａ），（Ｃ，ｂ），（Ｃ，ｃ）を決定する。複合優先度の比較方法はいくつかの方法が考えられる。例えば、辞書式に順位付けする方法や、第一、第二優先度が共に順位が高い（低い）場合に複合優先度が高い（低い）と判定し、その他の場合は複合優先度が等しいと判定する方法がある。
【００７６】
コードクローン修正優先度決定部２５２は修正優先度ポリシー２５１に従ってコードクローン分布情報５４に含まれる各コードクローンの修正優先度を決定する機能を持っている。
【００７７】
図２６は本実施例におけるソフトウェア開発管理プログラム２１の処理手順を示すフローチャートである。実施例１、２における図６のフローチャートとの違いは、ステップＳ６３のコードクローン分布解析処理の後にステップＳ２６１のコードクローン修正優先度決定処理が加わる点である。
ステップＳ２６１のコードクローン修正優先度決定処理においては、コードクローン分布情報５４と修正優先度ポリシー２５１がコードクローン修正優先度決定部２５２へ入力され、コードクローン修正優先度決定部２５２が修正優先度ポリシー２５１に従ってコードクローン分布情報５４に含まれる各コードクローンの修正優先度を決定し、結果をコードクローン修正優先度情報２５３として出力する。
【００７８】
コードクローン修正優先度情報２５３の例を図２７に示す。
図２７の例においては、コードクローンの識別子であるクローンIDを入力する列２７１とそのコードクローンの修正優先度を入力する列２７２を備えるテーブルにより、コードクローン修正優先度情報２５３を表現している。例えば、行２７３はクローンIDに1、修正優先度にBが入力されている。これは、クローンIDが1であるコードクローンの修正優先度がBであることを表している。
なお、この例においては、データ構造としてテーブルを用いているが、同等の情報が表現可能であればグラフやツリーなど他のデータ構造を用いてもよい。
【００７９】
本実施例では、マトリクス生成部２４の機能と、ステップＳ６４のマトリクス生成処理の内容が実施例２と異なる。
図２８と、図２９を用いて、マトリクス生成部２４とステップＳ６４のマトリクス生成処理の詳細について説明する。
【００８０】
図２８はマトリクス生成部２４の機能構成とデータフローを示す図である。図２８に示されるように、マトリクス生成部２４は、コードクローン修正優先度情報２５３、テーブル作成部１１１と、修正競合判定部１８１と、修正優先度比較部２８１と、マトリクス要素入力部１１３よりなる。
テーブル作成部１１１と修正競合判定部１８１は、実施例２におけるものと同等である。
【００８１】
修正優先度比較部２８１は、コードクローン修正優先度情報２５３を元に、修正競合情報１８２にあるコードクローンの組の修正優先度を比較し、その結果を修正優先度比較結果２８２として出力するモジュールである。
マトリクス要素入力部１１３は、修正優先度比較結果２８２に基づいてテーブル作成部１１１が作成したテーブル１１２にデータを入力し、開発管理マトリクス５６を作成するモジュールである。
マトリクス生成部２４への入力として、コードクローン分布情報５４とコードクローン修正優先度情報２５３がある。コードクローン分布情報５４の内容は実施例１で説明したものと同様である。
テーブル１１２、修正競合情報１８２、修正優先度比較結果２８２はマトリクス生成処理の一時的なデータであり、ＲＡＭ３およびＨＤＤ５に一時的に格納されるが、マトリクス生成部２４の永続的な構成要素ではない。
テーブル１１２、修正競合情報１８２の内容は実施例２において説明したものと同様である。
【００８２】
マトリクス生成部２４の出力として、開発管理マトリクス５６がある。本実施例における開発管理マトリクス５６はコードクローン間の修正の競合関係および競合関係のあるコードクローンの組の優先度の高低を可視化したものである。ここでのクローンが競合する条件とは、異なるクローンＩＤ同士が、すなわち異なるクローンセット間で、同じモジュールに含まれるコードクローンが在るということである。
修正競合の関係のあるコードクローンの組のIDがaとbであり、aの方がbより優先度が高い場合、b行a列の要素に×が入力される。aとbの優先度が等しい場合は、b行a列とa行b列両方の要素に×が入力される。
【００８３】
図３０は図２０のテーブル１１２に図２１の修正競合情報１８２と図２７のコードクローン修正優先度情報２５３を元にデータを入力して得られる開発管理マトリクス５６である。例えば、3行2列要素に×が入力されている。これはクローンID2と3のコードクローン間に、修正競合関係があり、2の方が3より修正優先度が高いことを表している。
なお、本実施例ではマトリクスの要素は空欄、×の2値を用いるが、その他、整数値などを用いてもよい。また、クローンの存在するモジュール名等の位置情報を記入してもよい。
【００８４】
図２９のフローチャートを用いて図２６ステップＳ６４のマトリクス生成処理について説明する。
先ず、ステップＳ１５１において、マトリクス生成部への入力であるコードクローン分布情報５４とコードクローン修正優先度情報２５３が入力される。
次に、ステップＳ１５２のテーブル作成処理、ステップＳ１９１の修正競合判定処理が実施例２と同様に行われる。
【００８５】
次に、ステップＳ２９１において、修正優先度比較部２８１が、コードクローン修正優先度情報２５３を元に、修正競合情報１８２にあるコードクローンの組の修正優先度を比較し、その結果を修正優先度比較結果２８２として出力する。
次に、ステップＳ１５３において、マトリクス要素入力部１１３が、修正競合情報１８２を参照し、修正優先度比較結果２８２に基づいてテーブル１１２の対応する箇所に×を入力する。修正競合情報１８２の全てのデータに対して入力が完了したら、テーブル１１２を開発管理マトリクス５６として出力し、処理を終了する。
【００８６】
本実施例のソフトウェア開発管理プログラム２１により出力された開発管理マトリクス５６を用いて、与えられた修正優先度ポリシーの下でコードクローン修正作業順序を最適化する方法について説明する。
実施例２と同様に、開発管理マトリクス５６のインデクスの順序がコードクローンの修正順序を表現していると考える。従って、マトリクスにおける×と対角線の距離と、手戻りの大きさの関係は実施例２で説明した通りである。
【００８７】
コードクローンaとコードクローンbに修正競合関係があり、コードクローンbよりもコードクローンaの修正優先度が高い場合、一般にコードクローンaの修正を先に実施した方が、手戻りが少なくて済む可能性が高い。従って、修正競合関係があり、かつ優先度が異なるコードクローンの組では優先度が高いコードクローンの修正順序が先になることが望ましい。これは、開発管理マトリクス５６においては、×ができるだけ対角線の下側の三角領域に位置することに対応する。例えば、図３０において3行2列の×は対角線の下側の三角領域に位置しているため、修正作業の順序は優先度の高いクローン2の方がクローン3より先となっている。一方逆に、3行4列の×は対角線の上側の三角領域に位置しているため、修正作業の順序は優先度の高いクローン4の方がクローン3より後となってしまっている。
【００８８】
以上の事から、以下を満たすように開発管理マトリクス５６のインデクスの順序を並び替えることで、手戻りの小さなコードクローン修正順序を得ることができる。
１．×が対角線の下側の三角領域にできるだけ集まる
２．×がマトリクスの対角線にできるだけ近くなる
開発管理マトリクス５６のインデクスの順序を並べ替える処理は、実施例２の場合と同様に、公知の技術を使用できる。DSM(Design Structure Matrix)における手法を適用して、上記の２つの条件を満足する開発管理マトリクス５６のインデクスの順序を並べ替えるアルゴリズムには，パス探索による方法，隣接行列のべき乗による方法，グラフ理論による方法など，様々な方法がある。それらのうちいずれかの方法を採用して、本実施例では、図に示していない優先度付き競合作業指針導出部が実施する。
「×がマトリクスの対角線にできるだけ近くする」処理に加えて「×が対角線の下側の三角領域にできるだけ集める」処理を行うことが実施の形態２で示した競合作業指針導出部との違いである。
【００８９】
図３１は図３０の開発管理マトリクス５６のインデクスの順序を、上記１、２を満たすように並べ替えた一例である。例えば、図３０に比べて図３１では、インデクスの順番を入れ替えることにより、3行4列の×が対角線の下に移動している。これにより、コードクローン3とコードクローン4の修正順序は、優先度の高いコードクローン4の方が先となるように改善されている。
【００９０】
このように、本実施例のソフトウェア開発管理プログラム２１により出力された開発管理マトリクス５６を用いて、与えられた修正優先度ポリシーの下でコードクローン修正作業順序を最適化することができる。
【００９１】
なお、以上すべての実施例において、開発管理対象は、ソースコードのかわりにテストコード等であっても本発明の趣旨を逸脱しない範囲で実施可能である。ここでテストコードとは、ソフトウェアが正しく動作するか確認するためのソフトウェアを、通常のソフトウェアのソースコードと同様、プログラミング言語で記述したものである。通常のソフトウェアのソースコードと同様に、チームの担当範囲や修正の順序が開発プロセスにおいて問題となることがある。
【符号の説明】
【００９２】
１  ＣＰＵ
２  ＲＯＭ
３  ＲＡＭ
４  バス
５  ＨＤＤ
６  ＣＤＲＯＭドライブ
７  ＣＤＲＯＭ
８  ＮＩＣ
９  入力装置
１０  表示装置
１１  ソフトウェア開発管理装置
２１  ソフトウェア開発管理プログラム
２２  コードクローン検出部
２３  コードクローン分布解析部
２４  マトリクス生成部
２５  ユーティリティ・ライブラリプログラム
２６  ＯＳ
３１  開発管理対象ソフトウェア
５１  ソースコード
５２  コードクローン検出結果
５３  構成要素情報
５４  コードクローン分布情報
５５  担当チーム情報
５６  開発管理マトリクス
１１１  テーブル作成部
１１２  テーブル
１１３  マトリクス要素入力部
１８１  修正競合判定部
１８２  修正競合情報
２５１  修正優先度ポリシー
２５２  コードクローン修正優先度決定部
２５３  コードクローン修正優先度情報
２８１  修正優先度比較部
２８２  修正優先度比較結果
【図１】
2015090596.tif 000003
【図２】
2015090596.tif 000004
【図３】
2015090596.tif 000005
【図４】
2015090596.tif 000006
【図５】
2015090596.tif 000007
【図６】
2015090596.tif 000008
【図７】
2015090596.tif 000009
【図８】
2015090596.tif 000010
【図９】
2015090596.tif 000011
【図１０】
2015090596.tif 000012
【図１１】
2015090596.tif 000013
【図１２】
2015090596.tif 000014
【図１３】
2015090596.tif 000015
【図１４】
2015090596.tif 000016
【図１５】
2015090596.tif 000017
【図１６】
2015090596.tif 000018
【図１７】
2015090596.tif 000019
【図１８】
2015090596.tif 000020
【図１９】
2015090596.tif 000021
【図２０】
2015090596.tif 000022
【図２１】
2015090596.tif 000023
【図２２】
2015090596.tif 000024
【図２３】
2015090596.tif 000025
【図２４】
2015090596.tif 000026
【図２５】
2015090596.tif 000027
【図２６】
2015090596.tif 000028
【図２７】
2015090596.tif 000029
【図２８】
2015090596.tif 000030
【図２９】
2015090596.tif 000031
【図３０】
2015090596.tif 000032
【図３１】
2015090596.tif 000033