Lava flowは溶岩流という意味
どんな問題?
- 研究段階のコードから発生しがち.
- 研究段階のコードの特徴としては以下がある.
- 試行錯誤を繰り返す
- デモを何度もつくるために色んなバージョンがある,
- ドキュメント化はされない.
- その結果として,
- 断片的なコード,変数,クラス,手続きが生まれる
- それらは複雑な見た目でspaghettilikeなため,存在理由が不明になる
- これらのコード(lava flow)を分析して対処するのは可能ではあるが,そんな余裕は通常ない
- 研究段階のコードの特徴としては以下がある.
- Lava flowコードの問題点としてはざっくり以下のようなものがある.
- 分析,検証,テストするのには手間がかかりすぎる.そして無駄に終わることも多い.
- メモリにロードするのは高価で,リソースの無駄となりパフォーマンスに悪影響を与える
- オブジェクト指向の利点を損ねてしまう.モジュール化や再利用ができない.
症状(どんな状態?)
- 断片的な変数と手続きがコード全体に散っている
- 書類化されていない,複雑で,一見重要そうで実は重要でない関数,クラス,セグメントがある
- アーキテクチャがゆるく,"進化し続ける”
- ブロック全体がコメントアウトされている
- 将来置き換えられるコードがある
- 使われていないコードがある
- 使われていないインターフェースがヘッダーにある
原因
- R&Dコード
- 何も考えられずそのまま製品化される
- 完結していないコード
- 何かの機能を実装しようとした
- 開発者が一人であること
- Lack of configuration management or compliance with process management policies.
- アーキテクチャがない.もしくはアーキテクチャ駆動開発でないこと
- 反復的な開発プロセス
- 目標が途中で変わる
- アーキテクチャの傷
どう解決する?
- Lava flowを避けるには,以下を行っておく
- システムレベルのインターフェースの確立
- 定義の明確化
- 明快な文書化
- 既にlava flowが存在していると,それを取り除く治療は大変
- コードの依存関係を把握し,慎重にデッドコード部分を削除する
- 不用意に行うと,バグが発生してしまう.
例
消えたプログラマの残したものは - megamouthの葬列はまさにLava flowアンチパターンだ.