開発履歴を用いたコードクローン作成者と利用者の 分析手法とその適用 井上研究室 森脇匠哉 「井上研究室森脇が,開発履歴を用いたコードクローン作成者と利用者の分析手法とその適用について発表を行います」
ソースコードの再利用[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の分野では、人間とシステムの間の情報のやりとり、操作や入力とそれに対する反応や出力、対話的な操作方法、などの意味で用いられることが多い。
質疑応答