失敗パターン一覧
| 失敗パターン名 | 概要 | 
|---|---|
| Architecture | ソフトウェアの大局的構造に関する失敗パターンです。 | 
| Design | ソフトウェア開発の設計工程に関する失敗パターンです。 | 
| FWべったり | ハードウェアへのアクセス関数を、多くの個所で使っている。 | 
| getter/setterの利用 | ファイル内の変数を公開して、他のファイルから利用可能にしている。 | 
| HWべったり | ハードウェアのレジスタ値が公開されていて、多くの個所で使っている。 | 
| Module | 関数分割やファイル分割における失敗パターンです。 | 
| openひとつclose複数 | open(入口)が一つなのに、そのclose(出口)が複数になっていること。close漏れが発生しやすくなります。 | 
| Task | タスク分割やスレッド設計に関する失敗パターンです。 | 
| 「~メイン」や「~コモン」という名称で雑多な処理を呼び込む | ファイル名に「メイン」や「コモン」があることで、なんでも含めてしまう。 | 
| いびつな形状 | |
| そもそも設計していない | 構造化されていない一筆書きコードやクローンコード。 | 
| とりあえずNULL確認 | |
| ひとつの大きなファイルが全体を制御している | 動作シナリオがすべて一つのモジュールに入っている。中央集権。 | 
| アクティビティ図での仕様 | ひとつの処理の流れのみの仕様記述であり、複数を重ね合わせないと、横断的な仕様が見えてこない。 | 
| アドホックなインスタンス生成 | 手続きの途中でクラスをインスタンス化すること。ライフタイムの逆転が引き起こされることがある。 | 
| アドホックなデータ収集 | 様々な場所から直接データを収集している。 | 
| アドホックなフラグ追加 | 手続きの流れの中で、特定の条件の時にフラグを立てて、別の手続きから参照する。 | 
| インスタンスがいない | ライフタイムのねじれが発生している。処理の途中でインスタンスを生成していると発生しやすい。 | 
| クラス分割の失敗 | 名称と属性を見ても責務が分からない。 | 
| クローン | コード断片を切り貼りすること。 | 
| グローバル変数が全体を支配している | |
| コード断片の切り貼り | |
| サイクロマチック複雑度10超 | |
| システム全体の状態遷移 | |
| スパゲティ | |
| タイミングチャートでの仕様 | |
| タスク過多 | 開発チーム単位でタスク分割されていて、並行動作で必要なタスク数を上回っている。 | 
| データ競合 | |
| パーティション違反(直交性の欠如) | 機能構造の内部に横断的関心が混在している。異なるドメインの用語が一つのモジュールに混在している。 | 
| ファイルや関数の依存線が絡みあっている | ファイル間の呼出関係の規則がなく、スター形状に絡み合っている。 | 
| フラグの成り立ちを誰も知らない「秘伝のたれ」 | 代々伝わってきた、なぜが動くプログラム。 | 
| フラグ判断の積み重ね | フラグ変数が多く、複数のフラグの組合せの条件判断が、複数個所に存在している。 | 
| フローチャートでの仕様 | 処理の流れをそのままプログラムすると、構造が「ない」プログラムになってしまう。 | 
| フローチャートをそのままコード化 | 処理の流れをそのままプログラムすると、構造が「ない」プログラムになってしまう。 | 
| プリミティブコマンドと複合コマンドの混在 | インタフェース設計で粒度が混在していること。 | 
| マネージャが多く、担当範囲が曖昧 | 「~マネージャ」というモジュールが横並びになると、責務分担が曖昧になってしまう。 | 
| メソッド名が説明的 | クラスのメソッドが3単語以上の連結になっている。 | 
| メッセージだけで処理が決まらない | クラスの責務が曖昧で「動詞のみ」のメソッドにはならず、メソッド名で処理内容を補足説明している。 | 
| ユースケースシナリオでの仕様 | ひとつの処理の流れのみの仕様記述であり、複数を重ね合わせないと、本当の仕様が見えてこない。 | 
| レイヤーの飛び越え | 3層アーキテクチャで、ミドル層を飛び越えた依存性。 | 
| レイヤーを超えて、全て対処する | |
| レイヤー違反 | アプリ層⇔ミドル層⇔ドライバ層という3層構造において、下から上への逆方向依存や階層を飛び越えた依存。 | 
| 一枚岩 | 循環依存が多く、分割コンパイルできないソースコード。 | 
| 一筆書き | 手続きをそのまま並べたソースコード。 | 
| 万能構造体 | |
| 上下の役割分担が曖昧 | |
| 下から上への逆方向依存 | レイヤー化において「下位が上位のサービスを利用する」という逆方向の依存性。 | 
| 中央集権 | |
| 仕様通りに実装してしまう | 要求仕様のまま、動く関数を作ってしまう。その結果、設計構造がなく、重要なドメイン変数が肥大化してしまうこと。 | 
| 何が入っているかはわからない容れもの | 意味の異なる変数を、ひとつにまとめている。バンドリング結合。 | 
| 何でも屋アンチパターン | 「~メイン」などの名称で、雑多なことを多く引き受けている。自分自身の責務は曖昧。 | 
| 使っていない変数の残骸 | |
| 例外処理の多重化 | |
| 例外処理の点在 | |
| 入口ひとつ出口複数 | |
| 全体構造の欠如 | 全体俯瞰の構造図が、縦横無尽の依存線になっている。 | 
| 冗長なタスク | |
| 処理の起点は小さいが、処理の終了が広がる | |
| 処理仕様とおり実装 | |
| 凸凹インタフェース | |
| 分割コンパイルできない | |
| 分割統治の失敗 | |
| 制御スレッドの途中で特定のイベントを待っている | |
| 制御仕様とおり実装 | ハードウェアのタイミングチャートを、そのままプログラミング。 | 
| 動く関数を下から積み上げただけ | |
| 同一責務の点在 | 同じ用語を使っているクラスが点在している。 | 
| 基本処理とエラー処理が混在 | |
| 多重継承の乱用 | |
| 失敗パターン地図 | |
| 子クラスから親クラスへの指示 | |
| 安定した構造がなく、毎回構造が変わる | |
| 対称性の欠如 | openとclose, newとdeleteという対になる操作が、構造的に対象の位置にない。 | 
| 巨大な状態遷移表 | |
| 広範囲な循環依存 | |
| 意味のないコメント残骸 | /* とりあえず */ や /* 20210305 */ など、コード内容が伝わらないコメント。 | 
| 撮影アプリ―撮影ミドルー撮影ドライバ | |
| 曖昧な責務 | クラス名と変数の相関が薄い。変数が雑多であり、寄せ集めている。 | 
| 末広がり | |
| 横並びアンチパターン | |
| 横断的関心の混在 | |
| 混ぜこぜ状態 | 状態の取りうる値が意味的まとまりがない。 | 
| 状態の取りうる値が10を超えている | |
| 状態仕様とおり実装 | |
| 状態内部の条件判断で、次の状態を決めている | |
| 状態迷路 | |
| 画面べったりアンチパターン | |
| 画面操作の関数で処理を行っている | |
| 異ドメインの混在 | 問題ドメインとUIドメインや通信ドメインが混在すること。基本構造が見えなくなる。 | 
| 異常系の内包 | 正常系処理と異常系処理が混在してること。設計の基本構造が見えなくなる。 | 
| 相互依存が多い星形の依存性 | |
| 相互依存アンチパターン | |
| 神様データ | |
| 統一感のない提供インタフェース | |
| 継承の誤利用 | |
| 縦繋がりアンチパターン | |
| 老舗温泉旅館 | |
| 脆い骨格アンチパターン | |
| 裏取引 | アドホックなフラグを作って、別な場所でそのフラグを判断することです。 | 
| 複数のリソースを、複数の制御スレッドで、無秩序に使っている | |
| 親クラスより子クラスの責務が多い | |
| 走り切らない制御スレッド | |
| 起床部の再帰呼び出し | |
| 途中で待つ | 制御スレッドの途中でイベント待ちや遅延をしてしまう。 | 
| 野面積みアンチパターン | |
| 関数の途中でreturn |