成功的軟件產品是建立在成功的需求基礎之上的,而高質量的需求來源于用戶與開發人員之間有效的溝通與合作。當用戶有一個問題可以用計算機系統來解決,而開發人員開始幫助用戶解決這個問題,溝通就開始了。
需求獲取可能是軟件開發中最困難、最關鍵、最易出錯及最需要溝通交流的活動。對需求的獲取往往有錯誤的認識:用戶知道需求是什么,我們所要做的就是和他們交談從他們那里得到需求,只要問用戶系統的目標特征,什么是要完成的,什么樣的系統能適合商業需要就可以了,但是實際上需求獲取并不是想象的這樣簡單,這條溝通之路布滿了荊棘。首先需求獲取要定義問題范圍,系統的邊界往往是很難明確的,用戶不了解技術實現的細節,這樣造成了系統目標的混淆。
其次是對問題的理解,用戶對計算機系統的能力和限制缺乏了解,任何一個系統都會有很多的用戶或者不同類型的用戶,每個用戶只知道自己需要的系統,而不知道系統的整體情況,他們不知道系統作為一個整體怎么樣工作效率更好,也不太清楚那些工作可以交給軟件完成,他們不清楚需求是什么,或者說如何以一種精確的方式來描述需求,他們需要開發人員的協助和指導,但是用戶與開發人員之間的交流很容易出現障礙,忽略了那些被認為是很明確的信息。最后是需求的確認,因為需求的不穩定性往往隨著時間的推移產生變動,使之難以確認。為了克服以上的問題,必須有組織的執行需求的獲取活動。
需求獲取活動建議要完成的11個任務或者說步驟分別是確定需求過程、編寫項目視圖和范圍文檔、用戶群分類、選擇用戶代表、選擇用戶代表、建立核心隊伍、確定使用實例、召開聯合會議、分析用戶工作流程、確定質量屬性、檢查問題報告和需求重用。當然應該根據組織和項目的具體情況進行適當的裁減,比如根據項目和用戶情況把需求獲取會議改成問卷調查或者座談等等。
1、編寫項目視圖和范圍文檔
系統的需求包括四個不同的層次:業務需求、用戶需求和功能需求、非功能性需求。業務需求說明了提供給用戶新系統的最初利益,反映了組織機構或用戶對系統、產品高層次的目標要求,它們在項目視圖與范圍文檔中予以說明。用戶需求文檔描述了用戶使用產品必須要完成的任務,這在使用實例文檔或方案腳本說明中予以說明。功能需求定義了開發人員必須實現的軟件功能,使得用戶能完成他們的任務,從而滿足了業務需求。
非功能性需求是用戶對系統良好運作提出的期望,包括了易用性、反應速度、容錯性、健壯性等等質量屬性。需求獲取就是根據系統業務需求去獲得系統用戶需求,然后通過需求分析得到系統的功能需求和非功能需求。項目視圖和范圍文檔就是從高層次上描述系統的業務需求,應該包括高層的產品業務目標,評估問題解決方案的商業和技術可行性,所有的使用實例和功能需求都必須遵從的標準。而范圍文檔定義了項目產品所包括的所有工作及產生產品所用的過程。項目相關人員對項目的目標和范圍能達成共識,整個項目組都應該把注意力集中在項目目標和范圍上。
2、用戶群分類
系統用戶在很多方面存在著差異,例如:使用系統的頻度和程度、應用領域和計算機系統知識、所使用的系統特性、所進行的業務過程、訪問權限、地理上的布局以及個人的素質和喜好等等。根據這些差異,你可以把這些不同的用戶分成不同的用戶類。與UML中Usecase的Actor概念一樣,用戶類不一定都指人,也可以包括其他應用系統、接口或者硬件,這樣做使得與系統邊界外的接口也成為系統需求。將用戶群分類并歸納各自特點,并詳細描述出它們的個性特點及任務狀況,將有助于需求的獲取和系統設計。
3、選擇用戶代表
不可能對所有的用戶都進行需求獲取,這樣做時間不允許效果也不一定好,所以要識別出能夠確定需求和了解業務流程的用戶作為每類用戶的代表。每類用戶至少選擇一位能真正代表他們需求的人作為代表并且能夠作出決策,用戶代表往往是本類用戶中三類人:對項目有決定權的領導、熟悉業務流程的專家、系統最終用戶。
每一個用戶代表者代表了一個特定的用戶類,并在那個用戶類和開發者之間充當主要的接口,用戶代表從他們所代表的用戶類中收集需求信息,同時每個用戶代表又負責協調他們所代表的用戶在需求表達上的不一致性和不兼容性。
4、建立核心隊伍
通常用戶和開發人員不自覺的都有一種我們和他們的想法,產生一種對立關系,把彼此放在對立面,每一方都定義自己的邊界,只想自己的利益而忽略對方的想法。他們通過文檔、記錄和對話來溝通,而不是作為一個合作的整體去識別和確定需求完成任務。實踐證明這樣的方法是不正確的,不會給雙方帶來一點益處,良好的溝通關系沒有建立導致了誤解和忽略重要的信息。只有當雙方參與者都明白要成功自己需要什么,同時也知道要成功對方需要什么時,才能建立起一種合作關系。
原文轉自:http://www.anti-gravitydesign.com