ソースコード比較装置、ソースコード比較方法およびソースコード比較プログラム
【課題】修正箇所と機能との対応付けを正確かつ簡易に行う。
【解決手段】修正前後のソースコードを比較して差分を抽出する差分抽出部11と、差分抽出部11により抽出された差分を、ソースコードに使用可能な構成要素ごとに分割し、分割した後の差分である分割差分と構成要素とを対応付けた構文解析結果を生成する構文解析部12と、構文解析結果に含まれる分割差分と構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析部13と、機能解析結果に含まれる分割差分および機能区分を用いて、修正前後のソースコードの比較結果を出力する比較結果出力部15と、を備え、機能解析部13は、構文解析結果に含まれる構成要素が、修正履歴テーブル31に存在する場合に、該構成要素に対応付けて修正履歴に設定されている機能区分を、該構成要素に対応する機能解析結果の機能区分に設定する。
【解決手段】修正前後のソースコードを比較して差分を抽出する差分抽出部11と、差分抽出部11により抽出された差分を、ソースコードに使用可能な構成要素ごとに分割し、分割した後の差分である分割差分と構成要素とを対応付けた構文解析結果を生成する構文解析部12と、構文解析結果に含まれる分割差分と構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析部13と、機能解析結果に含まれる分割差分および機能区分を用いて、修正前後のソースコードの比較結果を出力する比較結果出力部15と、を備え、機能解析部13は、構文解析結果に含まれる構成要素が、修正履歴テーブル31に存在する場合に、該構成要素に対応付けて修正履歴に設定されている機能区分を、該構成要素に対応する機能解析結果の機能区分に設定する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソースコード比較装置、ソースコード比較方法およびソースコード比較プログラムに関する。
【背景技術】
【0002】
従来、ソースコードの修正内容を確認する際の手法として、例えばUNIX(登録商標)のdiffコマンドを利用して、修正前後のソースコードを行単位でテキスト比較し、ソースコード間の差分を表示させる手法が用いられている。しかしながら、このようなテキスト上の差分だけでは、それぞれの修正がどの機能に対応しているのかをユーザ自身で判断しなければならない。したがって、複数の機能に対する修正が混在している場合には、修正箇所と機能との対応付けに困難を要することになる。修正箇所と機能とを対応付ける技術として、例えば、下記特許文献1および2に記載されている技術がある。
【0003】
特許文献1に記載の技術では、修正前後のソースコードを比較して修正箇所を抽出し、ソースコードの構文解析結果を用いることで、修正箇所と変数名や関数名との対応付けを行っている。特許文献2に記載の技術では、ソースコードを、プログラム、モジュール、ファイルおよび関数の各階層に分けられるように予め階層構造化しておき、修正前後のソースコードを比較する際に、プログラム、モジュール、ファイルおよび関数の各階層単位で比較することで、修正箇所と階層機能との対応付けを行っている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平08−194611号公報
【特許文献2】特開2006−277127号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1のように、構文解析結果を用いるだけでは、変数名や関数名よりも上位階層となるモジュールやファイル等との対応付けには不十分である。また、特許文献2では、プログラムやモジュール等の階層構造を、予め定義して登録しておく必要があるが、例えば、設計情報が入手できない場合や、追加時の登録漏れ等が考えられ、管理するのに困難を要する。
【0006】
本発明は、上述した課題を解決するためになされたものであり、修正箇所と機能との対応付けを正確かつ簡易に行うことができるソースコード比較装置、ソースコード比較方法およびソースコード比較プログラムを提供することを目的の一例とする。
【課題を解決するための手段】
【0007】
本発明の一側面であるソースコード比較装置は、修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出部と、前記差分抽出部により抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析部と、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析部と、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力部と、を備え、前記機能解析部は、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する。
【0008】
本発明の一側面であるソースコード比較方法は、修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出ステップと、前記差分抽出ステップにおいて抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析ステップと、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析ステップと、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力ステップと、を含み、前記機能解析ステップは、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する。
【0009】
本発明の一側面であるソースコード比較プログラムは、上記ソースコード比較方法に含まれる各ステップをコンピュータに実行させる。
【発明の効果】
【0010】
本発明によれば、修正箇所と機能との対応付けを正確かつ簡易に行うことができる。
【図面の簡単な説明】
【0011】
【図1】実施形態におけるソースコード比較装置の構成を例示する図である。
【図2】構文解析結果を例示する図である。
【図3】分割後の構文解析結果を例示する図である。
【図4】修正履歴テーブルのデータ構成を例示する図である。
【図5】暫定機能解析結果を例示する図である。
【図6】機能解析結果を例示する図である。
【図7】修正履歴テーブルのデータ構成を例示する図である。
【図8】比較結果を例示する図である。
【図9】比較結果を例示する図である。
【図10】修正前後のソースコードを比較する際の動作を説明するためのフローチャートである。
【図11】修正前後のソースコードを比較する際のデータの遷移状態を例示する模式図である。
【図12】変形例における妥当性検査部が修正の妥当性を検査する際の一例を示す模式図である。
【図13】機能区分ごとに算出する各構成要素の修正率を例示する図である。
【図14】機能区分の構成要素単位に過去の修正率と今回の修正状況との対応関係を例示する図である。
【図15】ソースコードに修正履歴を書き込んで保存する際の一例を示す模式図である。
【発明を実施するための形態】
【0012】
以下、添付図面を参照して、本発明に係るソースコード比較装置、ソースコード比較方法およびソースコード比較プログラムの好適な実施形態について説明する。
【0013】
まず、図1を参照して、実施形態におけるソースコード比較装置の機能構成について説明する。ソースコード比較装置1は、機能的には、例えば、差分抽出部11と、構文解析部12と、機能解析部13と、修正履歴登録部14と、比較結果出力部15と、を有する。
【0014】
ここで、ソースコード比較装置1は、物理的には、例えば、CPU(Central Processing Unit)と、メモリと、入出力インターフェースとを含んで構成される。メモリには、例えば、CPUで処理されるプログラムおよびデータを記憶するROM(Read Only Memory)やHDD(Hard Disk Drive)、主として制御処理のための各種作業領域として使用されるRAM(Random Access Memory)等の要素が含まれる。これらの要素は、互いにバスを介して接続されている。CPUが、ROMに記憶されたプログラムを実行し、入出力インターフェースを介して受信されるソースコートやメッセージ、RAMに展開されるデータ等を処理することで、ソースコード比較装置1における各部の機能を実現することができる。
【0015】
差分抽出部11は、修正前のソースコードと修正後のソースコードとを比較して差分を抽出する。ソースコードを比較する手法として、一般的なテキスト比較処理を用いることができる。差分抽出部11は、ソースコードのテキスト同士を比較していくことで、修正前のソースコードと修正後のソースコードとの差分を列挙する。
【0016】
構文解析部12は、差分抽出部11により抽出された差分から、修正対象となった構成要素を列挙し、構文解析結果を生成する。構成要素は、ソースコードに使用可能な構成要素であり、例えば、変数、関数、構造体等が該当する。図2に、構文解析結果の一例を示す。図2の構文解析結果は、ソースコードの差分として、“差分1”、“差分2”、“差分3”が抽出され、“差分1”には構成要素として“関数1”が含まれ、“差分2”には構成要素として“変数1”および“構造体1”が含まれ、“差分3”には構成要素として“関数2”が含まれていることを示している。
【0017】
構文解析部12は、複数の構成要素を含む差分が存在する場合に、その差分を構成要素ごとに分割し、構文解析結果を更新する。これは、ソースコード上で隣り合って記述されている複数の構成要素が修正された場合には、複数の構成要素を含む差分が、ひとまとまりの差分として抽出されることを考慮したものであり、このような場合に、構成要素ごとに差分を分割することとしたものである。図3に、分割後の構文解析結果の一例を示す。図3の構文解析結果は、図2の“差分2”が複数の構成要素(“変数1”および“構造体1”)を含んでいるため、この“差分2”を、構成要素“変数1”に対応する“差分2a”と、構成要素“構造体1”に対応する“差分2b”と、に分割したことを示している。
【0018】
機能解析部13は、修正履歴テーブル31を参照し、構文解析結果に含まれる構成要素に対応する機能区分を決定し、機能解析結果を生成する。
【0019】
図4を参照して、修正履歴テーブル31のデータ構成について説明する。修正履歴テーブル31は、データ項目として、例えば、履歴番号項目と、構成要素項目と、機能区分項目とを有する。履歴番号項目は、修正前後のソースコードを比較するごとにインクリメントされる識別番号を格納する。構成要素項目は、修正対象となった構成要素を一意に特定するための識別情報を格納する。機能区分項目は、構成要素が属する機能を一意に特定するための識別情報を格納する。機能区分は、一または複数の構成要素により実現される機能を識別可能なように、ユーザが任意に設定することができる。
【0020】
図4の修正履歴テーブルは、あるソースコードについて、1回目の修正前後の比較では、機能区分“機能1”に属する構成要素“関数1”および“変数1”が修正されたことを示し、2回目の修正前後の比較では、機能区分“機能2”に属する構成要素“構造体1”が修正されたことを示す。
【0021】
機能解析部13は、構文解析結果に含まれる構成要素が、修正履歴テーブル31に存在する場合には、その構成要素と対応付けて修正履歴テーブル31に記憶されている機能区分を、その構成要素に対応する機能解析結果の機能区分に設定する。機能解析部13は、構文解析結果に含まれる構成要素が、修正履歴テーブル31に存在しない場合には、修正履歴に存在しないことを示す区分(例えば、“新規機能”)を、その構成要素に対応する機能解析結果の機能区分に仮設定する。
【0022】
機能解析部13は、機能区分に“新規機能”を仮設定した場合に、その時点の機能解析結果を暫定機能解析結果として出力装置4に表示させ、“新規機能”を仮設定した機能区分に対する入力をユーザに促す。その後、仮設定した機能区分に対する入力をユーザから受け付けた場合に、機能解析部13は、仮設定した暫定機能解析結果の機能区分を、入力された機能区分に変更することで、機能解析結果を更新する。
【0023】
図5に、暫定機能解析結果の一例を示す。図5の暫定機能解析結果は、図3の構文解析結果と図4の修正履歴テーブルとに基づいて生成された機能解析結果である。図3の構文解析結果の構成要素うち、“関数1”、“変数1”および“構造体1”については、図4の修正履歴テーブルに存在するため、修正履歴テーブルのそれぞれの構成要素に対応して記憶されている機能区分“機能1”、“機能1”および“機能2”が、図5の暫定機能解析結果の構成要素“関数1”、“変数1”および“構造体1”に対応する機能区分にそれぞれ設定されている。一方、図3の構文解析結果の構成要素うち、“関数2”については、図4の修正履歴テーブルに存在しないため、修正履歴に存在しないことを示す区分である“新規機能”が、図5の暫定機能解析結果の構成要素“関数2”に対応する機能区分に仮設定されている。
【0024】
図6に、機能解析結果の一例を示す。図6の機能解析結果は、図5の暫定機能解析結果の構成要素“関数2”に対応する機能区分が、ユーザにより入力された“機能3”に設定変更された状態を示している。
【0025】
修正履歴登録部14は、機能解析結果に基づいて、修正履歴テーブル31に修正履歴を登録する。
【0026】
図7に、更新後の修正履歴テーブルの一例を示す。図7の修正履歴テーブルは、図6の機能解析結果に基づいて図4の修正履歴テーブルを更新した後の状態である。図7の修正履歴テーブルには、図6の機能解析結果に含まれる4組の構成要素と機能区分との組が、修正履歴テーブルの履歴番号“3”に対応するデータとして追加登録されている。
【0027】
比較結果出力部15は、修正前後のソースコードを比較した結果を示す比較結果を出力装置4に表示させる。比較結果は、機能解析結果に含まれる各項目を用いて表すことができる。比較結果に表示する項目は、機能解析結果に含まれる各項目の中からユーザが任意に指定することができる。
【0028】
図8に、比較結果の一例を示す。図8の比較結果は、機能解析結果に含まれる分割差分と機能区分とを用いて表した例である。図8の比較結果は、“機能1”に関する修正として、“差分1”と“差分2a”とが抽出され、“機能2”に関する修正として、“差分2b”が抽出され、“機能3”に関する修正として、“差分3”が抽出されたことを示している。
【0029】
図9に、ユーザが出力対象として特定の機能を指定した場合に表示される比較結果の一例を示す。図9は、ユーザが出力対象として“機能1”を指定したときに表示される比較結果である。図9の比較結果には、修正された複数の機能のうち、ユーザにより指定された“機能1”に関する比較結果のみが表示されている。ユーザは、例えばクエリ機能を利用して出力対象を任意に指定することができる。
【0030】
次に、図10および図11を参照して、修正前後のソースコードを比較する際の動作について説明する。図10は、修正前後のソースコードを比較する際の動作を説明するフローチャートであり、図11は、修正前後のソースコードを比較する際のデータの遷移状態を模式的に示す図である。
【0031】
最初に、修正前のソースコードAと修正後のソースコードBとを入力装置2から読み込む、ソースコード読込処理を実行する(ステップS101)。
【0032】
続いて、差分抽出部11は、修正前のソースコードAと修正後のソースコードBとをテキスト比較により比較して差分を抽出する、テキスト比較処理を実行する(ステップS102)。図11では、修正前のソースコードAと修正後のソースコードBとの差分として、“差分1”、“差分2”および“差分3”が抽出されている。
【0033】
続いて、構文解析部12は、上記ステップS102で抽出された差分から修正対象となった構成要素を列挙し、差分を構成要素ごとに分割して構文解析結果を生成する、構文解析処理を実行する(ステップS103)。図11では、“差分1”、“差分2”および“差分3”に含まれる構成要素として、“関数1”、“変数1”、“構造体1”および“関数2”が列挙されている。
【0034】
続いて、機能解析部13は、上記ステップS103で生成した構文解析結果に含まれる構成要素に対応する機能区分を、修正履歴テーブル31を参照して決定し、機能解析結果を生成する、機能解析処理を実行する(ステップS104)。図11では、修正履歴テーブルを参照し、修正履歴テーブルに存在する“機能1”および“機能2”が、差分から列挙された構成要素に対応する機能区分として決定されている。
【0035】
機能解析部13は、上記ステップS103で生成した構文解析結果に含まれる全ての構成要素(修正箇所)が、修正履歴テーブル31に存在するか否かを判定する(ステップS105)。この判定がYESである場合(ステップS105;YES)には、処理を後述するステップS108に移行する。
【0036】
一方、上記ステップS105の判定で構文解析結果に含まれる構成要素(修正箇所)のいずれかが修正履歴テーブル31に存在しないと判定された場合(ステップS105;NO)に、機能解析部13は、その時点の機能解析結果を暫定機能解析結果として出力装置4に表示させ(ステップS106)、“新規機能”を仮設定した機能区分に対する入力をユーザに促す。図11では、“差分3”から列挙された“関数2”に対応する機能区分への入力がユーザに促される。
【0037】
続いて、仮設定した機能区分に対する入力をユーザから受け付けた場合に、機能解析部13は、暫定機能解析結果の“新規機能”を仮設定した機能区分を、入力された機能区分に変更することで、機能解析結果を更新する(ステップS107)。図11では、“差分3”から列挙された“関数2”に対応する機能区分が“機能3”に設定変更される。
【0038】
続いて、修正履歴登録部14は、上記ステップS104で生成された機能解析結果または上記ステップS107で更新された機能解析結果に基づいて、修正履歴テーブル31に修正履歴を登録する、修正履歴登録処理を実行する(ステップS108)。図11では、修正履歴テーブルに、履歴番号“3”の修正履歴データが追加登録される。
【0039】
続いて、比較結果出力部15は、修正前後のソースコードを比較した結果を示す比較結果を出力装置4に表示させる、比較結果出力処理を実行する(ステップS109)。
【0040】
上述したように、実施形態におけるソースコード比較装置1によれば、蓄積した過去の修正履歴にもとづいて、修正箇所と機能との対応付けを行うことができるため、過去の修正実績に基づいた正確な対応付けを簡易に行うことが可能となる。
【0041】
また、修正履歴にない新規修正箇所については、その修正箇所に対応する機能を入力するようにユーザに促し、ユーザから入力された機能を登録することができるため、新規コードや新規機能を追加した場合であっても、登録漏れを確実に防止することができる。
【0042】
また、修正のたびに、修正箇所と機能とを対応付けて追加登録し、対応付け情報を蓄積していくことができるため、過去の対応付け情報を参照しながら開発することが可能となり、開発時の作業効率を向上させることができる。
【0043】
[変形例]
なお、上述した実施形態は、単なる例示に過ぎず、実施形態に明示していない種々の変形や技術の適用を排除するものではない。すなわち、本発明は、その趣旨を逸脱しない範囲で様々な形態に変形して実施することができる。
【0044】
例えば、上述した実施形態のソースコード比較装置1は、図1に示す各部を備えているが、さらに、妥当性検査部を備えることとしてもよい。妥当性検査部は、修正履歴テーブル31を参照して、機能区分ごとに、各構成要素が当該機能区分に属する構成要素として修正される割合(修正率)を算出する。妥当性検査部は、機能区分ごとに算出した各構成要素の修正率が所定の閾値以上となる構成要素が、機能解析結果の当該機能区分に対応する構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する。
【0045】
図12〜図14を参照して、妥当性検査部の機能ついて具体的に説明する。図12は、妥当性検査部が修正の妥当性を検査する際の一例を模式的に示した図である。図13は、機能区分ごとに算出する各構成要素の修正率の一例を示す図である。図14は、機能区分の構成要素単位に過去の修正率と今回の修正状況との対応関係を例示した図である。
【0046】
妥当性検査部は、図12に示す修正履歴テーブルを参照して、図13に示す機能区分ごとの各構成要素の修正率を算出する。図12の修正履歴テーブルには、履歴番号“1”と履歴番号“2”とで識別される2回分の比較結果が修正履歴として蓄積されている。“機能1”は、2回とも修正対象となっており、“機能2”は、履歴番号“1”でのみ修正対象となっている。
【0047】
“機能1”を修正したときには、“関数1”と“変数1”とが2回とも修正されているため、“関数1”および“変数1”の修正率は“100%”となり、“構造体1”は履歴番号“2”でのみ修正されているため、“構造体1”の修正率は“50%”となる(図13参照)。
【0048】
“機能2”を修正したときには、“変数1”が修正されているため、“変数1”の修正率は“100%”となり、“関数1”と“構造体1”とは修正されていないため、“関数1”および“構造体1”の修正率は“0%”となる(図13参照)。
【0049】
妥当性検査部は、図13に示す機能区分ごとの各構成要素の修正率を参照して、検査対象となる機能区分において修正率が所定の閾値以上となる構成要素が、機能解析結果の当該機能区分に対応する構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する。
【0050】
図12に示すように、修正前後のソースコードA、Bを比較すると、機能解析結果には、“差分1”として、“関数1”と“機能1”との組み合わせが設定されることになる。図13に示す“機能1”の構成要素ごとの修正率と、今回の修正状況との対応関係を表したものが図14となる。仮に修正率の閾値が90%に設定されているとすると、修正率が閾値以上となる構成要素は、“関数1”および“変数1”となる。今回の“機能1”に関する修正では、“関数1”のみが修正されているため、妥当性検査部は、“変数1”が修正漏れであると判定し、その旨をユーザに通知する。
【0051】
なお、ユーザに通知するのは、修正漏れであることには限定されない。例えば、過去の修正率が第2の閾値以下である構成要素が修正されている場合には、修正ミスであると判定し、その旨をユーザに通知することもできる。
【0052】
このような妥当性検査部を備えることで、過去の修正履歴に基づいて今回の修正の妥当性を判断することができるため、開発時の作業効率をさらに向上させることが可能となる。
【0053】
また、上述した実施形態では、修正履歴を修正履歴テーブル31に格納して保存しているが、修正履歴を保存する方法は、これに限定されない。例えば、図15に示すように、比較するソースコードに修正履歴を書き込んで保存することとしてもよい。図15は、Java(登録商標)言語のソースコードYにアノテーションとして修正履歴Xを埋め込んだ例である。ソースコードYの一部に、各機能区分に対応するアノテーションを定義する。各アノテーションは、int型の配列を持つ単一値のアノテーションとする。対応する履歴番号を設定したアノテーションを、対応する構成要素の記述箇所に挿入する。これにより、ソースコードの編集と修正履歴の参照とを、一つのソースコードで実現できるため、修正内容の確認や開発等の作業効率を向上させることが可能となる。
【0054】
また、上述した各実施形態の一部または全部は、以下の付記のようにも記載され得るが、本発明を以下のように限定するものではない。
【0055】
(付記1) 修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出部と、前記差分抽出部により抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析部と、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析部と、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力部と、を備え、前記機能解析部は、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較装置。
【0056】
(付記2) 前記機能解析部は、前記構文解析結果に含まれる前記構成要素が前記修正履歴に存在しない場合に、前記修正履歴に存在しないことを示す区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に仮設定するとともに、前記仮設定した前記機能区分に対する入力をユーザに促す、ことを特徴とする付記1記載のソースコード比較装置。
【0057】
(付記3) 前記機能解析部は、前記仮設定した前記機能区分に対する入力をユーザから受け付けた場合に、前記仮設定した前記機能区分を、入力された前記機能区分に変更することで、前記機能解析結果を更新する、ことを特徴とする付記2記載のソースコード比較装置。
【0058】
(付記4) 前記修正履歴を参照し、前記機能区分ごとに、前記構成要素が当該機能区分に属する前記構成要素として修正される割合を算出し、当該割合が所定の閾値以上となる前記構成要素が、前記機能解析結果の当該機能区分に対応する前記構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する妥当性検査部を、さらに備えることを特徴とする付記1〜3のいずれかに記載のソースコード比較装置。
【0059】
(付記5) 前記機能解析部により生成される前記機能解析結果を、前記修正履歴として記憶装置に記憶させる修正履歴記憶部を、さらに備えることを特徴とする付記1〜4のいずれかに記載のソースコード比較装置。
【0060】
(付記6) 前記機能解析部により生成される前記機能解析結果を、前記修正履歴として修正後のソースコードに組み込む修正履歴組込部を、さらに備えることを特徴とする付記1〜4のいずれかに記載のソースコード比較装置。
【0061】
(付記7) 修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出ステップと、前記差分抽出ステップにおいて抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析ステップと、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析ステップと、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力ステップと、を含み、前記機能解析ステップは、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較方法。
【0062】
(付記8) 付記7に記載の各ステップをコンピュータに実行させるためのソースコード比較プログラム。
【符号の説明】
【0063】
1…ソースコード比較装置
2…入力装置
3…記憶装置
4…出力装置
11…差分抽出部
12…構文解析部
13…機能解析部
14…修正履歴登録部
15…比較結果出力部
31…修正履歴テーブル
【技術分野】
【0001】
本発明は、ソースコード比較装置、ソースコード比較方法およびソースコード比較プログラムに関する。
【背景技術】
【0002】
従来、ソースコードの修正内容を確認する際の手法として、例えばUNIX(登録商標)のdiffコマンドを利用して、修正前後のソースコードを行単位でテキスト比較し、ソースコード間の差分を表示させる手法が用いられている。しかしながら、このようなテキスト上の差分だけでは、それぞれの修正がどの機能に対応しているのかをユーザ自身で判断しなければならない。したがって、複数の機能に対する修正が混在している場合には、修正箇所と機能との対応付けに困難を要することになる。修正箇所と機能とを対応付ける技術として、例えば、下記特許文献1および2に記載されている技術がある。
【0003】
特許文献1に記載の技術では、修正前後のソースコードを比較して修正箇所を抽出し、ソースコードの構文解析結果を用いることで、修正箇所と変数名や関数名との対応付けを行っている。特許文献2に記載の技術では、ソースコードを、プログラム、モジュール、ファイルおよび関数の各階層に分けられるように予め階層構造化しておき、修正前後のソースコードを比較する際に、プログラム、モジュール、ファイルおよび関数の各階層単位で比較することで、修正箇所と階層機能との対応付けを行っている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平08−194611号公報
【特許文献2】特開2006−277127号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1のように、構文解析結果を用いるだけでは、変数名や関数名よりも上位階層となるモジュールやファイル等との対応付けには不十分である。また、特許文献2では、プログラムやモジュール等の階層構造を、予め定義して登録しておく必要があるが、例えば、設計情報が入手できない場合や、追加時の登録漏れ等が考えられ、管理するのに困難を要する。
【0006】
本発明は、上述した課題を解決するためになされたものであり、修正箇所と機能との対応付けを正確かつ簡易に行うことができるソースコード比較装置、ソースコード比較方法およびソースコード比較プログラムを提供することを目的の一例とする。
【課題を解決するための手段】
【0007】
本発明の一側面であるソースコード比較装置は、修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出部と、前記差分抽出部により抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析部と、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析部と、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力部と、を備え、前記機能解析部は、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する。
【0008】
本発明の一側面であるソースコード比較方法は、修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出ステップと、前記差分抽出ステップにおいて抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析ステップと、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析ステップと、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力ステップと、を含み、前記機能解析ステップは、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する。
【0009】
本発明の一側面であるソースコード比較プログラムは、上記ソースコード比較方法に含まれる各ステップをコンピュータに実行させる。
【発明の効果】
【0010】
本発明によれば、修正箇所と機能との対応付けを正確かつ簡易に行うことができる。
【図面の簡単な説明】
【0011】
【図1】実施形態におけるソースコード比較装置の構成を例示する図である。
【図2】構文解析結果を例示する図である。
【図3】分割後の構文解析結果を例示する図である。
【図4】修正履歴テーブルのデータ構成を例示する図である。
【図5】暫定機能解析結果を例示する図である。
【図6】機能解析結果を例示する図である。
【図7】修正履歴テーブルのデータ構成を例示する図である。
【図8】比較結果を例示する図である。
【図9】比較結果を例示する図である。
【図10】修正前後のソースコードを比較する際の動作を説明するためのフローチャートである。
【図11】修正前後のソースコードを比較する際のデータの遷移状態を例示する模式図である。
【図12】変形例における妥当性検査部が修正の妥当性を検査する際の一例を示す模式図である。
【図13】機能区分ごとに算出する各構成要素の修正率を例示する図である。
【図14】機能区分の構成要素単位に過去の修正率と今回の修正状況との対応関係を例示する図である。
【図15】ソースコードに修正履歴を書き込んで保存する際の一例を示す模式図である。
【発明を実施するための形態】
【0012】
以下、添付図面を参照して、本発明に係るソースコード比較装置、ソースコード比較方法およびソースコード比較プログラムの好適な実施形態について説明する。
【0013】
まず、図1を参照して、実施形態におけるソースコード比較装置の機能構成について説明する。ソースコード比較装置1は、機能的には、例えば、差分抽出部11と、構文解析部12と、機能解析部13と、修正履歴登録部14と、比較結果出力部15と、を有する。
【0014】
ここで、ソースコード比較装置1は、物理的には、例えば、CPU(Central Processing Unit)と、メモリと、入出力インターフェースとを含んで構成される。メモリには、例えば、CPUで処理されるプログラムおよびデータを記憶するROM(Read Only Memory)やHDD(Hard Disk Drive)、主として制御処理のための各種作業領域として使用されるRAM(Random Access Memory)等の要素が含まれる。これらの要素は、互いにバスを介して接続されている。CPUが、ROMに記憶されたプログラムを実行し、入出力インターフェースを介して受信されるソースコートやメッセージ、RAMに展開されるデータ等を処理することで、ソースコード比較装置1における各部の機能を実現することができる。
【0015】
差分抽出部11は、修正前のソースコードと修正後のソースコードとを比較して差分を抽出する。ソースコードを比較する手法として、一般的なテキスト比較処理を用いることができる。差分抽出部11は、ソースコードのテキスト同士を比較していくことで、修正前のソースコードと修正後のソースコードとの差分を列挙する。
【0016】
構文解析部12は、差分抽出部11により抽出された差分から、修正対象となった構成要素を列挙し、構文解析結果を生成する。構成要素は、ソースコードに使用可能な構成要素であり、例えば、変数、関数、構造体等が該当する。図2に、構文解析結果の一例を示す。図2の構文解析結果は、ソースコードの差分として、“差分1”、“差分2”、“差分3”が抽出され、“差分1”には構成要素として“関数1”が含まれ、“差分2”には構成要素として“変数1”および“構造体1”が含まれ、“差分3”には構成要素として“関数2”が含まれていることを示している。
【0017】
構文解析部12は、複数の構成要素を含む差分が存在する場合に、その差分を構成要素ごとに分割し、構文解析結果を更新する。これは、ソースコード上で隣り合って記述されている複数の構成要素が修正された場合には、複数の構成要素を含む差分が、ひとまとまりの差分として抽出されることを考慮したものであり、このような場合に、構成要素ごとに差分を分割することとしたものである。図3に、分割後の構文解析結果の一例を示す。図3の構文解析結果は、図2の“差分2”が複数の構成要素(“変数1”および“構造体1”)を含んでいるため、この“差分2”を、構成要素“変数1”に対応する“差分2a”と、構成要素“構造体1”に対応する“差分2b”と、に分割したことを示している。
【0018】
機能解析部13は、修正履歴テーブル31を参照し、構文解析結果に含まれる構成要素に対応する機能区分を決定し、機能解析結果を生成する。
【0019】
図4を参照して、修正履歴テーブル31のデータ構成について説明する。修正履歴テーブル31は、データ項目として、例えば、履歴番号項目と、構成要素項目と、機能区分項目とを有する。履歴番号項目は、修正前後のソースコードを比較するごとにインクリメントされる識別番号を格納する。構成要素項目は、修正対象となった構成要素を一意に特定するための識別情報を格納する。機能区分項目は、構成要素が属する機能を一意に特定するための識別情報を格納する。機能区分は、一または複数の構成要素により実現される機能を識別可能なように、ユーザが任意に設定することができる。
【0020】
図4の修正履歴テーブルは、あるソースコードについて、1回目の修正前後の比較では、機能区分“機能1”に属する構成要素“関数1”および“変数1”が修正されたことを示し、2回目の修正前後の比較では、機能区分“機能2”に属する構成要素“構造体1”が修正されたことを示す。
【0021】
機能解析部13は、構文解析結果に含まれる構成要素が、修正履歴テーブル31に存在する場合には、その構成要素と対応付けて修正履歴テーブル31に記憶されている機能区分を、その構成要素に対応する機能解析結果の機能区分に設定する。機能解析部13は、構文解析結果に含まれる構成要素が、修正履歴テーブル31に存在しない場合には、修正履歴に存在しないことを示す区分(例えば、“新規機能”)を、その構成要素に対応する機能解析結果の機能区分に仮設定する。
【0022】
機能解析部13は、機能区分に“新規機能”を仮設定した場合に、その時点の機能解析結果を暫定機能解析結果として出力装置4に表示させ、“新規機能”を仮設定した機能区分に対する入力をユーザに促す。その後、仮設定した機能区分に対する入力をユーザから受け付けた場合に、機能解析部13は、仮設定した暫定機能解析結果の機能区分を、入力された機能区分に変更することで、機能解析結果を更新する。
【0023】
図5に、暫定機能解析結果の一例を示す。図5の暫定機能解析結果は、図3の構文解析結果と図4の修正履歴テーブルとに基づいて生成された機能解析結果である。図3の構文解析結果の構成要素うち、“関数1”、“変数1”および“構造体1”については、図4の修正履歴テーブルに存在するため、修正履歴テーブルのそれぞれの構成要素に対応して記憶されている機能区分“機能1”、“機能1”および“機能2”が、図5の暫定機能解析結果の構成要素“関数1”、“変数1”および“構造体1”に対応する機能区分にそれぞれ設定されている。一方、図3の構文解析結果の構成要素うち、“関数2”については、図4の修正履歴テーブルに存在しないため、修正履歴に存在しないことを示す区分である“新規機能”が、図5の暫定機能解析結果の構成要素“関数2”に対応する機能区分に仮設定されている。
【0024】
図6に、機能解析結果の一例を示す。図6の機能解析結果は、図5の暫定機能解析結果の構成要素“関数2”に対応する機能区分が、ユーザにより入力された“機能3”に設定変更された状態を示している。
【0025】
修正履歴登録部14は、機能解析結果に基づいて、修正履歴テーブル31に修正履歴を登録する。
【0026】
図7に、更新後の修正履歴テーブルの一例を示す。図7の修正履歴テーブルは、図6の機能解析結果に基づいて図4の修正履歴テーブルを更新した後の状態である。図7の修正履歴テーブルには、図6の機能解析結果に含まれる4組の構成要素と機能区分との組が、修正履歴テーブルの履歴番号“3”に対応するデータとして追加登録されている。
【0027】
比較結果出力部15は、修正前後のソースコードを比較した結果を示す比較結果を出力装置4に表示させる。比較結果は、機能解析結果に含まれる各項目を用いて表すことができる。比較結果に表示する項目は、機能解析結果に含まれる各項目の中からユーザが任意に指定することができる。
【0028】
図8に、比較結果の一例を示す。図8の比較結果は、機能解析結果に含まれる分割差分と機能区分とを用いて表した例である。図8の比較結果は、“機能1”に関する修正として、“差分1”と“差分2a”とが抽出され、“機能2”に関する修正として、“差分2b”が抽出され、“機能3”に関する修正として、“差分3”が抽出されたことを示している。
【0029】
図9に、ユーザが出力対象として特定の機能を指定した場合に表示される比較結果の一例を示す。図9は、ユーザが出力対象として“機能1”を指定したときに表示される比較結果である。図9の比較結果には、修正された複数の機能のうち、ユーザにより指定された“機能1”に関する比較結果のみが表示されている。ユーザは、例えばクエリ機能を利用して出力対象を任意に指定することができる。
【0030】
次に、図10および図11を参照して、修正前後のソースコードを比較する際の動作について説明する。図10は、修正前後のソースコードを比較する際の動作を説明するフローチャートであり、図11は、修正前後のソースコードを比較する際のデータの遷移状態を模式的に示す図である。
【0031】
最初に、修正前のソースコードAと修正後のソースコードBとを入力装置2から読み込む、ソースコード読込処理を実行する(ステップS101)。
【0032】
続いて、差分抽出部11は、修正前のソースコードAと修正後のソースコードBとをテキスト比較により比較して差分を抽出する、テキスト比較処理を実行する(ステップS102)。図11では、修正前のソースコードAと修正後のソースコードBとの差分として、“差分1”、“差分2”および“差分3”が抽出されている。
【0033】
続いて、構文解析部12は、上記ステップS102で抽出された差分から修正対象となった構成要素を列挙し、差分を構成要素ごとに分割して構文解析結果を生成する、構文解析処理を実行する(ステップS103)。図11では、“差分1”、“差分2”および“差分3”に含まれる構成要素として、“関数1”、“変数1”、“構造体1”および“関数2”が列挙されている。
【0034】
続いて、機能解析部13は、上記ステップS103で生成した構文解析結果に含まれる構成要素に対応する機能区分を、修正履歴テーブル31を参照して決定し、機能解析結果を生成する、機能解析処理を実行する(ステップS104)。図11では、修正履歴テーブルを参照し、修正履歴テーブルに存在する“機能1”および“機能2”が、差分から列挙された構成要素に対応する機能区分として決定されている。
【0035】
機能解析部13は、上記ステップS103で生成した構文解析結果に含まれる全ての構成要素(修正箇所)が、修正履歴テーブル31に存在するか否かを判定する(ステップS105)。この判定がYESである場合(ステップS105;YES)には、処理を後述するステップS108に移行する。
【0036】
一方、上記ステップS105の判定で構文解析結果に含まれる構成要素(修正箇所)のいずれかが修正履歴テーブル31に存在しないと判定された場合(ステップS105;NO)に、機能解析部13は、その時点の機能解析結果を暫定機能解析結果として出力装置4に表示させ(ステップS106)、“新規機能”を仮設定した機能区分に対する入力をユーザに促す。図11では、“差分3”から列挙された“関数2”に対応する機能区分への入力がユーザに促される。
【0037】
続いて、仮設定した機能区分に対する入力をユーザから受け付けた場合に、機能解析部13は、暫定機能解析結果の“新規機能”を仮設定した機能区分を、入力された機能区分に変更することで、機能解析結果を更新する(ステップS107)。図11では、“差分3”から列挙された“関数2”に対応する機能区分が“機能3”に設定変更される。
【0038】
続いて、修正履歴登録部14は、上記ステップS104で生成された機能解析結果または上記ステップS107で更新された機能解析結果に基づいて、修正履歴テーブル31に修正履歴を登録する、修正履歴登録処理を実行する(ステップS108)。図11では、修正履歴テーブルに、履歴番号“3”の修正履歴データが追加登録される。
【0039】
続いて、比較結果出力部15は、修正前後のソースコードを比較した結果を示す比較結果を出力装置4に表示させる、比較結果出力処理を実行する(ステップS109)。
【0040】
上述したように、実施形態におけるソースコード比較装置1によれば、蓄積した過去の修正履歴にもとづいて、修正箇所と機能との対応付けを行うことができるため、過去の修正実績に基づいた正確な対応付けを簡易に行うことが可能となる。
【0041】
また、修正履歴にない新規修正箇所については、その修正箇所に対応する機能を入力するようにユーザに促し、ユーザから入力された機能を登録することができるため、新規コードや新規機能を追加した場合であっても、登録漏れを確実に防止することができる。
【0042】
また、修正のたびに、修正箇所と機能とを対応付けて追加登録し、対応付け情報を蓄積していくことができるため、過去の対応付け情報を参照しながら開発することが可能となり、開発時の作業効率を向上させることができる。
【0043】
[変形例]
なお、上述した実施形態は、単なる例示に過ぎず、実施形態に明示していない種々の変形や技術の適用を排除するものではない。すなわち、本発明は、その趣旨を逸脱しない範囲で様々な形態に変形して実施することができる。
【0044】
例えば、上述した実施形態のソースコード比較装置1は、図1に示す各部を備えているが、さらに、妥当性検査部を備えることとしてもよい。妥当性検査部は、修正履歴テーブル31を参照して、機能区分ごとに、各構成要素が当該機能区分に属する構成要素として修正される割合(修正率)を算出する。妥当性検査部は、機能区分ごとに算出した各構成要素の修正率が所定の閾値以上となる構成要素が、機能解析結果の当該機能区分に対応する構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する。
【0045】
図12〜図14を参照して、妥当性検査部の機能ついて具体的に説明する。図12は、妥当性検査部が修正の妥当性を検査する際の一例を模式的に示した図である。図13は、機能区分ごとに算出する各構成要素の修正率の一例を示す図である。図14は、機能区分の構成要素単位に過去の修正率と今回の修正状況との対応関係を例示した図である。
【0046】
妥当性検査部は、図12に示す修正履歴テーブルを参照して、図13に示す機能区分ごとの各構成要素の修正率を算出する。図12の修正履歴テーブルには、履歴番号“1”と履歴番号“2”とで識別される2回分の比較結果が修正履歴として蓄積されている。“機能1”は、2回とも修正対象となっており、“機能2”は、履歴番号“1”でのみ修正対象となっている。
【0047】
“機能1”を修正したときには、“関数1”と“変数1”とが2回とも修正されているため、“関数1”および“変数1”の修正率は“100%”となり、“構造体1”は履歴番号“2”でのみ修正されているため、“構造体1”の修正率は“50%”となる(図13参照)。
【0048】
“機能2”を修正したときには、“変数1”が修正されているため、“変数1”の修正率は“100%”となり、“関数1”と“構造体1”とは修正されていないため、“関数1”および“構造体1”の修正率は“0%”となる(図13参照)。
【0049】
妥当性検査部は、図13に示す機能区分ごとの各構成要素の修正率を参照して、検査対象となる機能区分において修正率が所定の閾値以上となる構成要素が、機能解析結果の当該機能区分に対応する構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する。
【0050】
図12に示すように、修正前後のソースコードA、Bを比較すると、機能解析結果には、“差分1”として、“関数1”と“機能1”との組み合わせが設定されることになる。図13に示す“機能1”の構成要素ごとの修正率と、今回の修正状況との対応関係を表したものが図14となる。仮に修正率の閾値が90%に設定されているとすると、修正率が閾値以上となる構成要素は、“関数1”および“変数1”となる。今回の“機能1”に関する修正では、“関数1”のみが修正されているため、妥当性検査部は、“変数1”が修正漏れであると判定し、その旨をユーザに通知する。
【0051】
なお、ユーザに通知するのは、修正漏れであることには限定されない。例えば、過去の修正率が第2の閾値以下である構成要素が修正されている場合には、修正ミスであると判定し、その旨をユーザに通知することもできる。
【0052】
このような妥当性検査部を備えることで、過去の修正履歴に基づいて今回の修正の妥当性を判断することができるため、開発時の作業効率をさらに向上させることが可能となる。
【0053】
また、上述した実施形態では、修正履歴を修正履歴テーブル31に格納して保存しているが、修正履歴を保存する方法は、これに限定されない。例えば、図15に示すように、比較するソースコードに修正履歴を書き込んで保存することとしてもよい。図15は、Java(登録商標)言語のソースコードYにアノテーションとして修正履歴Xを埋め込んだ例である。ソースコードYの一部に、各機能区分に対応するアノテーションを定義する。各アノテーションは、int型の配列を持つ単一値のアノテーションとする。対応する履歴番号を設定したアノテーションを、対応する構成要素の記述箇所に挿入する。これにより、ソースコードの編集と修正履歴の参照とを、一つのソースコードで実現できるため、修正内容の確認や開発等の作業効率を向上させることが可能となる。
【0054】
また、上述した各実施形態の一部または全部は、以下の付記のようにも記載され得るが、本発明を以下のように限定するものではない。
【0055】
(付記1) 修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出部と、前記差分抽出部により抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析部と、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析部と、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力部と、を備え、前記機能解析部は、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較装置。
【0056】
(付記2) 前記機能解析部は、前記構文解析結果に含まれる前記構成要素が前記修正履歴に存在しない場合に、前記修正履歴に存在しないことを示す区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に仮設定するとともに、前記仮設定した前記機能区分に対する入力をユーザに促す、ことを特徴とする付記1記載のソースコード比較装置。
【0057】
(付記3) 前記機能解析部は、前記仮設定した前記機能区分に対する入力をユーザから受け付けた場合に、前記仮設定した前記機能区分を、入力された前記機能区分に変更することで、前記機能解析結果を更新する、ことを特徴とする付記2記載のソースコード比較装置。
【0058】
(付記4) 前記修正履歴を参照し、前記機能区分ごとに、前記構成要素が当該機能区分に属する前記構成要素として修正される割合を算出し、当該割合が所定の閾値以上となる前記構成要素が、前記機能解析結果の当該機能区分に対応する前記構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する妥当性検査部を、さらに備えることを特徴とする付記1〜3のいずれかに記載のソースコード比較装置。
【0059】
(付記5) 前記機能解析部により生成される前記機能解析結果を、前記修正履歴として記憶装置に記憶させる修正履歴記憶部を、さらに備えることを特徴とする付記1〜4のいずれかに記載のソースコード比較装置。
【0060】
(付記6) 前記機能解析部により生成される前記機能解析結果を、前記修正履歴として修正後のソースコードに組み込む修正履歴組込部を、さらに備えることを特徴とする付記1〜4のいずれかに記載のソースコード比較装置。
【0061】
(付記7) 修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出ステップと、前記差分抽出ステップにおいて抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析ステップと、前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析ステップと、前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力ステップと、を含み、前記機能解析ステップは、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較方法。
【0062】
(付記8) 付記7に記載の各ステップをコンピュータに実行させるためのソースコード比較プログラム。
【符号の説明】
【0063】
1…ソースコード比較装置
2…入力装置
3…記憶装置
4…出力装置
11…差分抽出部
12…構文解析部
13…機能解析部
14…修正履歴登録部
15…比較結果出力部
31…修正履歴テーブル
【特許請求の範囲】
【請求項1】
修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出部と、
前記差分抽出部により抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析部と、
前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析部と、
前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力部と、を備え、
前記機能解析部は、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較装置。
【請求項2】
前記機能解析部は、前記構文解析結果に含まれる前記構成要素が前記修正履歴に存在しない場合に、前記修正履歴に存在しないことを示す区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に仮設定するとともに、前記仮設定した前記機能区分に対する入力をユーザに促す、ことを特徴とする請求項1記載のソースコード比較装置。
【請求項3】
前記機能解析部は、前記仮設定した前記機能区分に対する入力をユーザから受け付けた場合に、前記仮設定した前記機能区分を、入力された前記機能区分に変更することで、前記機能解析結果を更新する、ことを特徴とする請求項2記載のソースコード比較装置。
【請求項4】
前記修正履歴を参照し、前記機能区分ごとに、前記構成要素が当該機能区分に属する前記構成要素として修正される割合を算出し、当該割合が所定の閾値以上となる前記構成要素が、前記機能解析結果の当該機能区分に対応する前記構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する妥当性検査部を、さらに備えることを特徴とする請求項1〜3のいずれか1項に記載のソースコード比較装置。
【請求項5】
前記機能解析部により生成される前記機能解析結果を、前記修正履歴として記憶装置に記憶させる修正履歴登録部を、さらに備えることを特徴とする請求項1〜4のいずれか1項に記載のソースコード比較装置。
【請求項6】
前記機能解析部により生成される前記機能解析結果を、前記修正履歴として修正後のソースコードに組み込む修正履歴組込部を、さらに備えることを特徴とする請求項1〜4のいずれか1項に記載のソースコード比較装置。
【請求項7】
修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出ステップと、
前記差分抽出ステップにおいて抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析ステップと、
前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析ステップと、
前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力ステップと、を含み、
前記機能解析ステップは、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較方法。
【請求項8】
請求項7に記載の各ステップをコンピュータに実行させるためのソースコード比較プログラム。
【請求項1】
修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出部と、
前記差分抽出部により抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析部と、
前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析部と、
前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力部と、を備え、
前記機能解析部は、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較装置。
【請求項2】
前記機能解析部は、前記構文解析結果に含まれる前記構成要素が前記修正履歴に存在しない場合に、前記修正履歴に存在しないことを示す区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に仮設定するとともに、前記仮設定した前記機能区分に対する入力をユーザに促す、ことを特徴とする請求項1記載のソースコード比較装置。
【請求項3】
前記機能解析部は、前記仮設定した前記機能区分に対する入力をユーザから受け付けた場合に、前記仮設定した前記機能区分を、入力された前記機能区分に変更することで、前記機能解析結果を更新する、ことを特徴とする請求項2記載のソースコード比較装置。
【請求項4】
前記修正履歴を参照し、前記機能区分ごとに、前記構成要素が当該機能区分に属する前記構成要素として修正される割合を算出し、当該割合が所定の閾値以上となる前記構成要素が、前記機能解析結果の当該機能区分に対応する前記構成要素として設定されていない場合に、修正が妥当ではない旨をユーザに通知する妥当性検査部を、さらに備えることを特徴とする請求項1〜3のいずれか1項に記載のソースコード比較装置。
【請求項5】
前記機能解析部により生成される前記機能解析結果を、前記修正履歴として記憶装置に記憶させる修正履歴登録部を、さらに備えることを特徴とする請求項1〜4のいずれか1項に記載のソースコード比較装置。
【請求項6】
前記機能解析部により生成される前記機能解析結果を、前記修正履歴として修正後のソースコードに組み込む修正履歴組込部を、さらに備えることを特徴とする請求項1〜4のいずれか1項に記載のソースコード比較装置。
【請求項7】
修正前のソースコードと修正後のソースコードとを比較して差分を抽出する差分抽出ステップと、
前記差分抽出ステップにおいて抽出された前記差分を、ソースコードに使用可能な構成要素ごとに分割し、当該分割した後の差分である分割差分と前記構成要素とを対応付けた構文解析結果を生成する構文解析ステップと、
前記構文解析結果に含まれる前記分割差分と前記構成要素との組に対応付けて機能区分を設定することで機能解析結果を生成する機能解析ステップと、
前記機能解析結果に含まれる前記分割差分および前記機能区分を用いて、修正前のソースコードと修正後のソースコードとの比較結果を出力する出力ステップと、を含み、
前記機能解析ステップは、前記構文解析結果に含まれる前記構成要素が、過去にソースコードを比較した結果に基づいて蓄積された修正履歴に存在する場合に、当該構成要素に対応付けて前記修正履歴に設定されている前記機能区分を、当該構成要素に対応する前記機能解析結果の前記機能区分に設定する、ことを特徴とするソースコード比較方法。
【請求項8】
請求項7に記載の各ステップをコンピュータに実行させるためのソースコード比較プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図9】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図9】
【公開番号】特開2013−65267(P2013−65267A)
【公開日】平成25年4月11日(2013.4.11)
【国際特許分類】
【出願番号】特願2011−204924(P2011−204924)
【出願日】平成23年9月20日(2011.9.20)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】
【公開日】平成25年4月11日(2013.4.11)
【国際特許分類】
【出願日】平成23年9月20日(2011.9.20)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】
[ Back to top ]