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
Application number
JP2001214037A
Other languages
English (en)
Inventor
Katsuro Inoue
克郎 井上
Shinji Kusumoto
真二 楠本
Toshihiro Kamiya
年洋 神谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Japan Science and Technology Agency
Original Assignee
Japan Science and Technology Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Japan Science and Technology Corp filed Critical Japan Science and Technology Corp
Priority to JP2001214037A priority Critical patent/JP2003029978A/ja
Publication of JP2003029978A publication Critical patent/JP2003029978A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Machine Translation (AREA)
  • Document Processing Apparatus (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】プログラムのソースコード等の様々な一次元配
列テキストから、簡単な処理で同形パターンを抽出す
る。 【解決手段】本発明の同形検出アルゴリズムは、対象テ
キストに対して、字句解析(トークンの列に切る)
(S110)、変形ルールを適用しトークン列を変形
(S120)、パラメータ変換(S130)後、マ
ッチングで同形クローンを検出(S140)、上記と
逆の変形処理を行い、そのクローンの位置(ファイルま
たは行)を出力する(S150)。これにより、対象テ
キストの同形(クローン)を検出することができる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータ・プ
ログラム等のテキストの中から同形パターンを検出する
ことに関するものである。
【0002】
【技術的背景】プログラムの開発においては、作成した
ソースプログラムの部分的なコピーが、「カット&ペー
スト」等で頻繁に行われる。そのような同形部分は、ソ
ースプログラムに何らかの理由で変更や修正が必要にな
った時、コピーされた部分に対して、修正を要するた
め、同形部分を効率良く検索する必要がある。又、コン
ピュータ・プログラムの違法複製を短時間で検出する方
法が望まれている。違法複製を検出する場合は、ほぼ同
形を見いだす必要がある。特に数百万行を超えるオーダ
ー(大スケール・プログラム)のソフトウェアの中から
同形のパターンを短時間で発見する方法が、プログラム
開発や保守に必要である。
【0003】ソース・ファイル中の、全く同じあるいは
類似したソース・コード断片をコードクローンあるいは
単にクローンと言う。従来から知られているクローン検
出方法としては、下記のものがある。 (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個のトーク
ンとする。行単位で比較するもので高速である。しかし
ながら、行の途中に改行が入ると発見出来ない。
【0004】さて、大規模ソフトウェアの保守支援を目
的としてクローン検出を行う場合、検出手法が持たなけ
ればならない、あるいは持つことが好ましい性質には,
以下のようなものがある。 ・大規模ソフトウェアのソースコードを実用時間で解析
できること。 ・実用上興味のあるクローンを発見できること。 一般に大規模ソフトウェアからは多数のクローンが検出
されるが、それらのクローンの大きさ、分布範囲などは
千差万別である。また、クローンの中には、配列の初期
化など,クローンであることがわかっても共通化できな
いか、あるいは共通化してもあまり保守性の向上に寄与
しないと思われるものもある。したがって、適切な手段
によってクローンを選択する必要がある。 ・入力されるソースコードの記述言語の多様性を扱える
こと。 プログラミング言語にはしばしば方言がある。また、ひ
とつのソフトウェアシステムの開発に複数のプログラミ
ング言語が使われることもある。そのような場合に備え
て、複数のプログラミング言語に容易に対応できること
が望ましい。
【0005】
【発明が解決しようとする課題】本発明の目的は、プロ
グラムのソースコード等の様々な一次元配列テキストか
ら、簡単な処理で同形パターンを抽出することである。
【0006】
【課題を解決するための手段】上記の目的を達成するた
めに、本発明は、固定字句と自由字句とを含む対象テキ
ストから、同形パターンを検出する同形パターン検出シ
ステムであって、意味のある字句を抽出する字句解析手
段と、前記字句解析手段の結果に対して、対象テキスト
に応じてあらかじめ定めた規則による変形を行う変形手
段と、前記変形手段の結果に対して、自由字句を特定の
字句に置き換えるパラメータ変換手段と、前記パラメー
タ変換手段の結果に対して、同形を検出する同形検出手
段と、検出された同形部分を出力する同形出力手段とを
備えることを特徴とする同形パターン検出システムであ
る。前記対象テキストは、プログラミング言語で記述さ
れたコンピュータ・プログラムとすることができる。同
形パターン検出システムをコンピュータ・システムに構
築させるプログラムやそのプログラムを格納した記録媒
体も本発明である。
【0007】
【発明の実施の形態】以下、図面を参照して、本発明の
実施形態を説明する。本発明の対象となるテキストとし
ては、C,C++,Java,Cobolなどの言語で
書かれているコンピュータ・プログラムが対象であり、
特にオブジェクト指向の言語であるC++やJava等
で記述されたプログラムに対して有効である。さて、文
字は、複数個連接して並べることにより、意味のある単
語(字句)を構成する。テキスト中の字句と字句との間
には、空白文字,改行文字や制御文字など、字句の構成
に関係のない文字が存在する場合もある。字句は、あら
かじめ対象のテキストの種類に応じて決められた予約
語,キーワード,演算子,分離子などの固定字句と、そ
の対象テキストごとに導入されるリテラルや識別語など
の自由字句に分けられる。複数のテキストを対象とする
場合は、個々のテキストを連接して一つの対象テキスト
とする。本発明は、この対象テキストの中に含まれる同
形の部分を検出して出力する。同形の部分とは、以下で
述べる字句解析、変形ルール適用、パラメータ変換を経
て、同形検出アルゴリズムで同じと判定された字句系列
に対応した、対象テキストの部分をいう。
【0008】図1は、本発明の同形検出アルゴリズムの
フローチャートである。このフローチャートに従って、
C++のプログラム(図2参照)を対象テキストとした
例を用いて、詳しく説明する。図1のフローチャートに
示すように、同形検出アルゴリズムは、対象テキストに
対して、字句解析(トークンの列に切る)(S11
0)、変形ルールを適用しトークン列を変形(S12
0)、パラメータ変換(S130)後、マッチング
で同形クローンを検出(S140)、上記と逆の変形
処理を行い、そのクローンの位置(ファイルまたは行)
を出力する(S150)。以下に、それぞれの処理につ
いて詳しく説明する。
【0009】<字句解析(S110)>字句解析は、対
象テキストの文字列の中から、空白文字,改行文字,制
御文字,演算子など、一つの字句の終わりに来るものを
認識し、字句(トークン)を抽出する。この段階で、空
白文字,改行文字,コメント文字,制御文字など、字句
の構成に関係の無い文字は消去される。図2に示したC
++のプログラムは、処理されると、図3に示されてい
るような結果が得られる。なお、図3では、抽出した字
句(トークン)を四角で囲って、しかも、対応関係がわ
かるように、字句(トークン)の間に空白文字1つか、
もしくは改行文字1つを挿入しているが、実際のシステ
ムではそのような文字の挿入等は行われない。
【0010】<変形ルールの適用(S120)>対象テ
キストの種類に応じて、別途作成された変形ルールのテ
ーブルにより、字句の削除や変形を行う。プログラムの
場合は、プログラミング言語に対応したテーブルを作成
する。木構造または階層構造を持つ識別子は、最下層の
識別子のみを抜粋して置換する。C++のための変形ル
ールの表を図7に示す。図7に示した表でも理解できる
ように、例えば、クラス名やパッケージ名が付加的につ
けられている場合にそれらの省略した形と同形となるよ
うに、クラス名やパッケージ名に相当する字句を削除し
ている。また、文頭に出現しやすい初期化文は、同形の
ものが繰り返し現れるので、初期化文同士が同形になら
ないよう、排他的な名前に変換する。また、プログラム
・テキストにおいては、ファイルや関数、手続きの切れ
目など、論理的・物理的な切れ目を越えて同形部が存在
しないように、切れ目の終わりに排他的な名前の字句を
付加する。図4に、図3の字句抽出したものに対して変
形ルールを適用した結果を示す。1,3,11,13行
目が変形され、短くなっているのがわかる。
【0011】<パラメータ変換(置換)(S130)>
パラメータ変換(置換)は、自由字句を同一の字句とし
て認識するように、特定の字句に変換する。変換結果を
示している図5の例では、$pに変換している。固定字
句(予約語や演算子等)は、そのままの名前を用いる。
又、先頭に成り得るトークンを限定する。
【0012】<同形検出(S140)>図5に示した字
句系列の中から、同じ部分系列をもつものを高速アルゴ
リズムで発見する。実施形態のシステムでは、既知の技
術であるサフィックス木を用いたアルゴリズムを用い
て、長さがある値以上である、同じ部分系列を発見して
いる。この同形検出は二次元の散布図で表すことがで
き、等価なペアの位置、長さを示すことができる。図6
は、図5に示した字句系列に関する二次元の散布図であ
り、点のある部分が同じ字句であることを示している。
一定以上同じ字句の連続する部分は、右下下がりの直線
として表現される。
【0013】<整形出力(S150)>発見された同形
の字句系列が、元のテキスト上のどこに相当するのかを
辿り、逆手順で元のソースコードの位置を出力する。図
2のC++のプログラムでは、1−7行と11−17行
が同形であり、8−10行と19−21行が同形である
と出力する。もちろん、同形のテキストを対比できる形
式で出力することもできる。
【0014】<他の言語への適用>上述では、C++で
の例を用いて説明したが、主として変形ルールを変える
ことにより、他の言語で記述されたプログラムに対して
適用することができる。図8にJavaに適用する場合
の変形ルールの表を示す。また、本発明の手法はプログ
ラムに限ることなく、HTML,SGML,XMLなど
の構造化テキスト,英語や日本語などの通常の文章,D
NA配列(塩基配列)やタンパク質(アミノ酸配列)な
どの、文字や塩基などの構成要素を一次元に並べた文字
列にも適用することが可能である。その場合、その文書
に関連する変形ルールを見いだすことが必要である。
【0015】
【実施例】上述の手法を、広く用いられているJava
(登録商標)のライブラリである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で発見された。
【0016】図10は、上述とおなじJDKに対して、
本発明のクローン検出と完全一致によるクローン検出と
を行った場合の比較を示す図である。図10では、発見
されたクローンの長さの度数分布を示している。完全一
致で発見されるクローンは、全く同じトークンの並びを
意味している。全体的な傾向として、クローンが長いほ
ど、出現回数が減っている。図10から分かるように、
本発明によるクローン検出を用いると、より微妙なクロ
ーンを検出することができる。
【0017】
【発明の効果】上述するように、本発明の構成により、
大規模なソフトウェアやDNAのテキストの中から、類
似のパターンを効率的に抽出することができる。この手
法を用いることで、ソフトウエアの違法複製が行われて
いないかを調べることができる。
【図面の簡単な説明】
【図1】クローン検出の処理に関するフローチャートで
ある。
【図2】クローン検出の例に用いるC++のソースコー
ドを示す図である。
【図3】字句解析処理の結果を示す図である。
【図4】変形処理の結果を示す図である。
【図5】パラメータ変換処理の結果を示す図である。
【図6】同形を検出した結果を示す図である。
【図7】C++に対する変形ルールの表である。
【図8】JAVAに対する変形ルールの表である。
【図9】大きいプログラム(JDK)を処理した結果を
示す図である。
【図10】クローン検出処理の比較を示す図である。
───────────────────────────────────────────────────── フロントページの続き Fターム(参考) 5B009 QB16 5B076 EC02 EC10 5B081 CC11

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 固定字句と自由字句とを含む対象テキス
    トから、同形パターンを検出する同形パターン検出シス
    テムであって、 意味のある字句を抽出する字句解析手段と、 前記字句解析手段の結果に対して、対象テキストに応じ
    てあらかじめ定めた規則による変形を行う変形手段と、 前記変形手段の結果に対して、自由字句を特定の字句に
    置き換えるパラメータ変換手段と、 前記パラメータ変換手段の結果に対して、同形を検出す
    る同形検出手段と、 検出された同形部分を出力する同形出力手段とを備える
    ことを特徴とする同形パターン検出システム。
  2. 【請求項2】 請求項1に記載の同形パターン検出シス
    テムにおいて、 前記対象テキストは、プログラミング言語で記述された
    コンピュータ・プログラムであることを特徴とする同形
    パターン検出システム。
  3. 【請求項3】 請求項1又は2に記載の同形パターン検
    出システムをコンピュータ・システムに構築させるプロ
    グラムを格納した記録媒体。
  4. 【請求項4】 請求項1又は2に記載の同形パターン検
    出システムをコンピュータ・システムに構築させるプロ
    グラム。
JP2001214037A 2001-07-13 2001-07-13 同形パターン検出システム Pending JP2003029978A (ja)

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)

* Cited by examiner, † Cited by third party
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 情報処理装置、情報処理方法、プログラム及び情報処理システム

Cited By (9)

* Cited by examiner, † Cited by third party
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