複数のプロジェクトを対象としたクローンの系譜にもとづく ソースコード再利用分析手法の提案 大阪大学大学院情報科学研究科 コンピュータサイエンス専攻 ○ 森脇匠哉,堀田圭佑,井垣宏, 楠本真二,井上克郎 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University ソースコードの再利用[1] 既存のソースコードのコピーアンドペーストにより行われる コピー コピー メリット 同じソースコードを二度書かなくて済む ⇒ 生産性の向上 テスト済みのソースコードの再利用 ⇒ 信頼性の向上 デメリット[2] 不用意な再利用はライセンス違反やバグの伝搬に繋がる コピーアンドペースト後にコード修正が必要な場合もある 再利用しやすいソースコードや,開発者がどのようなときに再利用を行うか といった再利用動向の分析が重要である [1] Trivedi Prakriti and Kumar Rajeev. Software metrics to estimate software quality using software component reusability. IJCSI International Journal of Computer Science Issues, Vol. 9, pp. 144–149, 2012. [2] Will Tracz. Confessions of a used-program salesman: Lessons learned. In Proceedings of the 1995 Symposium on Software Reusability, SSR ’95, pp. 11–13, New York,Software NY, USA, 1995. ACM. Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, 2 Osaka University 組織でのソフトウェア開発における再利用分析 再利用分析によりライセンス違反の特定,よく再利用されるソースコードにつ いてのライブラリ化の提案,ソースコードの推薦などが可能となる[3] 再利用分析における課題 プロジェクト間での再利用の特定 開発者単位での再利用分析 組織 プロジェクトA プロジェクトB コピー 実装 開発者A (実装) コピー 開発者B (利用) 開発者C (利用) 開発者B 開発者A 3 [3] Naoki Fukuyasu, Sachio Saiki, Hiroshi Igaki, and Yuki Manabe, "Experimental Report of the Exercise Environment for Software Development PBL," In 13th ACIS International Conference onEngineering Software Engineering, Intelligence, Networking and Parallel/Distributed Computing, pages 482-487, August Software Laboratory, Artificial Department of Computer Science, Graduate School of Information Science and Technology, Osaka 2012. University 目的とアプローチ 目的 組織でのソフトウェア開発における 開発者ごとの再利用動向を分析すること アプローチ 複数プロジェクトをまたがるクローンの系譜を導出し, その系譜から再利用動向の情報を取得 4 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University コードクローンとクローンの系譜 コードクローン 利用者 コードクローン: 同一または類似したコード片を持つもの コードクローンを用いた既存の再利用分析研究 再利用の規模や性質を分析[4] コードクローン作成者 コードクローンであるコード片の 内,実装日時が最も古いコー ド片を実装した開発者 コピー コード クローン A コードクローン 利用者 既存のコード片を再利用した開発者 コピー B C クローンの系譜[5] コードクローンがいつ生成 され,どのような修正がな されたかを示す rev. i rev. i+1 rev. i+2 rev. i+3 [4]Lars Heinemann, Florian Deissenboeck, Mario Gleirscher, Benjamin Hummel, and Maximilian Irlbeck. On the Extent and Nature of Software Reuse in Open Source Java Projects. In Proceedings of the 12th International Conference on Top Productivity Through Software Reuse, ICSR’11, pp. 207–222, Berlin, Heidelberg, 2011. [5] Miryung Kim, Vibha Sazawal, and David Notkin. An empirical study of code clone genealogies. In 13th ACM SIGSOFT international symposium on Foundations of software engineering, 2005. 5 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 再利用分析の概要 STEP1: 合成リポジトリの作成 リポジトリ rev. i STEP2: 合成リポジトリ クローン の系譜の導出 rev. i+1 rev. i+2 rev. i rev. i+1 rev. i+2 rev. i+3 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ rev. i+1 rev. i+2 rev. i+3 rev. i+3 STEP3: コードクローン作成者 と利用者の特定 6 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University STEP1: 合成リポジトリの作成 リポジトリA Rev. A1 t1 t3 Rev. A2 a1’.java a1.java リポジトリB Rev. B1 t2 Rev. B2 b1.java 全リビジョンを 時系列順にマージ t4 b1.java b2.java time 合成 リポジトリ Rev. 1 a1.java 複数リポジトリの ファイル情報を持つリポジトリ t1 Rev. 2 t2 Rev. 3 t3 Rev. 4 a1.java a1’.java a1’.java b1.java b1.java b1.java t4 b2.java 7 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University STEP2: クローンの系譜の導出 本研究では,クローンの系譜特定ツールECTEC [6]を利用 コードクローンがいつ発生し,どのような変更がなされてきたかが分かる 再利用の検出 再利用の検出 クローンの系譜 rev. i rev. i+1 rev. i+2 rev. i+3 コードクローン の発生 変更なし 新たなコード片 が追加 コードクローンである コード片が削除 [6]Yoshiki Higo, Keisuke Hotta, and Shinji Kusumoto. Enhancement of crd-based clone tracking. In Proceedings of the 13th International Workshop on Principles of Software Evolution (IWPSE2013), pp. 28{37, 8 2013. 8 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University STEP3: コードクローン作成者と利用者の特定 ソースコードの実装日時からコードクローンの作成者と利用者を検出 コードクローン作成者: 再利用元のソースコードを記述した開発者 開発者A A:2015/1/1 A:2015/1/1 A:2015/1/1 A:2015/1/1 B:2015/2/2 B:2015/2/2 コピー B:2015/2/2 B:2015/2/2 コピー 開発者B rev. i コードクローン利用者: 再利用を行った開発者 C:2015/3/3 開発者C rev. i+1 rev. i+2 rev. i+3 コードクローン利用者: 再利用を行った開発者 作成者と利用者の特定を行うことで,頻繁にソースコードが再利用される開発者の分 析や,再利用を積極的に行う開発者についての分析などが可能となる 9 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 仮想マシンを用いた並列処理 複数の仮想マシン(VM)を用意し,STEP2及びSTEP3を並列化 データベースサーバ用VM(DBserver) プログラム実行用VM(worker) STEP2:リビジョン(r)単位で並列化 STEP3:クローンの系譜(ID)単位で並列化 r1~2000 ID1~50 r2001~3000 ID51~100 DBserver r3001~3500 ・ ・ ・ ・ ・ ・ ID101~150 ・ ・ ・ r9901~10000 ・ ・ ・ ID951 ~ 1000 workers 後半のリビジョンほど処理時間が掛かることを考慮 workers 10 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University ケーススタディ 版管理システムSubversionで管理されているJavaプロジェクトを対象に実施 プロジェクト名 リビジョン数 開発者数 開発開始日時 benten及びmergedoc に所属する開発者1名 benten 3258 3 2009/4/17 mergedoc 908 1 2007/11/8 itext及びmailmarket に所属する開発者2名 itext 6738 28 2000/11/29 mailmarket 1158 7 2012/2/19 davmail 2332 1 2006/12/13 実験概要 AWS(Amazon Web Service)を用いて仮想マシンを用意 データベースサーバとしてm3.2xlargeインスタンスのVMを1台 プログラム実行用にc3.xlargeインスタンスのVMを30台 インスタンス名 OS CPU メモリ[GB] m3.2xlarge centOS 6.5 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz 30 c3.xlarge centOS 6.5 Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz 7.5 11 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University ケーススタディ分析項目 O1:開発者ごとの再利用傾向がどの程度異なるか コミット数の多い開発者はコードクローンの作成数と利用数も多いか O2:再利用されやすいソースコードを記述する開発者の特徴 再利用される回数の多い開発者はどのような特徴を持つか コミット数,所属しているプロジェクト数など O3:多くの開発者に再利用されるソースコードの特徴 再利用される回数の多いソースコードに特徴があるか O4:再利用を積極的に行う開発者の特徴 再利用回数の多い開発者にどのような特徴があるか コミット数,所属しているプロジェクト数など O5: プロジェクト間での再利用の特徴 関わっている開発者や,ソースコードに特徴があるか 12 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University クローンの系譜と出力結果 処理時間 STEP1: 1分55秒 STEP2: 12時間44分42秒(全VMの合計時間延べ93時間57分12秒) STEP3: 3分20秒(全VMの合計時間延べ81分44秒) クローンの系譜について クローンの系譜の数 再利用回数 リポジトリ間の再利用 5396 5812 10 開発者について(全開発者数は37名) 再利用された開発者 (セルフコピー含む) 再利用した開発者 (セルフコピー含む) 再利用された開発者 (セルフコピー含まず) 再利用した開発者 (セルフコピー含まず) 22 22 15 15 13 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University O1:開発者ごとの再利用傾向がどの程度異なるか コミット数と再利用回数の関係(コミット数5以上のみ表示) コミット数が多いと再利用回数も多いとは限らないことから,開発者ごとに再利 用の傾向が異なることが分かる 0 A B C D E F G H I J K L M N O P Q R S T U V V W X Y 3612 2268 2211 1337 648 345 319 275 267 258 240 218 182 175 142 114 82 73 51 40 34 24 19 10 7 6 4,000 3,500 3,000 2,500 2,000 1,500 1,000 500 コミット数 1,000 2,000 3,000 4,000 5,000 6,000 7,000 8,000 62 62 196 169 63 67 588 598 2 2 96 99 242 233 7 9 6 6 6 28 10 8 29 22 102 105 14 13 11 19 14 19 8 12 0 0 18 38 31 29 1 2 0 0 0 0 0 0 1 1 3826 3798 他プロジェクトのコード片を頻繁 に利用して開発を行っていた ため再利用回数が増えた 0 再利用された回数 再利用回数 14 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University O2:再利用されやすいソースコードを記述する開発者の特徴 開発者Aはコミット数,再利用される回数,再利用回数のすべてが最も多い Sourceforgeのプロジェクト11個に所属 (そのほとんどがitext関連のプロジェクト) つまり,似ている機能のある他プロジェクトから再利用を行った可能性あり itextにおけるRoleはAdmin(16人中Admin5人) 開発者E(コミット数に対しての再利用される回数,再利用回数が多い) Sourceforgeのプロジェクト8つに所属 itextにおけるRoleはAdmin(16人中Admin5人) 開発者H(コミット数に対しての再利用される回数,再利用回数が多い) Sourceforgeのプロジェクト3つに所属 itextにおけるRoleはAdmin(16人中Admin5人) ⇒ 『O4:再利用を積極的に行う開発者の特徴』についても同じであった 15 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University O3:多くの開発者に再利用されるソースコードの特徴[1/2] クローンの系譜ごとの再利用回数(再利用された回数が2以上のみ表示) 全クローンの系譜5396個の内,2回以上の再利用が行われたのは321個であった クローンの系譜数 300 261 250 200 150 100 48 50 5 4 1 1 4 5 6 7 0 2 3 1 8 9 10 11 12 13 14 15 16 17 18 再利用された数 16 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University O3:多くの開発者に再利用されるソースコードの特徴[2/2] 再利用された回数が7回のコード片 createPDF(String filename)というPDFを作成するメソッドが7つのファ イルに定義されていた ⇒ ライブラリ化の提案に繋がる可能性あり private static void createPdf(String filename) { // we create a document with multiple pages and bookmarks Document document = new Document(); ・・・省略 document.close(); } 再利用される回数の多いコード片について,クラスやメソッド単位での再利用 といった,規模の大きい再利用が多いことが分かった 17 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University O5: プロジェクト間での再利用の特徴 プロジェクトmergedocからbentenへの再利用が9回 翻訳プログラムにおいて,文字列分割機能を実装したファイルをプロジェクトをま たがってコピーすることで発生 あるプロジェクトで使用している一般的な機能を他のプロジェクトにうまく再利用 できていたと考えられる public String trim() { if (body != null) { return body; } // 前後空白除去 trimSpace(original); ・・・省略 } return body; } プロジェクトmergedocからitextへの再利用が1回 getter及びsetterが一致したものであった 18 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University まとめ 複数プロジェクトにおける開発者ごと再利用動向の分析手法の提案 および調査を行った コミット数が多いと再利用回数も多いとは言えず,開発者によって再利用動向 が異なることを示した 再利用された回数の多いソースコードやプロジェクト間での再利用について特定 及び分析ができることを示した 今後の課題 より大規模なプロジェクトを対象に実験 扱える版管理システムやプログラミング言語の増加 分析プロジェクト数の増加 より利用者の多いソースコードについての分析を実施 再利用支援ソフトウェアの構築 ライセンス違反の特定,ライブラリ化の提案やソースコード推薦といった再利 用の支援を行う 19 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 20 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
© Copyright 2024 ExpyDoc