メトリクス値の変化に基づく コードクローンの編集傾向分析

Slides:



Advertisements
Similar presentations
コードクローン履歴閲覧環境を用いたクローン評価の試み
Advertisements

AGMアルゴリズムを用いた ギャップを含むコードクローン情報の生成
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
プログラムの動作を理解するための技術として
正規性の検定 ● χ2分布を用いる適合度検定 ●コルモゴロフ‐スミノルフ検定
対応のあるデータの時のt検定 重さの測定値(g) 例:
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用
アイテムセットマイニングを利用した コードクローン分析作業の効率向上
大規模ソースコード集合を対象とした 類似関数集合群の抽出
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
静的情報と動的情報を用いた プログラムスライス計算法
ソースコードの同時修正支援における関数クローン検出ツールの有効性調査
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
ソードコードの編集に基づいた コードクローンの分類とその分析システム
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
動的依存グラフの3-gramを用いた 実行トレースの比較手法
コード片の生存期間がコードクローンと欠陥修正の有無に与える影響分析
既存ソフトウェアの変更履歴を利用したソースコード修正支援手法の提案
クローンセットに対する主要編集者の分析法の提案と調査
重複コードと非重複コードにおける 修正頻度の比較
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
ソフトウェア保守性を評価する メトリクス間の関連分析
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードの生存期間を考慮したコードクローンと欠陥修正の関係調査
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
Token Comparison Approach to Detect Code Clone-related Bugs
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローンの複雑度メトリクスを用いた開発者の特徴分析
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
プログラム理解におけるThin sliceの 統計的調査による有用性評価
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
コードクローン編集者数に着目した開発履歴の分析
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
コードクローンのメトリクス値と 開発者の相関の調査
多様なプログラミング言語に対応可能な コードクローン検出ツール CCFinderSW
Geminiを用いた効果的なコードクローン分析方法
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
コードクローンの分布情報を用いた特徴抽出手法の提案
ソフトウェアプロダクト集合に対する 派生関係木の構築
構造的類似性を持つ半構造化文書における頻度分析
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
アスペクト指向言語のための視点に応じた編集を可能にするツール
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
Geminiを用いた効果的なコードクローン分析方法
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
Presentation transcript:

メトリクス値の変化に基づく コードクローンの編集傾向分析 井上研究室  東 誠  井上研究室の東です.  メトリクス「ち」の変化に基づく コードクローンの編集「けーこー」分析について 発表させていただきます. 2008/2/22 特別研究発表会

コードクローン ソースコード中に存在する同一,もしくは類似したコード片を同一システム中に持つコード片 クローンの検出と除去が研究されてきた 以降単にクローンと呼ぶ クローンの検出と除去が研究されてきた ソースファイルF1 ソースファイルF2 まず,コードクローンについて説明します. コードクローンとは,ソースコード中に存在する 同一または類似した コード片です. 下の図では、クローンが、 左のファイルに2個、 右のファイルに1個存在しています. また,クローンを2つ選んで作られる組を クローンペアといいます. このようなクローンに対し、 従来は検出や除去が研究されてきました. クローンペア コードクローン コードクローン クローンペア クローンペア 特別研究発表会 2008/2/22

クローンが保守性に与える影響 クローンはソフトウェア保守を困難にする場合がある クローンが保守性を悪化させるとは限らない[1] バグ修正などコード変更をする際、全てのクローンに対して変更が必要 保守作業の手間が増大 クローンが保守性を悪化させるとは限らない[1] 例 : 将来の変更を見越して意図的に作成したクローン 次煮 …この例、自分でも説明しきる自信ない. できればこっちから質問してみようか. まあ、本質でないから誰も質問しないと思うが. [1]C. Kapser and M. W. Godfrey: ““Cloning Considered Harmful” Considered Harmful”, Proceedings of the 13th Working Conference on Reverse Engineering (WCRE 2006), pp.19-28, 2006. 特別研究発表会 2008/2/22

クローン管理の必要性 全てのクローンを取り除くのではなく,必要なクローンだけ除去する 保守性を悪化させるクローンは除去する 開発者が意図的に作成したクローンは除去しない …例2はデザインパターンとか言いたいんだが, コピペとも取れるよなあ. 後、→という因果関係をどう示しか. そのため、全てのクローンを取り除くのではなく、 必要なクローンだけを除去する必要があります. 「このことから」、 クローンを適切に管理する必要があると考えられるようになりました. 管理って何? という質問はかなりの高確率で出てくる. 「(基準によって)クローンを複数のグループに区別して, 各クローンのグループに対して適切な処理を行うこと」 特別研究発表会 2008/2/22

本研究の着目点 クローンを編集した開発者 開発者によってクローンの編集内容に特徴が表れるのではないか 異なる役割や目的を持つ 経験に差がある 開発者によってクローンの編集内容に特徴が表れるのではないか 例 : 経験の浅い開発者によって編集されたクローンは保守性を悪化させる 特徴によってクローンを区別し,管理することができるのではないか 本件旧では,クローンを管理する基準として, クローンを編集した開発者が考えられる. 例が突っ込まれるかもしれんが、思いつかなかったと答えるしかない。 …後,例のニュアンスを履き違えているかも.編集傾向との違いは?  「~な開発者は」~なクローンを編集するってことなんだが. 特別研究発表会 2008/2/22

本研究の目的 各開発者のクローンに対する編集傾向を調査 編集傾向を知るためにメトリクス値の変化を調べる 編集傾向 : クローンを編集する時に表れる特徴 例 : 開発者Aはクローンを長くすることが多い 編集傾向を知るためにメトリクス値の変化を調べる そこで本研究では,各開発者のクローンに対する(この表現おかしい?) 編集傾向を調査しました 「編集傾向とは開発者が~特徴であり, 例としては、ある開発者がクローンを長くすることが多いことなどがあげられます」 そして、編集傾向を知る 「クローンの性質を表す」メトリクス「ち」 調べました. 特別研究発表会 2008/2/22

調査方法の概略 1 ソースコードの スナップショット の取得 2 クローン検出 3 クローン対応関係 (同じ位置にあるクローンの関係) 版管理システム (ソフトウェアの 編集履歴を 格納するシステム) 2 クローン検出 3 クローン対応関係 (同じ位置にあるクローンの関係) の抽出 次に、 まず,ソフトウェアの~格納している版管理システムから, ソースコード 次煮、各スナップショット内の そして、同じ位置にあるクローンの関係である さらに、クローン対応関係を用いて 最後に、 4 メトリクス値の 変化の取得 5 開発者間の差の検定 メトリクスα メトリクスβ A {+2, 0, …} {0, 0, …} B {0, -3, …} {+1, 0, …} α A + B - 開発者 特別研究発表会 2008/2/22

1 スナップショットの取得 版管理システムを用いる 各開発者がソースコードを編集した直後のスナップショットを取得 ソフトウェアの編集履歴を格納するシステム 本研究において用いる情報 編集されたファイルの変更差分 編集した開発者 編集した日時 各開発者がソースコードを編集した直後のスナップショットを取得 特別研究発表会 2008/2/22

2 クローンの検出 各スナップショット中のクローンを検出 特別研究発表会 2008/2/22

3 クローン対応関係の抽出 メトリクス値の変化を取得するために,連続するスナップショット間のクローン対応関係を抽出する クローン対応関係 : 2つのスナップショット中の同じファイルの同じ位置にあるクローン間の関係[2] クローン対応関係 クローン対応関係 [2]M. Kim and D. Notkin : “Using a clone genealogy extractor for understanding and supporting evolution of code clones”, Proceedings of the 2nd International Workshop on Mining Software Repositories, pp.17-21, 2005. 特別研究発表会 2008/2/22

4 メトリクス値の変化の取得 クローンの様々なメトリクス値を計算する クローン対応関係にある2つのクローン間のメトリクス値の差を計算する クローンが存在するスナップショットを編集した開発者毎に,メトリクス値の変化を集める 開発者A 開発者B メトリクスα {+2, 0, +1, …} {0, 0, +4…} メトリクスβ {0, -3, -5…} {+1, 0, +2…} 特別研究発表会 2008/2/22

5 開発者間の差の検定 メトリクス値の変化の分布と検定結果から,各開発者によるメトリクス値の変化を以下の3種類に分類する 他の開発者に比べてメトリクス値を大きくする傾向がある 他の開発者に比べてメトリクス値を小さくする傾向がある 他の開発者と差があるとはいえない タイトルと内容が微妙に… 「各開発者が他の開発者と比べて」 が、相対的な話に進んでしまうと帰って怪しいような. 開発者が有意にメトリクス「ち」を変化させているかどうかを、 (他の開発者との比較によって)検定する. 特別研究発表会 2008/2/22

調査内容 1/2 実際のソフトウェア開発履歴に対して調査 調査対象 PostgreSQLの編集履歴 1997/07/01~1998/12/31を半年間ずつの3つの期間に分け,それぞれの期間に行われた各編集直後のソースコードのスナップショットを取得 期間1 : 1997/07/01~1997/12/31 期間2 : 1998/01/01~1998/06/30 期間3 : 1998/07/01~1998/12/31 特別研究発表会 2008/2/22

調査内容 2/2 クローン検出:CCFinderX 使用したメトリクス 複雑度メトリクス : 値が大きいほど複雑なクローンであることを表す LEN : クローンの長さ(トークンの数) TKS : クローン中のトークンの種類数 COND : クローン中の条件分岐の数 LOOP : クローン中のループ文の数 McCabe : LOOP+COND 特別研究発表会 2008/2/22

検定結果 開発者 A B C D E F G H 期間 1 2 3 LEN + - TKS LOOP COND McCabe 次に,検定結果(…調査結果、ではなく? 後で質問) について質問します. 3つの調査期間は時期の早いものから順に1,2,3と番号を振っています. そして各開発者が開発に参加した期間のみ,メトリクス値の変化の差を検定しています. 例えば開発者Hは期間が3の列しかありませんが, それはHが最後の調査期間にしか開発に参加していなかったからです. また,表の要素は, メトリクス「ち」を増加させている場合はプラス、 現象させている場合はマイナス、 メトリクスの変化に差があるとはいえない場合は空欄としています. この検定結果から, メトリクス「ち」を増加させる開発者、 減少させる開発者、 増減が混在する開発者がいることがわかりました. (いまさらだが、言いたいことに合わせて 図を見やすくすべきではなかったか?) クローンを複雑にする開発者 : F クローンを簡単にする開発者 : B, C 期間によって傾向が異なる開発者 : A, D 特別研究発表会 2008/2/22

開発者によるクローン管理方法 開発者は目的を達成するために,前に編集した箇所やその付近を連続して編集する傾向がある 開発者Fが編集したクローンは,今後複雑になる可能性が高い → 今の複雑度が低くても,除去した方が良い 開発者Bや開発者Cが編集したクローンは,今後簡単になる可能性が高い → 今の複雑度が高くても,除去を急ぐ必要はない 間違いなく突っ込まれるのは 「混在した開発者はどうした」 定期的に調査を行い, その開発者のメトリクス「ち」の変化の傾向が特定できれば クローン管理の基準として用います. 特別研究発表会 2008/2/22

まとめと今後の課題 メトリクス値の変化を用いてクローンの編集傾向を調査 今後の課題 メトリクス値の変化は開発者ごとに差があった 各開発者に編集傾向があることが分かった 今後の課題 他のメトリクス値を用いた編集傾向の調査 開発者以外の要因(モジュール等)の影響の除外  本研究では,メトリクス値の変化によって クローンの 寧ろ管理手法が考えられたことを強調すべき?  が、編集傾向の分析が目的だからなあ. 特別研究発表会 2008/2/22