ソフトウェア保守性を評価する メトリクス間の関連分析 大阪大学 大学院 情報科学研究科 馬場慎太郎,吉田則裕,楠本真二,井上克郎 2007/6/8 ソフトウェア信頼性研究会ワークショップ
目次 研究背景 保守性を評価するメトリクス 評価実験 まとめ 今後の課題 目的・対象プロジェクト概要 計測方法 結果・考察 2007/6/8 ソフトウェア信頼性研究会ワークショップ
研究の背景 ソフトウェアにおける保守性への関心拡大 従来の保守性の評価 それぞれの保守性評価結果にどのような関係が あるのかを確認する必要性 長期間に渡って使用されるソフトウェアでは,保守に 要するコストが増大してきている 新規開発(?)でも既存ソフトウェアを母体とした開発が 多い 従来の保守性の評価 複雑度メトリクス コードクローンに関するメトリクス これらの関係は不明 それぞれの保守性評価結果にどのような関係が あるのかを確認する必要性 よく使われているのは複雑度メトリクス。 最近ではコードクローンもあります。コードクローンとは・・・ ただしこれらの関係は・・・ 2007/6/8 ソフトウェア信頼性研究会ワークショップ
ソフトウェアの保守性 保守性:修正のしやすさに関する能力 保守性評価のためのメトリクス 誤りの訂正 データ環境や処理環境の変化への適合 機能やユーザビリティの改善 保守性評価のためのメトリクス 複雑度メトリクス サイクロマチック数 Halsteadのメトリクス CKメトリクス インターフェイス複雑度 コードクローンに関するメトリクス ROC 2007/6/8 ソフトウェア信頼性研究会ワークショップ
複雑度メトリクス-サイクロマチック数 McCabeが提案したメトリクス* プログラム制御の流れに着目 値が大きいと保守性低下 ソースコードの分岐の数+1がメトリクス値 値が大きいと保守性低下 テストケースを作成する手間増大 変更作業がしにくい 皆さんご存知かとは思いますが、簡単に説明させていただきます かなり古いメトリクスではありますが、最近でもソフトウェアの複雑度評価に使われてます * R. Yokomori, M. Noro, K. Inoue: "Evaluation of Source Code Updates in Software Development Based on Component Rank", The Proceedings of 13th Asia Pacific Software Engineering Conference (APSEC2006), pp.327-334 (2006). 早瀬,松下,楠本,井上,小林,吉野:“影響波及解析を利用した保守作業の 労力見積りに用いるメトリクスの提案", 電子情報通信学会論文誌D(印刷中). 2007/6/8 ソフトウェア信頼性研究会ワークショップ
複雑度メトリクス-Halsteadのメトリクス オペレータとオペランドの種類数・出現数から規模やバグ数,開発時間を予測 オペレータの種類数n1,出現数N1 オペランドの種類数n2,出現数N2 規模=(N1+N2)log(n1+n2) 保守における障害密度との関係の分析が 行われている** Logの底は2 ** 高橋"C言語ソフトウェア保守工程におけるHalsteadのソフトウェアサイエンス計測と障害密度との関係の分析", 電子情報通信学会論文誌J82-D-I(8)pp.1017-1034,1999 2007/6/8 ソフトウェア信頼性研究会ワークショップ
複雑度メトリクス-CKメトリクス ChidamberとKemererらの提案した,オブジェクト指向ソフトウェアに対する代表的メトリクス クラスの複雑さを,内部複雑度,継承,結合の3つの観点,6つのメトリクスから評価 全てのメトリクスに対し,値が大きいと複雑なクラスであり,好ましくない 2007/6/8 ソフトウェア信頼性研究会ワークショップ
複雑度メトリクス-インターフェイス複雑度 関数に関するインターフェイスの複雑度を 評価するメトリクス 計測ツールも存在 インターフェイスを複雑にする要因の和を 計測 関数中にある引数の数 “return”の数 値が大きいと複雑である 2007/6/8 ソフトウェア信頼性研究会ワークショップ
コードクローン ソースコード中に含まれる同一または類似したコード片の対または集合. (コピー&ペーストプログラミング,実行パフォーマンス向上,偶然等で作り込まれる) コードクローンはソフトウェア保守性を低下させる コードクローンが存在するコード片に対して修正を行う場合,その全てのクローンについて修正を行うかどうかの検討をしなければならない クローンペア もう一つは,コードクローンに基づく評価です.コードクローンとは, ソースコード中に存在する同一または類似したコード片をもつコード片のこと,またそれらのコード片の対 や集合のことを意味します. コードクローンが作りこまれる原因としましては,コピー&ペーストプログラミング,実行パフォーマンスの向上, コーディングスタイル,偶然などがあります. コードクローンがどのようなものかを図を用いて説明しますと,まず,この色づけした部分が同一または類似した コード片だとします.これらそれぞれのことをコードクローンといいます. また,任意の2つの,同一または類似したコード片の対をクローンペアといいます. さらに,同一または類似したコード片全ての集合をクローンセットといいます. クローンセット 2007/6/8 ソフトウェア信頼性研究会ワークショップ
コードクローンに関するメトリクス:ROC 対象プログラムにおけるコードクローンが占める割合を示す 字句解析後のトークンをベースとする ROCを計測する範囲内の全トークン数をAll,その範囲内でコードクローンになっているトークン数をCloneとすると ROC=Clone÷All×100(%) 例:全部で200トークンから成り,そのうち50トークンがコードクローンになっているファイル ROC=50÷200×100=25(%) 2007/6/8 ソフトウェア信頼性研究会ワークショップ
評価実験の目的 複雑度メトリクスとコードクローンに関するメトリクスの関連調査 サイクロマチック数 インターフェイス複雑度 ROC 対象プロジェクトに対し各メトリクスを適用し,保守性の評価結果の相関を検定 総合複雑度 2007/6/8 ソフトウェア信頼性研究会ワークショップ
対象プロジェクト概要 ソフトウェアエンジニアリング技術研究組合(COSE)参加企業によって実施のプローブ情報システム 実質7社で共同開発 17年度,18年度と2ヵ年度に渡って開発 本研究では17年度の最終段階のプログラムを対象 ほぼC/C++で記述 規模は約10万行(ヘッダファイル除く) 73コンポーネント,約400ファイルから構成 2007/6/8 ソフトウェア信頼性研究会ワークショップ
計測方法-複雑度 市販ツールRSMを使用 各コンポーネントごとにサイクロマチック数,インターフェイス複雑度,総合複雑度を計測 計測値を行数(空行やコメントのみの行は 除く)で割って正規化 メトリクス値は行数が多いほど大きくなる 正規化した値が複雑度,保守性を評価していると判断 2007/6/8 ソフトウェア信頼性研究会ワークショップ
計測方法-コードクローン コードクローン分析ツールGeminiを使用 会社内に閉じたコードクローンのみを検出 仮に会社間にコードクローンが存在しても,独立して開発しているため保守性に影響なし 各コンポーネントごとにROCを計測 その値によって保守性を評価 2007/6/8 ソフトウェア信頼性研究会ワークショップ
Gemini出力例 水平・垂直方向にソースコードを出現順に配置 コードクローンとなっている箇所に点を描画 線は会社の区切り線 X社 Y社 2007/6/8 ソフトウェア信頼性研究会ワークショップ
実験結果(1/3) 各社におけるコンポーネントごとのメトリクス値の 平均値と順位 メトリクス値が低いほど高い保守性を表す サイクロマチック数 インターフェイス複雑度 総合複雑度 ROC A社 10.77 1 14.22 7 24.98 3 15.5 B社 14.72 10.37 6 25.09 4 20.57 2 C社 16.53 5 9.13 25.66 39.2 D社 18.84 9.93 28.77 22 E社 15.41 9.06 24.47 49.13 F社 13.68 7.99 21.66 39 G社 17.86 8.80 26.65 66.67 各社におけるコンポーネントごとのメトリクス値の 平均値と順位 メトリクス値が低いほど高い保守性を表す 2007/6/8 ソフトウェア信頼性研究会ワークショップ
実験結果(2/3) 総合複雑度(サイクロマチック数+インターフェイス複雑度)とROC間のSpearmanの順位相関係数を検定 結果,相関なし 総合複雑度 vs ROC 相関係数 0.1071 危険率5%の有意点 0.786 相関の有無 無 総合複雑度(サイクロマチック数+インターフェイス複雑度)とROC間のSpearmanの順位相関係数を検定 結果,相関なし 2007/6/8 ソフトウェア信頼性研究会ワークショップ
インターフェイス複雑度vsサイクロマチック数 実験結果(3/3) サイクロマチック数 vs ROC インターフェイス複雑度 vs ROC インターフェイス複雑度vsサイクロマチック数 相関係数 0.5357 -0.7857 -0.2143 危険率5%の有意点 0.786 相関の有無 無 メトリクス同士の相関を同様に検定 いずれも相関なし 複雑度のメトリクス同士でも相関なし 異なる側面を評価している インターフェイス複雑度とROC間の相関は負に近い 2007/6/8 ソフトウェア信頼性研究会ワークショップ
考察 各メトリクス間に相関なし インターフェイス複雑度とROCの間に負の相関が ある可能性 異なる側面から保守性を評価するため,結果も異なる より正確な保守性評価のために,いくつかのメトリクスを 組み合わせることが有用と考えられる インターフェイス複雑度とROCの間に負の相関が ある可能性 複雑な関数が多いプログラム インターフェイス 複雑度は高い ROCは低い 2007/6/8 ソフトウェア信頼性研究会ワークショップ
まとめ 複雑度メトリクスとコードクローンに関するメトリクスによる保守性の評価結果の関連調査 対象は複数社で共同開発の中規模システム その結果,2者の間に相関はなく,また複雑度メトリクス同士の組み合わせでも相関がなかった 2007/6/8 ソフトウェア信頼性研究会ワークショップ
今後の課題 18年度のプログラムに対する分析 年度間の変化 17年度と同じ結果になるか 2ヵ年度に渡って開発を行ったプロジェクト 保守性の変化の原因分析 2007/6/8 ソフトウェア信頼性研究会ワークショップ
進行中の年度間分析(1/2) A~Gが会社を表す 総合複雑度とROCの関係を表している 右上にいくほど好ましくない 17年度 18年度 A~Gが会社を表す 総合複雑度とROCの関係を表している 右上にいくほど好ましくない 矢印が長いほど年度間で大きな違い 分析例 ROCは年度間変化が大きな会社とほとんどない会社がある G社やD社は2メトリクス間にトレードオフの関係 2007/6/8 ソフトウェア信頼性研究会ワークショップ
進行中の年度間分析(2/2) A~Gが会社を表す 複雑度に関する2メトリクスの関係を表している 右上にいくほど好ましくない 矢印が長いほど年度間で大きな違い 分析例 左下と右上を結ぶ矢印が多い 一方のメトリクス値が 増減すると,他方も同様に増減する傾向 2007/6/8 ソフトウェア信頼性研究会ワークショップ