開発履歴を用いたコードクローン作成者と利用者の 分析手法とその適用

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アルゴリズムを用いた ギャップを含むコードクローン情報の生成
利用実績に基づくソフトウェア部品検索システムSPARS-J
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用
プログラム実行履歴を用いたトランザクションファンクション抽出手法
アイテムセットマイニングを利用した コードクローン分析作業の効率向上
大規模ソースコード集合を対象とした 類似関数集合群の抽出
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
コードクローン分析ツールGeminiを用いたコードクローン分析手順
オブジェクト指向プログラムのための 動的結合メトリクスの評価
ギャップを含むコードクローンの フィルタリング手法の提案
ソースコードの同時修正支援における関数クローン検出ツールの有効性調査
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の共起関係に基づく類似コード検索法の提案と 欠陥検出への適用
ソードコードの編集に基づいた コードクローンの分類とその分析システム
複数のプロジェクトを対象としたクローンの系譜にもとづく ソースコード再利用分析手法の提案
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
動的依存グラフの3-gramを用いた 実行トレースの比較手法
コード片の生存期間がコードクローンと欠陥修正の有無に与える影響分析
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
重複コードと非重複コードにおける 修正頻度の比較
Javaプログラムの変更を支援する 影響波及解析システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
利用実績に基づくソフトウェア部品検索システムSPARS-J
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
コンポーネントランク法を用いたJavaクラス分類手法の提案
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードの生存期間を考慮したコードクローンと欠陥修正の関係調査
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
Token Comparison Approach to Detect Code Clone-related Bugs
クローンの系譜に基づく 開発者ごと再利用動向の分析
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
コードクローン編集者数に着目した開発履歴の分析
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
Designing Robots in the Wild
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
メトリクス値の変化に基づく コードクローンの編集傾向分析
設計情報の再利用を目的とした UML図の自動推薦ツール
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
Presentation transcript:

開発履歴を用いたコードクローン作成者と利用者の 分析手法とその適用 井上研究室 森脇匠哉 「井上研究室森脇が,開発履歴を用いたコードクローン作成者と利用者の分析手法とその適用について発表を行います」

ソースコードの再利用[1] 既存のソースコードのコピーアンドペーストにより行われる メリット ソースコードの再利用は難しい[3] コードクローン技術によって検出可能[2] 様々なコードクローン検出ツールが提案されている コピー クローンセット コピー コードクローン メリット テスト済みのソースコードの再利用 ⇒ 信頼性の向上 同じソースコードを二度書かなくて済む ⇒ 生産性の向上 ソースコードの再利用は難しい[3] ソースコードの内容を理解していなければならない コピーアンドペースト後にコード修正が必要な場合もある 「ソースコードの再利用は既存のソースコードのコピーアンドペーストにより行われます」 「ソースコードのコピーアンドペーストはコードクローン技術によって検出可能です」 「ファイル内・ファイル間でソースコードのコピーアンドペーストが行われた際にできる」 アニメ 「同一のコード片をコードクローンと言い,」 「コードクローンの集合をクローンセットと言います」 「テスト済みのコードの再利用によって信頼性が向上し,」 「同じコードを二度書かなくて済むことは生産性の向上につながります」 「しかし,コードの再利用はそのコード内容の理解が必要であり,また,コピーアンドペースト後にコード修正が必要な場合もあるため一般に難しいと言われています」 「そのため,開発者には,再利ことを用しやすいソースコードを記述することが求められる ソースコードの再利用はコードクローン技術によって検出可能である」 [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] 肥後 芳樹, 楠本 真二, 井上 克郎, “コードクローン検出とその関連技術”, 電子情報通信学会論文誌, Vol. J91-D, pp.1465-1481, 2008. [3] 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.

再利用分析における課題(1/2) 既存の研究では単一プロジェクトを対象とする場合が多い[4] 組織は複数のプロジェクトを持ち,プロジェクト間再利用が行われる可能性がある プロジェクトA プロジェクトB コピー コピー コピー ほとんど行われていない →だから困る 「既存はプロジェクト内での分析」左の絵だけ.ちょい修正 「通常再特定の組織は複数のプロジェクトを持ち,再利用はプロジェクトをまたがってくる」[参考文献] 「再利用動向の分析には複数プロジェクト間でやる必要有り」 --------------- またがった再利用の絵に修正 「そこで,」 「組織内での再利用を促進するためには,誰が再利用可能なコードを最初に作成したのか,また,誰が再利用を行ったのかという情報を明らかにすることが必要である」・・・ニュアン変える また後で細かく修正 開発者のモチベーションが異なる→(口頭)アンケートによると 再利用に関する 再利用傾向の分析は複数プロジェクト間で行う必要がある [4] Mihai Balint, Tudor Girba, and Radu Marinescu. How developers copy. ICPC, pp.56–65, 2006.

再利用分析における課題(2/2) 開発者の再利用傾向は,開発者のモチベーションによって異なる[5] A B 作成者の定義 利用者の定義 開発者の再利用傾向を定量的に分析した既存研究はほとんど存在しない コピー コードクローン作成者 コードクローン利用者 コードクローン A B 作成者の定義 利用者の定義 クローンセット中のコードクローンの内,実装日時が最も古いコード片を実装した開発者 既存のコード片を再利用した開発者 コピー 誰が再利用可能なコードを最初に作成したのか,また,誰が再利用を行ったのかという情報? ↓ コードクローン作成者とコードクローン利用者を導出する 再利用傾向の分析を開発者ごとに行う必要がある C コードクローン利用者 [5] 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.

目的 複数プロジェクトを対象としてコードクローン作成者と利用者の分析を行うことで,どの程度開発者ごとに再利用傾向が異なるのかを明らかにする RQ1:再利用回数の多いクローンセットとコードクローン利用者数が多いクローンセットが一致するか RQ2:プロジェクト間コードクローンの作成者と利用者について,両プロジェクトで開発をしている開発者とそうでない開発者で違いがあるか RQ3:コードクローン利用者数の多いコードクローンと,再利用回数は多いがコードクローン利用者数の少ないコードクローンに違いがあるか RQ4:コードクローンの作成数と利用数の多い開発者にどのような特徴があるか RQ5:コミット数の多い開発者はコードクローンの作成数と利用数が多いか

再利用分析の概要 … … … … STEP2:クローン遷移情報の検出 rev1 入力:複数のリポジトリ クローンセット 遷移情報(1,2) ・・・ … … STEP1: リポジトリのマージ revN-1 クローンセット 遷移情報(N-1,N) revN STEP4: コードクローン作成者 と利用者の特定 STEP3: クローンセット 遷移情報のマージ … リポジトリのマージが分かりにくい リビジョンについては口で説明すること 「複数を一つのリポジトリ 絵を追加[遷移情報][クローンセット履歴] 出力:人の情報追加 クローンセット履歴 … 出力:クローンセット毎の コードクローン作成者と利用者

STEP1:リポジトリのマージ 複数プロジェクトのリポジトリをマージする リポジトリA リポジトリX rev1 2012/1/2 rev1 a1.java rev1 2012/1/2 rev2 2012/2/2 a1.java a1.java a2.java rev2 2012/2/2 rev3 2012/3/2 a1.java a2.java a1’.java a2.java rev3 2012/2/4 a1.java a2.java b1.java リポジトリB 説明の時コミットとか使わない 絵帰る rev4 2012/3/2 a1’.java a2.java b1.java rev1 2012/2/4 b1.java rev5 2012/4/4 a1’.java a2.java b1’.java rev2 2012/4/4 b1’.java

STEP2:クローン遷移情報の検出 隣接する2リビジョンのコードクローンから遷移情報を取得する[6] … … コードクローン情報 (リビジョン1) クローンセット遷移情報(1,2) クローンセットA 比較 コードクローン情報 (リビジョン2) リポジトリ X … … コードクローン情報 (リビジョンN-1) クローンセット遷移情報(N-1,N) クローンセットA リポジトリの絵左端 コードクローンを検出し,比較することで遷移情報->あとでアニメ追加 矢印 『最後に追加されたコードクローンをコピペしたと仮定している』 絵の一貫性 n使う 比較 コードクローン情報 (リビジョンN) [6]山中裕樹, 崔恩瀞, 吉田則裕, 井上克郎, 佐野建樹. コードクローン変更管理システムの開発と実プロジェクトへの適用. ソフトウェアエンジニアリングシンポジウム2012論文集, 第2012巻, pp.1–8, aug 2012.

STEP3:クローン遷移情報のマージ 2リビジョン間のクローン遷移情報のマージを行い,複数リビジョン間におけるクローン遷移情報(クローンセット履歴)を得る クローンセット 遷移情報(1,2) クローンセット 遷移情報(2,3) クローンセット 遷移情報(N-2,N-1) クローンセット 遷移情報(N-1,N) … マージ クローンセットAのクローンセット履歴 … リビジョン1 リビジョン2 リビジョン3 リビジョンN-1 リビジョンN

STEP4:コードクローン作成者と利用者の特定 コードクローン作成者:クローンセット中のコードクローンの内, 実装日時が最も古いコード片の開発者 コードクローン利用者:既存のコード片を再利用した開発者 クローンセットAのクローンセット履歴 作成者 開発者A A(2012/1/2) … B(2012/2/2) クローンセットが発生したリビジョンを特定し,その中で最初に作成されたコード片を実装した開発者を特定(コードクローン作成者) それ以外のコードクローンを実装した開発者 ⇒ コードクローン利用者 C(2012/3/2) 利用者 開発者B 利用者 開発者C リビジョン2 リビジョンN-1 リビジョンN

実験概要 準備 手順 補足:両プロジェクトに携わっている開発者:2名 OSSからGitで管理されている2つのJavaプロジェクトのリポジトリを用意 プロジェクト名 eclipse.platform.text eclipse.pde 開発期間 2001/5/2 ~ 2003/12/22 2002/4/11 ~ 2003/12/18 リビジョン数 1369 144 開発者数 19名 3名 手順 STEP1:上記のリポジトリをGitの機能を利用して1つのリポジトリにマージ STEP2:マージしたリポジトリのリビジョン間クローン遷移情報を取得 STEP3:リビジョン1~1513におけるクローンセット履歴の取得 STEP4:コードクローン利用者と作成者の特定 出力結果の分析 補足:両プロジェクトに携わっている開発者:2名

出力結果 969 156 5 検出クローンセット数:969個 リビジョンをまたがった再利用:156個 プロジェクト間コードクローンを含むクローンセット:5個 969 156 5 コピー 目的とアプローチの絵使い 口で言う「そのうち」 絵:再利用 プロジェクト間:絵 コピー プロジェクト間 コードクローン

Research Questions RQ1 RQ2 RQ3 RQ4 RQ5 再利用回数の多いクローンセットとコードクローン利用者数が多いクローンセットが一致するか RQ2 プロジェクト間コードクローンの作成者と利用者について,両プロジェクトで開発をしている開発者とそうでない開発者で違いがあるか RQ3 コードクローン利用者数の多いコードクローンと,再利用回数は多いコードクローン利用者数の少ないコードクローンに違いがあるか RQ4 コードクローンの作成数と利用数の多い開発者にどのような特徴があるか RQ5 コミット数の多い開発者はコードクローンの作成数と利用数が多いか ユニークユーザ数は説明する RQ1「通常再利用多い→利用者多い」

RQ1:再利用回数とユニークな利用者数 再利用回数が多ければ利用者数が多いわけではない 再利用回数:18回 利用者数:3名 再利用回数:14回 利用者数:1名 再利用回数:4回 利用者数:3名 考察出てきたら グラフ2種類非表示で用意 再利用回数が多ければ利用者数が多いわけではない 再利用回数が少なくても,利用者数の多いクローンセットがある 様々な再利用のされ方が存在する

RQ5:開発者ごとのコードクローン作成数と再利用数 コミット数:370回 作成数:20回 再利用数:247回 コミット数:74回 作成数:0回 再利用数:0回 コミット数が多いと再利用数も多いというわけではない コードクローン作成者や利用者である開発者は限られている 再利用の少ない開発者に対しての支援の必要性が考えられる

まとめと今後の課題 まとめ 今後の課題 大規模なリポジトリへの適用 再利用支援ソフトウェアの作成 再利用支援ソフトウェアの考案 複数プロジェクトにおけるコードクローンの作成者と利用者についての分析手法を提案 提案手法を適用し,コードクローン作成者と利用者の分析を行った 再利用傾向には個人差があり,再利用の少ない開発者への支援の必要性を示した 今後の課題 大規模なリポジトリへの適用 数千~一万リビジョン 3つ以上のプロジェクト 再利用支援ソフトウェアの作成 コードクローン作成者と利用者のインタラクション 再利用支援ソフトウェアの考案 協調フィルタリングを用いる 協調フィルタリング:ユーザの嗜好を過去の行動という形で記録し、そのユーザと似たような行動を取っているユーザの嗜好情報をもとに、ユーザの嗜好を推測するシステム。 リコメンデーションサービスを提供する際に使用される代表的な手法である。協調フィルタリングではユーザごとの嗜好情報が多く、ユーザの数自体も多い方が正確な推測が可能となる。 インタラクション【interaction】 交流、相互作用などの意味を持つ英単語。形容詞形は「インタラクティブ」(interactive)。 ITの分野では、人間とシステムの間の情報のやりとり、操作や入力とそれに対する反応や出力、対話的な操作方法、などの意味で用いられることが多い。

質疑応答