メトリクス値の変遷に基づく ソフトウェアの特性分析手法の 提案と実装 大阪大学大学院 情報科学研究科 ○村尾 憲治 ・ 肥後 芳樹 ・ 井上 克郎 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 1 5 log 15 ) ≒0.72 m2 変更回数:5,値1,2,3:1回,値4:2回 H (3 15 log 1 c1 c2 c3 c4 c5 変更 1 5 2 5 log 2 5 ) ≒1.9 m3 変更回数:3,値1,3,4:1回 H (3 1 3 log 1 3 ) ≒1.6 エントロピーが大きいほど変動が激しい 11 マハラノビス距離 変更間の各メトリクス値の変化の量,および対象 ソフトウェアにおける各メトリクス間の共分散から 導出 計測対象の粒度(次元): (モジュール,変更) 1 x :ある変更後のメトリクス値 DM ( x y ) ( x y ) y :ある変更前のメトリクス値 共分散行列 マハラノビス距離が大きいほど変動が激しい 12 モジュールの変動度(1/2) モジュールの変動度 FMD (fluctuation of module) 例)エントロピーによるモジュールの変動度 対象のモジュールおけるエントロピーの総和 FMD( H ) H MT メトリクス 正規化エントロピー,四分位分散係数による モジュールの変動度 FMD(H ), FMD (Q) も同様 13 モジュールの変動度(2/2) モジュールの変動度 FMD (fluctuation of module) 例)マハラノビス距離によるモジュールの変動度 対象のモジュールにおけるマハラノビス距離の総和 FMD( DM ) DM CT 変更時刻 ハミング距離,ユークリッド距離による モジュールの変動度 FMD(DH ), FMD (DE )も同様 14 変更の変動度 変更の変動度 FCT (fluctuation of change time) 例)マハラノビス距離による変更の変動度 対象の変更におけるマハラノビス距離の総和 FCT ( DM ) DM MD モジュール ハミング距離,ユークリッド距離による 変更の変動度 FCT (DH ), FCT (DE ) も同様 15 提案手法:手順 メトリクス値 バージョン 管理システム 手順1:メトリクス値の変遷を 取得 • モジュールの変動度 4 m3 3 m2 2 m1 1 • メトリクスの変動度 手順2:変動度の 計測 • 変更の変動度 c1 c2 c3 c4 c5 変更 • (モジュール,メトリクス)の変動度 • (モジュール,変更)の変動度 • (モジュール,メトリクス,変更)の変動度 手順3:ソフトウェア の特性分析 グラフによる変動度の可視化など 16 ユーザ 提案手法:手順1 メトリクス値の変遷を取得 入力: バージョン管理システム 出力: 全ての変更時におけるそれぞれの モジュールに対する各メトリクス値 1. バージョン管理システムから全ての変更とその変更 時におけるソースコードを取得 2. 全ての変更時におけるソースコードに対してソフト ウェアメトリクスを適用し,モジュール毎にそれぞれ のメトリクス値を取得 17 提案手法:手順2 変動度の計測 入力: 全ての変更時におけるそれぞれの モジュールに対する各メトリクス値 出力: 6種類の変動度 1. 入力のメトリクス値からエントロピーやマハラノビス 距離などを計測 2. エントロピーやマハラノビス距離などからモジュール の変動度や変更の変動度など計6種類の変動度を 導出 18 提案手法:手順3 ソフトウェアの特性分析 入力: 6種類の変動度 出力: 対象ソフトウェアの特性 1. 各種変動度をグラフなどを用いて可視化 2. 可視化された変動度から対象ソフトウェアの特性を 読み取る 例) • モジュールの変動度から将来問題の発生しやすい モジュールを特定 • 変更の変動度から対象ソフトウェアの開発過程を把握 19 提案手法の実装 手法の手順1~2を自動で行うツールを作成 ツールの対象 プログラミング言語 Java バージョン管理システム CVS モジュールの粒度 クラス 使用可能なメトリクス CKメトリクス, 対象クラスの行数など 20 適用事例:概要(1/2) 複数のオープンソースソフトウェアに対し, 手法を実装したツールを適用 対象ソフトウェア ソフトウェア名 FreeMind • FreeMind • JHotDraw • HelpSetMaker 対象開発期間 2000/08~2008/01 利用したメトリクス 最初の変更時の ソースコードの総行数 3,882 最後の変更時の ソースコードの総行数 39,350 • CKメトリクス (RFC, CBO, LCOM, NOC, DIT) • 対象クラスの行数(LOC) 開発者数 12 総変更回数 225 21 適用事例:概要(2/2) 各種変動度からソフトウェアの特性を導出 • • • • • • モジュールの変動度 メトリクスの変動度 変更の変動度 (モジュール,メトリクス)の変動度 (モジュール,変更)の変動度 (モジュール,メトリクス,変更)の変動度 22 適用事例:モジュールの変動度 (1/3) 14 モジュールの変動度が大 12 10 8 6 4 2 0 FMD(H ) – 他のモジュールに影響 – 他のモジュールから影響 – 頻繁に変更されている 問題の発生しやすい状態 45 40 35 30 モジュールの変動度が大きい クラスに注意すれば, 効率的な開発や保守が望める 25 20 15 10 5 0 FMD(DM ) 23 適用事例:モジュールの変動度 (2/3) 将来のバグ修正の予測効果に関する実験 1. 開発履歴を前半と後半に分割 2. 前半の開発履歴から変動度を計測 3. 前半の開発履歴における最後の変更時での メトリクス値を計測 4. 後半の開発履歴におけるバグ修正変更を調査 5. それぞれの上位何%が後半のバグ修正の何% を含んでいるか,その関係を調査 24 適用事例:モジュールの変動度 (3/3) ランキングの上位20% バグ修正被覆率(%) 100 90 • モジュールの変動度 80 97~100%の予測 70 60 • メトリクス値 50 22~89%の予測 40 30 モジュールの変動度は 将来のバグ修正の予測に 有効 25 モジュールの変動度(全5種) 20 メトリクス(全6種) 10 0 0 10 20 30 40 50 60 70 80 90 100 モジュールの変動度/メトリクス値ランキング被覆率(%) 2000/8/1 (a) (b) (c) (d) 26 変更の変動度は開発過程の理解に有効 FCT (DM ) Ver.0.4リリースへ向けての多量のバグ修正 Ver.0.6へ移行するための2年ぶりの変更 Ver.0.8に実装する新機能を持つプラグインの一斉追加 Ver.0.9に実装する機能の追加と多量のソースコードの削除や統合 2007/12/1 2007/10/1 (c) 2007/8/1 2007/6/1 2007/4/1 2007/2/1 2006/12/1 2006/10/1 2006/8/1 2006/6/1 2006/4/1 2006/2/1 2005/12/1 2005/10/1 2005/8/1 2005/6/1 2005/4/1 2005/2/1 2004/12/1 2004/10/1 2004/8/1 2004/6/1 (b) 2004/4/1 2004/2/1 2003/12/1 (a) 2003/10/1 2003/8/1 2003/6/1 2003/4/1 2003/2/1 2002/12/1 2002/10/1 2002/8/1 2002/6/1 2002/4/1 2002/2/1 2001/12/1 2001/10/1 2001/8/1 2001/6/1 2001/4/1 2001/2/1 2000/12/1 2000/10/1 適用事例:変更の変動度 90 (d) 80 70 60 50 40 30 20 10 0 まとめ • メトリクス値の変遷から変動度を導出し,ソフト ウェアの特性を分析する手法を提案 • 手法を実装したツールを作成し,複数のオープン ソースソフトウェアに適用 様々な変動度からそれぞれ有益なソフトウェアの 特性を取得 今後の課題 ツールの拡張 • C++やC#など,他のプログラミング言語への対応 • Subversionなど,他のバージョン管理システムへの対応 27
© Copyright 2024 ExpyDoc