見出し画像

【プログラミング学習】 顧客とのトラブルを防ぐために非機能要件を定義する

こんにちは!

「非機能要件」という言葉を聞いたことがありますか?
「要件定義」は聞いたことがあるかもしれません。

「非機能要件」を定めることは、顧客との認識ズレを防ぐために非常に重要です。

要件定義とは

「要件定義」とは、システムを開発するにあたって、何を作るのかを定義したものです。

「要件定義」で顧客と作るシステムについて合意をして、合意ができたら「要件定義」を満たすシステムを開発していきます。

要件定義は、さらに「機能要件」と「非機能要件」に分けることができます。

「機能要件」はイメージがしやすいと思います。
システムがどのような「機能」を持つのかを定義したものです。

noteのサービスで言えば、

・アカウント登録
・ログイン/ログアウト
・記事閲覧
・記事投稿
・マイページ
・...

というように、システムに載せるべき機能を定義していきます。

非機能要件とは

では、「非機能要件」とは何でしょうか。
言葉をそのまま解釈すると「機能では無い要件」となりますが、機能では無い要件にどのようなものがあるのかはイメージし辛いですね。

以下のような要件を整理します。

・システム性能
・データ量
・セキュリティ
・運用スケジュール
・など

例えば、noteのシステム開発をするにあたり、「データ量」について顧客と合意ができていなかったとします。

データ量を考慮せずに、開発・サーバー構築をしてしまい、記事が100万件を超えた時に、これ以上記事が投稿できなくなってしまった。

何かあり得そうな障害ですね。

開発者:「記事の本数が100万を超えるとは思っていなかった」
顧客:「記事の本数は数千万まではいくと思っていた」

このようなギャップが発覚して、揉めてしまうかもしれません。

この場合、非機能要件で「記事の量は1億件まで保存できること」ということが定義されていれば、顧客とのトラブルにはなりません。

この定義がされたら、1億件に耐えられるようにシステムを開発・サーバーを構築します。

そして、1億件を超えて障害が発生したとしても、顧客とトラブルになることはありません。

「1億件を超えた場合については保証していませんでした」と言えるためです。
(1億件を超えそうなあたりで顧客に相談をして、事前に障害の発生を防ぐべきではありますが。)

非機能要件の重要性が伝わったでしょうか?

他にも例えば、セキュリティも重要です。
アカウント登録の機能が実現されていても、その情報がダダ漏れでは困るわけです。

非機能要件を漏れなく検討する方法

機能要件であれば、不足があれば「この機能も欲しい」と顧客から言ってもらえますが、非機能要件については漏れがあっても顧客から指摘してもらえません。

非機能要件の考えは、システム開発の専門家ではない顧客には無いからです。

では、どのようにして漏れなく非機能要件を洗い出せば良いでしょうか?

IPAが公表しているガイドラインを参考にすると良いです。
こちらで公表されています。
https://www.ipa.go.jp/sec/softwareengineering/std/ent03-b.html

定義するべき内容が一覧化されているので、それに従って定義を行えば、漏れなく定義をすることができます。

カテゴリは大きく、以下の6つに分類されています。

・信頼・拡張性
・セキュリティ
・運用・保守性
・移行性
・可用性
・システム環境・エコロジー

定義の仕方から丁寧に解説がされているので、非機能要件を作成する機会があれば、ぜひ一度読んでみることをおすすめします。

要件定義の時には、非機能要件まで定義して、顧客との認識差異を防ぐようにしましょう!


# 今日も、最後までお読み頂きありがとうございます!
感想や質問などございましたら、コメント頂けますと嬉しいです。
全て返信させて頂きます!

では、また明日!


サポートは、プログラミング初学者の皆さんのためになることに使おうと思います。どのように使ったかも記事にします!