前回の記事では、要件定義を「お客様の要望をそのまま聞く工程」ではなく、RFPや提案内容を前提に、お客様とベンダーの認識差を潰していく工程として説明しました。
今回は、その要件定義で必ず出てくる、機能要件と非機能要件の違いを掘り下げます。
機能要件とは何か
機能要件とは、システムが利用者に対して提供する機能のことです。「そのシステムで何ができるのか」を表す要件です。
たとえば、社内の購入申請システムであれば、次のようなものが機能要件になります。
- 購入申請を登録できる
- 申請内容を修正できる
- 上司が承認できる
- 差戻しできる
- 承認履歴を確認できる
- 申請一覧を検索できる
- 申請内容をPDFで出力できる
- 承認者にメール通知できる
これらは利用者から見えやすい要件です。画面にも出ます。ボタンにもなります。帳票にもなります。そのため、業務担当者とも会話しやすいです。
「申請画面には、どの項目が必要ですか」「承認ルートは、誰がどの順番で承認しますか」「差戻し後は、申請者が修正して再申請できますか」
初心者SEが最初にイメージしやすいのは、この機能要件です。システムの「見える部分」だからです。ただし、システム開発の難しさは、ここで終わらないところにあります。
非機能要件とは何か、そして「機能が動く」と「本番で使える」は違う
非機能要件とは、システムを本番で安定して使うために必要な品質や条件のことです。「そのシステムが、どのような品質で動くべきか」を表す要件です。
たとえば、申請画面があったとします。申請ボタンを押せる。データも登録される。承認者にも通知される。機能としては動いています。
しかし、次のような状態だったらどうでしょうか。
- 月末に利用者が集中すると、画面表示に10秒以上かかる
- DBサーバが停止すると、業務が完全に止まる
- 障害が起きても、監視アラートが飛ばない
- バックアップは取得しているが、リストア手順を確認したことがない
- ログが3日分しか残っておらず、障害調査ができない
- 運用担当者が手順書を見ても、復旧作業ができない
機能は動いていても、これでは本番で安心して使えるシステムとは言えません。
機能要件は「何ができるか」を決めるものです。非機能要件は「どの品質で使えるか」を決めるものです。どちらも重要ですが、本番で大きな問題になるのは、むしろ非機能要件の詰めが甘い部分だったりします。
非機能要件は「見えないから後回し」になりやすい
非機能要件が難しい理由の一つは、利用者から見えにくいことです。画面項目やボタンは誰でも見れば分かります。一方で、サーバが何台構成なのか、バックアップから戻せるのか、ログが何年分保管されているのかは、普段の画面操作からは見えません。
お客様は、こういう言い方をすることが多いです。
「止まらないようにしてほしい」「早くしてほしい」「安全にしてほしい」
しかし、このままでは設計できません。「止まらない」とは、サーバ1台障害でも止まらないという意味なのか。データセンター障害まで想定しているのか。「早く」とは、通常時3秒以内なのか、ピーク時でも同じ水準を求めるのか。「安全」とは、通信暗号化なのか、監査ログまで含むのか。
こうした曖昧な言葉を、設計できる粒度に落とすことが、非機能要件の難しさです。
では、非機能要件はすべて高い水準で決めればよいのでしょうか。
実は、そうではありません。
ここから先では、現場で特に重要になる考え方として、
- 非機能要件は高ければ高いほど良いわけではない
- 可用性、性能/拡張性、運用/保守性、移行性、セキュリティの5分類
- 非機能要件を設計・テストできる形に落とす考え方
を整理していきます。


コメント