ソフトウェア保守性を評価する メトリクス間の関連分析

Slides:



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

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール.
シーケンス図の生成のための実行履歴圧縮手法
背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
AGMアルゴリズムを用いた ギャップを含むコードクローン情報の生成
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用
プログラム実行履歴を用いたトランザクションファンクション抽出手法
アイテムセットマイニングを利用した コードクローン分析作業の効率向上
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
コードクローン分析ツールGeminiを用いたコードクローン分析手順
オブジェクト指向プログラムのための 動的結合メトリクスの評価
ギャップを含むコードクローンの フィルタリング手法の提案
ソースコードの同時修正支援における関数クローン検出ツールの有効性調査
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
ソードコードの編集に基づいた コードクローンの分類とその分析システム
動的依存グラフの3-gramを用いた 実行トレースの比較手法
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
重複コードと非重複コードにおける 修正頻度の比較
多母集団の同時分析 豊本満喜子 大阪大学人間科学部.
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
コードクローンの複雑度メトリクスを用いた開発者の特徴分析
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
コードクローン編集者数に着目した開発履歴の分析
コードクローンのメトリクス値と 開発者の相関の調査
Geminiを用いた効果的なコードクローン分析方法
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
類似度メトリクスを用いた Javaソースコード間類似度測定ツールの試作
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
ソフトウェアプロダクト集合に対する 派生関係木の構築
メトリクス値の変化に基づく コードクローンの編集傾向分析
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
アスペクト指向言語のための視点に応じた編集を可能にするツール
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
容易に使用可能な grep風コードクローン検索ツール
ソフトウェア理解支援を目的とした 辞書の作成法
オブジェクト指向開発における フォールト発生早期予測手法の 一提案
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
回帰分析入門 経済データ解析 2011年度.
コードクローン解析に基づく デザインパターン適用候補の検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
Geminiを用いた効果的なコードクローン分析方法
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
Presentation transcript:

ソフトウェア保守性を評価する メトリクス間の関連分析 大阪大学 大学院 情報科学研究科 馬場慎太郎,吉田則裕,楠本真二,井上克郎 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 ソフトウェア信頼性研究会ワークショップ