ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析 井上研究室 博士前期課程2年 村尾 憲治 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 概要 ソフトウェアに関する知識の獲得 → 多大な労力が必要 ソースコードに対する ソフトウェアメトリクス値の変遷 効率的なソフトウェアの開発や保守に 役立つ情報(ソフトウェアの特性)を提供 2 ソフトウェアに関する知識 ソフトウェアに関する深い知識は, その開発や保守を行うにあたり有益 • 問題を発生しやすいモジュール → 効率的な開発や保守 • ソフトウェアの開発されてきた過程 → 今後の開発の見通し 開発者が知識を得るには 多大な労力が必要 3 ソフトウェアに関する知識の提供 • ソフトウェアの開発履歴から知識を提供 バージョン管理システム • ソフトウェアのソースコードから知識を提供 ソフトウェアメトリクス 4 バージョン管理システム 開発者 開発者 ソフトウェアの開発履歴を 保存・提供するシステム 全ての変更の内容が システムに蓄積される バージョン 管理システム チェック アウト ソースコードがどのように 変更されてきたか分かる 5 チェック イン 変更 作業用 コピー 開発者 ソフトウェアメトリクス ソフトウェアの複雑さや信頼性などの指標 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 6 目的 対象ソフトウェアにおける何らかの 傾向や性質(ソフトウェアの特性) に関する情報を提供 • • • • メトリクス値の安定しないモジュール 対象ソフトウェアにおいて値の安定しないメトリクス 各変更がソフトウェアに与えた影響の程度 各開発者がソフトウェアに与えた影響の程度 7 ソフトウェアの特性 • メトリクス値の安定しないモジュール 利用例) 将来バグが頻繁に発生するモジュールの特定 • 対象ソフトウェアにおいて値の安定しないメトリクス 利用例) 設計上の欠陥の把握 • 各変更がソフトウェアに与えた影響の程度 利用例) 開発過程の理解 • 各開発者がソフトウェアに与えた影響の程度 利用例) 開発者の評価 8 提案手法:概要 バージョン管理システムと ソフトウェアメトリクスを利用 → 変更毎のメトリクス値を取得 メトリクス値の変動の激しさを表す 指標(変動度)をユーザに提示 → 変動度からソフトウェアの特性を把握 9 変動度 開発過程を通じたメトリクス値の 変動の激しさを表す指標 • • • • • • モジュールの変動度 メトリクスの変動度 変更の変動度 (モジュール,メトリクス)の変動度 (モジュール,変更)の変動度 (モジュール,メトリクス,変更)の 変動度 10 • • • • • • • • エントロピー H 正規化エントロピー H 四分位偏差 Q 四分位分散係数 Q ハミング距離 DH ユークリッド距離 DE マハラノビス距離 DM メトリクス値の変化量 CV エントロピー メトリクス値が同じ回数と変更回数から導出 計測対象の粒度(次元): (モジュール,メトリクス) 4 m3 H pi log pi 3 m2 m1 変更回数:5,値2:4回,値3:1回 2 m1 メトリクス値 H ( 4 5 log 4 5 15 log 15 ) ≒0.72 m2 変更回数:5,値1,2,3:1回,値4:2回 H (3 15 log 15 2 5 log 2 5 ) ≒1.9 1 c1 c2 c3 c4 c5 変更 m3 変更回数:3,値1,3,4:1回 H (3 13 log 13 ) ≒1.6 エントロピーが大きいほど変動が激しい 11 モジュールの変動度 モジュールの変動度 FMD (fluctuation of module) 例)エントロピーによるモジュールの変動度 対象のモジュールおけるエントロピーの総和 FMD( H ) H MT メトリクス モジュールの変動度が大きいほど, 全体的にメトリクス値の変動が激しい 12 提案手法:手順 メトリクス値 バージョン 管理システム 手順1:メトリクス値の変遷を 取得 • モジュールの変動度 4 m3 3 m2 2 m1 1 • メトリクスの変動度 手順2:変動度の 計測 • 変更の変動度 c1 c2 c3 c4 c5 変更 • (モジュール,メトリクス)の変動度 • (モジュール,変更)の変動度 • (モジュール,メトリクス,変更)の変動度 手順3:ソフトウェア の特性分析 グラフによる変動度の可視化など 13 ユーザ 提案手法の実装 手法の手順1~2を自動で行うツールを作成 ツールの対象 プログラミング言語 Java バージョン管理システム CVS モジュールの粒度 クラス 使用可能なメトリクス CKメトリクス, 対象クラスの行数など 14 適用事例:概要(1/2) 複数のオープンソースソフトウェアに対し, 手法を実装したツールを適用 対象ソフトウェア ソフトウェア名 FreeMind • FreeMind • JHotDraw • HelpSetMaker 対象開発期間 2000/08~2008/01 利用したメトリクス 最初の変更時の ソースコードの総行数 3,882 最後の変更時の ソースコードの総行数 39,350 • CKメトリクス (RFC, CBO, LCOM, NOC, DIT) • 対象クラスの行数(LOC) 開発者数 12 総変更回数 225 15 適用事例:概要(2/2) 各種変動度からソフトウェアの特性を導出 • • • • • • モジュールの変動度 メトリクスの変動度 変更の変動度 (モジュール,メトリクス)の変動度 (モジュール,変更)の変動度 (モジュール,メトリクス,変更)の変動度 16 適用事例:モジュールの変動度 (1/3) モジュールの変動度が大 – 他のモジュールに影響 – 他のモジュールから影響 – 頻繁に変更されている 問題の発生しやすい状態 14 12 10 8 6 4 2 0 モジュール FMD(H ) モジュールの変動度が大きい クラスに注意すれば, 効率的な開発や保守が望める 17 適用事例:モジュールの変動度 (2/3) 将来のバグ修正の予測効果に関する実験 1. 開発履歴を前半と後半に分割 2. 前半の開発履歴から変動度を計測 3. 前半の開発履歴における最後の変更時での メトリクス値を計測 4. 後半の開発履歴におけるバグ修正変更を調査 5. それぞれの上位何%が後半のバグ修正の何% を含んでいるか,その関係を調査 18 適用事例:モジュールの変動度 (3/3) ランキングの上位20% バグ修正被覆率(%) 100 90 • モジュールの変動度 80 97~100%の予測 70 60 • メトリクス値 50 22~89%の予測 40 30 モジュールの変動度は 将来のバグ修正の予測に 有効 19 モジュールの変動度(全5種) 20 メトリクス(全6種) 10 0 0 10 20 30 40 50 60 70 80 90 100 モジュールの変動度/メトリクス値ランキング被覆率(%) まとめ • メトリクス値の変遷から変動度を導出し,ソフト ウェアの特性を分析する手法を提案 • 手法を実装したツールを作成し,複数のオープン ソースソフトウェアに適用 様々な変動度からそれぞれ有益なソフトウェアの 特性を取得 今後の課題 ツールの拡張 • C++やC#など,他のプログラミング言語への対応 • Subversionなど,他のバージョン管理システムへの対応 20
© Copyright 2024 ExpyDoc