ソフトウェア保守性を評価するメトリクス間の関連分析
馬場慎太郎，吉田則裕，楠本真二，井上克郎
大阪大学 大学院情報科学研究科 コンピュータサイエンス専攻



  概要     

ローンが指摘されている ．コードクローンとは，ソースコード中に存在するコード片で，同形または類似したソフトウェア開発の大規模化，複雑化，開発期間の短縮

コード片が他に存在するもののことで，いわゆる重複し化に伴い保守性の高いソフトウェアを開発することの重たコードのことである．保守の際，変更を加えるコード

要性が高まっている．保守性の評価としては，これまで

片にコードクローンが多く存在すると手間も多くかかる

サイクロマチック数をはじめとした複雑度メトリクスやため，なるべく作りこまないことが重要である．本論文

ソースコード中の同一または類似した部分を指すコー

ではコードクローンに関するメトリクスのことをクロー

ドクローンに関連したメトリクスが用いられることが多ンメトリクスと呼ぶが，肥後らはクローンメトリクスとかった．しかし，これらのメトリクスの評価結果がどのして，クローン含有率（）を提案している  ．

ような関連にあるかは確認されていなかった．そこで，

このメトリクスは，直観的には対象プログラム中のコー

本研究では複数社で共同開発された中規模情報システム

ドクローンが占める割合を表す． が高いと保守性を対象とし，複雑度メトリクスと，コードクローンに関が低いと指摘されており，このメトリクスの有効性の評連したメトリクスの相関を調査した．その結果，各メト価も行われている．

リクスの間には相関が見られず，保守性の別の側面をそ

一般にソフトウェアの複雑度は評価する視点によって異れぞれ評価していることがわかった．

なる傾向を示す．例えば， メトリクスでは，オブジェ
クト指向プログラムの複雑さを，クラスの内部，継承，結合の３つの視点から評価しており，それぞれが独立した特性を評価している．しかし，コードクローンに基づまえがき

く評価がプログラムの保守性を評価する上で，複雑度メ
トリクスとどのような関連があるかは確認されていない．

近年，ソフトウェア開発の大規模化や複雑化，ソフトウェ

そこで，本研究ではこれらの保守性の評価結果においてアの応用分野の拡大に伴って，ソフトウェア中の欠陥や違いがあるのか確認することを目的とした．実験の対象

それを原因とするシステムの故障が社会に大きな影響をとしたのは複数社によって共同で行われたプローブ情報

与えることが多くなってきた．そこで，ソフトウェアのシステム  の開発である．これに複雑度メトリクスと品質の中でも特に保守性に大きな関心が寄せられている．

クローンメトリクスを適用し，保守性の評価結果の相関

従来，保守性の評価にはいわゆる複雑度メトリクスが用を   の順位相関係数によって検定した．

いられてきた  ．著名なものを挙げると，
のサイクロマチック数   や と   らの  メトリクス  などがある．メトリクス値計測の結果，複雑度が高いソフトウェアは保守性が低いと言われている．
一方，近来保守性に影響を与える要因としてコードク 準備¯  メトリクス
 ソフトウェアの保守性

メトリクスとは，と     らの提案したメトリクスである ．オブジェクト指向
ソフトウェアに対する代表的なメトリクスであり，

ソ フ ト ウェア の 品 質 に は 様々な も の が あ る が ，クラスの複雑度を静的に評価する．計測する内容毎

で は ソ フ ト ウェア の 保 守 性 を 次 の よに  つのメトリクスが定義されている．全てのメト 

リクスにおいて，計測値が大きいほうが，複雑なクうに定義している ．

ラスであり好ましくないことを示す．
保守性： 修正のしやすさに関する能力．修正は，是正もしくは向上，又は環境の変化，要求仕様の変更及び¯ インターフェイス複雑度機能仕様の変更にソフトウェアを適応させることをインターフェイス複雑度とは，関数に関するイン含めてもよい．

ターフェイスの複雑度を評価するメトリクスである．値が大きいほどソフトウェア全体の複雑度も一般に，ソフトウェアの保守性を評価するためには複雑高いと言われている． %&  '  ("()

度メトリクスやコードクローンに関するメトリクスが用

市販ツール   では，関数中にある引数の数

いられることが多い．

と* $&*の数の総和でこのメトリクス値を定義し

#

の

ている．



ソフトウェアの複雑さ コードクローン

ソフトウェアの保守性を評価するための方法の  つとして複雑さを評価する方法がある．複雑さの評価手法としコードクローンとは，ソースコード中に存在するコードては以下のようなものが挙げられる．

片で，同形または類似したコード片が他に存在するもののことで，いわゆる重複したコードのことである．もし，プログラムコード中にコードクローンが存在した場合¯ サイクロマチック数
サイクロマチック数とは，

によって提案されたメトリクスである  ．プログラム制御の流れを有向グラフで表現したときの枝の数 ，節点の数 を用いてで表される．この値は直観的にはソースコードの分岐の数に  を加えた数をには，一般的にコードの変更等が困難であると言われ，保守性低下の一因となっている．端的な例を挙げると，
コードクローンの箇所にバグがあった場合，そこだけでなく，該当部と同形または類似した箇所全てを調査する必要があり，コストがかかる．

表す．サイクロマチック数が多いと，テストケース

コードクローンの研究は広く行われており，多くの研究（ホワイトボックステスト）を作成する手間がかか

者がコードクローンの検出や分析のためのツールを作成

る，変更作業（保守作業）がしにくくなると指摘さしているが，その定義には相違がある 

れている．

のうちの  つ，コードクローン検出ツール ,   で¯ !"#$  のメトリクス．そ   +

は，対象ソースコードに対して字句解析を行ってトークン列を得，さらに正規化したものに対してコードクローのソフトウェアサイエンスというメトリンの検出を行う．,   におけるコードクローンのクスがある ．これは，ソースコード中に定義さ定義をここで紹介する ．あるトークン列中に存在すれているオペランドとオペレータの種類数と出現数

る つの部分トークン列 ， が等価であるとき， とに基づいて規模やバグ数，開発時間を予測するメト は互いにクローンであるという．またペア ， をク

リクスである．本メトリクスとソフトウェア保守工

ローンペアと呼ぶ．， それぞれを真に包含するいか程における障害密度との関係の分析も行われているなるトークン列も等価でないとき，， を極大クロー!"#$ ．

ンと呼ぶ．また，クローンの同値類をクローンセットと呼ぶ（図  参照）．ソースコード中でのクローンを特にが著名である．しかし，これらの相関関係に関する報告

コードクローンという．,   はプログラムのソーはされておらず，不明である．そこで，複雑度メトリク

スコード中に存在する極大クローンを検出する．検出さスとクローンメトリクスによる保守性の計測結果の違いれるコードクローンの最小トークン数はユーザが前もっがあるかどうかを確認することを目的としている．

て設定できる．



対象プロジェクトの概要

対 象 プ ロ ジェク ト は ，経 済 産 業 省 の 支 援 を 受 け て ，½ 参加企業によって実施されたプローブ情報シス

テムの開発プロジェクトである．本プロジェクトは，プロジェクト管理担当の  社と開発担当の  社によって実施された． 社のうち社はそれぞれ箇所の拠点で開発を行い，開発に携わった人員も異なっていたため，実図 - クローンペアとクローンセット

質  社で開発したとみなすことができる．本研究では開発主体は 3 社〜4 社の  社であるとみなす．平成  年

コードクローンには，いくつかの自身を特徴付けるメト
リクスがある．その  つである ./0 は，クローンセット  内に含まれるコード片がどの程度非繰り返しであるかを示す ．. が小さいコードクローンは，例
えば変数宣言の羅列など，あまり保守性に影響を与えな度， 年度と ヵ年度に渡って行われたプロジェクトで，ほとんどのプログラムは で書かれているが，一部はスクリプト言語や 56$ ( で書かれている．

 分析対象データ

いものが多いことがわかっている．. は + から  までの実数値を取るが，これまでの研究で，コードクロー

本研究では保守性評価のためのデータとしてはソース

ンとしてみなすべき . の閾値は +- 程度であるとい

コードのみを用いた．対象プロジェクトは ヵ年度に渡っう報告がされている．
また，コードクローンを用いた保守性評価のためのメトリクスとして，コードクローン含有率（）がある．
は，その値を求める対象部分を定めれば決定され，対象部分のソースコードにおけるトークン総数を ，対象部分のソースコードにおけるトークンのうちコードク
ローンになっているトークンの数を  とするとき，次の式で表される．
 1 ÜÝ ¢ ++/20


が高いほどコードクローンになっているトークンの割合が高く，保守性が低いと言われている．

て行われたが，本研究では平成  年度の最終段階でのデータを対象とした．また，使用ツールがサポートする
言語における制約から 

言語で書かれている部分を対象とした．さらにプログラム中には，主にプロトタ
イプ宣言を行うヘッダファイルも存在するが，分析対象外とした．これには，複雑度メトリクスのうちの  つであるサイクロマチック数はプログラムの制御の流れを評価するにもかかわらず，ヘッダファイルには実装部がほとんどなく評価できないことや，宣言部のコードクロー
ンは保守性にあまり影響を及ぼさない  という理由がある．その結果，分析対象となったプログラムは約 +万行程度で， コンポーネントから構成され，ファイル数は約 ++ ファイルである．

 評価実験
 目的節で述べたように，保守性を評価する手法としては複雑度メトリクスによるものとコードクローンによるもの

 計測方法
本研究では複雑度とコードクローンというつの観点から保守性を評価する．以下，それぞれの計測方法を述½ ソフトウェアエンジニアリング技術研究組合（

     ） 

ローンとなりうるが，会社をまたがったコードクローン

べる．

はありえないということである．なお，実際に会社をまたがったコードクローンは少なく，仮にコードクローン 複雑度があったとしても，各社は独立して開発しているため保守時には影響がないと思われる．

市販ツール  を用いて評価を行った ．各コンポー
ネントごとにサイクロマチック数とインターフェイス複 実験結果

雑度を計測し，それぞれを該当コンポーネントに含まれるファイルの総行数（空行とコメントのみの行は除く）
で割った結果の大小で複雑度を評価している．総行数にはばらつきがあるのに対し，サイクロマチック数もイン
ターフェイス複雑度も行数が多いほど値が大きくなるメ
トリクスのためこのように正規化を行った．また，サイ
クロマチック数とインターフェイス複雑度のみだけではなく，これらの和も複雑度を表すメトリクスとして使用
した．本論文ではこれを総合複雑度と呼ぶ．なお，
中でもこのメトリクスは定義され，複雑度を評価できるとされている．

表  は会社ごとのメトリクス値を表している．なお，表の下に書いてあるように，各メトリクスを正規化したものを今後 6"(，$ ，'($" と表記する．各社は 
つ以上のコンポーネントを担当しているが，コンポーネントごとにメトリクス値を計測し，その平均値と  社内
での順位を示している．これらのメトリクスは全て値が大きいほど保守性が低いと言われているため，メトリク
ス値の昇順に順位付けをしている．それぞれのメトリク
スとも，会社によってある程度値が異なることがわかる．
全てのメトリクスに対し，適当な 社を選べばその 社
間に統計的に有意な差があることを確認した．



コードクローン

コードクローン分析ツール 4    を用いて評価を行った．4   は内部でコードクローン検出ツール
,  を用いている．本研究では各コンポーネント

ごとに， - 節で説明した  の値を求め，その高低によって品質を評価する．
コードクローンに関しては，何をコードクローンとみなすか，ということが問題になる．コードクローンとみ

表 は '($" と  の相関を表している．'($" は，サイクロマチック数とインターフェイス複雑度両方の属性を反映しており，多角的に複雑度を評価するメトリクスだといえる．表  の結果を基に   の順位相関係
数  を検定したが，相関係数は +- であり，相関は確認されなかった（危険率  ％での有意点は +-）．
表  には，他のメトリクスの組み合わせの相関を載せている．他の組み合わせでもメトリクス間に相関はないことがわかる．

なす最小トークン数や，. というコードクローンメ
表

トリクスの閾値はツール使用時に設定できるが，今回は4  - '($"と  の相関'($"のデフォルト値を採用し，+ トークン以上であ相関係数

りかつ . の値が +- 以上のものに限りコードクロー+-+

有意点ンとみなすこととした．

相関の有無

最小トークン数は，小さすぎるとコードクローンと呼べ

+-

無

ないような偶然に似通ったコード片を検出してしまい，
大きすぎるとコードクローンと呼べるようなコード片を検出できないことが多くなるという問題がある．これま 分析

での研究で + 程度が妥当であると確認されている ．
また，本研究では会社内に閉じたコードクローンのみを表 に示したように，それぞれ別の観点から保守性を評対象とした．つまり，ファイルやコンポーネントが異なっ価している複雑度メトリクスとクローンメトリクスは，ても，同じ会社が開発したコード片同士ならばコードク

相関がないという結果になった．この結果は，それぞれ

6"(

表 - 各社のメトリクス値
順位 $  順位 '($" 順位



順位


3

社

+-



-



-



-

7

社

-



+-



-+



+-



社

-



-



-



-

8

社

-



-



-





社

-



-+



-

,

社

-

-



-

4

社

-

-

6"(
$ 



-+




-











-



：サイクロマチック数÷行数× ++：インターフェイス複雑度÷行数× ++'($"：総合複雑度÷行数× ++

コードを収集し，分析を行った．その結果，複雑度メト
表 - メトリクス間の相関6"($ 

6"($ +-

9+-9+- 

+-

+-

+-

相関係数
有意点
相関の有無

リクスとクローンメトリクスの間には相関がないことが

無

無

無

確認された．今後の課題としては，次のようなものが挙げられる．

¯ 他データへの適用
今回，有意点と僅かな差で相関が見られなかったメのメトリクスが持つ保守性とのギャップのベクトルが異トリクスの組み合わせがあった．今後他のデータもなることを示していると思われる．よって，保守性をよ対象とし，より信頼性の高い分析結果を目指すべきり正確に評価するためには，いくつかのメトリクスを組である．

み合わせることが有用ではないかと考えられる．
また，表  を見ると，複雑度メトリクスとクローンメト¯ メトリクスの見直し

リクスの組み合わせである 6"( と ，$  と 
ばかりか，複雑度メトリクス同士の 6"( と $  の間にも相関がなかった．$  と  に関しては，相関なしという結果にはなったが相関係数と有意点にはほとん
ど差がなく，むしろ負の相関がありそうにも思われる．
再利用しないような複雑な関数の使用によって  が下がる，というようにトレードオフの関係があることが考えられる．

 まとめと今後の課題

保守性の評価にあたって，どのようなメトリクスがふさわしいのかを改めて考える必要がある．例えば
は，あるトークンに対してコードクローンになっているか否かのみが評価基準であるため，多くのクローンセットの構成要素になっているトークン
も， つだけのクローンセットの構成要素になっているトークンも同じように評価されてしまう．

¯ 年度間の変化
本プロジェクトは ヵ年度に渡って行われた．年度間

本論文では，複雑度メトリクスとクローンメトリクスにのメトリクス値変化を分析することで，ソフトウェ

よる保守性の評価結果の関連を明らかにするために，日ア開発手法の変化と保守性の変化の関係を評価でき本のある中規模情報システム開発を対象とし，ソースると思われる．

謝辞

金恩美 椿元 楠本真二 菊野亨- プログラムに対する複雑さメトリクスの提案と大学環境での実験的評価- 電子情報通信学会論文誌 F989/+0E >

本研究は一部，文部科学省リーディングプロジェクト「 9($6 $- -基盤ソフトウェアの総合開発」の委託を受けて行われた．また，一部科研費基盤研究 /30/.(- ++++0+ - ((((  - !(= $?-の助成を得た．

 $ <6 &" $ ( #(&

G# ) #"  ) $(

( -



#   - +> ++参考文献

 

松本義弘 肥後芳樹 楠本真二 井上克郎-

:メ

トリクスに基づくリファクタリングの効果予測手 7- - 7: &" $ (法の提案と実装- 電子情報通信学会技術研究報告 ; ) &" $ (   9

 ")

 

#(<$=

#6#$ #- - > -

+/ 0E> ,  '- $( #&($ (B $9(   - >+ +++-

- 3 #(<$=

 D-  $  .-  :&

@- 7
$

-

3- D
"(

#& $

<(

@- (&(- 3

 $ $ ( &# )   #-  - - 





;"$  ) - > 3  $ #

$ 

 # )-   

 '- $#&& .- #&) 

3 ((#" <( "6# #   9

 $ ( <( #(<$=

#$$ #6$C  -,-   -B $9(

3- (  D- ! )( - (&  - 7:  
- $#&($(- - 7C$ 

(" C $6  #& - + -3A  "( 9"6# #$  #6#$   <$( )- ++-    9 E+> - 7"? #: -  "( - 8)  # 7- @)&  - ($()  #--9( ##  #&  $#  

:# $
>+

( B $# &# ) (""# - ($ A 9   $%# & -++-        -  %&  '  ("() #- -+/0E>- - !- !"#$ - "  $# (< #(<$=

#

 -

 -(  "  $$ ( <( A #$ )$ ) ("( #   #(<$=

#6#$ - !"-   ##  

携に基づいたコードクローン可視化手法の改良と実装- 情報処理学会論文誌 / 0E> '- 6

,  E

3

"(

 $ $ (

( -



&#&($(&"$ " )& #$ 
#6#$ <($(: 9
")

 ,

-

-

(& -

# 

#"

++-

(

#(&

   

/0E>+ F&"-++ -高橋良英"#$ 

言語ソフトウェア保守工程におけるのソフトウェアサイエンス計測と障害密度との関係の分析- 電子情報通信学会論文誌 F 989
/0E+>+ -  

肥後芳樹 吉田則裕 楠本真二 井上克郎- 産学連

ソフトウェア製品の評

価9品質特性及びその利用要領- 日本規格協会 

 D- ! )( '-  6 - &#&($(  - (&  $ F H + /  0-      -の 順 位 相 関 係 数-   