先日に引き続き、手書きのノートからの転記です。
機能要件
Webサービスやアプリケーションといったサービスがユーザーに提供しなければならない**「機能そのものの要件」**のこと。
例えばQiitaだったら、ログイン機能や記事投稿機能、ストック機能など、ユーザーが利用する機能がたくさんある。
そういうものに関わる要件のことを言う。
非機能要件
サービスを取り巻くシステムが実現しなくてはならない**「機能以外の要件」**のこと。
具体的には、以下のようなものが含まれる。
- 「可用性」
サーバー側で何らかの障害が発生した場合でも、サービスを提供し続けることができる。 - 「性能」
多数のユーザーが同時にアクセスするなどの負荷がかかっても、サービスの機能を維持できる。 - 「拡張性」
新機能の追加やテストを行いやすい。 - 「保守性」
機能の不具合を改修しやすい。 - 「セキュリティ」
アカウントを乗っ取られたり、悪意あるユーザーからの攻撃といったリスクに対処できる。
今までのプログラミング学習に当てはめると、RubyとRailsを使ってアプリの機能を開発したりするのが機能要件で、AWSを使ってインフラを整えたり、Dockerを使って開発環境を構築したりするのが非機能要件ということかしら。
世の中の仕事の多くは、業務内容の高度化や複雑化にしたがって分業化が進み、機能要件と非機能要件は分断されて双方がブラックボックス化していくものだと思う。
しかしながら、Web系は少人数開発の場合も多いこと、新しい言語や技術の興亡が激しく一つの技術に習熟することの意味が薄いこともあって、両方に関して幅広く知識や経験を備えていくことが重要となるようだ。