成功的軟件產(chǎn)品是建立在成功的需求基礎(chǔ)之上的,而高質(zhì)量的需求來源于用戶與開發(fā)人員之間有效的溝通與合作。當(dāng)用戶有一個(gè)問題可以用計(jì)算機(jī)系統(tǒng)來解決,而開發(fā)人員開始幫助用戶解決這個(gè)問題,溝通就開始了。
需求獲取可能是軟件開發(fā)中最困難、最關(guān)鍵、最易出錯(cuò)及最需要溝通交流的活動(dòng)。對(duì)需求的獲取往往有錯(cuò)誤的認(rèn)識(shí):用戶知道需求是什么,我們所要做的就是和他們交談從他們那里得到需求,只要問用戶系統(tǒng)的目標(biāo)特征,什么是要完成的,什么樣的系統(tǒng)能適合商業(yè)需要就可以了,但是實(shí)際上需求獲取并不是想象的這樣簡單,這條溝通之路布滿了荊棘。首先需求獲取要定義問題范圍,系統(tǒng)的邊界往往是很難明確的,用戶不了解技術(shù)實(shí)現(xiàn)的細(xì)節(jié),這樣造成了系統(tǒng)目標(biāo)的混淆。
其次是對(duì)問題的理解,用戶對(duì)計(jì)算機(jī)系統(tǒng)的能力和限制缺乏了解,任何一個(gè)系統(tǒng)都會(huì)有很多的用戶或者不同類型的用戶,每個(gè)用戶只知道自己需要的系統(tǒng),而不知道系統(tǒng)的整體情況,他們不知道系統(tǒng)作為一個(gè)整體怎么樣工作效率更好,也不太清楚那些工作可以交給軟件完成,他們不清楚需求是什么,或者說如何以一種精確的方式來描述需求,他們需要開發(fā)人員的協(xié)助和指導(dǎo),但是用戶與開發(fā)人員之間的交流很容易出現(xiàn)障礙,忽略了那些被認(rèn)為是很明確的信息。最后是需求的確認(rèn),因?yàn)樾枨蟮牟环€(wěn)定性往往隨著時(shí)間的推移產(chǎn)生變動(dòng),使之難以確認(rèn)。為了克服以上的問題,必須有組織的執(zhí)行需求的獲取活動(dòng)。
需求獲取活動(dòng)建議要完成的11個(gè)任務(wù)或者說步驟分別是確定需求過程、編寫項(xiàng)目視圖和范圍文檔、用戶群分類、選擇用戶代表、選擇用戶代表、建立核心隊(duì)伍、確定使用實(shí)例、召開聯(lián)合會(huì)議、分析用戶工作流程、確定質(zhì)量屬性、檢查問題報(bào)告和需求重用。當(dāng)然應(yīng)該根據(jù)組織和項(xiàng)目的具體情況進(jìn)行適當(dāng)?shù)牟脺p,比如根據(jù)項(xiàng)目和用戶情況把需求獲取會(huì)議改成問卷調(diào)查或者座談等等。
1、編寫項(xiàng)目視圖和范圍文檔
系統(tǒng)的需求包括四個(gè)不同的層次:業(yè)務(wù)需求、用戶需求和功能需求、非功能性需求。業(yè)務(wù)需求說明了提供給用戶新系統(tǒng)的最初利益,反映了組織機(jī)構(gòu)或用戶對(duì)系統(tǒng)、產(chǎn)品高層次的目標(biāo)要求,它們在項(xiàng)目視圖與范圍文檔中予以說明。用戶需求文檔描述了用戶使用產(chǎn)品必須要完成的任務(wù),這在使用實(shí)例文檔或方案腳本說明中予以說明。功能需求定義了開發(fā)人員必須實(shí)現(xiàn)的軟件功能,使得用戶能完成他們的任務(wù),從而滿足了業(yè)務(wù)需求。
非功能性需求是用戶對(duì)系統(tǒng)良好運(yùn)作提出的期望,包括了易用性、反應(yīng)速度、容錯(cuò)性、健壯性等等質(zhì)量屬性。需求獲取就是根據(jù)系統(tǒng)業(yè)務(wù)需求去獲得系統(tǒng)用戶需求,然后通過需求分析得到系統(tǒng)的功能需求和非功能需求。項(xiàng)目視圖和范圍文檔就是從高層次上描述系統(tǒng)的業(yè)務(wù)需求,應(yīng)該包括高層的產(chǎn)品業(yè)務(wù)目標(biāo),評(píng)估問題解決方案的商業(yè)和技術(shù)可行性,所有的使用實(shí)例和功能需求都必須遵從的標(biāo)準(zhǔn)。而范圍文檔定義了項(xiàng)目產(chǎn)品所包括的所有工作及產(chǎn)生產(chǎn)品所用的過程。項(xiàng)目相關(guān)人員對(duì)項(xiàng)目的目標(biāo)和范圍能達(dá)成共識(shí),整個(gè)項(xiàng)目組都應(yīng)該把注意力集中在項(xiàng)目目標(biāo)和范圍上。
2、用戶群分類
系統(tǒng)用戶在很多方面存在著差異,例如:使用系統(tǒng)的頻度和程度、應(yīng)用領(lǐng)域和計(jì)算機(jī)系統(tǒng)知識(shí)、所使用的系統(tǒng)特性、所進(jìn)行的業(yè)務(wù)過程、訪問權(quán)限、地理上的布局以及個(gè)人的素質(zhì)和喜好等等。根據(jù)這些差異,你可以把這些不同的用戶分成不同的用戶類。與UML中Usecase的Actor概念一樣,用戶類不一定都指人,也可以包括其他應(yīng)用系統(tǒng)、接口或者硬件,這樣做使得與系統(tǒng)邊界外的接口也成為系統(tǒng)需求。將用戶群分類并歸納各自特點(diǎn),并詳細(xì)描述出它們的個(gè)性特點(diǎn)及任務(wù)狀況,將有助于需求的獲取和系統(tǒng)設(shè)計(jì)。
3、選擇用戶代表
不可能對(duì)所有的用戶都進(jìn)行需求獲取,這樣做時(shí)間