杜君益
軟件開發包含需求、設計、編碼和測試等4個階段,其中需求是最關鍵的一個輸入。據統計,不成功的項目中有30%~40%的問題是由需求造成的。大量研究表明,需求階段發現和糾正錯誤的代價是軟件開發各階段中成本最低的。
如何正確地獲取用戶的需求,圍繞其進行管理,以便最終交付給用戶符合其期望的產品是需求工程的任務。需求工程的研究產生了如CMM(能力成熟度模型)、UML(統一建模語言)、RUP(Rational統一建模過程)、CASE(用例)等管理方法和開發工具,軟件思想家溫伯格(GeraldM.Weinberg)指出,CMM只是一種標準,UML也只是一種記錄需求的工具,而不是捕獲需求的方法,需求的管理主要還是靠經驗。準確而有效獲取用戶需求、精確表述用戶需求并得到用戶認可,是軟件項目開發成功的最重要的因素之一。
一、什么是需求?
1997年IEEE軟件工程標準詞匯表對軟件需求的定義為:用戶解決問題或達到目標所需的條件或能力。系統或系統部件要滿足合同、標準、規范或其它正式規定文檔所需具有的條件或能力。需求分為需求開發和需求管理,而需求開發又分為需求獲取、需求分析、編寫規格說明書和需求驗證。如何幫助用戶提出準確的需求、理解和分析用戶環境是需求獲取的過程。為問題涉及的信息、功能及行為建立模型并將用戶需求精確化、完全化是需求分析的過程,最終形成需求規格說明書是編寫規格說明書的過程,將需求說明書交付用戶并得到用戶認可是需求驗證的過程。需求獲取、分析、編寫需求規格說明和需求驗證并不遵循線性的順序,這些活動是相互隔開、增量和反復地進行。
二、需求開發四步驟
1.需求獲取
需求獲取可采取如下辦法:(1)成立需求分析小組,劃分任務,細化側重點,為獲取用戶需求做好準備工作;(2)訪談用戶獲取問題,了解功能需求,還需要注意非功能需求。訪談用戶前,首先要了解和劃分用戶的類型,針對用戶的情況可以劃分組別,詳細描述出其個性特點及任務情況。其次,就要選擇好每類的代表,對其進行訪談和調研。每次的交流都需要有記錄,對于交流的結果還可以分類,以便于后續的分析活動開展。
2.需求分析
調研人員對于收集的需求信息要做進一步的分析和整理。這是一個需求分析人員消化用戶資料的過程。這個過程主要通過建立模型來描述用戶的需求,實際上是抽象圖形化的過程。一般用圖形表示系統的整體結構,用原型等方式向用戶提供可視化的界面,用系統可性行分析來說明軟件的效果和效率,用UML描述系統的需求及內部關系。
3.編寫需求規格說明書
需求規格說明書也稱為功能規格說明、需求協議或系統規格說明,它精確地闡述一個軟件系統必須提供的功能和性能以及它所要考慮的限制條件。它是開發設計的藍本,也是系統測試和用戶文檔的依據。
4.需求驗證
需求驗證是為了確保需求說明書準確無誤、完整地表達必要的質量的一種方式。客戶、分析人員、設計人員、測試人員等利益相關人員經過多次評審后的需求說明書就可作為需求管理的基線。用戶和開發方對軟件項目內容的描述是以需求規格說明書作為基礎,它是軟件驗收時合同雙方確認的重要依據。
三、需求開發中存在的困難以及對策
1.需求獲取
問題一:用戶對于自己的需求不太清楚或工作繁忙無暇理清需求。第一種情況是,他們認為計算機是萬能的,對于自己的業務規則、工作流程都不愿多談。針對這種情況,其對策是需求分析人員一定要深入用戶工作場地,仔細查看用戶的資料和報表,與不同層面的用戶交流,且要多了解用戶實際工作的場景。
還有一種情況就是業務人員配合力度不夠。他們不愿意付出更多的時間向分析人員講解業務。面對這種用戶,其對策是:需求分析人員改變溝通技巧,講清楚軟件需求的重要性,抓住關鍵點,向其咨詢,以用例和模型的方式向其演示,達到用戶和分析人員互相理解。
問題二:用戶與需求分析人員缺乏有效溝通,雙方誤解需求。軟件用戶與開發人員缺乏有效溝通方法,交流上存在障礙,用戶與開發人員存在知識背景差異,都從自己的角度,使用自己的專業術語或語言表達方式來描述和理解問題,使得雙方并不能夠很好地達成共識。一般說來,用戶不太容易從計算機的角度去理解自己的需求問題。從而使需求描述的不一致,不規范,多義性。
上述問題對策為,分析人員需要花更多的時間去了解系統用戶的特點,多學習用戶行業的專業術語,用用戶看得懂的語言來表達需求的內容。其次,分析人員除了需要過硬的專業知識,還要具備較強的溝通能力。如果能在用戶方找到既對生產過程了解,又懂計算機知識的行家來為開發人員與用戶牽線架橋則是最好不過的事情。
問題三:用戶的需求不斷變更。隨著客戶對項目的理解越來越深刻,對過去提出的需求要求一變再變。面對這種情況,需求人員要意識到:需求的變化是永恒的,需求不可能是完備的。因此在需求獲取的時候,一方面應該跟用戶講清楚需求開發的重要性,讓用戶明白減少后期的需求變更的重要性,且隨意的需求變更帶來的風險(成本增加、進度延后等)必將由用戶和開發者共同承擔。另一方面也需讓用戶明白,開發者和用戶更多的是戰略合作伙伴關系,其共同的目標是開發出適合用戶需要的軟件。
2.需求分析
問題一:主次不分。需求分析人員常站在自身的角度去理解用戶的需求,造成主次不分。針對這種情況,首先需求分析人員可以借用當前的需求分析工具和圖形的方式,明確用戶的功能需求和非功能需求,特別注意非功能性需求。其次就要充分考慮到哪些需求相對固定,哪些可能會產生變動,哪些需求會牽一發而動全身,區分這些需求,設定用戶的每項需求、特性或使用實例的優生級并安排在特定的產品版本或實現步驟中,以應付客戶后期的需求變更。
問題二:需求分析時間不夠。這個問題非常普通,不合理的要求會導致項目失敗。軟件項目有一個最短周期,也就是說無論如何增加資源,追趕進度,都無法再縮短時間,在關鍵路徑上增加人力、物力資源,或許還會添亂。一般需求開發工作應占全部工作量的15%。所以用戶方與開發方必須達成共識,留出足夠的時間進行需求分析。
3.需求規格說明編寫
問題一:文檔混亂,文字表述過多。需求人員寫出的文檔混亂,圖形連線錯綜復雜。首先是需要理清思路:需求的描述可以從2個方面來進行,一方面是對用戶現行系統的描述,一方面是對系統未來的設想。構成企業信息系統主要包括基本要素:企業的組織結構、流程、數據、商務規則與功能,其中從用戶的角度主要關注流程,是以流程為中心,通過流程將其他幾個要素貫穿起來,需求分析人員也應該從這個角度來和用戶溝通;從開發者的角度主要關注企業的數據、商務規則與功能,以便于系統的實現;從實施者的角度主要關注企業的組織結構與功能,以便于系統的發布與實施。企業組織結構是用戶企業業務流程與信息的載體,對分析人員理解企業的業務和系統范圍有幫助;業務流程圖把企業的業務流程與部門職責結合起來了;企業的數據可采用描述分類、格式化;企業商務規則與功能可以采用分類方法進行。其次盡量采用SRS(需求規格說明書),較好的模板為IEEE標準830—1998描述的SRS模板。
4.需求論證
問題一:需求文檔口頭達到共識,缺乏文字依據。因為時間緊湊或其他原因,即使達到了一致共識,多數用戶都不愿意在需求文檔上簽字。這種情況有可能導致后期需求不斷變更,從而影響軟件開發的進度、成本,甚至有可能使得軟件開發中止。對策是,需求分析人員與用戶建立良好的溝通渠道,強調需求文檔書面認可的重要性,期望得到用戶的理解。
四、結語
綜上所述,多數軟件項目都是在時間緊、人員少、項目預算有限的條件下完成的。在這些“先天不足”的條件下,首先就是關注需求分析。需求分析做好了,對下一步的設計階段工作真正起到指導性作用,規避需求開發過程存在的問題,成功的軟件項目指日可待。