JAVAを対象とした 動的複雑度メトリクスの実験的評価 竹原元康†,神谷年洋†,楠本真二†,井上克郎†‡,毛利幸雄* †大阪大学 ‡奈良先端科学技術大学院大学 *日本ユニシス株式会社
ソフトウェアサイエンス研究会 (SIGSS) 背景(1/2) オブジェクト指向開発方法論による ソフトウェア開発の活発化 オブジェクト指向ソフトウェアの開発管理を効果的に行うためには各工程においてメトリクスを使用し,品質や進捗状況の定量的な評価が必要 Chidamberらの複雑度メトリクス(C&Kメトリクス) 6種類のメトリクスを定義し,それぞれのメトリクスでクラス間の結合や継承関係等の複雑さを計測 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 背景(2/2) ソフトウェアの動的複雑度(実行時のソフトウェアの振舞い)の重要性が指摘されている Yacoubらによるオブジェクト指向ソフトウェアに対する動的な複雑度メトリクス† 特定の入力データシナリオに対する評価 クラス間メッセージの送受信回数 状態遷移の複雑さ 提案のみがされており有効性についての評価が不十分 †Yacoub S., Ammar H. and Robinson T.: ``Dynamic Metrics for Object Oriented Designs'', Proceedings of the Sixth International Symposium on Software Metrics(METRICS99), Boca Raton, Florida USA, pp. 50-61 (1999). 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 本研究の目的 動的メトリクスの有効性を実験的に評価 動的メトリクス値と静的メトリクス値の関係 動的メトリクス値が以下の品質特性を間接的に評価可能であるか 保守性 理解容易性 再利用性 エラーの伝播と発生可能性 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 静的メトリクスと動的メトリクス 静的メトリクス 設計書やソースコードから収集される情報のみで計測 動的メトリクス ソフトウェアの実行時の振舞いから収集される情報で計測 例 クラスC1がクラスC2のある1つのメソッドを実行時に10回呼ぶ 静的= 1 動的= 10 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 静的メトリクス:CBO CBO(Coupling Between Object classes) クラス間の結合による複雑度 計測対象クラスが「結合」しているクラスの数 結合とは,計測対象クラスが他のクラスの属性やメソッドを用いていることを意味する 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 動的メトリクス(1/5) シナリオ x : 入力データ、イベントによって実行されるオブジェクト間の一連の 相互作用 シナリオの確率 PSx : すべてのシナリオに対するあるシナリオの実行頻度 シナリオプロファイル : シナリオの実行確率の集合 メッセージ集合 Mx(Oi,Oj) : シナリオxの実行の間オブジェクトOiからオブジェクトOjに送信され るメッセージ集合 シナリオ内の総メッセージ MTx : シナリオxの実行の間オブジェクト間で交換されるメッセージの総数 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 動的メトリクス(2/5) 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 動的メトリクス(3/5) Export Object Coupling; EOCx(oi,oj) シナリオxの実行中に交換されるメッセージの総数のうちOi からOjに送信されるメッセージの割合 Object Request for Service(OQFS) から他の全てのオブジェクトに送信されるメッセージの割合 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 動的メトリクス(4/5) Import Object Coupling; IOCx(oi,oj) シナリオxの実行中に交換されるメッセージの総数のうち OiがOjから受信するメッセージの割合 Object Response for Service(OPFS) Oiが他の全てのオブジェクトから受信するメッセージの 割合 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 動的メトリクス(5/5) シナリオプロファイルとの統合 シナリオの実行確率を導入することでメトリクスを拡張することが可能 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) OQFSの具体例 A B C A =3/4×100=75(%) B =1/4×100 =25(%) C=0 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 品質特性評価への利用 動的メトリクスがソフトウェアの品質特性を評価するのに有効であると予想している 保守性 理解容易性 再利用性 エラーの伝播と発生可能性 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) Yacoubらの評価 Yacoubらはペースメーカーシステムの5つのコンポーネント(RS, CD, CG, AR, VTと名付けられているいる)に対して動的,静的それぞれのメトリクスを適用した シナリオの個数=2 RS CD CG AR VT OPFS 0.08 0.5 0.25 42.35 56.82 OQFS 0.27 0.46 53.53 45.47 CBO 13.5 23.1 28.8 17.3 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 問題点 メトリクスの計測値の比較に過ぎない 動的複雑度と静的複雑度の違い 動的メトリクスと静的メトリクス間の相関関係 品質特性評価可能性 4つの品質特性を間接的に評価するものとの相関関係 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 評価実験 ー目的 動的メトリクスと静的メトリクス間の関係 実験により作成された複数のクラスに対して,動的メトリクスのOQFSと静的メトリクスのCBOを計測し,それらの間の相関関係の評価 動的メトリクスによるエラーの伝播と発生可能性についての評価 各クラスで発生したエラー数とOQFSの間の関係を調べる 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 評価実験ー概要(1/3) 実験データ: 2000年7月に行われたある企業の新人研修におけるJavaプログラム開発プロジェクト(オークションシステムの作成) 被験者 (研修生)は事前に, オブジェクト指向開発について講習を受けている 1チーム4~5名からなるチームで, 全36チームが独立して同じシステムの開発を行う 各グループのメンバーがオークションシステムを構築する上で必要なコンポーネントを作成する(22種類) 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 評価実験ー概要(2/3) コンポーネント 内容 AuctionClient オークションクライアント AuctionServer オークションサーバ MemberImpl 会員オブジェクトの実装 BidDialog 入札ダイアログ : 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 評価実験ー概要(3/3) 会員登録処理: 実際に出品あるいは入札を行うために会員登録を行うための処理 出品処理: ユーザが売却したい品物をオークション(競売)にかけるために行う処理 入札処理: 客が出品物の入札価格を書いて提出するための処理 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 収集データ(1/2) プログラムコード メトリクス値を計測するためのデータ 1時間ごとにプログラムコードを自動的に収集 エラーデータ 設計レビュー,コードレビュー,テストにおいて発見されたエラーと各エラーの修正に要した時間に関する データ 記入フォームに被験者が記入する 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 収集データ(2/2) 分析対象データ 被験者である36チームのソースコードのうち仕様を満たしている24チーム分 収集された各クラスのソースコードの行数は, 50行程のものから500 行程度のものまで幅広く分散している(空白行や, コメント行も含まれる) これらの137個のクラスから収集されたエラーデータの総数は, 258個である 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 使用したシナリオ ユーザ3人:A~C A:会員登録→B:会員登録→A:出品→ C:会員登録→B:出品→ C:入札 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 計測結果 OQFS CBO AuctionClient 67.6 14 AuctionManagerImpl 18.3 18 AuctionServer 0.7 1 ・ メトリクス クラス 最大値 最小値 平均値 標準偏差 OQFS 70.7 0.27 14.9 16.0 CBO 19 1 6.97 5.54 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) OQFSとCBOの相関 OQFSとCBOの相関係数=0.59 あまり強く相関していない OQFSとCBOは異なった複雑度を評価している(Yacoubらの評価を補完) CBOは,アプリケーションが実行された際のオブジェクト間の頻繁なメッセージの送受信を考慮していないため 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) エラー数との相関 メトリクスとエラー数との相関はあまり高くない 動的メトリクスを計測する際に,シナリオを1つしか用いていないため さらにシナリオを増やし,かつ1個あたりの実行シナリオを長いものにして,再実験を行う必要がある OQFS エラー数 0.51 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 個々のクラス特性 設計段階での静的な結合度とシナリオの上で実行させたときの結合度の比較 どのクラスがどれぐらいの割合でアクセスされるかを判断する指標となる 動的メトリクスは,各クラス別の特性を見る上でも重要な役割を果たしている 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 考察 シナリオの追加 シナリオ確率の導入 規模と機能による分類 他の静的メトリクスとの比較 クラスのError-Pronenessの評価 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) シナリオの追加(1/2) ある程度長いシナリオで計測することが必要 全てのクラスが,実行時に少なくとも1回使用されるようなシナリオの集合が必要 実行時に使用されないクラスの存在 そのクラスの動的メトリクスは計測されないので,評価することが不可能 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) シナリオの追加(2/2) 更に20シナリオ程度追加予定 例:ユーザ10人:A~J A:会員登録→B:会員登録→A:出品→ C:会員登録→D:会員登録→D:入札→ C:出品→B:出品→E:会員登録→E:出品→ E:入札・ ・ ・ 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) シナリオ確率の導入 シナリオ1つに対して実験を行ったために,シナリオの確率は導入されていない シナリオの確率の設定 設計段階において考えられるユースケースに基づいて設定することが必要 設計段階でどのようなユースケースがあるのかを詳細に考慮することが必要 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 規模と機能による分類 動的メトリクスの値が高いクラス AuctionClientクラス AuctionManagerImplクラス クラス分類を行った上での評価の必要性 これらの2つのクラスと同程度の規模のクラス 同種の機能を持つクラス 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) 他の静的メトリクスとの比較 BriandらのMM(Method-Method interaction) LiらのMPC(Message Passing Coupling) HitzらのCLC(Class Level Coupling)とOLC(Object Level Coupling) LeeらのICP(the Information Flow-Based Coupling) 引数の個数によって重み付けされた他のクラスの呼び出されたメソッドの数 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
クラスのError-Pronenessの評価 アプリケーションの品質の評価 複数のメトリクスを合わせて評価することが必要 例:ロジスティック回帰分析を用いた手法 あるクラスにエラーが存在するかどうかを予測するときに,複数のメトリクスを指標として使用し,分析する方法 動的メトリクスを指標の1 つに加えることでエラー予測の精度が上昇すると考えられる 精度が上昇すれば開発工程の期間の短縮にもつながり,アプリケーションの保守,管理にも役立つと考えられる 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)
ソフトウェアサイエンス研究会 (SIGSS) まとめ Yacoubらの提案したオブジェクト指向ソフトウェアに対する動的複雑度メトリクスの有効性についての実験的評価を行った Chidamberらの静的メトリクスとの間の相関関係はあまり高くなく,静的な複雑さとは異なる観点の複雑さを評価していることを確認 今後,分析を引き続き行い更に詳細な評価をする予定 2019/05/22 ソフトウェアサイエンス研究会 (SIGSS)