JP2011108059A - 類似ソースコード管理システム及びプログラム並びに記録媒体 - Google Patents
類似ソースコード管理システム及びプログラム並びに記録媒体 Download PDFInfo
- Publication number
- JP2011108059A JP2011108059A JP2009263502A JP2009263502A JP2011108059A JP 2011108059 A JP2011108059 A JP 2011108059A JP 2009263502 A JP2009263502 A JP 2009263502A JP 2009263502 A JP2009263502 A JP 2009263502A JP 2011108059 A JP2011108059 A JP 2011108059A
- Authority
- JP
- Japan
- Prior art keywords
- source code
- similar
- relationship
- similar relationship
- search
- 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.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】 ソースコードの類似部分を検出する手法は、検索するバージョンの時点で類似の関係にあるソースコードしか検出することができない。そのため、過去のバージョンにおいて類似関係にあったとしても、その後のソースコード開発作業により、現在のバージョンでは類似関係として検出できなくなることがある。過去に類似関係にあったソースコードは、他のソースコードに比べ関連性が高く、類似部分に対する保守時に修正漏れが発生する恐れがある。
【解決手段】 ソースコードの類似関係の履歴管理を行うことにより、類似部分の検出手法のみでは見つからない関連性の高いソースコードを検出する。また、過去に類似関係にあったソースコードを優先的に検索し、履歴関係から検索範囲を限定させることで、効率的な類似検索を行う。
【選択図】 図1
【解決手段】 ソースコードの類似関係の履歴管理を行うことにより、類似部分の検出手法のみでは見つからない関連性の高いソースコードを検出する。また、過去に類似関係にあったソースコードを優先的に検索し、履歴関係から検索範囲を限定させることで、効率的な類似検索を行う。
【選択図】 図1
Description
本発明はソースコードの管理システムに関し、特にソースコードの類似関係の履歴を管理し、関連性の高いソースコードを検出するシステムに関する。
ソフトウェアの開発規模は、増大の一途を辿っている。
ソフトウェアの規模増大に対処するために、以前に開発したソースコードの流用と、新規に開発したソースコードを組み合わせて、開発を進めることがある。また、ソースコード自体を、組織外や社外から調達して利用することもある。
一方、ソフトウェアの規模が大きくなるにつれて、ソフトウェアの保守も重要な問題になっている。その問題の一つに、ソースコードの流用部分に対する保守が挙げられる。ソースコードの流用部分に対して問題が発生し、修正する等の対策を行う場合、同様の流用を行った類似部分に対しても対策を検討・実施する必要がある。流用部分に対して、機能の追加を行う際も同様である。ソフトウェアの規模が大きくなるほど、類似部分を人手で探し出す作業は困難となる。
従来、ソースコードの類似部分を検出する手法として、以下のものがある。
特許文献1には、プログラムソースコード等の様々な一次元配列テキストから、簡単な処理で同系パターンを抽出する手法が開示されている。また、特許文献2には、修正内容またはシステム構造情報に基づいて抽象化した検索対象プログラムと検索元コードを比較し、両者の類似度を算出することで、検索対象プログラム中に存在する検索元コードと類似したコードを検索する手法が開示されている。
しかしながら、上述したようなソースコードの類似部分を検出する手法は、検索するバージョンの時点で類似の関係にあるソースコードしか検出することができない。そのため、過去のバージョンにおいて類似関係にあったとしても、その後のソースコード開発作業により、現在のバージョンでは類似関係として検出できなくなることがある。過去に類似関係にあったソースコードは、他のソースコードに比べ関連性が高く、類似部分に対する保守時に修正漏れが発生する恐れがある。
本発明では上記のような課題を解決するためになされたもので、ソースコードの類似関係を履歴管理し、類似部分の検出手法のみでは見つからない関連性の高いソースコードを検出する。これにより、ソースコード保守時の修正漏れを防ぐソースコード管理システム及びプログラム並びに記録媒体を提供する。
本発明により、ソースコード保守時の修正漏れを防ぎ品質を高める。また、類似関係の検索に優先順位を決めて検索範囲を限定することで、効率的な類似検索を行う。
本発明の管理システムは、ソフトウェアのソースコードを管理するシステムにおいて、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録し、前記検索結果のソースコードに加えて、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを特徴とする。
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録し、前記検索結果のソースコードに加えて、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを特徴とする。
前記ソースコード管理システムは、前記ソースコード管理手段へ前記登録対象ソースコードの新規バージョンを生成する意図を表明する際に、前記類似関係管理手段に登録されている類似の関係にあるソースコードを通知することを特徴とする。
前記類似関係管理手段で履歴管理されている類似の関係にあるソースコードの通知範囲を、管理システム利用者が類似関係の履歴により指定できることを特徴とする。
前記類似関係管理手段で管理される類似関係の情報は、各ソースコードとそのバージョン、類似部分の範囲が記録されていることを特徴とする。
前記類似関係管理手段で管理される類似の関係の情報は、既存の類似関係の構成情報と変化がない場合は登録対象ソースコードのバージョンを更新し、既存の類似関係の構成情報に追加する場合は登録対象ソースコードとそのバージョンを追加し、既存の類似関係の構成情報と異なる場合は、新規の類似関係の情報を登録すると共に、既存の類似関係の情報を履歴管理することを特徴とする。
前記類似関係管理手段で管理される類似の関係の情報は、構成管理ツールに付加されるメタ情報であることを特徴とする。
ソフトウェアのソースコードを管理するシステムにおいて、
ソースコード資産の管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索する際に、前記類似関係管理手段で履歴管理されている類似関係にあるソースコードを優先して検索することを特徴とする。
ソースコード資産の管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索する際に、前記類似関係管理手段で履歴管理されている類似関係にあるソースコードを優先して検索することを特徴とする。
前記類似ソースコード検索手段による検索は、前記類似関係管理手段で履歴管理されている前記登録対象ソースコードの現在の類似関係にあるソースコード、過去の類似関係にあるソースコードの順に優先して検索することを特徴とする。
前記類似ソースコード検索手段による過去の類似関係にあるソースコードの検索は、前記登録対象ソースコードの過去の類似関係にあるソースコード、過去バージョンの類似関係にあるソースコードの順に検索することを特徴とする。
前記類似ソースコード検索手段による検索の範囲を、管理システム利用者が類似関係の履歴により指定できることを特徴とする。
ソフトウェアのソースコードを管理するためにコンピュータを、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録すると共に、前記検索結果のソースコードと、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを機能させるためのソースコード解析プログラムであることを特徴とする。
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録すると共に、前記検索結果のソースコードと、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを機能させるためのソースコード解析プログラムであることを特徴とする。
ソフトウェアのソースコードを管理するためにコンピュータを、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録すると共に、前記検索結果のソースコードと、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを機能させるためのソースコード解析プログラムを記録したコンピュータ読み取り可能な記録媒体であることを特徴とする。
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録すると共に、前記検索結果のソースコードと、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを機能させるためのソースコード解析プログラムを記録したコンピュータ読み取り可能な記録媒体であることを特徴とする。
本発明のソースコード管理システムによれば、ソースコードの類似関係の履歴管理を行うことにより、類似部分の検索手法のみでは見つからない関連性の高いソースコードを検出することができる。これにより、類似部分のソースコード保守時の修正漏れを防ぎ品質を高めることができる。
また、過去に類似関係にあったソースコードを優先的に検索し、履歴関係から検索範囲を限定させることで、効率的な類似検索を行うことができる。
さらに、ソースコード管理システムに登録されているソースコードの編集前に、現在の類似関係を始めとする関連性の高いソースコードを事前に通知することにより、類似部分のソースコード保守時の修正漏れを防ぎ品質を高めることができる。
以下、図面を参照しながら本発明の好適な実施の形態を説明する。
図1は、本発明の実施例1における管理システムの構成を示す図である。入出力部101は管理システム利用者からの入力を受け付ける、もしくは管理システム利用者に出力結果を表示する入出力部である。入出力部101を用いて、登録対象のソースコードや、検索条件、属性情報が指定される。
制御部102は、入出力部101からの要求を受け付け、その要求に応じて類似ソースコード検索部103、類似関係検索部105を制御し、その結果を入出力部101に返すものである。また、ソースコード管理部104、類似関係管理部106で管理されている情報の入出力を行うものである。
類似ソースコード検索部103は、制御部102から受け取ったソースコードに含まれる類似部分をソースコード管理部104で管理されているソースコードから検索し、その検索結果を制御部102に返すものである。本発明の説明で使用する類似部分とは、他のソースコード中に全く同じか、類似の文字列が存在するソースコード部分である。
ソースコード管理部104では、これまで開発したソースコードや、組織外や社外から調達したソースコードなど、各種ソフトウェア資産を履歴管理する構成管理リポジトリである。また、ソースコードを識別するための属性情報を付加させる機能を有している。
類似関係検索部105では、制御部102から受け取ったソースコードと類似関係にあるソースコードを、類似関係管理部106で管理されている類似関係から検索し、その検索結果を制御部102に返すものである。本発明の説明で使用する類似関係とは、互いに同じ類似部分を持つ複数のソースコードのセットである。
類似関係管理部106は、類似ソースコード検索部103によって検索された、同じ類似部分を持つ複数のソースコードセットの情報を管理するものである。また、ソースコードのバージョンアップに伴い、類似関係の情報も履歴管理を行うものである。ソースコード管理部104と同じ構成管理リポジトリとして、構成しても良い。
また、本発明の実施の形態として使用される情報処理装置のハードウェア構成の一例を、図10を参照して説明する。
CPU1001は、外部記憶装置1004やデータベース1006に格納されているソースコードを読み出し、対象ソースコードの類似検出処理、類似関係検索処理等を実行する。
RAM1002は、演算に使用される各種データを一時的に記憶するための領域として使用される。
入出力装置1003は、キーボード、マウス等からデータを入力する装置、及びモニタ等で出力結果を表示する装置である。
外部記憶装置1004は、類似検出や類似関係検索等のプログラム及びソースコードの属性情報等のデータが格納される。
通信インタフェース1005は、LAN、インターネット等のネットワークに接続するための装置である。ネットワークを介してデータベース1006にアクセスし、ソースコードや属性情報等のデータを取得することが可能である。
データベース1006は、構成管理リポジトリを備えておりソースコード資産を管理する。また、ソースコードを識別するための属性情報を付加させる機能を有している。
また、CPU1001、RAM1002、外部記憶装置1004等は、バス1007により接続されている。
ここで、本発明の説明で使用する類似の定義を行う。類似とは、ソースコード中の空行やコメント部分などを除いた命令処理実行に関わる部分が、全て一致しているか、類似の文字列が存在するソースコードの関係と定義する。
図8は、本発明におけるソースコードの類似関係を説明するための図である。ソースコード801とソースコード802、ソースコード803は、それぞれ類似の文字列が存在するとする。網掛けの部分が、類似の文字列である。この時、これら3つのソースコードは類似の関係にある。804の枠は、類似の関係であることを示している。
一方、ソースコードの編集によりソースコード802がソースコード805へ、ソースコード803が806へそれぞれバージョンアップしたとする。特に、類似の文字列の部分が編集され、一部ソースコード行の挿入や削除等が行われたとする。この結果、従来は類似の文字列として検出されていた部分が、類似部分としての検出ができなくなることがある。
これにより、例えばソースコード801の類似部分に対して問題が発生し、修正の対策が必要な場合に、ソースコード805、806は類似関係として検出がされないことになる。過去バージョンで同じ類似の文字列を持つことからわかるように、ソースコード801とソースコード805、806は他のソースコードに比べ関連性が高いことは明らかである。その結果、類似部分に対する修正の対策漏れが発生する恐れがある。
図9は、本発明における、ソースコードの類似関係の履歴を説明するための図である。複数のソースコードファイルとそのバージョンの類似関係の履歴を示している。ソースコードファイルは、ファイルAからファイルDまで4つのファイルがあり、それぞれバージョン1、もしくは2が付与されている。
例えば、4つのソースコードファイルのそれぞれバージョン1が類似関係にあるとする。それを示しているのが、線901、もしくは枠905である。次に、ファイルDがバージョン2にバージョンアップしたとする。その結果、これまで類似関係にあったソースコードとの類似関係がなくなったとする。類似関係を維持しているのは、ファイルAのバージョン1、ファイルBのバージョン1、ファイルCのバージョン1である。これを示しているのが、線902、もしくは枠906である。
一方、ファイルBがバージョン2にバージョンアップしても、これまで類似関係にあったソースコードとの類似関係が維持されているとする。これを示しているのが、線903、もしくは枠907である。
さらに、ファイルAがバージョン2にバージョンアップした際には、これまで類似関係にあったソースコードとの類似関係がなくなったとする。これを示しているのが、線904、もしくは枠908である。
ここでファイルBに着目してみる。現在の類似関係である線904、もしくは枠908で類似関係にあるのはファイルCだけである。しかし、ファイルBの過去の類似関係にはファイルA、ファイルBの過去バージョンの類似関係にはファイルDがある。これらファイルは、ファイルBとの関連性が高いが、現在の類似関係の検出のみでは検出できないことがわかる。
次に、ソースコードの登録フローについて図2を用いて説明する。
まず、ステップ201で、管理システム利用者が指定した登録対象ソースコードを入力する。この際、登録対象ソースコードの入力は単数でも複数でも構わない。
次にステップ202で、類似の検索対象となるソースコードを入力する。新規ソースコードの場合、ソースコード管理部104で管理されている全てのソースコードの最新バージョンが対象になる。既存ソースコードの場合、管理システム利用者によって指定された検索条件と、登録されている類似関係の情報により抽出されたソースコードのバージョンが対象になる。ステップ202内のフローの詳細については、図3の検索対象ソースコード入力フローで説明する。
そして、ステップ203で登録対象のソースコードに、検索対象のソースコードと類似の関係にあるソースコードがないか類似ソースコード検索を行う。
類似ソースコードとは、登録対象となるソースコードに対して、類似したソースコード片を持つソースコードである。所定のソースコードから、類似のソースコード片を持つソースコードを検出するための手法は、従来いくつか提案されている。例えば、ソースコードをプログラミング言語の文法に基づいて字句解析を行い、トークン列に変換する。その後トークン列の変換を行い、パラメータ置換を行う。そして、パラメータ置換後のトークン列を比較し、トークン一致部分の検出を行う。最後に、検出したトークン一致部分に対する、ソースコード相当部分の抽出を行う。このソースコードが、登録対象ソースコードに対する、類似ソースコードになる。ステップ203内のフローの詳細については、図4の類似ソースコード検索フローで説明する。
その後、ステップ204で、登録対象ソースコードの類似関係を登録する。登録対象ソースコードが新規ソースコードの場合、ソースコード管理部104に対して新規登録を行い、バージョンを付与する。一方、登録対象ソースコードが既存ソースコードの場合、ソースコード管理部104に登録されているソースコードのバージョンアップを行う。
その後、登録対象ソースコードの付与したバージョンと、類似関係にあるソースコードのバージョンに対し、類似関係を表す情報を付加する。類似関係の情報には、各ソースコードの類似部分の範囲情報も付加する。ステップ204内のフローの詳細については、図5の類似関係登録フローで説明する。
最後に、ステップ205で類似関係の登録結果を、入出力部101に表示する。結果表示には、登録対象ソースコードの類似部分の範囲情報と、類似関係ソースコードの情報を表示する。類似関係ソースコードの情報とは、類似関係ソースコードのファイル名やソースコード管理部104での保管先アドレス、ファイルバージョン、類似部分の範囲情報等である。さらに、管理システム利用者によって指定された通知条件に従って、類似関係管理部106で管理されている過去の類似関係ソースコードに関する情報を表示する。表示する情報は、先の類似関係ソースコードの情報と同様である。ステップ205内のフローの詳細については、図7の結果表示フローで説明する。
次に、類似の検索対象となるソースコードの入力フローについて、図3を用いて説明する。本フローは、先に説明した図2の類似関係登録実行フローのステップ202にあたる。
まず、ステップ301において、管理システム利用者から指定された検索条件を読み取る。検索条件には、それぞれ過去の類似関係のソースコード、過去バージョンの類似関係のソースコード、類似関係以外のソースコードを検索対象として入力するかを指定される。
ステップ302において、登録対象ソースコードが既存ファイルか判断する。既存ファイルである場合は、ステップ303へ、既存ファイルではなく新規ファイルである場合は、ステップ305へ進む。
ステップ303において、登録対象ソースコードに類似関係が登録されているか判断する。類似関係が登録されている場合は、ステップ304へ、類似関係が登録されていない場合は、ステップ305へ進む。
ステップ304では、登録対象ソースコードに登録されている、最新の類似関係ソースコードを検索対象に入力する。類似関係ソースコードが複数ある場合は、全てのソースコードを入力する。
ステップ305では、登録対象ソースコードが新規ファイルであるか、既存のソースコードファイルに類似関係が登録されていないため、ソースコード管理部104で管理されている全てのソースコードの入力を行う。各ソースコードのバージョンは最新バージョンとする。全てのソースコードの入力が終わった場合は、類似の検索対象ソースコードの入力フローを終了する。
次に、ステップ306において、検索条件に登録対象ソースコードの過去の類似関係を入力するように設定されているか判断する。過去の類似関係を検索対象に入力する場合は、ステップ307へ、過去の類似関係を検索対象に入力しない場合は、類似の検索対象ソースコードの入力フローを終了する。
ステップ307において、登録対象ソースコードに過去の類似関係が登録されているか判断する。過去の類似関係が登録されている場合は、ステップ308へ、過去の類似関係が登録されていない場合は、ステップ309へ進む。
ステップ308では、登録対象ソースコードに登録されている、過去の類似関係ソースコードを検索対象に入力する。過去の類似関係のソースコードセットが複数ある場合は、全てのソースコードセットの類似関係ソースコードを入力する。
次に、ステップ309において、検索条件に登録対象ソースコードの過去バージョンの類似関係を入力するように設定されているか判断する。過去バージョンの類似関係を検索対象に入力する場合は、ステップ310へ、過去バージョンの類似関係を検索対象に入力しない場合は、類似の検索対象ソースコードの入力フローを終了する。
ステップ310において、登録対象ソースコードに過去バージョンの類似関係が登録されているか判断する。過去バージョンの類似関係が登録されている場合は、ステップ311へ、過去バージョンの類似関係が登録されていない場合は、ステップ312へ進む。
ステップ311では、登録対象ソースコードに登録されている、過去バージョンの類似関係ソースコードを検索対象に入力する。過去バージョンの類似関係のソースコードセットが複数ある場合、また過去バージョンが複数ある場合は、全てのソースコードセット、バージョンの類似関係ソースコードを入力する。
次に、ステップ312において、検索条件に登録対象ソースコードの類似関係以外を入力するように設定されているか判断する。類似関係以外を検索対象に入力する場合は、ステップ313へ、類似関係以外を検索対象に入力しない場合は、類似の検索対象ソースコードの入力フローを終了する。
ステップ313では、登録対象ソースコードに登録されている、類似関係以外のソースコードを検索対象に入力する。各ソースコードのバージョンは最新バージョンとする。全てのソースコードの入力が終わった場合は、類似の検索対象ソースコードの入力フローを終了する。
次に、類似ソースコード検索フローについて、図4を用いて説明する。本フローは、先に説明した図2の類似関係登録実行フローのステップ203にあたる。
まず、ステップ401において、ソースコードをプログラミング言語の文法に基づき、関数など特定の処理を実行する命令単位で字句解析を実行する。これにより、ソースコードの命令単位でひとつのトークン列に変換する。
次にステップ402において、パラメータ置換を行う。この際、ソースコードの予約語や演算子等の固定字句や、固定字句以外の自由字句など字句の種類に応じて置換方法を変えてもよい。
ステップ403では、パラメータ置換後のトークン列を比較し、トークン一致部分の検出を行う。例えば、既知の技術であるサフィックス木を用いたアルゴリズムにより、一致するトークン列を検出する。
次のステップ404で、トークン一致部分を検出できたか判定を行う。検出できた場合はステップ405へ、検出できなかった場合は処理を終了する。
ステップ405では一致するトークン列が、元のソースコード上のどこに相当するのかをたどり、ソースコード上での位置を特定する。これにより、登録対象ソースコードと類似候補ソースコードの命令単位の抽出を行って処理を終了する。
このように、ソースコードの字句解析を行ってトークン列に変換し、さらにパラメータ置換を行ったトークン列を比較して、トークン一致部分の検出を行う。トークン一致部分のソースコード上での位置を特定することで、類似したソースコード片を持つ類似候補のソースコードを検索する。
また、本フローの中で説明した、類似のソースコード片を持つソースコードを検出する手法は一例であり、類似のソースコード片を持つソースコードが検出できるならば、他の手法を採用しても良い。
次に、類似関係登録フローについて、図5を用いて説明する。本フローは、先に説明した図2の類似関係登録実行フローのステップ204にあたる。
まず、ステップ501で、登録対象ソースコードをソースコード管理部104に登録する。登録対象ソースコードが新規ソースコードの場合、ソースコード管理部104に対して新規登録を行い、バージョンを付与する。一方、登録対象ソースコードが既存ソースコードの場合、ソースコード管理部104に登録されているソースコードのバージョンアップを行う。
次のステップ502で、類似関係のソースコードを検出したかを判定する。類似関係のソースコードを検出した場合は、ステップ503へ、検出しなかった場合は、ステップ505へ進む。
ステップ503では、登録対象ソースコードの付与したバージョンと、類似関係にあるソースコードのバージョンに対し、類似関係を表す情報を付加する。本実施例では、ソースコード管理部104の構成管理ツールによるラベルを利用する。
構成管理ツールによるラベルは、複数のソースコードとそのバージョンに対して情報を付加することができる。任意のソースコードのあるバージョンに対して付加したラベルの適用時間の履歴により、過去の類似関係を特定することができる。一方、任意のソースコードのバージョン履歴により、過去バージョンの類似関係を特定することができる。ステップ503内のフローの詳細については、図6のラベル適用フローで説明する。
ステップ504では、類似関係にあるソースコードの詳細情報を入力する。例えば、類似部分の開始行、終了行といった範囲情報などである。本実施例では、先のステップ503で適用したラベルのプロパティやコメント等に、類似関係にある各ソースコードに対して範囲情報を記録する。
最後にステップ505では、全ての登録対象のソースコードに対して類似関係登録処理を実行したかを判定する。全ての登録対象ソースコードに対して実行した場合はフローを終了し、まだ全ての解析対象ソースコードに対して実行していない場合は、ステップ501へと戻り、繰り返し処理を行う。
次に、ラベル適用フローについて、図6を用いて説明する。本フローは、先に説明した図5の類似関係登録フローのステップ503にあたる。
まず、ステップ601において、検出した類似関係のソースコードセットが、既存の類似関係セットを示すラベルに登録されているか判断する。既存のラベルに登録されている場合は、ステップ602へ、登録されていない場合は、ステップ603へ進む。
ステップ602では、検出した類似関係を示すラベルに対し、登録対象ソースコードとそのバージョンを追加する。これにより、既存の類似関係セットに、登録対象ソースコードを加えた新しい類似関係セットとして追加更新される。
次に、ステップ603において、検出した類似関係のソースコードセットに、登録対象ソースコードの登録前のバージョンを加えたソースコードセットが、既存の類似関係セットを示すラベルに登録されているか判断する。既存のラベルに登録されている場合は、ステップ604へ、登録されていない場合は、ステップ605へ進む。
ステップ604では、検出した類似関係を示すラベルに対し、登録対象ソースコードのバージョンを、新規バージョンに更新する。これにより、既存の類似関係セットに、登録対象ソースコードのバージョンが更新される。
ステップ605では、検出した類似関係のソースコードセットや、登録対象ソースコードの登録前のバージョンを加えたソースコードセットが登録されていなかったため、新規の類似関係のソースコードセットを登録する。
それぞれ、ステップ602、604、605の処理が完了したら、フローを終了する。
このように、検出した類似関係のソースコードセットが、既存の類似関係セットを示すラベルに登録されているか判断する。既存の登録状況により、類似関係の追加更新、類似関係を構成するソースコードのバージョン更新、または新規の類似関係セットの登録を行う。
次に、結果表示フローについて、図7を用いて説明する。本フローは、先に説明した図2のソースコード登録フローのステップ205にあたる。
まず、ステップ701において、先の類似関係登録フローによって登録された類似関係のソースコード情報を表示する。類似関係のソースコードが検出できなかった場合は、検出なしとして表示する。
ステップ702において、登録対象ソースコードが既存ファイルか判断する。既存ファイルである場合は、ステップ703へ、既存ファイルではなく新規ファイルである場合は、ステップ706へ進む。
ステップ703において、管理システム利用者から指定された通知条件を読み取る。通知条件には、過去の類似関係のソースコード、過去バージョンの類似関係のソースコードを通知対象として表示するかが指定されている。
ステップ704において、登録対象ソースコードに類似関係が登録されているか判断する。類似関係が登録されている場合は、ステップ705へ、類似関係が登録されていない場合は、ステップ706へ進む。
ステップ705では、通知条件に登録対象ソースコードの過去の類似関係を通知するように設定されているか判断する。過去の類似関係を通知対象に設定する場合は、ステップ707へ、過去の類似関係を通知対象に設定しない場合は、結果表示フローを終了する。
ステップ706では、登録対象ソースコードが新規ファイルであるか、既存のソースコードファイルに類似関係が登録されていないため、過去の類似関係のソースコードは存在しない。よって、結果表示フローを終了する。
ステップ707において、登録対象ソースコードに過去の類似関係が登録されているか判断する。過去の類似関係が登録されている場合は、ステップ708へ、過去の類似関係が登録されていない場合は、ステップ709へ進む。
ステップ708では、登録対象ソースコードに登録されている、過去の類似関係ソースコード情報を表示する。過去の類似関係のソースコードセットが複数ある場合は、全てのソースコードセットの類似関係ソースコード情報を表示する。
次に、ステップ709において、通知条件に登録対象ソースコードの過去バージョンの類似関係を通知するように設定されているか判断する。過去バージョンの類似関係を通知対象に設定する場合は、ステップ710へ、過去バージョンの類似関係を通知対象に設定しない場合は、結果表示フローを終了する。
ステップ710において、登録対象ソースコードに過去バージョンの類似関係が登録されているか判断する。過去バージョンの類似関係が登録されている場合は、ステップ711へ、過去バージョンの類似関係が登録されていない場合は、結果表示フローを終了する。
ステップ711では、登録対象ソースコードに登録されている、過去バージョンの類似関係ソースコード情報を表示する。過去バージョンの類似関係のソースコードセットが複数ある場合、また過去バージョンが複数ある場合は、全てのソースコードセット、バージョンの類似関係ソースコード情報を表示する。
実施例2では、ソースコード管理部104に管理されているソースコードの編集開始時の事前類似関係通知フローについて図11を用いて説明する。管理システム利用者に対し、ソースコード編集前に関連性の高いソースコードを事前に知らせることが出来る。これにより、類似部分のソースコード開発作業を効率化することができる。
まず、ステップ1101において、管理システム利用者から指定された通知条件を読み取る。通知条件には、類似関係のソースコード、過去の類似関係のソースコード、過去バージョンの類似関係のソースコードを通知対象として表示するかが指定されている。
ステップ1102において、通知条件に登録対象ソースコードの類似関係を通知するように設定されているか判断する。類似関係を通知対象に設定する場合は、ステップ1103へ、類似関係を通知対象に設定しない場合は、事前類似関係通知フローを終了する。
ステップ1103において、登録対象ソースコードに類似関係が登録されているか判断する。類似関係が登録されている場合は、ステップ1104へ、類似関係が登録されていない場合は、ステップ1105へ進む。
ステップ1104において、類似関係管理部106に登録されている類似関係のソースコード情報を表示する。
次にステップ1105において、通知条件に登録対象ソースコードの過去の類似関係を通知するように設定されているか判断する。過去の類似関係を通知対象に設定する場合は、ステップ1106へ、過去の類似関係を通知対象に設定しない場合は、事前類似関係通知フローを終了する。
ステップ1106において、登録対象ソースコードに過去の類似関係が登録されているか判断する。過去の類似関係が登録されている場合は、ステップ1107へ、過去の類似関係が登録されていない場合は、ステップ1108へ進む。
ステップ1107において、類似関係管理部106に登録されている過去の類似関係のソースコード情報を表示する。過去の類似関係のソースコードセットが複数ある場合は、全てのソースコードセットの類似関係ソースコード情報を表示する。
次にステップ1108において、通知条件に登録対象ソースコードの過去バージョンの類似関係を通知するように設定されているか判断する。過去バージョンの類似関係を通知対象に設定する場合は、ステップ1106へ、過去バージョンの類似関係を通知対象に設定しない場合は、事前類似関係通知フローを終了する。
ステップ1109において、登録対象ソースコードに過去バージョンの類似関係が登録されているか判断する。過去バージョンの類似関係が登録されている場合は、ステップ1110へ、過去バージョンの類似関係が登録されていない場合は、事前類似関係通知フローを終了する。
最後にステップ1110において、類似関係管理部106に登録されている過去バージョンの類似関係のソースコード情報を表示する。過去バージョンの類似関係のソースコードセットが複数ある場合、また過去バージョンが複数ある場合は、全てのソースコードセット、バージョンの類似関係ソースコード情報を表示して、事前類似関係通知フローを終了する。
本発明の実施例では、検索条件、及び通知条件の設定が、過去の類似関係、過去バージョンの類似関係として大きく区別している。さらに細かく条件設定をするようにしても良い。例えば過去バージョンの類似関係において、過去バージョン自体が複数ある場合には、過去の何バージョンまで設定するかを指定するようにしても良い。
また、条件を類似関係の履歴による指定に加えて、ソースコードの付加される属性情報によって絞込みを行っても良い。例えば、構成管理ツールやファイルシステムによって付加されるメタ情報を指定することで、検索対象や通知対象の絞込みを行うようにすると、より関連性の高いソースコードの抽出が可能となる。
101 入出力部
102 制御部
103 類似ソースコード検索部
104 ソースコード管理部
105 類似関係検索部
106 類似関係管理部
1001 CPU
1002 RAM
1003 入出力装置
1004 外部記憶装置
1005 通信インタフェース
1006 データベース
1007 バス
102 制御部
103 類似ソースコード検索部
104 ソースコード管理部
105 類似関係検索部
106 類似関係管理部
1001 CPU
1002 RAM
1003 入出力装置
1004 外部記憶装置
1005 通信インタフェース
1006 データベース
1007 バス
Claims (12)
- ソフトウェアのソースコードを管理するシステムにおいて、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録し、前記検索結果のソースコードに加えて、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを特徴とするソースコード管理システム。 - 前記ソースコード管理システムは、前記ソースコード管理手段へ前記登録対象ソースコードの新規バージョンを生成する意図を表明する際に、前記類似関係管理手段に登録されている類似の関係にあるソースコードを通知することを特徴とする請求項1に記載のソースコード管理システム。
- 前記類似関係管理手段で履歴管理されている類似の関係にあるソースコードの通知範囲を、管理システム利用者が類似関係の履歴により指定できることを特徴とする請求項1に記載のソースコード管理システム。
- 前記類似関係管理手段で管理される類似関係の情報は、各ソースコードとそのバージョン、類似部分の範囲が記録されていることを特徴とする請求項1に記載のソースコード管理システム。
- 前記類似関係管理手段で管理される類似の関係の情報は、既存の類似関係の構成情報と変化がない場合は登録対象ソースコードのバージョンを更新し、既存の類似関係の構成情報に追加する場合は登録対象ソースコードとそのバージョンを追加し、既存の類似関係の構成情報と異なる場合は、新規の類似関係の情報を登録すると共に、既存の類似関係の情報を履歴管理することを特徴とする請求項1に記載のソースコード管理システム。
- 前記類似関係管理手段で管理される類似の関係の情報は、構成管理ツールに付加されるメタ情報であることを特徴とする請求項1に記載のソースコード管理システム。
- ソフトウェアのソースコードを管理するシステムにおいて、
ソースコード資産の管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索する際に、前記類似関係管理手段で履歴管理されている類似関係にあるソースコードを優先して検索することを特徴とするソースコード管理システム。 - 前記類似ソースコード検索手段による検索は、前記類似関係管理手段で履歴管理されている前記登録対象ソースコードの現在の類似関係にあるソースコード、過去の類似関係にあるソースコードの順に優先して検索することを特徴とする請求項7に記載のソースコード管理システム。
- 前記類似ソースコード検索手段による過去の類似関係にあるソースコードの検索は、前記登録対象ソースコードの過去の類似関係にあるソースコード、過去バージョンの類似関係にあるソースコードの順に検索することを特徴とする請求項7に記載のソースコード管理システム。
- 前記類似ソースコード検索手段による検索の範囲を、管理システム利用者が類似関係の履歴により指定できることを特徴とする請求項7に記載のソースコード管理システム。
- ソフトウェアのソースコードを管理するためにコンピュータを、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録すると共に、前記検索結果のソースコードと、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを機能させるためのソースコード解析プログラム。 - ソフトウェアのソースコードを管理するためにコンピュータを、
ソースコード資産の履歴管理を行うソースコード管理手段と、
文字列の類似部分を持つソースコードを検索する類似ソースコード検索手段と、
互いに類似の関係にあるソースコードの履歴管理を行う類似関係管理手段を備え、
前記ソースコード管理手段へ登録対象ソースコードの新規バージョン生成時に、前記類似ソースコード検索手段が前記登録対象ソースコードと類似の関係にあるソースコードを、前記ソースコード管理手段で管理されているソースコードから検索して前記類似関係管理手段に登録すると共に、前記検索結果のソースコードと、前記類似関係管理手段で履歴管理された類似の関係にあるソースコードを通知することを機能させるためのソースコード解析プログラムを記録したコンピュータ読み取り可能な記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009263502A JP2011108059A (ja) | 2009-11-19 | 2009-11-19 | 類似ソースコード管理システム及びプログラム並びに記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009263502A JP2011108059A (ja) | 2009-11-19 | 2009-11-19 | 類似ソースコード管理システム及びプログラム並びに記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2011108059A true JP2011108059A (ja) | 2011-06-02 |
Family
ID=44231442
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009263502A Pending JP2011108059A (ja) | 2009-11-19 | 2009-11-19 | 類似ソースコード管理システム及びプログラム並びに記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2011108059A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016184323A (ja) * | 2015-03-26 | 2016-10-20 | 日本電気株式会社 | 情報処理装置 |
-
2009
- 2009-11-19 JP JP2009263502A patent/JP2011108059A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016184323A (ja) * | 2015-03-26 | 2016-10-20 | 日本電気株式会社 | 情報処理装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109376166B (zh) | 脚本转换方法、装置、计算机设备及存储介质 | |
US8316353B2 (en) | Problem analysis via matching contiguous stack trace lines to symptom rules | |
US10922614B2 (en) | Converting procedural text to an actionable knowledge form | |
KR100456023B1 (ko) | 절차 지향 프로그램을 컴포넌트 기반의 시스템으로래핑하기 위한 방법 및 그 장치 | |
EP3103002B1 (en) | Batch generation of links to documents based on document name and page content matching | |
WO2014157056A1 (ja) | ソースプログラム解析システム、ソースプログラム解析方法およびプログラムを記録した記録媒体 | |
CN114138244A (zh) | 模型类文件自动生成方法、装置、存储介质及电子设备 | |
JP2010282241A (ja) | ファイル管理装置、ファイル管理システム、ファイル管理方法、および、プログラム | |
US8229934B2 (en) | System and program for collecting documents | |
US8903754B2 (en) | Programmatically identifying branding within assets | |
JP2011108059A (ja) | 類似ソースコード管理システム及びプログラム並びに記録媒体 | |
JP2016133946A (ja) | ソースコードレビュー方法及びそのシステム | |
JP2008077285A (ja) | Sql管理システムとsql管理方法およびプログラム | |
WO2021205589A1 (ja) | テストスクリプト生成装置、テストスクリプト生成方法及びプログラム | |
JP2011113298A (ja) | 流用ソースコード解析システム及びプログラム並びに記録媒体 | |
JP2009053767A (ja) | プログラム解析装置、および、プログラム解析方法 | |
JP5578625B2 (ja) | プログラム分析装置、プログラム分析方法、及びプログラム | |
JP7524690B2 (ja) | 判定プログラム、判定方法および情報処理装置 | |
CN118170719B (zh) | 一种等保测评的自动化归档方法、装置、设备及存储介质 | |
WO2024127583A1 (ja) | 操作支援装置、操作支援方法及び操作支援プログラム | |
JP7261101B2 (ja) | 欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム | |
EP4350506A1 (en) | Information processing program, information processing method and information processing device | |
JP5359446B2 (ja) | 情報処理システム、アクセスパス決定方法及びアクセスパス決定プログラム | |
JP2005352861A (ja) | 電子データ処理方法、電子データ処理装置、および、電子データ処理プログラム | |
CN106775695B (zh) | 一种基于边不稳定性的软件函数变更预测系统及方法 |