【ソフト開発 アンチパターン】Cut-And-Paste Programming

どんな問題?

  • 似たコードが散見されること
  • 先行例を少し改変して再利用すること
    • line countの指標的には良い
    • 短期的には成功できる

症状

  • 同じ類のバグが散見される
  • 同じ類のバグを全て治すのは難しい
  • 全体の生産性に寄与しないコードが増えていく
  • コードレビューとインスペクションが不必要に増える
  • コードがあまり考えられずに再利用されている

f:id:yusuke_ujitoko:20161208224111p:plain

原因

  • 再利用可能なコードをつくるのが大変であること
  • 短期的な成果が求められる環境
  • ソフトモジュールの文脈や意図がコードに現れていないこと
  • 抽象化がなされないこと
  • コードの設計が文書化されないこと
  • 先の見通しが立てられずに開発が進んでいくこと
  • 技術やツールに疎いこと

どう解決する?

  • 複製はホワイトボックスな再利用となる

    • 継承を用いる
    • 大規模システムに向いていない
      • 継承には欠点がいくつかある
          1. オブジェクトの実装を知っておく必要がある
          1. コンパイル時にはじめて再利用できる
    • Object-oriented programming(OOP)
    • Cut-and-Pase が起きる
  • ブラックボックスな再利用では利点と欠点が異なる

    • オブジェクトの実装はインターフェースとは独立している
      • 実装とインターフェースの分離が可能
      • 欠点はインターフェースをあわせないと使えないこと
    • 大規模システムには向いている
    • Component-oriented programming(COP)
    • リファクタリングして,こちらのブラックボックスな再利用をすべき

yusuke-ujitoko.hatenablog.com