JP2003029978A - 同形パターン検出システム - Google Patents
同形パターン検出システムInfo
- Publication number
- JP2003029978A JP2003029978A JP2001214037A JP2001214037A JP2003029978A JP 2003029978 A JP2003029978 A JP 2003029978A JP 2001214037 A JP2001214037 A JP 2001214037A JP 2001214037 A JP2001214037 A JP 2001214037A JP 2003029978 A JP2003029978 A JP 2003029978A
- Authority
- JP
- Japan
- Prior art keywords
- isomorphic
- lexical
- detection system
- pattern detection
- clone
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Machine Translation (AREA)
- Document Processing Apparatus (AREA)
- Stored Programmes (AREA)
Abstract
列テキストから、簡単な処理で同形パターンを抽出す
る。 【解決手段】本発明の同形検出アルゴリズムは、対象テ
キストに対して、字句解析(トークンの列に切る)
(S110)、変形ルールを適用しトークン列を変形
(S120)、パラメータ変換(S130)後、マ
ッチングで同形クローンを検出(S140)、上記と
逆の変形処理を行い、そのクローンの位置(ファイルま
たは行)を出力する(S150)。これにより、対象テ
キストの同形(クローン)を検出することができる。
Description
ログラム等のテキストの中から同形パターンを検出する
ことに関するものである。
ソースプログラムの部分的なコピーが、「カット&ペー
スト」等で頻繁に行われる。そのような同形部分は、ソ
ースプログラムに何らかの理由で変更や修正が必要にな
った時、コピーされた部分に対して、修正を要するた
め、同形部分を効率良く検索する必要がある。又、コン
ピュータ・プログラムの違法複製を短時間で検出する方
法が望まれている。違法複製を検出する場合は、ほぼ同
形を見いだす必要がある。特に数百万行を超えるオーダ
ー(大スケール・プログラム)のソフトウェアの中から
同形のパターンを短時間で発見する方法が、プログラム
開発や保守に必要である。
類似したソース・コード断片をコードクローンあるいは
単にクローンと言う。従来から知られているクローン検
出方法としては、下記のものがある。 (1)Baxter等の方法(Baxter, et.al. "Clone Detec
tion Using Abstract Syntax Trees" Proc. of IEEE
International Conference on Software Maintenance '
98 pp368-377 (1998) を参照) この方法では構文解析して抽象構文木(AST)を作
る。例えば、x=y+zでは、1層目に=、2層目にx
とtで、tの下にyとzがくる。この抽象構文木を作る
のに時間がかかる。又、x=y+_等の不完全なプログラ
ムでは、構文解析が出来ない。 (2)Baker等の方法(Baker, "A Program for Ident
ifying Duplicated Code" Proc. of Computer Science
and Statistics (1992) 参照) これは、テキストを行毎に分割し、各字句を特定の記号
に変換する。例えばx=y+zでは、これを$P=$P+
$P=15(例えば15)とする。1行を1個のトーク
ンとする。行単位で比較するもので高速である。しかし
ながら、行の途中に改行が入ると発見出来ない。
的としてクローン検出を行う場合、検出手法が持たなけ
ればならない、あるいは持つことが好ましい性質には,
以下のようなものがある。 ・大規模ソフトウェアのソースコードを実用時間で解析
できること。 ・実用上興味のあるクローンを発見できること。 一般に大規模ソフトウェアからは多数のクローンが検出
されるが、それらのクローンの大きさ、分布範囲などは
千差万別である。また、クローンの中には、配列の初期
化など,クローンであることがわかっても共通化できな
いか、あるいは共通化してもあまり保守性の向上に寄与
しないと思われるものもある。したがって、適切な手段
によってクローンを選択する必要がある。 ・入力されるソースコードの記述言語の多様性を扱える
こと。 プログラミング言語にはしばしば方言がある。また、ひ
とつのソフトウェアシステムの開発に複数のプログラミ
ング言語が使われることもある。そのような場合に備え
て、複数のプログラミング言語に容易に対応できること
が望ましい。
グラムのソースコード等の様々な一次元配列テキストか
ら、簡単な処理で同形パターンを抽出することである。
めに、本発明は、固定字句と自由字句とを含む対象テキ
ストから、同形パターンを検出する同形パターン検出シ
ステムであって、意味のある字句を抽出する字句解析手
段と、前記字句解析手段の結果に対して、対象テキスト
に応じてあらかじめ定めた規則による変形を行う変形手
段と、前記変形手段の結果に対して、自由字句を特定の
字句に置き換えるパラメータ変換手段と、前記パラメー
タ変換手段の結果に対して、同形を検出する同形検出手
段と、検出された同形部分を出力する同形出力手段とを
備えることを特徴とする同形パターン検出システムであ
る。前記対象テキストは、プログラミング言語で記述さ
れたコンピュータ・プログラムとすることができる。同
形パターン検出システムをコンピュータ・システムに構
築させるプログラムやそのプログラムを格納した記録媒
体も本発明である。
実施形態を説明する。本発明の対象となるテキストとし
ては、C,C++,Java,Cobolなどの言語で
書かれているコンピュータ・プログラムが対象であり、
特にオブジェクト指向の言語であるC++やJava等
で記述されたプログラムに対して有効である。さて、文
字は、複数個連接して並べることにより、意味のある単
語(字句)を構成する。テキスト中の字句と字句との間
には、空白文字,改行文字や制御文字など、字句の構成
に関係のない文字が存在する場合もある。字句は、あら
かじめ対象のテキストの種類に応じて決められた予約
語,キーワード,演算子,分離子などの固定字句と、そ
の対象テキストごとに導入されるリテラルや識別語など
の自由字句に分けられる。複数のテキストを対象とする
場合は、個々のテキストを連接して一つの対象テキスト
とする。本発明は、この対象テキストの中に含まれる同
形の部分を検出して出力する。同形の部分とは、以下で
述べる字句解析、変形ルール適用、パラメータ変換を経
て、同形検出アルゴリズムで同じと判定された字句系列
に対応した、対象テキストの部分をいう。
フローチャートである。このフローチャートに従って、
C++のプログラム(図2参照)を対象テキストとした
例を用いて、詳しく説明する。図1のフローチャートに
示すように、同形検出アルゴリズムは、対象テキストに
対して、字句解析(トークンの列に切る)(S11
0)、変形ルールを適用しトークン列を変形(S12
0)、パラメータ変換(S130)後、マッチング
で同形クローンを検出(S140)、上記と逆の変形
処理を行い、そのクローンの位置(ファイルまたは行)
を出力する(S150)。以下に、それぞれの処理につ
いて詳しく説明する。
象テキストの文字列の中から、空白文字,改行文字,制
御文字,演算子など、一つの字句の終わりに来るものを
認識し、字句(トークン)を抽出する。この段階で、空
白文字,改行文字,コメント文字,制御文字など、字句
の構成に関係の無い文字は消去される。図2に示したC
++のプログラムは、処理されると、図3に示されてい
るような結果が得られる。なお、図3では、抽出した字
句(トークン)を四角で囲って、しかも、対応関係がわ
かるように、字句(トークン)の間に空白文字1つか、
もしくは改行文字1つを挿入しているが、実際のシステ
ムではそのような文字の挿入等は行われない。
キストの種類に応じて、別途作成された変形ルールのテ
ーブルにより、字句の削除や変形を行う。プログラムの
場合は、プログラミング言語に対応したテーブルを作成
する。木構造または階層構造を持つ識別子は、最下層の
識別子のみを抜粋して置換する。C++のための変形ル
ールの表を図7に示す。図7に示した表でも理解できる
ように、例えば、クラス名やパッケージ名が付加的につ
けられている場合にそれらの省略した形と同形となるよ
うに、クラス名やパッケージ名に相当する字句を削除し
ている。また、文頭に出現しやすい初期化文は、同形の
ものが繰り返し現れるので、初期化文同士が同形になら
ないよう、排他的な名前に変換する。また、プログラム
・テキストにおいては、ファイルや関数、手続きの切れ
目など、論理的・物理的な切れ目を越えて同形部が存在
しないように、切れ目の終わりに排他的な名前の字句を
付加する。図4に、図3の字句抽出したものに対して変
形ルールを適用した結果を示す。1,3,11,13行
目が変形され、短くなっているのがわかる。
パラメータ変換(置換)は、自由字句を同一の字句とし
て認識するように、特定の字句に変換する。変換結果を
示している図5の例では、$pに変換している。固定字
句(予約語や演算子等)は、そのままの名前を用いる。
又、先頭に成り得るトークンを限定する。
句系列の中から、同じ部分系列をもつものを高速アルゴ
リズムで発見する。実施形態のシステムでは、既知の技
術であるサフィックス木を用いたアルゴリズムを用い
て、長さがある値以上である、同じ部分系列を発見して
いる。この同形検出は二次元の散布図で表すことがで
き、等価なペアの位置、長さを示すことができる。図6
は、図5に示した字句系列に関する二次元の散布図であ
り、点のある部分が同じ字句であることを示している。
一定以上同じ字句の連続する部分は、右下下がりの直線
として表現される。
の字句系列が、元のテキスト上のどこに相当するのかを
辿り、逆手順で元のソースコードの位置を出力する。図
2のC++のプログラムでは、1−7行と11−17行
が同形であり、8−10行と19−21行が同形である
と出力する。もちろん、同形のテキストを対比できる形
式で出力することもできる。
の例を用いて説明したが、主として変形ルールを変える
ことにより、他の言語で記述されたプログラムに対して
適用することができる。図8にJavaに適用する場合
の変形ルールの表を示す。また、本発明の手法はプログ
ラムに限ることなく、HTML,SGML,XMLなど
の構造化テキスト,英語や日本語などの通常の文章,D
NA配列(塩基配列)やタンパク質(アミノ酸配列)な
どの、文字や塩基などの構成要素を一次元に並べた文字
列にも適用することが可能である。その場合、その文書
に関連する変形ルールを見いだすことが必要である。
(登録商標)のライブラリであるJDK1.2.2に対
して適用した例を説明する。JDKは、ソース・ファイ
ルが公開されている。公開されているJDKの、サンプ
ルとデモ・プログラムを除く、すべてのソース・プログ
ラムに適用した。入力ファイルの規模は50万行、ファ
イル数で1648である。クローン検出に要した時間
は、Pentium(登録商標)III 650MHz
および1GBのRAMをもつパソコンで、約3分間であ
る。その処理結果を、図9のクローンの散布図に示す。
グラフの両軸はソース・ファイルの行を表現している。
ソース・ファイルは、パスの辞書順に並べられているの
で、同じディレクトリにあるソース・ファイルは軸上で
も近くに存在する。クローンは右下がりの線分で表現さ
れる。クローンは、取り除いている主対角線の下側にだ
け図示している。図9では、線分はほとんど点にしか見
えないが、クローンの長さが数十行であり、軸のスケー
ルと比べて小さいためである。ほとんどの線分は主対角
線のすぐ近くに位置している。これは、単一のファイル
か、あるいは近傍のファイルの間でクローンが発生して
いることを意味する。図中Aで示される込み合った部分
は、src/javax/swing/plaf/mu
lti/*.javaのソース・ファイルに対応する。
これらのファイルは互いに類似しており、それらのいく
つかは、親クラスを除いて、全く同じクラス定義を含ん
でいた。最長のクローン(349行)は、図中Bで示さ
れており、src/java/util/array
s.javaで発見された。
本発明のクローン検出と完全一致によるクローン検出と
を行った場合の比較を示す図である。図10では、発見
されたクローンの長さの度数分布を示している。完全一
致で発見されるクローンは、全く同じトークンの並びを
意味している。全体的な傾向として、クローンが長いほ
ど、出現回数が減っている。図10から分かるように、
本発明によるクローン検出を用いると、より微妙なクロ
ーンを検出することができる。
大規模なソフトウェアやDNAのテキストの中から、類
似のパターンを効率的に抽出することができる。この手
法を用いることで、ソフトウエアの違法複製が行われて
いないかを調べることができる。
ある。
ドを示す図である。
示す図である。
Claims (4)
- 【請求項1】 固定字句と自由字句とを含む対象テキス
トから、同形パターンを検出する同形パターン検出シス
テムであって、 意味のある字句を抽出する字句解析手段と、 前記字句解析手段の結果に対して、対象テキストに応じ
てあらかじめ定めた規則による変形を行う変形手段と、 前記変形手段の結果に対して、自由字句を特定の字句に
置き換えるパラメータ変換手段と、 前記パラメータ変換手段の結果に対して、同形を検出す
る同形検出手段と、 検出された同形部分を出力する同形出力手段とを備える
ことを特徴とする同形パターン検出システム。 - 【請求項2】 請求項1に記載の同形パターン検出シス
テムにおいて、 前記対象テキストは、プログラミング言語で記述された
コンピュータ・プログラムであることを特徴とする同形
パターン検出システム。 - 【請求項3】 請求項1又は2に記載の同形パターン検
出システムをコンピュータ・システムに構築させるプロ
グラムを格納した記録媒体。 - 【請求項4】 請求項1又は2に記載の同形パターン検
出システムをコンピュータ・システムに構築させるプロ
グラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001214037A JP2003029978A (ja) | 2001-07-13 | 2001-07-13 | 同形パターン検出システム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001214037A JP2003029978A (ja) | 2001-07-13 | 2001-07-13 | 同形パターン検出システム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2003029978A true JP2003029978A (ja) | 2003-01-31 |
Family
ID=19048925
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001214037A Pending JP2003029978A (ja) | 2001-07-13 | 2001-07-13 | 同形パターン検出システム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2003029978A (ja) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008020972A (ja) * | 2006-07-11 | 2008-01-31 | Hitachi Ltd | ソフトウエア解析システム |
JP2008046695A (ja) * | 2006-08-11 | 2008-02-28 | Kobe Univ | 類似度評価プログラム、類似度評価装置及び類似度評価方法 |
JP2009086814A (ja) * | 2007-09-28 | 2009-04-23 | Hitachi Software Eng Co Ltd | ソースコード管理システム |
JP2009237691A (ja) * | 2008-03-26 | 2009-10-15 | Fuji Electric Systems Co Ltd | ソフトウェア開発支援装置、プログラム及びブロック図検索方法 |
JP2010061301A (ja) * | 2008-09-02 | 2010-03-18 | Ns Solutions Corp | クローンコード検出装置、クローンコード検出方法及びプログラム |
JP2011096082A (ja) * | 2009-10-30 | 2011-05-12 | Hitachi Ltd | プログラム解析方法、プログラム解析プログラムおよびプログラム解析装置 |
US10459704B2 (en) | 2015-02-10 | 2019-10-29 | The Trustees Of Columbia University In The City Of New York | Code relatives detection |
WO2022034919A1 (ja) * | 2020-08-13 | 2022-02-17 | 株式会社Sider | 情報処理装置、情報処理方法、プログラム及び情報処理システム |
-
2001
- 2001-07-13 JP JP2001214037A patent/JP2003029978A/ja active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008020972A (ja) * | 2006-07-11 | 2008-01-31 | Hitachi Ltd | ソフトウエア解析システム |
JP2008046695A (ja) * | 2006-08-11 | 2008-02-28 | Kobe Univ | 類似度評価プログラム、類似度評価装置及び類似度評価方法 |
JP4560608B2 (ja) * | 2006-08-11 | 2010-10-13 | 国立大学法人神戸大学 | 類似度評価プログラム、類似度評価装置及び類似度評価方法 |
JP2009086814A (ja) * | 2007-09-28 | 2009-04-23 | Hitachi Software Eng Co Ltd | ソースコード管理システム |
JP2009237691A (ja) * | 2008-03-26 | 2009-10-15 | Fuji Electric Systems Co Ltd | ソフトウェア開発支援装置、プログラム及びブロック図検索方法 |
JP2010061301A (ja) * | 2008-09-02 | 2010-03-18 | Ns Solutions Corp | クローンコード検出装置、クローンコード検出方法及びプログラム |
JP2011096082A (ja) * | 2009-10-30 | 2011-05-12 | Hitachi Ltd | プログラム解析方法、プログラム解析プログラムおよびプログラム解析装置 |
US10459704B2 (en) | 2015-02-10 | 2019-10-29 | The Trustees Of Columbia University In The City Of New York | Code relatives detection |
WO2022034919A1 (ja) * | 2020-08-13 | 2022-02-17 | 株式会社Sider | 情報処理装置、情報処理方法、プログラム及び情報処理システム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4427500B2 (ja) | 意味解析装置、意味解析方法および意味解析プログラム | |
Nourian et al. | Demystifying automata processing: GPUs, FPGAs or Micron's AP? | |
US20040172234A1 (en) | Hardware accelerator personality compiler | |
EP0715265A2 (en) | Machine translation system | |
PT1316220E (pt) | Processo de compressao/descompressao de documentos estruturados | |
JP2003029978A (ja) | 同形パターン検出システム | |
CN116149669B (zh) | 一种基于二进制文件的软件成分分析方法、装置以及介质 | |
CN115237760A (zh) | 一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统 | |
CN112069305A (zh) | 数据筛选方法、装置及电子设备 | |
WO2023138078A1 (zh) | 编程语言的解析方法及装置、非易失性存储介质 | |
Dardel et al. | DNAid: a Macintosh full screen editor featuring a built-in regular expression interpreter for the search of specific patterns in biological sequences using finite state automata | |
WO2022044343A1 (ja) | 抽出装置、抽出方法および抽出プログラム | |
CN1545665A (zh) | 用于多分析器架构的预测串联算法 | |
CN113032366A (zh) | 基于Flex和Bison的SQL语法树解析方法 | |
KR0123238B1 (ko) | 어절구조 특성을 이용한 형태소 분석 시스팀 및 분석 방법 | |
CN112925768A (zh) | 一种基于Protobuf协议的HBASE数据库解析方法及系统 | |
JPH03105566A (ja) | 抄録作成方式 | |
US7730108B2 (en) | Information processing apparatus and method, and program | |
Yu et al. | Design and implementation of fault injection based on abstract syntax tree of C Program | |
Ma et al. | Graphchainer: Colinear chaining for accurate alignment of long reads to variation graphs | |
Scott et al. | Multiple input parsing and lexical analysis | |
WO2022230191A1 (ja) | WebAPI定義情報生成装置、WebAPI定義情報生成方法及びプログラム | |
JP2009099030A (ja) | 処理内容判定装置および処理内容判定方法 | |
JPH07334504A (ja) | 日本語処理システム | |
JP2007004503A (ja) | プログラム変換方式およびプログラム変換方法およびコード変換プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060721 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060822 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20060906 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061019 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20061011 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20070403 |