コードの生存期間を考慮したコード クローンと欠陥修正の関係調査 大阪大学 大学院情報科学研究科 ○齋藤 晃,吉田 則裕, 松下 誠,井上 克郎 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
© Copyright 2024 ExpyDoc