Presentation is loading. Please wait.

Presentation is loading. Please wait.

ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用

Similar presentations


Presentation on theme: "ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用"— Presentation transcript:

1 ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用
○森脇匠哉† 井垣宏† 山中裕樹† 吉田則裕†† 井上克郎† 楠本真二† † 大阪大学大学院 情報科学研究科 †† 奈良先端科学技術大学院大学 情報科学研究科

2 ソースコードの再利用[1] 既存のソースコードのコピーアンドペーストにより行われる メリット ソースコードの再利用は難しい[2]
同じソースコードを二度書かなくて済む ⇒ 生産性の向上 テスト済みのソースコードの再利用 ⇒ 信頼性の向上 ソースコードの再利用は難しい[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, NY, USA, ACM.

3 既存研究[3] 686名のOSS開発者へ再利用に関するアンケートを実施 再利用を積極的に行う開発者の特徴
再利用のメリットを強く認識している 生産性,品質 関わっているプロジェクト数や開発者数が多い 成熟していないプロジェクトに携わっている 再利用に関する定量的な分析の必要性が主張されている [3] Manuel Sojer and Joachim Henkel. Code Reuse in Open Source Software Development Quantitative Evidence, Drivers, and Impediments. Journal of the Association for Information Systems, Vol. 11, No. 12, 2010.

4 コードクローン技術を用いた ソースコードの再利用分析
コードクローン:同一または類似したコード片を持つもの クローンセット:互いにコードクローンであるコード片の集合 コピー コードクローン クローンセット コピー コードクローン検出技術を用いた既存の再利用分析研究 開発者ごとの再利用傾向の可視化[4] 再利用の規模や性質を分析[5] [4]Mihai Balint, Tudor Girba, and Radu Marinescu. How developers copy. In Proceedings of International Conference on Program Comprehension 2006, pp. 56–65,2006. [5]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 再利用分析における課題(1/2) 複数のプロジェクトに対する分析を行うにはプロジェクト間での再利用を分析する必要がある プロジェクトA
プロジェクトB コピー コピー コピー

6 再利用分析における課題(2/2) A B 作成者の定義 利用者の定義
開発者によって再利用に関するモチベーションは異なる 誰が誰のソースコードを再利用したかを分析する必要がある コピー コードクローン作成者 コードクローン利用者 コードクローン A B 作成者の定義 利用者の定義 クローンセット中のコードクローンの内,実装日時が最も古いコード片を実装した開発者 既存のコード片を再利用した開発者 コピー C コードクローン利用者

7 目的 O1:開発者ごとの再利用傾向がどの程度異なるか O2:どのようなソースコードが多くの開発者に再利用されやすいか
再利用回数の多いクローンセットはユニークな利用者数も多いか コミット数の多い開発者はコードクローンの作成数と利用数も多いか O2:どのようなソースコードが多くの開発者に再利用されやすいか ユニークな利用者数の多いコードクローンと,再利用回数は多いがユニークな利用者数の少ないコードクローンに違いがあるか O3:どのような開発者が再利用を積極的に行うか コードクローンの作成数と利用数の多い開発者にどのような特徴があるか

8 再利用分析の概要 … … … … STEP2:クローンセット遷移情報の検出 rev. 1 入力:複数のリポジトリ クローンセット
遷移情報(1,2) rev. 2 ・・・ STEP1: 合成リポジトリの作成 rev. N-1 クローンセット 遷移情報(N-1,N) rev. N STEP4: コードクローン作成者 と利用者の特定 STEP3: クローンセット 遷移情報のマージ クローンセット履歴 出力:クローンセット毎の コードクローン作成者と利用者

9 STEP1:合成リポジトリの作成 複数プロジェクトのリポジトリからチェックアウトを行い,合成リポジトリを作成 リポジトリA 合成
リポジトリC 時系列順に 並べ替え rev. A1 2012/1/2 a1.java A rev. A1 2012/1/2 合成rev. 1 2012/1/2 rev. A2 2012/3/2 a1.java a1’.java A B rev. B1 2012/2/4 合成rev. 2 2012/2/4 a1.java b1.java リポジトリB A B rev. A2 2012/3/2 合成rev. 3 2012/3/2 rev. B1 2012/2/4 a1’.java b1.java b1.java A B rev. B2 2012/4/4 合成rev. 4 2012/4/4 rev. B2 2012/4/4 a1’.java b1’.java b1’.java

10 STEP2:クローンセット遷移情報の検出(1/2)
コードクローンを「Stable」「Added」に分類する[6] 本研究では再利用傾向を分析するため「Added」に注目 Stable コピー Added クローンセットA クローンセットA 旧リビジョン 新リビジョン [7]山中裕樹, 崔恩瀞, 吉田則裕, 井上克郎, 佐野建樹. “コードクローン変更管理システムの開発と実プロジェクトへの適用”, ソフトウェアエンジニアリングシンポジウム2012論文集, pp.1–8, aug 2012.

11 STEP2:クローンセット遷移情報の検出(2/2)
隣接する2リビジョンのコードクローンから遷移情報を取得する[6] コードクローン情報 (合成rev. 1) クローンセット遷移情報(1,2) クローンセットA 比較 合成リポジトリ C コードクローン情報 (合成rev. 2) コードクローン情報 (合成rev. N-1) クローンセット遷移情報(N-1,N) クローンセットA 比較 コードクローン情報 (合成rev. N)

12 STEP3:クローンセット遷移情報のマージ
2リビジョン間のクローンセット遷移情報のマージを行い,複数リビジョン間におけるクローンセット遷移情報(クローンセット履歴)を得る クローンセット 遷移情報(1,2) クローンセット 遷移情報(2,3) クローンセット 遷移情報(N-2,N-1) クローンセット 遷移情報(N-1,N) マージ クローンセットAのクローンセット履歴 合成rev. 1 合成rev. 2 合成rev. 3 合成rev. N-1 合成rev. N 合成rev. 2で クローンセットが発生 合成rev. Nでクローンセットにコードクローンが追加

13 STEP4:コードクローン作成者と利用者の特定
コードクローン作成者:クローンセット中のコードクローンの内, 実装日時が最も古いコード片の開発者 コードクローン利用者:既存のコード片を再利用した開発者 クローンセットAのクローンセット履歴 作成者 開発者A A(2012/1/2) A(2012/1/2) A(2012/1/2) B(2012/2/2) B(2012/2/2) B(2012/2/2) 利用者 C(2012/3/2) 開発者B 利用者 開発者C rev. 2 rev. N-1 rev. N

14 実験概要 対象 手順 プロジェクト名 eclipse.platform.text eclipse.pde 実装言語 Java 開発期間
2001/5/2 ~ 2003/12/22 2002/4/11 ~ 2003/12/18 リビジョン数 1369 144 開発者数 19名 3名 リビジョンをまたがってコピーの行われたクローンセットを対象とする 手順 STEP1:上記のリポジトリを時系列順にチェックアウトし,合成リポジトリを作成 STEP2:隣接する合成リビジョン間のクローンセット遷移情報を取得 STEP3:合成リビジョン(1 ~ 1513)におけるクローンセット履歴の取得 STEP4:コードクローン作成者と利用者の特定 出力結果の分析

15 出力結果 検出クローンセット数:969個 813 969 156 5 特定のリビジョンで発生後再利用の行われなかったクローンセット:813個
リビジョンをまたがった再利用が行われたクローンセット:156個(分析対象) プロジェクト間コードクローンを含むクローンセット:5個 813 コピー 969 156 5 コピー プロジェクト間 コードクローン

16 目的 O1:開発者ごとの再利用傾向がどの程度異なるか O2:どのようなソースコードが多くの開発者に再利用されやすいか
再利用回数の多いクローンセットはユニークな利用者数も多いか コミット数の多い開発者はコードクローンの作成数と利用数も多いか O2:どのようなソースコードが多くの開発者に再利用されやすいか ユニークな利用者数の多いコードクローンと,再利用回数は多いがユニークな利用者数の少ないコードクローンに違いがあるか O3:どのような開発者が再利用を積極的に行うか コードクローンの作成数と利用数の多い開発者にどのような特徴があるか

17 再利用回数の多いクローンセットの特徴分析
再利用回数:18回 利用者数:3名 再利用回数:14回 利用者数:1名 再利用回数:4回 利用者数:3名 再利用回数と利用者数に相関がなかった 利用者数の多いクローンセットにも再利用回数の少ないものがある 様々な再利用のされ方が存在する

18 コミット数の多い開発者についての分析 コミット数と再利用数に相関がなかった コードクローン作成者や利用者である開発者は限られている
コミット数:370回 作成数:20回 再利用数:247回 コミット数:74回 作成数:0回 再利用数:0回 コミット数と再利用数に相関がなかった コードクローン作成者や利用者である開発者は限られている 再利用の少ない開発者に対しての支援の必要性が考えられる

19 再利用されやすいソースコードの分析(1/2)
ユニークな利用者数の多い(3名)クローンセット 設定の初期化を行っているソースコード UI操作について実装を行っているソースコード pref.setDefault(P_UNKNOWN_ELEMENT, WARNING); pref.setDefault(P_UNKNOWN_ATTRIBUTE, WARNING); ・・・ gestureMap.put("E", "org.eclipse.ui.navigate.forwardHistory"); gestureMap.put("N", "org.eclipse.ui.file.save"); ・・・

20 再利用されやすいソースコードの分析(2/2)
ユニークな利用者数の多い(3名)クローンセット 色設定についての実装を行っているソースコード 開発者によって違いが出にくいような実装についての再利用が多い 単純で理解しやすいソースコードが多い if (store.contains(LINE_NUMBER_COLOR)) { if (store.isDefault(LINE_NUMBER_COLOR)) rgb= PreferenceConverter.getDefaultColor(store, LINE_NUMBER_COLOR); else rgb= PreferenceConverter.getColor(store, LINE_NUMBER_COLOR); ・・・

21 積極的に再利用を行う開発者の特徴分析 関わっているプロジェクト数に関わらず開発者ごとにさまざまな再利用傾向がみられる

22 考察 O1:開発者ごとの再利用傾向がどの程度異なるか O2:どのようなソースコードが多くの開発者に再利用されやすいか
再利用回数とユニークな利用者数の相関はない コミット数が多くても作成数・利用数はさまざまである O2:どのようなソースコードが多くの開発者に再利用されやすいか 開発者によって違いが出にくいような実装を行っているソースコード 単純で理解しやすいソースコード O3:どのような開発者が再利用を積極的に行うか 多くのプロジェクトに携わっていても開発者によって再利用・被再利用回数はさまざまである

23 まとめと今後の課題 まとめ 今後の課題 より大規模なリポジトリへの適用 開発者の特徴分類・評価手法の構築 再利用支援ソフトウェアの作成
複数プロジェクトにおけるコードクローンの作成者と利用者についての分析手法を提案 提案手法を適用し,コードクローン作成者と利用者を分析 再利用傾向には個人差があり,再利用の少ない開発者への支援の必要性を示した 今後の課題 より大規模なリポジトリへの適用 数千~一万リビジョン,3つ以上のプロジェクト 開発者の特徴分類・評価手法の構築 コードクローン作成数・再利用数などで開発者を分類 再利用支援ソフトウェアの作成 開発者へ再利用できそうなソースコードを提案

24


Download ppt "ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用"

Similar presentations


Ads by Google