以下に、本発明の実施の形態にかかるプログラム作成装置およびプログラム差分照合方法を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
実施の形態.
図1は、本発明の実施の形態にかかるプログラム作成装置の機能構成例を示す図である。図1に示すように、本発明にかかるプログラム比較装置の一例であるプログラム作成装置1は、プログラム選択部11、プログラム差分検出部12、プログラム差分表示部13、記憶部14およびプログラム作成部15を備える。
プログラム選択部11は、記憶部14に格納されているシーケンスプログラムまたはプログラム作成部15により編集中のシーケンスプログラムのなかからの、変更前プログラムおよび変更後プログラムの選択を受け付け、受け付けた選択結果をプログラム差分検出部12へ通知する。シーケンスプログラムの一例は、ラダー言語で記述されたラダープログラムである。プログラム選択部11による変更前プログラムおよび変更後プログラムの選択の詳細については後述する。
記憶部14に格納されているシーケンスプログラムは、例えば、プログラム作成部15により作成されたシーケンスプログラムであるが、プログラム作成部15により作成されたシーケンスプログラム以外のシーケンスプログラムであってもよい。例えば、記憶部14に格納されているシーケンスプログラムは、他の装置により作成されて、記憶部14に格納されたシーケンスプログラムであってもよい。他の装置により作成されたシーケンスプログラムである場合には、プログラム作成装置1は、他の装置から、記憶媒体または通信媒体などを介して該シーケンスプログラムを取得して記憶部14に格納する。
変更前プログラムは、既に作成されたシーケンスプログラムすなわち既存のシーケンスログラムである。変更後プログラムは、変更前プログラムを再利用して作成されたまたは再利用して作成される途中のシーケンスプログラムである。
プログラム差分検出部12は、プログラム選択部11から通知された選択結果に基づいて、変更前プログラムおよび変更後プログラムを記憶部14またはプログラム作成部15から取得し、差分を検出し、検出した結果を差分情報として記憶部14へ格納する。詳細には、プログラム差分検出部12は、第1のプログラムである変更前プログラムと第2のプログラムである変更後プログラムとの差分を検出し、差分のうちのあらかじめ定められた条件を満たす流用部すなわち流用箇所を求め、流用箇所を示す情報である区分情報を求める差分演算部である。流用部は、ステップ単位で区分が判定される場合、流用ステップに対応する。区分情報は、各ステップの区分を示す情報であり、流用ステップすなわち流用箇所を示す情報である。あらかじめ定められた条件の例は、後述するように流用ステップであるか否かを示す条件である。具体的には、あらかじめ定められた条件は、第1のプログラムおよび第2のプログラムとでロジックが同一であるという条件を含む。また、あらかじめ定められた条件は、第1のプログラムおよび第2のプログラムとでパラメータが異なるという条件を含む。ここで、ロジックとは、論理式または算術式等で示される演算の内容を示す規則である。したがって、流用ステップは、変更前プログラムおよび変更後プログラムの両方にステップ自体は存在し、変更前プログラムおよび変更後プログラムとでロジックが同一であり、データが異なるステップである。
また、プログラム差分検出部12は、差分のうち流用部すなわち流用ステップ以外を、さらに、第1のプログラムに存在せず第2のプログラムに存在する新規部、第1のプログラムと第2のプログラムとでロジックの異なる変更部、および第2のプログラムに存在せず第1のプログラムに存在する削除部に分類する。新規部、変更部および削除部は、ステップ単位で区分が判定される場合、それぞれ新規ステップ、変更ステップおよび削除ステップに対応する。
ここで、新規ステップ、削除ステップ、変更ステップおよび流用ステップについて、具体例を挙げて説明する。図2は、変更前後のプログラムにおける各ステップを説明するための図である。図2の最上段には、元プログラムすなわち変更前のプログラムが示されている。図2の例では、元プログラムは1ステップからなる。この元プログラムを変更して作成された変更後プログラムの3つの例が変更後プログラム#1、変更後プログラム#2および変更後プログラム#3である。変更後プログラム#1では、元プログラムに含まれていたステップがそのまま残っているとともに、新規にステップが追加されている。このように変更後プログラムにおいて新規に追加されたステップすなわち、変更前プログラムに存在せずかつ変更後プログラムに存在するステップが、新規ステップである。変更後プログラム#2では、元プログラムに存在したステップが削除されている。このように、変更前プログラムに存在しかつ変更後プログラムに存在しないステップが削除ステップである。変更後プログラム#3では、元プログラムに存在したステップのロジックが変更されている。このように、変更前プログラムおよび変更後プログラムの両方にステップ自体は存在するものの該ステップのロジックが異なるものが変更ステップである。
したがって、プログラム差分検出部12は、例えば、変更前プログラムおよび変更後プログラムにより検出された差分を、ステップごとに、変更前プログラムに存在せずかつ変更後プログラムに存在するステップであるか、変更前プログラムに存在しかつ変更後プログラムに存在しないステップであるか、または変更前プログラムおよび変更後プログラムの両方に存在するステップであるかを判別することにより、各ステップを新規ステップ、変更ステップおよび削除ステップに分類することができる。
プログラム差分表示部13は、記憶部14に格納されている変更前プログラム、変更後プログラムおよび差分情報を表示する。
記憶部14は、プログラム作成部15により作成されたシーケンスプログラムを記憶する。なお、上述した通り、記憶部14は、プログラム作成部15以外により作成されたシーケンスプログラムも記憶していてもよい。図1では、記憶部14が、少なくともプログラムA、プログラムBおよびプログラムCを含むプログラムを記憶している例を示している。また、記憶部14は、プログラム差分検出部12により生成された差分情報を記憶する。
プログラム作成部15は、シーケンスプログラムを作成および編集する。プログラム作成部15は、例えば、プログラムエディタと呼ばれるプログラムにより実現される。なお、以下では、本実施の形態にかかるプログラム比較装置が、プログラム作成部15を備える例を示すが、本発明にかかるプログラム比較装置は、プログラム作成機能を備えていなくてもよい。すなわち、本発明にかかるプログラム比較装置は、プログラム作成部15を備えていなくてもよい。プログラム作成部15を備えない場合、プログラム比較装置は、記憶部14に格納されたプログラム同士を比較対象として本発明にかかる差分照合方法を実施する。
次に、プログラム作成装置1のハードウェア構成について説明する。プログラム作成装置1は、例えば、パーソナルコンピュータなどの計算機システムにより実現することができる。
図3は、プログラム作成装置1を実現する計算機システムの構成例を示す図である。図3に示すように、プログラム作成装置1を実現する計算機システムの一例である計算機システム20は、プロセッサ21、メモリ22、表示装置23、入力装置24および通信部25を備える。
プロセッサ21は、中央処理装置、処理装置、演算装置などとも呼ばれ、具体的には、CPU(Central Processing Unit)、マイクロプロセッサ、DSP(Digital Signal Processor)などである。メモリ22は、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリー、EPROM(Erasable Programmable Read Only Memory)、EEPROM(Electrically Erasable Programmable Read-Only Memory)をはじめとした不揮発性または揮発性の半導体メモリ、磁気ディスクなどのうちのうちの少なくとも1つを含む。
表示装置23は、プロセッサ21からの制御により、画面表示を行う。表示装置23は、液晶パネル、ディスプレイなどである。入力装置24は、ユーザからの入力を受け付ける。入力装置24は、具体的には、ユーザからの操作を受け付け、受け付けた操作を対応する入力情報に変換してプロセッサ21に出力する。入力装置24は、キーボード、マウス、ボタンなどである。
通信部25は、受信機および送信機である。なお、図3に示した計算機システム20は、通信部25を備えているが、本実施の形態にかかるプログラムの取得に通信部25を用いない場合には、本実施の形態のプログラム作成装置1を実現する計算機システムは通信部25を備えていなくてもよい。
本実施の形態のプログラム作成装置1を実現するためのプログラムは、メモリ22に格納される。メモリ22に格納されるプログラム作成装置1を実現するためのプログラムは、記録媒体から読み出されたものであってもよいし、プログラム作成装置1が通信部25を介して他の装置から取得したものであってもよい。本実施の形態のプログラム作成装置1の各部のうち記憶部14以外は、プロセッサ21が、メモリ22に格納されたプログラムを読み出して実行することにより実現される。記憶部14は、メモリ22の一部または全部により実現される。メモリ22は、プロセッサ21がプログラムを実行する際の一次記憶領域としても使用される。
また、プログラム作成部15と、プログラム選択部11、プログラム差分検出部12およびプログラム差分表示部13とは、別のプログラムにより実現されてされてもよい。または、プログラム選択部11、プログラム差分検出部12およびプログラム差分表示部13が、プログラム作成部15を実現するプログラムに対する追加機能のプログラムであってもよい。
なお、図3では、表示装置23と入力装置24とが個別に設けられる例を示しているが、これに限らず、入力装置24の少なくとも一部が表示装置23と一体化されて構成されてもよい。
図1に示したプログラム選択部11およびプログラム作成部15は、上述したように、プロセッサ21がプログラムを実行することにより実現されるとともに、プログラム選択部11およびプログラム作成部15の動作時には、入力装置24および表示装置23が用いられる。図1に示したプログラム差分表示部13は、上述したように、プロセッサ21がプログラムを実行することにより実現され、プログラム差分表示部13の動作時には、表示装置23が用いられる。
次に、本実施の形態の動作について説明する。図4は、本実施の形態のプログラム選択部11の処理手順の一例を示すフローチャートである。図4に示すように、プログラム選択部11は、変更前プログラムを選択する(ステップS1)。具体的には、プログラム選択部11は、ユーザからの変更前プログラムの選択の入力を受け付け、受け付けた入力情報に基づいて、プログラム作成部15により編集中のプログラム、または記憶部14に保存されているプログラムを示す選択して、選択したプログラムを示す情報を変更前プログラムとして、プログラム差分検出部12へ通知する。プログラム選択部11は、選択したプログラムを示す情報とともに、該プログラムの取得元、すなわち記憶部14であるかプログラム作成部15であるかを示す情報をプログラム差分検出部12へ通知する。
具体的には、ステップS1では、まず、プログラム選択部11は、例えば、図5に示す変更前プログラムの選択画面を表示装置23に表示させて、ユーザによるプログラムの選択を待機する。図5は、変更前プログラムの選択画面の一例を示す図である。図5に示した表示画面では、記憶部14に保存されているプログラムおよびプログラム作成部15により編集中のプログラムのうちからプログラムの選択を受け付ける場合の表示画面である変更前プログラムの選択画面の一例を示している。ユーザは、変更前プログラムの選択画面に表示されたプログラムから1つを選択する。変更前プログラムの選択画面には、図5に示したプログラムA、プログラムB、プログラムCなどのように、プログラムの識別情報、具体的にはプログラムの名称などが一覧表示される。プログラム選択部11は、プログラム作成部15により編集中のプログラムについては、プログラム作成部15からプログラムの識別情報を取得し、記憶部14に格納されているプログラムについては、記憶部14からプログラムの識別情報を取得する。
プログラム選択部11が、ユーザからの選択を受け付ける方法は、どのような方法でもよく、マウスのクリックにより所望のプログラムの選択を受け付ける方法、キーボードの上下ボタンとエンターキーにより選択を受け付ける方法をはじめとして任意の方法を用いることができる。
次に、プログラム選択部11は、変更後プログラムを選択し(ステップS2)、処理を終了する。具体的には、ステップS2では、プログラム選択部11は、ユーザからの変更後プログラムの選択の入力を受け付け、受け付けた入力情報に基づいて、プログラム作成部15により編集中のプログラム、または記憶部14に保存されているプログラムを選択して、選択したプログラムを示す情報を変更後プログラムとして、プログラム差分検出部12へ通知する。ステップS2では、ステップS1と同様に、プログラム選択部11は、選択したプログラムを示す情報とともに、該プログラムの取得元、すなわち記憶部14であるかプログラム作成部15であるかを示す情報をプログラム差分検出部12へ通知する。
具体的には、ステップS2では、まず、プログラム選択部11は、例えば、図6に示す変更後プログラムの選択画面を表示装置23に表示させて、ユーザによるプログラムの選択を待機する。図6は、変更後プログラムの選択画面の一例を示す図である。図6に示した表示画面では、ステップS1で選択された変更前プログラムとともに、変更後プログラムとなり得るプログラムの一覧を示している。変更後プログラムとなり得るプログラムは、変更前プログラムを除いたプログラムである。記憶部14に保存されているプログラムおよびプログラム作成部15により編集中のプログラムのうちからプログラムの選択を受け付ける場合の表示画面である変更前プログラムの選択画面の一例を示している。ユーザは、変更後プログラムの選択画面に表示されたプログラムから1つを選択する。変更後プログラムの選択画面には、図6に示したプログラムA、プログラムB、プログラムCなどのように、プログラムの識別情報、具体的にはプログラムの名称などが一覧表示される。図6の例では、ステップS1において、プログラムAが変更前プログラムとして選択された例を示しているため、図6に示した画面では、図5に示したプログラムの一覧のうちプログラムAを除いたものが表示されている。
なお、上述したステップS1とステップS2の実行の順序は逆であってもよい。以上のステップS1およびステップS2の後、プログラム差分検出部12は、記憶部14またはプログラム作成部15から変更前プログラムおよび変更後プログラムを取得する。なお、プログラム選択部11が変更前プログラムおよび変更後プログラムを記憶部14からまたはプログラム作成部15から取得してプログラム差分検出部12へ出力するようにしてもよい。
図5および図6に示した表示画面は、一例であり、具体的な表示画面は図5および図6に示した例に限定されない。例えば、プログラム作成部15により編集中のプログラムが、変更前プログラムおよび変更後プログラムとして選択される場合に、プログラム作成部15による編集画面が利用されてもよい。図7は、プログラム作成部15による編集画面を利用した場合の変更後プログラムの選択画面の一例を示す図である。図7に示した画面は、プログラム作成部15による編集画面である編集内容表示部分101と差分表示ボタン104とを含む。編集内容表示部分101は、プログラム名表示部分102とプログラム表示部分103とを含む。編集内容表示部分101は、プログラム作成部15により、シーケンスプログラムの作成および編集のために表示される画面である。この画面に、差分表示ボタン104を追加しておき、差分表示ボタン104がマウスなどにより押下されることにより、この編集中のプログラムが変更後プログラムとして選択される。この場合、例えば、プログラム作成部15は、編集前のプログラムの名称を保持しておき、差分表示ボタン104が押下された場合、編集前のプログラムを変更前プログラムとしてプログラム差分検出部12へ出力し、現在編集中のプログラムを変更後プログラムとしてプログラム差分検出部12へ出力するようにしてもよい。
また、変更前プログラムとしては、既存のシーケンスプログラムが選択され、変更後プログラムとしては、該既存のシーケンスプログラムが再利用されて作成されたシーケンスプログラムであることが想定されるが、変更前プログラムおよび変更後プログラムはこれらに限定されず、任意のシーケンスプログラムを指定可能である。
次に、プログラム差分検出部12の動作について説明する。プログラム差分検出部12は、図1に示すように、新規検出部121、削除検出部122、変更検出部123、流用検出部124および出力部125を備える。
新規検出部121は、プログラム選択部11により指定された変更前プログラムと変更後プログラムとをステップごとに比較し、新規ステップであるか否かを確認し、新規ステップの数を計数する。新規ステップは、変更前プログラムに存在せず変更後プログラムに存在するステップである。
削除検出部122は、プログラム選択部11により指定された変更前プログラムと変更後プログラムとをステップごとに比較し、削除ステップであるか否かを確認し、削除ステップの数を計数する。削除ステップは、変更前プログラムに存在し、変更後プログラムに存在しないステップである。
変更検出部123は、プログラム選択部11により指定された変更前プログラムと変更後プログラムとをステップごとに比較し、変更ステップであるか否かを確認し、変更ステップの数を計数する。変更ステップは、変更前プログラムと変更後プログラムとでロジックの異なるステップである。
流用検出部124は、プログラム選択部11により指定された変更前プログラムと変更後プログラムとをステップごとに比較し、流用ステップであるか否かを確認し、流用ステップの数を計数する。流用ステップは、変更前プログラムと変更後プログラムとでロジックが同一で、処理対象のデータが異なるステップである。
出力部125は、変更前プログラムおよび変更後プログラムのそれぞれの全ステップの数を計数し、既存ステップの数を計数する。また、出力部125は、変更前プログラムと変更後プログラムとの比較が全ステップについて終了した場合に、区分情報と、ステップ数情報とを含む差分情報を記憶部14へ格納する。区分情報は、変更前プログラムと変更後プログラムとの各ステップが既存ステップ、新規ステップ、削除ステップ、変更ステップおよび流用ステップのうちいずれであるかを示す情報である。ステップ数情報は、変更前プログラムのステップの数、変更後プログラムのステップの数、新規ステップの数、削除ステップの数、変更ステップの数および流用ステップの数を含む。
図8は、プログラム差分検出部12の処理手順の一例を示す図である。プログラム差分検出部12は、変更後プログラムのステップごとに図8に示す処理を実施する。まず、はじめは、変更前プログラムおよび変更後プログラムの両プログラムの1ステップ目を比較対象として、図8に示す処理を実施する。図8に示すように、まず、プログラム差分検出部12は、変更前すなわち変更前プログラムの比較対象のステップと変更後すなわち変更後プログラムの比較対象のステップと、を比較し、新規ステップであるか否かを判断する(ステップS11)。
ステップS11では、具体的には、新規検出部121が、変更前すなわち変更前プログラムの比較対象のステップと変更後すなわち変更後プログラムの比較対象のステップと、を比較し、両者が一致していれば、新規ステップではないと判断する。両者が一致していない場合、新規検出部121は、変更前プログラムの比較対象のステップと、変更後プログラムの比較対象のステップの次のステップとを比較し、両者が一致していれば、変更後プログラムの比較対象のステップは新規ステップであると判断する。変更前プログラムの比較対象のステップと、変更後プログラムの比較対象のステップの次のステップとを比較し、両者が一致していない場合、新規検出部121は、変更前プログラムの比較対象のステップと、変更後プログラムの比較対象のステップの次のステップの次のステップとを比較する。このようにして、変更後プログラムの比較対象のステップを順次後ろにずらしていき、あらかじめ定めた上限数分ずらした比較を行っても両者が一致しない場合、新規検出部121は、変更後プログラムの比較対象のステップは新規ステップでないと判断する。あらかじめ定めた上限数分ずらした比較までの間に両者が一致した場合、新規検出部121は、変更後プログラムの比較対象のステップは新規ステップであると判断する。
新規ステップであると判断した場合(ステップS11 Yes)、新規検出部121は、処理対象ステップが新規ステップと判断されたことを出力部125へ通知するとともに、該ステップを新規ステップとしてカウントし(ステップS17)、該ステップに関する処理を終了する。具体的には、新規検出部121は、新規ステップの数を計数するためのカウンタN1に1を加算する。なお、N1の初期値は0である。
新規ステップでないと判断した場合(ステップS11 No)、プログラム差分検出部12は、変更前すなわち変更前プログラムの比較対象のステップと変更後すなわち変更後プログラムの比較対象のステップと、を比較し、削除ステップであるか否かを判断する(ステップS12)。
ステップS12では、具体的には、削除検出部122が、変更前すなわち変更前プログラムの比較対象のステップと変更後すなわち変更後プログラムの比較対象のステップと、を比較し、両者が一致していれば、削除ステップではないと判断する。両者が一致していない場合、削除検出部122は、変更前プログラムの比較対象のステップの次のステップと、変更後プログラムの比較対象のステップとを比較し、両者が一致していれば、変更前プログラムの比較対象のステップは削除ステップであると判断する。変更前プログラムの比較対象のステップの次のステップと、変更後プログラムの比較対象のステップとを比較し、両者が一致していない場合、削除検出部122は、変更前プログラムの比較対象のステップの次のステップの次のステップと、変更後プログラムの比較対象のステップとを比較する。このようにして、変更前プログラムの比較対象のステップを順次後ろにずらしていき、あらかじめ定めた上限数分ずらした比較を行っても両者が一致しない場合、削除検出部122は、変更後プログラムの比較対象のステップは削除ステップでないと判断する。あらかじめ定めた上限数分ずらした比較までの間に両者が一致した場合、削除検出部122は、変更前プログラムの比較対象のステップは削除ステップであると判断する。
削除ステップであると判断した場合(ステップS12 Yes)、削除検出部122は、処理対象ステップが削除ステップと判断されたことを出力部125へ通知するとともに、該ステップを削除ステップとしてカウントし(ステップS18)、該ステップに関する処理を終了する。具体的には、削除検出部122は、削除ステップの数を計数するためのカウンタN2に1を加算する。なお、N2の初期値は0である。
削除ステップでないと判断した場合(ステップS12 No)、プログラム差分検出部12は、変更前すなわち変更前プログラムの比較対象のステップと変更後すなわち変更後プログラムの比較対象のステップと、を比較し、変更ステップであるか否かを判断する(ステップS13)。
ステップS13では、具体的には、変更検出部123が、変更前すなわち変更前プログラムの比較対象のステップと変更後すなわち変更後プログラムの比較対象のステップと、を比較し、両者が一致していれば、変更ステップではないと判断する。両者が一致していない場合、変更検出部123は、変更前プログラムの比較対象のステップと、変更後プログラムの比較対象のステップとを比較し、両者でロジックが異なるかを判断する。この際、変更検出部123は、処理対象ステップに対応する個々の命令、または複数の命令の集合に対して、例えば最長共通部分列を検出するアルゴリズムを適用することで、ロジックの変更を検出することができる。具体的には、例えば、変更前プログラムおよび変更後プログラムに対して最長共通部分列を検出するアルゴリズムを適用して共通する部分と異なる部分とを判別し、異なる部分が、論理式などロジックを表す記述であった場合には変更ステップであると判断する。すなわち、変更検出部123は、最長共通部分列を検出するアルゴリズムの適用により異なる部分と判別された部分が、あらかじめ定められた、ロジックを表す記述の条件と一致するか否かを判断する。ロジックを表す記述の条件とは、例えば、論理演算子を含んでいるか等の条件である。ロジックを表す記述の条件は変更検出部123にあらかじめ設定されていてもよいし、記憶部14に格納されていてもよい。後者の場合は、変更検出部123は記憶部14に格納された、ロジックを表す記述の条件を参照して、ロジックを示す部分であるか否かを判定する。なお、変更ステップを検出するためのアルゴリズムは、最長共通部分列検出アルゴリズムに限定されない。両者でロジックが異なる場合、変更検出部123は、変更後プログラムの比較対象のステップは変更ステップであると判断する。また、変更前すなわち変更前プログラムの比較対象のステップと変更後すなわち変更後プログラムの比較対象のステップとが異なり、かつ両者でロジックが同一の場合には、変更検出部123は、変更ステップではないと判断する。
変更ステップであると判断した場合(ステップS13 Yes)、変更検出部123は、処理対象ステップが変更ステップと判断されたことを出力部125へ通知するとともに、該ステップを変更ステップとしてカウントし(ステップS19)、該ステップに関する処理を終了する。具体的には、変更検出部123は、変更ステップの数を計数するためのカウンタN3に1を加算する。なお、N3の初期値は0である。
変更ステップでないと判断した場合(ステップS13 No)、プログラム差分検出部12は、変更前すなわち変更前プログラムの比較対象のステップと変更後すなわち変更後プログラムの比較対象のステップと、を比較し、流用ステップであるか否かを判断する(ステップS14)。
ステップS14では、具体的には、流用検出部124が、変更前すなわち変更前プログラムの比較対象のステップと変更後すなわち変更後プログラムの比較対象のステップと、を比較し、両者が一致していれば、流用ステップではないと判断する。両者が一致していない場合、流用検出部124は、変更後プログラムの比較対象のステップは流用ステップであると判断する。
流用ステップであると判断した場合(ステップS14 Yes)、流用検出部124は、処理対象ステップが流用ステップと判断されたことを出力部125へ通知するとともに、該ステップを流用ステップとしてカウントし(ステップS16)、該ステップに関する処理を終了する。具体的には、流用検出部124は、流用ステップの数を計数するためのカウンタN4に1を加算する。なお、N4の初期値は0である。
流用ステップでないと判断した場合(ステップS14 No)、プログラム差分検出部12は、変更後プログラムの比較対象のステップは、既存ステップであると判断し、該ステップを既存ステップとしてカウントし(ステップS15)、該ステップに関する処理を終了する。具体的には、出力部125は、既存ステップの数を計数するためのカウンタN5に1を加算する。なお、N5の初期値は0である。
以上の処理により、処理対象のステップが既存ステップ、変更ステップまたは流用ステップと判定された場合は、変更後プログラムの比較対象のステップを次のステップに変更するとともに、変更前プログラムの比較対象のステップを次のステップに変更して、再度、図8に示す処理を実施する。処理対象のステップが新規ステップと判定された場合は、変更後プログラムの比較対象のステップを次のステップに変更するとともに、変更前プログラムの比較対象のステップはそのままとして、再度、図8に示す処理を実施する。処理対象のステップが削除ステップと判定された場合は、変更後プログラムの比較対象のステップをそのままとし、変更前プログラムの比較対象のステップを次にステップに変更して、再度、図8に示す処理を実施する。以降、同様に、変更後プログラムおよび変更前プログラムにおいて、処理対象とされていないステップがなくなるまで、比較対象のステップを変更して図8に示す処理を実施する。処理対象とするステップは、出力部125が、新規検出部121、削除検出部122、変更検出部123および流用検出部124へ指示する。出力部125は、変更前プログラムの比較対象のステップのステップ番号と、変更後プログラムの比較対象のステップのステップ番号とを管理する。
なお、図8に示した処理は一例であり、新規ステップ、変更ステップ、流用ステップおよび既存ステップの判別方法は上記の例に限定されない。
出力部125は、上述したように、変更前プログラムと変更後プログラムとの比較が全ステップについて終了した場合に、区分情報と、ステップ数情報とを含む差分情報を記憶部14へ格納する。図9は、差分情報の構成例を示す図である。図9に示した例では、差分情報は、区分情報とステップ数情報とで構成される。区分情報には、変更前プログラムおよび変更後プログラムのそれぞれについて、図8に示した処理により決定された各ステップの区分と各ステップの内容とが格納される。すなわち、区分情報は、1つ以上の命令で構成されるステップごとの、各ステップが流用部であるか否かを示す情報を含む。
また、ステップ数情報は、変更前プログラムおよび変更後プログラムのそれぞれの総ステップ数、新規ステップ、削除ステップ、変更ステップ、流用ステップおよび既存ステップのそれぞれのステップの数を含む。図9に示したステップ数情報のうち、総ステップ数は、変更前プログラムおよび変更後プログラムのそれぞれの、実際に含まれるステップの総数を示している。図9に示した例では、変更前プログラムの総ステップ数は、ステップ数情報の総ステップ数の左側の欄に示すように13である。図9に示したステップ数情報のうち新規ステップ、すなわち新規ステップのステップ数は、変更後プログラムにおいて変更前プログラムに対して新規に追加された新規ステップの数を示す。図9に示した例では、新規ステップの数は2である。図9に示したステップ数情報のうち削除ステップ、すなわち削除ステップの数は、変更後プログラムにおいて変更前プログラムから削除されたステップの数を示し、図9に示した例では、削除ステップの数は1である。変更後プログラムの総ステップ数は、変更前のプログラムの総ステップ数に新規ステップの数を加算し削除ステップの数を減算したものであるから、図9に示した例では、変更後プログラムの総ステップ数は、13+2−1=14である。既存ステップは変更前プログラムと変更後プログラムとで同一のステップである。流用ステップは、変更後のプログラムのうち変更前プログラムのステップが流用されたステップである。したがって、既存ステップおよび流用ステップは、変更前プログラムおよび変更後プログラムとでそれぞれ同一の数となる。以上のことから、変更前プログラムの総ステップ数は、削除ステップ、変更ステップ、流用ステップおよび既存ステップの合計の数となり、図9に示した例では、1+1+5+6=13である。変更前プログラムの総ステップ数は、削除ステップ、新規ステップ、流用ステップおよび既存ステップの合計の数となり、図9に示した例では、2+1+5+6=14である。
図10は、差分情報の別の構成例を示す図である。図10に示すように、差分情報にプログラムの内容自体は含めずに、各プログラムにおけるステップ番号を含めるようにしてもよい。区分情報は、図8に示した処理により決定された各ステップの区分が、変更前プログラムおよび変更後プログラムにおけるそれぞれのステップ番号とともに示されている。区分情報における括弧内の数値は、変更前プログラムおよび変更後プログラムにおけるそれぞれのステップ番号を示す。図10では、変更前プログラムおよび変更後プログラムが図9に示した例と同一である場合の差分情報の別の一例を示している。
プログラム差分表示部13は、記憶部14に格納された差分情報に基づいて、差分表示画面を表示する。具体的には、プログラム差分表示部13は、差分表示画面を表示装置23に表示させる。なお、図10に示す差分情報を用いる場合、プログラム差分表示部13は、差分表示画面が表示する場合に、記憶部14から、差分情報、変更前プログラムおよび変更後プログラムを読み出して、差分情報、変更前プログラムおよび変更後プログラムに基づいて、差分表示画面を表示する。
図11は、差分表示画面の一例を示す図である。図11に示した差分表示画面は、変更前プログラムおよび変更後プログラムのそれぞれの総ステップ数が表示される第1のステップ数表示部201、新規ステップの数が表示される第2のステップ数表示部202、および削除ステップの数が表示される第3のステップ数表示部203を含む。さらに、図11に示した差分表示画面は、変更ステップの数が表示される第4のステップ数表示部204、流用ステップの数が表示される第5のステップ数表示部205および既存ステップの数が表示される第6のステップ数表示部206を含む。さらに、図11に示した差分表示画面は、変更前プログラムに関する情報が表示される第1の領域である変更前プログラム表示領域207、および変更後プログラムに関する情報が表示される第2の領域である変更後プログラム表示領域208を含む。
また、図11に示すように、変更前プログラム表示領域207は、プログラム名表示領域209、ステップ番号表示領域210および差分表示領域211を含む。プログラム名表示領域209には、変更前プログラムの名称が表示され、ステップ番号表示領域210には、変更前プログラムのステップ番号が表示され、差分表示領域211には変更前プログラムの内容が表示される。変更後プログラム表示領域208は、プログラム名表示領域212、ステップ番号表示領域213および差分表示領域214を含む。プログラム名表示領域212には、変更後プログラムの名称が表示され、ステップ番号表示領域213には、変更後プログラムのステップ番号が表示され、差分表示領域214には変更後プログラムの内容が表示される。
差分表示領域211および差分表示領域214では、それぞれ変更前プログラムおよび変更前プログラムにおける各ステップが、各ステップの区分、すなわち、各ステップが既存ステップ、新規ステップ、変更ステップおよび流用ステップのいずれであるかが区別可能なように表示される。例えば、既存ステップ、新規ステップ、変更ステップおよび流用ステップのいずれであるかの区分ごとに異なる色で各ステップに対応する部分がハッチングされる。具体的には、例えば、新規ステップを赤色で、削除ステップを青色で、変更ステップを緑色で、流用ステップを紫色で、既存ステップを白色でそれぞれハッチングする。または、区分ごとに異なる色で各ステップが表示されてもよい。または、区分ごとに異なる記号を付す等により各ステップを表示してもよい。具体的な表示方法は上述した例に限定されず、各ステップの種別が区別可能なような表示であれば、任意の方法を用いることができる。
図11では、各ステップが異なる色でハッチングされる例を示しているが、紙面が白黒表示であるため、ハッチング種別により各ステップを区別して示している。図11に示した新規ステップ部301は、新規ステップに対応するハッチングがなされたステップを示している。図11に示した削除ステップ部302は、削除ステップに対応するハッチングがなされたステップを示している。図11に示した変更ステップ部303,304は、変更ステップに対応するハッチングがなされたステップを示している。図11に示した流用ステップ表示部305〜310は、流用ステップに対応するハッチングがなされたステップを示している。なお、図11では、既存ステップについては、透明ハッチングがなされる例を示している。
以上のように、プログラム差分表示部13は、第2のプログラムすなわち変更後プログラムを構成する各要素が流用部であるか否かを区別して第2のプログラムを表示する表示部である。プログラム差分表示部13は、例えば、色または記号により流用部であるか否かを区別して表示する。また、プログラム差分表示部13は、流用部のステップの数を表示する。また、プログラム差分表示部13は、第2のプログラムを構成する各要素が流用部であるか否かを区別して第2のプログラムが表示される第1の領域と、第1のプログラムが表示される第2の領域とを含む表示画面を表示する。
また、図11に示した例では、第1のステップ数表示部201、第2のステップ数表示部202、第3のステップ数表示部203、第4のステップ数表示部204、第5のステップ数表示部205および第6のステップ数表示部206は、差分表示領域211および差分表示領域214におけるそれぞれが対応するステップと同一のハッチングがなされる例を示している。第1のステップ数表示部201、第2のステップ数表示部202、第3のステップ数表示部203、第4のステップ数表示部204、第5のステップ数表示部205および第6のステップ数表示部206のハッチングを、これに限定されないが、図11のように、差分表示領域211および差分表示領域214におけるそれぞれが対応するステップと同一のハッチングとする場合、ユーザが各区分のステップのステップ数と具体的なステップの内容との対応を容易に把握することができる。
図11に示した画面では、差分表示領域211が上段に示され、差分表示領域214が下段に示されており、差分表示領域211の上にステップの種別ごとのステップ数が表示されているが、これらの配置は図11の配置に限定されない。例えば、差分表示領域211を下段に、差分表示領域214を上段に表示してもよいし、差分表示領域211および差分表示領域214を左右に並べて表示してもよい。また、図11に示した例では、差分表示領域211および差分表示領域214の各ステップの種別を判別するためのハッチングを示しているが、両方の領域で各ステップの種別が区別されていなくてもよく、少なくとも変更後プログラムが表示される差分表示領域214において、各ステップの種別が判別可能なような表示がなされていればよい。さらには、変更前プログラムが表示される差分表示領域211自体を表示しなくてもよい。また、差分表示領域211および差分表示領域214と、ステップの種別ごとのステップ数とを別の画面に表示してもよい。
以上のように、本実施の形態のプログラム作成装置1は、変更前プログラムと変更後プログラムを比較し、比較により得られた差分が、それぞれ新規、削除、変更、流用のいずれであるかを判別し、判別結果を差分情報として記憶部14に記憶するようにした。このように、本実施の形態のプログラム作成装置1は、差分が流用であるか否か、すなわち、ロジックは変更されずにデータだけが変更される箇所であるか否かを判別することができる。したがって、変更前プログラムが再利用されたプログラムであり、変更後プログラムが再利用により作成されたシーケンスプログラムである場合、再利用により作成されたシーケンスプログラムの変更箇所がロジックの変更を伴わない変更であるか否かを判別することができる。したがって、ロジックは変更されずにデータだけが変更される箇所に対して、ロジックが変更された場合と同等の試験が実施されることを防ぐことができ、試験工数を抑制することができる。また、差分情報を表示することにより、ユーザが、ロジックは変更されずにデータだけが変更される箇所を容易に把握できるという効果を奏することができる。
以上の実施の形態に示した構成は、本発明の内容の一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、本発明の要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。
上述した課題を解決し、目的を達成するために、本発明にかかるプログラム比較装置は、第1のプログラムと第2のプログラムとの差分を検出し、差分のうち前記第1のプログラムと前記第2のプログラムとで演算の内容が同一でデータが異なる箇所である流用箇所を求め、流用箇所を示す情報である区分情報を求める差分演算部と、区分情報を記憶する記憶部と、第1のプログラムおよび第2のプログラムを構成するステップについてステップ番号ごとに区分情報をステップ番号とともに表示する表示部と、を備える。