品質コストの考え方
ストーリー
「品質って大事なのはわかりますけど、テストとかチェックとか、時間かかりますよね...」
「そう感じるよね。でも、品質にかけるコストと、品質を怠ったときのコスト、どっちが大きいと思う?」
「うーん、品質を怠ったとき...ですか?」
「正解。これを『1:10:100の法則』って言うんだ」
1:10:100の法則
バグの発見タイミングによって、修正コストは劇的に変わります。
設計段階で発見 → コスト: 1
テスト段階で発見 → コスト: 10
リリース後に発見 → コスト: 100
なぜこんなに差が出るのか?
| 発見タイミング | 修正にかかるもの |
|---|---|
| 設計段階 | コードを書く前なので、仕様を直すだけ |
| テスト段階 | コード修正 + 再テスト + レビューやり直し |
| リリース後 | 緊急対応 + 原因調査 + 修正 + テスト + 再リリース + お客様対応 |
実例で考えてみよう
例: ユーザー登録画面で、メールアドレスのバリデーションが抜けている
| 段階 | 対応内容 | 所要時間の目安 |
|---|---|---|
| 設計段階 | 「バリデーション追加しよう」と仕様に書く | 5分 |
| テスト段階 | コード修正 → テストやり直し → レビュー | 2時間 |
| リリース後 | 不正データの調査 → 修正 → テスト → 緊急リリース → 影響範囲の確認 → 顧客への連絡 | 2日以上 |
品質コストの3つの分類
品質に関するコストは 3種類 あります。
1. 予防コスト(Prevention Cost)
問題が起きないようにする ための投資です。
| 活動 | 内容 |
|---|---|
| チェックリスト作成 | ミスを防ぐための確認リスト |
| コーディング規約 | チーム全員が同じルールでコードを書く |
| 設計レビュー | 作る前に設計を確認する |
| 教育・トレーニング | チームのスキルを上げる |
2. 発見コスト(Appraisal Cost)
問題を見つける ための活動コストです。
| 活動 | 内容 |
|---|---|
| テスト実行 | 動作確認をする |
| コードレビュー | 他の人にコードを見てもらう |
| 静的解析 | ツールでコードの問題を検出する |
| セキュリティ診断 | 脆弱性がないか確認する |
3. 修正コスト(Failure Cost)
問題が起きてしまった後 の対応コストです。
| 活動 | 内容 |
|---|---|
| バグ修正 | 問題のあるコードを修正する |
| 再テスト | 修正後にもう一度テストする |
| 障害対応 | 本番環境の問題に緊急対応する |
| 信頼回復 | 顧客への説明・謝罪 |
コスト配分の理想と現実
理想的な配分
予防コスト: 50% ████████████████████
発見コスト: 40% ████████████████
修正コスト: 10% ████
よくある現実
予防コスト: 10% ████
発見コスト: 20% ████████
修正コスト: 70% ████████████████████████████
「予防に時間をかけるのがもったいない」と思うかもしれません。 しかし、予防に1時間かけることで、修正の10時間を節約できるのです。
新人ができる「予防」
大規模な予防策は経験が必要ですが、新人でもできることがあります。
| 予防策 | 具体的な行動 |
|---|---|
| セルフチェック | コミット前に自分でコードを見直す |
| チェックリスト活用 | 確認項目をリスト化して毎回チェック |
| テスト実行 | 変更後に必ずテストを回す |
| 仕様の確認 | 不明点は作業前に質問する |
| メモを取る | 過去のミスを記録して同じミスを繰り返さない |
まとめ
| ポイント | 内容 |
|---|---|
| 1:10:100の法則 | バグは後から見つかるほど修正コストが高い |
| 予防コスト | 問題を防ぐための投資(最もコスパが良い) |
| 発見コスト | 問題を見つけるための活動費用 |
| 修正コスト | 問題発生後の対応費用(最も高くつく) |
チェックリスト
- 1:10:100の法則を説明できる