
499
ソフトウェア中のコピーされたコードを検出する
とすということです。不器用で冗長な設計には、不純物が積み重なっていき、最初のコードの意図を不
明瞭にして行くと思えますよね?
コードベースの一箇所に共通部分を分離し、パラメタ化を行う方が
良くはないでしょうか?
あるいはオブジェクト指向言語であれば、もっとエレガントな設計を達成す
るために、インヘリタンスやジェネリッククラスをうまく組み合わせて作った方が良くないでしょう
か?
先の例では、もっと詳細にコードベース全体を理解するまでは、何が「正しい」設計かを確かめるの
は難しいことです。確かに現状は少し不恰好に見えますが、パラメタ化した方がマシになるでしょうか?
抽象化のしすぎは理解しにくいコードにつながり、ひいては保守の問題につながるということはないで
しょうか?
これらはより良い質問だと言えます。
ソフトウェア中のコピーされたコードを検出する
クローン(コピーされたコード)の検出は、技術的に興味深い問題の
1
つです。既存のコード断片が
コピーされてから新しい目的に合わせて変更された場合、どうやれば自動ツールでそれを認識できるで
しょうか?
すべてのクローンが後から変更されないで全く元のままなら(実際そういう場合もありはす
るのですが)、クローン検出はかなり簡単です。しかし、通常はクローンは新しい用途に合わせて調整
されます。元あった行が変更されたり削除されたり、新しいコードが追加されることもあります。です
から、ここで立ち止まって、次のように質問してみるのが良いでしょう。ソフトウェアのクローンとは、 ...