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