(57)【要約】      （修正有）【課題】プログラム中の類似箇所を効率よく高精度で特定する。【解決手段】個々の変更案件に対応して行われたソースコードの変更箇所を取得し（４１２１）、変更を生じさせた変更案件が類似する変更箇所の組み合わせを候補として選出し（４１２２）、候補として選出した組み合わせの夫々について変更箇所数を記憶し（４１２３）、候補として選出した組み合わせの夫々について変更箇所の内容の類似性を評価し（４１２４）、候補とした選出した組み合わせを構成している各変更箇所に含まれる、第１の変更案件に基づく複数の変更箇所の相対位置と、各変更箇所に含まれる、第２の変更案件に基づく複数の変更箇所の相対位置との類似性を評価し（４１２５）、変更箇所数と、変更内容類似性の評価結果と、相対位置類似性の評価の結果とに基づきプログラムの類似箇所を特定する（４１２６）ようにする。【選択図】図１Ｄ
2009199172.tif 000002
【特許請求の範囲】
【請求項１】
プログラム中の類似箇所を特定する情報処理システムであって、
個々の変更案件に対応して行われたソースコードの変更箇所を取得する変更位置情報取得部と、
変更を生じさせた変更案件が類似する前記変更箇所の組み合わせを候補として選出する類似候補選出部と、
候補として選出した前記組み合わせの夫々について変更箇所数を記憶する変更箇所数記憶部と、
候補として選出した前記組み合わせの夫々について前記変更箇所の内容の類似性を評価する変更内容類似性評価部と、
前記変更箇所数と、前記変更内容類似性評価部による評価の結果とに基づきプログラム中の類似箇所を特定する類似箇所特定部と
を備えることを特徴とする情報処理システム。
【請求項２】
請求項１に記載の情報処理システムであって、
候補として選出した前記組み合わせを構成している各前記変更箇所に含まれる、第１の変更案件に基づく複数の変更箇所の相対位置と、各前記変更箇所に含まれる、第２の変更案件に基づく複数の変更箇所の相対位置との類似性を評価する相対位置類似性評価部をさらに備え、
前記類似箇所特定部は、前記変更箇所数と、前記変更内容類似性評価部による評価の結果と、前記相対位置類似性評価部による評価の結果とに基づきプログラムの類似箇所を特定すること
を特徴とする情報処理システム。
【請求項３】
請求項１又は２のいずれかに記載の情報処理システムであって、
変更案件を特定する識別情報と、ソースコードの変更者を特定する情報と、ソースコードに追加されたステップ数と、ソースコードの変更に要した日数である変更日数とを含む変更案件情報を複数記憶する変更点管理部と、
前記変更者、前記追加されたステップ数、又は前記変更日数の設定欄を有する画面を表示する条件設定画面表示部と、
前記設定欄の設定内容に応じて選出される前記変更案件情報に対応する変更案件を選出する変更案件選出部と
をさらに備え、
前記類似候補選出部は、前記変更案件選出部によって選出された前記変更案件の中から、変更を生じさせた変更案件が類似している前記変更箇所の組み合わせを候補として選出すること
を特徴とする情報処理システム。
【請求項４】
請求項１又は２のいずれかに記載の情報処理システムであって、
変更案件を特定する識別情報と、変更案件が生じた理由である変更理由と、変更案件によって行われた変更内容と、変更が生じた工程とを含む変更案件情報を複数記憶する変更点管理部をさらに備え、
前記変更内容類似性評価部は、前記変更理由、前記変更内容、前記変更が生じた工程のうちの少なくともいずれかについての類似性を評価することにより、前記組み合わせの夫々について前記変更箇所の内容の類似性を評価すること
を特徴とする情報処理システム。
【請求項５】
請求項１又は２に記載の情報処理システムであって、
前記類似箇所特定部によって特定された類似箇所を表示する結果表示部を有し、
前記結果表示部は、類似箇所が強調表示されたソースコードが表示されるウィンドウと、ソースコード全体に対する類似箇所の存在位置が表示された類似箇所ナビゲートバーを表示すること
を特徴とする情報処理システム。
【請求項６】
プログラム中の類似箇所を特定する方法であって、
情報処理装置が、
個々の変更案件に対応して行われたソースコードの変更箇所を取得するステップと、
変更を生じさせた変更案件が類似する前記変更箇所の組み合わせを候補として選出するステップと、
候補として選出した前記組み合わせの夫々について変更箇所数を記憶するステップと、
候補として選出した前記組み合わせの夫々について前記変更箇所の内容の類似性を評価するステップと、
前記変更箇所数と、前記変更箇所の内容の類似性の評価の結果とに基づきプログラム中の類似箇所を特定するステップと
を含むこと
を特徴とする類似箇所特定方法。
【請求項７】
情報処理装置に、
個々の変更案件に対応して行われたソースコードの変更箇所を取得する機能と、
変更を生じさせた変更案件が類似する前記変更箇所の組み合わせを候補として選出する機能と、
候補として選出した前記組み合わせの夫々について変更箇所数を記憶する機能と、
候補として選出した前記組み合わせの夫々について前記変更箇所の内容の類似性を評価する機能と、
前記変更箇所数と、前記変更箇所の内容の類似性の評価の結果とに基づきプログラム中の類似箇所を特定する機能と
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、プログラム中の類似箇所特定方法、及びプログラムに関し、とくにプログラム中の類似箇所を効率よく高い精度で特定する技術に関する。
【背景技術】
【０００２】
一般に、プログラム中に同じような処理を行う部分（類似箇所）が複数存在する場合には、プログラムの記述量（ステップ数）が多くなる。また、この場合、変更案件によりプログラムの変更が生じると、個々の類似箇所に対して同じような変更作業を行わなければならず、非効率である。さらに、変更漏れによって実行時に不具合が生じる可能性が高くなる。
【０００３】
そこで例えば特許文献１には、プログラム中に存在する類似箇所を検出し、対象のソフトウエアの重複度を評価して、再構成によってどの程度の重複されたコードの削減効果が見込めるかを判断することが記載されている。
【特許文献１】特開２００１−３１２４１９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記技術では、もっぱらプログラムを構成する多数のソースコードのうち、まず任意の２つのソースコードを比較し、またプログラム全体を分析するためにはプログラムを構成する全ソースコードの組み合わせ回数分の比較処理を繰り返すことにより得られる比較情報に基づいてプログラムの重複部分を検出するため、コピーや貼り付けを行うことにより生じた比較的単純な類似箇所しか検出することができない。また、コード形式は異なるが処理内容は類似しているような類似箇所は検出することができない。また、ソースコードの記載量が膨大であったり、その構成が複雑な場合は、類似箇所の検出に多大な時間を要してしまう。
【０００５】
本発明は、このような課題を解決すべくなされたもので、プログラム中の類似箇所を効率よく高い精度で特定することが可能な情報処理システム、プログラム中の類似箇所特定方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するための本発明のうちの主たる発明は、プログラム中の類似箇所を特定する情報処理システムであって、個々の変更案件に対応して行われたソースコードの変更箇所を取得する変更位置情報取得部と、変更を生じさせた変更案件が類似する前記変更箇所の組み合わせを候補として選出する類似候補選出部と、候補として選出した前記組み合わせの夫々について変更箇所数を記憶する変更箇所数記憶部と、候補として選出した前記組み合わせの夫々について前記変更箇所の内容の類似性を評価する変更内容類似性評価部と、前記変更箇所数と、前記変更内容類似性評価部による評価の結果とに基づきプログラム中の類似箇所を特定する類似箇所特定部とを備えることとする。
【０００７】
１つの変更案件によるソースコードの変更箇所は、必ず同一の変更目的によって変更される。１つの変更案件によって複数の箇所に同様の変更が行なわれている場合、同じ目的で同じ変更が行なわれていることから、その変更箇所付近のソースコードがプログラムの意味的に類似している可能性が高く、また複数の変更案件によるソースコードの変更箇所に共通性がある場合、その変更箇所が類似している可能性がさらに高いと判断することができる。したがって、変更案件の変更情報を基に分析することにより、効率的かつ高精度でプログラム中の類似箇所を特定することが可能となる。
【発明の効果】
【０００８】
本発明によれば、プログラム中の類似箇所を効率よく高い精度で特定することができる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の実施形態について詳細に説明する。図１Ａにこの実施形態で説明する情報処理システム１の概略的な構成を示している。同図に示すように、この情報処理システム１は、例えばＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）、及びインターネット等である通信ネットワーク５を介して互いに通信可能に接続された、変更点管理装置２、構成管理装置３、プログラム分析装置４、及びユーザ端末６を含んで構成されている。
【００１０】
図１Ｂに、変更点管理装置２、構成管理装置３、プログラム分析装置４、及びユーザ端末６として利用可能な情報処理装置（コンピュータ）のハードウエア構成の一例を示している。図１Ｂに示した構成を有する情報処理装置１０として、パーソナルコンピュータ、ワークステーション、メインフレームなどがある。
【００１１】
同図に示すように、この情報処理装置１０は、ＣＰＵ１１、主記憶装置１２（ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory））、ハードディスク等の外部記憶装置１３、キーボードやマウスなどの入力装置１４、液晶ディスプレイ等の表示装置やプリンタ等の印字装置などである表示装置１５、通信ネットワーク５を介して他の装置と通信するためのインタフェース回路である通信インタフェース１６を含んで構成されている。
【００１２】
図１Ｃに、変更点管理装置２、構成管理装置３、及びプログラム分析装置４の夫々が有する機能を示している。同図に示す各機能は、これら各装置のハードウエアによって、もしくは、ＣＰＵ１１が、主記憶装置１２又は外部記憶装置１３に記憶されているプログラムを読み出して実行することによって実現される。
【００１３】
変更点管理装置２は、プログラムの変更が必要となるような案件に関する情報（以下、変更案件情報と称する。）を管理する変更点管理部２１、及び変更点管理部２１によって管理される変更点管理情報２２を含む。変更点管理情報２２は、例えば、データベースのテーブルとして記憶される。なお、変更点管理装置２は一般的な公知の変更点管理システムを想定する。
【００１４】
構成管理装置３は、ソースコードを管理する構成管理部３１、及び構成管理部３１によって管理されるソースコード及びソースコードに関する情報である構成管理情報３２を含む。構成管理情報３２は、例えば、データベースのテーブルとして記憶される。なお、構成管理装置３は一般的な公知の構成管理システムを想定する。
【００１５】
プログラム分析装置４は、プログラムを分析するプログラム分析部４１、プログラム分析部４１による分析の結果である分析結果４２、及び分析結果４２を表示装置１５に表示してユーザ９に提示する分析結果表示部４３（結果表示部）を含む。分析結果４２は、例えば、データベースのテーブルとして記憶される。
【００１６】
プログラム分析部４１は、さらに変更点管理情報２２から類似箇所の分析に用いる変更案件情報を選出する変更案件選出部４１１、抽出された変更案件情報を用いてプログラムの類似箇所を分析する類似箇所分析部４１２、及び後述する図４（又は図１２）に示す変更点管理情報選択画面４１１１（又は４１１８）を表示する条件設定画面表示部４１３を含む。
【００１７】
類似箇所分析部４１２の詳細な構成を図１Ｄに示している。同図に示すように、類似箇所分析部４１２は、変更位置情報取得部４１２１、類似候補選出部４１２２、変更箇所数記憶部４１２３、変更内容類似性評価部４１２４、相対位置類似性評価部４１２５、及び類似箇所特定部４１２６を含む。
【００１８】
＜処理概要＞
次に情報処理システム１において行われる処理の概要を図２Ａ及び図２Ｂとともに説明する。
【００１９】
まず変更案件の発生に伴い、ユーザ９は変更点管理部２１に変更案件情報の登録を行う（図２Ａの符号１２）。変更点管理装置２は、変更案件情報を変更点管理情報２２として記憶する。
【００２０】
ここで図２Ｂに示すように、変更点管理情報２２の各レコードは、変更管理ＮＯ、プログラム、登録者、変更理由、変更内容、変更箇所の項目を有している。このうちの変更管理ＮＯの欄には、変更案件を一意に特定する識別番号が設定される。またプログラムの欄には、その変更案件によって変更されるプログラムの名称が設定される。登録者の欄には、その変更案件を登録したユーザの名称が設定される。変更理由の欄には、その変更案件が生じた理由（以下、変更理由と称する。）が設定される。変更内容の欄には、変更の内容（以下、変更内容と称する。）が設定される。
【００２１】
なお、変更理由及び変更内容は、例えば、テキスト形式による文書で記述される。変更箇所のソースファイルの欄には、変更の対象となったプログラムのソースファイルの名称が設定される。変更箇所の差分の欄には、変更により生じたソースコードの差分（以下、変更差分と称する。）が設定される。ソースコードの差分は、例えば汎用Diff形式（Generic Diff Format）で表記される。
【００２２】
図２Ｂに示すように、構成管理情報３２の各レコードは、プログラム、ソースファイル、バージョン、ラベル、ソースコードといった項目を有している。このうちのプログラムの欄には、プログラムの名称が設定される。またソースファイルの欄には、ソースファイルの名称が設定される。バージョンの欄には、ソースファイルのバージョンが設定される。またラベルの欄には、変更管理ＮＯが設定される。ソースコードの欄には、ソースファイルの内容であるソースコードの実体が設置される。ソースファイルの内容は、例えば、ソースコードを記述したテキストデータで表記される。
【００２３】
なお、ユーザ９は、変更が必要となったソースコードを構成管理装置３から取得する。ユーザ９は、取得したソースコードに対して変更を行い、変更後のソースコードを構成管理装置３に登録する。例えば、変更管理ＮＯとして「#0001」が付与された変更案件によりプログラム名が「AAA」でソースコード名が「ccc.cpp」のソースコードを変更する場合、ユーザ９は、構成管理装置３から該当のソースコードを構成管理装置３から取得する。ユーザ９は、取得したソースコードの内容を変更し、変更後のソースコードを構成管理装置３に登録する。変更後のソースコードは構成管理情報３２にバージョン「1.1.2」として構成管理情報３２に登録される。ラベルの欄には当該変更案件の変更管理ＮＯである「#0001」が設定される（図２Ｂの符号１１）。
【００２４】
変更案件が発生し、ソースコードの内容が変更されると、変更点管理部２１は、変更点管理情報２２の当該変更案件の変更管理ＮＯに対応するレコードの変更箇所の欄のソースファイルの欄に当該ソースコードのソースファイル名を、差分情報の欄に変更差分を夫々登録する。
【００２５】
例えば、ソースファイル名が「ccc.cpp」であるソースコードについて、構成管理情報３２のバージョンの欄に「1.1.2」が、ラベルの欄に「#0001」が登録されると、変更点管理部２１は、変更点管理情報２２の変更管理ＮＯが「#0001」の変更案件情報のソースファイルの欄に「ccc.cpp」を、その差分の欄にバージョンが「1.1.2」のソースコードとバージョンが「1.1.1」のソースコードの差分情報を登録する（図２Ｂの符号３３）。
【００２６】
ユーザ９は、プログラムに対する全ての変更作業が完了した時点などの所定のタイミングでプログラム分析装置４のプログラム分析部４１に分析開始を指示する。この際、ユーザ９は、プログラム分析部４１にプログラム名及び変更管理ＮＯを指定する。この指示は、プログラム分析部４１の条件設定画面表示部４１３によって表示される、例えば、図４に示す画面を用いて行われる。
【００２７】
分析開始の指示があると、プログラム分析部４１は、変更点管理情報２２から、分析開始の指示でユーザ９が指定した条件（プログラム名、プログラムのバージョン、変更管理ＮＯなど）に該当するレコードを取得する（図２Ａの符号２３）。またプログラム分析部４１は、取得したレコードの分析に必要となるソースコードを構成管理情報３２から取得する（図２Ａの符号３４）。
【００２８】
図２Ｂの例では、分析開始の指示に際し、ユーザ９がプログラム名として「AAA」を指定すると、構成管理情報３２においてプログラム名が「AAA」のプログラムのラベルの欄に登録されている変更管理ＮＯが「#0001」,「#0002」,「#0004」,…であるものが分析の対象となる。この場合、プログラム分析部４１は、変更点管理情報２２において分析対象の変更管理ＮＯに対応するソースファイル名のソースコードを構成管理情報３２から取得する（例えば、変更管理ＮＯが「#0001」についてはソースファイル名が「ccc.cpp」のソースコード、変更管理ＮＯが「#0002」についてはソースファイル名が「aaa.cpp」及び「bbb.cpp」のソースコードを取得する。）。
【００２９】
必要なソースコードを取得すると、プログラム分析部４１は、変更点管理情報２２から差分の欄の内容を取得して分析を開始する（図２Ｂの符号４７）。分析終了後、プログラム分析部４１はその結果を分析結果４２として記憶する（図２Ｂの符号４４）。
【００３０】
ここで図２Ｂに示すように、分析結果４２の各レコードは、プログラム、分析結果ＮＯ、変更管理ＮＯ、分析結果といった項目を有している。このうちプログラムの欄には、分析の対象となったプログラムの名称が設定される。分析結果ＮＯの欄には個々の分析結果を一意に特定する識別番号が設定される。変更管理ＮＯの欄には変更管理ＮＯが設定される。分析結果の欄には分析結果の具体的な内容が設定される。
【００３１】
図２Ｂではプログラム名が「AAA」というプログラムについて２件分の分析結果が存在する場合が例示されており、同図に示すように、各分析結果が、夫々「#AAA001」、「#AAA002」という分析結果ＮＯが付与されて分析結果４２として記憶されている。
【００３２】
図２Ａに示すように、分析結果表示部４３は、分析結果４２から分析結果を取得し（図２Ａの符号４５）、分析結果をユーザ９に提供する（図２Ａの符号４６）。なお、分析結果表示部４３は、ユーザ９が利用しやすい形式（例えば、図８に示すテキスト形式、もしくは、図９に示すグラフィカル形式）で、分析結果４２をユーザ９に提示する。
【００３３】
＜処理詳細＞
次にプログラム分析部４１によって行われる詳細な処理について、図３に示すフローチャートとともに説明する。
【００３４】
ユーザ９は、分析対象を指定してプログラムの分析開始を指示する。この指示を受け、プログラム分析部４１は、ユーザ９によって選択された変更案件に対応する変更点管理情報２２のレコードを取得し、取得したレコードを選択された変更点管理情報３１２として記憶する（３１１）。
【００３５】
ここで前述したように、分析対象の指定及び分析開始の指示は、例えば、図４に示す画面（以下、変更点管理情報選択画面４１１１）を用いて行われる。ユーザ９は、この変更点管理情報選択画面４１１１のプログラム名４１１２に分析対象とするプログラムのプログラム名を、バージョン４１１３に分析対象とするプログラムのバージョンを指定する。ユーザ９が変更点管理情報選択画面４１１１の変更点管理情報抽出ボタン４１１４を選択すると、指定されたプログラム名及びバージョンに該当する変更案件情報が構成管理情報３２から検索されて変更案件一覧表示部４１１５に一覧形式で表示される。ユーザ９は、この変更案件一覧表示部４１１５において、変更案件選択部４１１６のチェックを解除することにより不要な変更案件を除外することができる。
【００３６】
次にプログラム分析部４１は、選択された変更点管理情報３１２からレコードを１つ取得する（３１３）。プログラム分析装置４は、選択された変更点管理情報３１２の各レコードの変更理由の欄及び変更内容の欄について類似検索を行い、類似する変更案件を検出する。類似する案件が検出された場合、プログラム分析装置４は、例えば類似する各案件に対応するレコードのソースファイル及び差分をマージして１つの変更案件として変更点管理情報２２に登録し直す（３１４）。
【００３７】
ここで（３１４）の処理は、変更点管理情報２２に複数のユーザによって類似の変更案件が別案件として登録されている可能性があるので、このような別案件を統合して処理を効率化するために必要な処理である。
【００３８】
続いてプログラム分析部４１は、選択された変更点管理情報３１２のレコードのソースファイル名に対応するソースコードを構成管理情報３２から取得する（３１５）。
【００３９】
（３１６）において、プログラム分析部４１は、選択された変更点管理情報３１２の差分から変更箇所数及び各変更開始行を抽出し、抽出した変更箇所数及び変更開始行を後述する変更位置情報３１７（図６）に登録する。
【００４０】
（３１８）において、プログラム分析部４１は、（３１３）で選択された変更点管理情報３１２から未取得のレコードが残っているか否かを判断する。残っている場合には（３１８：有り）、（３１３）に戻って次のレコードを取得し、そのレコードについて上記と同様の処理を行う。残っていない場合には（３１８：無し）、（３１９）に進む。
【００４１】
（３１９）では、プログラム分析部４１の類似箇所分析部４１２が類似箇所の分析を行う。（３１９）の処理の詳細については後述する。（３２０）では、プログラム分析部４１は、分析結果が存在する場合には（３２０：有り）、分析結果４２を分析結果表示装置４３に表示する（３２１）。分析結果が存在しない場合には（３２０：無し）、プログラム分析処理を終了する。
【００４２】
＜類似箇所分析処理＞
類似箇所分析部４１２の処理（図３の３１９の処理）について、図５及び図６を参照しつつ説明する。
【００４３】
まず類似箇所分析部４１２の変更位置情報取得部４１２１が、変更位置情報３１７（変更位置情報記憶部）からレコードを１つ取得する（３１９１）。
【００４４】
図６に示すように、変更位置情報３１７には、変更管理ＮＯ、ソースファイル名、モジュール名、変更数、変更開始行、変更内容などの各項目が含まれている。このうちのモジュールの欄には、変更されたモジュールの名称が設定される。変更数の欄には、変更が行われた箇所数が設定され、変更開始行には各変更箇所の変更開始行が設定される。例えば、図６の１行目のレコードは変更数が「３」であり、変更開始行が「１００，１２２，１４５」であるが、これはモジュール名が「function1」であるモジュールについて３箇所の変更が行われており、夫々の変更開始行が１００行目、１２２行目、１４５行目であることを示している。変更内容の欄には変更内容が設定される。なお、変更内容は例えばテキスト形式の文書で記述される。
【００４５】
ここで図６に示す変更位置情報３１７において、変更管理ＮＯが「#0002」のレコードが２つあるが、これはこの変更案件によって２つのソースファイル（ファイル名が「aaa.cpp」及び「bbb.cpp」）に対して変更が行われたことを示している。
【００４６】
次に類似箇所分析部４１２は、取得したレコードを用いて類似分析を行うためのマトリクス（以下、類似分析マトリクス３１９３と称する。）を生成する（３１９２）。
【００４７】
図６に類似分析マトリクス３１９３の一例を示す。同図に示す類似分析マトリクス３１９３は、例えば、「aaa.cpp」というソースファイルの「function1」というモジュールは、変更管理ＮＯが「#0001」、「#0002」、「#0004」の変更案件によって変更され、「function2」というモジュールは、変更管理ＮＯが「#0001」、「#0003」の変更案件によって変更され、「function3」というモジュールは、変更管理ＮＯが「#0007」の変更案件によって変更されていることを示している。また例えば「bbb.cpp」というソースファイルの「function4」というモジュールは、変更管理ＮＯが「#0002」、「#0004」の変更案件によって変更され、「function5」というモジュールは、変更管理ＮＯが「#0007」の変更案件によって変更され、「function6」というモジュールは、変更管理ＮＯが「#0006」の変更案件によって変更されていることを示している。
【００４８】
（３１９４）において、類似箇所分析部４１２は、（３１９１）において変更位置情報３１７から未取得のレコードが残っているか否かを判断する。残っていれば（３１９４：有り）、（３１９１）に戻って次のレコードを取得し、そのレコードについて上記と同様の処理を行う。残っていなければ（３１９４：無し）、（３１９５）に進む。
【００４９】
（３１９５）では、類似箇所分析部４１２の類似候補選出部４１２２が夫々の変更案件が類似している変更箇所の組み合わせを選出する。具体的には、類似箇所分析マトリクス３１９３から、類似箇所を含んでいる可能性の高いモジュールの組み合わせの１つを選出し（３１９６）、これを類似候補３１９７として記憶する。
【００５０】
図６の類似箇所分析マトリクス３１９３の例では、類似候補選出部４１２２が夫々の変更が行われた変更案件（変更管理ＮＯ）に共通性があるか否か（例えば全変更案件の半分以上の変更案件が同じか否か）を条件とし、「function1」というモジュールと「function4」というモジュールの組み合わせを選出している（同図の判定の欄３１９５に「候補」の文字を設定している）。
【００５１】
図６に示す類似候補３１９７の各レコードは、類似候補ＮＯ、ソースファイル、モジュール、変更点管理情報数、変更箇所、変更内容類似性、相対位置類似性、及び判定の各項目を有している。このうち類似候補ＮＯの欄には類似候補を一意に特定する識別番号が設定される。ソースファイルの欄にはソースファイル名が設定される。モジュールの欄にはモジュール名が設定される。変更点管理情報数の欄には、その候補を選出する根拠となった、共通する変更案件の数が設定される。例えば、図６の「#候補２」の場合、変更管理ＮＯ「#0002」と「#0004」の２つの変更案件が共通することにより候補として選出したので「２」が設定されている。
【００５２】
変更箇所の欄には、変更箇所数記憶部４１２３が、候補として選出した組み合わせを構成しているfunctionについての変更箇所数を設定する。例えば図６の変更位置情報３１７によれば、「function1」は変更管理ＮＯが「#0002」の変更案件によって行われた「054」行目からの変更と、変更管理ＮＯが「#0004」の変更案件によって行われた「056」行目からの変更の２つの変更が行われている。「function2」は変更管理ＮＯが「#0002」の変更案件によって行われた「078」行目からの変更と、変更管理ＮＯが「#0004」の変更案件によって行われた「079」行目からの変更の２つの変更が行われている。このため、図６の「#候補２」の変更箇所の欄には「２」が設定されている。
【００５３】
図６の変更位置情報３１７によれば、「function1」は「#0001」の変更案件によって行われた「100」行目からの変更と、変更管理ＮＯが「#0002」の変更案件によって行われた「122」行目からの変更と、変更管理ＮＯが「#0004」の変更案件によって行われた「145」行目からの変更の３つの変更が行われている。このため、図６の「#候補１」の変更箇所の欄には「１」が設定されている。
【００５４】
類似候補３１８７の変更内容類似性の欄には後述する変更内容の類似性評価（３２００）の結果が設定される。相対位置類似性の欄には後述する相対位置の類似性評価（３２０１）の結果が設定される。判定の欄には後述する（３２０２）の処理の結果（最終的な類似判断の結果）が設定される。
【００５５】
（３１９８）では、類似箇所分析部４１２は、類似箇所を含んでいる可能性の高いモジュールの組み合わせのうち、類似分析マトリクス３１９３から未取得のものが残っているか否かを判断する。残っていれば（３１９８：有り）、（３１９５）に戻って未取得の組み合わせを取得し、そのレコードについて上記と同様の処理を行う。残っていなければ（３１９８：無し）、（３１９９）に進む。
【００５６】
（３１９９）では、類似箇所分析部４１２が、類似候補３１９７の存在有無を判断する。類似候補３１９７が存在する場合には（３１９９：有り）、（３２００）に進み、存在しない場合には（３１９９：無し）、処理を終了する。
【００５７】
（３２００）では、類似箇所分析部４１２の変更内容類似性評価部４１２４が、組み合わせを構成している変更箇所の内容の類似性を評価する。具体的には、変更内容類似性評価部４１２４は、類似候補３１９７の夫々についての変更内容（ソースコード）の類似性を評価する。なお、この評価は例えば変更内容を比較して求めた類似度（例えば、どの程度の割合で２つのソースコードが一致するか）を求める等、公知の文書比較手法やコード比較手法を用いて行われる。
【００５８】
変更内容類似性評価部４１２４は、類似度が所定の閾値を超えていれば変更内容に類似性があると評価し、変更内容類似性の欄に類似性があるとする内容を設定する（例えば「○」を設定する。）。類似度が閾値を超えていなければ、変更内容類似性評価部４１２４は変更内容に類似性がないと評価し、変更内容類似性の欄に類似性がないとする内容を設定する（例えば「×」を設定する。）。
【００５９】
（３２０１）では、類似箇所分析部４１２の相対位置類似性評価部４１２５が、類似候補３１９７の夫々について、変更箇所の相対位置の類似性を評価する。ここで相対位置類似性評価部４１２５は、変更箇所の相対位置の類似性を、類似性を判断する２つのモジュールの夫々の、各変更案件によって変更される変更開始行の相対位置の一致性を判断することにより評価する。すなわち相対位置類似性評価部４１２５は、第１の変更案件に基づく複数の変更箇所の相対位置と、各変更箇所に含まれる、第２の変更案件に基づく複数の変更箇所の相対位置との類似性を評価する。
【００６０】
例えば、図６の類似候補３１９７の変更管理ＮＯが「#0002」である変更案件による「function1」というモジュールの変更開始行は、同図の変更位置情報３１７によれば「054」行目となっている。一方、変更管理ＮＯが「#0004」である変更案件による同モジュールの変更開始行は「056」行目となっている。また変更管理ＮＯが「#0002」である変更案件による「function4」というモジュールの変更開始行は「078」行目となっており、一方、変更管理ＮＯが「#0004」である変更案件による同モジュールの変更開始行は「079」行目となっている。
【００６１】
ここで変更管理ＮＯが「#0002」である変更案件による「function1」というモジュールの変更開始行である「054」と、変更管理ＮＯが「#0002」である変更案件による「function4」というモジュールの変更開始行である「078」との差は「078−054」＝24（以下、D1と称する。）であり、一方、変更管理ＮＯが「#0004」である変更案件による「function1」というモジュールの変更開始行である「056」と、変更管理ＮＯが「#0004」である変更案件による「function4」というモジュールの変更開始行である「079」との差は「079−056」＝23（以下、D2と称する。）である。
【００６２】
この場合、所定の閾値を設定し、相対位置類似性評価部４１２５は、D1とD2の差の絶対値が所定の閾値を超えていなければ相対位置が類似していると評価し、閾値を超えていれば相対位置が類似していないと評価する。例えば閾値を２に設定した場合、上記の例ではD1-D2＝24-23＝1であるから閾値を超えていない。従って、相対位置類似性評価部４１２５は、相対位置が類似していると評価する。
【００６３】
相対位置が類似していると評価した場合、相対位置類似性評価部４１２５は類似候補３１９７の相対位置類似性の欄に類似性があるとする内容を設定する（例えば「○」を設定する。）。また類似性がないと判断した場合、相対位置類似性評価部４１２５は相対位置類似性の欄に類似性がないとする内容を設定する（例えば「×」を設定する。）。
【００６４】
（３２０２）では、類似箇所分析部４１２の類似箇所特定部４１２６が、以上の結果に基づき類似箇所を特定（類似箇所が存在するか否かを判断）し、その結果を分析結果４２として記憶する。ここで類似箇所の特定は、例えば類似候補３１９７の変更点管理情報数の欄の値が所定の閾値を超えているか否か、変更箇所の欄の値が所定の閾値を超えているか否か、変更内容類似性に類似性がある旨の内容が設置されているか否か、相対位置類似性に類似性がある旨の内容が設置されているか否かを総合的に評価することにより行う。なお、この評価に際し各判断要素に重みを設定するようにしてもよい。
【００６５】
分析結果４２の内容をより詳細に例示したものを図７に示す。同図に示す分析結果４２は、分析結果管理テーブル４２１と分析結果格納テーブル４２２の２つのテーブルを有している。このうち分析結果管理テーブル４２１の各レコードは、プログラム、及び分析結果ＮＯの各項目を有している。また分析結果格納テーブル４２２の各レコードは、分析結果ＮＯ、類似ＮＯ、変更管理ＮＯ、ソースファイル名称、及び変更開始行の各項目を有している。
【００６６】
以上に説明したように、本実施形態のプログラム分析装置４は、変更を生じさせた変更案件が類似する変更箇所の組み合わせを候補として選出した上で、選出した組み合わせの夫々についての変更箇所数と、選出した組み合わせの夫々について変更箇所の内容の類似性を評価し、変更箇所数記憶部４１２３が記憶する変更箇所数と変更内容類似性評価部４１２４による評価の結果とに基づき最終的にプログラムの類似箇所を特定する。このため、ソースコードの全文検索や差分抽出などの技術にのみ依存する方法に比べ、高い精度で類似箇所を特定することができる。
【００６７】
またプログラム分析装置４は、変更箇所数記憶部４１２３が記憶する変更箇所数及び変更内容類似性評価部４１２４による評価の結果に加えて、第１の変更案件に基づく複数の変更箇所の相対位置と、各変更箇所に含まれる、第２の変更案件に基づく複数の変更箇所の相対位置との類似性を評価した結果に基づきプログラムの類似箇所を特定する。これにより類似箇所の特定精度をさらに向上することができる。
【００６８】
＜分析結果の表示形式＞
図８は分析結果４２をテキスト形式で表示した例である。同図に示すように、この表示（以下、分析結果４３１と称する。）には、表示内容として分析対象のプログラムの名称、プログラムのバージョンが表示される分析対象表示部４３１１、類似箇所ごとに分析結果が表示されるレポート表示部４３１２、類似箇所が具体的に表示される類似箇所情報表示部４３１３が含まれる。このようにテキスト形式で提供した場合には、例えば分析が完了した後に電子メール等の電子的な手段によって迅速かつ容易に分析結果をユーザ９に提供することができる。
【００６９】
図９は分析結果４２をグラフィカルな形式で表示した他の例である。同図に示すように、この分析結果表示画面４３２は、分析対象部４３２１、分析結果表示部４３２２、類似箇所位置表示ウィンドウ４３２３、及び類似箇所ナビゲートバー４３２４を有している。このうち類似箇所位置表示ウィンドウ４３２３には、ソースコード中の類似箇所が、ハーフトーンの網掛けや背景色で強調表示される。類似箇所ナビゲートバー４３２４には、ソースコード全体における類似箇所が網掛け模様等で強調表示される。類似箇所ナビゲートバー４３２４（スクロールバー）に表示された類似箇所を示す網掛け部分をクリックすると、類似箇所位置表示ウィンドウ４３２３の表示位置を該当の類似箇所に容易に合わせることができる。
【００７０】
ここで分析結果表示部４３２２、類似箇所位置表示ウィンドウ４３２３、類似箇所ナビゲートバー４３２４の分析結果、及びその類似箇所ごとに網掛けパターン及び網掛け色や背景色は同一である。このため、ユーザ９は分析結果４２で指摘されたソースコード中の類似箇所を容易に把握することができる。
【００７１】
類似箇所が３つ以上存在する場合は分析結果表示画面４３２の上部に設けられた類似箇所位置表示ウィンドウ追加ボタン４３２５を選択すると別ウィンドウに３つめのソースコード中の類似箇所が同時に表示される。また隣接する類似箇所検索ボタン４３２６によれば類似箇所位置表示ウィンドウ４３２３に所定の検索条件に対応する特定の類似箇所を表示させることができる。
【００７２】
類似箇所位置表示ウィンドウ拡大・縮小ボタン４３２７は、類似箇所位置表示ウィンドウ４３２３の縮尺を変更する場合に使用する。例えばコードの確認を行う際は表示を拡大させてソースコードが判別可能な大きさで表示されるようにし、またソースコード全体における類似箇所の位置を確認する際は表示を縮小してソースコードの全体が表示されるようにする。
【００７３】
＜分析結果の活用例＞
図１０とともに分析結果４２の活用例について説明する。例えば分析結果４２の内容が同図中の符号４３１で示す内容であった場合には、ユーザ９は類似箇所を確認するために指摘されたソースコード「ccc.cpp」を構成管理装置３から取得し、指摘されている変更箇所先頭行である100行目から記述されているコードと122行目から記述されているコードを夫々検証する。検証により類似箇所と判断した場合、ユーザ９は該当の類似箇所をサブルーチン化するなどの変更作業を行い、変更後のソースコードを構成管理装置３に登録する。
【００７４】
このように、本実施形態の情報処理システム１によれば、類似箇所を容易に解消することができるので、プログラムの保守性を向上させることができる。
【００７５】
＜変更案件登録画面＞
図１１にユーザ９が変更点管理情報２２を登録する際に用いる画面(以下、変更案件登録画面２３０と称する。）の一例を示している。この変更案件登録画面２３０は、変更内容の概要であるタイトル２３１、変更案件管理番号２３２、変更種別２３３、発生工程２３４、変更理由２３５、原因２３６、変更内容２３７、影響度２３８、影響システム２３９、構成管理情報２４４といった複数の設定欄を有している。このうちの変更種別２３３には、その変更の種類（機能追加、バクフィックス、セキュリティ対策等）を示す情報を入力する。発生工程２３４には、変更案件が発生した工程を示す情報（上流工程、下流工程、プログラム工程、モジュールテスト工程等）が設定される。構成管理情報２４４には、構成管理情報３２が設定される。
【００７６】
変更案件登録画面２３０を用いて登録された情報は、変更案件やプログラムの分析に用いられる。例えば、図５の（３２００）において変更内容の類似性を評価するにあたり、変更理由や変更内容、変更が生じた工程などを比較することにより変更内容類似性評価部４１２４が類似性を評価するようにしてもよい。このようにすれば類似性の評価精度を向上させることができる。またユーザ９は、変更案件登録画面２３０を用いて詳細な内容を設定することができるため、様々な条件でプログラムの分析を行うことができる。
【００７７】
ところで、ソースコードの変更が機能の追加を理由として行われた場合には、新規のモジュールが追加されて変更箇所がプログラム全体に及ぶことが多く、このような変更箇所はソースコード中の類似箇所の分析の妨げとなる。そこでこのような場合は変更案件登録画面２３０の変更種別２３３に機能追加を除外する内容を設定することで、機能追加に関する変更案件情報を分析対象から容易に除外することができる。
【００７８】
＜変更点管理情報選択画面＞
変更点管理情報２２に多数の変更案件情報が蓄積されている場合や多様な変更案件が含まれている場合には、分析時間や分析精度が低下することが予想される。そこでこれを防ぐために例えば図１２に示す変更点管理情報選択画面４１１１（図４に示した画面をベースとした画面）をユーザ９に提示し、ユーザ９が処理対象とする変更案件を絞り込むことができるようにしてもよい。この変更点管理情報選択画面４１１１は、変更者、追加ステップ数、変更日数を条件として設定可能な条件設定部４１１９を有しており、ユーザ９はこの画面に適切な条件を設定することにより処理対象とすべき変更案件を有効に絞り込むことができる。
【００７９】
例えば経験が浅いユーザ９がソースコードの変更作業を行った場合には、モジュール化の検討が不十分でソースコード中に類似箇所が存在する可能性が高くなるが、この場合には条件設定部４１１９の変更者に経験の浅いユーザを指定して経験の浅いユーザ９が行った変更案件情報のみを選出するようにすることで、処理対象を有効に絞り込むことができる。
【００８０】
また例えば変更による追加ステップが多い場合には、複数箇所に類似コードが記述される可能性が高くなるが、この場合には所定のステップ数以上の変更を行った変更案件情報のみが選出されるように条件設定部４１１９の追加ステップに条件を設定するようにすることで、処理対象を有効に絞り込むことができる。
【００８１】
また例えば変更に要した日数が短くて安易な変更が行われた可能性がある場合には、ソースコードの全体的な見直しが不十分で類似コードが複数箇所に記述される可能性が高くなるが、この場合には変更に要した日数が所定の日数以下である変更案件情報のみが選出されるように条件設定部４１１９の変更日数に条件を設定することで、処理対象を有効に絞り込むことができる。
【００８２】
このように、図１２に示した変更点管理情報選択画面４１１１を用いることで、処理対象を有効に絞り込むことができ、分析時間や分析精度を向上させることができる。
【００８３】
なお、図４と同様に、ユーザ９はこの変更案件一覧表示部４１１５において、変更案件選択部４１１６のチェックを解除することにより不要な変更案件を除外することができる。また図１２では条件設定部４１１９に条件を設定した後、条件設定ボタン４１２０を押下すると、設定された条件に該当する変更案件情報のみが変更案件一覧表示部４１１５に一覧形式で表示される。
【００８４】
ところで、以上の実施形態の説明は本発明の理解を容易にするためのものであり、本発明を限定するものではない。本発明はその趣旨を逸脱することなく、変更、改良され得ると共に本発明にはその等価物が含まれることは勿論である。
【００８５】
例えば、変更点管理装置２、構成管理装置３、プログラム分析装置４、及びユーザ端末６は、必ずしも独立したハードウエアで構成されている必要はなく、同一のハードウエアであってよい。また逆に、変更点管理装置２、構成管理装置３、プログラム分析装置４、及びユーザ端末６の夫々を複数のハードウエアによって構成するようにしてもよい。
【図面の簡単な説明】
【００８６】
【図１Ａ】実施形態として説明する情報処理システム１の構成を示す図である。
【図１Ｂ】変更点管理装置２、構成管理装置３、プログラム分析装置４、及びユーザ端末６として利用可能な情報処理装置の一例である。
【図１Ｃ】変更点管理装置２、構成管理装置３、及びプログラム分析装置４の夫々が有する機能を示す図である。
【図１Ｄ】類似箇所分析部４１２の詳細を示す図である。
【図２Ａ】情報処理システム１において行われる処理の概要を示す図である。
【図２Ｂ】情報処理システム１において行われる処理の概要を示す図である。
【図３】プログラム分析部４１の処理を説明するフローチャートである
【図４】変更点管理情報選択画面４１１１の一例である。
【図５】類似箇所分析部４１２の処理を説明するフローチャートである
【図６】類似箇所分析部４１２の処理を説明するデータ説明図である
【図７】分析結果４２の内容の一例である
【図８】分析結果４２の表示例である。
【図９】分析結果４２の表示例である。
【図１０】分析結果の活用例を説明する図である
【図１１】変更案件登録画面２３０の一例である。
【図１２】変更点管理情報選択画面４１１１の一例である。
【符号の説明】
【００８７】
１  情報処理システム
２  変更点管理装置
２１  変更点管理部
２２  変更点管理情報
３  構成管理装置
３１  構成管理部
３１２  選択された変更点管理情報
３１７  変更位置情報
３２  構成管理情報
４  プログラム分析装置
４１  プログラム分析部
４１１  変更案件選出部
４１２  類似箇所分析部
４１２１  変更位置情報取得部
４１２２  類似候補選出部
４１２３  変更箇所数記憶部
４１２４  変更内容類似性評価部
４１２５  相対位置類似性評価部
４１２６  類似箇所特定部
９  ユーザ
【図１Ｂ】
2009199172.tif 000003
【図１Ｃ】
2009199172.tif 000004
【図１Ｄ】
2009199172.tif 000005
【図７】
2009199172.tif 000006
【図８】
2009199172.tif 000007
【図１Ａ】
2009199172.tif 000008
【図２Ａ】
2009199172.tif 000009
【図２Ｂ】
2009199172.tif 000010
【図３】
2009199172.tif 000011
【図４】
2009199172.tif 000012
【図５】
2009199172.tif 000013
【図６】
2009199172.tif 000014
【図９】
2009199172.tif 000015
【図１０】
2009199172.tif 000016
【図１１】
2009199172.tif 000017
【図１２】
2009199172.tif 000018