アンチパターンの日本語訳がひどい
翻訳の問題
アンチパターンのタイトルが日本人にはなじみがないものである
微妙なニュアンスが伝わりにくい
適切に意訳する必要があるが、
直訳して、補足の解説を入れたほうがよい
ソフトウェア開発のアンチパターン
オブジェクトに情報を渡すだけが目的のオブジェクト
除去することが非常に困難で、結果が予測できないために悪い(冗長で品質の低い)コードを維持する
金のハンマー
気に入った方法が、あらゆるところで利用できると思い込む(銀の弾丸も参照)
構造がほとんど理解できないようなシステム、特にコードの構造が誤っているもの
コピー&ペーストプログラミング
汎用的なコードを作らず、既存のコードをコピーし(改変して)使う
抽象化の逆転
利用者に必要な機能が表に出ていないため、同じ機能が上位の機能を使って再実装されてしまう
(通例オブジェクト指向分析設計において)表現される視点を示さずに記述されたモデル
構造が認識できないシステム
データベースでIPC
より軽量なメカニズムがふさわしい場面で、データベースをプロセス間通信のメッセージキューとして使ってしまう
石油精製工場
不必要に複雑な設計
金箔
もはや更なる開発を行っても価値が向上しない業務やプロジェクトに対して作業を継続すること
カスタマイズ性を持たせすぎ、基礎にしたプラットフォームの劣化したコピーとなってしまったシステム
インターフェースの肥大化
実装が極めて困難になるほどインターフェースを強力にしてしまうこと
魔法のボタン
抽象化を行わず、インターフェースコードの中でロジックを実装してしまうこと
イベントが想定と異なる順序で発生することを予見していないこと
不適切な入力
正しくない入力の検出や扱いの失敗
キノコ栽培的組織管理
部下に情報を伝えなかったり、誤った情報を伝える(暗所で栽培する)
分析におけるアンチパターン
要求や設計上の判断が誤っているが、そのことに気づいた人間が、影響が大きいために見過ごしてしまう
ソフトウェア基盤のアンチパターン
煙突システム
コンポーネントの複雑な相互関連により、メンテナンスが困難なシステム
ベンダー依存
外部提供のコンポーネントに極度に依存したシステム
多数の人間が設計に関与しているが、統一された考え方がないこと
組織上のアンチパターン
ドル箱商品
収益が上がっている古い製品に満足して、新しい製品に無頓着になること
約束の拡大
後で誤っていると判っても、決定を取り消せないこと
閻魔の組織管理
異議を許さない、独裁的な組織管理方法
意思決定者が、意思決定の結果から隔離されていること
縦割り
上下方向の情報の流れが強く、組織間のつながりを禁じる組織構造
プロジェクト管理上のアンチパターン
分析地獄
アナリシスパラリシス
プロジェクトの分析段階に、不釣合いなほどの労力を費やすこと
プロジェクトが大失敗に終わることを CEO 以外全員が気づいているが、プロジェクトはデイ・ゼロ(ビッグバン)が来るまで無理やり存続させられる。あるいは、理解できない締め切りのため、従業員が深夜や休日まで勤務するよう共用される
計画倒れ
暴走プロジェクト
理性の欠落
集団の各メンバーが、同意が得られそうな領域以外の考え方を避ける
手品師
未実装の機能を実装されているように見せる
システムの後続のバージョンに、より多くの人員が必要になる
オブジェクト指向設計のアンチパターン
弱いドメインモデル
貧血ドメインモデル
ビジネスロジックが欠けたドメインモデル。オブジェクトは属性と振る舞い持たなければならないので、オブジェクト指向プログラミングではない
BaseBean
ユーティリティクラスに処理を委譲せず、継承して使ってしまう
スーパークラスの呼び出し
サブクラスがスーパークラスのオーバーライドされたメソッドを呼び出さなければならないような設計
円-楕円問題
変更できない型から変更可能な派生型を作成する際の問題
循環依存
オブジェクトやモジュール間の直接的・間接的な依存関係を不必要に取り込む
定数インターフェイス
インターフェイスを定数の定義に用いる
神オブジェクト
設計の一部分(クラス)に、過剰に機能を集中させる
オブジェクトのゴミ溜め
再利用に必要な(暗黙のうちの)規則に合致しない状態のオブジェクトを再利用する
オブジェクトの乱交状態
内部へのアクセスを制限なく許し、適切なカプセル化に失敗する
メソッドが特定の順序で呼び出される必要のあるクラス
過剰な断片化により、理解するのが難しい構造(たとえば継承関係)
プログラミングのアンチパターン
問題の解決に不要な複雑性を導入する
遠隔動作
遠隔作用
システムの大きく分散した部分同士が相互作用する
バグ修正の正しさ、あるいはサブルーチンの結果を確認しないこと
ボートの碇
もはや使用されていない部分をそのままにしておく
ビジーウェイト
何らかの事象が発生するのを待つ際に、メッセージングを使わずに、繰り返し確認することでCPUを無駄に使用する
失敗のキャッシュ
回復された後も、エラーフラグをリセットしない
パターンや方法論を理由を理解せずに用いる
特殊事項によるコーディング
特殊なケースが認識される度に、それに対応するコードを追加する
エラーの隠蔽
エラーメッセージをユーザーに通知する前に捕捉し、隠蔽したり、安全なメッセージを見せたりする
例外によるプログラミング
プログラミング言語のエラー捕捉機構を、正常なプログラムのロジック記述に使用する
ハードコード
システムの動作環境についての仮定を実装に埋め込む
switchとループによる順序処理
順序的な処理を、swtich文を使ったループ文の中に埋め込む
マジックナンバー
説明のない数値をアルゴリズムで使用する
マジックストリング
イベントの比較などのために、リテラルの文字列を用いる
ソフトコーディング
ソフトコード
ビジネスロジックをソースコードではなく設定ファイルに格納する
方法論のアンチパターン
発生しないであろう現象
発生しなくなる問題
エラーが発生するのはわかっているが、発生しないということにする
尚早な最適化
初期の段階から効率を追求してコーディングし、良い設計やメンテナンス性を犠牲にしてしまう。時には現実の効率も悪化させてしまう
書き直しプログラミング
組み合わせプログラミング/偶然にもとづくプログラミング
動くかどうかを見ながら、コードを徐々に変えて行くような方法
すでに存在する十分な解決方法を採用しない
気に入った方法が、問題の大半を解決できると思い込む
テスター駆動開発
新しい要求がバグ報告書で記述されるようなプロジェクト
構成管理のアンチパターン
依存関係地獄
必要とする構成要素のバージョンによる問題
特にMicrosoft Windowsにおける、ダイナミックリンクライブラリ (DLL)の不適切な管理
機能拡張の競合
Mac OS Xより前のMac OSにおいて、オペレーティングシステムの同じ箇所に複数の拡張機能を追加した際に発生する問題
JAR地獄
JARファイルを使用しすぎ、Java クラスローダーのモデルを理解しておらず、バージョンや配置場所の問題を生じる