Vol. 0

No. 0

情報処理学会論文誌

1959

産学連携に基づいたコードクローン可視化手法の改良と実装
肥 後 芳 樹†楠 本 真 二†吉 田 則 裕†井 上 克 郎†近年，ソフトウェアの大規模化・複雑化に伴い，保守作業に要するコストが増大している．ソフト
ウェアの保守を困難にしている要因の 1 つとしてコードクローンが挙げられる．コードクローンとは
ソースコード中のある一部分（コード片）のうち，他のコード片と同一または類似しているものを指す．コードクローンはコピーアンドペーストなどのさまざまな理由によりソースコード中に作りこまれる．例えば，あるコード片にバグが含まれていた場合，そのコード片のコードクローン全てについて修正の是非を考慮する必要がある．コードクローンを対象とした保守支援を行うために，著者らは検出ツール CCFinder・可視化ツール Gemini を開発し，産業界に配布している．また，著者らはツールの開発者（大学）と利用者（産業界）の意見交換の場としてコードクローンセミナーを開催している．セミナーを開くことによって出席者から現場の生の声を聞くことができる．セミナーの開催に加えてメーリングリストの運営も行っている．利用者はツールの利用法に関する質問や新機能の要望を行い，開発者はツールのバージョンアップや次期セミナーの開催日程などを告知するために用いている．その結果 Gemini に実装されているコードクローン可視化手法を大幅に改良することができた．
さらにこの改良手法を用いて Gemini を再実装し，実際のソフトウェア保守作業で用いることのできる実用的なツールに発展させることに成功した．本稿では，著者らの産学連携の取り組みと，コード
クローン可視化手法の改良について述べる．また，新 Gemini を日本のベンダー 5 社が共同開発したソフトウェアに対して適用した．適用の結果，対象ソフトウェア内に存在するさまざまなコードク
ローン情報を簡単に得ることができた．

Improvement and Implementation of Code Clone Visualization Method
based on Academic-Industrial Collaboration
Yoshiki Higo,† Norihiro Yoshida,† Shinji Kusumoto†and Katsuro Inoue†
Maintaining software systems becomes more diﬃcult as the size and complexity of software
increase. One of the factors that makes software maintenance more diﬃcult is the presenceof code clones. A code clone is a code fragment which has identical or similar code fragments
to it in source code. Code clones are introduced by various reasons such as reusing code by‘copy-and-paste’. If we modify a code clone with many similar code fragments, it is necessary
to consider whether or not we have to modify each of them. For supporting software maintenance against code cloning, we have developed a code clone detection tool, CCFinder and acode clone visualization tool, Gemini. These tool have been delivered to domestic or overseasorganizations/individuals. Also, we have held code clone seminars that provide opportunities
for discussions between developers and users of the tools. Through the seminars, we can getwhat industrial people really require. In addition to seminars, we are managing a mailinglist. Users ask about how to use the tools and require new functionalities that they want, anddevelopers announce a version upgrade of the tools and the date for next seminar. As a result,
we were able to improve our visualization method and succeed to reﬁne it as a practical one.
We re-implemented Gemini based on the improvements as a tool which can be used in practice.
In this paper, we describe how we are promoting academic-industrial collaboration and how
the visualization method was improved. Moreover, We applied new Gemini to a system which
was co-developed by 5 Japanese companies. Application results demonstrate the usefulness
and capability of new Gemini.

1. は じ め に† 大阪大学大学院情報科学研究科
Graduate School of Information and Science Technology, Osaka University

近年，ソフトウェアの大規模化・複雑化に伴い，保守作業に要するコストは増大している．例えば，Yip1

2

情報処理学会論文誌

1959

らはコスト全体の 66%が保守作業に費やされている，と報告している16) ．保守作業を困難にしている原因の１つとして，コードクローンが挙げられる．コードク







ローンとは，ソースコード中のある一部分（コード片）のうち，他のコード片と同一または類似しているもの



を指す．Fowler は，重複コード（コードクローン）は最も優先してリファクタリングを行う対象である，と述べている4) ．コードクローンは，コピーアンドペー

図 1 クローンペアとクローンセット
Fig. 1 Clone Pair and Clone Set

ストなどの理由によりソースコード中に生成される．
あるコード片に対して修正を行う場合，もしそのコー
ド片のコードクローンが存在する場合は，それらにつることができ，改良手法・新ツールの有用性が確認さいても同様の修正の是非を検討する必要がある．このれた．

ような作業は，システムが大きい場合は非常に煩雑であり，また修正漏れによる新たなバグの混入の危険も

2. コードクローン

ある．それゆえ，システム中に存在するコードクロー

2.1 定

ンを効率的に検出することが必要である．

コードクローンとは，ソースコード中に存在する

義

これまでにさまざまなコードクローン検出手法が提コード片のうち，他のコード片と一致または類似して案されている1)∼3),10),13) . 著者らもコードクローン検いるものを指す．しかし，コードクローンの厳密で普出ツール CCFinder を開発してきている7) ．CCFinder

遍的な定義は存在しない．これまでにさまざまなコー

は，コードクローンを高速に検出することを目的としドクローン検出手法が提案されているが，それらはどて実装されており，数百万行規模のシステムであってれも異なった定義を持つ．以降，本稿では，コードクも実用的な時間で検出を行うことができる．

ローン検出ツール CCFinder の定義を用いる．

しかし CCFinder が出力するコードクローン情報はCCFinder ではコードクローンであるか否かはコー

テキスト形式であり，コードクローン分析作業でそのド片の同値関係（反射律，推移律，対称律）で決情報をそのまま用いるのは効率的でない．分析作業を定される5),7) ．ここで，コード片とはソースファイ

支援するために，コードクローン可視化ツール Gemini

ルの一部分を指し，ID, Linestart , Columnstart ,を開発してきている15) ．そして CCFinder・Gemini を

Lineend , Columnend の 5 つの属性を用いて表され国内外の組織・個人に配布しており，現在では 100 社

る．ID(f ) はコード片 f を含むファイルの ID を表す．

以上で使用されている．

CCFinder は全てのコードクローン検出対象ファイル

また，コードクローンセミナーを開催し，ツールのに対してユニークな ID を割り当てる．Linestart (f )開発者（大学）と利用者（産業界）との意見交換の場を（Lineend (f )）はコード片 f の開始行（終了行）を表設けている．メーリングリストも運用し，利用者からし，Columnstart (f ) (Columnend (f )) はコード片 f

新機能の要望やツールの利用法に関する質問などのたの開始列（終了列）を表す．この定義では，コード片めに用いている．このような取り組みを通じて，産業は部分的に重なり合う場合もありうる．

界のコードクローン検出・可視化技術に対するニーズある系列中 (ソースコード中) に存在する 2 つの部を把握し，ツールの改良や技術移転を続けてきている．

分系列（コード片）α，β が同一または類似していると

本稿では，産業界の意見を基に改良したコードク

き，C(α, β) と書き，α は β とクローン関係をもつとローン可視化技術とその適用事例について述べる．本いう．C は，反射律，推移律，対称律が成り立つ同値

手法は，様々な開発組織から得られた知見を基に実現関係である．また，コードクローンの同値類をクローしており，汎用性が高い手法となっている．さらにこンセットという．

の手法を，新 Gemini として再実装した．新 Gemini の

任意の α，β に対して C(α, β) ならば，α の任意の有用性を確認するために，情報処理推進機構（IPA）

部分系列 α̇ に対し，C(α̇, β̇) となる β の部分系列 β̇

ソフトウェア・エンジニアリング・センター（SEC）のが存在する．また，α，β をそれぞれ真に含む任意の先進ソフトウェア開発プロジェクトにおいてベンダー

系列 α̈，β̈ （ただし α̈ 6= β̈ ）に対して C(α, β) かつ

5 社が共同で開発したシステム12) に対して適用した．

¬C(α̈, β̈) ならば，(α, β) をクローンペアという．

適用の結果，さまざまなコードクローンの状態を得

図 1 はクローンペアとクローンセットの例である．

Vol. 0No. 0

産学連携に基づいたコードクローン可視化手法の改良と実装

3

この例では，5 つのコードクローンが存在している．

ン情報の利用法，また実際にツールを使用している企

コード片 f1 はコード片 f4 とクローン関係を持ち，ま業の事例報告など，その内容は多岐に渡る．

たコード片 f2 ，f3 ，f5 も互いにクローン関係を持つ．

3.2 メーリングリスト

この場合，(f1 , f4 ), (f2 , f3 ), (f2 , f5 ), (f3 , f5 ) の 4

コードクローンセミナーは現場の生の声が聞けるとつのクローンペアと {f1 , f4 }, {f2 , f3 , f5 } の 2 つのいう利点があるが，頻繁に行うのは難しい．また，全クローンセットが存在する．

てのユーザに出席して頂くことも現実的ではない．こ2.2 CCFinderのことから，メーリングリストを運用している．利用

CCFinder7) はプログラムのソースコード中に存在者（産業界）はメーリングリストを用いてツールの利するコードクローンを検出し，その位置をクローンペ

用法に関する質問や新機能の要望などを行い，また開アのリストとして出力する．検出されるコードクロー

発者（大学）は，ツールのバージョンアップや次期センの最小字句数はユーザが前もって設定できる．

ミナーの開催日程などを利用者に告知している．

CCFinder のコードクローン検出手順（ソースコー
ドを読み込んで，クローンペア情報を出力する）は以
下の 4 つの STEP から成る．

3.3 産業界からの要望
著者らは既にコードクローンの可視化手法を提案し，その手法を実装した可視化ツール Gemini を開発してSTEP1（字句解析）: ソースファイルを字句解析

いる15) ．この手法・ツールは，学術的に見れば新規性することにより字句列に変換する．ファイルが複はあるものの，実際の開発現場の使用には向いていな

数の場合には，個々のファイルから得た字句列をかった．指摘された主な問題点を以下に示す．

連結し，単一の字句列を生成する．

• コードクローン情報の中に，調査の必要があるコー

STEP2（変換処理）: 実用上意味を持たないコー

ドクローンとそうでないものが混在している．

ドクローンを取り除くこと，及び，些細な表現上• ファイルに着目した分析を行うための機能が存在の違いを吸収することを目的とした変換ルールにより字句列を変換する．例えば，連続した複数のしない．

• スケーラビリティが低い．

関数にまたがったコードクローンは分割され，各1 つ目の問題の原因は，検出したコードクローンを関数内で閉じたコードクローンとして検出される．

フィルタリングせずに可視化しているという点であっまた，変数名は同一の特別な字句に置換されるのた．CCFinder は調査しなければならないコードクロー

で，変数名が付け替えられたコード片もコードク

ンの他に調査の必要がないコードクローンも検出してローンであると判定することができる．

しまう．ここで，“調査の必要がないコードクローン”

STEP3（検出処理）: 字句列の中から指定されたとは，ソフトウェア開発・保守を行う視点でコードク

長さ以上一致している部分をクローンペアとして

ローン情報を扱う場合に特に対象とする必要が無いも全て検出する．

のである．ソースコード中には，プログラミング言語

STEP4（出力整形処理）: 検出されたクローンペ

やドメイン，フレームワークに依存した定型処理部分

アのソースコード上での位置情報を出力する．

が含まれており，これらは CCFinder によって頻繁に

3. 産学連携の取り組み

検出されてしまう．このようなコードクローンの存在は，調査を必要とするコードクローン情報を隠蔽し，本節では，著者らが行ってきた産学連携の取り組み

分析作業の非効率化を招いてしまう．実用的な可視化について紹介する．産学連携を行うことによって，産手法にするには，調査の必要がないコードクローンの業界のコードクローン分析に対するニーズを把握する

フィルタリングを行う必要がある．フィルタリングをことができ，コードクローン可視化手法を実用的な技行うことにより，調査の必要があるコードクローンの術として高めることができた．

分布状態の把握や，調査の必要があるコードクローン

3.1 コードクローンセミナーのうち特定の特徴を持つものの抽出などが可能となる．

著者らはツールの開発者（大学）と利用者（産業界）

2 つ目の問題は，ファイルに着目した分析を行うこの意見交換の場としてコードクローンセミナーを開催とができない点であった．旧ツールは，コードクロー

している17) ．第 1 回セミナーは 2002 年 11 月に開催ンに対してはその特徴を基に選択を行うための機構がし，これまでに東京で 3 回，大阪で 3 回の計 6 回開催

存在するが，検出対象ファイルについては選択機構がしている．セミナーの内容は毎回異なるが，ツールの存在しなかった．しかし，利用者はコードクローンをデモンストレーションと利用法講座や，コードクロー

多く含むファイルや重複度の高いファイルに興味を持情報処理学会論文誌

4

1959

つため，それらを効率的に選択する機構が必要である．

トウェアのドメインや用いているライブラリ・フレー

3 つ目の問題は，スケーラビリティの低さであった．

ムワークに依存した，アプリケーション依存のコード

旧ツールが円滑に動作するのは，対象ソフトウェアがクローンに大別される．言語依存のコードクローンは，

10 万行程度の規模までであり，商用ソフトウェアをそのプログラミング言語を使っていれば，どのような対象とした場合，このスケーラビリティでは不十分で

アプリケーションでも検出されてしまうのに対し，アあった．実用的なツールであるためには，対象ソフト

プリケーション依存のコードクローンは，対象ソフト

ウェアが数百万行規模であっても円滑に動作する必要

ウェアによって全く異なる．このため，本稿では調査のがある．

必要がないコードクローンのフィルタリングの第一歩

4. コードクローン可視化手法の改良として，言語依存のコードクローンのフィルタリング
手法を提案する．例えば，連続した変数宣言やメソッ

4.1 提 案 手 法

ド呼び出し，switch 文の連続した case エントリなど，

ここでは，改良を行ったコードクローン可視化手法

プログラミング言語の構造上どうしてもコードクローについて述べる．この改良手法は，3.3 節で述べた問ンになってしまうものが言語依存のコードクローンで題点を補うためのものである．計 4 つの手法を述べる

ある．

が，各手法によってどのようにコードクローン情報が効率的なコードクローン分析を実現するために，こ扱われるのかを表すために，以下の例を全ての手法ののようなコードクローンをフィルタリングするための説明で共通して用いる．

メトリクス RNR(S) を提案する．RN R(S) はクロー

コードクローンの例

ンセット S に含まれるコード片がどの程度繰り返し

ディレクトリ D1 ，D2 が存在し，D1 の下にはファ要素を含まないかを表す．

イル F1 と F2 が，D2 の下にはファイル F3 と F4 がf をクローンセット S に含まれているコード片とす存在する．ファイル F1 ∼ F4 は次の字句で構成される．T OC(f ) はコード片 f を構成している字句の数，ている．“*” の意味は 4.1.1 節で述べる．

T OCrepeated(f ) はコード片 f を構成している字句

F1 : a b c a b,のうち，繰り返し要素の字句の数を表すとする．このF2 : c c∗ c∗ a b,

とき RN R(S) は次式で表される．

∑

F3 : d e f a b,
F 4 : c c∗ d e f

RN R(S) = 1 −コード片を表すためにラベル C(Fi , j, k) を用いる．

C(Fi , j, k) はファイル Fi の j 番目の字句から k 番目
までの字句で構成されるコード片を表す．

f ∈S

T OCrepeated (f )∑T OC(f )f ∈S

また繰り返し要素の字句とは，直前の字句列の繰り

ここでは，コードクローンとして検出されるために返しである字句列中の字句を指す☆ ．例では，“*” 付

最低 2 字句が必要であるとすると，次の 3 つのクローきで表示されている字句が繰り返し要素の字句であンセットが検出される．

る．例の 3 つのクローンセットに対して RN R の値

S1 : {C(F1 , 1, 2), C(F1 , 4, 5), C(F2 , 4, 5), C(F3 , 4, 5)}を算出すると，RN R(S1 ) = 1.0, RN R(S2 ) = 0.3,

RN R(S3 ) = 1.0 となり，S2 を構成するコード片の大S2 : {C(F2 , 1, 2), C(F2 , 2, 3), C(F4 , 1, 2)}

部分が繰り返し要素であることがわかる．このメトリ

S3 : {C(F3 , 1, 3), C(F4 , 3, 5)}

クスを使うことによって，連続した変数やアクセサ宣

4.1.1 調査の必要がないコードクローンのフィル

言，メソッド呼び出しなどのコードクローンをフィル

タリング

タリングすることが可能である．

CCFinder は調査しなければならないコードクロー

一方，アプリケーション依存のコードクローンに対ンのほかに，調査の必要がないコードクローンも検出するフィルタリングは現在のところ行えていない．こしてしまう．“調査の必要がないコードクローン” とは，ソフトウェア開発・保守を行う視点でコードクローン
情報を扱う場合に特に対象とする必要が無いものである．調査の必要がないコードクローンは，そのソフトウェアが記述されているプログラミング言語に依存した，いわゆる言語依存のコードクローンと，そのソフ☆

各字句が繰り返しであるか否かは正規表現のメタ文字の 1 つである “+” を用いると理解しやすい．F2 は “+” を用いる
ことによって c + ab と表すことができる．この表現で省略されている字句が繰り返し要素である．例えば，新たなファイル
F5 : x a b a b a b y を考えた場合，このファイルは “+” を使って x(ab) + y と表されるため 4 番目から 7 番目までの字句で構成される字句列 a b a b が繰り返し要素となる．

Vol. 0

産学連携に基づいたコードクローン可視化手法の改良と実装

No. 0
F2

F#4
154

176

),)*(

+*-,.0/

132
(

+

)*(

+
)

句は，それを含むクローンセットがメトリクス RN R
1=<

(

+
)

)

-

を用いることによって，調査の必要がない，と判断さ
.>/

?
@

を他のコードクローンと異なって表示することにより，?
A

ユーザは，それらを除外して分析作業を行うことが可@能となる．これにより，より効率的にコードクローン?

分析作業を行うことができる．

G9
@
8:
@
AB

;

また，このクローン散布図は，ファイル間の境界線
CD

8とディレクトリ間のそれを区別して表示する．これに?

より，ユーザは，ファイル内クローン・ファイル間ク
A

G:
8E

れたことを表している（ここでは，RN R の閾値として 0.5 を用いた）．調査の必要がないコードクローン

A
89

5

@B

@

ローンだけでなく，ファイル内クローン・ディレクト
リ内ファイル間クローン・ディレクトリ間クローンをCD区別することができ，どのディレクトリが多くコードHIKJLHNMOJPH'QRJLHPS UTWVXZY[\IPJP[=M U]_^a`3b%c7edf 3 

クローンを所有しているのか，どのディレクトリ間にg  !#" $&%'
 
 !#"$&%'

図 2 クローン散布図
Fig. 2 Model of Scatter Plot

コードクローンが多く共有されているのか，を瞬時に把握することが可能である．

4.1.3 クローンセットメトリクス
ユーザが，興味のある特徴を持ったコードクローン
情報に瞬時にアクセスできるように，メトリクスを用のようなコードクローンは，対象ソフトウェアが用いいてコードクローンを定量的に特徴付ける．調査の必ているフレームワークやライブラリに依存しているた

要がないコードクローンをフィルタリングするために，

め，その性質はさまざまであり，言語依存のコードク

メトリクス RN R も用いる．用いるクローンセットメ

ローンのように，コードクローンの特徴を定量化してトリクスを以下に示す．なお，LEN と P OP は文献

フィルタリングを行うことは難しい．しかし，開発現

15) で提案したものと同じである．

場からのフィードバックとして，アプリケーション依LEN (S)15)

クローンセット S に含まれるコード片の存のコードクローンのフィルタリング機構を希望する

大きさ (字句数) の平均を表す．例の 3 つのクロー

声は大きく，現在検討中である．

ンセットに対してこのメトリクスを計算すると，

4.1.2 クローン散布図

LEN (S1 ) = 2, LEN (S2 ) = 2, LEN (S3 ) = 3,

調査の必要があるコードクローンの分布状態を把握となる．このメトリクスを用いることによって，するために，クローン散布図に対して改良を行った．

クローンセット S3 のコード片が他のクローンセッ

図 2 は本稿で提案するクローン散布図を例を用いて表

トのコード片に比べて長いことがわかる．

現したモデルである．水平・垂直軸にはソースコード

P OP (S)15)

クローンセット S に含まれるコード片

中の字句が出現順に配置される．各ソースファイルはの数を表す．この値が大きいほど，同型のコード

そのパスのアルファベット順でソートされており，同片の数が多いことを意味する．例の 3 つのクロー

じディレクトリに位置するファイルは近い位置に出現

ンセットに対してこのメトリクスを計算すると，する．クローン散布図では，各クローンペアが線分とP OP (S1 ) = 4, P OP (S2 ) = 3, P OP (S3 ) = 2

して表現される（例ではコードクローンとして最低 2となる．このメトリクスを用いることによって，字句が必要であるとした）．線分を構成している各字

クローンセット S4 が他のクローンセットに比べ句は，その水平成分と垂直成分が等しいことを意味して多くのコード片を所有していることがわかる．

ている．クローン散布図は左上隅から右下隅への対角

N IF (S) クローンセット S に含まれるコード片を所

線に対して常に線対称になる．クローン散布図を用い有しているファイルの数を表す．この値が高い場ることによって，ユーザはコードクローンの量や分布

合，システムの設計が悪い，プログラミング言語に状態を俯瞰的に把握することができる．

適切な抽象化機構が存在しない，横断的関心事でこのクローン散布図はメトリクス RN R によるフィあるなどの原因が考えられる．例の 3 つのクロー

ルタリングの結果を表示している．° で示された字ンセットに対してこのメトリクスを計算すると，

情報処理学会論文誌

6



 








 





1959

N OCth (F ) ファイル F に存在するコード片の数を表す．例の 4 つのファイルに対してこのメトリクスを計算すると，N OC0.5 (F1 ) = 2, N OC0.5 (F2 ) =1, N OC0.5 (F3 ) = 2, N OC0.5 (F4 ) = 1 となる．




 








 





このメトリクスを用いることによって，ファイル





 





F1 , F3 がファイル F2 , F4 に比べて多くのコード



 



クローンを含んでいることがわかる．


ROCth (F ) ファイル F がどの程度重複化しているかを表す．F の字句数（コメントは除く）を(a) 選択前(b) 選択後

T OC(F )，F の字句のうち RN R の値が th 以

図 3 メトリクスグラフを用いたクローンセットの選択
Fig. 3 Model of Metric Graph上のクローンセットに含まれているものの数を

T OCduplicated (F, th) とした場合，ROCth (F ) は次式で計算される．

N IF (S1 ) = 3, N IF (S2 ) = 2, N IF (S3 ) = 2 とROCth (F ) =なる．このメトリクスを用いることによって，ク
ローンセット S1 が他のクローンセットに比べて

T OCduplicated (F, th)
T OC(F )例の 4 つのファイルに対してこのメトリクスを計算

多くのファイルを巻き込んでいることがわかる．

すると，ROC0.5 (F1 ) = 0.8, ROC0.5 (F2 ) = 0.4,

RN R(S) クローンセット S に含まれるコード片の繰

ROC0.5 (F3 ) = 1.0, ROC0.5 (F4 ) = 0.6 となる．

り返し要素でない部分の割合を表す．調査する必このメトリクスを用いることによって，ファイル

要の無いコードクローンのフィルタリングを行う

F3 が完全に重複化していることがわかる．

ために用いられる．このメトリクスの詳細は 4.1.1

N OFth (F ) ファイル F がコードクローンを共有して節を参照されたい．

いるファイルの数を表す．例の 4 つのファイルに対

次に上記のメトリクスを用いてどのようにクローン

してこのメトリクスを計算すると，N OF0.5 (F1 ) =セットを選択するかを説明する．クローンセットの選

2，N OF0.5 (F2 )=2，N OF0.5 (F3 )=3，

択機構をメトリクスグラフと呼ぶ．メトリクスグラフ

N OF0.5 (F4 ) = 1 となる．このメトリクスを用いのモデルを図 3 に示す．メトリクスグラフは多次元並ることによって，ファイル F3 が他の全てのファ行座標表現9) を用いている．各メトリクスにつき 1 つ

イルとコードクローンを共有してることがわかる．

の座標軸が用意される．また各クローンセットにき 1

4.2 コードクローン可視化ツール: Gemini

つの折れ線がそのメトリクス値に基づいて描画される．

4.1 節で提案した手法に基き，コードクローン可視化

ユーザは任意のメトリクスの上限または下限を変更すツール Gemini を再実装した．新 Gemini は CCFinder

ることで任意のクローンセットを選択することが可能

が対応している全てのプログラミング言語☆ に対してである．例として図 3(b) は，LEN 軸の下限値を変適用可能である．新 Gemini は以下のビューを，4.1.2

更した状態を表している．この変更によって，図 3(a)節 ∼ 4.1.4 節の提案手法の実装として持つ．

では選択状態であったクローンセット S1 と S2 が非• クローン散布図，

選択状態となっている．

• メトリクスグラフ，

4.1.4 ファイルメトリクス
ファイルに着目した分析を実現するために，クローンセットだけでなく，対象ファイルもコードクローン• ファイルリスト
これらのビューで選択したコードクローンやファイルは，簡単にそのソースコードを閲覧できる．

情報を用いて特徴づけを行う．ファイルメトリクスは4.1.2 節で述べたように，クローン散布図を用いる

メトリクス RN R を用いたフィルタリングの結果，調ことによって，ユーザはコードクローンの分布状態を査の必要がないと判断されたコードクローンを除外し俯瞰的に把握することができる．これは特に分析の初たコードクローン情報を用いて計算される．具体的に期段階で有効であると考えられる．図 2 では，クロー

は，メトリクス RN R の閾値を th とした場合，この

ン散布図は左上隅から右下隅への対角線に対して線対

メトリクスの値が th 以上のクローンセットのみがファ称であるが，レンダリングコストを抑えるために，実イルメトリクスの計算に用いられる．ここでは，th を

0.5 とする．ファイルリストは以下に示す 3 つである．

☆

C/C++, COBOL, FORTRAN, Emacs-Lisp, JavaVol. 0No. 0

産学連携に基づいたコードクローン可視化手法の改良と実装

7

トリクスグラフは数値に基いた絞込みには非常に向いている．しかし，ファイル名などに基いた選択には向いていない．この理由から，ファイルを選択する機構としてメトリクスグラフでなく，ファイルリストを用いた．また，ファイルリストに表示されているファイ
ルは，ファイル名のアルファベット順やメトリクス値の昇順・降順でソーティング可能である．
クローン散布図は，コードクローンの分布状態を俯瞰的に表示するので便利ではあるが，スケーラビリ
ティが低く実用的ではないという指摘もある8),14) ．しかし，著者らが実装したクローン散布図は，JDK1.5のソースコード全体（約 1,880,000 行）から検出した
図 4 ファイルリストのスナップショット
Fig. 4 A Snapshot of File List

コードクローン（クローンセット数：約 12,000 個，クローンペア数：2,500,000 個）に対して円滑に動作す
ることを確認している．

装では対角線より上方のコードクローンは描画しない．
なお，この実装では，RN R の値が閾値以上のコード
クローンを黒，閾値未満のコードクローンを青で表示
する．

5. 適 用 実 験
新 Gemini を情報処理推進機構（IPA）ソフトウェ
ア・エンジニアリング・センター（SEC）の先進ソフト

メトリクスグラフは定量的な特徴に基いてクローン

ウェア開発プロジェクトにおいてベンダー 5 社が開発

セットを選択するための機構である．クローン散布図

しているプローブ情報システム☆ に対して適用した12) ．

では，各クローンセットがどの程度目立つかは，それ各社は個別に開発を行っており，プロジェクトマネーに含まれるコード片間の位置関係に大きく依存しておジャでもソースコード，開発工数，開発体制（外部委り，定量的な特徴に基いて選択を行うことは難しい．

託先，要員数等）に関しては知りえない状況であった．

例えば，コード片を 100 個所有するクローンセット

プロジェクトマネージャが主催する進捗会議では，各Sexample があるとする．もし全てのコード片が同一社のマネージャから各工程の進捗割合と，予定日数のファイル内に存在する場合は，クローン散布図上でそずれが報告されるのみであった．このようなブライン

れらは近い位置に描画され，把握しやすい．しかし，ドマネジメントを支援するために，つまりブラックボッ

もしコード片が多くのファイル内に分散して存在する

クスとなっているソースコードの特徴を把握するため

場合は，クローン散布図上では，各クローンペアは離に，コードクローン分析を行った☆☆ ．

れた位置に描画されてしまい，把握しづらくなる．一

新 Gemini の適用は単体テスト終了後，結合テスト

方，メトリクスグラフでは，“100 個のコード片を持終了後の 2 回行った．全社合計の開発規模は数十万ス

つ” という特徴は，メトリクス P OP (Sexample ) で表

テップであり，結合テスト後は単体テスト後に比べ約されるため，コード片の位置に関係なくユーザは容易

2 万ステップ増加していた．このシステムは C/C++に Sexample を選択できる．

言語を用いて開発されている．コードクローン分析はファイルリストは，ソースファイルを選択するため各社が開発したソースコードに対して個別に行った．

の機構である．図 4 はファイルリストのスナップショッ

この実験では，30 字句以上のコードクローンを検出トである．ファイルリストは，全てのソースファイル

した．なお，検出された全てのコードクローンは関数を 4.1.4 節で紹介した 3 つファイルメトリクスと 2 つ内に閉じたものである．紙面の都合上，全ての分析結のサイズメトリクス LOC(F )，T OC(F ) と共に表示

果を示すのは困難であるので，一部分のみを示す．5.2

する．LOC(F ) と T OC(F ) はそれぞれファイル F の行数と字句数を表す．
著者らはファイルの選択機構としてメトリクスグラ
フを用いなかった．ファイルを選択する場合は，メト
リクス値だけでなく，ファイル名やパス名も用いたほうが利便性が高い．4.1.3 節で述べているように，メ☆

プローブ情報システムとは，センサーなどの計測機器が収集した情報をネットワークを通じてセンターに転送し，その情報を分析・蓄積・加工などすることによってさまざまな有用な情報を提供するシステムである．
☆☆
この分析は共同開発各社合意の下に確保されたソフトウェア工学研究用の機密室内で行った．

情報処理学会論文誌

8

1959

$&%&')(+*-,/.102435')(+*-,/.10


#




!"




















       










                 

図 5 Y 社の重複度の変化
Fig. 5 Duplicated ratio of ﬁle in the sub-systemdeveloped by Y company

節 ∼ 5.4 節の各分析は，結合テスト後のコードに対する適用結果である．なお，この適用実験では，メト
リクス RN R の閾値は 0.5 とした☆ ．

図 6 クローン散布図のスナップショット
Fig. 6 A snapshot of Scatter Plot

5.1 履 歴 分 析
単体テスト後と結合テスト後のクローン検出量の変高いが，これまでに数多くのソフトウェア内で運用さ化を調査した．表 1 は単体テスト後，結合テスト後のれており，信頼できるとの回答を得た．

検出された重複コード片の数とシステムの重複度を表

5.2 クローン散布図を用いた分析している．Y 社の開発部分に，単体テスト後に比べて

図 6 は，ある社が作成したコードのクローン散布図

結合テスト後に多くのコードクローンが含まれていた．

である．A の部分にメトリクス RN R でフィルタリ

通常，単体テスト後には新規で実装される機能は無い

ングされたコードクローンが多数存在していた．これため，単体テスト後と結合テスト後のクローン検出量

らのソースコードを閲覧したところ，デバック用の情にあまり差はない，と予測していた．Y 社が開発した

報出力コード（連続した printf 文）やデータの妥当性

ファイルの重複度分布状態のグラフを図 5 に示す．こチェック（連続した if 文）であり，うまくフィルタリの図からわかるように，結合テスト後は重複度が非常

ングを行えていることが確認できた．

に高いファイル (81% - 100%) の数が増えていた．Y

B の部分にも多くのコードクローンが存在した．こ社の開発者にインタビューを行ったところ，これらのの部分のコードクローンは黒の格子をまたいで存在す

ファイルは，結合テストを行う前に，新しい機能を実ることからディレクトリ間クローンであることがわか装するために社内で構築したライブラリコードを流用

る．この部分は車両の位置情報を扱う処理部分であり，した部分であった．ライブラリのファイル間で多くの車両種別によりディレクトリが分かれていた．ディレ

コードクローンを共有しているため，重複度は非常にクトリ毎に扱う情報の種類は異なるものの，処理内容

表 1 検出されたクローンの量
Table 1 Amount of code clones in sub-systems
単体テスト後
コード片数
重複度

V社
W社
X社
Y社
Z社

259
369
4,483
6,747
2,450

33.9%
27.3%
55.3%
42.6%
56.2%

結合テスト後
コード片数
重複度

259
379
4,768
7,628
2,505

33.4%
26.2%
50.8%
46.0%
56.3%

は非常に類似していた．

5.3 メトリクスグラフを用いた分析
この分析では，あらかじめ RN R の値が 0.5 以下のクローンセットは除いている．

5.3.1 LEN の大きいコードクローン
ある社のソースコードから検出された最長のコー
ドクローンは長さが 441 字句 (154 行) であった．このクローンセットは 2 つのコード片からなり，それぞれ AAAXXXBBB.cpp と AAAYYYBBB.cpp とい☆

本来ならば，RN R の値が 0.5 以下であるクローンセット全てを調査し，フィルタリングの精度を算出すべきである．しかし，5 社全てのソースコードを 10 時間程度で分析しなければならな
いという時間的制約の都合上，そのような分析を行うことができなかったことをご理解頂きたい．

うファイルに含まれていた．AAAYYYBBB.cpp 中のコードクローン内で呼び出されている関数の名前の一部が XXX であり，また該当箇所のコメントにも XXXが含まれていた．このことから，このコードクローン

Vol. 0No. 0

産学連携に基づいたコードクローン可視化手法の改良と実装

9は，AAAXXXBBB.cpp から AAAYYYBBB.cpp に

5.5 旧 Gemini との比較

コピーアンドペーストされ，その後修正を忘れたので

ここでは，本実験を仮に旧 Gemini で行った場合，どはないかと思われる．

5.3.2 POP の大きいコードクローンのような不都合が生じるのかを述べる．
本実験の対象規模は 5 社合計で数十万ステップであ全社において P OP の値が最も大きかったクローンり，それぞれの社が担当したサブシステムの規模にはセットは，データの整合性をチェックし，もし間違っかなりの差があった．ある社が担当していたサブシスていればエラーを出力する，という処理の部分であっテムの規模は，他の 4 社のサブシステムの合計規模よた．データの種類は社間で違いがあるものの，処理内りも大きかった．このため，もしこの社のサブシステ

容は全社で共通していた．

ムを旧 Gemini で分析した場合，クローン散布図のス

5.3.3 NIF の大きいコードクローン

ケーラビリティの問題により，分析が困難であったこ

ある社のソースコードから検出されたクローンセッとが考えられる．

トの N IF の最大値は 8 であった (8 個のファイル内

特徴的なクローンセットを調査するためのメトリクに存在する)．このコードクローンは，文字列の終端

スは旧 Gemini でも用いており，同様の分析を行うこに NULL があるかをチェックし，もしなければ追加すとは可能である．しかし，新 Gemini では，メトリク

る処理を行っている関数であった．関数全体が重複しスグラフにフィルタリングメトリクス RN R を新たにていたため，ユーティリティパッケージへの移動など導入していることにより，より効率的にクローンセッ

で，簡単に集約可能である．

トの調査を行うことができる．RN R の低いコードク

5.4 ファイルリストを用いた分析

ローン，つまりプログラミング言語に依存したコード

この分析では，RN R の閾値は 0.5 とした．

クローンは，システムの至る所に存在することから，

5.4.1 NOC の大きいファイル

メトリクス P OP と N IF の値が高い傾向であることある社が開発したソースコードに，358 個のコードがわかっている．本実験では，P OP と N IF が高いクローンを所有しているファイルが存在した．コード

クローンセットを調査しており，旧 Gemini を用いたクローンは特定の処理をしている部分に集中している場合はこの分析により時間が必要であったことが想定わけではなく，さまざまな部分がファイル内クローンされる．

もしくはディレクトリ内ファイル間クローンになってまた，特徴的なファイルを調査するために本実験でいた．特に問題であると思われるコードクローンは特用いたメトリクス N OC ，ROC ，N OF はいずれも定されなかったが，このファイル自体が非常に多くの

新 Gemini において導入されたメトリクスであり，旧処理を行っており，その保守性が疑われた．

Gemini において同様の分析を行うことはできない．

5.4.2 ROC の大きいファイル
ある社のソースコード中に重複度が 96%であるファ

6. 産業ソフトウェアの分析

イルが 2 つ検出された．一方はある処理をオンライ

ここでは，これまでに筆者らが産業界のソフトウェ

ン時に行い，他方は同様の処理をオフライン時に行うアを分析したことによって得た知見を述べる．筆者らファイルであった．開発者にこのコードクローンの存は，本稿で述べたソフトウェア以外にも，産業ソフト在を報告したところ，設計時からオンライン時とオフ

ウェアの分析作業を行ってきている．

ライン時のコードは別々に実装すると決めており，存在が把握されているコードクローンであった．

コードクローン分析の利用法として外部委託先が作成したソースコードのチェックが挙げられる．外部委

5.4.3 NOF の大きいファイル

託先へ支払う金額が規模ベースの場合，不必要にコーある社が開発したソースコードに，他の 13 個のファ

ドクローンを作成し，規模を大きくしている場合が多イルとコードクローンを共有しているファイルが存在数見つかっている．全く同一内容のファイルが複数存した．このファイルにはさまざまな入力処理が含まれ在している場合もある．ソフトウェアの規模が大きいており，それぞれの処理が別ファイルとコードクロー

場合このような工作を手動によるチェックで見抜くのンになっており，結果として N OF の値が大きくなっは難しいが，コードクローン分析を用いることによりていた．コードクローンになっている部分は，対象ソ

簡単に見つけることができる．

フトウェアで汎用的な処理であり，処理内容も単純であることから，特に問題はないと思われた．

コードクローンを多く含む箇所を “設計が失敗した部分” と捉え，次回以降のプロジェクトで同じ過ちを繰り返さないための利用法もある．特に注意しなけれ10

情報処理学会論文誌

1959

ばならないのは，開発者が存在を知らなかったコード

れは他のクローン散布図に比べ改良されている点でクローンである．このようなコードクローンの存在をある1),3),14) ．Kapser らも調査の必要がないコードク

確認し，なぜ発生したのかその原因を究明することにローンのフィルタリングは重要であると述べており，

よって，次回以降のプロジェクトにおいて，修正漏れな

彼らのツールもフィルタリング機構を持つ8) ．また，どを減らすことが可能となる．ここでは簡単に 2 つの著者らのクローン散布図は，ディレクトリ境界とファ利用法は述べたが，コードクローン分析はソースコー

イル境界を異なって表示する．これにより，ファイル

ドさえあれば行うことが可能であるのでその汎用性は内・ファイル間のコードクローンの分布情報だけでな

非常に高く，他にもさまざまな利用法が考えられる．

く，ディレクトリ間・ディレクトリ内ファイル間・ファ

産業界のソフトウェアのソースコードを企業の外部

イル内のより詳しいコードクローンの分布状態を知るに持ち出すことは現実的ではないため，著者らが企業ことができる．これらの 2 つの機能を持ったクローンまで赴いて分析作業を行わなければならない．コード

散布図を使うことにより，ユーザは調査する必要のあ

クローン分析はソースコードを対象としているので，るコードクローンの，ディレクトリ階層中での分布状

プロジェクトのマネージャよりも実際にコーディング

態を知ることができる．

を行った開発者の意見を頂きたい場合が多い．しかし，Rieger らはコードクローン情報の視覚的な表示方

コーディングを外部委託していたり，長期開発のソフ法を提案・実装している14) ．彼らの提案は Polymetric

トウェアにおいてコードクローンが検出された部分のView11) の原理に基いており，ユーザにさまざまな粒

開発者が現在は違うプロジェクトに移動になっていた

度で抽象化されたコードクローン情報を提供する．彼りなど，開発者から意見を頂ける場合は少ない．また

らもまた，コードクローン検出対象が非常に大きいシ企業まで赴いて分析をするということから，分析作業

ステムである場合は，非常に多くのコードクローンがに費やすことのできる時間は限られてくる．本稿で述検出されてしまうため，フィルタリング機構が必要不

べた実験も実際に分析作業に割り当てることができた

可欠であると述べている．

のは 10 時間程度であった．

Johnson は HTML を用いたコードクローン情報の巡回手法を提案している6) ．HTML のハイパーリンク

7. 関 連 研 究を用いることによって，コードクローンを共有していKapser らはコードクローンに対する理解支援を目るソースファイル間を自由に巡回することを可能にし的としたツール CLICS を開発している8) ．CLICS はている．しかし，Johnson の手法には，コードクロー

ソースファイルの構造やシステムのアーキテクチャをンの状態を俯瞰的に把握する機構・コードクローンを

コードクローン情報を付与して表示する．CLICS はク

定量的に特徴付けする機構が無く，どのコードクロー

エリ処理を実装しており，ユーザは興味のある特徴をンから分析すべきかユーザは判断することができない．

クエリとして与えることにより，簡単にその条件を満たすコードクローン情報を得ることができる．Kapser
らはクローン散布図はスケーラビリティが高くなく実用的ではないと述べており，CLICS はクローン散布図を実装していない．

8. お わ り に
8.1 ま と め
本稿では，コードクローン可視化手法の改良について述べた．これは著者らの産学連携の結果得られた知筆者らは，コードクローンの状態を把握するため

見に基づいており，実用性に長けている．また，このにはクローン散布図は必要不可欠であると考えてい改良手法を用いてコードクローン可視化ツール Gemini

る．新 Gemini のクローン散布図は過去に提案されたを再実装した．新 Gemini は以下の機能を持つ．

クローン散布図に比べ十分にスケーラビリティが高い．例えば，JDK1.5(1,881,140 行) を対象とした適用実験では，コード片の長さが 30 字句以上のクローン
ペアが 2,497,433 個，クローンセットが 12,522 個検出されたが，クローン散布図は円滑に動作した ．ま☆

た，著者らのクローン散布図は，調査の必要がない
コードクローンのフィルタリング結果を表示する．こ• 調査の必要がないコードクローンのフィルタリン
グを行う機能• 対象ソフトウェア全体のコードクローンの分布状
態を俯瞰的に提示する機能• 特定の特徴を持ったコードクローン・ファイルの情報を簡単に得ることができる機能
新 Gemini を用いて企業が開発したソフトウェアに対して適用実験を行った．実験の結果，さまざまなコー☆

CPU:Pentium4 3.0GHz，メモリ:2GB，OS:WindowsXP

ドクローンの状態・発生理由を把握することができた．

Vol.0No.0

産学連携に基づいたコードクローン可視化手法の改良と実装

8.2 今後の課題

11

謝辞 旧 Gemini の実装を行った宇宙航空研究開発

現在の Gemini ではプログラミング言語依存のコー機構の植田泰士氏に感謝する15) ．本稿の適用実験を行

ドクローンのフィルタリングしか行うことができない

うにあたり協力を頂いた，独立行政法人情報処理推進ため，アプリケーション依存のコードクローンへの対機構の松浦清氏，神谷芳樹氏，樋口登氏，奈良先端科学策を行わなければならない．アプリケーション依存の技術大学院大学の松村知子氏に感謝する．本研究は一

コードクローンは，その特徴はさまざまであり，言語部，文部科学省リーディングプロジェクト「e-Society

依存のコードクローンのようにメトリクスを用いて基盤ソフトウェアの総合開発」の委託に基づいて行わ

フィルタリングを行うことは難しい．このため，ユーれた．また，日本学術振興会 科学研究費補助金 基盤

ザが検出して欲しくないコードクローンのパターンを研究 (A)(課題番号:17200001)，特別研究員奨励費 (課入力し，そのパターンにマッチするコードクローンを

題番号:16-8351) の助成を得た．

フィルタリングするなどの方法を用いることが考えられる．
ツールのスケーラビリティをさらに高くすることも課題の１つである．Gemini を再実装することによって，分析可能なソースコードの規模は 10 万行単位から 100 万行単位まで上昇した．100 万行規模まで分析可能になったことで，1 つのソフトウェアが対象の場
合は円滑に分析作業を行うことができるようになった．
しかし，その部署で過去に開発したソフトウェアから
まとめてコードクローン分析を行い，ソフトウェアにまたがって存在するコードクローンを社内ライブラリ
化したい，との声も寄せられている．現在のスケーラビリティではこのような分析を行うことは難しく，更なるスケーラビリティ面での改良が望まれている．
現在，著者らは関数内で閉じたコードクローンのみを対象としている．このため，検出されるコードク
ローンはあまり大きくない．しかし，ソフトウェア内部にはより大きい単位での重複関係が存在している可能性がある．例えば，CCFinder が検出したコードク
ローン情報をアーキテクチャ情報にマッピングをさせることによって，より大きい単位での重複部分を抽出することが考えられる．
コードクローンの検出精度そのものも高めていく必要もある．現在 CCFinder が検出できるコードクロー
ンは，全く同一もしくは識別子名が異なるコードク
ローンのみであり，コピーアンドペースト後に文が挿入・削除されたコード片はコードクローンとして検出できていない．このようなコードクローンを検出でき
れば，クローン分析はより実用的になると考えられる．
また，コードクローン情報と他の情報の相関を調べることにより，なにか有益なことがわかるかもしれない．例えば，コードクローン情報とバグ情報を付き合わせることにより，コードクローンとバグ発生頻度どの程度関連しているか，つまりコードクローンがどの程度保守作業に影響を与えているかが特定できるのではないかと思われる．

参

考

文

献

1) Baker, B. S.: On Finding Duplication and
Near-Duplication in Large Software Systems,
Proc. of the 2nd Working Conference on Reverse Engineering, pp.86–95 (1995).
2) Baxter, I., Yahin, A., Moura, L., Anna, M. andBier, L.: Clone Detection Using Abstract Syntax Trees, Proc. International Conference on
Software Maintenance 98, pp.368–377 (1998).
3) Ducasse, S., Rieger, M. and Demeyer, S.: A
Language Independent Approach for Detecting Duplicated Code, Proc. of the International
Conference on Software Maintenance 99, pp.
109–118 (1999).
4) Fowlor, M.: Refactoring: improving the designof existing code, Addison Wesley (1999).
5) 井上克郎：エンピリカルソフトウェア工学の研究と実践 ―コードクローンを例に―，EASE プロ
ジェクトニュースレター， Vol.4, pp.1–4 (2005).
6) Johnson, J.H.: Navigating the Textual Redundancy Web in Legacy Source, Proc. of the 1996
Conference of Centre for Advanced Studies on
Collaborative Research, pp.7–16 (1996).
7) 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).
8) Kapser, C. and Godfrey, M.: Improved Tool
Support for the Investication of Duplication in
Software, Proc. of the 21st International Conference on Software Maintenance, pp.305–314(2005).
9) 加藤博己：データベースのビジュアルな検索と分析 (OLAP)，情報処理学会会誌，Vol.41, No.4,
pp.363–368 (2000).
10) Komondoor, R. and Horwitz, S.: Using slicing to identify duplication in source code, Proc.
of the 8th International Symposium on Static
Analysis, pp.40–56 (2001).
11) Lanza, M. and Ducasse, S.: Polymetric Views:

情報処理学会論文誌

12

A Lightweight Visual Approach to Reverse Engineering, IEEE Transactions on Software Engineering, Vol.29, No.9, pp.782–795 (2003).
12) 松浦 清，神谷芳樹，樋口 登：先進ソフトウェ
ア開発プロジェクト PartII，SEC journal, Vol.5,
pp.44–49 (2006).
13) Mayrand, J., Leblanc, C. and Merlo, E.: Experiment on the automatic detection of function clones in a software system using metrics,
Proc. of the International Conference on Software Maintenance 96, pp.244–253 (1996).
14) Rieger, M., Ducasse, S. and Lanza, M.: Insights into System-Wide Code Duplication,
Proc. the 11th Working Conference on Reverse
Engineering, pp.100–109 (2004).
15) 植田泰士，神谷年洋，楠本真二，井上克郎：開発
保守支援を目指したコードクローン分析環境，電子情報通信学会論文誌， Vol.86-D-I, No.12, pp.
863–871 (2003).
16) Yip, S. W.L. and Lam, T.: A Software Maintenance Survey, Proc. of the 1st Asia-Paciﬁc
Software Engineering Conference, pp. 70–79(1994).
17) ソフトウェア工学工房（コードクローンセミナー）：. http://sel.ist.osaka-u.ac.jp/kobo/.

1959

吉田 則裕（学生会員）
平 16 九工大・情報工・知能情報卒．
平 18 阪大大学院博士前期課程修了．
現在同大大学院博士後期課程 1 年．
コードクローン分析・リファクタリ
ング支援に関する研究に従事．人工知能学会会員．

楠本 真二（正会員）
昭 63 阪大・基礎工・情報卒．平 3
同大学院博士課程中退．同年同大・
基礎工・情報・助手．平 8 同学科講師．平 11 同学科助教授．平 14 阪
大・情報・コンピュータサイエンス・
助教授．平 17 同学科教授．博士 (工学)．ソフトウェ
アの生産性や品質の定量的評価，プロジェクト管理に関する研究に従事．IEEE，JFPUG 各会員．

(平成 ? 年 ? 月 ? 日受付)
(平成 ? 年 ? 月 ? 日採録)
肥後 芳樹（正会員）井上 克郎（正会員）

平 14 阪大・基礎工・情報中退．平昭 54 阪大・基礎工・情報卒．昭18 同大大学院博士後期課程修了．現

59 同大大学院博士課程了． 同年同

在日本学術振興会特別研究員．コー

大・基礎工・情報・助手．昭 59〜昭ドクローン分析・リファクタリング

61 ハワイ大マノア校・情報工学科・支援の研究に従事．

助教授．平 1 阪大・基礎工・情報・講師．平 3 同学科・助教授．平 7 同学科・教授． 工学博士．平 14 阪大・情報・コンピュータサイエンス・
教授．ソフトウェア工 学の研究に従事．日本ソフト
ウェア科学会，IEEE，ACM 各会員．