図1および図2を用いて、この発明の利用例を概略的に示す。なお、図1および図2は、本発明に係るシステム等の具体的な構成、作用、効果等を示すものではなく、図3〜図27を用いて説明する本発明の理解を容易にする準備としてのみ示すものであり、本発明の権利範囲を規定するものではない。
図1に示すように、現システムから新システムに移行するに際し、新システムのための新ソースコードが開発され、新モジュールが生成される。テスト作業において、現モジュールの実行結果と、新モジュールの実行結果とがそれぞれ生成される。実行結果は、画面の表示内容を表すPDFデータ、帳票を表すPDFデータ、データベース(テーブル)を表すCSVデータ、等である。新ソースコードが正しく現ソースコードと同一の内容をもって記述されていれば、これらの実行結果は一致するはずである。
プログラム比較システムは、実行結果からテキストデータを抽出し、テキストファイルを作成する。たとえばPDFデータからテキストデータに該当する情報を抽出する。そして、これらのテキストファイルを比較して差異を抽出する。
一方で、プログラム比較システムは、新ソースコードから呼び出し関係を生成する。
図2に、呼び出し関係の概念図を示す。画面は、1以上のプログラムで利用される。帳票は、1以上のプログラムで利用される。プログラムは、0以上のデータベースを利用する。画面を利用しないプログラムもあり、いわゆるバッチプログラムは画面を利用しない場合がある。帳票を利用しないプログラムもあり、いわゆる共通プログラムは帳票を利用しない場合がある。
画面と帳票とは、呼び出し関係がある。たとえば画面は0以上の帳票を出力し、帳票は1以上の画面から出力される。画面とデータベースとは、呼び出し関係がある。たとえば画面はデータベースを利用する。利用の種類は、たとえば、読出(Read)、作成(Create)、更新(Update)、削除(Delete)のいずれかである。
帳票とデータベースとは、呼び出し関係がある。たとえば、帳票はデータベースからデータを入力する。この場合は読出(Read)に相当する。また、プログラム間には、呼び出し関係がある。たとえば、親プログラム(上位プログラム)は、子プログラム(下位プログラム)を利用する。
プログラム比較システムは、このようにして抽出されたテキストファイルの差異と、呼び出し関係とを表示する。ユーザ(たとえば新システムの開発者等)は、まず差異があるかどうかを確認し、差異がある場合には、差異の原因がどの新ソースコードにあるのかを特定する必要がある。この差異の原因を特定する作業は、表示された呼び出し関係を参照して効率的に行うことが可能である。
以下、この発明の実施の形態を、図3〜図27に基づいて説明する。
実施の形態1.
図3に、本発明の実施の形態1に係るプログラム比較装置100の構成を示す。プログラム比較装置100は、本明細書に記載されるプログラム比較方法を実行する。プログラム比較装置100は公知のコンピュータとしての構成を含み、演算を行う演算手段10と、情報を格納する記憶手段20とを備える。演算手段10はCPU(中央処理装置)を含み、記憶手段20は半導体メモリおよびHDD(ハードディスクドライブ)等の記憶媒体を含む。
また、とくに図示しないが、プログラム比較装置100は、入力手段、出力手段およびネットワークインタフェース等を備えてもよい。入力手段は、使用者が情報を入力するために用いる手段であり、たとえばマウスやキーボード等である。出力手段は、使用者に対して情報を出力する手段であり、たとえば液晶ディスプレイ等の表示装置およびプリンタ等の印刷装置である。
記憶手段20は、現出力内容21、新出力内容22、現テキスト23、新テキスト24、差異データ25、新プログラム26およびオブジェクト名データ27を格納することができる。また、記憶手段20は、図示しないプログラム比較プログラムを格納する。コンピュータがこのプログラム比較プログラムを実行することにより、当該コンピュータは本実施形態に係るプログラム比較装置100として機能する。すなわち、このプログラム比較プログラムは、本明細書に記載されるプログラム比較方法を、コンピュータに実行させる。
現出力内容21は、第1のプログラムの出力結果を表すデータである。たとえば現在稼働中のシステム(現行システム)のプログラム(現プログラム)をこの第1のプログラムとすることができる。また、新出力内容22は、第2のプログラムの出力結果を表すデータである。たとえば開発途中のシステム(新システム)のプログラム(新プログラム)をこの第2のプログラムとすることができる。本実施形態では、第2のプログラムは新プログラム26である。この第1のプログラムおよび第2のプログラムは、所定の構成を備えるコンピュータ(プログラム比較装置100を除外しない)に、それぞれ所定の機能を実現させるものである。
第1のプログラムおよび第2のプログラムは、たとえば各システム内で同一または対応する処理を実施するプログラムとすることができる。なお、第1のプログラムおよび第2のプログラムは、たとえば互いに異なるプログラミング言語で記述されているものであるが、同一のプログラミング言語で記述されたものであってもよい。
現出力内容21および新出力内容22は、いずれも、ディスプレイに表示された画面の内容であってもよく、帳票として出力された内容であってもよく、データベースの内容であってもよい。ディスプレイに表示された内容および帳票として出力された内容は、たとえばPDF形式で表現することができるが、他の形式で表現されてもよい。
図4および図5に、それぞれ現出力内容21および新出力内容22の構成の例を示す。これらは画面の例であり、たとえば上述のようにPDF形式で記憶手段20に格納される。図4の画面と図5の画面とを比較すると、フォントや罫線の態様が異なるが、表示されるテキストの内容(各文字に対応するキャラクタコード等)はほぼ同一である。ただし、テキストの内容について、画面右上の日付表示形式において、図4では「2017年2月2日」となっているが、図5では「2017/2/2」となっている点のみが相違する。
図3の現テキスト23は、第1のプログラムの出力内容を表すテキストデータ(第1のテキストデータ)である。現テキスト23は、たとえば現出力内容21に含まれるテキストデータを抽出することによって作成可能である。同様に、新テキスト24は、第2のプログラムの出力内容を表すテキストデータ(第2のテキストデータ)であり、たとえば新出力内容22に含まれるテキストデータを抽出することによって作成可能である。
現テキスト23および新テキスト24は、たとえばCSV形式のテキストデータとして表現することができるが、他の形式によってもよい。図3の例では、現テキスト23は「TEST01−現.csv」というファイル名を持つCSV形式のファイルとして構成され、新テキスト24は「TEST01−新.csv」というファイル名を持つCSV形式のファイルとして構成されている。
現出力内容21および新出力内容22が画面の内容を表す場合には、現テキスト23および新テキスト24は、たとえば出力された画面の表示内容に含まれるテキストデータとなる。現出力内容21および新出力内容22が帳票を表す場合には、現テキスト23および新テキスト24は、たとえば出力された帳票に含まれるテキストデータとなる。現出力内容21および新出力内容22がデータベースの内容を表す場合には、現テキスト23および新テキスト24は、たとえば出力されたデータベースに含まれるテキストデータとなる。
図6および図7に、それぞれ現テキスト23および新テキスト24の構成の例を示す。これらはたとえば上述のようにCSV形式で記憶手段20に格納される。図6のテキストデータと図7のテキストデータとを比較すると、内容はほぼ同一であるが、冒頭の日付表示形式のみ図4および図5と同様に相違している。
図3の差異データ25は、現テキスト23と新テキスト24との差異を表すデータである。記憶手段20上での具体的な構成例はとくに示さないが、たとえば現テキスト23と新テキスト24との間に差異があるか否かを示すデータと、差異が1つ以上ある場合には各差異の位置を示すデータとを含んでもよい。また、各テキストデータのうち差異に対応する部分の内容を含んでもよい。
図3の新プログラム26は、上述のように第2のプログラムまたはこれと実質的に同等のプログラムである。すなわち、新プログラム26を実行した結果として新出力内容22が出力される。新プログラム26はたとえばソースコードであるが、他の形式であってもよい。
図8に、新プログラム26の構成の例を示す。図8(a)と図8(b)とはそれぞれ異なる新プログラム26の例である。これらの例では、新プログラム26はソースコードの形式で表される。
図3のオブジェクト名データ27は、新プログラム26に関連してアクセスされるオブジェクトの名称を表すデータである。本明細書において、オブジェクトとは、とくに断った場合を除き、たとえばプログラムの命令において参照される任意の識別可能な概念を表す。より具体的には、データであってもよく、入出力インタフェースであってもよく、所定の構成を備えるコンピュータ(プログラム比較装置100を除外しない)によって実行されるプログラムであってもよく、これら以外のオブジェクトであってもよい。
オブジェクトとなるデータは、入力装置を介して入力されるデータであってもよく、記憶手段に格納されるデータであってもよく、出力装置(表示装置または印刷装置等)を介して出力されるデータであってもよい。オブジェクトとなるデータの単位は任意に設計可能であり、たとえば、データベース、テーブル、レコード、カラム、セル、等である。
オブジェクトとなる入出力インタフェースは、たとえば、新プログラム26が実行されることによって出力される画面または帳票である。これら以外のインタフェース(任意に定義されるAPI等)を含んでもよい。なお、入出力インタフェースの表現形式は任意である。たとえば、画面は、外見上はプログラムとして表現することも可能であり、その画面を表示させるためのオンラインプログラムとして表現することができる。また、たとえば、帳票は、出力され記憶手段に記憶されたデータベースとして表現することもでき、画面に表示された表として表現することもでき、表が印刷された紙媒体として表現することもできる。
オブジェクトとなるプログラムは、たとえば新プログラム26を呼び出すために実行されるプログラム(新プログラム26に対する上位プログラム)であってもよい。言い換えると、この上位プログラムがコンピュータによって実行されると、新プログラム26(または新プログラム26に対応するモジュール)が呼び出される場合がある。また、オブジェクトとなるプログラムは、たとえば新プログラム26から呼び出されるサブルーチンまたは外部ルーチン等(新プログラム26に対する下位プログラム)であってもよい。言い換えると、新プログラム26(または新プログラム26に対応するモジュール)がコンピュータによって実行されると、この下位プログラムが呼び出される場合がある。
オブジェクトとなるプログラムは、直接の上位プログラムまたは下位プログラム以外のプログラムを含んでもよい。たとえば新プログラム26の上位プログラムを呼び出すための、さらに上位のプログラムを階層的に含んでもよく、下位プログラムによって呼び出されるさらに下位のプログラムを階層的に含んでもよい。また、新プログラム26に対して絶対的には上位・下位の関係を定義できないプログラムを含んでもよい。たとえば、新プログラム26の上位プログラムによって呼び出される、新プログラム26以外のプログラムを含んでもよい。このような呼び出し関係をツリー形式で表現した場合に、新プログラム26と同一のツリーに含まれるプログラムをすべて含んでもよい。
図8(a)のソースコードは、命令文26aを含む。なお、本明細書において、「命令」または「命令文」とは、コンピュータに情報を与えるための文字列を広く含む。たとえば、プログラミング言語に定義される狭義の命令(コマンド)に限らず、そのプログラミング言語で利用可能なオブジェクト、ルーチン、データ形式等を定義するためのステートメントまたは関数等に関する記述も含む。
命令文26aは、「画面A」、「画面B」、「帳票C」および「tableZ」という4つのオブジェクトに係るアクセスを表す命令を含む。画面Aおよび画面Bは画面の例であり、帳票Cは帳票の例であり、tableZはデータベースのテーブルの例である。「Class」というキーワードの直後に「画面A」というオブジェクト名が記載されており、これは、命令文26aが画面Aを介したアクセスを表すということを意味する。アクセスの対象として、画面B、帳票CおよびtableZが指定されている。
命令がデータに係るアクセスを表す場合(たとえばデータを対象とするアクセスを表す場合)には、アクセスを表す命令は、作成命令、読出命令、更新命令、または削除命令を含んでもよい。本実施形態では、作成命令、読出命令、更新命令、および削除命令のすべてが、アクセスを表す命令に該当する。命令文26aは、「select * from tableZ」という表現を含んでおり、これは、命令文26aが、tableZ(厳密にはtableZに含まれる各カラム)に対する読出命令を表すということを意味する。どのような表現がどの命令に対応するかは、プログラミング言語の仕様により定義される。
以上のように、命令文26aは、画面Aを介し、tableZを対象とするアクセスを表す命令を含む。この命令は、画面と、データ(たとえばテーブル、レコード、カラム、セル、等)とを関連付ける命令の例である。たとえば、コンピュータによって新プログラム26が実行されると、コンピュータは画面Aを表示し、その画面において、tableZに対する読み出し指示の入力をユーザから受け付けることができる。
また、命令文26aは、画面Aを介し、画面Bを対象とするアクセスを表す命令を含む。この命令は、複数の画面を関連付ける命令の例である。たとえば、コンピュータによって新プログラム26が実行されると、コンピュータは画面Aを表示し、その画面において、画面Bを呼び出す指示(または画面Bに遷移する指示)の入力をユーザから受け付けることができる。言い換えると、命令文26aは、画面Aから画面Bへの画面遷移命令を表すということができる。
また、命令文26aは、画面Aを介し、帳票Cを対象とするアクセスを表す命令を含む。この命令は、画面と帳票とを関連付ける命令の例である。たとえば、コンピュータによって新プログラム26が実行されると、コンピュータは画面Aを表示し、その画面において、帳票Cを呼び出す指示(または帳票Cを出力する指示)の入力をユーザから受け付けることができる。言い換えると、命令文26aは、画面Aから帳票Cを出力させるための帳票出力命令を表すということができる。なお、帳票の出力処理は任意の装置において行うことができ、表示装置によって表示してもよく、印刷装置によって印刷してもよい。
図8(b)の新プログラム26は、命令文26bおよび命令文26cを含む。命令文26bは、「画面B」および「tableX」という2つのオブジェクトに係るアクセスを表す命令と、「画面B」および「tableY」という2つのオブジェクトに係るアクセスを表す命令とを含む。tableXおよびtableYは、データベースのテーブルの例である。また、命令文26cは、「帳票C」および「tableZ」という2つのオブジェクトに係るアクセスを表す命令を含む。
命令文26bは、「insert into tableX」という表現を含んでおり、これは、命令文26bが、tableXにおける新たなレコードの作成命令を表すということを意味する。また、命令文26bは、「delete from tableY」という表現を含んでおり、これは、命令文26bが、tableYにおけるレコードの削除命令を表すということを意味する。
命令文26cは、帳票Cを介し、tableZを対象とするアクセスを表す命令を含む。この命令は、帳票と、データ(たとえばテーブル、レコード、カラム、セル、等)とを関連付ける命令の例である。たとえば、コンピュータによって新プログラム26が実行されると、コンピュータはtableZに含まれるデータを読み出し、読み出されたデータを帳票Cに含めて出力する。言い換えると、命令文26cは、帳票Cの内容を定義する帳票定義命令を表すということができる。なお、帳票の詳細な内容(どの位置にどのセルのデータが出力されるか等)の定義は、図8(b)では省略しているが、新プログラム26または他の定義ファイル等において任意に作成可能である。
図8には示さないが、新プログラム26は、下位プログラムに係るアクセスを表す命令を含んでもよい。そのような命令は、コンピュータに当該下位プログラムを実行させる命令であってもよい。すなわち、コンピュータは、その命令を実行することにより、下位プログラムを呼び出し、下位プログラムの実行を開始する。
以上のように、オブジェクトに係るアクセスを表す命令は、単一のオブジェクトのみに係るものであってもよいし、複数のオブジェクトに係るもの(たとえば複数のオブジェクトを互いに関連付けるもの)であってもよい。たとえば、オブジェクトが画面を含む場合には、アクセスを表す命令は、その画面と、他のオブジェクト(別の画面であってもよいし、画面以外のオブジェクトであってもよい)とを関連付ける命令を含んでもよい。また、たとえば、オブジェクトが帳票を含む場合には、アクセスを表す命令は、その帳票と、他のオブジェクト(帳票であってもよいし、帳票以外のオブジェクトであってもよい)とを関連付ける命令を含んでもよい。
以上のように構成されるプログラム比較装置100の動作を、以下に説明する。
図9および図10は、プログラム比較装置100の処理の流れを示すフローチャートである。とくに、図9はオブジェクト名データ27を作成する処理に係るものであり、図10は差異を抽出する処理に係るものである。
図9の処理において、プログラム比較装置100は、新プログラム26に基づき、新プログラム26に関連してアクセスされるオブジェクトの名称を取得する(ステップS11)。新プログラム26が、オブジェクトに係るアクセスを表す命令を含んでいる場合には、オブジェクトの名称はその命令に関連して取得することができる。結果は、たとえばオブジェクト名データ27として出力される。
たとえばこの処理は、特定の抽出規則に基づいて行うことができる。この抽出規則は、新プログラム26のプログラミング言語の文法等に基づいて作成される規則であり、任意に定義可能である。
たとえば、図8(a)の例では、Classというキーワードの直後に出現する「画面A」という文字列がオブジェクトの名称を表し、その後に「:」を挟んで出現する文字列がそのオブジェクトの種類を表す(この例では「DSP」が画面を表す)。
また、selectというキーワードがデータに対する読出命令を表し、これよりその後に「from」命令の対象となる「tableZ」がデータ(この場合はテーブルまたはそのテーブル内の各カラム)の名称を表す。
また、「.display」というキーワードは画面遷移を表し、その直前の文字列「画面B」が遷移先となる画面の名称を表す。
また、「.print」というキーワードは帳票の出力を表し、その直前の文字列「帳票C」が出力される帳票の名称を表す。
なお、図8(a)の例では、新プログラム26は単一の命令(命令文26a)しか含まないが、Classというキーワードが新たに出現した場合には、命令文26aはその直前で終了し、当該キーワード以降が新たな命令文となる。
以上のような抽出規則の定義方法、表現形式、等は、当業者が任意に設計可能である。図8(b)についても、同様の抽出規則を設計可能である。
図10の処理において、まずプログラム比較装置100は、現出力内容21および新出力内容22を取得する(ステップS21)。次に、プログラム比較装置100は、現出力内容21に基づいて現テキスト23を取得するとともに、新出力内容22に基づいて新テキスト24を取得する(ステップS22)。ステップS22の具体的な処理内容は適宜設計可能であり、たとえばPDF形式のファイルからテキストデータを抽出するための公知のプログラムと同様に構成することができる。
次に、プログラム比較装置100は、現テキスト23および新テキスト24に基づき、これらの差異を、差異データ25として抽出する(ステップS23、差異抽出ステップ)。差異を抽出する処理の具体的内容は任意に設計可能である。たとえば現テキスト23および新テキスト24を行単位で比較し、行ごとに差異があるか否かを判定してもよい。また、行の追加および削除を検出する処理を判定に用いてもよい。
なお、テキストデータが互いに厳密に一致しない場合であっても、所定の基準に合致していれば差異がないものと判定してもよい。たとえば、空白文字の有無のみ相違する場合や、空白文字のキャラクタコードのみ相違する場合等には、差異がないものと判定するよう設計することも可能である。さらに、キャラクラコードについて特定の除外コードを定義し、除外コードに該当する文字については差異がないものと判定するよう設計してもよい。
次に、プログラム比較装置100は、ステップS23の結果を出力する(ステップS24)。結果はたとえばプログラム比較装置100の表示装置に表示される。
図11に、ステップS24において表示される内容の例を示す。この例は、5つの現テキスト23および5つの新テキスト24からなる5組の比較対について、それぞれの差異抽出の結果を示すものである。
図11の例において、「比較元」の列には現テキスト23のファイル名が表示され、「比較先」の列には新テキスト24のファイル名が表示される。「結果」の列には差異の有無が表示され、これがステップS23の結果に対応する。
「詳細」の列には、差異の詳細内容を表示させるための差異表示命令手段(たとえばボタンの画像またはハイパーリンク等)が表示される。なお、図11の例では、差異が存在しない場合にはこの操作手段は表示されない。また、差異が存在するか否かに関わらず、「詳細」の列および差異表示命令手段を表示しないように構成してもよい。
「呼び出し関係」の列には、新プログラム26に関連してアクセスされるオブジェクトを表示させるためのオブジェクト表示命令手段(たとえばボタンの画像またはハイパーリンク等)が表示される。図11の例では、オブジェクト表示命令手段は、プログラムに対応するものと、帳票に対応するものと、データ(データベース)に対応するものとの3種類が表示されている。
次に、プログラム比較装置100は、新プログラム26に関連してアクセスされるオブジェクトの名称を出力する(ステップS25)。オブジェクトの名称はたとえばオブジェクト名データ27に含まれるものである。なお、このステップS25の前に、図9のステップS11が終了している必要がある。
ステップS25は、たとえば図11の画面において、「呼び出し関係」列に表示されるオブジェクト表示命令手段のいずれかが操作されることに応じて実行される。出力はたとえばプログラム比較装置100の表示装置または印刷装置を介して行われる。出力内容の構成は任意に設計可能であるが、図12〜図15に例を示す。
図12の例は、図11においてプログラムに対応するオブジェクト表示命令手段が操作された場合に出力される内容の例である。このような出力は、たとえばプログラム比較装置100の表示装置において行われる。
図12の例では、新プログラム26に関連してアクセスされるオブジェクトの名称として、新プログラム26が実行されることによって呼び出される下位プログラムの名称が出力されている。この例では、新プログラム26に相当するプログラム名が枠による装飾を用いて表示され、新プログラム26の下位プログラムの名称として「下位プログラム1」および「下位プログラム2」の2つが表示されている。
このような下位プログラムの名称は、新プログラム26を参照して取得することができる。下位プログラムを呼び出すための命令の具体例は、図8には示されないが、新プログラム26のプログラミング言語の仕様に基づいて決まっており、当該仕様に沿った抽出規則を用いてプログラム比較装置100が抽出することが可能である。なお、図12には新プログラム26の名称が「画面TEST01」として表示されているが、この名称は省略してもよいし、この例のように表示する場合には新プログラム26または事前に定義される他の情報を参照して取得可能である。
ここで、現出力内容21と、新プログラム26に係る新出力内容22とで差異がある場合には、新プログラム26から呼び出される下位プログラムに差異の原因が存在する可能性がある。そのような場合には、プログラム比較装置100のユーザは図12のような表示によって新プログラム26の下位プログラムを容易に絞り込むことができ、絞り込んだ各プログラムを詳細に確認することにより、差異の原因となったプログラムをより容易に特定できる可能性が高まる。
図13の例は、図11においてプログラムに対応するオブジェクト表示命令手段が操作された場合に出力される内容の別の例である。このような出力は、たとえばプログラム比較装置100の表示装置において行われる。
図13の例では、新プログラム26に関連してアクセスされるオブジェクトの名称として、新プログラム26を含む呼び出し関係のツリーに含まれる各プログラムの名称が出力されている。この例では、最上位のプログラムの名称として「プログラムn」が表示されており、プログラムnが実行されることによって呼び出される、プログラムnの下位プログラムの名称として「プログラムn1」および「プログラムn2」が表示されている。
さらに、プログラムn2が実行されることによって呼び出される、プログラムn2の下位プログラムが新プログラム26であるということが、枠による装飾を用いて表示される。プログラムn2は、新プログラム26を呼び出すための上位プログラムである。また、
プログラムnは、プログラムn2を介して新プログラム26を呼び出すための、間接的な上位プログラムである。新プログラム26のツリー内での位置を表す名称は「プログラムn21」であるが、新プログラム26の固有の名称は図12と同じく「画面TEST01」となっている。
ツリーの階層は、図13の例ではインデントによって示されている。たとえば、最上階層の「プログラムn」は左端に表示され、次階層の「プログラムn1」および「プログラムn2」は左から2番目のカラムに表示されている。
また、新プログラム26の下位プログラムの名称も、図12と同様に表示されている。図13の例では、「プログラムn」および「プログラムn2」は新プログラム26の上位プログラムの名称であり、「プログラムn211」および「プログラムn212」は、新プログラム26の下位プログラムの名称である。
また、図13の例では、「プログラムn1」、「プログラムn11」および「プログラムn12」は、新プログラム26からみて直接の上位プログラムでも直接の下位プログラムでもないが、新プログラム26の上位プログラムからみて下位プログラムであり、新プログラム26を含む呼び出し関係のツリーに含まれる。
呼び出し関係のツリーは、新システムの全プログラム(または、少なくとも、当該ツリーを構成する可能性があるプログラムすべて)を参照して取得することができる。たとえば、新プログラム26を呼び出すための命令が、あるプログラムに含まれていれば、そのプログラムは新プログラム26の上位プログラムであるということができる。
ここで、現出力内容21と、新プログラム26に係る新出力内容22とで差異がある場合には、新プログラム26を含む呼び出し関係のツリーに含まれるプログラムのいずれかに差異の原因が存在する可能性がある。そのような場合には、プログラム比較装置100のユーザは図13のような表示によって呼び出し関係に含まれるプログラムを容易に絞り込むことができ、絞り込んだ各プログラムを詳細に確認することにより、差異の原因となったプログラムをより容易に特定できる可能性が高まる。
図14の例は、図11においてデータに対応するオブジェクト表示命令手段が操作された場合に出力される内容の例である。このような出力は、たとえばプログラム比較装置100の表示装置において行われる。
図14の例では、新プログラム26に関連してアクセスされるオブジェクトの名称として、新プログラム26を含む呼び出し関係のツリーに含まれる各プログラムの名称と、各プログラムに関連してアクセスされるデータの名称とが表示されている。データの名称は「テーブルT1」、「テーブルT2」および「テーブルT3」である。この例ではデータの名称はデータベースのテーブルを単位としているが、他の単位(データベース、レコード、カラム、セル、等)を単位としてもよい。
この例では、新プログラム26には上位プログラムおよび下位プログラムが存在するので、新プログラム26、上位プログラムおよび下位プログラムのそれぞれについて、プログラムに関連してアクセスされるデータが表示される。すなわち、新プログラム26に関連してアクセスされるデータと、上位プログラムに関連してアクセスされるデータと、下位プログラムに関連してアクセスされるデータとが表示される。新プログラム26について、上位プログラム、下位プログラムまたは双方が存在しない場合には、存在しないものについては表示を省略してもよい。
図14の例では、データの名称のみならず、各データに対するアクセスの種類までも表示されている。各データに対するアクセスの種類は、たとえば作成、読出、更新および削除のいずれかである。図14の例では、このようなアクセスの種類が、いわゆるCRUD表の形式で表示されている。
CRUD表とは、各データに対するアクセスの種類が、作成、読出、更新および削除のいずれであるかを出力する具体例であり、たとえばデータの作成を「C」で、データの読み出しを「R」で、データの更新を「U」で、データの削除を「D」で、それぞれ表すものである。たとえば図14の例では、「プログラムn」はいかなるデータにもアクセスせず、「プログラムn1」はテーブルT1にのみ「R」すなわち「読み出し」のアクセスを行う。
また、図14の例では、新プログラム26を含む呼び出し関係のツリー全体でデータに対するアクセスをまとめた行が「プログラムnグループ全体」として表示されている。
ここで、現出力内容21と、新プログラム26に係る新出力内容22とで差異がある場合には、新プログラム26を含む呼び出し関係のツリーに含まれるプログラムのいずれかに差異の原因が存在する可能性がある。そのような場合には、プログラム比較装置100のユーザは図14のような表示によって呼び出し関係に含まれるプログラムを容易に絞り込むことができ、絞り込んだ各プログラムを詳細に確認することにより、差異の原因となったプログラムをより容易に特定できる可能性が高まる。
とくに、図14のようにCRUD表を用いた表示によれば、各プログラムと各データとの関連性を一覧にしてより具体的に確認できるので、差異の原因となったプログラムをより容易に特定できる可能性が高まる。
たとえば図14の例では、プログラムn12が原因となった可能性が考えられる。プログラムn12にバグがあると、誤ったデータがテーブルT2に書き込まれ、この誤ったデータをプログラムn211が参照して誤動作を起こし、その結果としてプログラムn21(新プログラム26)の出力内容に差異が発生した可能性があるからである。
なお、図14のようにプログラムツリーを表示せず、新プログラム26に関連するデータのみ表示することも可能である。その場合、プログラムとデータとの関連性が図14に示すものである場合には、データの名称が何も表示されないことになるが、もし新プログラム26に関連してアクセスされるデータが存在する場合には、そのデータについてCRUD表が表示されることになる。
図15の例は、図11において帳票に対応するオブジェクト表示命令手段が操作された場合に出力される内容の例である。このような出力は、たとえばプログラム比較装置100の表示装置において行われる。
図15の例では、新プログラム26に関連してアクセスされるオブジェクトの名称として、新プログラム26が実行されることによって出力される帳票の名称が表示されている。この例では、新プログラム26に相当するプログラム名「画面TEST01」が枠による装飾を用いて表示され、新プログラム26が実行されることによって出力される帳票の名称として「帳票R2」が表示されている。
このように帳票名を表示することにより、新プログラム26と帳票との関連が明確となるので、プログラム比較装置100のユーザは、新プログラム26に差異の原因があった場合には関連する帳票でも差異が発生する可能性を認識することができる。
なお、図15の例は、新プログラム26以外にも、2つのプログラムの名称(「画面TEST02」および「画面TEST03」)が表示されている。また、これら2つのプログラムが実行されることによって出力される帳票の名称として「帳票R1」および「帳票R3」が表示されている。
図15の例では帳票の名称が表示されているが、帳票に代えて、または帳票に加えて、新プログラム26が実行されることによって出力される画面の名称を同様に表示してもよい。
図16に、差異の詳細の表示例を示す。この例は、図6の現テキスト23の例と、図7の新テキスト24の例との間の差異を示す。図10のフローチャートには示さないが、プログラム比較装置100は、差異表示命令手段(図11の例では「差異1」および「差異4」というボタンの画像またはハイパーリンク)が操作されることに応じて、このような出力を行ってもよい。このような出力は、たとえばプログラム比較装置100の表示装置において行われる。
図16には、現テキスト23および新テキスト24が出力されている。とくに、図16の例では、現テキスト23と新テキスト24とが左右に並べられて表示されている。このような配置により、現テキスト23と新テキスト24との具体的な相違点を発見することがより容易になり、差異の原因となったプログラムが新プログラム26自身である場合には、原因をより容易に特定できる可能性が高まる。
プログラム比較装置100は、現テキスト23および新テキスト24のうち、差異に対応する部分の出力態様を変更してもよい。図16の例では、差異に対応する行の背景にハイライト表示が行われ、右端に「差異」というマークが表示されている。このように出力態様を変更することにより、現テキスト23と新テキスト24との具体的な相違点を発見することがより容易になり、差異の原因となったプログラムが新プログラム26自身である場合には、原因をより容易に特定できる可能性が高まる。
図17に、差異の詳細の別の表示例を示す。この例では、差異に対応する行のみが出力されている。このような出力によっても、現テキスト23と新テキスト24との具体的な相違点を発見することがより容易になり、差異の原因となったプログラムが新プログラム26自身である場合には、原因をより容易に特定できる可能性が高まる。
図9および図10の処理の実行を開始するための処理は、任意に設計可能である。たとえば、現出力内容21と新出力内容22とを含む比較対を複数準備しておき、ユーザからの一度の指示でこれらの比較対がすべて処理されてもよい。
たとえば、複数の現出力内容21をそれぞれ個別のPDFファイルとして作成し、それらを1つまたは複数のフォルダに格納しておく。具体例は次のようなものである。
work¥TEST01¥現画面¥画面001.PDF
work¥TEST01¥現画面¥画面002.PDF
work¥TEST02¥現画面¥画面030.PDF
work¥TEST02¥現画面¥画面031.PDF
同様に、複数の新出力内容22をそれぞれ個別のPDFファイルとして作成し、それらを1つまたは複数のフォルダ(ただし現出力内容21とは異なるフォルダ)に格納しておく。この時に、対応する現出力内容21と新出力内容22とのファイル名を同一のものとしておく。具体例は次のようなものである。
work¥TEST01¥新画面¥画面001.PDF
work¥TEST01¥新画面¥画面002.PDF
work¥TEST02¥新画面¥画面030.PDF
work¥TEST02¥新画面¥画面031.PDF
そして、フォルダ名を用いて比較対を定義する。たとえば、比較ルールとして、現出力内容21および新出力内容22のファイル名と、現出力内容21が格納されたフォルダ名と、新出力内容22が格納されたフォルダ名とを組として定義する。具体例は次のようなものである。
画面001.PDF work¥TEST01¥現画面¥ work¥TEST01¥新画面¥
画面002.PDF work¥TEST01¥現画面¥ work¥TEST01¥新画面¥
画面003.PDF work¥TEST01¥現画面¥ work¥TEST01¥新画面¥
画面004.PDF work¥TEST01¥現画面¥ work¥TEST01¥新画面¥
そして、プログラム比較装置100は、それぞれ定義されたフォルダの、同一のファイル名を持つファイルを、比較対としてステップS21において取得する。このようにして処理が実行される。
以上説明するように、実施の形態1に係るプログラム比較装置100によれば、現新各プログラムの出力内容を表す現テキスト23および新テキスト24を比較するとともに、新プログラム26に関連してアクセスされるオブジェクト名を出力する。これによって、そのオブジェクト名をヒントとし、差異の原因となったプログラムが新プログラム26であるか否かを、より容易に特定することができる。また、差異の原因が新プログラム26である場合には、その事実をより容易に特定することができ、差異の原因が新プログラム26でない場合には、原因となったプログラムをより容易に特定することができる。
上述の実施の形態1または各変形例では、新プログラム26は第2のプログラムとして参照したが、新プログラム26を第1のプログラムとして参照しても本発明を同様に実施することができる。
上述の実施の形態1または各変形例では、ステップS25において、新プログラム26に関連してアクセスされるオブジェクトの名称が出力される。変形例として、プログラム比較装置100は、新プログラム26に関連してアクセスされるオブジェクトの名称に代えて、またはこれに加えて、現プログラムに関連してアクセスされるオブジェクトの名称を出力してもよい。
上述の実施の形態1または各変形例において、ステップS21を省略してもよい。その場合には、たとえばプログラム比較装置100は現出力内容21および新出力内容22を格納せず、ステップS22において現テキスト23および新テキスト24を取得してもよい。
実施の形態2.
実施の形態2は、実施の形態1または各変形例において、出力されるデータの構造を表す情報を用いるように構成したものである。以下、図18〜図27を用いて、実施の形態2に係るプログラム比較装置の動作を説明する。
実施の形態2では、現テキスト23および新テキスト24は、それぞれ、現プログラムおよび新プログラム26に関連してアクセスされるデータベースのテーブルの内容を表すテキストデータを含む。
図18に、現プログラムの出力内容となるデータベースの構造を表す情報の構成の例を示す。このような情報は、現テキスト23の一部として出力されてもよいが、現テキスト23とは独立して(たとえばデータベース定義ファイルとして)作成され、プログラム比較装置の記憶手段に格納されてもよい。
図18の例では、行ごとに、データベースに含まれるテーブルの名称と、そのテーブルに含まれるカラムの名称と、各カラムの属性を表す情報(たとえばkeyは主キーであることを示す)とが記述されている。
同様に、図19に、新プログラムの出力内容となるデータベースの構造を表す情報の構成の例を示す。これは図18のデータベースと対応するデータベースのものであるが、図18と比較するとテーブルの名称が異なっている。
図20に、比較対定義情報の構成の例を示す。比較対定義情報は、現テキスト23と新テキスト24との差異を抽出するために比較すべきデータベースの対を定義する。図19の例では2対が定義されており、たとえば新システムのテーブル「TABLE−A2」と、現システムのテーブル「LIBZ−TABLE−A1」とが比較対となっている。
実施の形態2では、テーブルの内容を表すテキストデータ(すなわち現テキスト23および新テキスト24)のうち、所定のカラム名に対応するカラムに係る部分のみが、差異抽出ステップ(ステップS23)における抽出対象となる。
図21に、ステップS23において抽出対象とすべきカラム名の定義方法の一例を示す。図21は、抽出対象から除外すべき除外カラム名を定義するものであり、すなわち、図21に定義されたカラム名に該当しないカラム名に係るカラムのみが、差異抽出において考慮される。プログラム比較装置は、テーブルの内容を表すテキストデータ(すなわち現テキスト23および新テキスト24)のうち、この除外カラム名に対応するカラムに係る部分名に対応する部分を、差異抽出ステップ(S23)における抽出対象から除外する。
図21の例では、正規表現を用い、「UpdateTime」という文字列を末尾に持つカラム名がすべて除外カラム名に対応するということが定義されている。このようなカラム名は、たとえばデータベースの各レコードの更新時刻を表す。その場合には、データのうち更新時刻のみが異なるような比較対については、差異がないものと判定されることになる。
図22および図23に、ステップS23において抽出対象とすべきカラム名の定義方法の別の例を示す。図22は、図20の1行目に定義された比較対に対応する。図23は、図20の2行目に定義された比較対に対応する。図22および図23の例では、SQL文法に従い、抽出すべきカラム名が定義されている。図22および図23に定義されたカラム名に係るカラムのみが、差異抽出において考慮される。
このように抽出対象とすべきカラム名を設定しておくと、重要でないカラム(たとえば更新時刻)のみが異なるような比較対については、差異がないものと判定されることになる。
なお、現テキスト23および新テキスト24に含まれるテキストデータと、各テキストデータに対応するカラム名との関係は、任意の方法で定義可能である。たとえば現テキスト23および新テキスト24をCSV形式で表現し、各行の何番目のデータがどういうカラム名を持つかを表す情報を別途定義しておいてもよい。
図24に、現テキスト23(たとえば「LIBZ−TABLE−A1」という名称のテーブルの内容)のうち、実施の形態2において差異抽出ステップ(ステップS23)の処理に用いられる部分の具体例を示す。この例はCSV形式で表現されている。図21〜23のようなカラム名の制限により、更新時刻を表すカラムが削除されている。
図25に、新テキスト24(たとえば「TABLE−A2」という名称のテーブルの内容)のうち、実施の形態2において差異抽出ステップ(ステップS23)の処理に用いられる部分の具体例を示す。図24と同様に、更新時刻を表すカラムが削除されている。
図26に、図24および図25に対応する差異の詳細の表示例を示す。この例では、図17と同様に、差異に対応する行のみが出力されている。このような出力によっても、現テキスト23と新テキスト24との具体的な相違点を発見することがより容易になり、差異の原因となったプログラムが新プログラム26自身である場合には、原因をより容易に特定できる可能性が高まる。
図27に、実施の形態2に係る差異の詳細の別の表示例を示す。この例は、図26とは異なるデータの比較結果を表すものである。この表示例は、テーブルの内容を表すテキストデータ(現テキスト23および新テキスト24)のうち、差異が抽出されたレコードについて、差異が抽出された部分に係るカラム名を出力するものである。
図27の例では、現テキスト23の5574行目と、新テキスト24の5574行目とに差異があることが示されている。また、差異の具体的内容として、5574行目の「FLAG」というカラム名に係るカラムにおいて、現テキスト23では「1」となっているにもかかわらず、新テキスト24では「2」となっているということが示されている。さらに、5574行目の「COST」というカラム名に係るカラムにおいて、現テキスト23では「10000」となっているにもかかわらず、新テキスト24では「10001」となっているということが示されている。
また、現テキスト23に存在しないレコードが、新テキスト24の5578行目に存在するということが示されている。また、現テキスト23の5582行目のレコードに対応するレコードは、新テキスト24には存在しないということが示されている。
このような出力によっても、現テキスト23と新テキスト24との具体的な相違点を発見することがより容易になり、差異の原因となったプログラムが新プログラム26自身である場合には、原因をより容易に特定できる可能性が高まる。