ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析

Slides:



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

1 EASE プロジェクトにおける EPM ( Empirical Project Monitor) を用いたプロジェクト管理デモ 奈良先端科学技術大学院大学 産学官連携研究員 松村 知子 2005 年 9 月 30 日 JISA 経営者セミナー.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
High-Impact Defects: A Study of Breakage and Surprise Defects
Javaプログラムの開発履歴における アクセス修飾子過剰性の分析
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
プログラムの動作を理解するための技術として
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
クラス動作シナリオ可視化手法の プログラム理解作業に対する有効性評価
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
CKメトリクスを用いてリファクタリングの 効果を予測する手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
メトリクス計測 プラグインプラットフォームMASUの開発
オブジェクト指向プログラムのための 動的結合メトリクスの評価
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
ソードコードの編集に基づいた コードクローンの分類とその分析システム
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
オブジェクト指向メトリクスを用いた 開発支援法に関する研究
CKメトリクスに基づくリファクタリングの 効果予測手法の提案と実装
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
重複コードと非重複コードにおける 修正頻度の比較
ソフトウェア部品分類手法への コンポーネントランク法の応用
Javaプログラムの変更を支援する 影響波及解析システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
コンポーネントランク法を用いたJavaクラス分類手法の提案
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンに対する一貫性のない変更に起因する欠陥の検出
Token Comparison Approach to Detect Code Clone-related Bugs
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
コードクローンの複雑度メトリクスを用いた開発者の特徴分析
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
ソフトウェアプロダクト集合に対する 派生関係木の構築
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
JAVAを対象とした 動的複雑度メトリクスの実験的評価
ソフトウェア理解支援を目的とした 辞書の作成法
オブジェクト指向開発における フォールト発生早期予測手法の 一提案
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コードクローン解析に基づく デザインパターン適用候補の検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
関数の変更履歴と呼び出し関係に 基づいた開発履歴理解支援システム
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
プログラム理解のための 付加注釈 DocumentTag の提案
Detecting Software Modularity Violations
コードクローンを対象とした リファクタリングの有効性に関する調査
Presentation transcript:

ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析 井上研究室 博士前期課程2年 村尾 憲治

概要 ソフトウェアに関する知識の獲得 ソースコードに対する ソフトウェアメトリクス値の変遷 → 多大な労力が必要 ソースコードに対する       ソフトウェアメトリクス値の変遷 効率的なソフトウェアの開発や保守に 役立つ情報(ソフトウェアの特性)を提供

ソフトウェアに関する知識 ソフトウェアに関する深い知識は,その開発や保守を行うにあたり有益 開発者が知識を得るには 多大な労力が必要 問題を発生しやすいモジュール → 効率的な開発や保守 ソフトウェアの開発されてきた過程 → 今後の開発の見通し 開発者が知識を得るには     多大な労力が必要

ソフトウェアに関する知識の提供 ソフトウェアの開発履歴から知識を提供 ソフトウェアのソースコードから知識を提供 バージョン管理システム ソフトウェアメトリクス

バージョン管理システム ソフトウェアの開発履歴を保存・提供するシステム ソースコードがどのように変更されてきたか分かる 開発者 開発者 ソフトウェアの開発履歴を保存・提供するシステム 全ての変更の内容が    システムに蓄積される バージョン 管理システム チェックアウト チェックイン ソースコードがどのように変更されてきたか分かる 変更 作業用コピー 開発者

※値が大きいほどモジュール(クラス)が複雑であることを示す ソフトウェアメトリクス ソフトウェアの複雑さや信頼性などの指標 CKメトリクス 継承 DIT (depth of inheritance tree)       NOC (number of children) 結合 RFC (response for a class)        CBO (coupling between object-class) クラスの   内部複雑度 WMC (weighted methods per class)  LCOM (lack of cohesion in method) ※値が大きいほどモジュール(クラス)が複雑であることを示す 問題の発生しやすいモジュールの特定[1] [1] V. R. Basili, et al. A Validation of Object-Oriented Design Metrics as Quality Indicators. TSE, Vol.22, No.10, pp.751-761, 1994

対象ソフトウェアにおける何らかの傾向や性質(ソフトウェアの特性)に関する情報を提供 目的 対象ソフトウェアにおける何らかの傾向や性質(ソフトウェアの特性)に関する情報を提供 メトリクス値の安定しないモジュール 対象ソフトウェアにおいて値の安定しないメトリクス 各変更がソフトウェアに与えた影響の程度 各開発者がソフトウェアに与えた影響の程度

ソフトウェアの特性 メトリクス値の安定しないモジュール 対象ソフトウェアにおいて値の安定しないメトリクス 利用例) 将来バグが頻繁に発生するモジュールの特定 対象ソフトウェアにおいて値の安定しないメトリクス 利用例) 設計上の欠陥の把握 各変更がソフトウェアに与えた影響の程度 利用例) 開発過程の理解 各開発者がソフトウェアに与えた影響の程度 利用例) 開発者の評価

提案手法:概要 バージョン管理システムとソフトウェアメトリクスを利用 メトリクス値の変動の激しさを表す指標(変動度)をユーザに提示 → 変更毎のメトリクス値を取得 メトリクス値の変動の激しさを表す指標(変動度)をユーザに提示 → 変動度からソフトウェアの特性を把握

開発過程を通じたメトリクス値の変動の激しさを表す指標 変動度 開発過程を通じたメトリクス値の変動の激しさを表す指標 エントロピー 正規化エントロピー 四分位偏差 四分位分散係数 ハミング距離 ユークリッド距離 マハラノビス距離 メトリクス値の変化量 モジュールの変動度 メトリクスの変動度 変更の変動度 (モジュール,メトリクス)の変動度 (モジュール,変更)の変動度 (モジュール,メトリクス,変更)の変動度

エントロピー メトリクス値が同じ回数と変更回数から導出 エントロピーが大きいほど変動が激しい 計測対象の粒度(次元): (モジュール,メトリクス) メトリクス値 4 m3 m1 変更回数:5,値2:4回,値3:1回 3 m2 ≒0.72 2 m1 m2 変更回数:5,値1,2,3:1回,値4:2回 1 ≒1.9 m3 変更回数:3,値1,3,4:1回 c1 c2 c3 c4 c5 変更 ≒1.6 エントロピーが大きいほど変動が激しい

モジュールの変動度が大きいほど, 全体的にメトリクス値の変動が激しい モジュールの変動度    (fluctuation of module) 例)エントロピーによるモジュールの変動度 対象のモジュールおけるエントロピーの総和 メトリクス モジュールの変動度が大きいほど,  全体的にメトリクス値の変動が激しい

提案手法:手順 モジュールの変動度 手順1:メトリクス値の変遷を取得 1 2 3 c1 c2 c3 c4 4 c5 m1 m2 m3 変更 バージョン 管理システム モジュールの変動度 メトリクスの変動度 変更の変動度 (モジュール,メトリクス)の変動度 (モジュール,変更)の変動度 (モジュール,メトリクス,変更)の変動度 手順2:変動度の計測 ユーザ グラフによる変動度の可視化など 手順3:ソフトウェアの特性分析

提案手法の実装 手法の手順1~2を自動で行うツールを作成 ツールの対象 プログラミング言語 Java バージョン管理システム CVS モジュールの粒度 クラス 使用可能なメトリクス CKメトリクス,     対象クラスの行数など

適用事例:概要(1/2) 複数のオープンソースソフトウェアに対し,手法を実装したツールを適用 対象ソフトウェア 利用したメトリクス ソフトウェア名 FreeMind 対象開発期間 2000/08~2008/01 開発者数 12 総変更回数 225 最初の変更時の ソースコードの総行数 3,882 最後の変更時の  ソースコードの総行数 39,350 FreeMind JHotDraw HelpSetMaker 利用したメトリクス CKメトリクス      (RFC, CBO, LCOM, NOC, DIT) 対象クラスの行数(LOC)

適用事例:概要(2/2) 各種変動度からソフトウェアの特性を導出 モジュールの変動度 メトリクスの変動度 変更の変動度 (モジュール,メトリクス)の変動度 (モジュール,変更)の変動度 (モジュール,メトリクス,変更)の変動度

モジュールの変動度が大きいクラスに注意すれば, 効率的な開発や保守が望める 適用事例:モジュールの変動度(1/3) モジュールの変動度が大 他のモジュールに影響 他のモジュールから影響 頻繁に変更されている    問題の発生しやすい状態 モジュール モジュールの変動度が大きいクラスに注意すれば,     効率的な開発や保守が望める

適用事例:モジュールの変動度 (2/3) 将来のバグ修正の予測効果に関する実験 開発履歴を前半と後半に分割 前半の開発履歴から変動度を計測 前半の開発履歴における最後の変更時での  メトリクス値を計測 後半の開発履歴におけるバグ修正変更を調査 それぞれの上位何%が後半のバグ修正の何%を含んでいるか,その関係を調査

適用事例:モジュールの変動度 (3/3) ランキングの上位20% モジュールの変動度 メトリクス値 バグ修正被覆率(%) ランキングの上位20% モジュールの変動度 97~100%の予測 メトリクス値 22~89%の予測 モジュールの変動度は 将来のバグ修正の予測に有効 モジュールの変動度/メトリクス値ランキング被覆率(%)

まとめ メトリクス値の変遷から変動度を導出し,ソフトウェアの特性を分析する手法を提案 手法を実装したツールを作成し,複数のオープンソースソフトウェアに適用 今後の課題 ツールの拡張 C++やC#など,他のプログラミング言語への対応 Subversionなど,他のバージョン管理システムへの対応 様々な変動度からそれぞれ有益なソフトウェアの特性を取得