📝

defect prevention

📁 概念 👁 -- 閲覧

欠陥予防(真因分析と水平展開)

定義

欠陥予防とは、不具合が発生した後に修正するだけでなく、同種の欠陥が将来にわたって発生しないようにする活動。2つの実践で構成される:

真因分析(Root Cause Analysis): 不具合の表面的な原因(「テストが不足していた」)ではなく、それを引き起こした根本原因(「テスト設計の知識が組織に不足していた」)まで掘り下げる。代表的な手法は5 Whys(「なぜなぜ分析」)。

水平展開(Horizontal Deployment): 一つの不具合の真因を特定したら、同じ原因が他の箇所(別のコンポーネント・別のチーム・別のプロジェクト)でも潜在していないか調査し、先手を打って修正する。

なぜ重要か

表層的な修正(バグを直す)だけでは同種の不具合が繰り返し発生する。水平展開なしでは、一箇所で発見された欠陥パターンが組織全体に潜在したまま出荷される。

類似不具合の炙り出しはテスト計画に組み込むべき活動で、不具合修正のたびに「この不具合と同じロジックが他にないか」を系統的に確認する。

5 Whys の考え方

現象:本番環境でNullPointerExceptionが発生した
  ↓ なぜ?
原因1:入力値のnullチェックが欠けていた
  ↓ なぜ?
原因2:nullが入力されるケースをテストしていなかった
  ↓ なぜ?
原因3:境界値テストの設計が不十分だった
  ↓ なぜ?
原因4:テスト設計の教育が行われていない
  ↓ なぜ?
真因:組織にテスト設計の標準とトレーニングが存在しない

真因に対して打ち手を打つことで、同種の不具合が組織全体で再発しなくなる。

水平展開の進め方

  1. 不具合の真因を特定する
  2. 真因が影響しうる範囲を特定する(同一モジュール・同一開発者の担当領域・同一パターンを持つコード)
  3. 各箇所を実際に調査し、潜在欠陥がないかチェックする
  4. 発見された潜在欠陥を修正する
  5. 水平展開の結果(調査範囲・発見件数)を記録し組織知識にする

適用場面

  • 不具合修正時:修正だけで終わらせず、必ず類似箇所の確認を同一チケットに含める
  • テスト計画:過去の不具合パターンを基に、類似欠陥を狙ったテストケースを計画に組み込む(→テスト計画
  • ポストモーテム(振り返り)時:本番障害の真因を組織全体で共有し、水平展開の責任者を明確にする

出典

ソフトウェア品質保証の極意 — 第2章 2.3「ソフトウェアプロセス評価と改善」(極意05)、第4章 4.6「テストのマネジメント」(極意38)