以下、実施例について図面を用いて説明する。なお、図面において、同一符号は、同一または相当部分を示す。また、本発明は、図示例に限定されるものではない。
本実施例は、母体ソースコードに機能を追加する典型的な開発フローのうち、設計工程の作業について説明する。
図1は、本発明の実施例1を示すシステムの全体構成図である。図1において、システム(ソフトウェア開発支援システム)は、開発マシン10と、管理サーバ12を備え、開発マシン10が管理サーバ12に接続される。開発マシン10は、ディスプレイ102と、周辺機器103と、中央処理演算装置104と、記憶装置105から構成される。ディスプレイ102は、情報を表示する表示装置あるいは情報を出力する出力装置として構成され、周辺機器103は、キーボード等を有し、情報を入力する入力装置として構成される。この際、ディスプレイ102と周辺機器103を、情報を入出力する入出力装置として構成することができる。中央処理演算装置104は、例えば、CPU(Central Processing Unit)、メモリ、入出力インタフェース等の情報処理資源を備えたコンピュータ装置として構成され、CPUによって実行されるソフトウェア14を備え、記憶装置105は、情報記憶部16を備えている。ソフトウェア14は、ユーザインタフェース表示部108と、ソース構成管理部109と、ソース依存関係解析部110と、ソースメトリクス解析部111と、フラグ管理部112から構成される。情報記憶部16は、変更中ソースコード113と、ソースコードデータベース114から構成される。この際、中央処理演算装置104は、記憶装置105を管理すると共に、入出力装置と情報の送受信を行うコントローラとして機能する。
1又は複数の開発マシン10から利用される管理サーバ12は、中央処理演算装置106と、記憶装置107から構成され、開発マシン10と情報の送受信を行って記憶装置107を管理する。記憶装置107は、情報記憶部18を備えている。中央処理演算装置106は、例えば、CPU、メモリ、入出力インタフェース等の情報処理資源を備えたコンピュータ装置として構成される。情報記憶部18は、構成管理データベース115と、チェックフラグデータベース116から構成される。この際、開発者101は、ディスプレイ102と周辺機器103を通じて開発マシン10を利用する。
ユーザインタフェース表示部108は、ソース構成管理部109と、ソース依存関係解析部110と、ソースメトリクス解析部111と、フラグ管理部112のうちいずれかの処理内容や処理結果などをディスプレイ102に表示するためのソフトウェア(プログラム)である。ソース構成管理部109は、ソースコードのバージョン管理をするためのソフトウェアであって、変更中ソースコード113と構成管理データベース115に接続され、複数のユーザ(開発者)がいつどのソースコードを変更したかを管理している。ソース依存関係解析部110は、ソースコードに含まれる関数および変数間の参照関係を解析するためのソフトウェアであり、変更中ソースコード113とソースコードデータベース114に接続される。基本的にソースコードの静的解析技術に基づいて処理されるが、ロジカルカップリングなどのアルゴリズムに基づいて処理される実現形態もある。ソースメトリクス解析部111は、ソースコードに属する各関数および変数に関係するメトリクス(数値情報)を計測するソフトウェアであり、変更中ソースコード113とソースコードデータベース114に接続される。なお、後に説明する実施例では他依存数のみを表示しているが、複雑度や変更頻度等のメトリクスを扱う実現形態もある。フラグ管理部112は、チェックフラグデータベース116に接続され、チェックフラグデータベース116に記録されたチェックフラグデータを管理するためのソフトウェアである。構成管理データベース115は、ソース構成管理部109と連携してソースコードの構成管理を行う。チェックフラグデータベース116は、フラグ管理部112と連携してチェックフラグデータを保存する。
図2は、テーブルとデータベースの構成図であって、(a)は、要素依存関係の例を示すテーブルの構成図、(b)は、ソースコードデータベースに保存されるテーブルの構成図、(c)は、構成管理データベースの構成図、(d)は、チェックフラグデータベースに保存されるテーブルの構成図である。
図2(a)において、要素依存関係の例を示すテーブル201は、記憶装置105に保存されるテーブルであって、本ツールが対象とするソースコード中の関数および変数の依存関係を表わしたグラフに関する情報として、「関数:func1」、「関数:func2」、「変数:value1」、「関数:func3」から構成される。ここで、本実施例では、ソースコード中に存在する関数および変数を要素と呼ぶ。テーブル201では、「関数:func2」が「変数:value1」と「関数:func3」を参照し、「関数:func2」は「関数:func1」から参照されている依存関係であることを示している。依存関係は、矢印202で示している。
図2(b)において、ソースコードデータベース114には、要素テーブル203と、変更影響テーブル204が保存される。要素テーブル203は、要素ID205と、ファイル206と、関数/変数207と、他依存数208から構成される。要素ID205には、要素を一意に識別するための識別子が格納される。ファイル206には、ファイルを特定するファイル名などの情報が格納される。関数/変数207には、関数又は変数を特定する情報(関数名、変数名)が格納される。他依存数208には、関数/変数207に記録された関数又は変数の他に、要素と依存関係を有するものが存在する数を示す情報(数値情報)が格納される。
変更影響テーブル204は、変更元要素ID209と、変更影響要素ID210と、変更影響タイプ211から構成される。変更元要素ID209と変更影響要素ID210は、要素ID205で定義されたIDに対応するIDであって、変更元要素ID209には、要素の変更元を示す変更元要素を識別するための識別子が格納される。例えば、要素ID205のうち「要素2」が変更される場合(変更予定の場合)、変更元要素ID209には、「2」が格納される。変更影響要素ID210には、変更元要素の変更に伴って影響を受ける要素を識別するための識別子が格納される。例えば、要素ID205のうち「要素2」の変更の影響を受ける要素が「1」、「3」、「4」である場合、変更影響要素ID210には、「1」、「3」、「4」が格納される。変更影響要素ID210には、変更影響要素ID210に格納された要素が変更元要素によって呼び出されるタイプである場合、「呼出」の情報が格納され、変更影響要素ID210に格納された要素が変更元要素を呼び出すタイプである場合、「被呼出」の情報が格納される。
図2(c)において、構成管理データベース115には、ソースコード212が保存される。ソースコード212は、複数のバージョン213によって管理されている。各バージョン213には、更新日時が保存されており、最新バージョン213のソースコード212を取出すことができる。
図2(d)において、チェックフラグデータベース116には、変更フラグテーブル214が保存される。変更フラグテーブル214は、ファイル215と、関数/変数216と、ソース構成管理状態217と、変更予定状態218と、変更衝突状態219と、更新者220と、更新日時221から構成される。ファイル215には、ファイル206と同様の情報であって、ファイルを特定するファイル名などの情報が格納される。関数/変数216には、関数/変数207と同様の情報であって、関数又は変数を特定する情報(関数名、変数名)が格納される。ソース構成管理状態217には、ソース構成管理が未変更の場合、「未変更」の情報が格納され、ソース構成管理が変更済である場合、「変更済」の情報が格納される。変更予定状態218には、変更予定(要素の変更予定)が未確認の場合には、「未確認」の情報が格納され、変更予定が変更不要である場合、「変更不要」の情報が格納され、変更予定が必要である場合、「変更必要」の情報が格納される。変更衝突状態219には、衝突の有無を示す情報(要素間で衝突(重複)が生じたか否かを示す情報)が格納される。更新者220には、ソースコードを変更した更新者の名称を示す情報が格納される。更新日時221には、ソースコードが変更された更新日時を示す情報が格納される。なお、図2(d)では、変更フラグテーブル214には、テーブル201の初期状態の情報が格納されている。
図3は、ソース構成管理部の処理を説明するためのフローチャートである。図3において、開発者101がソースコードの変更を行う場合には、構成管理データベース115上のソースコードではなく、記憶装置105上のローカルソースコードを変更する。この変更が完了した段階で、開発者101がソースコードの登録を指示すると、ソース構成管理部109による処理が開始される(ステップ301)。まず、ソース構成管理部109は、変更中ソースコード(変更中のソースコード)113と、構成管理データベース115中の最新のバージョン213のソースコード212とを比較し(ステップ302)、差分があるか否かを判定し(ステップ303)、差分がない場合、このルーチンでの処理を終了し、差分がある場合、構成管理データベース115に、変更中ソースコードを最新バージョンとして登録し(ステップ304)、このルーチンでの処理を終了する。この処理は一般的なソースコード構成管理ツールが持つ処理である。
図4は、ソース依存関係解析部の処理を説明するためのフローチャートである。図4において、ソース依存関係解析部110は、後に説明する一覧画面(変更影響チェック画面)801を呼出したタイミング、もしくは、変更中ソースコード113が変更されたタイミング、もしくは、定期的なスケジュールで、ソース(ソースコード)の依存関係解析を開始する(ステップ401)。ソース依存関係解析部110は、ステップ401で処理が開始されると、変更中ソースコード113の持つすべての要素でループを行い(ステップ402)、変更中ソースコード113の各要素の依存関係を計測し(ステップ403)、計測結果を、ソースコードデータベース114の変更影響テーブル204に依存関係を示す情報として保存する(ステップ404)。ソース依存関係解析部110は、この処理をすべての要素に対して行い、このルーチンでの処理を終了する(ステップ405)。この処理は一般的なソース依存関係解析ツールが持つ処理である。
図5は、ソースメトリクス解析部の処理を説明するためのフローチャートである。図5において、ソースメトリクス解析部111は、後に説明する一覧画面(変更影響チェック画面)801を呼出したタイミング、もしくは、変更中ソースコード113が変更されたタイミング、もしくは、定期的なスケジュールで、ソース(ソースコード)のメトリクス解析を開始する(ステップ501)。ソースメトリクス解析部111は、ステップ501で処理が開始されると、変更中ソースコード113の持つすべての要素でループを行い(ステップ502)、変更中ソースコード113の各要素のメトリクスを計測し(ステップ503)、計測結果を、ソースコードデータベース114の要素テーブル203に、各要素のメトリクスを示す情報として保存する(ステップ504)。ソースメトリクス解析部111は、この処理をすべての要素に対して行い、このルーチンでの処理を終了する(ステップ505)。この処理は一般的なソースメトリクス解析ツールが持つ処理である。
図6は、母体ソースコードに機能を追加する典型的な開発フローを示すフローチャートである。図6において、開発プロセスの始点601から、開発者101が処理を開始し、母体コード(ソースコード)を読込むための操作を実行すると、ユーザインタフェース表示部108が、ソース構成管理部109を介して構成管理データベース115から母体コード(ソースコード)を読込み、読込んだ母体コード(ソースコード)をディスプレイ102上に表示する。この際、開発者101は、ディスプレイ102上に表示された母体コード(ソースコード)に対して、周辺機器103のキーボード等を操作して、機能の追加を設計する(ステップ602)。例えば、「func2」を変更するための設計を行う。この際、フラグ管理部112は、ステップ602にて、例えば、「func2」を変更する際の変更影響チェックを行い、チェック結果(「func2」の変更の影響を受ける関数又は変数等の情報)をチェックフラグデータベース116に登録する。
次に、開発者101は、周辺機器103のキーボード等を操作して、ステップ603にて追加された機能をソースコード上に実装する(ステップ603)。この後、開発者101が、母体コード(ソースコード)とチェックフラグを読込むための操作を実行すると、ユーザインタフェース表示部108が、ソース構成管理部109を介して構成管理データベース115から母体コード(ソースコード)を読込み、フラグ管理部112を介してチェックフラグデータベース116からチェックフラグを読込み、読込んだ母体コード(ソースコード)とチェックフラグをディスプレイ102上に表示する。この際、開発者101は、ディスプレイ102上に表示された母体コード(ソースコード)とチェックフラグを参照して、機能の実装完了チェックを行う(ステップ604)。例えば、開発者101は、表示された母体ソースコードとチェックフラグとを比較し、変更影響チェックを行う。この際、開発者101は、チェック結果に問題が発生していれば、さらにソースコードの修正を行う。チェック結果が良好であれば、変更後コード(ソースコード)を構成管理データベース115に登録するための操作を実行する。これにより、開発プロセスは終点605で終了する。
図7は、ユーザインタフェース表示部で管理されるシンボルの凡例を示す構成図である。図7において、ユーザインタフェース表示部108は、フラグ管理部112を介して、チェックフラグデータベース116の変更フラグテーブル214のうちソース構成管理状態217の情報をソース構成管理状態701の情報として、変更予定状態218の情報を変更予定状態702の情報として、変更衝突状態219の情報を変更衝突状態703の情報として管理すると共に、各情報をシンボルに対応づけて管理し、管理された情報とシンボルをディスプレイ102の画面上に表示する。ソース構成管理状態701の情報とシンボルは、未変更(レ点)と変更済(!)から構成される。変更予定状態702の情報とシンボルは、未確認(?)、変更不要(N)、変更必要(C)から構成される。変更衝突状態703の情報とシンボルは、変更衝突状態(×)から構成される。各々のカテゴリ内では同時に表示されるものは一つのシンボルに限られるが、ソース構成管理状態701、変更予定状態702、変更衝突状態703に関する情報やシンボルは、一つの要素に対して同時に表示される可能性がある。
図8は、関数に対して変更必要のフラグを立てたときの状態を説明するための図であって、(a)は、ディスプレイの表示例を示す構成図、(b)は、変更フラグテーブルの構成図である。図8において、開発者101が、周辺機器103を操作して、ディスプレイ102の画面上に一覧画面801を表示させ、ユーザインタフェース表示部108を通じて「func2」に対して変更必要(変更予定)のフラグ(C)を立てることを指示すると、ソース依存関係解析部110は、指示された情報を基にソースコードデータベース114を参照して、「func2」と呼出または被呼出の関係にある関数又は変数として、例えば、「value1」、「func3」、「func1」に未確認フラグ(?)を立てるための処理を実行する。この処理結果がユーザインタフェース表示部108を介してディスプレイ102に転送されると、ディスプレイ102の一覧画面801には、ソース依存関係解析部110の参照結果が表示される。この際、開発者101は、表示された一覧画面801の内容を参照することができる。
一覧画面801には、変更元(要素の変更元)802に関する情報として、「func2」のファイル(FileA.c)および関数/変数「func2」が表示され、変更影響803として、「func2」の変更の影響を受けるファイルおよび関数/変数であって、要素テーブル203と変更影響テーブル204に登録されたファイル名(FileA.h、FileB.c、FileC.c)および関数/変数の名称(value1、func3、func1)が表示され、変更影響タイプ804として、変更影響テーブル204に登録された「呼出」または「被呼出」が表示され、メトリクス805として、要素テーブル203の他依存数208に登録された情報(他依存数:15など)が表示される。この際、変更元802の関数/変数「func2」には、未変更を示すシンボルレ点と、変更必要(変更予定)を示すシンボル(C)がフラグ(チェックフラグ)として表示される。また、変更影響803の関数/変数(value1、func3、func1)には、未変更を示すシンボルレ点と、未確認を示すシンボル(?)がフラグ(チェックフラグ)として表示される。
開発者101は、この一覧画面801を参照し、自分が設計したい機能に必要な母体コード(ソースコード)の変更範囲を検討する。変更範囲の検討にあたっては、変更影響タイプ804とメトリクス805を参照して、変更影響のインパクトを参考にすることができる。ここで示した変更影響タイプ804とメトリクス805は一部の例であり、変更影響の分析に役立つ様々な項目を追加した実現形態がある。
また、変更フラグテーブル214のファイル215には、ファイル名(FileA.h、FileA.c、FileB.c、FileC.c)が登録され、関数/変数216には、関数又は変数の名称(value1、func2、func3、func1)が登録され、ソース構成管理状態217には、各ファイルが未変更であることを示すために、「未変更」の情報が登録され、変更予定状態218には、「func2」の欄のみ、変更必要(変更予定)であることを示すために、「変更必要」の情報が登録され、他の欄には、変更必要であるか否かは未確認であることを示すために、「未確認」の情報が登録され、更新者220には、開発者101の名称が登録され、更新日時221には、開発者101による更新日時の情報が登録される。なお、変更フラグテーブル214には、ファイル215に対応して、要素IDの情報を登録することもできる。
図9は、フラグ管理部の処理を説明するためのフローチャートである。この処理は、開発者101が未確認フラグ(?)を立てるための操作を実行することによって開始される(ステップ901)。フラグ管理部112は、処理が開始されると、未確認フラグ(?)を立てるための操作による情報を基に要素テーブル203を参照して、要素テーブル203のすべての要素IDでループを開始し(ステップ902)、要素テーブル203の要素IDを基に変更フラグテーブル214から、ループ処理中の要素IDに該当する行(要素IDで特定されるファイルに該当する行)を取得する(ステップ903)。
次に、フラグ管理部112は、変更フラグテーブル214を参照して、要素が変更必要(変更予定)であるか否か、即ち、要素IDで特定されるファイルが変更必要(変更予定)である否かを判定し(ステップ904)、このステップで否定の判定結果を得た場合、このルーチンでの処理を終了し、このステップで肯定の判定結果を得た場合、要素テーブル203の要素IDを基に変更影響テーブル204から変更元要素IDが一致する複数行を取得し(ステップ905)、取得した複数行でループを開始する(ステップ906)。
次に、フラグ管理部112は、ループ中の処理として、取得した複数行のうち該当行の変更影響要素IDを変更影響テーブル204から取得し(ステップ907)、取得した変更影響要素IDを基に変更フラグテーブル214のうち要素IDが一致する行(要素IDで特定されるファイルが一致する行)を取得し(ステップ908)、変更予定状態が「変更必要(C)」でないか否かを判定し(ステップ909)、このステップで肯定の判定結果を得た場合、変更予定状態を未確認(?)に変更し(ステップ910)、その後、このルーチンでの処理を終了し、ステップ909で否定の判定結果を得た場合、即ち、変更必要(変更予定)(C)である場合、何もせずループを継続し、その後、このルーチンでの処理を終了する。最終的にすべての要素テーブル203に含まれる要素IDで処理を行い、ステップ911で処理を終了する。ここで示したアルゴリズムは基本的な流れを示したため、実際には未確認(?)範囲を最小化する応用アルゴリズム等を持つ実現形態がある。
図10は、設計が終了した時点のフラグの状態を説明するための図であって、(a)は、ディスプレイの表示例を示す構成図、(b)は、変更フラグテーブルの構成図である。図10において、開発者101が、周辺機器103を操作して、ディスプレイ102の画面上に一覧画面801を表示させ、ユーザインタフェース表示部108を通じて「func2」等を変更するための設計が完了したことを指示すると、ソース依存関係解析部110は、指示された情報を基にソースコードデータベース114を参照して、「func2」と呼出または被呼出の関係にある関数又は変数(value1、func3、func1)にシンボルを表示するための処理を実行する。この処理結果がユーザインタフェース表示部108を介してディスプレイ102に転送されると、ディスプレイ102の一覧画面801には、ソース依存関係解析部110の参照結果が表示される。この際、開発者101は、表示された一覧画面801の内容を参照することができる。
一覧画面801には、変更元802に関する情報として、「func2」のファイルの名称(FileA.c)および関数/変数の名称(func2)が表示され、変更影響803として、「func2」の変更の影響を受けるファイルおよび関数/変数であって、要素テーブル203と変更影響テーブル204に登録されたファイルの名称(FileA.h、FileB.c、FileC.c)および関数/変数の名称(value1、func3、func1)が表示され、変更影響タイプ804として、変更影響テーブル204に登録された「呼出」または「被呼出」が表示され、メトリクス805として、要素テーブル203の他依存数208に登録された情報(他依存数:15など)が表示される。この際、変更元802の関数/変数「func2」には、未変更を示すシンボルレ点と、変更必要(変更予定)を示すシンボル(C)がフラグ(チェックフラグ)として表示される。また、変更影響803の関数/変数(value1、func3、func1)には、未変更を示すシンボルレ点と、変更不要を示すシンボル(N)または変更必要を示すシンボル(C)がフラグ(チェックフラグ)として表示される。
この際、開発者101は、一覧画面801を見ることで、すべての未確認フラグ(?)が、変更予定フラグ(C)または変更不要フラグ(N)に付け替えられているかどうかを確認できる。そのため、未確認フラグが残っていた場合には、すべての未確認フラグ(?)は、ユーザインタフェース表示部108により強調表示(図中では白黒反転表示)される。これにより、開発者101の設計時点における変更影響の考慮漏れが抑止される。
また、変更フラグテーブル214のファイル215には、ファイルの名称(FileA.h、FileA.c、FileB.c、FileC.c)が登録され、関数/変数216には、関数/変数の名称(value1、func2、func3、func1)が登録され、ソース構成管理状態217には、各ファイルが未変更であることを示すために、「未変更」の情報が登録され、変更予定状態218には、「func2」と「func3」の欄のみ、変更必要(変更予定)であることを示すために、「変更必要」の情報が登録され、他の欄には、変更不要であることを示すために、「変更不要」の情報が登録され、更新者220には、開発者101の名称が登録され、更新日時221には、開発者101による更新日時の情報が登録される。変更フラグテーブル214には、一覧画面801に表示されたフラグ(チェックフラグ)に関連した情報が格納される。この際、更新者と更新日時の情報が保存されるため、誰が何時どのような判断を行ったかという設計エビデンスが保存される。
本実施例によれば、新しい機能を追加する開発者101が、実装前の設計工程に本システムを利用することで、抜け漏れなく(変更影響のチェック漏れなく)ソースコードを変更することを支援することができる。具体的には、設計が終了した時点で、一覧画面801には、変更元802に関する情報と変更影響803の情報が表示されるので、開発者101は、一覧画面801を参照することで、ソードコードに属する要素のうち変更元要素と変更元要素の影響を受ける要素との関連を確認することができる。また、一覧画面801には、未確認フラグ、変更予定フラグまたは変更不要フラグがシンボルとして表示されるので、開発者101は、ソードコードに属する要素を変更したか否か等を容易に確認することができる。さらに、一覧画面801には、未確認フラグが残っていた場合には、未確認フラグが強調して表示されるので、開発者101の設計時点における変更影響の考慮漏れが抑止される。また、一覧画面801のメトリクス805には、他依存数が数値情報で表示されるので、開発者101は、他依存数が設定値よりも多い要素(他依存数:15)については、変更すると影響が大きいので、変更しない方が良いと判断できる。
本実施例は、母体ソースコードに機能を追加する典型的な開発フローのうち、ソースコードの変更を行う実装工程の作業の例である。
図11は、設計を行った後、ソースコードの変更を実施した状態を説明するための図であって、(a)は、実施例2におけるディスプレイの表示例を示す構成図、(b)は、実施例2における変更フラグテーブルの構成図である。図11において、開発者101が、周辺機器103を操作して、ディスプレイ102の画面上に一覧画面801を表示させ、ユーザインタフェース表示部108を通じて「func2」等を変更するための設計が完了した後、ソースコードの変更を指示すると、ソース依存関係解析部110は、指示された情報を基にソースコードデータベース114を参照して、「func2」と呼出または被呼出の関係にある関数又は変数(value1、func3、func1)にシンボルを表示するための処理を実行する。この処理結果が、ユーザインタフェース表示部108を介してディスプレイ102に転送されると、ディスプレイ102の一覧画面801には、ソース依存関係解析部110の参照結果が表示される。この際、開発者101は、表示された一覧画面801の内容を参照することができる。
一覧画面801には、変更元802に関する情報として、「func2」のファイル(FileA.c)および関数/変数「func2」が表示され、変更影響803として、「func2」の変更の影響を受けるファイルおよび関数/変数であって、要素テーブル203と変更影響テーブル204に登録されたファイルの名称(FileA.h、FileB.c、FileC.c)および関数/変数の名称(value1、func3、func1)が表示され、変更影響タイプ804として、変更影響テーブル204に登録された「呼出」または「被呼出」が表示され、メトリクス805として、要素テーブル203の他依存数208に登録された情報(他依存数:15など)が表示される。この際、変更元802の関数/変数「func2」には、変更済を示すシンボル(!)と、変更必要(変更予定)を示すシンボル(C)がフラグ(チェックフラグ)として表示される。また、変更影響803の関数/変数(value1、func3、func1)には、未変更を示すシンボルレ点または変更済を示すシンボル(!)、変更不要を示すシンボル(N)または変更必要を示すシンボル(C)がフラグ(チェックフラグ)として表示される。
この際、開発者101は、一覧画面801を見ることで、設計通り変更されているか否かを確認することができる。例えば、要素(func2)が変更予定(C)で且つ変更済(!)の場合であって、要素(value1)が変更不要(N)で且つ未変更(レ点)の場合は、設計通り実装されている望ましい例である。一方、要素(func2)が変更予定(C)で且つ変更済(!)の場合であって、要素(func3)が、変更予定(C)にもかかわらず未変更(レ点)の場合と、要素(func2)が変更予定(C)で且つ変更済(!)の場合であって、要素(func1)が、変更不要(N)にもかかわらず変更済(!)の場合は、設計通り変更されておらず望ましくない例である。望ましくないフラグの組合せの場合、シンボルは、ユーザインタフェース表示部108により、強調表示される。ただし、望ましくない例であっても、実装の都合上変更が起きることはよくあるため、操作の制約は設けない。新たに追加された変更要素を変更予定(C)に変更し、再チェックをかけることで、変更影響の考慮漏れを抑止した上で、誤った設計を行った事実は開発者のIDとともにチェックフラグデータベース116の変更フラグテーブル214に登録される。
また、変更フラグテーブル214のファイル215には、ファイルの名称(FileA.h、FileA.c、FileB.c、FileC.c)が登録され、関数/変数216には、関数又は変数の名称(value1、func2、func3、func1)が登録され、ソース構成管理状態217には、「func1」のみ「変更済」の情報が登録され、それ以外は、「未変更」の情報が登録され、各ファイルが未変更であることを示すために、「未変更」の情報が登録され、変更予定状態218には、「func2」と「func3」の欄のみ、「変更必要」の情報が登録され、他の欄には、「変更不要」の情報が登録され、更新者220には、開発者101の名称が登録され、更新日時221には、開発者101による更新日時の情報が登録される。
本実施例によれば、新しい機能を追加する開発者101が、実装後に本システムを利用することで、抜け漏れなくソースコードを変更することを支援することができる。具体的には、設計を行った後、ソースコードの変更を実施した場合、一覧画面801には、変更元802に関する情報及び変更影響803の情報と共に、未確認フラグ、変更予定フラグまたは変更不要フラグがシンボルとして表示され、且つ、これらのシンボルのうち設計通り変更されていないフラグの組合せの場合には、シンボルが強調して表示されるので、開発者101は、ソードコードに属する要素が、設計通り変更されていないことを容易に確認することができる。
本実施例は、複数の開発者が並行して機能の追加を行う場合の例である。以下、複数の開発者が並行して機能の追加を行う場合の問題と解決策について説明する。
図12は、実施例3における処理であって、チェックフラグデータベースを参照しない場合の処理を説明するためのフローチャートである。図12において、開発プロセスの始点1201から、開発者Aが処理を開始し、開発者Aが、母体コード(ソースコード)を読込むための操作を実行すると、ユーザインタフェース表示部108が、ソース構成管理部109を介して構成管理データベース115から母体コード(ソースコード)を読込み、読込んだ母体コードをディスプレイ102上に表示する。この際、開発者Aは、ディスプレイ102上に表示された母体コード(ソースコード)に対して、周辺機器103のキーボード等を操作して、機能Aの追加を設計する(ステップ1202)。例えば、「func2」を変更するための設計を行う。次に、開発者Aは、周辺機器103のキーボード等を操作して、ステップ1202にて追加された機能A(機能Aの追加)をソースコード上に実装する(ステップ1203)。この後、開発者Aは、構成管理データベース115から母体コード(ソースコード)を読込むための操作を実行し、ディスプレイ102上に表示された母体コードを参照して、機能Aの実装完了チェックを行い(ステップ1204)、チェック後、変更後コード(ソースコード)を構成管理データベース115に登録するための操作を実行する。これにより、開発プロセスは終点1205で終了する。
一方、開発者Bは、開発プロセスの始点1211から処理を開始する。開発者Bが母体コード(ソースコード)を読込むための操作を実行すると、ユーザインタフェース表示部108は、ソース構成管理部109を介して構成管理データベース115から母体コード(ソースコード)を読込み、読込んだ母体コードをディスプレイ102上に表示する。この際、開発者Bは、ディスプレイ102上に表示された母体コードに対して、周辺機器103のキーボード等を操作して、機能Bの追加を設計する(ステップ1212)。例えば、「func2」を変更するための設計を行う。次に、開発者Bは、周辺機器103のキーボード等を操作して、ステップ1212にて追加された機能B(機能Bの追加)をソースコード上に実装する(ステップ1213)。この後、開発者Bは、構成管理データベース115から母体コード(ソースコード)を読込むための操作を実行し、ディスプレイ102上に表示された母体コードを参照して、機能Bの実装完了チェックを行う(ステップ1214)。この際、開発プロセスを終点1215で終了する前に、修正手戻りの発生や衝突発生検知遅れが生じることがある。
例えば、開発者Aの操作による処理が開発者Bの操作による処理よりも早く完了し、ステップ1204にて、機能Aの変更後コード登録が、ステップ1214における機能Bの実装完了チェックよりも先に実施された場合、ステップ1214における機能Bの母体コード読込みは、機能Bの追加を設計する際に実施したステップ1212における母体コード読込みとは異なるコード(ソースコード)を読込むため、機能Aが変更されたコード(ソースコード)の影響を受ける。具体的には、開発者Bに対して変更予定でないファイルが変更された場合、変更影響チェックをやり直す必要が発生する。この際、場合によっては、ソースコードの修正もやり直す必要がある。この変更影響による衝突を、ステップ1214における母体コード読込みを実施するまで検知することができず、衝突発生検知遅れとなり、機能Bの実装完了チェックの作業において、修正手戻りの発生により、開発工数が長くなってしまう。また、機能Aと機能Bが同じ内容の変更であった場合については、ステップ1213では、二重作業の実施となり、開発者Bが行った、機能Bの追加を実装する作業は無駄になってしまう。
図13は、実施例3における処理であって、チェックフラグデータベースのデータを活用した場合の処理を説明するためのフローチャートである。図13において、開発プロセスの始点1301から、開発者Aが処理を開始し、開発者Aが母体コード(ソースコード)を読込むための操作を実行すると、操作に伴う情報を入力したユーザインタフェース表示部108は、ソース構成管理部109を介して構成管理データベース115から母体コード(ソースコード)を読込み、読込んだ母体コードをディスプレイ102上に表示する。この際、開発者Aは、ディスプレイ102上に表示された母体コードに対して、周辺機器103のキーボード等を操作して、機能Aの追加を設計(例えば、「func2」を変更するための設計)し(ステップ1302)、設計後のチェックフラグをチェックフラグデータベース116に登録するための操作を実行する。
次に、開発者Aは、周辺機器103のキーボード等を操作して、ステップ1302にて追加された機能A(機能Aの追加)をソースコード上に実装する(ステップ1303)。この後、開発者Aが、母体コード(ソースコード)を読込むと共に、チェックフラグを読込むための操作を実行すると、操作に伴う情報を入力したユーザインタフェース表示部108は、ソース構成管理部109を介して構成管理データベース115から母体コード(ソースコード)を読込むと共に、フラグ管理部112を介してチェックフラグデータベース116からチェックフラグを読込み、読込んだ母体コードとチェックフラグをディスプレイ102上に表示する。この際、開発者Aは、ディスプレイ102上に表示された母体コードとチェックフラグを参照して、機能Aの実装完了チェックを行い(ステップ1304)、チェック後、変更後コード(ソースコード)を構成管理データベース115に登録するための操作を実行する。これにより、開発プロセスは終点1305で終了する。
この際、フラグ管理部112は、ソースコードに含まれるシンボルの変更を指示する第一の変更要求を周辺機器103から受付けたとき、当該受付けた第一の変更要求の影響を受ける他のシンボルが変更されているかどうかを示す情報(第一の変更管理情報)をソース構成管理状態217の情報としてチェックフラグデータベース116に格納すると共に、第一の変更要求の影響を受ける他のシンボルの変更予定の有無を示す情報(第一の変更予定情報)を変更予定状態218の情報としてチェックフラグデータベース116に格納する。ユーザインタフェース表示部108は、第一の変更要求で変更を指示されたシンボル、第一の変更要求の影響を受ける他のシンボル、第一の変更要求の影響を受ける他のシンボルが変更されているかどうかを示す情報(第一の変更管理情報)及び、第一の変更要求の影響を受ける他のシンボルの変更予定の有無を示す情報(第一の変更予定情報)をディスプレイ102の画面上に表示させる。
一方、開発者Bは、開発プロセスの始点1311から処理を開始する。開発者Bが母体コード(ソースコード)を読込むと共に、チェックフラグを読込むための操作を実行すると、操作に伴う情報を入力したユーザインタフェース表示部108は、ソース構成管理部109を介して構成管理データベース115から母体コード(ソースコード)を読込むと共に、フラグ管理部112を介してチェックフラグデータベース116からチェックフラグを読込み、読込んだ母体コードとチェックフラグをディスプレイ102上に表示する。この際、開発者Bは、ディスプレイ102上に表示された母体コードに対して、周辺機器103のキーボード等を操作して、機能Bの追加を設計する(ステップ1312)。例えば、「func2」を変更するための設計を行う。この際、フラグ管理部112が衝突(要素間の衝突)を検知した場合、ディスプレイ102上には、何れかの要素に変更衝突が生じたことが表示される。この場合、開発者Bは、開発者Aと実装内容と時期を調整するための話し合いを行う(ステップ1313)。
この際、フラグ管理部112は、ソースコードに含まれるシンボルの変更を指示する第二の変更要求を周辺機器103から受付けたとき、当該受付けた第二の変更要求の影響を受ける他のシンボルが変更されているかどうかを示す情報(第二の変更管理情報)をソース構成管理状態217の情報として保持すると共に、第二の変更要求の影響を受ける他のシンボルの変更予定の有無を示す情報(第二の変更予定情報)を変更予定状態218の情報として保持し、チェックフラグデータベース116に格納された第一の変更管理情報及び第一の変更予定情報と、保持した第二の変更管理情報及び第二の変更予定情報とを比較し、この比較結果から、いずれかの情報間で変更衝突があるか否かを判定し、この判定結果をユーザインタフェース表示部108を介してディスプレイ102に転送する。ユーザインタフェース表示部108は、第二の変更要求で変更を指示されたシンボル、第二の変更要求の影響を受ける他のシンボル、第二の変更管理情報及び、第二の変更予定情報をディスプレイ102の画面上に表示させる。
次に、開発者Bは、周辺機器103のキーボード等を操作して、ステップ1312にて追加された機能(調整後に追加された機能を含む)B(機能Bの追加)をソースコード上に実装する(ステップ1314)。この後、開発者Bが、母体コード(ソースコード)を読込むと共に、チェックフラグを読込むための操作を実行すると、操作に伴う情報を入力したユーザインタフェース表示部108は、ソース構成管理部109を介して構成管理データベース115から母体コード(ソースコード)を読込むと共に、フラグ管理部112を介してチェックフラグデータベース116からチェックフラグを読込み、読込んだ母体コードとチェックフラグをディスプレイ102上に表示する。この際、開発者Bは、ディスプレイ102上に表示された母体コードとチェックフラグを参照して、機能Bの実装完了チェックを行い(ステップ1315)、チェック後、変更後コード(ソースコード)を構成管理データベース115に登録するための操作を実行する。これにより、開発プロセスは終点1316で終了する。この際、フラグ管理部112は、いずれかの情報間で変更衝突がないと判定したことを条件に、保持した第二の変更管理情報及び第二の変更予定情報をチェックフラグデータベース116に格納する。
ステップ1312で、フラグ管理部112が衝突を検知した場合、早期に衝突を検知することができ、フラグを点滅表示(強調表示)することで、開発者Bに警告することができる。この際、開発者Bは、この警告を見て、開発者Aと話合いを行い、実装内容と時期を調整することができる。この話合いにより、ステップ1314で機能Bの追加を実装するときに、同じ作業を二重に行わなくて済み(二重作業の抑止)、工数が削減できる。また、ステップ1315で機能Bの実装完了チェックを行うときには、機能Aが既に登録されていることを設計で考慮済みのため、予想外の作業手戻りは発生せず(修正手戻りの抑止)、工数が削減できる。
図14は、実施例3におけるシステムであって、複数の開発者を対象としたシステムの構成図である。図14において、開発者101として、複数の開発者A、Bを対象として場合、各開発者A、Bに対して開発マシン10が用意される。各開発マシン10はそれぞれ管理サーバ12に接続される。なお、各開発マシン10と管理サーバ12は、図1のものと同様に構成されているので、それらの説明は省略する。なお、図14のシステムでは、記憶装置107が、各開発マシン10で共有されているので、各開発マシン10が、記憶装置107に格納されるチェックフラグデータベース116をアクセスすることで、各開発者A、Bの変更(変更必要)に伴う要素の衝突の有無を検知できる。
図15は、複数の開発者の変更によって衝突が起こった状態を説明するための図であって、(a)は、実施例3におけるディスプレイの表示例を示す構成図、(b)は、実施例3における変更フラグテーブルの構成図である。図15において、複数の開発者101が、それぞれ周辺機器103を操作して、ディスプレイ102の画面上に一覧画面801を表示させ、ユーザインタフェース表示部108を通じて「func2」等を変更すると、ソース依存関係解析部110は、指示された情報を基にソースコードデータベース114を参照して、「func2」と呼出または被呼出の関係にある関数又は変数(value1、func3、func1)にシンボルを表示するための処理を実行する。この処理結果がインタフェース表示部108を介してディスプレイ102に転送されると、ディスプレイ102の一覧画面801には、ソース依存関係解析部110の参照結果が表示される。この際、各開発者101は、表示された一覧画面801の内容を参照することができる。
一覧画面801には、変更元802に関する情報として、「func2」のファイル(FileA.c)および関数/変数「func2」が表示され、変更影響803として、「func2」の変更の影響を受けるファイルおよび関数/変数であって、要素テーブル203と変更影響テーブル204に登録されたファイルの名称(FileA.h、FileB.c、FileC.c)および関数/変数の名称(value1、func3、func1)が表示され、変更影響タイプ804として、変更影響テーブル204に登録された「呼出」または「被呼出」が表示され、メトリクス805として、要素テーブル203の他依存数208に登録された情報(他依存数:15など)が表示される。この際、変更元802の関数/変数「func2」には、未変更のシンボルレ点、変更必要のシンボル(C)がフラグ(チェックフラグ)として表示される。また、変更影響803の関数/変数(value1、func3、func1)には、未変更のシンボルレ点、変更不要のシンボル(N)または変更必要のシンボル(C)、さらに変更衝突(衝突あり)を示すシンボル(×)がフラグ(チェックフラグ)として表示される。
また、変更フラグテーブル214のファイル215には、ファイルの名称(FileA.h、FileA.c、FileB.c、FileC.c、FileB.c、FileC.c)が登録され、関数/変数216には、関数又は変数の名称(value1、func2、func3、func1、func3、func1)が登録され、ソース構成管理状態217には、それぞれ、「未変更」の情報が登録され、変更予定状態218には、「FileA.h」の欄に「変更不要」が登録され、「FileA.c」と「FileB.c」の欄に「変更必要」が登録され、「FileC.c」の欄に「変更不要」が登録され、「FileB.c」と「FileC.c」に「変更必要」が登録され、変更衝突状態219には、「FileB.c」、「FileC.c」、「FileB.c」、「FileC.c」の欄に「変更衝突」が登録され、更新者220には、開発者101の名称(開発者Aまたは開発者B)が登録され、更新日時221には、各開発者(開発者Aまたは開発者B)101による更新日時の情報が登録される。
ここで、フラグ管理部112は、変更フラグテーブル214を参照し、要素ID3の「FileB.c」に関して、ソース構成管理状態217に登録された情報と変更予定状態218に登録された情報とを比較し、いずれかの情報間に変更衝突があるか否かを判定する。この際、開発者Aの操作による情報として、ソース構成管理状態217に「未変更」が登録され、変更予定状態218に「変更必要」が登録され、開発者Bの操作による情報として、ソース構成管理状態217に「未変更」が登録され、変更予定状態218に「変更必要」が登録された場合、「変更必要」が重複しているので、フラグ管理部112は、「変更衝突」と判定し、変更衝突状態219に「変更衝突」の情報を登録する。
また、フラグ管理部112は、変更フラグテーブル214を参照し、要素ID4の「FileC.c」に関して、ソース構成管理状態217に登録された情報と変更予定状態218に登録された情報とを比較し、いずれかの情報間に変更衝突があるか否かを判定する。この際、開発者Aの操作による情報として、ソース構成管理状態217に「未変更」が登録され、変更予定状態218に「変更不要」が登録され、開発者Bの操作による情報として、ソース構成管理状態217に「未変更」が登録され、変更予定状態218に「変更必要」が登録された場合、開発者Aが「変更必要」で、開発者Bが「変更不要」であって、両者の内容が矛盾しているので、フラグ管理部112は、「変更衝突」と判定し、変更衝突状態219に「変更衝突」の情報を登録する。
変更衝突状態219に、「変更衝突」の情報が記録された場合、フラグ管理部112とユーザインタフェース表示部108の処理により、一覧画面801の変更影響803には、変更衝突の生じた要素、例えば、要素ID3、4のファイル(FileB.c、FileC.c)に関して、変更衝突状態703のシンボル(×)が強調して表示される。これは、変更予定(C)が付いている要素に変更衝突(×)が付いているものが直接的に影響するが、変更不要(N)と判断しているが間接的に影響する可能性があるため、変更衝突の生じた要素については、警告を行うためである。この場合、各開発者A、Bは、一覧画面801を見ることで、要素の変更に伴って衝突が生じたことを容易に確認することができる。また、この場合、変更の具体的な内容について開発者A、B間で話合う必要がある。この話合いによって重複した内容の変更や、変更同士の衝突に起因する不具合を避けることができる。
本実施例によれば、複数の開発者が並行して新しい機能を追加した場合の衝突を早期に検出し、二重作業を減らすことができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、管理サーバ12の中央処理演算装置106が記憶装置107を管理する代わりに、開発マシン10の中央処理演算装置104が、コントローラとして、記憶装置107を管理することもできる。上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成、機能等は、それらの一部又は全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に記録して置くことができる。