「コードクローンに基づくレガーシーソフトウェアの品質の分析」
(門田暁人、佐藤慎一、神谷年洋、松本健一:情報処理学会論文誌2003年8月号)
要約(Abstract)を引用する。
「ソフトウェアに含まれるコードクローン(重複するコード列)は、ソフトウェアの構造を複雑にし、ソフトウェア品質に悪影響を与えるといわれている。しかし、コードクローンとソフトウェア品質の関係はこれまで定量的に明らかにされていない。
本論文では、20年以上前に開発され、拡張COBOL言語で記述されたある大規模なレガシーソフトウェアを題材とし、代表的なソフトウェア品質である信頼性・保守性とコードクローンとの関係を定量的に分析した。
信頼性の尺度として「モジュールの改版数」を用いた。
分析の結果、コードクローンを含むモジュール(clone-includedモジュール)は、含まないモジュール(non-cloneモジュール)よりも信頼性(平均値)が約40%高いが、200行を超える大きさのコードクローンを含むモジュールは逆に信頼性が低いことが分かった。
また、clone-includedモジュールはnon-cloneモジュールよりも改版数(平均値)が約40%大きく(すなわち、改版のためにより多くの保守コストが費やされてきた)、さらに、モジュールに含まれるコードクローンのサイズが大きいほど改版数がより大きい傾向にあることが分かった。」(P.2178)
「コードクローンとは、ソースコードの中の重複したコード列のことであり、主にソースコードのコピー&ペーストを行うことにより生成される。」
たしかに、保守だけでなく、新しいプログラムを作るときにも、ちゃんと動いているものからコピー&ペーストして、もとの構造を生かして作ってゆくこともある。
また、変更の場合でも、対象のモジュールに組み込むと、IF文の多いわかりにくいプログラムになってしまうので、別モジュールとして似たようなコードを書くことがありそうだ。
ただ、あんまり長いものをコピーすると、間違いが増えるということのようだ。
この論文では、一概にコードクローンを否定しているわけではない。
だが、分析はともかく、コードクローンを探してくれるツールがあれば、保守をしている人たちには喜ばれそうだ。
「コードクローン」で検索してみたが、商品化されているのかどうかは分からなかった。
また、C言語版もあるようだ。
コメント