「例外」が要件定義で最もつまづくポイント

「例外」と聞くとレアケースに思えますが、現場では例外が日常的に発生しています。この例外を要件定義の段階でどれだけ洗い出せるかが、システムの完成度を大きく左右します。

「例外」とは何か

システム開発における「例外」とは、「通常の処理の流れから外れるケース」のことです。

たとえば、受注の流れを設計するとき、基本的な流れ(正常系)は「顧客が注文 → 担当者が確認 → 在庫を引当 → 出荷」です。しかし実際には、こんなことが起きます。

  • 在庫が足りない場合はどうするか
  • 顧客がキャンセルを申し出てきたらどうするか
  • 一部だけ出荷して残りは後日という場合は?
  • 同じ顧客から重複して注文が入ったら?
  • 担当者が不在で承認が止まった場合は?

これらがすべて「例外」です。通常フローに含まれていないが、現場では定期的に発生する事態です。

なぜ例外が要件定義で漏れるのか

例外が要件定義から漏れる理由はいくつかあります。

「当たり前すぎて言わない」:現場の担当者にとって日常的な例外処理は、「わざわざ言うまでもない」と感じていることがあります。「在庫が足りなかったら電話で確認するのは当然でしょ」という感覚で話してくれないのです。

「ほとんどないから」という油断:「そういうケースは月に1〜2回しかない」という理由で後回しにされます。しかしシステムとして処理できなければ、その1〜2回のために業務が止まります。

通常フローの整理で精一杯:要件定義のヒアリングでは、まず「普通はどうやっているか」から始まります。正常系の整理だけで時間を使い切ってしまい、例外まで話が及ばないことがあります。

ベンダーも聞かない:ベンダーも例外を積極的に掘り起こさないケースがあります。例外を多く発見するほど実装範囲が広がり、コストも増えるため、無意識に後回しにされることがあります。

例外の種類

例外には大きく3つの種類があります。

1. 操作の例外

ユーザーが「正常でない操作」をした場合の対応です。

  • 入力必須の項目を空のまま送信しようとした
  • すでに削除された商品コードを入力した
  • 権限のない操作をしようとした
  • 同じ操作を二重に行った(ボタンを二度押した)

これらは「あってはならない操作」ではなく、「確実に起きる操作」です。対応が設計されていないと、システムが固まる・エラーが表示される・データが壊れるといった問題が起きます。

2. データの例外

想定外のデータが発生するケースです。

  • 通常は数値が入る項目に0や負の値が入った
  • 同じ顧客に複数の担当者が設定された
  • 削除されるはずのデータが参照され続けている
  • マスタデータが存在しない状態で処理が走った

「そんなデータは入らない」と思っていても、長期運用していると想定外のデータが生まれてきます。要件定義の段階でデータの境界値や禁止パターンを整理しておくと、実装時の考慮漏れを防げます。

3. 例外的なユーザー

通常とは異なる使い方をするユーザーの存在です。

  • 複数の部署を兼任している社員
  • 一時的な代理権限が必要な場面(担当者の長期休暇など)
  • 外部スタッフや派遣社員など、正社員とは権限が異なるユーザー
  • 複数の拠点を横断して管理する立場の管理者

こうした「例外的なユーザー」への対応を考えていないと、「自分の権限ではできないが、誰かに代わりにやってもらうしかない」という非効率な運用が生まれます。

例外を洗い出すための問いかけ

要件定義のヒアリングで例外を引き出すには、意識的な問いかけが必要です。

「〜できない場合は?」:「在庫が足りない場合はどうしますか」「承認者が不在の場合はどうしますか」

「〜が間違っていた場合は?」:「入力後にミスに気づいた場合はどうしますか」「送信してしまったものをキャンセルできますか」

「それ以外のパターンは?」:「通常はそうですが、例外的にこうなる場合はありますか」「この手順が使えない場面はありますか」

「過去にどんなトラブルがあったか」:現場のトラブル履歴は例外の宝庫です。「以前、これで困ったことがあって……」という話から重要な例外が出てきます。

例外をどこまで作り込むか

すべての例外に完璧に対応しようとすると、開発費と期間が無限に膨らみます。例外への対応にも優先順位が必要です。

判断の基準として、以下を参考にしてください。

  • 発生頻度:月に何度も起きる例外は必ず対応する。年に1回のものは後回し可
  • 業務への影響:例外が起きたときにシステムが止まる・データが壊れるリスクがあるなら対応必須
  • 代替手段があるか:「システムで処理できない場合は電話で対応」という運用が成立するなら、対応を後回しにできる

完璧を目指すより「起きたとき業務が止まらない」ことを最低ラインとして、優先度を整理することが現実的です。

まとめ

例外は「ごく稀なケース」ではなく、現場では定期的に発生するものです。操作の例外・データの例外・例外的なユーザーの3種類を意識してヒアリングに臨み、「〜できない場合は?」「過去にどんなトラブルがあったか」という問いかけで洗い出します。すべてを作り込む必要はありませんが、例外への対応を考えないまま開発を進めると、リリース後の運用で必ず問題が出てきます。