web-dev-qa-db-ja.com

機能要件と非機能要件を区別する必要があるのはなぜですか?

2つの違いを理解していますが、要件を機能的または非機能的(または移行的)としてラベル付けすることの利点について同僚から質問されます。なぜそうするのですか?彼は自分の言ったことを2日間かけて1つのプロジェクトの要件のリストを調べましたが、最終的には「すべてやる」という勅令を持つ別のビジネスエンティティにドキュメントを提出することになったため、何のメリットもありませんでした。

私が恐れているのは、要件が1つのドキュメントにまとめられていることです。メリットを具体的に説明しようとしたが売れなかった。どの要件が機能的で、どの要件が機能的でないかを文書化する利点をどのように販売すればよいですか。

12
Gary

要件を明示的に分離すると、適切なシステムの設計が容易になります。

非機能要件(私はコンセプト/用語 品質属性 を好む-機能的ではなく機能的以外の新しい洞察を提供する必要がある)では、プロパティ機能ではなくソフトウェアの。つまり、システムが何らかの機能を実行する(= /// =)方法は、単にシステムが実行する機能ではありません。品質要件は、機能要件とは異なる方法でシステムのアーキテクチャに大きな影響を与えるため、異なる方法で処理する必要があります。

品質属性を機能要件から分離することで、さまざまな種類の要件をさまざまな方法で分析、指定、および優先順位付けできます。たとえば、品質属性は通常 品質属性シナリオ を使用して指定されますが、機能要件はストーリー、ユースケース、shallステートメント、または他の任意の形式の形式をとることがあります。私が取り組んできたシステムのほとんどは、12未満の品質属性と、さらに多くの機能要件を備えていました。

私は実際に別の種類の要件を導入します-技術的な制約。繰り返しになりますが、要件をこれら3つのバケットに明示的に分離することで、システムの構築中に適切なトレードオフを行う方法の手がかりが得られます。多くの場合、機能要件はかなり交渉可能であり、品質属性は選択したアーキテクチャと構造に大きな影響を与えます。技術的な制約は交渉不可能です。

これが私のチームである場合、アーキテクチャで重要なものを見逃さないように、要件にはタイプごとに明確に注釈を付ける必要があることを伝えます。機能だけでなく、アーキテクチャ上の要因についても検討してください。

Anthony Lattanze Architecting Software Intensive Systems:A Practitioners Guide は、建築ドライバーの実際の概要と、それらを異なる方法で扱う必要がある理由、ここでの私の要約よりもはるかに包括的なものを提供します。

6
Michael

すべての要件の優先度/重みが等しい場合(特に「必須」)、機能要件と非機能要件を単に分割するだけでなく、心配する必要がある可能性があります。

それでも、2つの要件のカテゴリを分離する理由はいくつかあります。

実装の責任多くの機能以外の要件、特にパフォーマンスに焦点を当てた要件は、開発者に適度にしか適用できないことがわかりました。デザインはスケーラビリティと速度をサポートできます(特定のコードセクションを調整できます)が、一般に、パフォーマンス要件を満たすことができるかどうかは、アーキテクチャに依存し、多くの場合、ハードウェア構成に時間をかけます。

テストの責任ユーザー、またはQAチームは、セキュリティ、フォールトトレランス、安全性、および信頼性の要件が満たされていることをどの程度熟知していますか。

Do n't Repeat Yourselfドキュメントはコードと同じDRY原則をコードと同じにする必要があります。一般的なUIスタイリング要件はグループ化する必要があります。要件の責任者が本当に、機能要件で非機能要件を(個別にまたはグループとして)参照できます。

バージョニング「標準」がたくさんある企業環境にいる場合、バージョニングできる特定のUIまたはセキュリティ(2つ挙げると)の要件ドキュメントを作成できます。このようにして、アプリケーション固有の要件(主に機能要件)を記述できます。「アプリケーションは、XYZ-Company-SecReq-​​DocumnentNamingStandard.docxで定義されているセキュリティ要件のV2.3に準拠する必要があります」。

5
Ethan Cabiac

機能要件と非機能要件を区別する必要があるのはなぜですか?

区別する理由の1つは、2つのタイプ間の抽象化のレベルです。非機能要件はシステムレベルであり、システム全体がどのように動作する必要があるかを示します。機能要件は、特定の機能、およびクライアントに提供する必要がある機能を示します。

非機能要件もシステムを制約しますが、機能要件はシステムが実行する必要があることを示します。非機能要件は、機能要件が後で設計および実装される方法に関して制限を提供します。それらを分離することで、制約や制限から特徴を明確に識別することが可能になります。

私が恐れているのは、要件が1つのドキュメントにまとめられていることです。メリットを具体的に説明しようとしたが売れなかった。どの要件が機能的で、どの要件が機能的でないかを文書化する利点をどのように売りますか?.

私の経験では、機能要件と非機能要件は、実際には同じドキュメントにグループ化されるか、同じシステムで追跡されます。ただし、ドキュメントには独自の個別のセクションがあり、各セクションを満たすための成功基準も与えられています。

1
Thomas Owens

通常、要件を分類して、チームが要件に対応できるようにします。アーキテクチャのニーズを具体的に対象とする要件がある場合、それを「アーキテクチャ」要件と呼ぶことで、チームがアーキテクチャに取り組む際に役立ちます。

すべての要件をまとめた1つの大きなドキュメントが必ずしも悪いことではありません。2日間かけてレビューすることも悪いことではありません。通常、問題は、1人の人が要件を確認すると、それらを理解しますが、他の人が同じようにするのは簡単ではないということです。プロジェクトに参加する他の人を助けるメタデータで要件のラベル付けを始めることは大きな助けになるでしょう。

多分それを抽象化問題として説明しようとするでしょう。レガシーコードベースで作業する必要がある場合は、既存のコード行をすべて読み通して作業を開始するだけではありません。あなたはあなたを助けるためにコードの構造に従います。要件に何らかの構造があると、同じように役立ちます。

1
Al Biglan