コードクローンパターン

 コードクローン(code clone)とは,ソースコードのコピー&ペーストによって作られた(あるいは,作られたように見える)コードの断片を指す[17].これは,重複コード(duplicated code)とも呼ばれる.一般的に,コードクローンの存在がソフトウェア保守を難しくするといわれており,FowlerやBeckもリファクタリングにおけるコードの悪臭のひとつであると指摘している[8].

 このような背景を受け,重複コードを発見するための2つのパターンがOORP[7]の8章に紹介されている.8.1では,コードを機械的に比較しよう / Compare Code Mechanically (OORP パターン8.1)が紹介されている.大規模なプログラムのコードを手動で調べ上げ,コードの重複を発見することは現実的でない.このパターンでは,ソースコードのテキストを行ベースで比較するスクリプトを利用することを奨励している.次に,8.2 では,散布図(ドットプロット)を用いてコードを視覚化しよう / Visualize Code as Dotplots (OORP パターン8.2)が紹介されている.散布図とは,2つのソースコードファイルの各行をX軸とY軸に並べ,重複する行の位置にドットを表示した行列を指す.行列内に現れるドットの形状に応じて,4つの解釈が提案されている.

 ここでは,OORPの重複コード発見パターンに追加する形で,コードクローンに関する5つのパターンを紹介する.

パターン 3.1

着目すべき特徴を絞って散布図を分析しよう
Focus on Particular Dotplots

散布図を解釈し,重複コードの存在によって生じるソースコードの問題点やその解決策を分析したい.

問題

解法

Figure 3.1

図3.1: 対角線に着目する(戦略1)

Figure 3.2

図3.2: 分断された対角線に着目する(戦略2)

Figure 3.3

図3.3: 破線・点線に着目する(戦略3)

トレードオフ

-利点

-欠点

関連するパターン

 重複コードを,散布図を利用して解釈する方法は,OORPの散布図を用いてコードを視覚化しよう (OORP パターン8.2) で示されている.本パターンは,散布図の解釈方法を詳細に示したものである.

パターン 3.2

類似したファイル群を抽出しよう
Extract Similar File Groups

大規模なソースコードの重複コードを,散布図を使って分析したい.

問題

Figure 3.4

図3.4: 解析対象ソースコードの規模が大きい場合の散布図の例
(あるOSSのソースコードの散布図)

解法

Figure 3.5

図3.5: ファイルの類似度に基づいた絞込みの流れ

トレードオフ

-利点

-欠点

パターン 3.3

プロダクト中の類似部分を探そう
Identify Similar Parts Within a Product

レガシーソフトウェアの大規模な改修をする計画がある.その際,改修にあわせ共通化すべき部分を特定し,集約したい.改修にあわせることで,網羅的なテストを同時にできるため,共通化すべき部分の集約が受け入れられやすい.

問題

解法

トレードオフ

-利点

-欠点

関連するパターン

 類似部分がプロダクト間にまたがる場合は,プロダクト間にまたがる類似部分を探そう (パターン3.4) の適用を検討する必要がある.また, 重複コードを発見するためには,OORPのコードを機械的に比較しよう (OORP パターン8.1)と散布図を用いてコードを視覚化しよう (OORP パターン8.2)が利用できる.発見した類似部分は,重複部分の一貫性を維持しよう (パターン3.5)で管理すべきである.

パターン 3.4

プロダクト間にまたがる類似部分を探そう
Identify Similar Parts Between Products

発注先が計画通りの流用を行っているか確認したい.

問題

解法

トレードオフ

-利点

-欠点

関連するパターン

 類似部分がひとつのプロダクトに閉じているときは,プロダクト中の類似部分を探そう (パターン3.3)の適用を検討する必要がある.また, 重複コードを発見するためには,OORPのコードを機械的に比較しよう (OORP パターン8.1)と散布図を用いてコードを視覚化しよう (OORP パターン8.2)が利用できる.発見した類似部分は,重複部分の一貫性を維持しよう (パターン3.5)で管理すべきである.

パターン 3.5

重複部分の一貫性を維持しよう
Keep the Consistency of Duplicated Code

水平展開(類似部分の同時修正)が必要な部分を特定したい.

問題

解法

トレードオフ

-利点

-欠点

関連するパターン

 類似部分の発見には,コードクローンパターンを利用できる.同時修正箇所が必ずしも類似しているとは限らないため,変更履歴を記録しよう (パターン4.1)活動履歴を記録しよう (パターン4.2)の適用も検討する価値がある.


参考文献
パターン集のトップへ戻る ページのトップへ戻る