要件定義 レッスン2
機能要件と非機能要件
システムが「何をするか」を示す機能要件と、性能・可用性などの非機能要件の違いと洗い出し方を学ぶ
機能要件とは
機能要件は、システムが提供すべき 「振る舞い」や「機能」を表します。「利用者は何ができるべきか」という問いに答えるものです。
機能要件の例
- • ユーザーはメールアドレスとパスワードでログインできる
- • ユーザーは商品をカートに追加できる
- • 管理者は注文一覧をCSVでエクスポートできる
- • システムは注文完了時に確認メールを送信する
非機能要件とは
非機能要件は、機能そのものではなく 「その機能がどのような品質で提供されるべきか」を表します。 見落とされがちですが、ユーザー体験やシステムの信頼性に直結する重要な要件です。
性能(パフォーマンス)
応答時間、スループット、同時接続数など
可用性
稼働率、障害時の復旧時間目標など
セキュリティ
認証・認可、暗号化、脆弱性対策など
保守性・拡張性
将来の機能追加のしやすさ、テストのしやすさなど
監査性
操作ログの保存、変更履歴の追跡可能性など
アクセシビリティ・国際化
支援技術への対応、多言語・多通貨対応など
非機能要件の書き方
非機能要件は抽象的な言葉になりがちですが、測定・検証できる数値で書くことで、 実装後に「達成できたかどうか」を客観的に判断できるようになります。
避けたい書き方
- ❌ 「できるだけ速く応答する」
- ❌ 「高い可用性を確保する」
- ❌ 「多くのユーザーに耐えられる設計にする」
望ましい書き方
- ✅ 「95パーセンタイルの応答時間を200ms以内にする」
- ✅ 「月間稼働率99.9%以上を維持する」
- ✅ 「同時接続1,000ユーザーまで性能劣化なく動作する」
ポイント
数値目標は、事業要求(例: 想定ユーザー数、ピーク時のアクセス集中)から逆算して設定します。 根拠のない数値目標は、過剰な設計や無駄なコストにつながることもあるため注意が必要です。
1つの要望に潜む2つの側面
「多言語対応してほしい」のような1つの要望の中にも、機能要件と非機能要件の両方の側面が 隠れていることがあります。要望を分解して整理する習慣をつけましょう。
要望: 「サイトを多言語対応してほしい」
機能要件としての側面:
- ユーザーは言語切り替えUIから表示言語を選択できる
- 商品名・説明文は選択した言語で表示される
非機能要件としての側面:
- 言語切り替えによる応答速度の劣化は許容範囲内に収める
- 翻訳データの追加が既存の言語表示に影響を与えない(保守性)
- 右から左に書く言語(アラビア語等)のレイアウト崩れがない(アクセシビリティ)ポイント
- • 機能要件は「何をするか」、非機能要件は「どう動作すべきか」を表す
- • 非機能要件は性能・可用性・セキュリティ・保守性・監査性・アクセシビリティなど多岐にわたる
- • 非機能要件は測定可能な数値で書くことで検証可能になる
- • 数値目標には事業要求に基づいた根拠が必要
- • 1つの要望に機能・非機能の両方の側面が含まれることがあるため分解して整理する
確認クイズ
1 / 3次のうち機能要件に分類されるものはどれか?