スライド 1 - Software Engineering Laboratory

コードの生存期間を考慮したコード
クローンと欠陥修正の関係調査
大阪大学 大学院情報科学研究科
○齋藤 晃,吉田 則裕,
松下 誠,井上 克郎
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
1
概要
• コードクローンと欠陥修正の関係には様々な
報告が存在
• 既存研究においてコードクローンと欠陥修正
の関連は小さいと報告
– しかし既存研究ではコードクローンの生存期間を
考慮していない
• コードクローンの生存期間を考慮してクローン
と欠陥修正の関係を再調査
– 調査の結果,生存期間の短いクローンのほうが
欠陥修正に含まれる割合が多い
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2
背景:コードクローンとは
• ソースコード中に存在する一致または類似
したコード片
– コピーアンドペーストなどの理由により生成
• コードクローンに修正漏れがあると欠陥の
要因となる
– リファクタリング等を用いて除去する必要がある
欠陥
C1
C2
C4
C5
C3
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
3
背景:欠陥管理システム
• 欠陥に関する内容・発見日時・修正履歴など
の情報を一元管理
• 多くの欠陥管理システムはWebサーバ上で
動作
• オープンソースソフトウェアの有名な欠陥管理
システムとしてBugZillaが代表的
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
4
背景:コードクローンと欠陥の関係
• コードクローンと欠陥との関係には様々な
報告がある
– 重複したコードは不吉な匂い(Bad Smell)
[Fowler1999]
– コードクローンは保守性を低下させるので積極的
に除去すべき[Jiang2007]
– コードクローンと欠陥修正の関連は小さい
[Rahman2010]
[Fowler1999]M. Fowler, K. Beck, J. Brant, W. Opdyke, and D. Roberts,“Refactoring: Improving the Design of Existing
Code”, 1st ed.Addison-Wesley Professional, July 1999.
[Jiang2007] L. Jiang, Z. Su, and E. Chiu, “Context-based detection of clone-related bugs” ESEC-FSE 2007
[Rahman2010] F. Rahman, Department
C. Bird, P. of
Devanbu,
is that
Smell?“,
MSR2010
Computer"Clones:What
Science, Graduate
School
of Information
Science & Technology, Osaka University
5
既存研究
コードクローンと欠陥修正の関連を調査[Rahman2010]
手順1.過去のソースコードのスナップショットを取得
手順2.コードクローン検出
手順3.欠陥修正と対応するコミットの取得
手順4.欠陥修正に含まれるコードクローンの割合を
算出
[Rahman2010] F. Rahman, Department
C. Bird, P. of
Devanbu,
is that
Smell?“,
MSR2010
Computer“Clones:What
Science, Graduate
School
of Information
Science & Technology, Osaka University
6
1.過去のソースコードのスナップショットを取得
1ケ月おきにリポジトリからスナップショットを取得
ソフトウェア
リポジトリ(SVN, Git等)
チェックアウト
・・・
2008/03/01
2008/04/03
2009/02/02
その月の中で最も早い日にコミットされたファイル群を取得
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
7
2.コードクローン検出
• コードクローン検出ツールDECKARDを使用[Jiang2007]
– 抽象構文木(AST)を構築し,それらの等価性を比較する
ことによりクローンを検出
• コードクローンは位置を特定する情報を保有
– クローンが含まれるスナップショット(sn), ファイル名(fn)
– クローンの開始行(lbegin), 終了行(lend)
s1
クローン
f1…fn
s2
lbegin
lend
2008/03/01
s3
f1…fn
f1…fn
・・・・・
2008/04/03
2009/02/02
[Jiang2007] L.Jiang, Z.Su, G.Misherghi, S.Glondu, “DECKARD:scalable and accurate tree-based detection of code
clones“, ICSE2007
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
8
3.欠陥修正と対応するコミットの取得
• 欠陥を含むコードの位置を特定することは困難
– 修正済みのバグレポートを取得し,欠陥が修正された
コード全てを欠陥コード(Buggy Code)とする
• Buggy Codeを取得するために,リポジトリから欠陥
が修正されたコミットとバグレポートを対応付けを実
行
リポジトリのコミットログ
欠陥管理システム
欠陥ID
状態
詳細
10001
RESOLVED
・・・
10002
RESOLVED
・・・
・・・
・・・
・・・
-----------------------------------------------------------------------r201 | authorName | 2009-01-01
add feature: ・・・・
リビジョン番号
-----------------------------------------------------------------------r202 | authorName | 2009-02-01
bug fixed: #10002 欠陥IDがコミットログに記述
------------------------------------------------------------------------
コミットログを解析して対応付け
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
9
4.欠陥修正に含まれるクローンの割合を算出
• 欠陥修正が行われたリビジョンと最も近い
スナップショットを取得
– スナップショットと間に変更が生じている可能性
があるので,diffコマンドによって調整
• Buggy Code内に含まれるコードクローンの
重複率dを算出
Buggy コード内のクローンの
重複率d  Buggy Codeの行数
行数
多くのコードクローンは欠陥修正に含まれていないと
いう結果を報告
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
10
既存手法の問題点
(1/2)
既存研究の調査はクローンの生存期間を考慮していない
– 既に修正が頻繁に生じているコード片は今後も変更が生じやすい
– たとえコードクローンであってもよく知られたプログラミングロジックで
あれば欠陥修正との関連は小さくなりやすい
C’1
C1
C2
C3
C4
修正
C’2
C3
C4
C’’1
修正
C’’2
修正
されやすい
C3
C4
修正
されにくい
生存期間に着目することでより欠陥に起因するコードクローンを特定できる
のではないか?
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
11
既存手法の問題点
(2/2)
欠陥修正を行ったリビジョンとスナップショットとの期間が
増えると誤差が大きくなる
– 欠陥修正時ではコードクローンであってもスナップショットではクローン
でない可能性がある
クローン
でない
取得したスナップショット
修正
コードを修正
欠陥修正を行ったリビジョン
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
12
研究内容
既存手法の手順に以下の手順を追加
• Buggy Codeに含まれているコードクローンに
包含されるコード片の生存期間を取得
– RQ: 生存期間の長いクローンは欠陥が少なく、
生存期間が短いクローンは欠陥を多く含む
• スナップショットを欠陥修正と対応付けした
リビジョン全てにコードクローン検出を実行
– 取得したスナップショットとの誤差を小さくする
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
13
クローンの生存期間の取得方法
手順1-4.Buggy Code内に含まれるクローン
の抽出と重複率の算出
– 既存手法と同様
以下の手順A, Bを追加
A.コード片の変更の有無を過去のリビジョンと
比較
B.コード片の生存期間を算出
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
14
コード片の変更の判定・生存期間の算出
• 1ケ月おきに過去のリビジョンから該当するコード片
に変更があるかどうかを判定
– 差異はdiffが存在するかどうか
• 変更が生じたリビジョンとBuggy Codeが検出された
リビジョンとの日付の差が生存期間
BuggyCode
C1
C2
過去にコード片
が存在しない
C2
過去にコード
片が存在
C2
C3
C4
約1ケ月
r2
2009-03-02
r1
r0
rs
2009-04-04
2009-05-01
2009-06-01
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
15
変更の有無の判定
• 変更の有無はdiffコマンドを使用
– 変更が生じた周りの行は取得しないよう設定
• 過去にリビジョンに対して,下記の1~4の場所
に差分が存在すれば変更が生じたと判定
diffの開始行
4. 1.
3.
コード片
コード片の開始行
コード片の終了行
2.
diffの終了行
過去のリビジョン
欠陥修正が行われた
リビジョン
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
16
適用実験
• 下記のオープンソースソフトウェアを調査
– gimp・・・画像処理ソフトウェア
– evolution・・・Gnome環境に付属するメールクライ
アント
• これらは既存研究でも調査対象
• リポジトリはGitを使用
• BugZillaから修正完了したバグレポートを取得
– Statusが“RESOLVED”, “VERIFIED”,
“CLOSED”のいずれかに設定
– Resolutionが“FIXED”に設定
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
17
実験結果:生存期間の抽出
抽出したコードクローンの数と生存期間
プロジェクト名
コードクローンの数
生存期間最大(日)
生存期間最小(日)
Gimp
1093
3460
32
Evolution
1114
3812
41
生存期間中央値(日)
574
1791
生存期間中央値よりも長いコードクローン
(Clong)と短いコードクローン(Cshort)に分割
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
18
実験結果:欠陥修正に含まれるクローンの分布
ClongとCshortに対して欠陥修正にクローンが含まれる
割合を算出
(a)Gimp
1.2
(b)Evolution
1.2
1
1
累積 0.8
カバレッジ0.6
0.8
0.4
0.4
0.2
0.2
0.6
0
Clong
Cshort
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
欠陥修正に含まれるクローンの重複率
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
累積カバレッジ(縦軸)は欠陥修正に含まれるクローンがx%以下のもの
が全体の何割を占めるかを表す
生存期間が短いクローンの方が欠陥修正に多く含まれる
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
19
実験結果:欠陥修正に含まれるクローンの分布
ClongとCshortに対して欠陥修正にクローンが含まれる
割合を算出
(a)Gimp
全体に対
する割合
(b)Evolution
0.45
0.4
0.4
0.35
0.35
0.3
0.3
Clong
Cshort
0.25
0.25
0.2
0.2
0.15
0.15
0.1
0.1
0.05
0.05
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
欠陥修正に含まれるクローンの重複率
生存期間が短いクローンの方が欠陥修正に多く含まれる
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
20
考察
(1/2)
本調査から得られた知見
生存期間の短いコードクローンはより欠陥に
含まれる
有効な場面
コードクローンのリファクタリングによる除去
– 全てのコードクローンのリファクタリングは現実的
でなく,優先的に対象を選ぶ必要がある
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
21
考察
(2/2)
• 提案手法で取得した生存期間の定義の検討が必要
提案手法で取得した生存期間
コード片そのものが存在する期間
コード片が存在
しない
クローン
コード片が存在
• 過去のバージョンにおいてクローン検出を行い対応付ける必
要がある
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
22
まとめ
• 生存期間を考慮して欠陥修正に含まれる
コードクローンの割合を調査
• 生存期間が短いコードクローンのほうが欠陥
修正に含まれる割合が大きい
• 今後は生存期間の取得方法を再検討
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
23
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
24