不具合管理と再発防止——同じ問題を二度起こさないプロセス設計

品質管理
この記事は約7分で読めます。

「同じバグが別の画面でも出ていた」「先月と同じ原因でリリースが遅れた」——こうしたデジャヴュを感じたことのあるPMは多いはずだ。不具合はゼロにできない。しかし、同じ不具合を二度繰り返すことは、プロセスの失敗だ。本記事では、不具合を「その場で潰す」対症療法から脱し、再発を構造的に防ぐプロセス設計の実践手法を具体的に解説する。

なぜ不具合は繰り返されるのか——「解決」と「解消」の違い

「直した」と「潰した」は別物だ

現場でよく見る光景がある。テスト工程でバグが検出される。担当者が修正する。テストをパスする。チケットをクローズする。——これで「解決」と思っていないだろうか。

実際、あるWebシステムの開発プロジェクトで、同一カテゴリの入力値検証バグが3つの画面で同時期に報告されたケースがあった。それぞれが個別チケットで管理され、それぞれが「修正済み」になった。しかし翌スプリントで、別の4つの画面に同様の不具合が発見された。原因は共通コンポーネントの設計ミスだったが、最初の3件を「個別事象」として処理したため、横断的な原因追及が行われなかったのだ。

これが「直した(Fix)」と「潰した(Resolve)」の違いだ。Fixは症状への対処、Resolveは原因の除去を意味する。不具合管理が「チケットのクローズ」をゴールにしている限り、再発は必然的に起きる。

不具合の「表層」と「根層」を分けて記録する

再発防止の第一歩は、不具合を記録する粒度を変えることだ。多くのプロジェクトでは「何が起きたか(症状)」しか記録しない。再発防止には「なぜ起きたか(原因層)」と「なぜ検出できなかったか(検出失敗層)」の2軸が必要になる。

PMBOKでも品質管理プロセスにおいて「欠陥修復」と「品質管理測定値」を明確に区別しているが、現場では往々にして両者が混在する。具体的には、不具合チケットに以下の3フィールドを追加するだけで記録の質が変わる。

  • 直接原因:何がトリガーになったか(例:バリデーション関数の条件分岐漏れ)
  • 根本原因:なぜその直接原因が生まれたか(例:コーディング規約にバリデーション要件が明記されていなかった)
  • 検出失敗原因:なぜレビューやテストで見逃したか(例:境界値テストケースが設計されていなかった)

この3層記録を習慣化するだけで、後述する再発防止策の精度が劇的に向上する。

不具合を「分類・集約」することで見えてくるパターン

不具合はカテゴリで語れ

個々の不具合を個別に対処していると、プロジェクト全体のトレンドが見えない。重要なのは不具合を分類し、集約してパターンを読むことだ。

ある業務システム開発(6ヶ月・チーム15名)では、スプリント4終了時点で累計76件の不具合が発生していた。PMが集計したところ、以下の分布が明らかになった。

  • 入力値検証の漏れ:28件(37%)
  • 画面遷移・状態管理の不整合:19件(25%)
  • 外部API連携エラーハンドリング:14件(18%)
  • その他:15件(20%)

この分析から、上位2カテゴリで全体の62%を占めることが判明した。PMはスプリント5の開始前に「入力値検証チェックリスト」と「画面遷移仕様テンプレート」を整備し、コードレビューの必須確認項目に追加した。結果、スプリント5・6の不具合数は合計で31件に抑えられ、単純計算で約40%削減できた。

不具合のカテゴリ分類は最初から完璧でなくていい。「機能バグ」「UI/UXバグ」「パフォーマンス」「セキュリティ」「データ整合性」という5分類から始め、プロジェクトの特性に合わせて細分化していくのが現実的だ。

「検出フェーズ」の記録が予防設計のカギになる

不具合の分類において、どのフェーズで検出されたかを記録することも重要だ。単体テストで見つかったバグと、ユーザー受入テスト(UAT)で見つかったバグでは、その意味合いがまったく異なる。後工程で検出されるほど、手戻りコストは指数関数的に増大する。IBM研究所の古典的なデータでは、要件定義フェーズで見つけた欠陥を100とすると、システムテスト段階では1,500、運用後では6,400以上のコストがかかるとされている。

検出フェーズの記録を積み上げることで、「なぜこのバグは単体テストで捕まえられなかったのか」という問いが立てられる。この問いこそが、テスト設計の見直しやレビュープロセスの改善につながる入口になる。

関連して、「テスト計画は作った」で止まっていないか——形骸化の構造を解剖し、現場で”機能する”テスト計画に再設計する実践技法でも述べているように、テスト計画は作成時点ではなく「運用時点」でその価値が問われる。不具合の検出フェーズデータは、テスト計画を動的に改善する燃料になる。

再発防止策を「組織に埋め込む」設計

再発防止策の「実効性チェック」を設計に組み込む

再発防止の最大の落とし穴は、「対策を決めた」で終わることだ。多くのプロジェクトで、不具合発生後に「チェックリストを追加する」「レビュー強化」「意識を高める」といった対策が検討される。しかし、これらが実際に機能しているかを確認する仕組みがなければ、対策は宣言で終わる。

実効性の高い再発防止策には、次の3要件が必要だ。

  1. 具体性:「レビュー強化」ではなく「入力値検証チェックリスト全12項目をレビュー時に確認し、確認済みのサインをPRに添付する」
  2. オーナー:誰が維持・運用するかを明記する(「チーム全員」は誰でもない)
  3. 検証タイミング:次のスプリントレビューで「同カテゴリの不具合が出なかったか」を確認する

これを実現するために有効なのが「再発防止策台帳」だ。不具合チケットに紐づく形で、対策内容・オーナー・検証日・検証結果を記録する。この台帳をスプリントレビューやフェーズゲートレビューの定常確認項目に組み込むことで、対策が形骸化せず生き続ける。

ナレッジを「次のプロジェクト」に渡す仕組み

再発防止をプロジェクト内で完結させることの限界も意識したい。同じ組織の別プロジェクトで、まったく同じ種類の不具合が再発するケースは珍しくない。これは「組織の学習が設計されていない」ことの証左だ。

具体的には、プロジェクト完了時のレトロスペクティブで、再発防止策として効果が実証されたものを「品質ナレッジベース」として整理し、組織の標準プロセスやテンプレートに反映する工程を設ける。形式は問わない。Confluenceのページでも、社内WikiでもExcelでも、「誰でもアクセスでき、次のPMが参照できる」状態を作ることが重要だ。

また、レビューを機能させる設計——形骸化しないレビュープロセスの作り方でも指摘しているように、ナレッジが「見える場所にある」だけでは使われない。レビューチェックリストや設計テンプレートに直接組み込む形で「使わざるを得ない状態」を作ることで、初めてナレッジは組織に血肉化する。

さらに、受入基準と不具合管理は切り離せない関係にある。受入基準の合意形成——「完了の定義」をステークホルダーと握る実践法で述べているように、「完了の定義」が曖昧なまま不具合管理を行うと、何をもって「再発なし」と判断するかの基準も揺れる。再発防止策の検証は、受入基準と同じ精度で設計されなければならない。

まとめ——再発防止を「習慣」ではなく「構造」にする

  • 不具合記録に「直接原因・根本原因・検出失敗原因」の3層を必ず含める:症状の記録だけでは再発防止策の精度が上がらない。
  • 不具合をカテゴリで集約し、パターンを読む:個別対処から脱し、トレンドを可視化することで的を絞った改善が可能になる。
  • 検出フェーズを記録し、テスト設計の改善に活かす:後工程での発見はコストが高い。どこで見逃したかを追うことが予防設計の起点になる。
  • 再発防止策には具体性・オーナー・検証タイミングの3要件を持たせる:「対策を決めた」で終わらせず、実効性を確認する仕組みを設計に組み込む。
  • プロジェクトを超えてナレッジを組織に埋め込む:再発防止の最終形は、次のプロジェクトが同じ失敗をしない状態を作ることだ。

よくある質問

Q1. 不具合管理ツールは何を使えばいいですか?

ツール自体よりも「記録する項目の設計」が重要です。JiraでもRedmineでもGitHub Issuesでも、直接原因・根本原因・検出失敗原因・再発防止策の4フィールドを必ず含む設計にすることを優先してください。

Q2. 小規模プロジェクトでも再発防止台帳は必要ですか?

規模に関わらず有効です。小規模であれば簡易版として、スプリントレビューで「今回の不具合トップ3と対策」をスライド1枚でまとめるだけでも、再発防止の意識と記録が生まれます。

Q3. 再発防止策が形骸化しないための工夫はありますか?

最も効果的なのは「チェックリストへの組み込み」です。対策を別ドキュメントに書くのではなく、コードレビューチェックリストや設計書テンプレートに直接反映することで、意識しなくても実行される状態を作ります。

Q4. 根本原因分析はどの深さまでやればいいですか?

「なぜ?」を5回繰り返す5 Why分析が基本ですが、重要度・影響度の高い不具合に絞って実施するのが現実的です。すべての不具合に適用しようとすると工数が逼迫し、形骸化につながります。

Q5. 不具合の再発防止策をチームに定着させるにはどうすればいいですか?

「なぜその対策が必要か」の背景をチームで共有することが鍵です。PMが一方的に対策を導入するのではなく、不具合の根本原因を一緒に分析するセッションを設けることで、チームが対策を自分事として捉えられるようになります。

開発品質のトラブルを根本から解決したい方へ

開発標準作成サービスで、プロセスを体系化。IT業種未経験の企業でも安心の1年間伴走支援で、品質トラブルを未然に防ぐ開発体制を構築します。

サービス詳細・無料相談はこちら →