Document

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