ソフトウェアの機能要件と非機能要件についてのメモ

システム/ソフトウェア開発の方法論について議論をする際、機能要件や非機能要件といった言葉をあいまいに使ってしまっていることに気づいた。調査がてら、メモとして残しておく。

機能要件、非機能要件

機能要件と非機能要件はどちらも「要件」だ。それらが指すものは、ソフトウェアの外側にある。

簡単な例で示そう。

  • システムに保持する商品データをユーザーに表示できること。
  • ユーザーは表示された商品リストから選択して、注文情報として送信できること。
  • 受注担当者は注文情報を閲覧でき、出荷日は、該当する注文情報から出荷指示書を印刷できること。

このように、「何ができるか」を表すのが機能要件だ。英語ではfunctional requirementというが、英語の方がズバリその通りで分かりやすい。機能要件を表わす「何ができるのか」の内容は、関数のように、どんな入力に対してどのような出力を行うのか、と言い換えられるのだ。

これに対して、

  • 受注が1日に1000件処理可能で、5年間の運用に耐えること。
  • ソフトウェアの更新のためのメンテナンスによるシステムの停止は、1週間につき1時間以内とする。

のように、パフォーマンスや可用性、さらにはメンテナンス性などについて求めるのが非機能要件となる。

機能要件と非機能要件の違いを大雑把に言うと、機能要件を満たすとは、求められる処理を程度によらず完遂できることを指し、非機能要件を満たすとは、求められる程度をクリアしていることを指す。

要件と要求

ところで、機能要件と似た言葉として「機能要求」がある。「要件」と「要求」とでは指す対象が異なることに注意。「要件」はソフトウェアが満たすべき仕様を述べたものであるのに対して、「要求」は、ユーザーがソフトウェアに求めている事柄を指す。したがって、要求はユーザーの側にある。

要件と要求には、このような区別があるにはあるのだが、現代ではこれらを区別しなくなっているかもしれない。『ソフトウェアエンジニアリング基礎知識体系ーSWEBOK V3.0ー』では、第1章「ソフトウェア要求」として要求について語られており、この中で要求の仕様化というところまで含めてある。要件という言葉はこの本には登場しない。 

ソフトウェアエンジニアリング基礎知識体系 ―SWEBOK V3.0―

ソフトウェアエンジニアリング基礎知識体系 ―SWEBOK V3.0―

 

この周辺には、要求開発といったアクティビティの提唱もあるが、今回のメモのスコープ外なので割愛する。

 

図にするとこんな感じだろうか。

f:id:innx_hidenori:20170219021830j:plain

 

気になる点

以下は現時点で調べきれておらず、自分の答えが出ていない。今後の宿題だ。

  • 機能要件と非機能要件との関係性は構造的にどのようになっているのか。