【ソフト開発 アンチパターン】Lava Flow

Lava flowは溶岩流という意味

どんな問題?

  • 研究段階のコードから発生しがち.
    • 研究段階のコードの特徴としては以下がある.
      • 試行錯誤を繰り返す
      • デモを何度もつくるために色んなバージョンがある,
      • ドキュメント化はされない.
    • その結果として,
      • 断片的なコード,変数,クラス,手続きが生まれる
      • それらは複雑な見た目でspaghettilikeなため,存在理由が不明になる
    • これらのコード(lava flow)を分析して対処するのは可能ではあるが,そんな余裕は通常ない

  • Lava flowコードの問題点としてはざっくり以下のようなものがある.
    • 分析,検証,テストするのには手間がかかりすぎる.そして無駄に終わることも多い.
    • メモリにロードするのは高価で,リソースの無駄となりパフォーマンスに悪影響を与える
    • オブジェクト指向の利点を損ねてしまう.モジュール化や再利用ができない.

f:id:yusuke_ujitoko:20161204102210p:plain:w500

症状(どんな状態?)

  • 断片的な変数と手続きがコード全体に散っている
  • 書類化されていない,複雑で,一見重要そうで実は重要でない関数,クラス,セグメントがある
  • アーキテクチャがゆるく,"進化し続ける”
  • ブロック全体がコメントアウトされている
  • 将来置き換えられるコードがある
  • 使われていないコードがある
  • 使われていないインターフェースがヘッダーにある

原因

  • R&Dコード
    • 何も考えられずそのまま製品化される
  • 完結していないコード
    • 何かの機能を実装しようとした
  • 開発者が一人であること
  • Lack of configuration management or compliance with process management policies.
  • アーキテクチャがない.もしくはアーキテクチャ駆動開発でないこと
  • 反復的な開発プロセス
    • 目標が途中で変わる
  • アーキテクチャの傷

どう解決する?

  • Lava flowを避けるには,以下を行っておく
    • システムレベルのインターフェースの確立
    • 定義の明確化
    • 明快な文書化

  • 既にlava flowが存在していると,それを取り除く治療は大変
    • コードの依存関係を把握し,慎重にデッドコード部分を削除する
    • 不用意に行うと,バグが発生してしまう.

消えたプログラマの残したものは - megamouthの葬列はまさにLava flowアンチパターンだ.

yusuke-ujitoko.hatenablog.com