(57)【特許請求の範囲】
【請求項１】
修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出部と、
前記差分抽出部により抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析部と、
前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析部と、
前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力部と、を備え、
前記機能解析部は、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較装置。
【請求項２】
前記機能解析部は、前記構文解析結果に含まれる前記構成要素が前記修正履歴に存在しない場合に、前記修正履歴に存在しないことを示す区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に仮設定するとともに、前記仮設定した前記機能区分に対する入力をユーザに促す、ことを特徴とする請求項１記載のソースコード比較装置。
【請求項３】
前記機能解析部は、前記仮設定した前記機能区分に対する入力をユーザから受け付けた場合に、前記仮設定した前記機能区分を、入力された前記機能区分に変更することで、前記機能解析結果を更新する、ことを特徴とする請求項２記載のソースコード比較装置。
【請求項４】
前記修正履歴を参照し、前記機能区分ごとに、前記構成要素が当該機能区分に属する前記構成要素として修正される割合を算出し、当該割合が所定の閾値以上となる前記構成要素が、前記機能解析結果の当該機能区分に対応する前記構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する妥当性検査部を、さらに備えることを特徴とする請求項１〜３のいずれか１項に記載のソースコード比較装置。
【請求項５】
前記機能解析部により生成される前記機能解析結果を、前記修正履歴として記憶装置に記憶させる修正履歴登録部を、さらに備えることを特徴とする請求項１〜４のいずれか１項に記載のソースコード比較装置。
【請求項６】
前記機能解析部により生成される前記機能解析結果を、前記修正履歴として修正後のソースコードに組み込む修正履歴組込部を、さらに備えることを特徴とする請求項１〜４のいずれか１項に記載のソースコード比較装置。
【請求項７】
修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出ステップと、
前記差分抽出ステップにおいて抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析ステップと、
前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析ステップと、
前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力ステップと、を含み、
前記機能解析ステップは、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較方法。
【請求項８】
請求項７に記載の各ステップをコンピュータに実行させるためのソースコード比較プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード比較装置、ソースコード比較方法およびソースコード比較プログラムに関する。
【背景技術】
【０００２】
従来、ソースコードの修正内容を確認する際の手法として、例えばＵＮＩＸ（登録商標）のｄｉｆｆコマンドを利用して、修正前後のソースコードを行単位でテキスト比較し、ソースコード間の差分を表示させる手法が用いられている。しかしながら、このようなテキスト上の差分だけでは、それぞれの修正がどの機能に対応しているのかをユーザ自身で判断しなければならない。したがって、複数の機能に対する修正が混在している場合には、修正箇所と機能との対応付けに困難を要することになる。修正箇所と機能とを対応付ける技術として、例えば、下記特許文献１および２に記載されている技術がある。
【０００３】
特許文献１に記載の技術では、修正前後のソースコードを比較して修正箇所を抽出し、ソースコードの構文解析結果を用いることで、修正箇所と変数名や関数名との対応付けを行っている。特許文献２に記載の技術では、ソースコードを、プログラム、モジュール、ファイルおよび関数の各階層に分けられるように予め階層構造化しておき、修正前後のソースコードを比較する際に、プログラム、モジュール、ファイルおよび関数の各階層単位で比較することで、修正箇所と階層機能との対応付けを行っている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平０８−１９４６１１号公報
【特許文献２】特開２００６−２７７１２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１のように、構文解析結果を用いるだけでは、変数名や関数名よりも上位階層となるモジュールやファイル等との対応付けには不十分である。また、特許文献２では、プログラムやモジュール等の階層構造を、予め定義して登録しておく必要があるが、例えば、設計情報が入手できない場合や、追加時の登録漏れ等が考えられ、管理するのに困難を要する。
【０００６】
本発明は、上述した課題を解決するためになされたものであり、修正箇所と機能との対応付けを正確かつ簡易に行うことができるソースコード比較装置、ソースコード比較方法およびソースコード比較プログラムを提供することを目的の一例とする。
【課題を解決するための手段】
【０００７】
本発明の一側面であるソースコード比較装置は、修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出部と、前記差分抽出部により抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析部と、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析部と、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力部と、を備え、前記機能解析部は、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する。
【０００８】
本発明の一側面であるソースコード比較方法は、修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出ステップと、前記差分抽出ステップにおいて抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析ステップと、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析ステップと、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力ステップと、を含み、前記機能解析ステップは、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する。
【０００９】
本発明の一側面であるソースコード比較プログラムは、上記ソースコード比較方法に含まれる各ステップをコンピュータに実行させる。
【発明の効果】
【００１０】
本発明によれば、修正箇所と機能との対応付けを正確かつ簡易に行うことができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態におけるソースコード比較装置の構成を例示する図である。
【図２】構文解析結果を例示する図である。
【図３】分割後の構文解析結果を例示する図である。
【図４】修正履歴テーブルのデータ構成を例示する図である。
【図５】暫定機能解析結果を例示する図である。
【図６】機能解析結果を例示する図である。
【図７】修正履歴テーブルのデータ構成を例示する図である。
【図８】比較結果を例示する図である。
【図９】比較結果を例示する図である。
【図１０】修正前後のソースコードを比較する際の動作を説明するためのフローチャートである。
【図１１】修正前後のソースコードを比較する際のデータの遷移状態を例示する模式図である。
【図１２】変形例における妥当性検査部が修正の妥当性を検査する際の一例を示す模式図である。
【図１３】機能区分ごとに算出する各構成要素の修正率を例示する図である。
【図１４】機能区分の構成要素単位に過去の修正率と今回の修正状況との対応関係を例示する図である。
【図１５】ソースコードに修正履歴を書き込んで保存する際の一例を示す模式図である。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照して、本発明に係るソースコード比較装置、ソースコード比較方法およびソースコード比較プログラムの好適な実施形態について説明する。
【００１３】
まず、図１を参照して、実施形態におけるソースコード比較装置の機能構成について説明する。ソースコード比較装置１は、機能的には、例えば、差分抽出部１１と、構文解析部１２と、機能解析部１３と、修正履歴登録部１４と、比較結果出力部１５と、を有する。
【００１４】
ここで、ソースコード比較装置１は、物理的には、例えば、ＣＰＵ（Central Processing Unit）と、メモリと、入出力インターフェースとを含んで構成される。メモリには、例えば、ＣＰＵで処理されるプログラムおよびデータを記憶するＲＯＭ（Read Only Memory）やＨＤＤ（Hard Disk Drive）、主として制御処理のための各種作業領域として使用されるＲＡＭ（Random Access Memory）等の要素が含まれる。これらの要素は、互いにバスを介して接続されている。ＣＰＵが、ＲＯＭに記憶されたプログラムを実行し、入出力インターフェースを介して受信されるソースコートやメッセージ、ＲＡＭに展開されるデータ等を処理することで、ソースコード比較装置１における各部の機能を実現することができる。
【００１５】
差分抽出部１１は、修正前のソースコードと修正後のソースコードとを比較して差分を抽出する。ソースコードを比較する手法として、一般的なテキスト比較処理を用いることができる。差分抽出部１１は、ソースコードのテキスト同士を比較していくことで、修正前のソースコードと修正後のソースコードとの差分を列挙する。
【００１６】
構文解析部１２は、差分抽出部１１により抽出された差分から、修正対象となった構成要素を列挙し、構文解析結果を生成する。構成要素は、ソースコードに使用可能な構成要素であり、例えば、変数、関数、構造体等が該当する。図２に、構文解析結果の一例を示す。図２の構文解析結果は、ソースコードの差分として、“差分１”、“差分２”、“差分３”が抽出され、“差分１”には構成要素として“関数１”が含まれ、“差分２”には構成要素として“変数１”および“構造体１”が含まれ、“差分３”には構成要素として“関数２”が含まれていることを示している。
【００１７】
構文解析部１２は、複数の構成要素を含む差分が存在する場合に、その差分を構成要素ごとに分割し、構文解析結果を更新する。これは、ソースコード上で隣り合って記述されている複数の構成要素が修正された場合には、複数の構成要素を含む差分が、ひとまとまりの差分として抽出されることを考慮したものであり、このような場合に、構成要素ごとに差分を分割することとしたものである。図３に、分割後の構文解析結果の一例を示す。図３の構文解析結果は、図２の“差分２”が複数の構成要素（“変数１”および“構造体１”）を含んでいるため、この“差分２”を、構成要素“変数１”に対応する“差分２ａ”と、構成要素“構造体１”に対応する“差分２ｂ”と、に分割したことを示している。
【００１８】
機能解析部１３は、修正履歴テーブル３１を参照し、構文解析結果に含まれる構成要素に対応する機能区分を決定し、機能解析結果を生成する。
【００１９】
図４を参照して、修正履歴テーブル３１のデータ構成について説明する。修正履歴テーブル３１は、データ項目として、例えば、履歴番号項目と、構成要素項目と、機能区分項目とを有する。履歴番号項目は、修正前後のソースコードを比較するごとにインクリメントされる識別番号を格納する。構成要素項目は、修正対象となった構成要素を一意に特定するための識別情報を格納する。機能区分項目は、構成要素が属する機能を一意に特定するための識別情報を格納する。機能区分は、一または複数の構成要素により実現される機能を識別可能なように、ユーザが任意に設定することができる。
【００２０】
図４の修正履歴テーブルは、あるソースコードについて、１回目の修正前後の比較では、機能区分“機能１”に属する構成要素“関数１”および“変数１”が修正されたことを示し、２回目の修正前後の比較では、機能区分“機能２”に属する構成要素“構造体１”が修正されたことを示す。
【００２１】
機能解析部１３は、構文解析結果に含まれる構成要素が、修正履歴テーブル３１に存在する場合には、その構成要素と対応付けて修正履歴テーブル３１に記憶されている機能区分を、その構成要素に対応する機能解析結果の機能区分に設定する。機能解析部１３は、構文解析結果に含まれる構成要素が、修正履歴テーブル３１に存在しない場合には、修正履歴に存在しないことを示す区分（例えば、“新規機能”）を、その構成要素に対応する機能解析結果の機能区分に仮設定する。
【００２２】
機能解析部１３は、機能区分に“新規機能”を仮設定した場合に、その時点の機能解析結果を暫定機能解析結果として出力装置４に表示させ、“新規機能”を仮設定した機能区分に対する入力をユーザに促す。その後、仮設定した機能区分に対する入力をユーザから受け付けた場合に、機能解析部１３は、仮設定した暫定機能解析結果の機能区分を、入力された機能区分に変更することで、機能解析結果を更新する。
【００２３】
図５に、暫定機能解析結果の一例を示す。図５の暫定機能解析結果は、図３の構文解析結果と図４の修正履歴テーブルとに基づいて生成された機能解析結果である。図３の構文解析結果の構成要素うち、“関数１”、“変数１”および“構造体１”については、図４の修正履歴テーブルに存在するため、修正履歴テーブルのそれぞれの構成要素に対応して記憶されている機能区分“機能１”、“機能１”および“機能２”が、図５の暫定機能解析結果の構成要素“関数１”、“変数１”および“構造体１”に対応する機能区分にそれぞれ設定されている。一方、図３の構文解析結果の構成要素うち、“関数２”については、図４の修正履歴テーブルに存在しないため、修正履歴に存在しないことを示す区分である“新規機能”が、図５の暫定機能解析結果の構成要素“関数２”に対応する機能区分に仮設定されている。
【００２４】
図６に、機能解析結果の一例を示す。図６の機能解析結果は、図５の暫定機能解析結果の構成要素“関数２”に対応する機能区分が、ユーザにより入力された“機能３”に設定変更された状態を示している。
【００２５】
修正履歴登録部１４は、機能解析結果に基づいて、修正履歴テーブル３１に修正履歴を登録する。
【００２６】
図７に、更新後の修正履歴テーブルの一例を示す。図７の修正履歴テーブルは、図６の機能解析結果に基づいて図４の修正履歴テーブルを更新した後の状態である。図７の修正履歴テーブルには、図６の機能解析結果に含まれる４組の構成要素と機能区分との組が、修正履歴テーブルの履歴番号“３”に対応するデータとして追加登録されている。
【００２７】
比較結果出力部１５は、修正前後のソースコードを比較した結果を示す比較結果を出力装置４に表示させる。比較結果は、機能解析結果に含まれる各項目を用いて表すことができる。比較結果に表示する項目は、機能解析結果に含まれる各項目の中からユーザが任意に指定することができる。
【００２８】
図８に、比較結果の一例を示す。図８の比較結果は、機能解析結果に含まれる分割差分と機能区分とを用いて表した例である。図８の比較結果は、“機能１”に関する修正として、“差分１”と“差分２ａ”とが抽出され、“機能２”に関する修正として、“差分２ｂ”が抽出され、“機能３”に関する修正として、“差分３”が抽出されたことを示している。
【００２９】
図９に、ユーザが出力対象として特定の機能を指定した場合に表示される比較結果の一例を示す。図９は、ユーザが出力対象として“機能１”を指定したときに表示される比較結果である。図９の比較結果には、修正された複数の機能のうち、ユーザにより指定された“機能１”に関する比較結果のみが表示されている。ユーザは、例えばクエリ機能を利用して出力対象を任意に指定することができる。
【００３０】
次に、図１０および図１１を参照して、修正前後のソースコードを比較する際の動作について説明する。図１０は、修正前後のソースコードを比較する際の動作を説明するフローチャートであり、図１１は、修正前後のソースコードを比較する際のデータの遷移状態を模式的に示す図である。
【００３１】
最初に、修正前のソースコードＡと修正後のソースコードＢとを入力装置２から読み込む、ソースコード読込処理を実行する（ステップＳ１０１）。
【００３２】
続いて、差分抽出部１１は、修正前のソースコードＡと修正後のソースコードＢとをテキスト比較により比較して差分を抽出する、テキスト比較処理を実行する（ステップＳ１０２）。図１１では、修正前のソースコードＡと修正後のソースコードＢとの差分として、“差分１”、“差分２”および“差分３”が抽出されている。
【００３３】
続いて、構文解析部１２は、上記ステップＳ１０２で抽出された差分から修正対象となった構成要素を列挙し、差分を構成要素ごとに分割して構文解析結果を生成する、構文解析処理を実行する（ステップＳ１０３）。図１１では、“差分１”、“差分２”および“差分３”に含まれる構成要素として、“関数１”、“変数１”、“構造体１”および“関数２”が列挙されている。
【００３４】
続いて、機能解析部１３は、上記ステップＳ１０３で生成した構文解析結果に含まれる構成要素に対応する機能区分を、修正履歴テーブル３１を参照して決定し、機能解析結果を生成する、機能解析処理を実行する（ステップＳ１０４）。図１１では、修正履歴テーブルを参照し、修正履歴テーブルに存在する“機能１”および“機能２”が、差分から列挙された構成要素に対応する機能区分として決定されている。
【００３５】
機能解析部１３は、上記ステップＳ１０３で生成した構文解析結果に含まれる全ての構成要素（修正箇所）が、修正履歴テーブル３１に存在するか否かを判定する（ステップＳ１０５）。この判定がＹＥＳである場合（ステップＳ１０５；ＹＥＳ）には、処理を後述するステップＳ１０８に移行する。
【００３６】
一方、上記ステップＳ１０５の判定で構文解析結果に含まれる構成要素（修正箇所）のいずれかが修正履歴テーブル３１に存在しないと判定された場合（ステップＳ１０５；ＮＯ）に、機能解析部１３は、その時点の機能解析結果を暫定機能解析結果として出力装置４に表示させ（ステップＳ１０６）、“新規機能”を仮設定した機能区分に対する入力をユーザに促す。図１１では、“差分３”から列挙された“関数２”に対応する機能区分への入力がユーザに促される。
【００３７】
続いて、仮設定した機能区分に対する入力をユーザから受け付けた場合に、機能解析部１３は、暫定機能解析結果の“新規機能”を仮設定した機能区分を、入力された機能区分に変更することで、機能解析結果を更新する（ステップＳ１０７）。図１１では、“差分３”から列挙された“関数２”に対応する機能区分が“機能３”に設定変更される。
【００３８】
続いて、修正履歴登録部１４は、上記ステップＳ１０４で生成された機能解析結果または上記ステップＳ１０７で更新された機能解析結果に基づいて、修正履歴テーブル３１に修正履歴を登録する、修正履歴登録処理を実行する（ステップＳ１０８）。図１１では、修正履歴テーブルに、履歴番号“３”の修正履歴データが追加登録される。
【００３９】
続いて、比較結果出力部１５は、修正前後のソースコードを比較した結果を示す比較結果を出力装置４に表示させる、比較結果出力処理を実行する（ステップＳ１０９）。
【００４０】
上述したように、実施形態におけるソースコード比較装置１によれば、蓄積した過去の修正履歴にもとづいて、修正箇所と機能との対応付けを行うことができるため、過去の修正実績に基づいた正確な対応付けを簡易に行うことが可能となる。
【００４１】
また、修正履歴にない新規修正箇所については、その修正箇所に対応する機能を入力するようにユーザに促し、ユーザから入力された機能を登録することができるため、新規コードや新規機能を追加した場合であっても、登録漏れを確実に防止することができる。
【００４２】
また、修正のたびに、修正箇所と機能とを対応付けて追加登録し、対応付け情報を蓄積していくことができるため、過去の対応付け情報を参照しながら開発することが可能となり、開発時の作業効率を向上させることができる。
【００４３】
[変形例]
なお、上述した実施形態は、単なる例示に過ぎず、実施形態に明示していない種々の変形や技術の適用を排除するものではない。すなわち、本発明は、その趣旨を逸脱しない範囲で様々な形態に変形して実施することができる。
【００４４】
例えば、上述した実施形態のソースコード比較装置１は、図１に示す各部を備えているが、さらに、妥当性検査部を備えることとしてもよい。妥当性検査部は、修正履歴テーブル３１を参照して、機能区分ごとに、各構成要素が当該機能区分に属する構成要素として修正される割合（修正率）を算出する。妥当性検査部は、機能区分ごとに算出した各構成要素の修正率が所定の閾値以上となる構成要素が、機能解析結果の当該機能区分に対応する構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する。
【００４５】
図１２〜図１４を参照して、妥当性検査部の機能ついて具体的に説明する。図１２は、妥当性検査部が修正の妥当性を検査する際の一例を模式的に示した図である。図１３は、機能区分ごとに算出する各構成要素の修正率の一例を示す図である。図１４は、機能区分の構成要素単位に過去の修正率と今回の修正状況との対応関係を例示した図である。
【００４６】
妥当性検査部は、図１２に示す修正履歴テーブルを参照して、図１３に示す機能区分ごとの各構成要素の修正率を算出する。図１２の修正履歴テーブルには、履歴番号“１”と履歴番号“２”とで識別される２回分の比較結果が修正履歴として蓄積されている。“機能１”は、２回とも修正対象となっており、“機能２”は、履歴番号“１”でのみ修正対象となっている。
【００４７】
“機能１”を修正したときには、“関数１”と“変数１”とが２回とも修正されているため、“関数１”および“変数１”の修正率は“１００％”となり、“構造体１”は履歴番号“２”でのみ修正されているため、“構造体１”の修正率は“５０％”となる（図１３参照）。
【００４８】
“機能２”を修正したときには、“変数１”が修正されているため、“変数１”の修正率は“１００％”となり、“関数１”と“構造体１”とは修正されていないため、“関数１”および“構造体１”の修正率は“０％”となる（図１３参照）。
【００４９】
妥当性検査部は、図１３に示す機能区分ごとの各構成要素の修正率を参照して、検査対象となる機能区分において修正率が所定の閾値以上となる構成要素が、機能解析結果の当該機能区分に対応する構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する。
【００５０】
図１２に示すように、修正前後のソースコードＡ、Ｂを比較すると、機能解析結果には、“差分１”として、“関数１”と“機能１”との組み合わせが設定されることになる。図１３に示す“機能１”の構成要素ごとの修正率と、今回の修正状況との対応関係を表したものが図１４となる。仮に修正率の閾値が９０％に設定されているとすると、修正率が閾値以上となる構成要素は、“関数１”および“変数１”となる。今回の“機能１”に関する修正では、“関数１”のみが修正されているため、妥当性検査部は、“変数１”が修正漏れであると判定し、その旨をユーザに通知する。
【００５１】
なお、ユーザに通知するのは、修正漏れであることには限定されない。例えば、過去の修正率が第２の閾値以下である構成要素が修正されている場合には、修正ミスであると判定し、その旨をユーザに通知することもできる。
【００５２】
このような妥当性検査部を備えることで、過去の修正履歴に基づいて今回の修正の妥当性を判断することができるため、開発時の作業効率をさらに向上させることが可能となる。
【００５３】
また、上述した実施形態では、修正履歴を修正履歴テーブル３１に格納して保存しているが、修正履歴を保存する方法は、これに限定されない。例えば、図１５に示すように、比較するソースコードに修正履歴を書き込んで保存することとしてもよい。図１５は、Ｊａｖａ（登録商標）言語のソースコードＹにアノテーションとして修正履歴Ｘを埋め込んだ例である。ソースコードＹの一部に、各機能区分に対応するアノテーションを定義する。各アノテーションは、ｉｎｔ型の配列を持つ単一値のアノテーションとする。対応する履歴番号を設定したアノテーションを、対応する構成要素の記述箇所に挿入する。これにより、ソースコードの編集と修正履歴の参照とを、一つのソースコードで実現できるため、修正内容の確認や開発等の作業効率を向上させることが可能となる。
【００５４】
また、上述した各実施形態の一部または全部は、以下の付記のようにも記載され得るが、本発明を以下のように限定するものではない。
【００５５】
（付記１）  修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出部と、前記差分抽出部により抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析部と、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析部と、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力部と、を備え、前記機能解析部は、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較装置。
【００５６】
（付記２）  前記機能解析部は、前記構文解析結果に含まれる前記構成要素が前記修正履歴に存在しない場合に、前記修正履歴に存在しないことを示す区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に仮設定するとともに、前記仮設定した前記機能区分に対する入力をユーザに促す、ことを特徴とする付記１記載のソースコード比較装置。
【００５７】
（付記３）  前記機能解析部は、前記仮設定した前記機能区分に対する入力をユーザから受け付けた場合に、前記仮設定した前記機能区分を、入力された前記機能区分に変更することで、前記機能解析結果を更新する、ことを特徴とする付記２記載のソースコード比較装置。
【００５８】
（付記４）  前記修正履歴を参照し、前記機能区分ごとに、前記構成要素が当該機能区分に属する前記構成要素として修正される割合を算出し、当該割合が所定の閾値以上となる前記構成要素が、前記機能解析結果の当該機能区分に対応する前記構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する妥当性検査部を、さらに備えることを特徴とする付記１〜３のいずれかに記載のソースコード比較装置。
【００５９】
（付記５）  前記機能解析部により生成される前記機能解析結果を、前記修正履歴として記憶装置に記憶させる修正履歴記憶部を、さらに備えることを特徴とする付記１〜４のいずれかに記載のソースコード比較装置。
【００６０】
（付記６）  前記機能解析部により生成される前記機能解析結果を、前記修正履歴として修正後のソースコードに組み込む修正履歴組込部を、さらに備えることを特徴とする付記１〜４のいずれかに記載のソースコード比較装置。
【００６１】
（付記７）  修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出ステップと、前記差分抽出ステップにおいて抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析ステップと、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析ステップと、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力ステップと、を含み、前記機能解析ステップは、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較方法。
【００６２】
（付記８）  付記７に記載の各ステップをコンピュータに実行させるためのソースコード比較プログラム。
【符号の説明】
【００６３】
１…ソースコード比較装置
２…入力装置
３…記憶装置
４…出力装置
１１…差分抽出部
１２…構文解析部
１３…機能解析部
１４…修正履歴登録部
１５…比較結果出力部
３１…修正履歴テーブル
【図１】
0005725359.tif 000002
【図２】
0005725359.tif 000003
【図３】
0005725359.tif 000004
【図４】
0005725359.tif 000005
【図５】
0005725359.tif 000006
【図６】
0005725359.tif 000007
【図７】
0005725359.tif 000008
【図８】
0005725359.tif 000009
【図１０】
0005725359.tif 000010
【図１１】
0005725359.tif 000011
【図１２】
0005725359.tif 000012
【図１３】
0005725359.tif 000013
【図１４】
0005725359.tif 000014
【図１５】
0005725359.tif 000015
【図９】
0005725359.tif 000016