(57)【要約】【課題】プログラミング言語が同一であるかどうかに関わらずプログラムを比較できる技術を提供する。【解決手段】プログラム比較装置１００は、第１ソースコード３１から、オブジェクトに係るアクセスを表す命令を取得し、第２ソースコード３２から、オブジェクトに係るアクセスを表す命令を取得する。プログラム比較装置１００は、第１ソースコード３１から取得された命令と、第２ソースコード３２から取得された命令とが対応しているか否かを判定する。【選択図】図６
2019008452.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが実行するプログラム比較方法であって、
第１のプログラムから、オブジェクトに係るアクセスを表す命令を取得するステップと、
第２のプログラムから、前記オブジェクトに係るアクセスを表す命令を取得するステップと、
前記第１のプログラムから取得された前記命令と、前記第２のプログラムから取得された前記命令とが対応しているか否かを判定するステップと、
を備える、プログラム比較方法。
【請求項２】
前記オブジェクトは、テーブル、レコードまたはカラムを含み、
前記アクセスを表す命令は、作成命令、読出命令、更新命令または削除命令を含む、
請求項１に記載の方法。
【請求項３】
前記オブジェクトはインタフェース画面を含み、
前記アクセスを表す命令は、前記インタフェース画面と、他のオブジェクトとを関連付ける命令を含む、
請求項２に記載の方法。
【請求項４】
前記オブジェクトは帳票を含み、
前記アクセスを表す命令は、前記帳票と、他のオブジェクトとを関連付ける命令を含む、
請求項１〜３のいずれか一項に記載の方法。
【請求項５】
前記オブジェクトは下位プログラムを含み、
前記アクセスを表す命令は、コンピュータに前記下位プログラムを実行させる命令を含む、
請求項１〜４のいずれか一項に記載の方法。
【請求項６】
請求項１〜５のいずれか一項に記載のプログラム比較方法を実行する、プログラム比較装置。
【請求項７】
請求項１〜５のいずれか一項に記載のプログラム比較方法をコンピュータに実行させる、プログラム比較プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプログラムを比較する技術に関する。
【背景技術】
【０００２】
プログラムの改善等のために修正を行った場合には、修正前のプログラムと修正後のプログラムとを比較し、同一性を検証することが有用である。特許文献１には、このような検証方法の例が記載されている。
【０００３】
しかしながら、既存プログラムの単なる修正ではなく、別のプログラミング言語による新たなプログラムを作成してプログラム全体を置き換えることが必要になる場合もある。このようなケースの例としては、既存システム（現行システム）の全体を新システムに移行する場合が挙げられる。
【０００４】
現行システムの移行案件では、システムの機能を理解するために、一般的に現行システムの分析から始めるが、分析に必要な情報が十分に揃わない場合がある。たとえば、「メンテナンスされている設計書がない」「設計当時の設計者は既にいない」「システム利用者がシステムの機能を説明できないか、または十分なヒアリングの時間がとれない」という制約のためである。
【０００５】
このような制約のもとで、現行システムを新システムに移行させる、いわゆるレガシーマイグレーションの手段のひとつとして、リライト開発がある。リライト開発では、旧世代のプログラム言語で記述された現行システムのソースコードを、新世代のプログラム言語に書き換える作業を中核とするため、現行システムの設計書がなくても新システムの開発が可能というメリットがある。
【０００６】
ここで、リライト開発を行った場合には、現行システムのプログラムと、これとは別のプログラミング言語で記述された新システムのプログラムとが同じ動作をするかどうかの検証作業が必要となる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１４−１２６９８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、異なるプログラミング言語によるプログラムどうしを比較することは困難であるという問題があった。
【０００９】
たとえば特許文献１の技術では同一のプログラミング言語間での比較を想定しており、文法等が異なる場合には対応できない。
【００１０】
この発明は、このような問題点を解決するためになされたものであり、プログラミング言語が同一であるかどうかに関わらずプログラムを比較できる技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述の問題点を解決するため、この発明に係る方法は、コンピュータが実行するプログラム比較方法であって、
第１のプログラムから、オブジェクトに係るアクセスを表す命令を取得するステップと、
第２のプログラムから、前記オブジェクトに係るアクセスを表す命令を取得するステップと、
前記第１のプログラムから取得された前記命令と、前記第２のプログラムから取得された前記命令とが対応しているか否かを判定するステップと、
を備える。
特定の態様によれば、
前記オブジェクトは、テーブル、レコードまたはカラムを含み、
前記アクセスを表す命令は、作成命令、読出命令、更新命令または削除命令を含む。
特定の態様によれば、
前記オブジェクトはインタフェース画面を含み、
前記アクセスを表す命令は、前記インタフェース画面と、他のオブジェクトとを関連付ける命令を含む。
特定の態様によれば、
前記オブジェクトは帳票を含み、
前記アクセスを表す命令は、前記帳票と、他のオブジェクトとを関連付ける命令を含む。
特定の態様によれば、
前記オブジェクトは下位プログラムを含み、
前記アクセスを表す命令は、コンピュータに前記下位プログラムを実行させる命令を含む。
また、この発明に係るプログラム比較装置は、上述のプログラム比較方法を実行する。
また、この発明に係るプログラム比較プログラムは、上述のプログラム比較方法をコンピュータに実行させる。
【発明の効果】
【００１２】
この発明に係るプログラム比較方法、プログラム比較装置およびプログラム比較プログラムによれば、オブジェクトに係るアクセス命令に着目して対応関係を判定するので、プログラミング言語が同一であるかどうかに関わらずプログラムを比較することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態１に係るプログラム比較装置の構成を示す図である。
【図２】図１の第１ソースコードおよび第２ソースコードの例を示す図である。
【図３】図１の第１ソースコードにおける、オブジェクトに係るアクセスを表す命令に関する情報の一部をまとめた表である。
【図４】図１の第２ソースコードにおける、オブジェクトに係るアクセスを表す命令に関する情報の一部をまとめた表である。
【図５】図１のプログラム比較装置の処理の流れを示すフローチャートである。
【図６】図１の判定結果の例を示す図である。
【発明を実施するための形態】
【００１４】
以下、この発明の実施の形態を添付図面に基づいて説明する。
実施の形態１．
図１に、本発明の実施の形態１に係るプログラム比較装置１００の構成を示す。プログラム比較装置１００は、本明細書に記載されるプログラム比較方法を実行する。プログラム比較装置１００は公知のコンピュータとしての構成を含み、演算を行う演算手段１０と、情報を格納する記憶手段２０とを備える。演算手段１０はＣＰＵ（中央処理装置）を含み、記憶手段２０は半導体メモリおよびＨＤＤ（ハードディスクドライブ）等の記憶媒体を含む。
【００１５】
また、とくに図示しないが、プログラム比較装置１００は、入力手段、出力手段およびネットワークインタフェース等を備えてもよい。入力手段は、使用者が情報を入力するために用いる手段であり、たとえばマウスやキーボード等である。出力手段は、使用者に対して情報を出力する手段であり、たとえば液晶ディスプレイ等の表示装置およびプリンタ等の印刷装置である。
【００１６】
記憶手段２０は、第１ソースコード３１（第１のプログラム）、第２ソースコード３２（第２のプログラム）、第１抽出規則４１、第２抽出規則４２、第１分析結果５１、第２分析結果５２および判定結果６０を格納することができる。また、記憶手段２０は、図示しないプログラム比較プログラムを格納する。コンピュータがこのプログラム比較プログラムを実行することにより、当該コンピュータは本実施形態に係るプログラム比較装置１００として機能する。すなわち、このプログラム比較プログラムは、本明細書に記載されるプログラム比較方法を、コンピュータに実行させる。
【００１７】
図２に、第１ソースコード３１および第２ソースコード３２の例を示す。第１ソースコード３１はプログラミング言語Ｐ（第１のプログラミング言語）を用いて作成され、第２ソースコード３２はプログラミング言語Ｑ（第２のプログラミング言語）を用いて作成され、これらのプログラミング言語は互いに異なるものである。第１ソースコード３１および第２ソースコード３２は、所定の構成を備えるコンピュータ（プログラム比較装置１００を除外しない）に、それぞれ所定の機能を実現させるものである。
【００１８】
第１ソースコード３１および第２ソースコード３２は、オブジェクトに係るアクセスを表す命令を含む。本明細書において、オブジェクトは、とくに断った場合を除き、たとえばプログラムの命令において参照される識別可能な概念であればどのようなものであってもよい。より具体的には、データであってもよく、入出力インタフェースであってもよく、所定の構成を備えるコンピュータ（プログラム比較装置１００を除外しない）によって実行されるプログラム（下位プログラム）であってもよく、これら以外のオブジェクトであってもよい。
【００１９】
オブジェクトの対応関係は任意に定義可能である。たとえば、同一の名称を持つオブジェクトは対応するオブジェクトである（図２の例はこのケースに該当する）。または、たとえばオブジェクト名の変換規則を定義しておき、一方のソースコードにおけるオブジェクト名にこの変換規則を適用したものと、他方のソースコードにおけるオブジェクト名とが一致する場合には、それらのオブジェクトは対応するオブジェクトであるとしてもよい。
【００２０】
データは、入力装置を介して入力されるデータであってもよく、記憶手段２０に格納されるデータであってもよく、出力装置（表示装置または印刷装置等）を介して出力されるデータであってもよい。オブジェクトとなるデータの単位は任意に設計可能であり、たとえば、データベース、テーブル、レコード、カラム、セル、等である。オブジェクトとなる入出力インタフェースは、たとえばインタフェース画面または帳票であるが、これら以外のインタフェース（任意に定義されるＡＰＩ等）を含んでもよい。オブジェクトとなるプログラム（下位プログラム）は、たとえば第１ソースコード３１または第２ソースコード３２を親プログラムとしたときに、当該親プログラムから呼び出される子プログラム（サブルーチンまたは外部ルーチン等）であってもよい。
【００２１】
なお、入出力インタフェースの表現形式は任意である。たとえば、インタフェース画面は、外見上はプログラムとして表現することも可能であり、そのインタフェース画面を表示させるためのオンラインプログラムとして表現することができる。また、たとえば、帳票は、出力され記憶手段に記憶されたデータベースとして表現することもでき、画面に表示された表として表現することもでき、表が印刷された紙媒体として表現することもできる。
【００２２】
図２の第１ソースコード３１は、命令文３１ａを含む。なお、本明細書において、「命令」または「命令文」とは、コンピュータに情報を与えるための文字列を広く含む。たとえば、プログラミング言語に定義される狭義の命令（コマンド）に限らず、そのプログラミング言語で利用可能なオブジェクト、ルーチン、データ形式等を定義するためのステートメントまたは関数等に関する記述も含む。
【００２３】
命令文３１ａは、「画面Ａ」、「画面Ｂ」、「帳票Ｃ」および「ｔａｂｌｅＺ」という４つのオブジェクトに係るアクセスを表す命令を含む。画面Ａおよび画面Ｂはインタフェース画面の例であり、帳票Ｃは帳票の例であり、ｔａｂｌｅＺはデータベースのテーブルの例である。「Ｃｌａｓｓ」というキーワードの直後に「画面Ａ」というオブジェクト名が記載されており、これは、命令文３１ａが画面Ａを介したアクセスを表すということを意味する。アクセスの対象として、画面Ｂ、帳票ＣおよびｔａｂｌｅＺが指定されている。
【００２４】
命令がデータに係るアクセスを表す場合（たとえばデータを対象とするアクセスを表す場合）には、アクセスを表す命令は、作成命令、読出命令、更新命令、または削除命令を含んでもよい。本実施形態では、作成命令、読出命令、更新命令、および削除命令のすべてが、アクセスを表す命令に該当する。命令文３１ａは、「ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｔａｂｌｅＺ」という表現を含んでおり、これは、命令文３１ａが、ｔａｂｌｅＺ（厳密にはｔａｂｌｅＺに含まれる各カラム）に対する読出命令を表すということを意味する。どのような表現がどの命令に対応するかは、プログラミング言語Ｐの仕様により定義される。
【００２５】
以上のように、命令文３１ａは、画面Ａを介し、ｔａｂｌｅＺを対象とするアクセスを表す命令を含む。この命令は、インタフェース画面と、データ（たとえばテーブル、レコード、カラム、セル、等）とを関連付ける命令の例である。たとえば、コンピュータによって第１ソースコード３１が実行されると、コンピュータは画面Ａを表示し、その画面において、ｔａｂｌｅＺに対する読み出し指示の入力をユーザから受け付けることができる。
【００２６】
また、命令文３１ａは、画面Ａを介し、画面Ｂを対象とするアクセスを表す命令を含む。この命令は、複数のインタフェース画面を関連付ける命令の例である。たとえば、コンピュータによって第１ソースコード３１が実行されると、コンピュータは画面Ａを表示し、その画面において、画面Ｂを呼び出す指示（または画面Ｂに遷移する指示）の入力をユーザから受け付けることができる。言い換えると、命令文３１ａは、画面Ａから画面Ｂへの画面遷移命令を表すということができる。
【００２７】
また、命令文３１ａは、画面Ａを介し、帳票Ｃを対象とするアクセスを表す命令を含む。この命令は、インタフェース画面と帳票とを関連付ける命令の例である。たとえば、コンピュータによって第１ソースコード３１が実行されると、コンピュータは画面Ａを表示し、その画面において、帳票Ｃを呼び出す指示（または帳票Ｃを出力する指示）の入力をユーザから受け付けることができる。言い換えると、命令文３１ａは、画面Ａから帳票Ｃを出力させるための帳票出力命令を表すということができる。なお、帳票の出力処理は任意の装置において行うことができ、表示装置によって表示してもよく、印刷装置によって印刷してもよい。
【００２８】
図２の第２ソースコード３２は、命令文３２ａおよび命令文３２ｂを含む。命令文３２ａは、「画面Ｂ」および「ｔａｂｌｅＸ」というオブジェクト名をそれぞれ持つ２つのオブジェクトに係るアクセスを表す命令と、「画面Ｂ」および「ｔａｂｌｅＹ」というオブジェクト名をそれぞれ持つ２つのオブジェクトに係るアクセスを表す命令とを含む。ｔａｂｌｅＸおよびｔａｂｌｅＹは、データベースのテーブルの例である。また、命令文３２ｂは、「帳票Ｃ」および「ｔａｂｌｅＺ」というオブジェクト名をそれぞれ持つ２つのオブジェクトに係るアクセスを表す命令を含む。
【００２９】
命令文３２ａは、「ｉｎｓｅｒｔ  ｉｎｔｏ  ｔａｂｌｅＸ」という表現を含んでおり、これは、命令文３２ａが、ｔａｂｌｅＸにおける新たなレコードの作成命令を表すということを意味する。また、命令文３２ａは、「ｄｅｌｅｔｅ  ｆｒｏｍ  ｔａｂｌｅＹ」という表現を含んでおり、これは、命令文３２ａが、ｔａｂｌｅＹにおけるレコードの削除命令を表すということを意味する。どのような表現がどの命令に対応するかは、プログラミング言語Ｑの仕様により定義される。
【００３０】
命令文３２ｂは、帳票Ｃを介し、ｔａｂｌｅＺを対象とするアクセスを表す命令を含む。この命令は、帳票と、データ（たとえばテーブル、レコード、カラム、セル、等）とを関連付ける命令の例である。たとえば、コンピュータによって第２ソースコード３２が実行されると、コンピュータはｔａｂｌｅＺに含まれるデータを読み出し、読み出されたデータを帳票Ｃに含めて出力する。言い換えると、命令文３２ｂは、帳票Ｃの内容を定義する帳票定義命令を表すということができる。なお、帳票の詳細な内容（どの位置にどのセルのデータが出力されるか等）の定義は、図２では省略しているが、第２ソースコード３２または他の定義ファイル等において任意に作成可能である。
【００３１】
図２には示さないが、第１ソースコード３１または第２ソースコード３２は、下位プログラムに係るアクセスを表す命令を含んでもよい。そのような命令は、コンピュータに当該下位プログラムを実行させる命令であってもよい。すなわち、コンピュータは、その命令を実行することにより、下位プログラムを呼び出し、下位プログラムの実行を開始する。
【００３２】
以上のように、オブジェクトに係るアクセスを表す命令は、単一のオブジェクトのみに係るものであってもよいし、複数のオブジェクトに係るもの（たとえば複数のオブジェクトを互いに関連付けるもの）であってもよい。たとえば、オブジェクトがインタフェース画面を含む場合には、アクセスを表す命令は、そのインタフェース画面と、他のオブジェクト（別のインタフェース画面であってもよいし、インタフェース画面以外のオブジェクトであってもよい）とを関連付ける命令を含んでもよい。また、たとえば、オブジェクトが帳票を含む場合には、アクセスを表す命令は、その帳票と、他のオブジェクト（帳票であってもよいし、帳票以外のオブジェクトであってもよい）とを関連付ける命令を含んでもよい。
【００３３】
図３は、第１ソースコード３１における、オブジェクトに係るアクセスを表す命令に関する情報の一部をまとめた表である。
第１ソースコード３１は、次のオブジェクト名をそれぞれ持つオブジェクトに係るアクセスを表す命令を含む。
‐画面Ａ（インタフェース画面）
‐画面Ｂ（インタフェース画面）
‐帳票Ｃ（帳票）
‐ｔａｂｌｅＺ（データ）
【００３４】
とくに、データに対するアクセスを表す命令は、次のものを含む。
‐ｔａｂｌｅＺを対象とする読出命令
なお、この例では、ｔａｂｌｅＺを対象とする命令は読出命令のみであるが、仮に第１ソースコード３１がさらにｔａｂｌｅＺを対象とする作成命令も含んでいる場合には、図３にはｔａｂｌｅＺに対する読出命令および作成命令の双方が含まれることになる。
【００３５】
第１ソースコード３１における、インタフェース画面とデータとを関連付ける命令は、次のものを含む。
‐画面Ａを介し、ｔａｂｌｅＺを対象とする読出命令
第１ソースコード３１は、帳票とデータとを関連付ける命令を含まない。
【００３６】
第１ソースコード３１における、インタフェース画面と帳票とを関連付ける命令は、次のものを含む。
‐画面Ａから帳票Ｃを出力させる帳票出力命令
【００３７】
第１ソースコード３１における、インタフェース画面とインタフェース画面とを関連付ける命令は、次のものを含む。
‐画面Ａから画面Ｂへの画面遷移命令
なお、インタフェース画面間の関係は、本実施形態のように方向性を持つものであってもよい。すなわち、この例では、画面Ａから画面Ｂへの遷移は定義されているが、逆方向（画面Ｂから画面Ａ）の遷移は定義されていない。
【００３８】
第１ソースコード３１は、下位プログラム（「プログラムＩ」「プログラムＩＩ」「プログラムＩＩＩ」等）に係るアクセスを表す命令を含まない。
【００３９】
図４は、第２ソースコード３２における、オブジェクトに係るアクセスを表す命令に関する情報の一部をまとめた表である。
【００４０】
第２ソースコード３２は、次のオブジェクト名をそれぞれ持つオブジェクトに係るアクセスを表す命令を含む。
‐画面Ｂ（インタフェース画面）
‐帳票Ｃ（帳票）
‐ｔａｂｌｅＸ（データ）
‐ｔａｂｌｅＹ（データ）
‐ｔａｂｌｅＺ（データ）
とくに、データに対するアクセスを表す命令は、次のものを含む。
‐ｔａｂｌｅＸを対象とする作成命令
‐ｔａｂｌｅＹを対象とする削除命令
‐ｔａｂｌｅＺを対象とする読出命令
【００４１】
第２ソースコード３２における、インタフェース画面とデータとを関連付ける命令は、次のものを含む。
‐画面Ｂを介し、ｔａｂｌｅＸを対象とする作成命令
‐画面Ｂを介し、ｔａｂｌｅＹを対象とする削除命令
第２ソースコード３２における、帳票とデータとを関連付ける命令は、次のものを含む。
‐帳票Ｃを介し、ｔａｂｌｅＺを対象とする読出命令
【００４２】
第２ソースコード３２は、インタフェース画面と帳票とを関連付ける命令を含まない。
第２ソースコード３２は、インタフェース画面とインタフェース画面とを関連付ける命令を含まない。
第２ソースコード３２は、下位プログラムに係るアクセスを表す命令を含まない。
【００４３】
なお、データに対するアクセスを表す情報は、いわゆるＣＲＵＤ表の形式で作成してもよい。ＣＲＵＤ表とは、たとえばデータの作成を「Ｃ」で、データの読み出しを「Ｒ」で、データの更新を「Ｕ」で、データの削除を「Ｄ」で、それぞれ表すものである。
【００４４】
以上のように構成されるプログラム比較装置１００の動作を、以下に説明する。
図５は、プログラム比較装置１００の処理の流れを示すフローチャートである。このフローチャートは、実施の形態１に係るプログラム比較方法を表す。
【００４５】
まずプログラム比較装置１００は、第１ソースコード３１から、オブジェクトに係るアクセスを表す命令を取得する（ステップＳ１）。この処理は、たとえば第１抽出規則４１に基づいて行うことができる。第１抽出規則４１は、プログラミング言語Ｐの文法等に基づいて作成される規則であり、任意に定義可能である。
【００４６】
たとえば、第１ソースコード３１では、Ｃｌａｓｓというキーワードの直後に出現する「画面Ａ」という文字列がオブジェクトの名称（オブジェクト名）を表し、その後に「：」を挟んで出現する文字列がそのオブジェクトの種類を表す（この例では「ＤＳＰ」がインタフェース画面を表す）。
【００４７】
また、ｓｅｌｅｃｔというキーワードがデータに対する読出命令を表し、これよりその後に「ｆｒｏｍ」命令の対象となる「ｔａｂｌｅＺ」がデータ（この場合はテーブルまたはそのテーブル内の各カラム）の名称を表す。
【００４８】
また、「．ｄｉｓｐｌａｙ」というキーワードは画面遷移を表し、その直前の文字列「画面Ｂ」が遷移先となるインタフェース画面の名称を表す。
【００４９】
また、「．ｐｒｉｎｔ」というキーワードは帳票の出力を表し、その直前の文字列「帳票Ｃ」が出力される帳票の名称を表す。
【００５０】
なお、図２の例では、第１ソースコード３１は単一の命令（命令文３１ａ）しか含まないが、Ｃｌａｓｓというキーワードが新たに出現した場合には、命令文３１ａはその直前で終了し、当該キーワード以降が新たな命令文となる。
以上のような規則の定義方法、表現形式、等は、当業者が任意に設計可能である。
【００５１】
抽出結果は、たとえば第１分析結果５１として出力される。第１分析結果５１は、たとえば図３に示す内容を含むデータベースである。
【００５２】
次に、プログラム比較装置１００は、第２ソースコード３２から、オブジェクトに係るアクセスを表す命令を取得する（ステップＳ２）。この処理は、たとえば第２抽出規則４２に基づいて行うことができる。第２抽出規則４２は、プログラミング言語Ｑの文法等に基づいて作成される規則であり、第１抽出規則４１と同様に任意に定義可能である。なお、このステップＳ２は、ステップＳ１と同時またはこれより前に実行されてもよい。
【００５３】
抽出結果は、たとえば第２分析結果５２として出力される。第１分析結果５２は、たとえば図３に示す内容を含むデータベースである。
【００５４】
ここで、第１抽出規則４１と第２抽出規則４２とを分離し、それぞれのプログラミング言語に合わせて作成することにより、異なる命令または異なる文法によるプログラミング言語から、プログラミング言語に依存しない図３および図４のような形式の情報を抽出することができる。
【００５５】
次に、プログラム比較装置１００は、取得された命令の対応関係を判定する（ステップＳ３）。すなわち、第１ソースコード３１から取得された命令と、第２ソースコード３２から取得された命令とが、対応しているか否かを判定する。対応関係は、たとえば第１分析結果５１および第２分析結果５２に基づいて判定することができる。
【００５６】
判定の単位は、オブジェクトであってもよく、オブジェクトに対するアクセスの種類（作成・読出・更新・削除）であってもよく、これらを組み合わせた組であってもよい。
【００５７】
たとえば、いずれかのデータについて、第１ソースコード３１はそのデータに係る読出命令を含むが、第２ソースコード３２はそのデータに係る読出命令を含まない場合（またはその逆）には、そのデータに係る読出命令について、第１ソースコード３１から取得された命令と、第２ソースコード３２から取得された命令とは対応していないと判定される。
【００５８】
また、たとえば、いずれかの画面インタフェースについて、第１ソースコード３１はその画面インタフェースに係る命令を含むが、第２ソースコード３２はその画面インタフェースに係る命令を含まない場合（またはその逆）には、その画面インタフェースについて、第１ソースコード３１から取得された命令と、第２ソースコード３２から取得された命令とは対応していないと判定される。
【００５９】
または、たとえば、画面インタフェースとデータとの組について、第１ソースコード３１はその画面インタフェースを介したそのデータに対する作成命令を含むが、第２ソースコード３２はその画面インタフェースを介したそのデータに対する作成命令を含まない場合（またはその逆）には、その組について、第１ソースコード３１から取得された命令と、第２ソースコード３２から取得された命令とは対応していないと判定される。
【００６０】
図３および図４の例では、たとえば次のようにして判定が行われる。
アクセスに係るオブジェクトの名称として、第１ソースコード３１は画面Ａを含むが、第２ソースコード３２は画面Ａを含まない。このため、プログラム比較装置１００は、この点において、第１ソースコード３１と第２ソースコード３２との間で命令が対応していないと判定する。
【００６１】
一方、アクセスに係るオブジェクトの名称として、第１ソースコード３１および第２ソースコード３２は、いずれも画面Ｂおよび帳票Ｃを含む。このため、プログラム比較装置１００は、この点において、第１ソースコード３１と第２ソースコード３２との間で命令が対応していると判定する。
【００６２】
また、アクセスに係るオブジェクトの名称として、第１ソースコード３１はｔａｂｌｅＸおよびｔａｂｌｅＹを含むが、第２ソースコード３２はｔａｂｌｅＸもｔａｂｌｅＹも含まない。このため、プログラム比較装置１００は、この点において、第１ソースコード３１と第２ソースコード３２との間で命令が対応していないと判定する。
【００６３】
また、アクセスに係るオブジェクトの名称として、第１ソースコード３１および第２ソースコード３２は、いずれもｔａｂｌｅＺを含む。このため、プログラム比較装置１００は、この点において、第１ソースコード３１と第２ソースコード３２との間で命令が対応していると判定する。さらに、ｔａｂｌｅＺに対するアクセスの種類はいずれも「読出」である。このため、プログラム比較装置１００は、この点において、第１ソースコード３１と第２ソースコード３２との間で命令が対応していると判定する。
【００６４】
なお、仮に、第１ソースコード３１におけるｔａｂｌｅＺに対するアクセスの種類が「読出」のみであり、第２ソースコード３２におけるｔａｂｌｅＺに対するアクセスの種類が「作成および読出」であった場合には、プログラム比較装置１００は、第１ソースコード３１と第２ソースコード３２との間で命令が対応していないと判定してもよい。
【００６５】
次に、プログラム比較装置１００は、判定結果６０を出力する（ステップＳ４）。判定結果６０の形式は任意に設計可能であるが、たとえば、図３および図４に示す各表をすべて出力した上で、各セルについて、第１ソースコード３１と第２ソースコード３２とで命令が対応するか否かを示してもよい（たとえば、対応しているセルについては白または黒で、対応していないセルについては赤色で、表示してもよい）。または、判定結果６０は、対応していないセルに関する情報のみを含み、対応しているセルについては省略してもよい。
【００６６】
図６に、判定結果６０の例を示す。この例は、たとえばディスプレイ装置等の出力装置において表示される表示例である。図６の例は、図２に対応するものではなく、図示しない第３のソースコードと第４のソースコードとを比較した場合の例である。第３のソースコードが現行システムのソースコードであり、第４のソースコードはこれに対応すると考えられる新システムのソースコードである。
【００６７】
図６において、画面Ｄを介したｔａｂｌｅαに対するアクセスについて、第３のソースコートと第４のソースコードとの間で差異があり、すなわち命令が対応していないと判定されている。命令が対応していないと判定されたことに応じ、当該判定単位（インタフェース画面とデータとの組）については「差異あり」と表示され、また行全体が着色されている。画面Ｄを介したｔａｂｌｅβに対するアクセスについても、同様に、命令が対応していないと判定されている。これら以外のアクセスについては、命令が対応していると判定されている。
【００６８】
図６のような出力を得た管理者は、命令が対応していない部分に着目し、新システムのソースコードに誤りがあることを比較的容易に発見することができる。たとえば、第４のソースコードでは、本来「画面Ｄを介し、ｔａｂｌｅ『α』に対する削除命令」としなければならない命令を、誤って「画面Ｄを介し、ｔａｂｌｅ『β』に対する削除命令」としてしまったのではないかと推測することができる。
【００６９】
以上説明するように、本発明の実施の形態１に係るプログラム比較装置１００によれば、オブジェクトに係るアクセスを表す命令に着目して対応関係を判定するので、プログラミング言語が同一であるかどうかに関わらず、プログラムを比較することができる。
【００７０】
とくに、データについては、命令の種類（作成・読出・更新・削除）ごとに判定することができるので、たとえばＣＲＵＤ表に基づく比較が可能となり、より厳密な比較を行うことができる。
【００７１】
また、複数のオブジェクト間の関連について判定することができるので、より厳密な比較を行うことができる。たとえば、各画面からアクセス可能な個別データ、各画面から遷移可能な他の画面、各画面から印刷可能な帳票、各帳票に含まれる個別データ、等を具体的に比較することが可能である。
【００７２】
とくに、現行システムを新システムに移行させるリライト開発において有用である。たとえば、旧世代のプログラム言語で記述された現行システムのソースコードを、新世代のプログラム言語に書き換える作業が、適切に行われたかどうかを比較的容易に判定することができる。
【００７３】
また、オブジェクトに着目して対応関係を判定するので、プログラミング言語に特有の文法構造等が異なっていても適切な判定が可能である。たとえば分岐命令の構文が異なる場合には、分岐条件の部分を無視してもよい（実施の形態１において、第２ソースコード３２の命令文３２ａがこのようなケースに相当する）。
【００７４】
上述の実施の形態１では、オブジェクトがデータである場合に、命令の対応関係の判定はテーブルを単位として行われる。たとえば、ｔａｂｌｅＺに対する読出命令が、カラムの読出命令であるかレコードの読出命令であるかは判定結果に影響を与えない。変形例として、テーブル以外の単位に基づいて判定を行ってもよい。たとえば、図３の例では、アクセスに係るオブジェクトとして、「ｔａｂｌｅＺ」全体に代えて、またはこれに加えて、「ｔａｂｌｅＺに含まれるカラム」を単位としてもよい。
【００７５】
実施の形態１では、第１ソースコード３１および第２ソースコード３２はいずれもソースコードであるが、プログラムの形式はソースコードに限らず、オブジェクトに係るアクセスを表す命令を抽出できる形式のものであればよい。たとえば、中間コードやモジュール等であってもよい。
【００７６】
実施の形態１では、第１ソースコード３１と第２ソースコード３２とはそれぞれ異なるプログラミング言語によって記述されるが、これらは同一のプログラミング言語によって記述されていてもよい。その場合には、第１抽出規則４１および第２抽出規則４２はいずれか一方に集約可能である。
【符号の説明】
【００７７】
３１  第１ソースコード（第１のプログラム）、３２  第２ソースコード（第２のプログラム）、３１ａ，３２ａ，３２ｂ  命令文（オブジェクトに係るアクセスを表す命令）。
【図１】
2019008452.tif 000003
【図２】
2019008452.tif 000004
【図３】
2019008452.tif 000005
【図４】
2019008452.tif 000006
【図５】
2019008452.tif 000007
【図６】
2019008452.tif 000008
【手続補正書】
【提出日】平成30年8月24日(2018.8.24)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
上述の問題点を解決するため、この発明に係る方法は、コンピュータが実行するプログラム比較方法であって、
第１のプログラムから、オブジェクトに係るアクセスを表す命令を取得するステップと、
第２のプログラムから、前記オブジェクトに係るアクセスを表す命令を取得するステップと、
前記第１のプログラムから取得された前記命令と、前記第２のプログラムから取得された前記命令とが対応しているか否かを判定するステップと、
を備え、
前記オブジェクトは、テーブル、レコードまたはカラムを含み、
前記アクセスを表す命令は、作成命令、読出命令、更新命令または削除命令を含む。
特定の態様によれば、
前記オブジェクトはインタフェース画面を含み、
前記アクセスを表す命令は、前記インタフェース画面と、他のオブジェクトとを関連付ける命令を含む。
特定の態様によれば、
前記オブジェクトは帳票を含み、
前記アクセスを表す命令は、前記帳票と、他のオブジェクトとを関連付ける命令を含む。
特定の態様によれば、
前記オブジェクトは下位プログラムを含み、
前記アクセスを表す命令は、コンピュータに前記下位プログラムを実行させる命令を含む。
また、この発明に係るプログラム比較装置は、上述のプログラム比較方法を実行する。
また、この発明に係るプログラム比較プログラムは、上述のプログラム比較方法をコンピュータに実行させる。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータが実行するプログラム比較方法であって、
第１のプログラムから、オブジェクトに係るアクセスを表す命令を取得するステップと、
第２のプログラムから、前記オブジェクトに係るアクセスを表す命令を取得するステップと、
前記第１のプログラムから取得された前記命令と、前記第２のプログラムから取得された前記命令とが対応しているか否かを判定するステップと、
を備え、
前記オブジェクトは、テーブル、レコードまたはカラムを含み、
前記アクセスを表す命令は、作成命令、読出命令、更新命令または削除命令を含む、
プログラム比較方法。
【請求項２】
前記オブジェクトはインタフェース画面を含み、
前記アクセスを表す命令は、前記インタフェース画面と、他のオブジェクトとを関連付ける命令を含む、
請求項１に記載の方法。
【請求項３】
前記オブジェクトは帳票を含み、
前記アクセスを表す命令は、前記帳票と、他のオブジェクトとを関連付ける命令を含む、
請求項１または２に記載の方法。
【請求項４】
前記オブジェクトは下位プログラムを含み、
前記アクセスを表す命令は、コンピュータに前記下位プログラムを実行させる命令を含む、
請求項１〜３のいずれか一項に記載の方法。
【請求項５】
請求項１〜４のいずれか一項に記載のプログラム比較方法を実行する、プログラム比較装置。
【請求項６】
請求項１〜４のいずれか一項に記載のプログラム比較方法をコンピュータに実行させる、プログラム比較プログラム。