オープンソースソフトウェアに対するコーディングパターン分析の適用
伊達 浩

典†

石 尾隆†

井 上 克 郎†コーディングパターンとは，ソースコード中に頻出する定型的なコード片のことである．ロギングや同期処理など，ソフトウェア中でモジュール化することが困難な機能や，プログラミングにおける定型句などが，コーディングパターンとしてソフトウェアから抽出される．
本研究では，開発者が分析したいコーディングパターンのみを自動的に抽出することを目指し，コーディングパターンの特徴の評価尺度として，6 つのメトリクスを選定，4 つのオープンソースソフトウェアに対して分析を行った．メトリクス間の値の関係と，実際のパターンの特徴を分析した結果，パターンのインスタンス数，インスタンスの分布の広さ，パターンの要素中に含まれる繰り返し構造の比率というメトリクスが，分析すべきパターンの選択にとって有用であることを確認した．

Analyzing Coding Patterns of Open-source Software
Hironori Date,† Takashi Ishio† and Katsuro Inoue†
Coding patterns are idiomatic code fragments. Logging and synchronization are well known
features, which are hard to modularize, to be extracted as coding patterns.
In this research, We have selected six software metrics to evaluate coding patterns’ characteristics and analyzed coding patterns extracted from four open source programs. This
analysis revealed that the number of instances of a pattern, the radius of pattern instances
and the ratio of loop elements in a pattern are eﬀective software metrics to select coding
patterns worth investigating.

1. ま え が き

ターン検出手法を提案し，いくつかのオープンソース

オブジェクト指向の枠組みでは，モジュール化が困果，コーディングパターンには，横断的関心事に該当難な機能が存在し，これらの機能の実装はソースコーするパターンだけでなく，ライブラリの定型的な使いド中に繰り返し登場する7) ．このような機能の代表例方なども含まれていることが判明している．

ソフトウェアに対して適用を行ってきた4),9) ．その結としては，ロギングや同期処理が挙げられており，機しかし，大規模なソフトウェアから多数のコーディ能に該当するソースコードが複数のモジュールに横断ングパターンが検出されるが，従来はその分析を手作的に出現することから，横断的関心事とも呼ばれる6) ．

業に頼っていたため，調査可能なパターンの総数が限

このような複数のモジュールに分散配置されるコーられていた．Marin らによる，被呼び出し回数が多い

ドは，元となるソースコード片を複製し，配置先の状メソッドには横断的関心事との関連性があるという指況に応じて適宜改変を加えるという方式で作成される

摘8) に基づき，パターンに該当するソースコード片のことが多く，一群の定型的なコード片，すなわちコー数が多いものほど重要なパターンであると考え，分析ディングパターンを構成する．コーディングパターン

対象を選択していた．パターンに該当するソースコーに属するコード片は, 多くは同一の機能を実現していド片の数は，しばしば有用なパターンの発見に役立つる．そのため，コード片の 1 つを変更する場合，開発が，有用でないパターンも多く選択していた．

者は，同一のパターンに属する他のコード片に対して本研究では，開発者が注目したいパターンのみを効も同様の変更を適用すべきか検討する必要がある1),2) ．

率的に分析可能な環境を構築するため，新たな評価

これまで，我々の研究グループでは，ソースコード尺度として導入可能なメトリクスの評価を行った．パに対するパターンマイニングを用いたコーディングパ

ターンの長さやインスタンス数といった単純なメトリ† 大阪大学 大学院情報科学研究科
Grduate School of Information Science and Technology,
Osaka University

クス以外に，コードクローン検出法5) で用いたソースコード片の出現位置に関するメトリクス3) についても評価を行った．メトリクス間の値の関係と，実際の…
Iterator it = list.iterator();
while( it.hasNext() ) {Item item = (Item)it.next();
if (item.isActive()) {item.deactivate();}}…

Pattern
iterator()
hasNext()
LOOP
next()
hasNext()
END-LOOP
instanceof…
for( Iterator it = list.iterator(); it.hasNext(); ) {Item item = (Item)it.next();
if (item.isEnabled()) {item.setEnabled(false);}}…

Statement:
Sequence:

if ( <cond> ) <then> else <else>;<cond>, IF, <then>, ELSE, <else>, END-IF

Expression:
Sequence:( <cond> ) ? <then> : <else><cond>, IF, <then>, ELSE, <else>, END-IF

Statement:
Sequence:for ( <init>; <cond>; <update> ) <body>;<init>, <cond>, LOOP, <body>, <update>, <cond>, END-LOOP

Statement:
Sequence:for ( <decl> : <expr> ) <body>;<expr>, LOOP, <body>, END-LOOP

Statement:
Sequence:

while ( <cond> ) <body>;<cond>, LOOP, <body>, <cond>, END-LOOP

Statement:
Sequence:

do <body> while ( <cond> );LOOP, <body>, <cond>, END-LOOP

図 2 条件分岐の正規化と繰り返し処理の正規化ルール

徴を正規化して抽出する．条件分岐と繰り返し処理の

図 1 Iterator を使用したループ処理のパターン正規化には，図 2 に示す正規化ルールを使用する．
パターンの特徴を分析した結果，パターンのインスタメソッド呼び出しの正規化では，ソースコード中のンス数，インスタンスの分布の広さ，パターンの要素メソッド呼び出し式を，メソッド呼び出し要素へ変換中に含まれる繰り返し構造の比率といったメトリクスする．メソッド呼び出し要素は，メソッド名，戻り値が，分析すべきパターンの選択に有用であることを確の型，引数の型名の列を保持する．しかし，メソッド認した．

が所属するクラス名は保持しない．メソッド呼び出し

2. コーディングパターン抽出法

は動的束縛により解決されるため，ソースコードから我々は，コーディングパターンを，メソッド呼び出クラス名と一致しないことがある．データフロー解析

し要素とそれに付随する制御構造要素の定型的な列とにより動的束縛を解決できるが，計算コストが大きい

得たクラス名を保持していても，実際に呼び出される

4)捉えたパターンマイニング手法を提案している ．

ため，クラス名を持たないという解決策を採用していコーディングパターンの例として，Iterator 使用しる．この解決策により，継承関係にないクラスに同一たループ処理のパターンを図 1 に示す．コレクショのコードが複製されている場合にも対処できる4) ．

ンから Iterator オブジェクトを取得し，内部の要素条件分岐の正規化では，ソースコード中の if 文と三をループにより順次処理する，という一連の処理が，項演算子を条件分岐として正規化ルールに従い変換すIterator を使用したループ処理として抽出される．
本研究で扱うコーディングパターンは，複数のメソッドに分散したコード片を表現する．コーディングパター

る．条件分岐の正規化を行うことで，if 文により表現された条件分岐と，三項演算子により表現された条件分岐を同一視してパターンを抽出できる．

ンの抽出では，まず解析対象のソースコードをメソッ

繰り返し処理の正規化では，メソッド中に登場したド単位に分割し，各メソッドに対して正規化ルールをfor 文，while 文，do-while 文を正規化ルールにより変適用する．その結果，1 つのメソッドが 1 つの正規化換する．この正規化ルールは，同一のループ構造を異された要素列に対応した，要素列データベースが得らなる制御文により形式で表現した場合も対応できる．

れる．この要素列データベースに対してパターンマイ

2.2 シーケンシャルパターンマイニング

ニングを適用し，コーディングパターンを抽出する．

シーケンシャルパターンマイニングとは，要素列か

本研究では，プログラミング言語 Java で記述されたら順序を考慮して頻出部分列を検出する手法である．

ソースコードを対象としているが，正規化ルールを適本研究では，ソースコードの正規化を行い作成した宜改変する事で，提案手法を他の言語にも適用できる．

特徴データベースに対して，シーケンシャルパターンマ

2.1 ソースコードの正規化

イニングのアルゴリズムの 1 つである PreﬁxSpan11)

ソースコードの正規化では，各メソッドをそれぞれを適用し，コーディングパターンを抽出する．

独立したコード片とみなし，メソッド単位で，メソッド呼び出し要素と制御構造要素の列へと変換する．メ

3. コーディングパターンの分析用メトリクス

ソッドの正規化処理では，ソースコードの詳細である

過去の研究では，開発者が部品化することが困難なローカル変数や算術演算などを取り除き，「メソッド呼「横断的関心事」に該当する機能を発見するためにコーび出し」と「条件分岐」，「繰り返し処理」の 3 つの特ディングパターンの分析を行ったが，1 つのプログラ

ムからは数百，数千のコーディングパターンが抽出されるため，その分析対象として，インスタンス数が多いパターンから順番に 10 件程度を選択していた4) ．

2

コーディングパターンを効果的に分析するためには，

1

分析者が注目すべきコーディングパターンやそのイン0スタンスだけを自動抽出することが重要である．本研
究では，その基盤として使用できるソフトウェアメト(b) RAD = 1(a) RAD = 0(c)

リクスの候補として 6 種類を選定し，メトリクス間のࣃࢵࢣ࣮ࢪ相関や，コーディングパターンの特徴を調査した．

ࢥ࣮ࢹ࢕ࣥࢢࣃࢱ࣮ࣥࡢ࢖ࣥࢫࢱࣥࢫ

メトリクス値は，パターン分析に利用できるように，

RAD = 2ࣇ࢓࢖ࣝ

図 3 メトリクス RAD の計算法

すべて，パターン P を引数に取り，整数あるいは実数値を返す関数 f (P ) : P attern → value という形式で定義した．以下，各トリクスの定義を述べるが，パとなる．

3.5 非繰り返し要素の割合：RNR（Ratio of

ターン P に対して，それらのインスタンス i は i ∈ PNon-repeated Elements）というように集合 P の要素として記載し，パターンパターン P の「非繰り返し」を意味する RNR(P)P のインスタンス数は |P | という形式で記述する．

は，パターン P の要素中の繰り返しを取り除いた後に3.1 パターン長：LEN（Pattern Length）残る要素の割合を示した実数値である．本研究では，

コーディングパターン P のパターン長 LEN (P ) は，繰り返しの検出には，SEQUITUR アルゴリズム10) をパターン P に含まれる要素数を示す整数値である．

用いた．このアルゴリズムは，ある要素列が与えられ3.2 パターンのインスタンス数：NOI（Numberたときに，連続した 2 要素の組が 2 回以上出現した場合を繰り返しとして検出する．8 要素のコーディングof Instances）
コーディングパターン P のインスタンス数 N OI(P ) =「A，B」
パターン「X, A, B, A, B, A, B, Y」中では，|P | は，パターン P に該当する要素列がマイニング対という組が 3 回繰り返されているため，その 2 回目以象のソースコード中に出現した回数（メソッド数）を降の出現を繰り返しと認識し，RNR は 0.5 となる．

示す整数値である．本研究で使用しているパターンマ

3.6 パターンインスタンスの分散：RAD（Ra-イニングのアルゴリズム PreﬁxSpan では，パターン検出のしきい値としても使用される．

3.3 制御構造要素の割合：RCE（Ratio of Con-dius）
パターンインスタンスの分散 RAD(P) は，インスタンスが登場するソースコードの範囲を示す整数値である．

trol Elements）
コーディングパターン P の制御構造要素の割合

RAD は，パッケージ階層中でのパターンインスタ

RCE(P) は，パターン P に含まれる全要素数に対すンスの分散度合いを表すメトリクスである．図 3(a)る，制御要素数の割合として計算される実数値であでは，すべてのインスタンスが同一ファイル内に存在る．RCE(P) の値が大きいパターンは，メソッド呼びしているため，RAD 値は 0 とする．また，図 3(b)出しを含まない if 文や for 文の単純な入れ子関係をのように，インスタンスが同一パッケージ内の複数の表現している可能性が高いため，経験的なしきい値

ファイルに分散している場合には，RAD 値は 1 とす

RCE(P)≤ 0.7 によりパターンをフィルタリングする．

る．さらに，インスタンスが複数パッケージに分散し3.4 パターンの密度：DEN（Density）ている場合には，それぞれのインスタンスの存在するコーディングパターン P の密度 DEN(P) は，パパッケージをルートノード方向にたどり，すべてのイターン P の各要素が，ソースコード上でどれだけ密にンスタンスを子孫として持つパッケージにたどり着い配置されているかを示す実数値である．具体的には，
たら，そのパッケージを基準として，すべてのインスDEN (P ) =タンスまでの距離を計測し最大のものを RAD とする．

i∈P

DENinst (i)|P |によって計算する．

ただし，DENinst (i) は，パターンのインスタンスに対して定義される密度である．パターンに該当する要素を含むメソッドの要素列が与えられたとき，

DENinst (i) =LEN (P )i の末尾要素位置−i の開始要素位置+1

図 3(c) の例では，RAD は 2 となる．

4. メトリクスを用いたコーディングパターン
分析
調 査 対 象 と し て ，図 形 描 画 ソ フ ト ウェア JHot-ϭϬ͘ϵϬ͘ϴϬ͘ϴ㠀⧞䜚㏉䛧せ⣲䛾๭ྜ㠀⧞䜚㏉䛧せ⣲䛾๭ྜϭϬ͘ϵϬ͘ϳϬ͘ϲϬ͘ϱϬ͘ϰϬ͘ϯϬ͘ϮϬ͘ϭϬ͘ϳϬ͘ϲϬ͘ϱϬ͘ϰϬ͘ϯϬ͘ϮϬ͘ϭϬϬϬϬ͘ϭϬ͘ϮϬ͘ϯϬ͘ϰϬ͘ϱϬ͘ϲϬ͘ϳϬϬ͘ϭϬ͘Ϯไᚚᵓ㐀せ⣲䛾๭ྜϬ͘ϯϬ͘ϰϬ͘ϱϬ͘ϲϬ͘ϳไᚚᵓ㐀せ⣲䛾๭ྜ

図 4 [JHotDraw] 制御構造要素の割合と非繰り返し要素の割合

図 5 [jEdit] 制御構造要素の割合と非繰り返し要素の割合

Draw☆1 ，テキストエディタ jEdit☆2 ，アプリケーショ
SableCC☆4 を用いた．調査対象のソフトウェア一覧と実験に用いたバージョン，ソフトウェアの規模，抽出されたコーディングパターンの数を表 1 に示す．
コーディングパターンを抽出する際のパラメータ設ϭϬ͘ϵ㠀⧞䜚㏉䛧せ⣲䛾๭ྜンサーバ Apache Tomcat☆3 ，パーサジェネレータϬ͘ϴϬ͘ϳϬ͘ϲϬ͘ϱ
Ϭ͘ϰ
Ϭ͘ϯ
Ϭ͘Ϯ
Ϭ͘ϭ
Ϭ

定は，過去の実験の経験により，インスタンス数のしϬϬ͘ϭϬ͘Ϯ

きい値を 10，パターン長のしきい値を 4 とした．
コーディングパターンの特徴を調査するために 3 章で定義した 6 種類のメトリクスを，調査対象から抽出Ϭ͘ϯϬ͘ϰϬ͘ϱϬ͘ϲϬ͘ϳไᚚᵓ㐀せ⣲䛾๭ྜ

図 6 [Apache Tomcat] 制御構造要素の割合と非繰り返し要素の割合したコーディングパターンに対して適用した．
本研究では，6 種類のメトリクスのすべての組み合ϭ

わせに対して関連性の調査した．その結果，関連性の4.1 非繰り返し要素の割合と制御構造要素の割合
図 4〜図 7 に，X 軸に制御構造要素の割合，Y 軸に非繰り返し要素の割合をとった散布図を示す．

㠀⧞䜚㏉䛧せ⣲䛾๭ྜ

認められたメトリクスの組み合わせを本章で述べる．

Ϭ͘ϵϬ͘ϳϬ͘ϲϬ͘ϱϬ͘ϰϬ͘ϯϬ͘ϮϬ͘ϭ

制御構造要素を含まないパターンは，非繰り返し要ϬϬ

素の割合に偏りがなく広く分布しているため，制御Ϭ͘ϭϬ͘ϮϬ͘ϯϬ͘ϰϬ͘ϱϬ͘ϲϬ͘ϳไᚚᵓ㐀せ⣲䛾๭ྜ

構造要素を含むパターンのみに着目する．JHotDraw（図 4），jEdit（図 5），SableCC（図 7）に関しては，Ϭ͘ϴ

図7[SableCC] 制御構造要素の割合と非繰り返し要素の割合

制御構造要素を含むパターンは，グラフの上部に集中して登場する傾向がある．しかし，Apache Tomcat

ここで，Apache Tomcat に関する事例についてさら（図 6）の場合には，制御構造要素を含むパターンのに分析する．制御構造要素は，条件分岐の要素と繰りY 軸方向への偏りは小さい．

返し処理の要素の 2 種類に分かれる．そこで，ApacheTomcat から検出されたコーディングパターン中から，
ソフトウェア

表 1 対象ソフトウェア
バージョン
LOC

JHotDrawjEdit
Apache Tomcat
SableCC

7.0.9
4.3pre10
6.0.14
3.2

パターン数

90166
168335313479
35388

375
2902
8782
450

条件分岐の要素を含むパターンと，繰り返し処理の要素を含むパターンを別々にプロットした（図 8）．
図 8 の結果では，条件分岐の要素を含む要素は全体に広がっているが，繰り返し要素は，非繰り返し要素の割合が 1 に近い側に偏って分布している．
これらのことから，制御構造要素，特にその中でも☆1

JHotDraw, http://www.jhotdraw.org/☆2
jEdit, http://www.jedit.org/☆3
Apache Tomcat, http://tomcat.apache.org/☆4
SableCC, http://sablecc.org/

LOOP 構造を含むパターンは，非繰り返し要素の割合が高くなる傾向がある．パターン内に LOOP 構造を持つということは，繰り返し処理がその LOOP 構ϭϳϲϬ͘ϴϬ͘ϳϬ͘ϲϬ͘ϱϬ͘ϰ/&䜢ྵ䜐Ϭ͘ϯ

>KKW䜢ྵ䜐Ϭ͘ϮϬ͘ϭϬ䝟䝍䞊䞁䛾ศᩓ㠀⧞䜚㏉䛧せ⣲䛾๭ྜϬ͘ϵϱϰϯ䜲䝔䝺䞊䝍Ϯ䛭䛾௚ϭϬϬ͘ϭϬ͘ϮϬ͘ϯϬ͘ϰϬ͘ϱϬ͘ϲϬϬ͘ϳϬไᚚᵓ㐀せ⣲䛾๭ྜ

図 8 [Apache Tomcat] 制御構造要素の割合と非繰り返し要素の割合（IF，LOOP 分離版）

ϭϬϮϬϯϬϰϬ䜲䞁䝇䝍䞁䝇ᩘ

図9[JHotDraw] パターンの分散とインスタンス数の関連性造により集約されることを意味するので，非繰り返しϵ要素の割合が高くなると考えられる．
構造要素の割合が大きいパターンは，パターン内に多くの繰り返しを含むため，冗長で保守性が悪い．このようなパターンとして，「isDebugEnabled(), IF, de-bug(String), END-IF」の要素列が繰り返すパターンϴϳ䝟䝍䞊䞁䛾ศᩓ

図 8 中で，非繰り返し要素の割合が小さく，制御ϲϱϰ䜲䝔䝺䞊䝍

ϯ

䛭䛾௚

Ϯ
ϭ
ϬϬがある．このパターンでは，debug メソッドの引数とϭϬϯϬϰϬ

ϱϬϲϬ䜲䞁䝇䝍䞁䝇ᩘ

して渡す文字列が，各呼び出しごとに異なり，単純に繰り返し構造を導入するだけでは集約できない．しかϮϬ

図 10[jEdit] パターンの分散とインスタンス数の関連性し，同一構造の繰り返しが続くためソースコードの可読性が低く改善することが望ましい．

4.2 インスタンス数と出現位置の関連
コーディングパターン分析では，Marin らにより，インスタンス数が多いものほど横断的関心事である可能性が高と指摘されていた8) ．しかし，この指標だけ「hasNext」を含むメソッド呼び出しを持つ．

• 制御構造として，繰り返し処理を含む．
その結果，抽出されたパターン数とコーディングパターンの総数に対する割合を表 2 に示す．
また，コーディングパターンを Iterator の利用パ

では，Iterator に代表される，頻繁に使われるライブターンと，Iterator の利用に関係がないその他のパラリを区別できなかった．本節では，それに代わる指ターンに分類し，図 9〜図 12 にパターンの分散とイ標となりうるパターンの分散 RAD について調査した．

ンスタンス数の関連を示した．

本研究における調査では，パターンのインスタン

図 9，10 に示すように，JHotDraw と jEdit に含まス数 NOI，パターンの分散 RAD，そしてパターンがれる，Iterator を利用しているパターンは，パターンIterator の操作に該当するかどうかを調査した．の分散が大きい．また，Iterator を利用したパターン

Iterator の利用は，Java のプログラマ間では既知の事項であり重要度は低い．しかし，表 2 によると，の中にもインスタンス数が多いものが存在する．
図 12 に示した SableCC の場合は，パッケージ階層Iterator を含むパターンの割合は最高で 29.3%に達すが浅く，1 つのパッケージに多数のソースファイルがる．Iterator の利用を取り除く指標を作成することで，格納されていた．そのため，パターンの分散についてプログラム理解に有用な，ソフトウェア固有の機能実は，パターンの種類間での差異が判断できなかった．

装のようなパターンを発見しやすくできる．

Iterator の利用では，メソッド名に「next」や「has-図 11 に示した Apache Tomcat では，傾向はみられなかった．これは，Iterator とプログラム固有の機Next」という特徴的な文字列を持つメソッド呼び出している．また，Iterator の利用では，複数のオブジェクトに対して処理を繰り返す必要がある．そこで，コーディングパターン中から，次の条件を満たすものをIterator を利用しているパターンとして抽出した．
• メソッド名に「next」を含むメソッド呼び出しと，表 2 Iterator の利用を含むパターンの数
ソフトウェア
パターン数
Iterator 利用

JHotDrawjEdit
Apache Tomcat
SableCC

375
29028782
450

828434
132

割合
2.1%
0.9%
4.9%
29.3%

謝辞 本研究は，日本学術振興会科学研究費補助金ϵϴ

基盤研究（A）（課題番号:21240002）および文部科学省

䝟䝍䞊䞁䛾ศᩓ

ϳ

科学研究費補助金若手研究（B）（課題番号:21700030）

ϲϱ
ϰ

䜲䝔䝺䞊䝍

ϯ

䛭䛾௚

Ϯ
ϭ
Ϭ
Ϭ

ϮϬ

ϰϬ

ϲϬϴϬ

䜲䞁䝇䝍䞁䝇ᩘ

図 11 [Apache Tomcat] パターンの分散とインスタンス数の関連性ϯ͘ϱ䝟䝍䞊䞁䛾ศᩓϯϮ͘ϱϮϭ͘ϱ䜲䝔䝺䞊䝍ϭ䛭䛾௚Ϭ͘ϱϬϬϱϬϭϬϬϭϱϬ䜲䞁䝇䝍䞁䝇ᩘ

図 12[SableCC] パターンの分散とインスタンス数の関連性能実装の両方を含むパターンが，パッケージ階層中で局所的に現れていることが原因と考えられる．
コーディングパターンの従来の調査手法では，インスタンス数が多いものから調査を行っていた．しかし，

JHotDraw や jEdit では，Iterator を利用しているパターンがインスタンス数の上位に登場し，有益なパターンが多数のパターン中に埋もれてしまう．この問題を回避するには，パターンの分散が小さいパターン，つまり，特定のパッケージやファイルにのみ登場するパターンから調査するという方法をとる必要がある．

5. ま と め
コーディングパターンの検出結果は膨大になり，有用なパターンを発見することが困難となっている．これを解決するために，コーディングパターンを分類し，閲覧者が必要なものを選び出し提示する必要がある．
そこで，本研究では，コーディングパターンの特徴を計測するためのメトリクスを提案し，その特徴間の関連と，コーディングパターンの種類との関係について分析を行った．その結果，パターンのインスタンス数，インスタンスの分布の広さ，パターンの要素中に含まれる繰り返し構造の割合といったメトリクスが，分析すべきパターンの選択に有用であると確認できた．の助成を得た．

参考文献

1) Baker, B. S.: A Program for Identifying Duplicated Code, Computing Science and Statistics,
Vol. 6, pp. 49–57 (1992).
2) Fowler, M.: Refactoring: Improving the Designof Existing Code, Addison-Wesley (1999).
3) 服部剛之, 肥後芳樹, 楠本真二, 井上克郎: コード
クローンの分布情報を用いた特徴抽出手法の提案,
ソフトウェア信頼性研究会第 3 回ワークショップ
論文集, pp. 9–17 (2006).
4) 石尾隆, 伊達浩典, 三宅達也, 井上克郎: シーケ
ンシャルパターンマイニングを用いたコーディン
グパターン抽出, 情報処理学会論文誌, Vol. 50,
No. 2, pp. 860–871 (2009).
5) Kamiya, T., Kusumoto, S. and Inoue, K.:
CCFinder: A Multi-Linguistic Token-based
Code Clone Detection System for Large Scale
Source Code, IEEE Transactions on Software
Engineering, Vol. 28, No. 7, pp. 654–670 (2002).
6) Kiczales, G., Lamping, J., Mendhekar, A.,
Maeda, C., Lopes, C. V., Loingtier, J. and Irwin, J.: Aspect Oriented Programming, Proceedings of the 11th European Conference on
Object-Oriented Programming, pp. 220–242(1997).
7) Marin, M.: Reasoning about Assessing andImproving the Seed Quality of a Generative
Aspect Mining Technique, Proceedings of the2nd International Linking Aspect Technologyand Evolution Workshop (2006).
8) Marin, M., van Deursen, A. and Moonen, L.:
Identifying Aspects using Fan-in Analysis, Proceedings of the 11th Working Conference onReverse Engineering, pp. 132–141 (2004).
9) Miyake, T., Ishio, T., Taniguchi, K. and Inoue,K.: Towards Maintenance Support for Idiombased Code Using Sequential Pattern Mining,
Asian Workshop on Aspect-Oriented SoftwareDevelopment(AOASIA3) (2007).
10) Nevill-Manning, C. and Witten, I.: Identifying
Hierarchical Structure in Sequences: A lineartime algorith, Journal of Artiﬁcial Intelligence
Research, pp. 67–82 (1997).
11) Pei, J., Han, J., Mortazavi-Asl, B., Pinto,H., Chen, Q., Dayal, U. and Hsu, M.: PreﬁxSpan: Mining Sequential Patterns by PreﬁxProjected Growth, Proceedings of the 17th International Conference on Data Engineering,pp. 215–224 (2001).