(57)【要約】【課題】プログラムソースの実質的な差分を検出する。【解決手段】２以上のプログラムソースをそれぞれトークン分解し、トークン列を生成するトークン分解生成手段と、前記トークン分解生成手段によって生成されたそれぞれの前記トークン列を相互に比較することにより、トークン差分を検出するトークン差分検出手段とを備える。【選択図】図１
2009176108.tif 000002
【特許請求の範囲】
【請求項１】
２以上のプログラムソースをそれぞれトークン分解し、トークン列を生成するトークン分解生成手段と、
前記トークン分解生成手段によって生成されたそれぞれの前記トークン列を相互に比較することにより、トークン差分を検出するトークン差分検出手段と
を備えることを特徴とするプログラムソース差分検出装置。
【請求項２】
前記トークン分解生成手段によって生成された前記トークン列を、記憶し保存するトークン列記憶保存手段を更に備え、
前記トークン差分検出手段が、
前記トークン列記憶保存手段によって保存された前記トークン列を、それぞれ読み出すトークン列読出手段を備える
ことを特徴とする請求項１に記載のプログラムソース差分検出装置。
【請求項３】
前記トークン列記憶保存手段は、データベースによって形成される
ことを特徴とする請求項２に記載のプログラムソース差分検出装置。
【請求項４】
プログラムソース差分検出装置におけるプログラムソース差分検出方法であって、
２以上のプログラムソースをそれぞれトークン分解し、トークン列を生成するトークン分解生成ステップと、
前記トークン分解生成ステップによって生成されたそれぞれの前記トークン列を相互に比較することにより、トークン差分を検出するトークン差分検出ステップと
を備えることを特徴とするプログラムソース差分検出方法。
【請求項５】
前記トークン分解生成ステップにおいて生成された前記トークン列を、記憶し保存するトークン列記憶保存ステップを更に備え、
前記トークン差分検出ステップが、
前記トークン列記憶保存ステップにおいて保存された前記トークン列を、それぞれ読み出すトークン列読出ステップを備える
ことを特徴とする請求項４に記載のプログラムソース差分検出方法。
【請求項６】
前記トークン列記憶保存ステップは、データベースによって形成される
ことを特徴とする請求項５に記載のプログラムソース差分検出方法。
【請求項７】
プログラムソース差分検出装置におけるプログラムソース差分検出プログラムであって、
２以上のプログラムソースをそれぞれトークン分解し、トークン列を生成するトークン分解生成手順と、
前記トークン分解生成手順によって生成されたそれぞれの前記トークン列を相互に比較することにより、トークン差分を検出するトークン差分検出手順と
をコンピュータに実行させることを特徴とするプログラムソース差分検出プログラム。
【請求項８】
前記トークン分解生成手順によって生成された前記トークン列を、記憶し保存するトークン列記憶保存手順を更に備え、
前記トークン差分検出手順が、
前記トークン列記憶保存手順によって保存された前記トークン列を、それぞれ読み出すトークン列読出手順
をコンピュータに実行させることを特徴とする請求項７に記載のプログラムソース差分検出プログラム。
【請求項９】
前記トークン列記憶保存手順は、データベースによって形成される
ことを特徴とする請求項８に記載のプログラムソース差分検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムソース差分検出装置及びプログラムソース差分検出方法に関し、特に、プログラムソースを修正する際に適用可能なプログラムソース差分検出装置及びプログラムソース差分検出方法に関する。
【背景技術】
【０００２】
設計者がプログラムを開発する場合、特にプログラムソースを修正する過程においては、修正前と修正後とのプログラムソースの比較を行い、修正したことによる異なる箇所を見つけるような作業を行うことがある。
【０００３】
この場合、設計者は、テキスト比較ツール等を使用して修正の前後の比較や不一致箇所の抽出を、修正個所の検出として行ってきた。
【０００４】
このため、例えば、プログラムの動作としては同じ動作結果となるにも関わらず、プログラムソース上では改行やインデントなどの記述位置の形式的な違いがあるだけで、異なる行とみなされたり、修正された行として検出されていた。
【０００５】
そこで、特許文献１には、Ｃ言語のプログラムソースに特化した、プログラムソースを比較するＣ言語プログラム差分情報取得方式に関するものが記載されている。
【０００６】
また、特許文献２には、プログラムソース中に、或る特定パターン（同形パターン）が含まれていないかを検出する同形パターン検出に関するものが記載されている。
【特許文献１】特開平０５−１５８７６５号公報
【特許文献２】特開２００３−０２９９７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、特許文献１に記載されたＣ言語プログラム差分情報取得方式に関するものは、Ｃ言語で記載された原始プログラムから字句解析を行い、その字句解析結果から前処理命令と実プログラムを解析し、前処理命令と実プログラムとから論理行を生成している。
【０００８】
そして、生成された論理行をそれぞれ比較するようになっており、Ｃ言語により記載されたプログラムソースを単に比較しているに過ぎないものである。
【０００９】
また、特許文献２に記載された同形パターン検出に関するものは、対象テキストに含まれる自由字句を、特定の字句に置き換えるパラメータ変換を行い、パラメータ変換の結果から、或る同形パターンが含まれているかを検出するものである。
【００１０】
従って、プログラムの動作としては同じ動作結果となるにも関わらず、プログラムソース上では改行やインデントなどの記述位置の形式的な違いがあるだけで、異なる行とみなされて、実質的な差分が分かりにくいという問題があった。
【００１１】
そこで、本発明は、上記問題点を鑑みてなされたものであり、プログラムソースの実質的な差分を検出するプログラムソース差分検出装置、プログラムソース差分検出方法及びプログラムソース差分検出プログラムを実現することを目的とする。
【課題を解決するための手段】
【００１２】
本発明に係るプログラムソース差分検出装置は、２以上のプログラムソースをそれぞれトークン分解し、トークン列を生成するトークン分解生成手段と、前記トークン分解生成手段によって生成されたそれぞれの前記トークン列を相互に比較することにより、トークン差分を検出するトークン差分検出手段とを備えることを特徴とする。
【００１３】
本発明に係るプログラムソース差分検出方法は、プログラムソース差分検出装置におけるプログラムソース差分検出方法であって、２以上のプログラムソースをそれぞれトークン分解し、トークン列を生成するトークン分解生成ステップと、前記トークン分解生成ステップによって生成されたそれぞれの前記トークン列を相互に比較することにより、トークン差分を検出するトークン差分検出ステップとを備えることを特徴とする。
【００１４】
本発明に係るプログラムソース差分検出プログラムは、プログラムソース差分検出装置におけるプログラムソース差分検出プログラムであって、２以上のプログラムソースをそれぞれトークン分解し、トークン列を生成するトークン分解生成手順と、前記トークン分解生成手順によって生成されたそれぞれの前記トークン列を相互に比較することにより、トークン差分を検出するトークン差分検出手順とをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１５】
本発明によれば、プログラムソース差分検出装置は、トークン分解した結果により差分を比較しているので、改行やインデント付けされた場合でも、意味的に同じプログラムであることを判別することができる。
【００１６】
これにより、プログラムソースの実質的な差分を検出するプログラムソース差分検出装置、プログラムソース差分検出方法及びプログラムソース差分検出プログラムを実現することができる。
【発明を実施するための最良の形態】
【００１７】
次に、本発明を実施するための実施形態１について、図面を参照して詳細に説明する。
（実施形態１）
【００１８】
（１）プログラムソース差分検出装置の構成
図１を参照すると、本発明に係る実施形態１のプログラム差分検出装置１は、トークン分解部１１と、トークン列データベース１２及びトークン列データベース１３と、トークン差分検出部１４とを備えている。
【００１９】
また、プログラムソース２及びプログラムソース３は、プログラム差分検出装置１を介して、トークン分解部１１に読み込まれる。
【００２０】
トークン分解部１１は、プログラムソース２及びプログラムソース３をそれぞれ読み込み、トークン列に分解後、それぞれのトークン列を、トークン列データベース１２及びトークン列データベース１３に保存する。
【００２１】
なお、トークン列データベース１２及びトークン列データベース１３は、実施形態１ではデータベースを用いて形成されているが、ハードディスクやメモリなどによって保存領域として形成されるようにしても良い。
【００２２】
トークン差分検出部４は、トークン列データベース１２及びトークン列データベース１３からそれぞれのトークン列を読み込み、差分を検出して差分リスト４を出力する。
【００２３】
差分リスト４は、トークン差分検出部１４からプログラム差分検出装置１を介して外部に出力される。
【００２４】
ここで、トークン（token）とは、特定の区切り文字を含まないような文字列をいう。
【００２５】
（２）プログラムソース差分検出装置におけるプログラムソース差分検出処理の動作
次に、図１を参照しながら、実施形態１のプログラムソース差分検出処理の動作について詳細に説明する。
【００２６】
まず、プログラム差分検出装置１は、トークン分解部１１を起動する。
【００２７】
トークン分解部１１は、プログラム差分検出装置１の外部からプログラムソース２を読み込み、トークン分解を行うと共に、トークン列をトークン列データベース１２に出力する。
【００２８】
また、トークン分解部１１は、プログラム差分検出装置１の外部からプログラムソース３を読み込み、トークン分解を行うと共に、トークン列をトークン列データベース１３に出力する。
【００２９】
トークン列データベース１２及びトークン列データベース１３は、トークン分解部１１から出力されたトークン列を、それぞれ保存する。
【００３０】
次に、プログラム差分検出装置１は、トークン差分検出部１４を起動する。
【００３１】
トークン差分検出部１４は、トークン列データベース１２及びトークン列データベース１３から保存されているトークン列を読み込み、トークンの突合せを行い、差分情報を差分リスト１４として出力する。
【００３２】
ここで、図２のプログラムソースを参照して、ＣＯＢＯＬ（common business oriented language）プログラムソースのトークン分解の実施例について詳細に説明する。
【００３３】
図２のＣＯＢＯＬプログラムソースをトークン分解すると、図３に示すようなトークン列に分解される。
【００３４】
ここで、ＣＯＢＯＬの言語要素は、予約語、ユーザ語、文字定数、コメント行、などである。
【００３５】
またトークンは、行、カラム、トークンタイプ、更にトークンタイプ別の拡張部を基本的に持っている。
【００３６】
図２のプログラムソースの例では、「IDENTIFICATION」（予約語）、「DIVISION」（予約語）、「．」（予約語）、「PROGRAM-ID」（予約語）、「．」（予約語）、「TEST01」（ユーザ語）、「．」（予約語）、「*テストプログラム」（コメント行）という個々のトークンに分解される。
【００３７】
図３は、これらをトークン列として表形式にまとめて記載したものである。
【００３８】
次に、図４から図７を参照して、差分として差分リスト４に検出される検出例について詳細に説明する。
【００３９】
図４のＣＯＢＯＬプログラム１は、プログラムソース２として提供され、トークン分解部１１に読み込まれる。
【００４０】
この図４のＣＯＢＯＬプログラム１を、図２で説明したトークン分解規則によって分解すると、図５に示すようなトークン列１が、分解結果として得られる。
【００４１】
同様に、図６のＣＯＢＯＬプログラム２は、プログラムソース３として提供され、トークン分解部１１に読み込まれる。
【００４２】
この図６のＣＯＢＯＬプログラム２を、図２で説明したトークン分解規則によって分解すると、図７に示すようなトークン列２が、分解結果として得られる。
【００４３】
ここで、図４のＣＯＢＬプログラム１と図６のＣＯＢＯＬプログラム２では、「TEST01」というユーザ語の記述されている位置が異なる。
【００４４】
従って、従来のプログラムソース差分検出装置では、図４のＣＯＢＯＬプログラム２と図６のＣＯＢＯＬプログラム３とを対比し、２行目と３行目が異なるので、２行目と３行目が修正個所又は異なる箇所として、差分リスト４に出力された。
【００４５】
しかしながら、図５に示すトークン列１と図６に示すトークン列２とでは、「TEST01」が記述されている行及びカラムは異なるが、トークンタイプの出現順序等は変わらない。
【００４６】
すなわち、図５及び図７に示す２つのトークン列１とトークン列２は、意味的には同一であると判断され、差分を検出しないようにすることができる。
【００４７】
このように、このプログラムソース差分検出処理では、２つのプログラムソースから、それぞれトークン分解することにより、実質的に異なる箇所のみを差分として、差分リスト４に検出することができる。
【００４８】
（３）実施形態１におけるプログラムソース差分検出装置の効果
本実施形態によれば、プログラムソース差分検出装置は、プログラムソースレベルの比較ではなく、トークン分解した結果で差分の比較をしている。
【００４９】
これにより、プログラムソースが、改行やインデント付けされた場合でも、意味的に同じプログラムであることを容易に判別することができる。
【００５０】
なお、本実施形態では、プログラムソース差分検出装置のトークン分解部１１がトークン分解生成手段を形成し、トークン差分検出部１４がトークン差分検出手段を形成するようになっている。
【００５１】
しかしながら、本実施形態はこれに限定されるものではなく、設計ツールとしてソフトウェアやプログラム等により、本発明に係る実施形態を形成するようにしても良い。
【産業上の利用可能性】
【００５２】
本発明によれば、ソフトウェアの分野において、プログラムソースに関する差分検出という用途に適用できる。
【図面の簡単な説明】
【００５３】
【図１】本発明に係るプログラム差分検出装置の構成を示すブロック図である。
【図２】本発明に係るプログラム差分検出装置のプログラム差分検出処理で使用するＣＯＢＯＬプログラムソースの一例である。
【図３】本発明に係るプログラム差分検出装置のプログラム差分検出処理でトークン分解されたトークン列の一例である。
【図４】本発明に係るプログラム差分検出装置のプログラム差分検出処理で使用するプログラムソース２の一例である。
【図５】本発明に係るプログラム差分検出装置のプログラム差分検出処理でトークン分解されたトークン列１の一例である。
【図６】本発明に係るプログラム差分検出装置のプログラム差分検出処理で使用するプログラムソース３の一例である。
【図７】本発明に係るプログラム差分検出装置のプログラム差分検出処理でトークン分解されたトークン列２の一例である。
【符号の説明】
【００５４】
１  プログラム差分検出装置
２、３  プログラムソース
４  差分リスト
１１  トークン分解部
１２、１３  トークン列データベース
１４  トークン差分検出部
【図１】
2009176108.tif 000003
【図２】
2009176108.tif 000004
【図３】
2009176108.tif 000005
【図４】
2009176108.tif 000006
【図５】
2009176108.tif 000007
【図６】
2009176108.tif 000008
【図７】
2009176108.tif 000009