軟件需求是用戶解決問題或達到目標所需條件或權能、系統或系統部件要滿足合同、標準、規范或其它正式規定文檔所需具有的條件或權能,或者一種反映上面所述條件或權能的文檔說明。中培偉業《需求分析與管理最佳實踐》培訓專家郭老師就軟件需求的分級和分類情況進行了詳細介紹。
一、根據不同階段、不同屬性、不同場景等特性,需求可以分為以下幾類:
1.業務需求(Business requirement):
反映了組織機構或客戶對系統、產品高層次的目標要求。業務需求通常來自項目投資人、購買產品的客戶、實際用戶的管理者、市場營銷部門或產品策劃部門。業務需求描述了組織為什么要開發一個系統,即組織希望達到的目標,使用前景和范圍(vision and scope)文檔來記錄業務需求,這份文檔有時也被稱作項目輪廓圖或市場需求(project charter 或 market requirement)文檔。
2.用戶需求(User requirement): 描述的是用戶的目標或用戶要求系統必須能完成的任務。用例、場景描述和事件――響應表都是表達用戶需求的有效途徑,也就是說用戶需求描述了用戶能使用系統來做些什么。
3.系統需求(system requirement):是系統必須完成的事以及必備的品質,一般用于描述包含多個子系統的產品(即系統)的頂級需求。系統可以只包含軟件系統,也可以既包含軟件又包含硬件子系統。系統需求包括功能需求、業務流程需求和非功能需求。
4.功能需求(Functional requirement):定義了開發人員必須在產品中實現的軟件功能,用戶利用這些功能來完成任務,滿足業務需求。功能需求有時也被稱作行為需求(behavīoral requirement),因為習慣上總是用“應該”對其進行描述:“系統應該發送電子郵件來通知用戶已接受其預定”。功能需求描述是開發人員需要實現什么。
5.業務流程需求:業務流程需求是根據業務目標對業務過程進行分解,說明業務的處理步驟、以及每個步驟的角色者,一般用活動圖并輔以文字加以描述。業務流程需求通常還需要說明業務規則,也就是業務辦理過程中的一些約束條件,包括輸入數據的校驗規則和業務處理的邏輯規則。
6.非功能需求(Non-functional requirement):非功能需求包括產品必須遵從的標準、規范和合約、外部接口的具體細節、性能要求、設計或實現的約束條件及質量屬性等。非功能需求包括性能需求、接口需求、可靠性需求、可恢復性需求、易用性需求、安全性需求、GUI需求、可保障性(Supportable)需求、兼容性需求、部署需求、安裝需求等。
7.測試需求(Testing requirement):確切地講,所謂的測試需求就是在項目中要測試什么。我們在測試活動中,首先需要明確測試需求(What),才能決定怎么測(How),測試時間(When),需要多少人(Who),測試的環境是什么(Where),測試中需要的技能、工具以及相應的背景知識,測試中可能遇到的風險等等,以上所有的內容結合起來就構成了測試計劃的基本要素。
8.運營需求:運營需求是系統上線后對通過IT服務對業務的運營支撐,所反映出的用戶對業務的接受度、訂單量的波動情況、注冊用戶數的波動情況、有策劃的市場活動對電子交易的貢獻等信息狀態。
9.采購需求:采購需求是指對采購標的的特征描述。要實施采購就一定要搞清楚采購需求,好的采購需求能夠合理、客觀反映采購標的的主要特征以及要求供應商響應的條件,符合適用原則、非歧視原則,并能夠切合市場實際。
10.外包需求:將某項任務或服務的執行或管理責任轉由第三方來完成的需求,稱之為外包需求。
11.接口需求:用戶對待開發軟件系統與其他軟件系統或硬件設備之間的接口的要求。
12.性能需求:用戶在軟件響應速度、結果精度、運行時資源消耗量等方面的要求。
13.安全性需求:用戶在身份認證、授權控制、私密性、加密管理等等方面的要求。
14.可靠性需求:用戶在軟件失效的頻率、嚴重程度、易恢復性,以及故障可預測性等方面的要求。
15.可恢復性需求(Recovery testing):是指系統從災難或出錯中可以很好恢復的需求,如遇到系統崩潰、硬件損壞或其他災難性出錯,應用程序和數據可以很快得到正確的恢復。可恢復需求通常需要關注恢復所需的時間以及恢復的程度。
16.可保障性(Supportable)需求:用戶在軟件可配置性、可擴展性、可維護性、可移植性等方面的要求。
17.易用性需求:用戶在界面的易用性、美觀性,以及對面向用戶的文檔和培訓資料等方面的要求。(行業標準)。
18.GUI需求:從GUI設計的規范性、GUI布局的合理性、GUI風格的一致性、GUI界面操作課定制性等方面對界面設計提出要求。
19.兼容性需求:是對軟件從某一環境轉移到另一環境的能力的具體要求,包括以下幾方面:操作系統兼容性,異構數據庫兼容性,新舊數據轉換,異種數據兼容性,用軟件兼容性,硬件兼容性等。
20.部署需求:對軟件系統運行環境的要求,包括操作系統、數據庫、中間件等軟件版本、硬件環境、網絡等。
21.安裝需求:是對軟件安裝的具體要求,例如:軟件在正常和異常情況的不同條件下,都可以正確安裝,完整的或自定義的安裝都能正常進行,系統升級可以正確進行,軟件卸載可以正常進行。異常情況包括磁盤空間不足、缺少目錄創建權限等系統會給出正確提示。
22.業務規則:包括企業方針、政府條例、工業標準、會計準則和計算方法等,業務規則通常是隱性需求。
二、不同類型需求之間的關系:
三、需求根據重要程度分類如下:
1.非常重要--關鍵任務需求,在該需求上必須達成一致意見,且本期版本必須完美實現,軟件才會被接受。
2.重要--實現這些需求將增強系統的性能,如果忽略這些需求,系統也是可以被接受的,如果沒有時間,也可以延遲到下一版本。
3.一般--該需求實現或不實現均可,實現該需求可以使系統更完美,且該功能可以包含缺陷。
四、需求根據成熟度的不同有以下六個級別:
級別零:沒有需求(no requirements)
沒有任何明確的需求被記錄下來,相關人員假定知道要構建什么,希望節省需求的時間來做開發,這樣做很可能會導致所做的產品并不是用戶所需要的。
級別一:被記錄的需求(Written Requirements)從混亂的沒有需求級別上升一步就是簡單地寫出需求。
級別二:被組織的需求(Organized)需求的目的是為了清晰地與用戶、客戶和其他涉眾(例如開發團隊)等人就問題的解決方案進行溝通。級別二關注需求質量、格式化、安全和存儲,以及版本管理。
級別三:結構化需求(Structured)結構化需求是對需求進行歸類,是功能性需求還是非功能性需求?是業務需求還是系統需求?是特性還是軟件需求?客戶、市場和用戶需求是什么?區分這些可以幫助我們更好的理解和管理需求。之前級別都是用一些文字類語言來描述,而級別三是一種結構化需求,例如給需求添加一些屬性。
級別四:可跟蹤性需求(Traced)需求本身是層級的,由用戶需求到業務需求再到系統需求;而需求又與開發和測試有所關聯,通過可跟蹤性管理,我們可以知道在更改一個需求時,會影響到哪些子需求以及相關的同級需求,還能夠分析出影響哪些開發和測試內容。
級別五:集成化需求(Integrated)通常我們做了很多需求,但是并沒有一種集成化的方法把需求直接引入開發中,可能導致實現出來的是另一回事。集成化需求管理流程可以直接由需求導入軟件設計、變更管理、測試和項目管理。團隊將需求作為主要輸入,如果將需求模型化,我們則可以通過模型化需求來開發應用程序,通過建模來結構化需求,它的目標就是要做成能夠讓業務工程師來開發應用程序。