(57)【要約】【課題】  ソースコードの類似部分を検出する手法は、検索するバージョンの時点で類似の関係にあるソースコードしか検出することができない。そのため、過去のバージョンにおいて類似関係にあったとしても、その後のソースコード開発作業により、現在のバージョンでは類似関係として検出できなくなることがある。過去に類似関係にあったソースコードは、他のソースコードに比べ関連性が高く、類似部分に対する保守時に修正漏れが発生する恐れがある。【解決手段】  ソースコードの類似関係の履歴管理を行うことにより、類似部分の検出手法のみでは見つからない関連性の高いソースコードを検出する。また、過去に類似関係にあったソースコードを優先的に検索し、履歴関係から検索範囲を限定させることで、効率的な類似検索を行う。【選択図】  図１
2011108059.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアのソースコードを管理するシステムにおいて、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録し、前記検索結果のソースコードに加えて、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを特徴とするソースコード管理システム。
【請求項２】
前記ソースコード管理システムは、前記ソースコード管理手段へ前記登録対象ソースコードの新規バージョンを生成する意図を表明する際に、前記類似関係管理手段に登録されている類似の関係にあるソースコードを通知することを特徴とする請求項１に記載のソースコード管理システム。
【請求項３】
前記類似関係管理手段で履歴管理されている類似の関係にあるソースコードの通知範囲を、管理システム利用者が類似関係の履歴により指定できることを特徴とする請求項１に記載のソースコード管理システム。
【請求項４】
前記類似関係管理手段で管理される類似関係の情報は、各ソースコードとそのバージョン、類似部分の範囲が記録されていることを特徴とする請求項１に記載のソースコード管理システム。
【請求項５】
前記類似関係管理手段で管理される類似の関係の情報は、既存の類似関係の構成情報と変化がない場合は登録対象ソースコードのバージョンを更新し、既存の類似関係の構成情報に追加する場合は登録対象ソースコードとそのバージョンを追加し、既存の類似関係の構成情報と異なる場合は、新規の類似関係の情報を登録すると共に、既存の類似関係の情報を履歴管理することを特徴とする請求項１に記載のソースコード管理システム。
【請求項６】
前記類似関係管理手段で管理される類似の関係の情報は、構成管理ツールに付加されるメタ情報であることを特徴とする請求項１に記載のソースコード管理システム。
【請求項７】
ソフトウェアのソースコードを管理するシステムにおいて、
ソースコード資産の管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索する際に、前記類似関係管理手段で履歴管理されている類似関係にあるソースコードを優先して検索することを特徴とするソースコード管理システム。
【請求項８】
前記類似ソースコード検索手段による検索は、前記類似関係管理手段で履歴管理されている前記登録対象ソースコードの現在の類似関係にあるソースコード、過去の類似関係にあるソースコードの順に優先して検索することを特徴とする請求項７に記載のソースコード管理システム。
【請求項９】
前記類似ソースコード検索手段による過去の類似関係にあるソースコードの検索は、前記登録対象ソースコードの過去の類似関係にあるソースコード、過去バージョンの類似関係にあるソースコードの順に検索することを特徴とする請求項７に記載のソースコード管理システム。
【請求項１０】
前記類似ソースコード検索手段による検索の範囲を、管理システム利用者が類似関係の履歴により指定できることを特徴とする請求項７に記載のソースコード管理システム。
【請求項１１】
ソフトウェアのソースコードを管理するためにコンピュータを、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録すると共に、前記検索結果のソースコードと、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを機能させるためのソースコード解析プログラム。
【請求項１２】
ソフトウェアのソースコードを管理するためにコンピュータを、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録すると共に、前記検索結果のソースコードと、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを機能させるためのソースコード解析プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はソースコードの管理システムに関し、特にソースコードの類似関係の履歴を管理し、関連性の高いソースコードを検出するシステムに関する。
【背景技術】
【０００２】
ソフトウェアの開発規模は、増大の一途を辿っている。
【０００３】
ソフトウェアの規模増大に対処するために、以前に開発したソースコードの流用と、新規に開発したソースコードを組み合わせて、開発を進めることがある。また、ソースコード自体を、組織外や社外から調達して利用することもある。
【０００４】
一方、ソフトウェアの規模が大きくなるにつれて、ソフトウェアの保守も重要な問題になっている。その問題の一つに、ソースコードの流用部分に対する保守が挙げられる。ソースコードの流用部分に対して問題が発生し、修正する等の対策を行う場合、同様の流用を行った類似部分に対しても対策を検討・実施する必要がある。流用部分に対して、機能の追加を行う際も同様である。ソフトウェアの規模が大きくなるほど、類似部分を人手で探し出す作業は困難となる。
【０００５】
従来、ソースコードの類似部分を検出する手法として、以下のものがある。
【０００６】
特許文献１には、プログラムソースコード等の様々な一次元配列テキストから、簡単な処理で同系パターンを抽出する手法が開示されている。また、特許文献２には、修正内容またはシステム構造情報に基づいて抽象化した検索対象プログラムと検索元コードを比較し、両者の類似度を算出することで、検索対象プログラム中に存在する検索元コードと類似したコードを検索する手法が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−２９９７８号公報
【特許文献２】特開２００５−３０１８５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述したようなソースコードの類似部分を検出する手法は、検索するバージョンの時点で類似の関係にあるソースコードしか検出することができない。そのため、過去のバージョンにおいて類似関係にあったとしても、その後のソースコード開発作業により、現在のバージョンでは類似関係として検出できなくなることがある。過去に類似関係にあったソースコードは、他のソースコードに比べ関連性が高く、類似部分に対する保守時に修正漏れが発生する恐れがある。
【０００９】
本発明では上記のような課題を解決するためになされたもので、ソースコードの類似関係を履歴管理し、類似部分の検出手法のみでは見つからない関連性の高いソースコードを検出する。これにより、ソースコード保守時の修正漏れを防ぐソースコード管理システム及びプログラム並びに記録媒体を提供する。
【００１０】
本発明により、ソースコード保守時の修正漏れを防ぎ品質を高める。また、類似関係の検索に優先順位を決めて検索範囲を限定することで、効率的な類似検索を行う。
【課題を解決するための手段】
【００１１】
本発明の管理システムは、ソフトウェアのソースコードを管理するシステムにおいて、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録し、前記検索結果のソースコードに加えて、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを特徴とする。
【００１２】
前記ソースコード管理システムは、前記ソースコード管理手段へ前記登録対象ソースコードの新規バージョンを生成する意図を表明する際に、前記類似関係管理手段に登録されている類似の関係にあるソースコードを通知することを特徴とする。
【００１３】
前記類似関係管理手段で履歴管理されている類似の関係にあるソースコードの通知範囲を、管理システム利用者が類似関係の履歴により指定できることを特徴とする。
【００１４】
前記類似関係管理手段で管理される類似関係の情報は、各ソースコードとそのバージョン、類似部分の範囲が記録されていることを特徴とする。
【００１５】
前記類似関係管理手段で管理される類似の関係の情報は、既存の類似関係の構成情報と変化がない場合は登録対象ソースコードのバージョンを更新し、既存の類似関係の構成情報に追加する場合は登録対象ソースコードとそのバージョンを追加し、既存の類似関係の構成情報と異なる場合は、新規の類似関係の情報を登録すると共に、既存の類似関係の情報を履歴管理することを特徴とする。
【００１６】
前記類似関係管理手段で管理される類似の関係の情報は、構成管理ツールに付加されるメタ情報であることを特徴とする。
【００１７】
ソフトウェアのソースコードを管理するシステムにおいて、
ソースコード資産の管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索する際に、前記類似関係管理手段で履歴管理されている類似関係にあるソースコードを優先して検索することを特徴とする。
【００１８】
前記類似ソースコード検索手段による検索は、前記類似関係管理手段で履歴管理されている前記登録対象ソースコードの現在の類似関係にあるソースコード、過去の類似関係にあるソースコードの順に優先して検索することを特徴とする。
【００１９】
前記類似ソースコード検索手段による過去の類似関係にあるソースコードの検索は、前記登録対象ソースコードの過去の類似関係にあるソースコード、過去バージョンの類似関係にあるソースコードの順に検索することを特徴とする。
【００２０】
前記類似ソースコード検索手段による検索の範囲を、管理システム利用者が類似関係の履歴により指定できることを特徴とする。
【００２１】
ソフトウェアのソースコードを管理するためにコンピュータを、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録すると共に、前記検索結果のソースコードと、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを機能させるためのソースコード解析プログラムであることを特徴とする。
【００２２】
ソフトウェアのソースコードを管理するためにコンピュータを、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録すると共に、前記検索結果のソースコードと、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを機能させるためのソースコード解析プログラムを記録したコンピュータ読み取り可能な記録媒体であることを特徴とする。
【発明の効果】
【００２３】
本発明のソースコード管理システムによれば、ソースコードの類似関係の履歴管理を行うことにより、類似部分の検索手法のみでは見つからない関連性の高いソースコードを検出することができる。これにより、類似部分のソースコード保守時の修正漏れを防ぎ品質を高めることができる。
【００２４】
また、過去に類似関係にあったソースコードを優先的に検索し、履歴関係から検索範囲を限定させることで、効率的な類似検索を行うことができる。
【００２５】
さらに、ソースコード管理システムに登録されているソースコードの編集前に、現在の類似関係を始めとする関連性の高いソースコードを事前に通知することにより、類似部分のソースコード保守時の修正漏れを防ぎ品質を高めることができる。
【図面の簡単な説明】
【００２６】
【図１】本発明における、管理システムの全体構成を示す図である。
【図２】本発明の実施例１における、ソースコード登録フローを示す図である。
【図３】本発明の実施例１における、検索対象ソースコード入力フローを示す図である。
【図４】本発明の実施例１における、類似ソースコード検索フローを示す図である。
【図５】本発明の実施例１における、類似関係登録フローを示す図である。
【図６】本発明の実施例１における、ラベル適用フローを示す図である。
【図７】本発明の実施例１における、結果表示フローを示す図である。
【図８】本発明における、ソースコードの類似関係を説明するための図である。
【図９】本発明における、ソースコードの類似関係の履歴を説明するための図である。
【図１０】本発明における、管理システムのハードウェア構成を示す図である。
【図１１】本発明の実施例２における、事前類似関係通知フローを示す図である。
【発明を実施するための形態】
【００２７】
以下、図面を参照しながら本発明の好適な実施の形態を説明する。
【実施例１】
【００２８】
図１は、本発明の実施例１における管理システムの構成を示す図である。入出力部１０１は管理システム利用者からの入力を受け付ける、もしくは管理システム利用者に出力結果を表示する入出力部である。入出力部１０１を用いて、登録対象のソースコードや、検索条件、属性情報が指定される。
【００２９】
制御部１０２は、入出力部１０１からの要求を受け付け、その要求に応じて類似ソースコード検索部１０３、類似関係検索部１０５を制御し、その結果を入出力部１０１に返すものである。また、ソースコード管理部１０４、類似関係管理部１０６で管理されている情報の入出力を行うものである。
【００３０】
類似ソースコード検索部１０３は、制御部１０２から受け取ったソースコードに含まれる類似部分をソースコード管理部１０４で管理されているソースコードから検索し、その検索結果を制御部１０２に返すものである。本発明の説明で使用する類似部分とは、他のソースコード中に全く同じか、類似の文字列が存在するソースコード部分である。
【００３１】
ソースコード管理部１０４では、これまで開発したソースコードや、組織外や社外から調達したソースコードなど、各種ソフトウェア資産を履歴管理する構成管理リポジトリである。また、ソースコードを識別するための属性情報を付加させる機能を有している。
【００３２】
類似関係検索部１０５では、制御部１０２から受け取ったソースコードと類似関係にあるソースコードを、類似関係管理部１０６で管理されている類似関係から検索し、その検索結果を制御部１０２に返すものである。本発明の説明で使用する類似関係とは、互いに同じ類似部分を持つ複数のソースコードのセットである。
【００３３】
類似関係管理部１０６は、類似ソースコード検索部１０３によって検索された、同じ類似部分を持つ複数のソースコードセットの情報を管理するものである。また、ソースコードのバージョンアップに伴い、類似関係の情報も履歴管理を行うものである。ソースコード管理部１０４と同じ構成管理リポジトリとして、構成しても良い。
【００３４】
また、本発明の実施の形態として使用される情報処理装置のハードウェア構成の一例を、図１０を参照して説明する。
【００３５】
ＣＰＵ１００１は、外部記憶装置１００４やデータベース１００６に格納されているソースコードを読み出し、対象ソースコードの類似検出処理、類似関係検索処理等を実行する。
【００３６】
ＲＡＭ１００２は、演算に使用される各種データを一時的に記憶するための領域として使用される。
【００３７】
入出力装置１００３は、キーボード、マウス等からデータを入力する装置、及びモニタ等で出力結果を表示する装置である。
【００３８】
外部記憶装置１００４は、類似検出や類似関係検索等のプログラム及びソースコードの属性情報等のデータが格納される。
【００３９】
通信インタフェース１００５は、ＬＡＮ、インターネット等のネットワークに接続するための装置である。ネットワークを介してデータベース１００６にアクセスし、ソースコードや属性情報等のデータを取得することが可能である。
【００４０】
データベース１００６は、構成管理リポジトリを備えておりソースコード資産を管理する。また、ソースコードを識別するための属性情報を付加させる機能を有している。
【００４１】
また、ＣＰＵ１００１、ＲＡＭ１００２、外部記憶装置１００４等は、バス１００７により接続されている。
【００４２】
ここで、本発明の説明で使用する類似の定義を行う。類似とは、ソースコード中の空行やコメント部分などを除いた命令処理実行に関わる部分が、全て一致しているか、類似の文字列が存在するソースコードの関係と定義する。
【００４３】
図８は、本発明におけるソースコードの類似関係を説明するための図である。ソースコード８０１とソースコード８０２、ソースコード８０３は、それぞれ類似の文字列が存在するとする。網掛けの部分が、類似の文字列である。この時、これら３つのソースコードは類似の関係にある。８０４の枠は、類似の関係であることを示している。
【００４４】
一方、ソースコードの編集によりソースコード８０２がソースコード８０５へ、ソースコード８０３が８０６へそれぞれバージョンアップしたとする。特に、類似の文字列の部分が編集され、一部ソースコード行の挿入や削除等が行われたとする。この結果、従来は類似の文字列として検出されていた部分が、類似部分としての検出ができなくなることがある。
【００４５】
これにより、例えばソースコード８０１の類似部分に対して問題が発生し、修正の対策が必要な場合に、ソースコード８０５、８０６は類似関係として検出がされないことになる。過去バージョンで同じ類似の文字列を持つことからわかるように、ソースコード８０１とソースコード８０５、８０６は他のソースコードに比べ関連性が高いことは明らかである。その結果、類似部分に対する修正の対策漏れが発生する恐れがある。
【００４６】
図９は、本発明における、ソースコードの類似関係の履歴を説明するための図である。複数のソースコードファイルとそのバージョンの類似関係の履歴を示している。ソースコードファイルは、ファイルＡからファイルＤまで４つのファイルがあり、それぞれバージョン１、もしくは２が付与されている。
【００４７】
例えば、４つのソースコードファイルのそれぞれバージョン１が類似関係にあるとする。それを示しているのが、線９０１、もしくは枠９０５である。次に、ファイルＤがバージョン２にバージョンアップしたとする。その結果、これまで類似関係にあったソースコードとの類似関係がなくなったとする。類似関係を維持しているのは、ファイルＡのバージョン１、ファイルＢのバージョン１、ファイルＣのバージョン１である。これを示しているのが、線９０２、もしくは枠９０６である。
【００４８】
一方、ファイルＢがバージョン２にバージョンアップしても、これまで類似関係にあったソースコードとの類似関係が維持されているとする。これを示しているのが、線９０３、もしくは枠９０７である。
【００４９】
さらに、ファイルＡがバージョン２にバージョンアップした際には、これまで類似関係にあったソースコードとの類似関係がなくなったとする。これを示しているのが、線９０４、もしくは枠９０８である。
【００５０】
ここでファイルＢに着目してみる。現在の類似関係である線９０４、もしくは枠９０８で類似関係にあるのはファイルＣだけである。しかし、ファイルＢの過去の類似関係にはファイルＡ、ファイルＢの過去バージョンの類似関係にはファイルＤがある。これらファイルは、ファイルＢとの関連性が高いが、現在の類似関係の検出のみでは検出できないことがわかる。
【００５１】
次に、ソースコードの登録フローについて図２を用いて説明する。
【００５２】
まず、ステップ２０１で、管理システム利用者が指定した登録対象ソースコードを入力する。この際、登録対象ソースコードの入力は単数でも複数でも構わない。
【００５３】
次にステップ２０２で、類似の検索対象となるソースコードを入力する。新規ソースコードの場合、ソースコード管理部１０４で管理されている全てのソースコードの最新バージョンが対象になる。既存ソースコードの場合、管理システム利用者によって指定された検索条件と、登録されている類似関係の情報により抽出されたソースコードのバージョンが対象になる。ステップ２０２内のフローの詳細については、図３の検索対象ソースコード入力フローで説明する。
【００５４】
そして、ステップ２０３で登録対象のソースコードに、検索対象のソースコードと類似の関係にあるソースコードがないか類似ソースコード検索を行う。
【００５５】
類似ソースコードとは、登録対象となるソースコードに対して、類似したソースコード片を持つソースコードである。所定のソースコードから、類似のソースコード片を持つソースコードを検出するための手法は、従来いくつか提案されている。例えば、ソースコードをプログラミング言語の文法に基づいて字句解析を行い、トークン列に変換する。その後トークン列の変換を行い、パラメータ置換を行う。そして、パラメータ置換後のトークン列を比較し、トークン一致部分の検出を行う。最後に、検出したトークン一致部分に対する、ソースコード相当部分の抽出を行う。このソースコードが、登録対象ソースコードに対する、類似ソースコードになる。ステップ２０３内のフローの詳細については、図４の類似ソースコード検索フローで説明する。
【００５６】
その後、ステップ２０４で、登録対象ソースコードの類似関係を登録する。登録対象ソースコードが新規ソースコードの場合、ソースコード管理部１０４に対して新規登録を行い、バージョンを付与する。一方、登録対象ソースコードが既存ソースコードの場合、ソースコード管理部１０４に登録されているソースコードのバージョンアップを行う。
【００５７】
その後、登録対象ソースコードの付与したバージョンと、類似関係にあるソースコードのバージョンに対し、類似関係を表す情報を付加する。類似関係の情報には、各ソースコードの類似部分の範囲情報も付加する。ステップ２０４内のフローの詳細については、図５の類似関係登録フローで説明する。
【００５８】
最後に、ステップ２０５で類似関係の登録結果を、入出力部１０１に表示する。結果表示には、登録対象ソースコードの類似部分の範囲情報と、類似関係ソースコードの情報を表示する。類似関係ソースコードの情報とは、類似関係ソースコードのファイル名やソースコード管理部１０４での保管先アドレス、ファイルバージョン、類似部分の範囲情報等である。さらに、管理システム利用者によって指定された通知条件に従って、類似関係管理部１０６で管理されている過去の類似関係ソースコードに関する情報を表示する。表示する情報は、先の類似関係ソースコードの情報と同様である。ステップ２０５内のフローの詳細については、図７の結果表示フローで説明する。
【００５９】
次に、類似の検索対象となるソースコードの入力フローについて、図３を用いて説明する。本フローは、先に説明した図２の類似関係登録実行フローのステップ２０２にあたる。
【００６０】
まず、ステップ３０１において、管理システム利用者から指定された検索条件を読み取る。検索条件には、それぞれ過去の類似関係のソースコード、過去バージョンの類似関係のソースコード、類似関係以外のソースコードを検索対象として入力するかを指定される。
【００６１】
ステップ３０２において、登録対象ソースコードが既存ファイルか判断する。既存ファイルである場合は、ステップ３０３へ、既存ファイルではなく新規ファイルである場合は、ステップ３０５へ進む。
【００６２】
ステップ３０３において、登録対象ソースコードに類似関係が登録されているか判断する。類似関係が登録されている場合は、ステップ３０４へ、類似関係が登録されていない場合は、ステップ３０５へ進む。
【００６３】
ステップ３０４では、登録対象ソースコードに登録されている、最新の類似関係ソースコードを検索対象に入力する。類似関係ソースコードが複数ある場合は、全てのソースコードを入力する。
【００６４】
ステップ３０５では、登録対象ソースコードが新規ファイルであるか、既存のソースコードファイルに類似関係が登録されていないため、ソースコード管理部１０４で管理されている全てのソースコードの入力を行う。各ソースコードのバージョンは最新バージョンとする。全てのソースコードの入力が終わった場合は、類似の検索対象ソースコードの入力フローを終了する。
【００６５】
次に、ステップ３０６において、検索条件に登録対象ソースコードの過去の類似関係を入力するように設定されているか判断する。過去の類似関係を検索対象に入力する場合は、ステップ３０７へ、過去の類似関係を検索対象に入力しない場合は、類似の検索対象ソースコードの入力フローを終了する。
【００６６】
ステップ３０７において、登録対象ソースコードに過去の類似関係が登録されているか判断する。過去の類似関係が登録されている場合は、ステップ３０８へ、過去の類似関係が登録されていない場合は、ステップ３０９へ進む。
【００６７】
ステップ３０８では、登録対象ソースコードに登録されている、過去の類似関係ソースコードを検索対象に入力する。過去の類似関係のソースコードセットが複数ある場合は、全てのソースコードセットの類似関係ソースコードを入力する。
【００６８】
次に、ステップ３０９において、検索条件に登録対象ソースコードの過去バージョンの類似関係を入力するように設定されているか判断する。過去バージョンの類似関係を検索対象に入力する場合は、ステップ３１０へ、過去バージョンの類似関係を検索対象に入力しない場合は、類似の検索対象ソースコードの入力フローを終了する。
【００６９】
ステップ３１０において、登録対象ソースコードに過去バージョンの類似関係が登録されているか判断する。過去バージョンの類似関係が登録されている場合は、ステップ３１１へ、過去バージョンの類似関係が登録されていない場合は、ステップ３１２へ進む。
【００７０】
ステップ３１１では、登録対象ソースコードに登録されている、過去バージョンの類似関係ソースコードを検索対象に入力する。過去バージョンの類似関係のソースコードセットが複数ある場合、また過去バージョンが複数ある場合は、全てのソースコードセット、バージョンの類似関係ソースコードを入力する。
【００７１】
次に、ステップ３１２において、検索条件に登録対象ソースコードの類似関係以外を入力するように設定されているか判断する。類似関係以外を検索対象に入力する場合は、ステップ３１３へ、類似関係以外を検索対象に入力しない場合は、類似の検索対象ソースコードの入力フローを終了する。
【００７２】
ステップ３１３では、登録対象ソースコードに登録されている、類似関係以外のソースコードを検索対象に入力する。各ソースコードのバージョンは最新バージョンとする。全てのソースコードの入力が終わった場合は、類似の検索対象ソースコードの入力フローを終了する。
【００７３】
次に、類似ソースコード検索フローについて、図４を用いて説明する。本フローは、先に説明した図２の類似関係登録実行フローのステップ２０３にあたる。
【００７４】
まず、ステップ４０１において、ソースコードをプログラミング言語の文法に基づき、関数など特定の処理を実行する命令単位で字句解析を実行する。これにより、ソースコードの命令単位でひとつのトークン列に変換する。
【００７５】
次にステップ４０２において、パラメータ置換を行う。この際、ソースコードの予約語や演算子等の固定字句や、固定字句以外の自由字句など字句の種類に応じて置換方法を変えてもよい。
【００７６】
ステップ４０３では、パラメータ置換後のトークン列を比較し、トークン一致部分の検出を行う。例えば、既知の技術であるサフィックス木を用いたアルゴリズムにより、一致するトークン列を検出する。
【００７７】
次のステップ４０４で、トークン一致部分を検出できたか判定を行う。検出できた場合はステップ４０５へ、検出できなかった場合は処理を終了する。
【００７８】
ステップ４０５では一致するトークン列が、元のソースコード上のどこに相当するのかをたどり、ソースコード上での位置を特定する。これにより、登録対象ソースコードと類似候補ソースコードの命令単位の抽出を行って処理を終了する。
【００７９】
このように、ソースコードの字句解析を行ってトークン列に変換し、さらにパラメータ置換を行ったトークン列を比較して、トークン一致部分の検出を行う。トークン一致部分のソースコード上での位置を特定することで、類似したソースコード片を持つ類似候補のソースコードを検索する。
【００８０】
また、本フローの中で説明した、類似のソースコード片を持つソースコードを検出する手法は一例であり、類似のソースコード片を持つソースコードが検出できるならば、他の手法を採用しても良い。
【００８１】
次に、類似関係登録フローについて、図５を用いて説明する。本フローは、先に説明した図２の類似関係登録実行フローのステップ２０４にあたる。
【００８２】
まず、ステップ５０１で、登録対象ソースコードをソースコード管理部１０４に登録する。登録対象ソースコードが新規ソースコードの場合、ソースコード管理部１０４に対して新規登録を行い、バージョンを付与する。一方、登録対象ソースコードが既存ソースコードの場合、ソースコード管理部１０４に登録されているソースコードのバージョンアップを行う。
【００８３】
次のステップ５０２で、類似関係のソースコードを検出したかを判定する。類似関係のソースコードを検出した場合は、ステップ５０３へ、検出しなかった場合は、ステップ５０５へ進む。
【００８４】
ステップ５０３では、登録対象ソースコードの付与したバージョンと、類似関係にあるソースコードのバージョンに対し、類似関係を表す情報を付加する。本実施例では、ソースコード管理部１０４の構成管理ツールによるラベルを利用する。
【００８５】
構成管理ツールによるラベルは、複数のソースコードとそのバージョンに対して情報を付加することができる。任意のソースコードのあるバージョンに対して付加したラベルの適用時間の履歴により、過去の類似関係を特定することができる。一方、任意のソースコードのバージョン履歴により、過去バージョンの類似関係を特定することができる。ステップ５０３内のフローの詳細については、図６のラベル適用フローで説明する。
【００８６】
ステップ５０４では、類似関係にあるソースコードの詳細情報を入力する。例えば、類似部分の開始行、終了行といった範囲情報などである。本実施例では、先のステップ５０３で適用したラベルのプロパティやコメント等に、類似関係にある各ソースコードに対して範囲情報を記録する。
【００８７】
最後にステップ５０５では、全ての登録対象のソースコードに対して類似関係登録処理を実行したかを判定する。全ての登録対象ソースコードに対して実行した場合はフローを終了し、まだ全ての解析対象ソースコードに対して実行していない場合は、ステップ５０１へと戻り、繰り返し処理を行う。
【００８８】
次に、ラベル適用フローについて、図６を用いて説明する。本フローは、先に説明した図５の類似関係登録フローのステップ５０３にあたる。
【００８９】
まず、ステップ６０１において、検出した類似関係のソースコードセットが、既存の類似関係セットを示すラベルに登録されているか判断する。既存のラベルに登録されている場合は、ステップ６０２へ、登録されていない場合は、ステップ６０３へ進む。
【００９０】
ステップ６０２では、検出した類似関係を示すラベルに対し、登録対象ソースコードとそのバージョンを追加する。これにより、既存の類似関係セットに、登録対象ソースコードを加えた新しい類似関係セットとして追加更新される。
【００９１】
次に、ステップ６０３において、検出した類似関係のソースコードセットに、登録対象ソースコードの登録前のバージョンを加えたソースコードセットが、既存の類似関係セットを示すラベルに登録されているか判断する。既存のラベルに登録されている場合は、ステップ６０４へ、登録されていない場合は、ステップ６０５へ進む。
【００９２】
ステップ６０４では、検出した類似関係を示すラベルに対し、登録対象ソースコードのバージョンを、新規バージョンに更新する。これにより、既存の類似関係セットに、登録対象ソースコードのバージョンが更新される。
【００９３】
ステップ６０５では、検出した類似関係のソースコードセットや、登録対象ソースコードの登録前のバージョンを加えたソースコードセットが登録されていなかったため、新規の類似関係のソースコードセットを登録する。
【００９４】
それぞれ、ステップ６０２、６０４、６０５の処理が完了したら、フローを終了する。
【００９５】
このように、検出した類似関係のソースコードセットが、既存の類似関係セットを示すラベルに登録されているか判断する。既存の登録状況により、類似関係の追加更新、類似関係を構成するソースコードのバージョン更新、または新規の類似関係セットの登録を行う。
【００９６】
次に、結果表示フローについて、図７を用いて説明する。本フローは、先に説明した図２のソースコード登録フローのステップ２０５にあたる。
【００９７】
まず、ステップ７０１において、先の類似関係登録フローによって登録された類似関係のソースコード情報を表示する。類似関係のソースコードが検出できなかった場合は、検出なしとして表示する。
【００９８】
ステップ７０２において、登録対象ソースコードが既存ファイルか判断する。既存ファイルである場合は、ステップ７０３へ、既存ファイルではなく新規ファイルである場合は、ステップ７０６へ進む。
【００９９】
ステップ７０３において、管理システム利用者から指定された通知条件を読み取る。通知条件には、過去の類似関係のソースコード、過去バージョンの類似関係のソースコードを通知対象として表示するかが指定されている。
【０１００】
ステップ７０４において、登録対象ソースコードに類似関係が登録されているか判断する。類似関係が登録されている場合は、ステップ７０５へ、類似関係が登録されていない場合は、ステップ７０６へ進む。
【０１０１】
ステップ７０５では、通知条件に登録対象ソースコードの過去の類似関係を通知するように設定されているか判断する。過去の類似関係を通知対象に設定する場合は、ステップ７０７へ、過去の類似関係を通知対象に設定しない場合は、結果表示フローを終了する。
【０１０２】
ステップ７０６では、登録対象ソースコードが新規ファイルであるか、既存のソースコードファイルに類似関係が登録されていないため、過去の類似関係のソースコードは存在しない。よって、結果表示フローを終了する。
【０１０３】
ステップ７０７において、登録対象ソースコードに過去の類似関係が登録されているか判断する。過去の類似関係が登録されている場合は、ステップ７０８へ、過去の類似関係が登録されていない場合は、ステップ７０９へ進む。
【０１０４】
ステップ７０８では、登録対象ソースコードに登録されている、過去の類似関係ソースコード情報を表示する。過去の類似関係のソースコードセットが複数ある場合は、全てのソースコードセットの類似関係ソースコード情報を表示する。
【０１０５】
次に、ステップ７０９において、通知条件に登録対象ソースコードの過去バージョンの類似関係を通知するように設定されているか判断する。過去バージョンの類似関係を通知対象に設定する場合は、ステップ７１０へ、過去バージョンの類似関係を通知対象に設定しない場合は、結果表示フローを終了する。
【０１０６】
ステップ７１０において、登録対象ソースコードに過去バージョンの類似関係が登録されているか判断する。過去バージョンの類似関係が登録されている場合は、ステップ７１１へ、過去バージョンの類似関係が登録されていない場合は、結果表示フローを終了する。
【０１０７】
ステップ７１１では、登録対象ソースコードに登録されている、過去バージョンの類似関係ソースコード情報を表示する。過去バージョンの類似関係のソースコードセットが複数ある場合、また過去バージョンが複数ある場合は、全てのソースコードセット、バージョンの類似関係ソースコード情報を表示する。
【実施例２】
【０１０８】
実施例２では、ソースコード管理部１０４に管理されているソースコードの編集開始時の事前類似関係通知フローについて図１１を用いて説明する。管理システム利用者に対し、ソースコード編集前に関連性の高いソースコードを事前に知らせることが出来る。これにより、類似部分のソースコード開発作業を効率化することができる。
【０１０９】
まず、ステップ１１０１において、管理システム利用者から指定された通知条件を読み取る。通知条件には、類似関係のソースコード、過去の類似関係のソースコード、過去バージョンの類似関係のソースコードを通知対象として表示するかが指定されている。
【０１１０】
ステップ１１０２において、通知条件に登録対象ソースコードの類似関係を通知するように設定されているか判断する。類似関係を通知対象に設定する場合は、ステップ１１０３へ、類似関係を通知対象に設定しない場合は、事前類似関係通知フローを終了する。
【０１１１】
ステップ１１０３において、登録対象ソースコードに類似関係が登録されているか判断する。類似関係が登録されている場合は、ステップ１１０４へ、類似関係が登録されていない場合は、ステップ１１０５へ進む。
【０１１２】
ステップ１１０４において、類似関係管理部１０６に登録されている類似関係のソースコード情報を表示する。
【０１１３】
次にステップ１１０５において、通知条件に登録対象ソースコードの過去の類似関係を通知するように設定されているか判断する。過去の類似関係を通知対象に設定する場合は、ステップ１１０６へ、過去の類似関係を通知対象に設定しない場合は、事前類似関係通知フローを終了する。
【０１１４】
ステップ１１０６において、登録対象ソースコードに過去の類似関係が登録されているか判断する。過去の類似関係が登録されている場合は、ステップ１１０７へ、過去の類似関係が登録されていない場合は、ステップ１１０８へ進む。
【０１１５】
ステップ１１０７において、類似関係管理部１０６に登録されている過去の類似関係のソースコード情報を表示する。過去の類似関係のソースコードセットが複数ある場合は、全てのソースコードセットの類似関係ソースコード情報を表示する。
【０１１６】
次にステップ１１０８において、通知条件に登録対象ソースコードの過去バージョンの類似関係を通知するように設定されているか判断する。過去バージョンの類似関係を通知対象に設定する場合は、ステップ１１０６へ、過去バージョンの類似関係を通知対象に設定しない場合は、事前類似関係通知フローを終了する。
【０１１７】
ステップ１１０９において、登録対象ソースコードに過去バージョンの類似関係が登録されているか判断する。過去バージョンの類似関係が登録されている場合は、ステップ１１１０へ、過去バージョンの類似関係が登録されていない場合は、事前類似関係通知フローを終了する。
【０１１８】
最後にステップ１１１０において、類似関係管理部１０６に登録されている過去バージョンの類似関係のソースコード情報を表示する。過去バージョンの類似関係のソースコードセットが複数ある場合、また過去バージョンが複数ある場合は、全てのソースコードセット、バージョンの類似関係ソースコード情報を表示して、事前類似関係通知フローを終了する。
【０１１９】
本発明の実施例では、検索条件、及び通知条件の設定が、過去の類似関係、過去バージョンの類似関係として大きく区別している。さらに細かく条件設定をするようにしても良い。例えば過去バージョンの類似関係において、過去バージョン自体が複数ある場合には、過去の何バージョンまで設定するかを指定するようにしても良い。
【０１２０】
また、条件を類似関係の履歴による指定に加えて、ソースコードの付加される属性情報によって絞込みを行っても良い。例えば、構成管理ツールやファイルシステムによって付加されるメタ情報を指定することで、検索対象や通知対象の絞込みを行うようにすると、より関連性の高いソースコードの抽出が可能となる。
【符号の説明】
【０１２１】
１０１  入出力部
１０２  制御部
１０３  類似ソースコード検索部
１０４  ソースコード管理部
１０５  類似関係検索部
１０６  類似関係管理部
１００１  ＣＰＵ
１００２  ＲＡＭ
１００３  入出力装置
１００４  外部記憶装置
１００５  通信インタフェース
１００６  データベース
１００７  バス
【図１】
2011108059.tif 000003
【図２】
2011108059.tif 000004
【図３】
2011108059.tif 000005
【図４】
2011108059.tif 000006
【図５】
2011108059.tif 000007
【図６】
2011108059.tif 000008
【図７】
2011108059.tif 000009
【図８】
2011108059.tif 000010
【図９】
2011108059.tif 000011
【図１０】
2011108059.tif 000012
【図１１】
2011108059.tif 000013