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

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール.
背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
AGMアルゴリズムを用いた ギャップを含むコードクローン情報の生成
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
アイテムセットマイニングを利用した コードクローン分析作業の効率向上
大規模ソースコード集合を対象とした 類似関数集合群の抽出
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
オブジェクト指向プログラムのための 動的結合メトリクスの評価
ギャップを含むコードクローンの フィルタリング手法の提案
ソースコードの同時修正支援における関数クローン検出ツールの有効性調査
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
ソードコードの編集に基づいた コードクローンの分類とその分析システム
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
開発履歴を用いたコードクローン作成者と利用者の 分析手法とその適用
複数のプロジェクトを対象としたクローンの系譜にもとづく ソースコード再利用分析手法の提案
動的依存グラフの3-gramを用いた 実行トレースの比較手法
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
ライブラリのバージョン更新支援のための実行トレースからのテストケース生成
重複コードと非重複コードにおける 修正頻度の比較
ソフトウェア部品分類手法への コンポーネントランク法の応用
三浦元喜 北陸先端科学技術大学院大学 知識科学研究科 2007/9/7
Javaプログラムの変更を支援する 影響波及解析システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
コンポーネントランク法を用いたJavaクラス分類手法の提案
ソフトウェア保守性を評価する メトリクス間の関連分析
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードの生存期間を考慮したコードクローンと欠陥修正の関係調査
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
クローンの系譜に基づく 開発者ごと再利用動向の分析
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
プログラミングコンテストシステムへの 提出履歴データとその分析
コードクローン編集者数に着目した開発履歴の分析
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
保守請負時を対象とした 労力見積のためのメトリクスの提案
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
関数の変更履歴と呼び出し関係に 基づいた開発履歴理解支援システム
識別子の読解を目的とした名詞辞書の作成方法の一試案
Presentation transcript:

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

ソースコードの再利用[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, 1995. ACM.

既存研究[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] 再利用の規模や性質を分析[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.

再利用分析における課題(1/2) 複数のプロジェクトに対する分析を行うにはプロジェクト間での再利用を分析する必要がある プロジェクトA プロジェクトB コピー コピー コピー

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

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

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

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

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

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

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でクローンセットにコードクローンが追加

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

実験概要 対象 手順 プロジェクト名 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:コードクローン作成者と利用者の特定 出力結果の分析

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

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

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

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

再利用されやすいソースコードの分析(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"); ・・・

再利用されやすいソースコードの分析(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); ・・・

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

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

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