(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0014】
以下、この発明の実施の形態を添付図面に基づいて説明する。
実施の形態1.
図1に、本発明の実施の形態1に係るプログラム比較装置100の構成を示す。プログラム比較装置100は、本明細書に記載されるプログラム比較方法を実行する。プログラム比較装置100は公知のコンピュータとしての構成を含み、演算を行う演算手段10と、情報を格納する記憶手段20とを備える。演算手段10はCPU(中央処理装置)を含み、記憶手段20は半導体メモリおよびHDD(ハードディスクドライブ)等の記憶媒体を含む。
【0015】
また、とくに図示しないが、プログラム比較装置100は、入力手段、出力手段およびネットワークインタフェース等を備えてもよい。入力手段は、使用者が情報を入力するために用いる手段であり、たとえばマウスやキーボード等である。出力手段は、使用者に対して情報を出力する手段であり、たとえば液晶ディスプレイ等の表示装置およびプリンタ等の印刷装置である。
【0016】
記憶手段20は、第1ソースコード31(第1のプログラム)、第2ソースコード32(第2のプログラム)、第1抽出規則41、第2抽出規則42、第1分析結果51、第2分析結果52および判定結果60を格納することができる。また、記憶手段20は、図示しないプログラム比較プログラムを格納する。コンピュータがこのプログラム比較プログラムを実行することにより、当該コンピュータは本実施形態に係るプログラム比較装置100として機能する。すなわち、このプログラム比較プログラムは、本明細書に記載されるプログラム比較方法を、コンピュータに実行させる。
【0017】
図2に、第1ソースコード31および第2ソースコード32の例を示す。第1ソースコード31はプログラミング言語P(第1のプログラミング言語)を用いて作成され、第2ソースコード32はプログラミング言語Q(第2のプログラミング言語)を用いて作成され、これらのプログラミング言語は互いに異なるものである。第1ソースコード31および第2ソースコード32は、所定の構成を備えるコンピュータ(プログラム比較装置100を除外しない)に、それぞれ所定の機能を実現させるものである。
【0018】
第1ソースコード31および第2ソースコード32は、オブジェクトに係るアクセスを表す命令を含む。本明細書において、オブジェクトは、とくに断った場合を除き、たとえばプログラムの命令において参照される識別可能な概念であればどのようなものであってもよい。より具体的には、データであってもよく、入出力インタフェースであってもよく、所定の構成を備えるコンピュータ(プログラム比較装置100を除外しない)によって実行されるプログラム(下位プログラム)であってもよく、これら以外のオブジェクトであってもよい。
【0019】
オブジェクトの対応関係は任意に定義可能である。たとえば、同一の名称を持つオブジェクトは対応するオブジェクトである(
図2の例はこのケースに該当する)。または、たとえばオブジェクト名の変換規則を定義しておき、一方のソースコードにおけるオブジェクト名にこの変換規則を適用したものと、他方のソースコードにおけるオブジェクト名とが一致する場合には、それらのオブジェクトは対応するオブジェクトであるとしてもよい。
【0020】
データは、入力装置を介して入力されるデータであってもよく、記憶手段20に格納されるデータであってもよく、出力装置(表示装置または印刷装置等)を介して出力されるデータであってもよい。オブジェクトとなるデータの単位は任意に設計可能であり、たとえば、データベース、テーブル、レコード、カラム、セル、等である。オブジェクトとなる入出力インタフェースは、たとえばインタフェース画面または帳票であるが、これら以外のインタフェース(任意に定義されるAPI等)を含んでもよい。オブジェクトとなるプログラム(下位プログラム)は、たとえば第1ソースコード31または第2ソースコード32を親プログラムとしたときに、当該親プログラムから呼び出される子プログラム(サブルーチンまたは外部ルーチン等)であってもよい。
【0021】
なお、入出力インタフェースの表現形式は任意である。たとえば、インタフェース画面は、外見上はプログラムとして表現することも可能であり、そのインタフェース画面を表示させるためのオンラインプログラムとして表現することができる。また、たとえば、帳票は、出力され記憶手段に記憶されたデータベースとして表現することもでき、画面に表示された表として表現することもでき、表が印刷された紙媒体として表現することもできる。
【0022】
図2の第1ソースコード31は、命令文31aを含む。なお、本明細書において、「命令」または「命令文」とは、コンピュータに情報を与えるための文字列を広く含む。たとえば、プログラミング言語に定義される狭義の命令(コマンド)に限らず、そのプログラミング言語で利用可能なオブジェクト、ルーチン、データ形式等を定義するためのステートメントまたは関数等に関する記述も含む。
【0023】
命令文31aは、「画面A」、「画面B」、「帳票C」および「tableZ」という4つのオブジェクトに係るアクセスを表す命令を含む。画面Aおよび画面Bはインタフェース画面の例であり、帳票Cは帳票の例であり、tableZはデータベースのテーブルの例である。「Class」というキーワードの直後に「画面A」というオブジェクト名が記載されており、これは、命令文31aが画面Aを介したアクセスを表すということを意味する。アクセスの対象として、画面B、帳票CおよびtableZが指定されている。
【0024】
命令がデータに係るアクセスを表す場合(たとえばデータを対象とするアクセスを表す場合)には、アクセスを表す命令は、作成命令、読出命令、更新命令、または削除命令を含んでもよい。本実施形態では、作成命令、読出命令、更新命令、および削除命令のすべてが、アクセスを表す命令に該当する。命令文31aは、「select * from tableZ」という表現を含んでおり、これは、命令文31aが、tableZ(厳密にはtableZに含まれる各カラム)に対する読出命令を表すということを意味する。どのような表現がどの命令に対応するかは、プログラミング言語Pの仕様により定義される。
【0025】
以上のように、命令文31aは、画面Aを介し、tableZを対象とするアクセスを表す命令を含む。この命令は、インタフェース画面と、データ(たとえばテーブル、レコード、カラム、セル、等)とを関連付ける命令の例である。たとえば、コンピュータによって第1ソースコード31が実行されると、コンピュータは画面Aを表示し、その画面において、tableZに対する読み出し指示の入力をユーザから受け付けることができる。
【0026】
また、命令文31aは、画面Aを介し、画面Bを対象とするアクセスを表す命令を含む。この命令は、複数のインタフェース画面を関連付ける命令の例である。たとえば、コンピュータによって第1ソースコード31が実行されると、コンピュータは画面Aを表示し、その画面において、画面Bを呼び出す指示(または画面Bに遷移する指示)の入力をユーザから受け付けることができる。言い換えると、命令文31aは、画面Aから画面Bへの画面遷移命令を表すということができる。
【0027】
また、命令文31aは、画面Aを介し、帳票Cを対象とするアクセスを表す命令を含む。この命令は、インタフェース画面と帳票とを関連付ける命令の例である。たとえば、コンピュータによって第1ソースコード31が実行されると、コンピュータは画面Aを表示し、その画面において、帳票Cを呼び出す指示(または帳票Cを出力する指示)の入力をユーザから受け付けることができる。言い換えると、命令文31aは、画面Aから帳票Cを出力させるための帳票出力命令を表すということができる。なお、帳票の出力処理は任意の装置において行うことができ、表示装置によって表示してもよく、印刷装置によって印刷してもよい。
【0028】
図2の第2ソースコード32は、命令文32aおよび命令文32bを含む。命令文32aは、「画面B」および「tableX」というオブジェクト名をそれぞれ持つ2つのオブジェクトに係るアクセスを表す命令と、「画面B」および「tableY」というオブジェクト名をそれぞれ持つ2つのオブジェクトに係るアクセスを表す命令とを含む。tableXおよびtableYは、データベースのテーブルの例である。また、命令文32bは、「帳票C」および「tableZ」というオブジェクト名をそれぞれ持つ2つのオブジェクトに係るアクセスを表す命令を含む。
【0029】
命令文32aは、「insert into tableX」という表現を含んでおり、これは、命令文32aが、tableXにおける新たなレコードの作成命令を表すということを意味する。また、命令文32aは、「delete from tableY」という表現を含んでおり、これは、命令文32aが、tableYにおけるレコードの削除命令を表すということを意味する。どのような表現がどの命令に対応するかは、プログラミング言語Qの仕様により定義される。
【0030】
命令文32bは、帳票Cを介し、tableZを対象とするアクセスを表す命令を含む。この命令は、帳票と、データ(たとえばテーブル、レコード、カラム、セル、等)とを関連付ける命令の例である。たとえば、コンピュータによって第2ソースコード32が実行されると、コンピュータはtableZに含まれるデータを読み出し、読み出されたデータを帳票Cに含めて出力する。言い換えると、命令文32bは、帳票Cの内容を定義する帳票定義命令を表すということができる。なお、帳票の詳細な内容(どの位置にどのセルのデータが出力されるか等)の定義は、
図2では省略しているが、第2ソースコード32または他の定義ファイル等において任意に作成可能である。
【0031】
図2には示さないが、第1ソースコード31または第2ソースコード32は、下位プログラムに係るアクセスを表す命令を含んでもよい。そのような命令は、コンピュータに当該下位プログラムを実行させる命令であってもよい。すなわち、コンピュータは、その命令を実行することにより、下位プログラムを呼び出し、下位プログラムの実行を開始する。
【0032】
以上のように、オブジェクトに係るアクセスを表す命令は、単一のオブジェクトのみに係るものであってもよいし、複数のオブジェクトに係るもの(たとえば複数のオブジェクトを互いに関連付けるもの)であってもよい。たとえば、オブジェクトがインタフェース画面を含む場合には、アクセスを表す命令は、そのインタフェース画面と、他のオブジェクト(別のインタフェース画面であってもよいし、インタフェース画面以外のオブジェクトであってもよい)とを関連付ける命令を含んでもよい。また、たとえば、オブジェクトが帳票を含む場合には、アクセスを表す命令は、その帳票と、他のオブジェクト(帳票であってもよいし、帳票以外のオブジェクトであってもよい)とを関連付ける命令を含んでもよい。
【0033】
図3は、第1ソースコード31における、オブジェクトに係るアクセスを表す命令に関する情報の一部をまとめた表である。
第1ソースコード31は、次のオブジェクト名をそれぞれ持つオブジェクトに係るアクセスを表す命令を含む。
‐画面A(インタフェース画面)
‐画面B(インタフェース画面)
‐帳票C(帳票)
‐tableZ(データ)
【0034】
とくに、データに対するアクセスを表す命令は、次のものを含む。
‐tableZを対象とする読出命令
なお、この例では、tableZを対象とする命令は読出命令のみであるが、仮に第1ソースコード31がさらにtableZを対象とする作成命令も含んでいる場合には、
図3にはtableZに対する読出命令および作成命令の双方が含まれることになる。
【0035】
第1ソースコード31における、インタフェース画面とデータとを関連付ける命令は、次のものを含む。
‐画面Aを介し、tableZを対象とする読出命令
第1ソースコード31は、帳票とデータとを関連付ける命令を含まない。
【0036】
第1ソースコード31における、インタフェース画面と帳票とを関連付ける命令は、次のものを含む。
‐画面Aから帳票Cを出力させる帳票出力命令
【0037】
第1ソースコード31における、インタフェース画面とインタフェース画面とを関連付ける命令は、次のものを含む。
‐画面Aから画面Bへの画面遷移命令
なお、インタフェース画面間の関係は、本実施形態のように方向性を持つものであってもよい。すなわち、この例では、画面Aから画面Bへの遷移は定義されているが、逆方向(画面Bから画面A)の遷移は定義されていない。
【0038】
第1ソースコード31は、下位プログラム(「プログラムI」「プログラムII」「プログラムIII」等)に係るアクセスを表す命令を含まない。
【0039】
図4は、第2ソースコード32における、オブジェクトに係るアクセスを表す命令に関する情報の一部をまとめた表である。
【0040】
第2ソースコード32は、次のオブジェクト名をそれぞれ持つオブジェクトに係るアクセスを表す命令を含む。
‐画面B(インタフェース画面)
‐帳票C(帳票)
‐tableX(データ)
‐tableY(データ)
‐tableZ(データ)
とくに、データに対するアクセスを表す命令は、次のものを含む。
‐tableXを対象とする作成命令
‐tableYを対象とする削除命令
‐tableZを対象とする読出命令
【0041】
第2ソースコード32における、インタフェース画面とデータとを関連付ける命令は、次のものを含む。
‐画面Bを介し、tableXを対象とする作成命令
‐画面Bを介し、tableYを対象とする削除命令
第2ソースコード32における、帳票とデータとを関連付ける命令は、次のものを含む。
‐帳票Cを介し、tableZを対象とする読出命令
【0042】
第2ソースコード32は、インタフェース画面と帳票とを関連付ける命令を含まない。
第2ソースコード32は、インタフェース画面とインタフェース画面とを関連付ける命令を含まない。
第2ソースコード32は、下位プログラムに係るアクセスを表す命令を含まない。
【0043】
なお、データに対するアクセスを表す情報は、いわゆるCRUD表の形式で作成してもよい。CRUD表とは、たとえばデータの作成を「C」で、データの読み出しを「R」で、データの更新を「U」で、データの削除を「D」で、それぞれ表すものである。
【0044】
以上のように構成されるプログラム比較装置100の動作を、以下に説明する。
図5は、プログラム比較装置100の処理の流れを示すフローチャートである。このフローチャートは、実施の形態1に係るプログラム比較方法を表す。
【0045】
まずプログラム比較装置100は、第1ソースコード31から、オブジェクトに係るアクセスを表す命令を取得する(ステップS1)。この処理は、たとえば第1抽出規則41に基づいて行うことができる。第1抽出規則41は、プログラミング言語Pの文法等に基づいて作成される規則であり、任意に定義可能である。
【0046】
たとえば、第1ソースコード31では、Classというキーワードの直後に出現する「画面A」という文字列がオブジェクトの名称(オブジェクト名)を表し、その後に「:」を挟んで出現する文字列がそのオブジェクトの種類を表す(この例では「DSP」がインタフェース画面を表す)。
【0047】
また、selectというキーワードがデータに対する読出命令を表し、これよりその後に「from」命令の対象となる「tableZ」がデータ(この場合はテーブルまたはそのテーブル内の各カラム)の名称を表す。
【0048】
また、「.display」というキーワードは画面遷移を表し、その直前の文字列「画面B」が遷移先となるインタフェース画面の名称を表す。
【0049】
また、「.print」というキーワードは帳票の出力を表し、その直前の文字列「帳票C」が出力される帳票の名称を表す。
【0050】
なお、
図2の例では、第1ソースコード31は単一の命令(命令文31a)しか含まないが、Classというキーワードが新たに出現した場合には、命令文31aはその直前で終了し、当該キーワード以降が新たな命令文となる。
以上のような規則の定義方法、表現形式、等は、当業者が任意に設計可能である。
【0051】
抽出結果は、たとえば第1分析結果51として出力される。第1分析結果51は、たとえば
図3に示す内容を含むデータベースである。
【0052】
次に、プログラム比較装置100は、第2ソースコード32から、オブジェクトに係るアクセスを表す命令を取得する(ステップS2)。この処理は、たとえば第2抽出規則42に基づいて行うことができる。第2抽出規則42は、プログラミング言語Qの文法等に基づいて作成される規則であり、第1抽出規則41と同様に任意に定義可能である。なお、このステップS2は、ステップS1と同時またはこれより前に実行されてもよい。
【0053】
抽出結果は、たとえば第2分析結果52として出力される。第1分析結果52は、たとえば
図3に示す内容を含むデータベースである。
【0054】
ここで、第1抽出規則41と第2抽出規則42とを分離し、それぞれのプログラミング言語に合わせて作成することにより、異なる命令または異なる文法によるプログラミング言語から、プログラミング言語に依存しない
図3および
図4のような形式の情報を抽出することができる。
【0055】
次に、プログラム比較装置100は、取得された命令の対応関係を判定する(ステップS3)。すなわち、第1ソースコード31から取得された命令と、第2ソースコード32から取得された命令とが、対応しているか否かを判定する。対応関係は、たとえば第1分析結果51および第2分析結果52に基づいて判定することができる。
【0056】
判定の単位は、オブジェクトであってもよく、オブジェクトに対するアクセスの種類(作成・読出・更新・削除)であってもよく、これらを組み合わせた組であってもよい。
【0057】
たとえば、いずれかのデータについて、第1ソースコード31はそのデータに係る読出命令を含むが、第2ソースコード32はそのデータに係る読出命令を含まない場合(またはその逆)には、そのデータに係る読出命令について、第1ソースコード31から取得された命令と、第2ソースコード32から取得された命令とは対応していないと判定される。
【0058】
また、たとえば、いずれかの画面インタフェースについて、第1ソースコード31はその画面インタフェースに係る命令を含むが、第2ソースコード32はその画面インタフェースに係る命令を含まない場合(またはその逆)には、その画面インタフェースについて、第1ソースコード31から取得された命令と、第2ソースコード32から取得された命令とは対応していないと判定される。
【0059】
または、たとえば、画面インタフェースとデータとの組について、第1ソースコード31はその画面インタフェースを介したそのデータに対する作成命令を含むが、第2ソースコード32はその画面インタフェースを介したそのデータに対する作成命令を含まない場合(またはその逆)には、その組について、第1ソースコード31から取得された命令と、第2ソースコード32から取得された命令とは対応していないと判定される。
【0060】
図3および
図4の例では、たとえば次のようにして判定が行われる。
アクセスに係るオブジェクトの名称として、第1ソースコード31は画面Aを含むが、第2ソースコード32は画面Aを含まない。このため、プログラム比較装置100は、この点において、第1ソースコード31と第2ソースコード32との間で命令が対応していないと判定する。
【0061】
一方、アクセスに係るオブジェクトの名称として、第1ソースコード31および第2ソースコード32は、いずれも画面Bおよび帳票Cを含む。このため、プログラム比較装置100は、この点において、第1ソースコード31と第2ソースコード32との間で命令が対応していると判定する。
【0062】
また、アクセスに係るオブジェクトの名称として、第1ソースコード31はtableXおよびtableYを含むが、第2ソースコード32はtableXもtableYも含まない。このため、プログラム比較装置100は、この点において、第1ソースコード31と第2ソースコード32との間で命令が対応していないと判定する。
【0063】
また、アクセスに係るオブジェクトの名称として、第1ソースコード31および第2ソースコード32は、いずれもtableZを含む。このため、プログラム比較装置100は、この点において、第1ソースコード31と第2ソースコード32との間で命令が対応していると判定する。さらに、tableZに対するアクセスの種類はいずれも「読出」である。このため、プログラム比較装置100は、この点において、第1ソースコード31と第2ソースコード32との間で命令が対応していると判定する。
【0064】
なお、仮に、第1ソースコード31におけるtableZに対するアクセスの種類が「読出」のみであり、第2ソースコード32におけるtableZに対するアクセスの種類が「作成および読出」であった場合には、プログラム比較装置100は、第1ソースコード31と第2ソースコード32との間で命令が対応していないと判定してもよい。
【0065】
次に、プログラム比較装置100は、判定結果60を出力する(ステップS4)。判定結果60の形式は任意に設計可能であるが、たとえば、
図3および
図4に示す各表をすべて出力した上で、各セルについて、第1ソースコード31と第2ソースコード32とで命令が対応するか否かを示してもよい(たとえば、対応しているセルについては白または黒で、対応していないセルについては赤色で、表示してもよい)。または、判定結果60は、対応していないセルに関する情報のみを含み、対応しているセルについては省略してもよい。
【0066】
図6に、判定結果60の例を示す。この例は、たとえばディスプレイ装置等の出力装置において表示される表示例である。
図6の例は、
図2に対応するものではなく、図示しない第3のソースコードと第4のソースコードとを比較した場合の例である。第3のソースコードが現行システムのソースコードであり、第4のソースコードはこれに対応すると考えられる新システムのソースコードである。
【0067】
図6において、画面Dを介したtableαに対するアクセスについて、第3のソースコートと第4のソースコードとの間で差異があり、すなわち命令が対応していないと判定されている。命令が対応していないと判定されたことに応じ、当該判定単位(インタフェース画面とデータとの組)については「差異あり」と表示され、また行全体が着色されている。画面Dを介したtableβに対するアクセスについても、同様に、命令が対応していないと判定されている。これら以外のアクセスについては、命令が対応していると判定されている。
【0068】
図6のような出力を得た管理者は、命令が対応していない部分に着目し、新システムのソースコードに誤りがあることを比較的容易に発見することができる。たとえば、第4のソースコードでは、本来「画面Dを介し、table『α』に対する削除命令」としなければならない命令を、誤って「画面Dを介し、table『β』に対する削除命令」としてしまったのではないかと推測することができる。
【0069】
以上説明するように、本発明の実施の形態1に係るプログラム比較装置100によれば、オブジェクトに係るアクセスを表す命令に着目して対応関係を判定するので、プログラミング言語が同一であるかどうかに関わらず、プログラムを比較することができる。
【0070】
とくに、データについては、命令の種類(作成・読出・更新・削除)ごとに判定することができるので、たとえばCRUD表に基づく比較が可能となり、より厳密な比較を行うことができる。
【0071】
また、複数のオブジェクト間の関連について判定することができるので、より厳密な比較を行うことができる。たとえば、各画面からアクセス可能な個別データ、各画面から遷移可能な他の画面、各画面から印刷可能な帳票、各帳票に含まれる個別データ、等を具体的に比較することが可能である。
【0072】
とくに、現行システムを新システムに移行させるリライト開発において有用である。たとえば、旧世代のプログラム言語で記述された現行システムのソースコードを、新世代のプログラム言語に書き換える作業が、適切に行われたかどうかを比較的容易に判定することができる。
【0073】
また、オブジェクトに着目して対応関係を判定するので、プログラミング言語に特有の文法構造等が異なっていても適切な判定が可能である。たとえば分岐命令の構文が異なる場合には、分岐条件の部分を無視してもよい(実施の形態1において、第2ソースコード32の命令文32aがこのようなケースに相当する)。
【0074】
上述の実施の形態1では、オブジェクトがデータである場合に、命令の対応関係の判定はテーブルを単位として行われる。たとえば、tableZに対する読出命令が、カラムの読出命令であるかレコードの読出命令であるかは判定結果に影響を与えない。変形例として、テーブル以外の単位に基づいて判定を行ってもよい。たとえば、
図3の例では、アクセスに係るオブジェクトとして、「tableZ」全体に代えて、またはこれに加えて、「tableZに含まれるカラム」を単位としてもよい。
【0075】
実施の形態1では、第1ソースコード31および第2ソースコード32はいずれもソースコードであるが、プログラムの形式はソースコードに限らず、オブジェクトに係るアクセスを表す命令を抽出できる形式のものであればよい。たとえば、中間コードやモジュール等であってもよい。
【0076】
実施の形態1では、第1ソースコード31と第2ソースコード32とはそれぞれ異なるプログラミング言語によって記述されるが、これらは同一のプログラミング言語によって記述されていてもよい。その場合には、第1抽出規則41および第2抽出規則42はいずれか一方に集約可能である。
【解決手段】プログラム比較装置100は、第1ソースコード31から、オブジェクトに係るアクセスを表す命令を取得し、第2ソースコード32から、オブジェクトに係るアクセスを表す命令を取得する。プログラム比較装置100は、第1ソースコード31から取得された命令と、第2ソースコード32から取得された命令とが対応しているか否かを判定する。