web-dev-qa-db-ja.com

機能仕様と技術仕様の違い

私はプロジェクトの仕様を書いており、機能仕様と技術仕様の分離に苦労しています( http://www.joelonsoftware.com/articles/fog0000000035.html を参照)。

たとえば、ユーザーが可視性のあるFooオブジェクトのリストを要求したときの動作を指定しようとしています。機能仕様では、返される内容(Fooオブジェクトの構造など)を正確に説明する必要がありますか、それともシステムがそれらのリストを返し、Fooオブジェクトの詳細を技術仕様に含める必要がありますか?

この設計は、違いが生じる場合に備えてAPI用です。そのようなAPI仕様がどのように記述されているかの例は多くありません。

4
Chris Cooper

技術仕様 は広義の用語です。ある程度の誤差内で、特定のメトリックに準拠する必要がある工学システムの特性を記述します。

機能仕様 は、ソフトウェアシステムの予想される動作を記述します。 プログラムの仕様 ソフトウェアが何を達成するために想定されているかを説明します。これは異なりますつまり、プログラム仕様はシステムの動作を記述しますが、機能仕様はシステムが実行する方法を記述します。

しばらくの間のユースケースで作業することをお勧めします。ユーザーレベルでは、ユースケースはシステムの動作を説明する方法ですが、コードレベルではシステムの動作は単体テストでです。両方の手法を使用して、機能仕様を導出できます。システムの動作をユースケースで具体化すると、APIがどのように見えるかが明確になります。

まず、ユースケースの非公式なリストを作成します。 このドキュメント はプロセスを要約します これ 。ユースケースを取得したら、それらから機能要件を構築し始めることができます。

返却が遅れて予約車両が利用できない場合、お客様には状況が通知され、利用可能な他の車両タイプが通知されます。顧客には、別の車種を受け入れるインセンティブが提供されます。顧客が満足していない場合、予約はキャンセル料なしでキャンセルされます。顧客は別の車種を受け入れるか、予約をキャンセルします。

このユースケースからいくつかの機能要件を導き出すことができます。

  1. システムは、車両が利用できないときとその理由を示します。
  2. システムは、他の利用可能な車両のリストを提供するものとします。
  3. システムは、可能なインセンティブのリストを提供するものとします。
  4. システムは、別の車両を選択する方法を提供するものとします。
  5. システムは予約をキャンセルする方法を提供します。

等々。このような機能要件のリストから、APIに存在する必要がある要素がすぐに明らかになるはずです。

18
Robert Harvey