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