JP2015090596A - ソフトウェア開発管理装置およびその方法 - Google Patents

ソフトウェア開発管理装置およびその方法 Download PDF

Info

Publication number
JP2015090596A
JP2015090596A JP2013230426A JP2013230426A JP2015090596A JP 2015090596 A JP2015090596 A JP 2015090596A JP 2013230426 A JP2013230426 A JP 2013230426A JP 2013230426 A JP2013230426 A JP 2013230426A JP 2015090596 A JP2015090596 A JP 2015090596A
Authority
JP
Japan
Prior art keywords
code
information
development management
clone
code clone
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2013230426A
Other languages
English (en)
Other versions
JP6199160B2 (ja
Inventor
浩気 大林
Hiroki Obayashi
浩気 大林
井奥 章
Akira Ioku
章 井奥
阿部 久美
Hisami Abe
久美 阿部
明彦 古賀
Akihiko Koga
明彦 古賀
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2013230426A priority Critical patent/JP6199160B2/ja
Publication of JP2015090596A publication Critical patent/JP2015090596A/ja
Application granted granted Critical
Publication of JP6199160B2 publication Critical patent/JP6199160B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】 ソースコードやテストコードの変更や修正作業においてコードクローンに係る状況把握や問題検出を効率よく行う。
【解決手段】 上記課題を解決するため、ソースコードやテストコード内のコードクローンを検出し、その分布状況を解析する。そして、解析結果から得られるコードクローン間の競合関係、担当チームとの関係、修正作業の優先度や順序などの情報を、コードクローンのチーム担当またがりの検出や修正作業順序の最適化などの目的に応じた形式で可視化する。
【選択図】 図5

Description

本発明は、ソフトウェア開発の変更、修正プロセスを最適化するソフトウェア開発管理装置およびその方法に関する。
既存の開発成果物の流用や再利用は開発の省力化のために頻繁になされる活動である。そのような成果物は製品や機能等の差分を反映した変更を取り入れながら時間の経過にともない異なる担当者に引き継がれることにもなる。ソフトウェアの大規模化や開発の短期化にともないソフトウェア開発が多チーム化すると、チームや製品をまたがって類似のコード等が拡散しやすい。
このような状況では、相互に同一または類似のコードであるコードクローン(同一あるいは類似したコード片)等の所在を的確に把握すること、及び変更や修正は相互に一体となって作業を行うことが求められる。
たとえば、あるチームで不具合が発見されると、不具合が複数箇所に拡散しているすべてを検出し、修正し、テストすることが求められる。
また、製品に応じた改造を内在させた相互に類似のコピーが累積していくと、類似の複数の成果物として拡散したクローン等を1個にまとめる共通化作業が求められるようにもなってくる。テストやメンテナンスの作業品質や開発効率の向上が期待できるためである。
しかし、開発の大規模化等にともない検出されるクローン等も大量になると網羅的な把握にもとづく作業推進が困難になってくる。その結果として、品質や開発コストや開発期間に悪影響を及ぼすことが知られている。
かかる背景をふまえ、特許文献1では、ソースコードのコードクローンの精査すべき量の多さや精査時間の長さを、解決すべき課題として扱っている。
同様な事象は、ソースコードのクローンに限らず、たとえば、テストコードの変更作業においても発生しうる。すなわち、類似するテストコードの等価な変更をまとめて行うべきところ、テストコードの総数や規模あるいは類似関係が増えるほど、作業もれや作業の効率低下が増加しうる。
特開2011−48639号公報
コードクローン解析により検出されるコードクローンに関する件数等、その情報は大量になることが少なくなく、このため多くのコードクローンの集合から共通化等の作業の候補として選び出すような精査において、作業品質と効率を向上させることは容易でない。
その上、コードクローンセット同士が、互いに疎とは限らない点に注意を要する。
例えば、
(1)複数の類似コードや複数のコードクローンセット間同士の所在に重なりがある場合。
(2)コードクローンのペアが所有者や担当チームが異なる複数モジュールにまたがり、
変更等の作業にも、複数の担当やチームの関与が必要となる場合。
などを挙げることができる。
結果として、コードクローンに係る変更作業や修正作業同士に依存関係が生じる場合がある。例えば、コードクローンセット1とコードクローンセット2には両方に属しているソースファイルがあり、片方を共通化するともう一方の観点で共通化できないような場合がこれに該当し、多くのコードクローンの集合から共通化の為の変更作業の候補を判定し選択することは容易ではない。
さらに、共通化等の変更作業において、その順序性が要求されることがある。たとえば、コード削減量を重視するために、規模が大きなコードクローンを優先的に共通化して、競合する規模の小さなコードクローンを無視したり共通化の優先度を下げる場合である。このような作業の順序性に関わる情報も含めて、網羅的にコードクローンの存在状況を検出し、多数検出されるコードクローン群のなかから、コードクローン間の競合や修正作業の順序性等の依存関係を的確に把握することは容易でなく、変更作業や修正作業の漏れや作業の手戻りを誘発しやすい。
クローン等の相互に類似するソフトウェア開発の成果物(ソースコードやテストコード等)の分布、さらには類似する組(セット)と別の類似する組との間の関係を考慮し、変更や修正作業の依存関係を把握することが作業品質を維持するうえで重要な課題となる。
上記課題を解決するために本発明では、ソフトウェア開発管理装置を、開発管理対象ソフトウェアのソースコード、またはテストコードを入力して、コードクローンの所在を検出するコードクローン検出部と、前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報を入力して、前記コードクローン検出部の検出結果とより、各構成要素に対するコードクローンの分布を解析し、コードクローンIDと、構成要素との対応関係を表わすコードクローン分布情報を出力するコードクローン分布解析部と、前記コードクローン分布情報よりコードクローンを対象とする変更あるいは修正作業における作業依存関係情報を出力する作業依存関係情報生成部とを備えた構成した。
また、上記課題を解決するために本発明では、前記ソフトウェア開発管理装置において、前記作業依存関係情報生成部に対応する部分が、前記開発管理対象ソフトウェアの各構成要素に対する担当チームの情報を入力して、前記コードクローン分布情報とより、前記開発管理対象ソフトウェアの構成要素と担当チームの関係、および、各構成要素に対するコードクローンの分布状況を一つのマトリクスで表現した開発管理マトリクスを作成して出力するマトリクス生成部であるように構成した。
また、上記課題を解決するために本発明では、前記ソフトウェア開発管理装置において、前記作業依存関係情報生成部に対応する部分が、前記コードクローン分布情報に従って、コードクローンのクローンIDを行、列のインデクスとするマトリクステーブルを作成するテーブル作成部と、前記コードクローン分布情報に従って、それぞれのコードクローンの組に対して修正が競合するかどうかを判定し、結果を修正競合関係にあるコードクローンの組の配列として表わす修正競合情報を出力する修正競合判定部と、前記修正競合情報に基づいて前記マトリクステーブルに、行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、開発管理マトリクスを作成して、出力するマトリクス要素入力部とを備えて構成した。
また、上記課題を解決するために本発明では、前記ソフトウェア開発管理装置を、各コードクローンに対して優先度を決定可能とする修正優先度の決め方を定めた情報修正優先度ポリシーを入力して、前記コードクローン分布情報に含まれる各コードクローンの修正優先度を決定して、結果をコードクローンIDと修正優先度情報を対応付けたコードクローン修正優先度情報を出力するコードクローン修正優先度決定部を更に備え、前記マトリクス生成部に、前記コードクローン修正優先度情報に従い、前記修正競合情報にあるコードクローンの組の修正優先度を比較し、その結果を修正優先度比較結果として出力する修正優先度比較部を更に備え、前記マトリクス要素入力部が、前記修正競合情報と前記修正優先度比較結果に基づいて前記マトリクステーブルに、修正競合の関係のあるコードクローンの組のIDがaとbであり、aの方がbより優先度が高い場合、b行a列の要素に行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、またはaとbの優先度が同じ場合、b行a列の要素、およびa行b列の要素のいずれにも行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力して、開発管理マトリクスを作成して、出力するように構成した。
また、上記課題を解決するために本発明では、CPUと記憶装置と入力装置と出力装置とを少なくとも有する情報処理装置として実現されるソフトウェア開発管理装置にて実行されるソフトウェア開発管理方法において、開発管理対象ソフトウェアのソースコード、またはテストコード、前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報、並びに前記開発管理対象ソフトウェアの各構成要素に対する担当チームの情報を入力するステップと、前記開発管理対象ソフトウェアのソースコード、またはテストコードからコードクローンの所在を検出するステップと、前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報と、及び前記コードクローンの検出結果から各構成要素に対するコードクローンの分布を解析し、コードクローンIDと、構成要素との対応関係を表わすコードクローン分布情報を出力するステップと、前記コードクローン分布情報からコードクローンを対象とする変更あるいは修正作業における作業依存関係の情報を出力するステップとを有するように構成した。
本発明によれば、チーム担当範囲をまたがる、修正漏れの危険性の高いコードクローンを容易に検出することが可能になる。これにより、コードクローンの修正漏れを防止することができる。また、コードクローン間の修正の競合や優先度の関係を容易に把握することが可能になる。これにより、コードクローン修正作業の順序を最適化し、手戻りを減らすことができる。
特にSPL(Software Product Line)による製品開発ではコア資産と非コア資産で管理階層の分離が必要であり、本発明の適用によりコア資産の構築や管理を効率化する効果が見込まれる。
本発明の第一の実施例のソフトウェア開発管理装置のハードウェアの全体構成図の例である。 本発明の第一の実施例のソフトウェア開発管理装置のソフトウェアの全体構成図の例である。 本発明の第一の実施例の開発管理対象ソフトウェアの例である。 本発明の第一の実施例の開発管理対象ソフトウェアのコードクローン分布状況の例である。 本発明の第一の実施例のソフトウェア開発管理プログラムの機能構成とデータフローの例である。 本発明の第一の実施例のソフトウェア開発管理プログラムの全体処理のフローチャートの例である。 本発明の第一の実施例のコードクローン分布解析処理のフローチャートの例である。 本発明の第一の実施例のコードクローン検出結果の例である。 本発明の第一の実施例の構成要素情報の例である。 本発明の第一の実施例のコードクローン分布情報の例である。 本発明の第一の実施例のマトリクス生成部の機能構成とデータフローの例である。 本発明の第一の実施例の担当チーム情報の例である。 本発明の第一の実施例のテーブルの例である。 本発明の第一の実施例の開発管理マトリクスの例である。 本発明の第一の実施例のマトリクス生成処理のフローチャートの例である。 本発明の第二の実施例の開発管理ソフトウェアの例である。 本発明の第二の実施例のソフトウェア開発管理プログラムの機能構成とデータフローの例である。 本発明の第二の実施例のマトリクス生成部の機能構成とデータフローの例である。 本発明の第二の実施例のマトリクス生成処理のフローチャートの例である。 本発明の第二の実施例のテーブルの例である。 本発明の第二の実施例の修正競合情報の例である。 本発明の第二の実施例の開発管理マトリクスの例である。 本発明の第三の実施例のソフトウェア開発管理装置のソフトウェアの全体構成図の例である。 本発明の第三の実施例の開発管理マトリクスの例である。 本発明の第三の実施例のソフトウェア開発管理プログラムの機能構成とデータフローの例である。 本発明の第三の実施例のソフトウェア開発管理プログラムの全体処理のフローチャートの例である。 本発明の第三の実施例のコードクローン修正優先度情報の例である。 本発明の第三の実施例のマトリクス生成部の機能構成とデータフローの例である。 本発明の第三の実施例のマトリクス生成処理のフローチャートの例である。 本発明の第三の実施例の開発管理マトリクスの例である。 本発明の第三の実施例の開発管理マトリクスの例である。
以下、本発明に係る各実施形態を、図を用いて説明する。開発管理対象としてソフトウェア開発における類似する成果物間の関係を、「コードクローン」で代表させて示すものとするが、「コードクローン」でないとしても「開発の成果物の相互に類似する複数の部分」が管理対象であるならば、本発明の趣旨を逸脱しない。したがって、以下の実施例では、「コードクローン」は「開発の成果物の相互に類似する複数の部分」等で読み替え可能である。
さらにコードは、ソースコード以外にもテストコード等であってもよい。
本実施例では、作業依存関係のひとつであるコードクローンのチーム担当範囲またがりを検出するソフトウェア開発管理装置の例を説明する。
図1を用いて本発明の第一実施形態に係るソフトウェア開発管理装置のハードウェア構成について説明する。
図1は、本発明の第一の実施形態に係るソフトウェア開発管理装置のハードウェア構成を示すブロック図である。
図1に示すようにソフトウェア開発管理装置11は、例えば、パーソナルコンピュータやサーバや専用ハードウェアなどであり、CPU(Central Processing Unit)1、ROM(Read Only Memory)2、RAM(Random Access Memory)3、HDD(Hard Disk Drive)5、入力装置9、表示装置10、NIC(Network Interface Card)8、CDROMドライブ6が、BUS4により接続された形態である。
CPU1は、コンピュータの主要な部分であって、演算処理および各部を制御する中心であり、HDD5に格納されたソフトウェア開発管理プログラム21を、RAM3にロードして実行する。
ROM2は、起動プログラムであるBIOSなどを記憶する読み出し専用の半導体記憶装置である。
RAM3は、OS(Operating System)やソフトウェア開発管理プログラム21などの各種プログラムやワークデータ等を記憶する書き換え可能な半導体記憶装置であり、ソフトウェア開発管理装置11の主記憶装置になる。
HDD5は、大容量の記憶装置であり、OSやソフトウェア開発管理プログラムなどの各種プログラム、プログラムに使用されるデータなどを格納する補助記憶装置である。
CDROMドライブ6は、CDROM(Compact Disc Read Only Memory)7に記憶されたプログラムやデータを読み取る装置である。
NIC8は、ネットワークとの通信を制御する装置である。
入力装置9は、各種操作指示をおこなうキーボードやマウスなどのポインティングデバイスである。
表示装置10は、各種情報を表示するLCD(Liquid Crystal Display)などの表示のための装置である。
なお、各種プログラムやデータ等を格納するのは、HDD5に限らずSSDなどの半導体記憶装置なども用いることができ、記憶媒体としてはCDROMに限らずDVDやその他の磁気、光学、半導体などを用いた媒体を用いることができる。また、NIC8を介してネットワークからプログラムやデータをダウンロードしてHDD5やRAM3に記憶してもよい。なお、プログラムやデータは、特定のOS上で動作するか、OSを必要としないか、特定のOSやアプリケーション群を構成するファイルの一部であるかは問わない。
本実施形態のソフトウェア開発管理装置は、図1に示したハードウェア構成で、HDD5に格納されたソフトウェア開発管理プログラムが、RAM3にロードされて、CPU1がプログラムを解釈実行することにより、その機能が実行される。
図2を用いて本発明の一実施形態に係るソフトウェア開発管理装置のソフトウェア構成について説明する。
図2に示すようにソフトウェア開発管理装置のソフトウェア部分は、アプリケーションソフトウェアとしてソフトウェア開発管理プログラム21と、ユーティリティ・ライブラリプログラム25、OS26よりなる。
OS26は、ハードウェアとソフトウェアの仲立ちとなり、ユーザに対してのインタフェースを提供する基本プログラムであり、ユーティリティ・ライブラリプログラム25は、OS26の機能をアプリケーションソフトウェアに隠蔽し、アプリケーションソフトウェアに様々な機能を提供するプログラムである。
ソフトウェア開発管理プログラム21は、ソフトウェア開発管理装置11のアプリケーションソフトウェアであり、コードクローン検出部22、コードクローン分布解析部23、マトリクス生成部24の3つのモジュールよりなる。これらの各モジュールの処理については、後に詳説する。
先ず、図3を用いて本実施形態のソフトウェア開発管理装置が開発管理対象とするソフトウェアについて説明する。
本実施形態のソフトウェア開発管理装置が開発管理対象とするソフトウェア31は、複数の構成要素で構成されているものとし、各構成要素に対して、開発や修正などを担当するチームが決められているとする。
以下、構成要素の単位はモジュールとして説明するが、モジュールに限らず、ファイルや関数を単位としてもよい。
また、ソフトウェア開発における類似する成果物としてコードクローンを代表して示すものとするが、コードクローンとして検出されない場合でも、類似性を検出できるならば、コードクローン検出部22、コードクローン分布解析部23は、類似成果物検出部22、類似成果物分布解析部23等と、「コードクローン」を「開発の成果物の相互に類似する複数の部分」等と解釈して読み替えて、管理対象としてもよい。
図3は、開発管理対象ソフトウェア31の一例を示した図である。図3の例では、対象ソフトウェアはモジュールm1、 m2、 … 、 m5で構成されており、モジュールm1、 m2をチームAが担当し、モジュールm3、 m4、 m5をチームBが担当すると指定されている。
また、開発管理対象ソフトウェア31は、複数のコードクローンを含んでいることを想定する。
図4は開発管理対象ソフトウェア31の中にコードクローンが含まれている様子を示した図である。コードクローンの識別子であるクローンIDが1と2のコードクローンが存在しており、クローンID1のコードクローンはモジュールm1、 m2、 m3に含まれ、クローンID2のコードクローンはモジュールm3、 m5に含まれている。クローンID2のコードクローンはチームBの担当範囲内のみに存在しているが、クローンID1のコードクローンはチームの担当範囲をまたがって存在している。
次に、図5ないし図6を用いて本発明の第一の実施形態に係るソフトウェア開発管理プログラムの機能と、その処理について説明する。
図5は、本発明の第一の実施形態に係るソフトウェア開発管理プログラム全体の機能構成およびデータフローを示した図である。
図5に示すようにソフトウェア開発管理プログラム21は、開発管理対象ソフトウェアのソースコード51に対して、公知の技術によるコードクローン検出ツールを実行することによりソースコード内のコードクローンを検出するモジュールであるコードクローン検出部22と、コードクローン検出の結果52と開発管理対象ソフトウェアの構成要素情報53を元に解析を行い、各ソフトウェア構成要素に対するコードクローンの分布情報54を得るモジュールであるコードクローン分布解析部23と、コードクローン分布情報54と構成要素情報53と構成要素の担当チーム情報55を参照し、ソフトウェアの開発を管理するための開発管理マトリクス56を生成するモジュールであるマトリクス生成部24を備える。
なお、開発管理マトリクス56は実施例1における作業依存関係情報の一例に相当し、マトリクス生成部24は請求項1における作業依存関係情報生成部の一例に相当する。
コードクローン検出部22が実行するコードクローン検出ツールとしては、例えば、一般的に使用されているものとしては、“CCFinderX”があるが、その他のコードクローン検出ツールでもよい。
なお、ソフトウェア開発管理プログラム21の中では、当該処理の一時的なデータとして、コードクローン検出部22がコードクローン検出結果52を生成し、コードクローン分布解析部23がコードクローン分布情報54を生成し、RAM3およびHDD5に一時的に格納されるが、ソフトウェア開発管理プログラム21の永続的な構成要素ではない。
ソフトウェア開発管理プログラム21への入力として、ソースコード51と構成要素情報53と担当チーム情報55がある。これらの入力はNIC8や入力装置9やCDROM7やHDD5などからRAM3にロードされるデータである。
構成要素情報53は開発管理対象ソフトウェアの全てのソースコードファイル名、開発管理対象ソフトウェアの全ての構成要素の名前、および、それらファイルと構成要素との対応関係の情報を表すデータである。
担当チーム情報55は開発管理対象ソフトウェアの各構成要素に対する担当チームの情報を表すデータである。
ソフトウェア開発管理プログラム21の出力として、開発管理マトリクス56がある。開発管理マトリクス56は、開発管理対象ソフトウェアの構成要素と担当チームの関係、および、各構成要素に対するコードクローンの分布状況を一つのマトリクスで表現したものである。
図6は、ソフトウェア開発管理プログラム21の全体の処理手順を示したフローチャートである。
先ず、ステップS61において、ソースコード51と構成要素情報53と担当チーム情報55をソフトウェア開発管理プログラム21に入力する。
次に、ステップS62において、コードクローン検出部22が、コードクローン検出ツールを実行し、ステップS61で入力されたソースコード51のコードクローンを検出し、コードクローン検出結果52を出力する。
次に、ステップS63において、コードクローン分布解析部23が、ステップS62で出力されたコードクローン検出結果とステップS61で入力された構成要素情報53を元に各構成要素に対するコードクローンの分布を解析し、コードクローン分布情報54を出力する。
次に、ステップS64において、マトリクス生成部24が、ステップS61で入力された構成要素情報53と担当チーム情報55を元にテーブルを作成し、ステップS63で出力されたコードクローン分布情報54を元にテーブルに要素を入力することで開発管理マトリクス56を生成する。
最後に、ステップS65において、表示装置10にステップS64で生成した開発管理マトリクス56を表示し、一連の処理を終了する。
図8、9、10および図7のフローチャートを用いて、コードクローン分布解析部23およびステップS63のコードクローン分布解析処理の詳細について説明する。コードクローン分布解析部23への入力として、コードクローン検出結果52と構成要素情報53がある。
図4の開発管理対象ソフトウェア31のコードクローン分布状況に対応するコードクローン検出結果52の一例を図8に示す。図8の例においては、コードクローンの識別子であるクローンIDを入力する列81とそのコードクローンが検出されたファイル名を入力する列82を備えるテーブルにより、コードクローン検出結果52を表現している。
例えば行83はクローンIDに1が、ファイル名にC:\aaa\file1.cが入力されている。これは、ファイルC:\aaa\file1.cでクローンIDが1のコードクローンが検出されたということを示している。
構成要素情報53の一例を図9に示す。図9の例においては、ソースコードのファイル名を入力する列91とそのファイルが対応するモジュール名を入力する列92を備えるテーブルにより、構成要素情報を表現している。
例えば行93はファイル名にC:\aaa\file1.cが、モジュール名にm1が入力されている。これは、ファイルC:\aaa\file1.cがモジュールm1に対応していることを表している。
これらの入力情報を解析することで、検出されたコードクローン全てに対してそのコードクローンを含んでいる構成要素を特定し、これをコードクローン分布情報54として出力する。コードクローン分布情報54の一例を図10に示す。
図10の例においては、コードクローンの識別子であるクローンIDを入力する列101とそのコードクローンを含んでいるモジュール名を入力する列102を備えるテーブルにより、コードクローン分布情報を表現している。
例えば行103はクローンIDに1、モジュール名にm1が入力されている。これは、クローンIDが1であるコードクローンをモジュールm1が含んでいることを表している。
なお、図8、9、10で示したコードクローン検出結果52、構成要素情報53、コードクローン分布情報54の例においては、データ構造としてテーブルを用いているが、同等の情報が表現可能であればグラフやツリーなど他のデータ構造を用いてもよい。
コードクローン分布情報54を得る手順は様々に考えられるが、図8、図9で示した入力に対しては例えば図7のフローチャートに示す次のような手順がある。
先ず、ステップS71において、N=1とする。
次に、ステップS72において、コードクローン検出結果52のN行目のデータレコードを取り出し、クローンIDの列の値を変数CID、ファイル名の列の値を変数FILEに代入する。
次に、ステップS73において、構成要素情報53のテーブルから、ファイル名の列が変数FILEの値と一致する行を検索し、見つかった行のモジュール名の列の値を変数MODULEに代入する。
次に、ステップS74において、{変数CID、変数MODULE}の組合せのデータが、コードクローン分布情報54の既登録のデータレコードと一致するものがあるか否かを検索する。一致するものがある場合はステップS76へ移行し、一致するものが無い場合はステップS75へ移行する。
次に、ステップS75において、コードクローン分布情報54のテーブルの新しい行に、クローンIDの列に変数CIDの値、モジュール名の列に変数MODULEの値を記録する。
次に、ステップS76において、N行目がコードクローン検出結果52の最後の行であるならば、コードクローン分布解析処理を終了する。そうでないならば、ステップS77においてN=N+1として、ステップS72に戻る。
図11を用いてマトリクス生成部24の構成、およびデータフローについて説明する。
マトリクス生成部24は、図11に示されるように、テーブル作成部111と、マトリクス要素入力部113よりなる。
テーブル作成部111は、担当チーム情報55(後述)を元に、開発管理対象ソフトウェア31の構成要素を担当チーム別にブロックをなすようにソートしたものを列インデクス、ソースコード51から検出されたコードクローンのクローンIDを行インデクスとするテーブル112を作成するモジュールである。
マトリクス要素入力部113は、テーブル作成部111が作成したテーブル112にコードクローン分布情報を元にデータを入力し、開発管理マトリクスを作成するモジュールである。マトリクス生成部24への入力として、担当チーム情報55とコードクローン分布情報54がある。
担当チーム情報55の一例を図12に示す。図12の例においては、モジュール名を入力する列121とそのモジュールを担当するチーム名を入力する列122を備えるテーブルにより、担当チーム情報55を表現している。例えば行123はモジュール名にm1、チーム名にチームAが入力されている。これは、モジュールm1をチームAが担当していることを表している。
テーブル112はマトリクス生成処理の一時的なデータであり、RAM3およびHDD5に一時的に格納されるが、マトリクス生成部24の永続的な構成要素ではない。図13は図12の担当チーム情報55と図10のコードクローン分布情報54を元に作られたテーブル112の一例である。
図13に示すように、テーブル112の列インデクスは開発管理対象ソフトウェア31の構成要素となり、インデクスの順番は担当チーム別にブロックをなすようにソートされる。
図13の例においては、開発管理対象ソフトウェア31の構成要素であるモジュールm1、 m2、…、 m5が列インデクスとなっており、同じチームが担当であるm1、m2とm3、m4、m5がそれぞれブロックをなしている。また、テーブル112の行インデクスはソースコード51から検出されたコードクローンのクローンIDとなる。図13の例においては、クローンID:1、2が行インデクスとなっている。
マトリクス生成部24の出力として、開発管理マトリクス56がある。本実施例における開発管理マトリクス56は、開発管理対象ソフトウェア31のコードクローンの分布状況を表したものである。
図14は図13のテーブル112に図10のコードクローン分布情報54を元にデータを入力して得られる開発管理マトリクス56である。図14に示すように、各要素には、その要素の列インデクスに対応する構成要素に、行インデクスのクローンIDに対応するコードクローンが含まれる場合、×が入力される。例えば、1行m1列要素の値は×であり、これは、モジュールm1がクローンID1のコードクローンを含んでいることを表している。なお、本実施例ではマトリクスの要素は空欄、×の2値を用いるが、その他、整数値などを用いてもよい。
図15のフローチャートを用いて図6ステップS64のマトリクス生成処理について説明する。
先ず、ステップS151において、マトリクス生成部24への入力である担当チーム情報55とコードクローン分布情報54が入力される。
次に、ステップS152において、入力データを元に、テーブル作成部111が、開発管理対象ソフトウェア31の構成要素を担当チーム別にブロックをなすようにソートしたものを列インデクス、ソースコード51から検出されたコードクローンのクローンIDを行インデクスとするテーブル112を作成する。
次に、ステップS153において、マトリクス要素入力部113がコードクローン分布情報54を参照し、各行のデータに対して、テーブル112の対応する箇所に×を入力する。
コードクローン分布情報54の全ての行に対して入力が完了したら、テーブル112を開発管理マトリクス56として出力し、処理を終了する。
本実施例から得られるソフトウェア開発管理プログラム21により出力された開発管理マトリクス56を利用することにより、チーム担当範囲をまたがるコードクローンの検出を容易に行うことができる。
例えば、以下の方法を実施すればよい。
1.開発管理マトリクス56の各行に対して、×が入力されている担当チームブロックの数を数え上げる。
2.×が入力されている担当チームブロックの数が二つ以上である行のクローンIDに対応するコードクローンを、チーム担当範囲をまたがるコードクローンであると判定する。
例えば、図14の開発管理マトリクス56においては、1行の×が入力されている担当チームブロックの数を数えると2であり、2行の×が入力されている担当チームブロックの数を数えると1である。これより、コードクローン2は一つのチーム担当範囲に収まっている、コードクローン1はチーム担当範囲をまたがってしまっていることがわかる。
本実施例では、作業依存関係のひとつであるコードクローンの修正作業間の順序性を可視化し、最適化するソフトウェア開発管理装置の例を説明する。実施例2におけるソフトウェア開発管理プログラムを実行するソフトウェア開発管理装置11のハードウェア構成とソフトウェア構成の一例を示す図は、図1および図2に示した実施例1におけるハードウェア構成とソフトウェア構成の図と同様である。以後、実施例1と同一の機能を有する部分および処理手順については説明を省略する。
先ず、図16を用いて本実施形態のソフトウェア開発管理装置が開発管理対象とするソフトウェアについて説明する。
本実施形態における開発管理対象ソフトウェアは、複数の構成要素で構成されているものとする。以下、構成要素の単位はモジュールとして説明するが、モジュールに限らず、ファイルや関数を単位としてもよい。また、本実施形態における開発管理対象ソフトウェアは、複数のコードクローンを含んでいることを想定する。
図16の例では、対象ソフトウェアはモジュールm1、 m2、…、 m5で構成されている。また、クローンIDが1、 2、 3、 4、 5のコードクローンが存在しており、各モジュール内に偏在している。例えば、図16の例では、モジュールm1内にはクローンIDが1、2の二つのコードクローンが存在している。
図17は本実施例におけるソフトウェア開発管理プログラム21の一例を示すブロック図である。実施例1のソフトウェア開発管理プログラム21の図5との違いは、担当チーム情報が入力されない点であり、他の構成要素は同等である。また、本実施例のソフトウェア開発管理プログラム21の処理手順を示すフローチャートは実施例1の図6のフローチャートと同様である。
本実施例では、マトリクス生成部24の機能と、ステップS64のマトリクス生成処理の内容が実施例1と異なる。
図18と図19を用いて、ステップS64のマトリクス生成処理の詳細について説明する。図18はマトリクス生成部24の機能構成とデータフローを示す図である。図18に示されるように、マトリクス生成部24は、テーブル作成部111と、修正競合判定部181と、マトリクス要素入力部113よりなる。
テーブル作成部111は、コードクローン分布情報54を元に、コードクローンのクローンIDを行、列のインデクスとするテーブル112を作成するモジュールである。
修正競合判定部181は、コードクローン分布情報54を元に、それぞれのコードクローンの組に対して修正が競合するかどうか(修正が競合するとは、一方のコードクローンに対して修正を行なったとき、もう一方のコードクローンの修正に影響を及ぼして、もう一方のコードクローンの修正が困難、または不可となること。)を判定し、結果を修正競合情報182として出力するモジュールである。
マトリクス要素入力部113は、修正競合情報182に基づいてテーブル作成部111が作成したテーブル112にデータを入力し、開発管理マトリクス56を作成するモジュールである。
マトリクス生成部24への入力として、コードクローン分布情報54がある。コードクローン分布情報54の内容は実施例1で説明したものと同様である。
マトリクス生成処理の一時的なデータとして、テーブル112および修正競合情報182がある。これらはRAM3およびHDD5に一時的に格納されるが、マトリクス生成部24の永続的な構成要素ではない。
図20は図16の開発管理対象ソフトウェア31に対応するテーブル112の一例である。図20に示すように、本実施例のテーブル112の行インデクスおよび列インデクスは共にコードクローン検出処理で検出されたすべてのコードクローンのクローンIDとなる。図20の例においては、クローンIDが1、2、3、4、5が行と列のインデクスとなっている。
修正競合情報182は修正が競合関係にあるコードクローンの組の情報である。
修正競合情報182の例を図21に示す。図21の例においては、修正競合関係にあるコードクローンの組の配列により修正競合情報182を表している。例えば、項211はコードクローンの組(1、2)が入力されている。これは、クローンIDが1と2であるコードクローンが修正の競合関係にあることを表している。
マトリクス生成部24の出力として、開発管理マトリクス56がある。本実施例における開発管理マトリクス56はコードクローン間の修正の競合関係を可視化したものであり、行と列のインデクスに対応するコードクローン間に修正の競合関係がある場合、その要素に×が入力される。
図22は図20のテーブル112に図21の修正競合情報182を元にデータを入力して得られる開発管理マトリクス56である。図22においては、例えば、1行2列要素に×が入力されている。これはクローンIDが1と2のコードクローン間に、修正競合関係があることを表している。なお、本実施例ではマトリクスの要素は空欄、×の2値を用いるが、その他、整数値などを用いてもよい。
図19のフローチャートを用いて図6ステップS64のマトリクス生成処理について説明する。
先ず、ステップS151において、マトリクス生成部への入力であるコードクローン分布情報54が入力される。
次に、ステップS152において、テーブル作成部111が、コードクローン分布情報54を元に、コードクローンのクローンIDを行、列のインデクスとするテーブル112を作成する。
次に、ステップS191において、修正競合判定部181が、コードクローン分布情報54を元に、それぞれのコードクローンの組に対して修正が競合するかどうかを判定し、結果を修正競合情報182として出力する。ただし、修正の競合判定は、コードクローンの組に対して、その両方を含む構成要素が存在するとき「競合する」、そうでないとき「競合しない」と判定する。
例えば、図10に示したコードクローン分布情報54においては、行104はクローンIDが1モジュール名がm3となっており、行105はクローンIDが2モジュール名がm3となっている。これはm3がクローンIDが1と2のコードクローンを両方含んでいることを表している。従ってこの場合、コードクローンの組(1, 2)は「競合する」となる。
次に、ステップS153において、マトリクス要素入力部113が、修正競合情報182を参照し、テーブル112の対応する箇所に×を入力する。修正競合情報182の全てのデータに対して入力が完了したら、テーブル112を開発管理マトリクス56として出力し、処理を終了する。
本実施例のソフトウェア開発管理プログラム21により出力された開発管理マトリクス56を用いて、コードクローン修正作業順序を最適化する方法について説明する。
開発管理マトリクス56のインデクスの順序がコードクローンの修正順序を表現していると考える。
開発管理マトリクス56のb行a列に×が入力されているとき、コードクローンaとbの間には修正競合関係がある。従って、片方を修正後にもう片方を修正した場合、修正済みの方に影響が生じて再修正が必要になり、手戻りを引き起こす可能性がある。
手戻りとは、先に行なった片方の修正処理を、後で行なうもう片方の修正後に、先の修正処理に戻って、再修正処理が必要となることである。この手戻りは、×がマトリクスの左上から右下への対角線に対して近いほど小さく、遠いほど大きい。
例えば図22の開発管理マトリクス56においては、1行2列の×はクローン2の修正からクローン1の修正への手戻りの可能性を表しており、対角線からの距離が近い。また、1行5列の×はクローン5の修正からクローン1の修正への手戻りの可能性を表しており、対角線からの距離が遠い。ここで、インデクスの順番は1、2、3、4、5となっているため、クローン修正作業の順番は1、2、3、4、5であるから、2から1への手戻りは1ステップ前に戻ることであるから小さく、5から1への手戻りは4ステップ前に戻ることになるから大きいことになる。よって、対角線と×の間の距離が手戻りの大きさに対応していることが分かる。
以上の事から、開発管理マトリクス56のインデクスの順序を、×がマトリクスの対角線にできるだけ近くなるように並べ替えることで、手戻りの小さなコードクローン修正順序を得ることができる。
開発管理マトリクス56のインデクスの順序を×がマトリクスの対角線にできるだけ近くなるように並べ替える処理は、公知の技術を使用できる。マトリックス表現に基づく工程・組織設計のための手法となっているDSM(Design Structure Matrix)の縦軸と横軸に並べられたタスクの順序を、後戻り作業が発生するリスクを減らすために入れ替えて、タスクの順序を変更する手法が適用できる。すなわち、開発管理マトリクス56のインデクスの順序を×がマトリクスの対角線にできるだけ近くなるように並べ替えるアルゴリズムには,パス探索による方法,隣接行列のべき乗による方法,グラフ理論による方法など,様々な方法がある。それらのうちいずれかの方法を採用して、本実施例では、図に示していない競合作業指針導出部が実施する。
図24は図22の開発管理マトリクス56のインデクスの順序を、×がマトリクスの対角線にできるだけ近くなるように並べ替えた一例である。クローン修正作業の順番が5、1、2、3、4となり、手戻りの可能性があるステップ数が最大2ステップに減っている。
このように、本実施例のソフトウェア開発管理プログラム21により出力された開発管理マトリクス56を用いて、コードクローン修正作業順序を最適化することができる。
本実施例では、与えられた修正優先度ポリシーの下でコードクローンの修正作業順序を最適化するソフトウェア開発管理装置の例を説明する。
実施例3におけるソフトウェア開発管理プログラムを実行するソフトウェア開発管理装置11のハードウェア構成の一例を示すブロック図は、図1に示す実施例1、2におけるハードウェア構成のブロック図と同様である。
図23は、本発明の第三の実施形態に係るソフトウェア開発管理装置のソフトウェア構成を示す図である。実施例1、2における図2のソフトウェア構成との違いは、ソフトウェア開発管理プログラム21を構成するモジュールとしてコードクローン修正優先度決定部がある点であり、その他の構成は同様である。
以後、実施例1あるいは実施例2と同一の機能を有する部分および処理手順については説明を省略する。
先ず、図16を用いて本実施形態のソフトウェア開発管理装置が開発管理対象とするソフトウェアについて説明する。本実施形態における開発管理対象ソフトウェアは、実施例2において図16で示したものと同様である。さらに、本実施例においてはコードクローンの修正に優先度があることを想定する。
修正の優先度の決め方は様々に考えられる。例えば、コードクローンの規模の大きさ、修正の容易さ、チーム担当範囲をまたぐか否か、などがある。
規模の大きいコードクローンほど、修正によって得られる設計の改善効果が大きいため、修正の優先度は高いと考えられる。また、修正が容易なコードクローンほど、少ない工数で修正を完了できるため、修正の優先度は高いと考えられる。また、チーム担当範囲をまたぐようなクローンは保守困難化の原因となるため、修正の優先度は高いと考えられる。このような、修正優先度の決め方の指針を、修正優先度ポリシーと呼ぶこととする。
図25は本実施例のソフトウェア開発管理プログラム21の一例を示すブロック図である。実施例2の図17との違いは、修正優先度ポリシー251が入力される点と、コードクローン修正優先度決定部252を備える点であり、他の構成要素は同等である。
修正優先度ポリシー251は、各コードクローンに対して優先度を決定可能なように修正優先度の決め方の指針を具体的に定めた情報である。例えば、「規模が大きいコードクローンほど優先度が高い」という指針の場合は、「30行以上のコードクローンならば優先度A、10行以上29行以下のコードクローンならば優先度B、9行以下のコードクローンならば優先度Cとする」などの修正優先度ポリシー251が考えられる。なお、この行数に対する優先度決定の閾値は一例であり、優先度の決め方として妥当であれば別の閾値を用いてもよい。この例では優先度の表現方法としてアルファベットによるランクを用いているが、行数をそのまま優先度の値とするなど、数値により優先度を表現してもよい。
また、コードクローンの規模以外の指針を用いてもよく、さらに複数の指針を合わせて用いてもよい。複数の指針を合わせて用いる場合の例として、コードクローンの規模と修正の容易さの2つの指針を合わせて優先度を決定する方法を示す。まず、コードクローンの規模により第一優先度A,B,Cを決定する。次に、修正の容易さにより第二優先度a,b,cを決定する。そしてこれらの第一、第二優先度を並べることにより複合優先度(A,a),(A,b),(A,c),(B,a),(B,b),(B,c),(C,a),(C,b),(C,c)を決定する。複合優先度の比較方法はいくつかの方法が考えられる。例えば、辞書式に順位付けする方法や、第一、第二優先度が共に順位が高い(低い)場合に複合優先度が高い(低い)と判定し、その他の場合は複合優先度が等しいと判定する方法がある。
コードクローン修正優先度決定部252は修正優先度ポリシー251に従ってコードクローン分布情報54に含まれる各コードクローンの修正優先度を決定する機能を持っている。
図26は本実施例におけるソフトウェア開発管理プログラム21の処理手順を示すフローチャートである。実施例1、2における図6のフローチャートとの違いは、ステップS63のコードクローン分布解析処理の後にステップS261のコードクローン修正優先度決定処理が加わる点である。
ステップS261のコードクローン修正優先度決定処理においては、コードクローン分布情報54と修正優先度ポリシー251がコードクローン修正優先度決定部252へ入力され、コードクローン修正優先度決定部252が修正優先度ポリシー251に従ってコードクローン分布情報54に含まれる各コードクローンの修正優先度を決定し、結果をコードクローン修正優先度情報253として出力する。
コードクローン修正優先度情報253の例を図27に示す。
図27の例においては、コードクローンの識別子であるクローンIDを入力する列271とそのコードクローンの修正優先度を入力する列272を備えるテーブルにより、コードクローン修正優先度情報253を表現している。例えば、行273はクローンIDに1、修正優先度にBが入力されている。これは、クローンIDが1であるコードクローンの修正優先度がBであることを表している。
なお、この例においては、データ構造としてテーブルを用いているが、同等の情報が表現可能であればグラフやツリーなど他のデータ構造を用いてもよい。
本実施例では、マトリクス生成部24の機能と、ステップS64のマトリクス生成処理の内容が実施例2と異なる。
図28と、図29を用いて、マトリクス生成部24とステップS64のマトリクス生成処理の詳細について説明する。
図28はマトリクス生成部24の機能構成とデータフローを示す図である。図28に示されるように、マトリクス生成部24は、コードクローン修正優先度情報253、テーブル作成部111と、修正競合判定部181と、修正優先度比較部281と、マトリクス要素入力部113よりなる。
テーブル作成部111と修正競合判定部181は、実施例2におけるものと同等である。
修正優先度比較部281は、コードクローン修正優先度情報253を元に、修正競合情報182にあるコードクローンの組の修正優先度を比較し、その結果を修正優先度比較結果282として出力するモジュールである。
マトリクス要素入力部113は、修正優先度比較結果282に基づいてテーブル作成部111が作成したテーブル112にデータを入力し、開発管理マトリクス56を作成するモジュールである。
マトリクス生成部24への入力として、コードクローン分布情報54とコードクローン修正優先度情報253がある。コードクローン分布情報54の内容は実施例1で説明したものと同様である。
テーブル112、修正競合情報182、修正優先度比較結果282はマトリクス生成処理の一時的なデータであり、RAM3およびHDD5に一時的に格納されるが、マトリクス生成部24の永続的な構成要素ではない。
テーブル112、修正競合情報182の内容は実施例2において説明したものと同様である。
マトリクス生成部24の出力として、開発管理マトリクス56がある。本実施例における開発管理マトリクス56はコードクローン間の修正の競合関係および競合関係のあるコードクローンの組の優先度の高低を可視化したものである。ここでのクローンが競合する条件とは、異なるクローンID同士が、すなわち異なるクローンセット間で、同じモジュールに含まれるコードクローンが在るということである。
修正競合の関係のあるコードクローンの組のIDがaとbであり、aの方がbより優先度が高い場合、b行a列の要素に×が入力される。aとbの優先度が等しい場合は、b行a列とa行b列両方の要素に×が入力される。
図30は図20のテーブル112に図21の修正競合情報182と図27のコードクローン修正優先度情報253を元にデータを入力して得られる開発管理マトリクス56である。例えば、3行2列要素に×が入力されている。これはクローンID2と3のコードクローン間に、修正競合関係があり、2の方が3より修正優先度が高いことを表している。
なお、本実施例ではマトリクスの要素は空欄、×の2値を用いるが、その他、整数値などを用いてもよい。また、クローンの存在するモジュール名等の位置情報を記入してもよい。
図29のフローチャートを用いて図26ステップS64のマトリクス生成処理について説明する。
先ず、ステップS151において、マトリクス生成部への入力であるコードクローン分布情報54とコードクローン修正優先度情報253が入力される。
次に、ステップS152のテーブル作成処理、ステップS191の修正競合判定処理が実施例2と同様に行われる。
次に、ステップS291において、修正優先度比較部281が、コードクローン修正優先度情報253を元に、修正競合情報182にあるコードクローンの組の修正優先度を比較し、その結果を修正優先度比較結果282として出力する。
次に、ステップS153において、マトリクス要素入力部113が、修正競合情報182を参照し、修正優先度比較結果282に基づいてテーブル112の対応する箇所に×を入力する。修正競合情報182の全てのデータに対して入力が完了したら、テーブル112を開発管理マトリクス56として出力し、処理を終了する。
本実施例のソフトウェア開発管理プログラム21により出力された開発管理マトリクス56を用いて、与えられた修正優先度ポリシーの下でコードクローン修正作業順序を最適化する方法について説明する。
実施例2と同様に、開発管理マトリクス56のインデクスの順序がコードクローンの修正順序を表現していると考える。従って、マトリクスにおける×と対角線の距離と、手戻りの大きさの関係は実施例2で説明した通りである。
コードクローンaとコードクローンbに修正競合関係があり、コードクローンbよりもコードクローンaの修正優先度が高い場合、一般にコードクローンaの修正を先に実施した方が、手戻りが少なくて済む可能性が高い。従って、修正競合関係があり、かつ優先度が異なるコードクローンの組では優先度が高いコードクローンの修正順序が先になることが望ましい。これは、開発管理マトリクス56においては、×ができるだけ対角線の下側の三角領域に位置することに対応する。例えば、図30において3行2列の×は対角線の下側の三角領域に位置しているため、修正作業の順序は優先度の高いクローン2の方がクローン3より先となっている。一方逆に、3行4列の×は対角線の上側の三角領域に位置しているため、修正作業の順序は優先度の高いクローン4の方がクローン3より後となってしまっている。
以上の事から、以下を満たすように開発管理マトリクス56のインデクスの順序を並び替えることで、手戻りの小さなコードクローン修正順序を得ることができる。
1.×が対角線の下側の三角領域にできるだけ集まる
2.×がマトリクスの対角線にできるだけ近くなる
開発管理マトリクス56のインデクスの順序を並べ替える処理は、実施例2の場合と同様に、公知の技術を使用できる。DSM(Design Structure Matrix)における手法を適用して、上記の2つの条件を満足する開発管理マトリクス56のインデクスの順序を並べ替えるアルゴリズムには,パス探索による方法,隣接行列のべき乗による方法,グラフ理論による方法など,様々な方法がある。それらのうちいずれかの方法を採用して、本実施例では、図に示していない優先度付き競合作業指針導出部が実施する。
「×がマトリクスの対角線にできるだけ近くする」処理に加えて「×が対角線の下側の三角領域にできるだけ集める」処理を行うことが実施の形態2で示した競合作業指針導出部との違いである。
図31は図30の開発管理マトリクス56のインデクスの順序を、上記1、2を満たすように並べ替えた一例である。例えば、図30に比べて図31では、インデクスの順番を入れ替えることにより、3行4列の×が対角線の下に移動している。これにより、コードクローン3とコードクローン4の修正順序は、優先度の高いコードクローン4の方が先となるように改善されている。
このように、本実施例のソフトウェア開発管理プログラム21により出力された開発管理マトリクス56を用いて、与えられた修正優先度ポリシーの下でコードクローン修正作業順序を最適化することができる。
なお、以上すべての実施例において、開発管理対象は、ソースコードのかわりにテストコード等であっても本発明の趣旨を逸脱しない範囲で実施可能である。ここでテストコードとは、ソフトウェアが正しく動作するか確認するためのソフトウェアを、通常のソフトウェアのソースコードと同様、プログラミング言語で記述したものである。通常のソフトウェアのソースコードと同様に、チームの担当範囲や修正の順序が開発プロセスにおいて問題となることがある。
1 CPU
2 ROM
3 RAM
4 バス
5 HDD
6 CDROMドライブ
7 CDROM
8 NIC
9 入力装置
10 表示装置
11 ソフトウェア開発管理装置
21 ソフトウェア開発管理プログラム
22 コードクローン検出部
23 コードクローン分布解析部
24 マトリクス生成部
25 ユーティリティ・ライブラリプログラム
26 OS
31 開発管理対象ソフトウェア
51 ソースコード
52 コードクローン検出結果
53 構成要素情報
54 コードクローン分布情報
55 担当チーム情報
56 開発管理マトリクス
111 テーブル作成部
112 テーブル
113 マトリクス要素入力部
181 修正競合判定部
182 修正競合情報
251 修正優先度ポリシー
252 コードクローン修正優先度決定部
253 コードクローン修正優先度情報
281 修正優先度比較部
282 修正優先度比較結果

Claims (8)

  1. 開発管理対象ソフトウェアのソースコード、またはテストコードを入力して、コードクローンの所在を検出するコードクローン検出部と、
    前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報を入力して、前記コードクローン検出部の検出結果とより、各構成要素に対するコードクローンの分布を解析し、コードクローンと、構成要素との対応関係を表わすコードクローン分布情報を出力するコードクローン分布解析部と、
    前記コードクローン分布情報よりコードクローンを対象とする変更あるいは修正作業における作業依存関係情報を出力する作業依存関係情報生成部と、
    を備えたことを特徴とするソフトウェア開発管理装置。
  2. 請求項1に記載するソフトウェア開発管理装置において、
    前記作業依存関係情報生成部に対応する部分が、
    前記開発管理対象ソフトウェアの各構成要素に対する担当チームの情報を入力して、前記コードクローン分布情報とより、前記開発管理対象ソフトウェアの構成要素と担当チームの関係、および、各構成要素に対するコードクローンの分布状況を一つのマトリクスで表現した開発管理マトリクスを作成して出力するマトリクス生成部
    であることを特徴とするソフトウェア開発管理装置。
  3. 請求項1に記載するソフトウェア開発管理装置において、
    前記作業依存関係情報生成部に対応する部分が、
    前記コードクローン分布情報に従って、コードクローンのクローンIDを行、列のインデクスとするマトリクステーブルを作成するテーブル作成部と、
    前記コードクローン分布情報に従って、それぞれのコードクローンの組に対して修正が競合するかどうかを判定し、結果を修正競合関係にあるコードクローンの組の配列として表わす修正競合情報を出力する修正競合判定部と、
    前記修正競合情報に基づいて前記マトリクステーブルに、行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、開発管理マトリクスを作成して、出力するマトリクス要素入力部と、
    を備えるマトリクス生成部
    であることを特徴とするソフトウェア開発管理装置。
  4. 請求項3に記載するソフトウェア開発管理装置において、
    各コードクローンに対して優先度を決定可能とする修正優先度の決め方を定めた情報修正優先度ポリシーを入力して、前記コードクローン分布情報に含まれる各コードクローンの修正優先度を決定して、結果をコードクローンIDと修正優先度情報を対応付けたコードクローン修正優先度情報を出力するコードクローン修正優先度決定部を更に備え、
    前記マトリクス生成部に、前記コードクローン修正優先度情報に従い、前記修正競合情報にあるコードクローンの組の修正優先度を比較し、その結果を修正優先度比較結果として出力する修正優先度比較部を更に備え、
    前記マトリクス要素入力部が、前記修正競合情報と前記修正優先度比較結果に基づいて前記マトリクステーブルに、修正競合の関係のあるコードクローンの組のIDがaとbであり、aの方がbより優先度が高い場合、b行a列の要素に行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、またはaとbの優先度が同じ場合、b行a列の要素、およびa行b列の要素のいずれにも行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力して、開発管理マトリクスを作成して、出力することを特徴とするソフトウェア開発管理装置。
  5. CPUと記憶装置と入力装置と出力装置とを少なくとも有する情報処理装置として実現されるソフトウェア開発管理装置において、
    開発管理対象ソフトウェアのソースコード、またはテストコード、前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報を入力するステップと、
    前記開発管理対象ソフトウェアのソースコード、またはテストコードからコードクローンの所在を検出するステップと、
    前記開発管理対象ソフトウェアのファイルと構成要素との対応関係を表わす構成要素情報と、及び前記コードクローンの検出結果から各構成要素に対するコードクローンの分布を解析し、コードクローンと、構成要素との対応関係を表わすコードクローン分布情報を出力するステップと、
    前記コードクローン分布情報からコードクローンを対象とする変更あるいは修正作業における作業依存関係の情報を出力するステップとを有することを特徴とするソフトウェア開発管理方法。
  6. 請求項5に記載するソフトウェア開発管理方法において、
    更に、前記開発管理対象ソフトウェアの各構成要素に対する担当チームの情報を入力するステップを有し、
    前記作業依存関係の情報を出力するステップを、
    前記開発管理対象ソフトウェアの各構成要素に対する担当チームの情報と、前記コードクローン分布情報とから前記開発管理対象ソフトウェアの構成要素と担当チームの関係、および、各構成要素に対するコードクローンの分布状況を一つのマトリクスで表現した開発管理マトリクスを作成して出力するステップとを有するように替えたことを特徴とするソフトウェア開発管理方法。
  7. 請求項5に記載するソフトウェア開発管理方法において、
    前記作業依存関係の情報を出力するステップを、
    前記コードクローン分布情報に従って、コードクローンのクローンIDを行、列のインデクスとするマトリクステーブルを作成するステップと、
    前記コードクローン分布情報に従って、それぞれのコードクローンの組に対して修正が競合するかどうかを判定し、結果を修正競合関係にあるコードクローンの組の配列として表わす修正競合情報を出力するステップと、
    前記修正競合情報に基づいて前記マトリクステーブルに、行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、開発管理マトリクスを作成して、出力するステップとを有するように替えたことを特徴とするソフトウェア開発管理方法。
  8. 請求項7に記載するソフトウェア開発管理方法において、
    各コードクローンに対して優先度を決定可能とする修正優先度の決め方を定めた情報修正優先度ポリシーを入力して、前記コードクローン分布情報に含まれる各コードクローンの修正優先度を決定して、結果をコードクローンと修正優先度情報を対応付けたコードクローン修正優先度情報を出力するステップと、
    前記コードクローン修正優先度情報に従い、前記修正競合情報にあるコードクローンの組の修正優先度を比較し、その結果を修正優先度比較結果として出力するステップとを更に有し、
    前記開発管理マトリクスを作成して、出力するステップを、前記修正競合情報と前記修正優先度比較結果に基づいて前記マトリクステーブルに、修正競合の関係のあるコードクローンの組のIDがaとbであり、aの方がbより優先度が高い場合、b行a列の要素に行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力し、またはaとbの優先度が同じ場合、b行a列の要素、およびa行b列の要素のいずれにも行と列のインデクスに対応するコードクローン間に修正の競合関係があることを示す値を入力して、開発管理マトリクスを作成して、出力するステップに替えたことを特徴とするソフトウェア開発管理方法。
JP2013230426A 2013-11-06 2013-11-06 ソフトウェア開発管理装置およびその方法 Active JP6199160B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013230426A JP6199160B2 (ja) 2013-11-06 2013-11-06 ソフトウェア開発管理装置およびその方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013230426A JP6199160B2 (ja) 2013-11-06 2013-11-06 ソフトウェア開発管理装置およびその方法

Publications (2)

Publication Number Publication Date
JP2015090596A true JP2015090596A (ja) 2015-05-11
JP6199160B2 JP6199160B2 (ja) 2017-09-20

Family

ID=53194088

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013230426A Active JP6199160B2 (ja) 2013-11-06 2013-11-06 ソフトウェア開発管理装置およびその方法

Country Status (1)

Country Link
JP (1) JP6199160B2 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010113449A (ja) * 2008-11-05 2010-05-20 Hitachi Ltd ソフトウェア分析装置
JP2011096082A (ja) * 2009-10-30 2011-05-12 Hitachi Ltd プログラム解析方法、プログラム解析プログラムおよびプログラム解析装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010113449A (ja) * 2008-11-05 2010-05-20 Hitachi Ltd ソフトウェア分析装置
JP2011096082A (ja) * 2009-10-30 2011-05-12 Hitachi Ltd プログラム解析方法、プログラム解析プログラムおよびプログラム解析装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
角田 良明 編著, 「ネットワークソフトウェア」, vol. 初版, JPN6017027268, 15 January 2013 (2013-01-15), pages pp.115−118 *

Also Published As

Publication number Publication date
JP6199160B2 (ja) 2017-09-20

Similar Documents

Publication Publication Date Title
JP4239932B2 (ja) 生産管理システム
US20100042745A1 (en) Workflow diagram generation program, apparatus and method
US20090077013A1 (en) Methods, systems, and computer program products for user-driven targeted query re-optimizations using delta values
US20120109606A1 (en) Automated interactive multi-objective optimization-based systems design tool
Medeiros et al. Requirements Engineering in Agile Projects: A Systematic Mapping based in Evidences of Industry.
JP5614843B2 (ja) ソフトウェア設計・運用統合管理システム
Gondro et al. Quality control for genome-wide association studies
JP5942481B2 (ja) 運用作業管理システム、方法、及びプログラム
KR101230007B1 (ko) 의사결정문제 해결 대응 시스템
JP6244274B2 (ja) 相関ルール分析装置および相関ルール分析方法
CN104462461A (zh) 对表单进行排查空值处理的方法及装置
EP2930577A1 (en) Controlling a manufacturing plant with a MES system
JPWO2009011057A1 (ja) アプリケーション解析プログラム、アプリケーション解析方法およびアプリケーション解析装置
JP6199160B2 (ja) ソフトウェア開発管理装置およびその方法
Corea et al. A taxonomy of business rule organizing approaches in regard to business process compliance
Al-Zubidy et al. Review of systematic literature review tools
Snipes et al. Code hot spot: A tool for extraction and analysis of code change history
JP5168099B2 (ja) 改修作業範囲分割プログラム,改修作業範囲分割装置,及び改修作業範囲分割方法
JP7295792B2 (ja) データ分析装置およびデータ分析方法
JP7275504B2 (ja) 情報処理装置、分析モデル管理方法及び分析モデル管理プログラム
KR101609292B1 (ko) 연구 개발 프로젝트 관리 장치 및 방법
KR101649913B1 (ko) 연구 개발 프로젝트 관리 장치 및 방법
Elstner et al. From product development to market introduction: A co-citation analysis in the field of ramp-up
Heiser et al. Revealing hidden structures in organizational transformation–a case study
Altavilla et al. Interdisciplinary life cycle data analysis within a knowledge-based system for product cost estimation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160802

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170712

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170725

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170823

R150 Certificate of patent or registration of utility model

Ref document number: 6199160

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150