
極端にいうと要件定義は機能要件と非機能要件を決めることだと思うのですが違いがよくわかりません。



要件定義の経験がない人は違いがよく分からないと思いますので今回は深掘りして違いを解説しますね
機能要件と非機能要件の違い
機能要件とは?
機能要件とは、「システムが何をするべきか」を定義したものです。つまり、ユーザーから見て直接的に理解できる機能のことです。
例)
- ユーザーがログインできる
- 商品を検索できる
- カートに商品を追加できる
- 注文履歴を表示できる
非機能要件とは
非機能要件とは、「システムがどのように動くべきか」を定義したものです。システムの品質や性能に関する要件で、ユーザーからは直接見えにくい部分です。
例)
- システムの応答時間(検索結果が1秒以内に表示される)
- セキュリティ要件(パスワードは8文字以上必要)
- 同時アクセス数(1000人が同時に利用できる)
- 可用性(システムの稼働時間が99.9%以上)
例えてみると…
車にたとえてみると
機能要件は「車の基本的な機能」に相当します。
- アクセルを踏むと走り出す
- ブレーキで止まれる
- ハンドルで曲がれる
一方非機能要件は「車の性能や品質」に相当します。
- 0-100km/hまで8秒以内で加速
- 燃費が1リットルあたり15km以上
- 衝突安全性能で5つ星評価
- 10年間の耐久性を確保る
なぜ両方の要件が重要なのか?
機能要件だけを考えると、「動けばいい」というシステムになってしまいます。非機能要件も同時に考えることで、以下のような価値が生まれます
- ユーザーが快適に使えるシステムになる
- 例えば、ECサイトで商品検索機能があっても(機能要件)、検索結果の表示に時間がかかりすぎたり、システムが頻繁にダウンしたりすると、ユーザーは快適に利用できません。
そのため、応答時間や可用性といった非機能要件を適切に定義し、実装することが重要になります。
- 例えば、ECサイトで商品検索機能があっても(機能要件)、検索結果の表示に時間がかかりすぎたり、システムが頻繁にダウンしたりすると、ユーザーは快適に利用できません。
- 安定した運用が可能になる
- 例えば、システムの負荷に関する要件(同時アクセス数など)や、バックアップに関する要件を適切に定義することで、システムダウンのリスクを最小限に抑えることができます。
また、監視体制や障害対応手順を明確にすることで、問題が発生した際の迅速な対応が可能になります。
- 例えば、システムの負荷に関する要件(同時アクセス数など)や、バックアップに関する要件を適切に定義することで、システムダウンのリスクを最小限に抑えることができます。
- 将来の拡張性が確保できる
- 例えば、システムの規模拡大に備えてスケーラビリティを考慮したり、新しい機能追加が容易な設計にしたりすることで、ビジネスの成長に合わせてシステムも進化させることができます。また、データ量の増加やユーザー数の増加にも柔軟に対応できるようになります。
- セキュリティが確保される
- 例えば、適切な認証・認可の仕組みやデータの暗号化要件を定義することで、情報漏洩や不正アクセスのリスクを軽減できます。
また、定期的なセキュリティ監査やログ監視の要件を設定することで、セキュリティインシデントの早期発見と対応が可能になります。
- 例えば、適切な認証・認可の仕組みやデータの暗号化要件を定義することで、情報漏洩や不正アクセスのリスクを軽減できます。
要件定義でよくある失敗
機能要件だけに注目してしまう
非機能要件を後回しにすると、システムの完成後に重大な問題が発生する可能性があります。
これは開発プロジェクトの成功を大きく脅かすリスクとなります。
例えば、システムのレスポンスが極端に遅くなってユーザーの業務効率が低下したり、重要なセキュリティホールが見つかってデータ漏洩の危険性が生じたり、システムの安定性が損なわれて頻繁にダウンしたりするなどの深刻な問題が起こり得ます。
現実的には、機能要件だけ行ない非機能要件はまったく定義しないプロジェクトはごまんとあります。
結果、リリース後に速度が遅いとかセキュリティの穴が見つかったりとか諸々の問題が顕在化することも多くありました。
要件定義の経験があっても具体的に非機能要件をどう決めるべきか知らないというエンジニアは多いと感じています。



これまで見てきた経験でいうと8割のプロジェクトは非機能要件を決めていませんでした。
非機能要件を具体的に定義していない
「使いやすいシステム」「高いセキュリティ」といった抽象的な要件定義では、開発者が具体的な実装方針を立てることができません。
例えば、「使いやすい」の代わりに「画面遷移は3クリック以内」「エラーメッセージは平易な日本語で表示」といった具体的な指標を、「高いセキュリティ」の代わりに「パスワードは12文字以上で英数字記号を含む」「ログイン試行は5回まで」といった明確な基準を設定することが重要です。
このように、測定可能で具体的な数値や基準を設定することで、開発チームは要件を正確に理解し、適切に実装することができます。
機能要件と非機能要件は、どちらも成功するシステム開発には欠かせない要素です。機能要件が「何ができるか」を定義し、非機能要件が「どれだけうまくできるか」を定義します。両方をバランスよく検討することで、ユーザーに価値のあるシステムを作ることができます。