Functional Requirement (功能性) vs non-functional requirement (非功能性需求)

瞭解功能性需求和非功能性需求之間的差异將有助於客戶和提供商深入瞭解他們的需求,這將導致更好的範圍細化、優化成本,並最終獲得滿意的客戶。

在軟件工程中,功能需求定義了一個系統或其組件。它描述了軟件必須執行的功能。一個函數只不過是輸入、它的行為和輸出。它可以是計算、數據操作、業務流程、用戶交互或任何其他定義系統可能執行的功能的特定功能。軟件工程中的功能需求可幫助您捕獲系統的預期行為。這種行為可以表示為功能、服務或任務,或者需要執行哪個系統。

非功能性要求限定了軟件系統的質量屬性。它們代表了一組用於判斷系統特定操作的標準。例如,網站加載速度有多快?非功能性需求對於確保整個軟件系統的可用性和有效性至關重要。無法滿足非功能性需求會導致系統無法滿足用戶需求。非功能性需求允許您在各種敏捷待辦事項中對系統設計施加約束或限制。例如,當並同時上缐的戶數大於 10000 時,站點應在 3 秒內加載。非功能性需求的描述與功能性需求一樣重要。

Functional Requirement (功能性)和非功能性(non-functional requirement) 需求

將需求分為功能性需求和非功能性需求是很有用的。對需求進行分類還有很多其他的方法,但我們將盡可能簡單,並在開始時使用這兩個類別。
功能需求是系統應該做什麼的陳述——它是系統功能的陳述。例如,如果您正在收集自動取款機(ATM)的需求,您可能會識別
遵循功能要求。

  1. ATM系統應檢查插入的ATM卡的有效性。
  2. ATM系統應驗證客戶輸入的PIN碼。
  3. ATM系統在任何24小時內對任何ATM卡的提款不得超過250美元。
     

非功能性需求是對系統的約束。對於您的ATM系統,可能有以下非功能性要求。

  1. ATM系統應使用C++編寫。
  2. ATM系統應使用256比特與銀行通信加密。
  3. ATM系統應在三秒或更短時間內驗證ATM卡。
  4. ATM系統應在三秒或更短時間內驗證PIN。

您可以看到,非功能性需求指定或約束了系統的實現管道。

為什麼我們應該將系統需求分為功能性需求和非功能性需求?

如果您正在使用需求管理工具,那麼您將能夠將您的需求組織到一個分類法中。這是需求類型的層次結構,您可以使用它來對需求進行分類。使用需求類型的主要原因是,它們可以將大量的、非結構化的需求組織成更小、更易於管理的領域。這將幫助您更有效地處理需求。

我们上面描述的功能需求和非功能需求的基本划分是一个非常简单的分类,但是您可以,例如,通过扩展这个分类来进一步分类您的需求,如上图所示。如果您有很多需求(超過一百個)需要處理,那麼按類型組織需求是一種有用的方法。如果您使用的是需求工程工具 (i.e. Visual Paradigm, Use Case Modeling and etc.),它尤其有用,因為這將允許您按需求類型査詢需求模型以選取有用資訊。原則上,您的需求類型層次 (layer, i.e. MVC frame) 結構可以是您喜歡的深度。在實踐中,除非你在一個非常複雜的系統上工作,否則大約兩到三個級別似乎是正確的。

 

Visual Paradigm International