工学において、要件とは、作業成果が許容されるものとなるために満たされなければならない条件のことです。これは、材料、設計、製品、またはサービスが満たすべき条件を、明示的、客観的、明瞭に、そして多くの場合定量的に記述したものです。[ 1 ]
仕様またはスペックとは、通常、製品開発の設計段階で開発者によって使用され、検証プロセスでテスト担当者によって 使用される要件のセットです。
アジャイルソフトウェア開発のような反復的かつ漸進的な開発では、要件定義は設計・実装と並行して行われます。ウォーターフォールモデルでは、要件定義は設計や実装の開始前に完了します。
要件は、エンジニアリング設計、システム エンジニアリング、ソフトウェア エンジニアリング、エンタープライズ エンジニアリング、製品開発、プロセス最適化 など、多くのエンジニアリング分野で使用されます。
要件は、顧客、組織、ユーザー、またはその他の利害関係者にとって価値と有用性を持つために必要な、またはシステムが望まれる機能、属性、機能、特性、品質を説明できる、比較的広い概念です。
要件という用語は、少なくとも1960年代からソフトウェアエンジニアリングのコミュニティで使用されています。[ 2 ]
IIBAのビジネス分析知識体系ガイド®バージョン2(BABOK)によると、 [ 3 ]要件は次のとおりです。
この定義はIEEE 610.12-1990: IEEE標準ソフトウェア工学用語集に基づいています。[ 4 ]
要件は次の 2 つの分野に関連していると言えます。
製品要件とプロセス要件は密接に関連しています。製品要件はプロセス要件をサポートするために必要な自動化を規定すると言える一方、プロセス要件は製品要件をサポートするために必要な活動規定を規定すると言えるでしょう。例えば、最大開発コスト要件(プロセス要件)は、最大販売価格要件(製品要件)を達成するために課される場合があります。また、製品の保守性要件(製品要件)は、特定の開発スタイル(例:オブジェクト指向プログラミング)、スタイルガイド、またはレビュー/検査プロセス(プロセス要件)に従う要件を課すことによって対処されることがよくあります。
要件は通常、開発の進行段階の異なる段階で生成されるタイプに分類され、その分類法は使用される全体モデルによって異なります。例えば、以下の体系は国際ビジネス分析研究所(IBI)のビジネス分析知識体系[ 5 ]で考案されています( FURPSおよび要件のタイプも参照)。
優れた要件の特徴は、様々な作成者によって様々に述べられており、各作成者は一般的に、それぞれの議論全体、あるいは対象となる特定の技術分野に最も適した特徴を強調しています。しかしながら、以下の特徴は一般的に認められています。[ 8 ] [ 9 ]
| 特性 | 説明 |
|---|---|
| ユニタリー(凝集性) | この要件は、ただ 1 つのことだけを対象としています。 |
| 完了 | 要件は、情報が欠落することなく 1 か所に完全に記載されています。 |
| 一貫性のある | この要件は他の要件と矛盾せず、すべての信頼できる外部ドキュメントと完全に一致しています。 |
| 非共役(原子) | 要件はアトミックであり、接続詞を含みません。例えば、「郵便番号フィールドはアメリカとカナダの郵便番号を検証する必要がある」という要件は、(1)「郵便番号フィールドはアメリカの郵便番号を検証する必要がある」と(2)「郵便番号フィールドはカナダの郵便番号を検証する必要がある」という2つの別々の要件として記述する必要があります。 |
| 追跡可能 | 要件は、利害関係者によって述べられ、正式に文書化されたビジネス ニーズ全体または一部を満たします。 |
| 現在 | この要件は、時間の経過によって時代遅れになっていません。 |
| 明確な | 要件は、専門用語、頭字語(要件文書の別の箇所で定義されていない場合)、その他の難解な表現に頼ることなく、簡潔に述べられています。主観的な意見ではなく、客観的な事実を表現しています。また、解釈は唯一無二です。曖昧な主語、形容詞、前置詞、動詞、主観的な表現は避けてください。否定的な表現や複雑な表現は避けてください。 |
| 重要度を指定する | 多くの要件は、ステークホルダーが定義した特性を表しており、その特性が欠如すると重大な欠陥、あるいは致命的な欠陥につながる可能性があります。また、時間と予算が許せば実装できる機能を表す要件もあります。要件には重要度レベルを指定する必要があります。 |
| 検証可能 | 要件の実装は、検査、デモンストレーション、テスト(計測)または分析(検証済みのモデリングとシミュレーションを含む)などの基本的な方法を通じて決定できます。 |
要件の品質に寄与する、考慮すべき属性は他にも数多くあります。例えば、 要件がデータ整合性のルールに従う場合、正確性/正しさ、妥当性/承認性も重要な属性です。トレーサビリティは、要件セットがニーズを満たしている(要求されている以上のものでも、それ以下のものでもない)ことを保証します。
上記に加えて、「外部から観測可能」という要件、つまり、要件は製品の特性を規定するもので、その特性は外部から観測可能、あるいはユーザーが体験できるものである、という要件を付け加える人もいます。こうした主張をする人々は、内部アーキテクチャ、設計、実装、あるいはテストに関する決定事項を規定する要件はおそらく制約であり、要件文書の「制約」セクションで明確に記述されるべきだと主張します。これとは対照的な見解は、この観点には2つの欠陥があるというものです。第一に、この観点は、ユーザーエクスペリエンスが、ユーザーが知覚できない要件によって支えられる可能性があることを認識していません。例えば、ジオコーディングされた情報をユーザーに提示するという要件は、外部のサードパーティ・ビジネスパートナーとのインターフェースに関する要件によって支えられている可能性があります。インターフェース自体はユーザーには知覚できませんが、インターフェースを通じて得られる情報の提示はユーザーには知覚できません。第二に、制約は設計の選択肢を制限するのに対し、要件は設計特性を規定します。この例を続けると、Webサービスインターフェースを選択するという要件と、シングルサインオンアーキテクチャと互換性のある方法に設計の選択肢を制限するという制約は異なります。
すべての要件は検証可能である必要があります。最も一般的な方法はテストです。そうでない場合は、代わりに別の検証方法(例:分析、デモンストレーション、検査、設計レビュー)を使用する必要があります。
特定の要件は、その構造上、検証不可能です。これには、システムが特定の特性を決して示してはならない、あるいは常に示してはならないという要件が含まれます。これらの要件を適切にテストするには、無限のテストサイクルが必要になります。このような要件は、検証可能に書き直す必要があります。前述の通り、すべての要件は検証可能でなければなりません。
ソフトウェアレベルで検証できない非機能要件も、顧客の意図を示す文書として保持する必要があります。ただし、それらの要件を満たすための実際的な方法であると判断されたプロセス要件にまで遡ることができる場合があります。例えば、バックドアがないという非機能要件は、ペアプログラミングを使用するというプロセス要件に置き換えることで満たされる可能性があります。その他の非機能要件は、他のシステムコンポーネントにまで遡り、そのレベルで検証されます。例えば、システムの信頼性は、多くの場合、システムレベルでの分析によって検証されます。複雑な安全要件を持つ航空電子機器ソフトウェアは、 DO-178B開発プロセス に従う必要があります。
システムまたはソフトウェアの要件を導出するための活動。要件エンジニアリングには、プロジェクトの実現可能性調査または概念分析フェーズ、要件抽出(利害関係者のニーズの収集、理解、レビュー、および明確化)、要件分析、[ 10 ] 、分析(一貫性と完全性の確認)、仕様(要件の文書化)、検証(指定された要件が正しいことを確認する)が含まれる場合があります。[ 11 ] [ 12 ]
要件定義は、曖昧さ、不完全性、そして矛盾といった問題を抱えやすい傾向があります。厳格な検査などの手法は、これらの問題への対処に役立つことが実証されています。要件定義段階で解決できる曖昧さ、不完全性、そして矛盾は、製品開発の後期段階で同じ問題が見つかった場合と比べて、修正コストが桁違いに低くなります。要件分析は、これらの問題に対処することを目的としています。
あまりに漠然とした要件と、詳細すぎて
アジャイルアプローチは、要件を高レベルでベースライン化し、ジャストインタイムまたは最後の責任ある瞬間に詳細を詳述することで、これらの問題を克服する方法として進化しました。
要件は通常、さまざまな利害関係者間のコミュニケーション手段として記述されます。つまり、要件は一般ユーザーと開発者の両方にとって理解しやすいものでなければなりません。要件を文書化する一般的な方法の一つは、システムが何を実行しなければならないかを明記することです。例:「請負業者は製品をxyz日までに納品しなければならない」。その他の方法としては、ユースケースやユーザーストーリーなどがあります。
要件は一般的に時間とともに変化します。定義・承認された要件は、変更管理の対象となります。多くのプロジェクトでは、システムが完成する前に要件が変更されます。これは、コンピュータソフトウェアの複雑さと、ユーザーが実際に目にするまで何が欲しいのかわからないという事実に一部起因しています。要件のこの特性は、要件管理の研究と実践につながっています。
要件とは何か、そしてどのように管理・活用すべきかについては、複数の相反する見解があります。業界をリードする2つの団体はIEEEとIIBAです。両団体は、要件の定義は異なりますが、概ね共通しています。
多くのプロジェクトは、要件に関する合意がほとんどまたは全くない状態で成功しています。[ 13 ]さらに、要件を指定すると創造性と設計パフォーマンスが低下する可能性があることを示す証拠もあります。 [ 14 ]デザイナーは提供された情報に過度に気を取られるため、要件は創造性と設計を妨げます。[ 15 ] [ 16 ] [ 17 ]より一般的には、ソフトウェア要件は、実際の要件が明らかでない状況で設計上の決定を要件として誤って表現することによって作り出された錯覚であると示唆する研究もあります。[ 18 ]
一方、アジャイルソフトウェア開発手法の多くは、ソフトウェア要件を事前に厳密に記述する必要性に疑問を呈しています。なぜなら、要件は流動的であると考えているからです。例えばエクストリームプログラミングでは、ユーザーストーリー(システムが実行すべきことの一側面を説明する、インデックスカードに収まる短い要約)を用いて要件を非公式に記述し、顧客に直接説明を求めるのは開発者の義務だと考えています。アジャイル手法では、一連の自動化された受け入れテストを通して要件を把握しようとします。
スコープクリープは、要件が時間の経過とともに変化することで発生する可能性があります。要件管理では要件の変更が許容されますが、適切に追跡されていない場合、または先行するステップ(ビジネス目標、そしてユーザー要件)が追加の監視によって抑制されなかったり、コストや潜在的なプログラム障害として扱われなかったりすると、要件変更は容易かつ発生しやすくなります。開発者が作業を完了できるよりも早く要件変更が発生し、結果として 作業が後戻りしてしまう可能性が高くなります。
要件には、どのフレームワークに基づいて作業しているかに応じて複数の分類法があります(例えば、IEEE、IIBA、米国国防総省のアプローチなどの標準規格)。場所や日常会話によって言語やプロセスが異なると、混乱が生じ、望ましいプロセスから逸脱する可能性があります。
人間が運営するプロセスは、ガバナンスにおける人間の欠陥の影響を受けやすく、都合や欲望、政治的思惑によって例外が生じたり、プロセスが意図的に破壊されたり、教科書的なプロセス進行方法から逸脱したりすることがあります。例えば、以下のようなことが挙げられます。
米国国防総省のプロセスにおける要件問題の歴史的な例をいくつか挙げると、
{{cite book}}:|first2=一般的な名前があります(ヘルプ)