背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.

Slides:



Advertisements
Similar presentations
1 EASE プロジェクトにおける EPM ( Empirical Project Monitor) を用いたプロジェクト管理デモ 奈良先端科学技術大学院大学 産学官連携研究員 松村 知子 2005 年 9 月 30 日 JISA 経営者セミナー.
Advertisements

オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
機能実現期間の測定による プログラマ能力の実験的評価
IAA情報登録クライアント for Windows
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
CKメトリクスを用いてリファクタリングの 効果を予測する手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
ソフトウェア工学 第五回 知能情報学部 新田直也.
メトリクス計測 プラグインプラットフォームMASUの開発
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
オブジェクト指向プログラムのための 動的結合メトリクスの評価
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
ソードコードの編集に基づいた コードクローンの分類とその分析システム
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
複雑度と機能量に基づくアプリケーションフレームワークの実験的評価
オブジェクト指向メトリクスを用いた 開発支援法に関する研究
CKメトリクスに基づくリファクタリングの 効果予測手法の提案と実装
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
ソフトウェア部品分類手法への コンポーネントランク法の応用
UMLで記述された設計仕様書を対象とした レビュー手法CBRとPBRの比較評価実験
コンポーネントランク法を用いたJavaクラス分類手法の提案
ソフトウェア保守性を評価する メトリクス間の関連分析
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
ソースコード縮退による ソースコード理解 神谷年洋 科学技術振興事業団 さきがけ研究21 オブジェクト指向シンポジウム2003.
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
シナリオを用いたレビュー手法PBRの追証実験 - UMLで記述された設計仕様書を対象として -
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
福岡工業大学 情報工学部 情報工学科 種田研究室 于 聡
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
類似した振舞いのオブジェクトの グループ化による クラス動作シナリオの可視化
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
JAVAを対象とした 動的複雑度メトリクスの実験的評価
ソフトウェア理解支援を目的とした 辞書の作成法
オブジェクト指向開発における フォールト発生早期予測手法の 一提案
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
ソフトウェア工学 知能情報学部 新田直也.
コードクローン解析に基づく デザインパターン適用候補の検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
プログラム理解のための 付加注釈 DocumentTag の提案
コードクローンを対象とした リファクタリングの有効性に関する調査
Presentation transcript:

C++プログラムを対象とした 複雑度メトリクス計測ツールと その評価 神谷年洋 高林修司 楠本真二 井上克郎 大阪大学 大学院基礎工学研究科

背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入

品質評価によるプロセス改善 ISO9000シリーズ・SPICE・CMMなど 計測にはさまざまなメトリクスを用いる プロセスやプロダクトを計測する 分析によって問題点を見つけだし、改善策を立てる 改善策を実行する 計測にはさまざまなメトリクスを用いる

メトリクス メトリクスとは、ソフトウェアのさまざまな特性を判別する客観的な数学的尺度である プロセスメトリクス・プロダクトメトリクス 複雑度メトリクスはエラーの発生を予測するためのメトリクスである MaCabeのサイクロマチック数・Halsteadのソフトウェアサイエンス オブジェクト指向設計を計測対象とするChidamberらの複雑度メトリクス

複雑度メトリクスによるエラー予測 メトリクスを用いて複雑である(エラーを含みやすい、保守しにくい)モジュールを予測する ↓ 複雑であると判断されたモジュールの再設計をする レビューやテストを重点的に行う

目的 オブジェクト指向開発を対象としてプロダクト品質評価のためのツールを作成する ツールの有効性を実験的に評価する

Chidamberらの複雑度メトリクス オブジェクト指向設計を対象とする クラス間の参照関係(CBO,RFC) 派生関係(DIT,NOC) クラス内部の複雑度(WMC,LCOM) S. R. Chidamber and C. F. Kemerer: “A metrics suite for object-oriented design”, IEEE Trans. on Software Eng., Vol.20, No.6, pp.476-493(1994). V. R. Basili, L. C. Briand, and W. L. Melo: “A validation of object-oriented design metrics as quality indicators”, IEEE Trans. on Software Eng., Vol. 20, No. 22, pp. 751-761 (1996).

ツールが計測するメトリクス RFC 使用するメソッドの数 結合 CBO 結合するクラスの数 DIT 継承木内での深さ 継承 NOC 子クラスの数 WMC メソッドの数 LCOM メソッドの凝集度の欠如 クラス内の 複雑さ NIV インスタンス変数の数 SLOC ソースコードの行数

ツール概要 Chidamberらの複雑度メトリクスを用いたクラスの複雑度 GUIによる操作 Windows 95上で動作 メトリクス計測機能 メトリクスによる複雑度評価機能 GUIによる操作 Windows 95上で動作

ツールの入出力 入力: C++ソースコード 出力: クラス階層図 ソースコードのブラウズ メトリクスによる複雑度判定

対象とするC++サブセット C構文 C++構文 例外処理構文 クラス/メソッド構文 テンプレート 関数テンプレート(部分的に受理する) クラステンプレート(部分的に受理する)

ツールの画面 (クラス階層の表示)

ツールの画面(ソースコードのブラウズ)

ツールの画面 (メトリクスによる判定)

ツールの構成

メトリクスによる複雑度判定 (1)クラスの分類 (2)基準値の設定 (3)異常値の算定 6種類:ドキュメント、ビュー、ダイアログ、フレーム、アプリケーション、その他 (2)基準値の設定 分類/メトリクスごとに基準値(a, σ)を用意する (今回は実験で収集したデータを用いた) (3)異常値の算定

クラス分類 ドキュメント ビュー ダイアログ フレーム アプリケーション その他 アプリケーションのデータを保持する データを表示する・(メニュー等)操作を受け付ける ダイアログ 定型入力を行う・警告を出す フレーム ウィンドウの状態を管理する アプリケーション アプリケーションに関する情報(レジストリ情報等)を管理する その他

実験概要 ある企業の新人研修 開発するプログラムは電子メールの配送システム(3000行程度) 5つのサブシステムからなる:SMTPサーバー、POPサーバー、DELIVERサーバー、SMTPクライアント、POPクライアント 4~5名の開発者がチームで開発を行う(一人あたり600行程度) Visual C++、MFC(Microsoft Foundation Class)を用いる

データの収集方法 プログラムのソースコード フォールトデータ サーバーによって1時間毎に自動収集 フォールト報告用ツール(Efer)によって収集 開発作業の開始・終了時刻 コーディング・レビュー・テスト・フォールト修正など 開発作業の結果 欠陥・フォールト

メトリクスデータ 被験者17人、クラス124個、フォールト84個

分析:クラス分類とメトリクス

分類CDocumentの特徴 ドキュメントクラスは「データの保持する」役目を持つ NIVが大きい。インスタンス変数が多い CBOが小さい。あまり他のクラスの変数を参照していない WMCが大きい。他のクラスにデータを操作するためのメソッドを提供している

分類CViewの特徴 CViewはデータを表示し、UIを受け持つ CBOが大きい。他のクラスの変数を参照している WMCが大きい。他のクラスにメソッドを提供している LCOMが大きい。互いに関連のない雑多な機能を凝集している

分析:異常値とエラー

まとめ Chidamberらのメトリクス プロダクト評価ツール ツールの評価実験 ソースコードからメトリクスを計算する クラス分類によってメトリクスの分布に差がある メトリクスによる複雑度判定

課題 多くのプロジェクトに対して、ツールの有効性を評価する Chidamberらのメトリクス以外のメトリクスを計測できるようにする 上流工程のCASEツールのデータを扱えるようにする Rational Rose Visual Modeler

C++ソース分析ツールの比較 ツールの出力からChidamberらのメトリクスを算出可能か