コードクローン(重複コード)とは何か?プログラムの保守性を低下させる手法

2021年7月6日

コードクローンの概要

コードクローンとは、1システム内で類似した・または一致したものが複数存在するソースコードを指します。コードクローンという呼び名は特にソフトウェア工学で扱われることが多く、日本語では「重複コード」と呼ばれることもあります。

多くの場合、コードクローンは意図的に作成されます。
とくに規模の大きな開発であれば、開発の手間を省くために一部のコードをコピー&ペーストして流用することも珍しくありません。このようにして生まれたものがコードクローンと呼ばれます。
コードクローンは開発時には非常に便利な手段ですが、保守・運用の面ではたびたび大きな課題となります。

コードクローンのデメリット

上述の通り、コードクローンは開発の手間を省くために、一部のコードをコピー&ペーストして作成されます。
こうすることで開発にかかる時間は短縮されるというメリットがあります。
しかし、コードクローンのデメリットは、保守・運用をより複雑で困難なものにしてしまうことです。
たとえば、あるコード上に修正ポイントが発生した際、そのコードクローンが存在すれば、コードクローンのすべてに修正を反映しなければなりません。
複数人で開発した場合、修正はさらに複雑化します。他者が開発したソースコードの場合、コードクローンを見落としてしまうこともあります。
また、開発中に一箇所で不具合が判明した場合、そのコードクローンも同様の不具合を抱えている可能性があります。コードクローンを濫用すると、潜在的不具合の可能性が非常に高くなるということです。
そのため昨今では、システム内のコードクローンを検出・分析する技術が重要視されています。

コードクローンに関係するIT原則

コードクローンに関係するIT原則に、以下のようなものがあります。

「DRY原則」

DRY原則「Don’t Repeat Yourself」と呼ばれる原則です。
ソースコードにおいて、同じ情報は複数の場所に置かず、一箇所にまとめ、そこから参照すべきだという原則です。
同じ内容の記述が複数箇所に生まれてしまうコードクローンはこのDRY原則に違反しています。

「OAOO」

OAOO「Once And Only Once」の略称です。これはDRY原則をさらにプログラミングに集中して言及したものになります。
プログラミングで同じ処理を行う際は、近しいソースコードをいくつも作成せず、関数などにまとめて流用すべきという原則です。
コードクローンはこのOAOOにも反しています。

コードクローン分析のツール

とくに1990年代から、コードクローンの分析手法は多く研究されてきました。
最近では「システムにとって有用なコードクローン」の存在も言及されており、有用なコードクローンと改修すべきコードクローンをいかに判別するかが注目されています。
日本では代表的なものとして、コードクローン検出ツール「CCFinder」が広く使用されています。

参考