Javaを対象とした 動的複雑度メトリクスの実験的評価

JAVAを対象とした
動的複雑度メトリクスの実験的評価
竹原元康†,神谷年洋†,楠本真二†,井上克郎†‡,毛利幸雄*
†大阪大学
‡奈良先端科学技術大学院大学
*日本ユニシス株式会社
背景(1/2)
オブジェクト指向開発方法論による
ソフトウェア開発の活発化
オブジェクト指向ソフトウェアの開発管理を効果的に行
うためには各工程においてメトリクスを使用し,品質や
進捗状況の定量的な評価が必要
Chidamberらの複雑度メトリクス(C&Kメトリクス)

6種類のメトリクスを定義し,それぞれのメトリクスでクラス間
の結合や継承関係等の複雑さを計測
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
1
背景(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).
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
2
本研究の目的
動的メトリクスの有効性を実験的に評価

動的メトリクス値と静的メトリクス値の関係
動的メトリクス値が以下の品質特性を間接的に
評価可能であるか




保守性
理解容易性
再利用性
エラーの伝播と発生可能性
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
3
静的メトリクスと動的メトリクス
静的メトリクス

設計書やソースコードから収集される情報のみで計測
動的メトリクス

ソフトウェアの実行時の振舞いから収集される情報で計測
例
クラスC1がクラスC2のある1つのメソッドを実行時に10回呼ぶ
 静的= 1
 動的= 10
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
4
静的メトリクス:CBO
CBO(Coupling Between Object classes)
クラス間の結合による複雑度
計測対象クラスが「結合」しているクラスの数
結合とは,計測対象クラスが他のクラスの属性
やメソッドを用いていることを意味する
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
5
動的メトリクス(1/5)
シナリオ x :
入力データ、イベントによって実行されるオブジェクト間の一連の
相互作用
シナリオの確率 PSx :
すべてのシナリオに対するあるシナリオの実行頻度
シナリオプロファイル :
シナリオの実行確率の集合
メッセージ集合 Mx(Oi,Oj) :
シナリオxの実行の間オブジェクトOiからオブジェクトOjに送信され
るメッセージ集合
シナリオ内の総メッセージ MTx :
シナリオxの実行の間オブジェクト間で交換されるメッセージの総数
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
6
動的メトリクス(2/5)
x
x (T 1)
O1  O 2  O3
x(T 2)
O 2  O3  O1
2
x (T 3)
O1  O 2
1
2015/10/01
Mx
ソフトウェアサイエンス研究会
(SIGSS)
MTx
2
7
動的メトリクス(3/5)
Export Object Coupling; EOCx(oi,oj)
シナリオxの実行中に交換されるメッセージの総数のうちOi
からOjに送信されるメッセージの割合
| {Mx (oi, oj ) | oi, oj  O  oi  oj} |
EOCx (oi, oj ) 
100
MTx
Object Request for Service(OQFS)
シナリオxの実行中に交換されるメッセージの総数のうちOi
から他の全てのオブジェクトに送信されるメッセージの割合
K
OQFSx(oi ) 
| { Mx(oi, oj ) | oi, oj  O  oi  oj} |
j 1
MTx
100
K
  EOCx(oi, oj )
j 1
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
8
動的メトリクス(4/5)
Import Object Coupling; IOCx(oi,oj)
シナリオxの実行中に交換されるメッセージの総数のうち
OiがOjから受信するメッセージの割合
IOCx (oi, oj ) 
| {Mx (oj , oi ) | oi, oj  O  oi  oj} |
100
MTx
Object Response for Service(OPFS)
シナリオxの実行中に交換されるメッセージの総数のうち
Oiが他の全てのオブジェクトから受信するメッセージの
K
| { Mx(oj , oi ) | oi, oj  O  oi  oj} |
割合
j 1
OPFSx(oi ) 
MTx
100
K
  IOCx(oi, oj )
2015/10/01
ソフトウェアサイエンス研究会
j 1
(SIGSS)
9
動的メトリクス(5/5)
シナリオプロファイルとの統合

シナリオの実行確率を導入することでメトリクスを拡張
することが可能
|X |
IOC(oi, oj )   PSxIOCx(oi, oj )
x 1
|X |
OPFS(oi )   PSx OPFSx(oi )
x 1
|X |
EOC(oi, oj )   PSxEOCx(oi, oj )
x 1
|X |
OQFS(oi )   PSx OQFSx(oi )
x 1
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
10
OQFSの具体例
A
B
M2
A
=3/4×100
=75(%)
B
=1/4×100
=25(%)
M3
C=0
M1
2015/10/01
C
M4
ソフトウェアサイエンス研究会
(SIGSS)
11
品質特性評価への利用
動的メトリクスがソフトウェアの品質特性を
評価するのに有効であると予想している
保守性
 理解容易性
 再利用性
 エラーの伝播と発生可能性

2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
12
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.27
0.46
53.53
45.47
CBO
13.5
23.1
28.8
17.3
17.3
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
13
問題点
メトリクスの計測値の比較に過ぎない
動的複雑度と静的複雑度の違い

動的メトリクスと静的メトリクス間の相関関係
品質特性評価可能性

4つの品質特性を間接的に評価するものとの相関関係
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
14
評価実験 ー目的
動的メトリクスと静的メトリクス間の関係

実験により作成された複数のクラスに対して,動的メト
リクスのOQFSと静的メトリクスのCBOを計測し,それ
らの間の相関関係の評価
動的メトリクスによるエラーの伝播と発生可能性
についての評価

各クラスで発生したエラー数とOQFSの間の関係を調
べる
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
15
評価実験ー概要(1/3)
実験データ:
2000年7月に行われたある企業の新人研修にお
けるJavaプログラム開発プロジェクト(オークション
システムの作成)
被験者 (研修生)は事前に, オブジェクト指向開発につい
て講習を受けている
1チーム4~5名からなるチームで, 全36チームが独立し
て同じシステムの開発を行う
各グループのメンバーがオークションシステムを構築す
る上で必要なコンポーネントを作成する(22種類)
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
16
評価実験ー概要(2/3)
コンポーネント
内容
AuctionClient
オークションクライアント
AuctionServer
オークションサーバ
MemberImpl
会員オブジェクトの実装
BidDialog
入札ダイアログ
:
2015/10/01
:
ソフトウェアサイエンス研究会
(SIGSS)
17
評価実験ー概要(3/3)
会員登録処理:
 実際に出品あるいは入札を行うために会員登
録を行うための処理
出品処理:
 ユーザが売却したい品物をオークション(競
売)にかけるために行う処理
入札処理:
 客が出品物の入札価格を書いて提出するた
めの処理
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
18
収集データ(1/2)
プログラムコード


メトリクス値を計測するためのデータ
1時間ごとにプログラムコードを自動的に収集
エラーデータ


設計レビュー,コードレビュー,テストにおいて発見さ
れたエラーと各エラーの修正に要した時間に関する
データ
記入フォームに被験者が記入する
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
19
収集データ(2/2)
分析対象データ

被験者である36チームのソースコードのうち仕様を満
たしている24チーム分
収集された各クラスのソースコードの行数は, 50
行程のものから500 行程度のものまで幅広く分
散している(空白行や, コメント行も含まれる)
これらの137個のクラスから収集されたエラー
データの総数は, 258個である
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
20
使用したシナリオ
ユーザ3人:A~C
A:会員登録→B:会員登録→A:出品→
C:会員登録→B:出品→ C:入札
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
21
計測結果
クラス
メトリクス
AuctionClient
AuctionManagerImpl
AuctionServer
・
・
OQFS
CBO
2015/10/01
OQFS
67.6
18.3
0.7
・
・
CBO
14
18
1
・
・
最大値
最小値
平均値
標準偏差
70.7
19
0.27
1
14.9
6.97
16.0
5.54
ソフトウェアサイエンス研究会
(SIGSS)
22
OQFSとCBOの相関
OQFSとCBOの相関係数=0.59
 あまり強く相関していない
 OQFSとCBOは異なった複雑度を評価し
ている(Yacoubらの評価を補完)
CBOは,アプリケーションが実行された際
のオブジェクト間の頻繁なメッセージの送
受信を考慮していないため
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
23
エラー数との相関
エラー数
OQFS
0.51
メトリクスとエラー数との相関はあまり高くない
動的メトリクスを計測する際に,シナリオを1つし
か用いていないため
さらにシナリオを増やし,かつ1個あたりの実行シ
ナリオを長いものにして,再実験を行う必要があ
る
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
24
個々のクラス特性
20
18
16
14
12
CBO 10
8
6
4
2
0
0
10
20
30
40
50
60
70
80
OQFS
設計段階での静的な結合度とシナリオの上で実行させた
ときの結合度の比較

どのクラスがどれぐらいの割合でアクセスされるかを判断する指
標となる
動的メトリクスは,各クラス別の特性を見る上でも重要な
役割を果たしている
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
25
考察
シナリオの追加
シナリオ確率の導入
規模と機能による分類
他の静的メトリクスとの比較
クラスのError-Pronenessの評価
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
26
シナリオの追加(1/2)
ある程度長いシナリオで計測することが必要
全てのクラスが,実行時に少なくとも1回使用され
るようなシナリオの集合が必要
実行時に使用されないクラスの存在

そのクラスの動的メトリクスは計測されないので,評価
することが不可能
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
27
シナリオの追加(2/2)
更に20シナリオ程度追加予定
例:ユーザ10人:A~J
A:会員登録→B:会員登録→A:出品→
C:会員登録→D:会員登録→D:入札→
C:出品→B:出品→E:会員登録→E:出品→
E:入札・ ・ ・
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
28
シナリオ確率の導入
シナリオ1つに対して実験を行ったために,シナリ
オの確率は導入されていない
シナリオの確率の設定


設計段階において考えられるユースケースに基づい
て設定することが必要
設計段階でどのようなユースケースがあるのかを詳
細に考慮することが必要
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
29
規模と機能による分類
動的メトリクスの値が高いクラス
AuctionClientクラス
 AuctionManagerImplクラス

クラス分類を行った上での評価の必要性
これらの2つのクラスと同程度の規模のクラス
 同種の機能を持つクラス

2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
30
他の静的メトリクスとの比較
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)

引数の個数によって重み付けされた他のクラスの呼
び出されたメソッドの数
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
31
クラスのError-Pronenessの評価
アプリケーションの品質の評価

複数のメトリクスを合わせて評価することが必要
例:ロジスティック回帰分析を用いた手法
P( X 1, X 2,・・・



1
)
1  exp((C 0  C1 X 1  C 2 X 2 ・・・ ))
あるクラスにエラーが存在するかどうかを予測するときに,複数
のメトリクスを指標として使用し,分析する方法
動的メトリクスを指標の1 つに加えることでエラー予測の精度が
上昇すると考えられる
精度が上昇すれば開発工程の期間の短縮にもつながり,アプリ
ケーションの保守,管理にも役立つと考えられる
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
32
まとめ
Yacoubらの提案したオブジェクト指向ソフトウェア
に対する動的複雑度メトリクスの有効性について
の実験的評価を行った
Chidamberらの静的メトリクスとの間の相関関係
はあまり高くなく,静的な複雑さとは異なる観点
の複雑さを評価していることを確認
今後,分析を引き続き行い更に詳細な評価をす
る予定
2015/10/01
ソフトウェアサイエンス研究会
(SIGSS)
33