摘要:需求獲取是軟件開發的一個重要環節。文章對現有的幾種主流的需求獲取方法進行了歸納分析,提出了一種將場景和視點結合的需求獲取方法。利用該方法能夠采集到系統的需求并將其描述清晰。通過一個實例驗證了該方法的有效性。
關鍵詞:場景;視點;需求獲取;應用分析
中圖分類號:TP3 文獻標識碼:A 文章編號:1006-8228(2011)09-39-02
0 引言
需求獲取,屬于軟件工程中的重要內容,包括需求來源和獲取需求的技術。需求獲取是軟件設計的第一階段,其本質涉及軟件設計人員如何與客戶建立有效的溝通。在實際的軟件開發過程中,軟件開發者與領域用戶之間的知識差異使得需求的獲取變得困難。一方面,軟件開發者由于不了解應用領域,只能被動地等待領域用戶提供信息,并且難免對領域用戶的描述產生錯誤的理解,因而得出不適當的需求模型,導致軟件開發半途而廢;另一方面,領域用戶通常不知道如何按軟件工程的要求去描述他們的需求,而且,他們一開始常對自己的需求僅有一個模糊的認識,如果沒有任何提示和引導,不可能給出正確而且完整的需求描述。針對需求獲取較為困難這一問題,本文首先介紹了幾種主流的需求采集方法及目前國內的研究者根據實際遇到的問題而提出的解決方案,然后介紹一種將場景與視點相結合的需求獲取方法。
1 常見的需求獲取方法簡介及研究現狀
需求獲取是通過對現有系統的觀察以及業務進行分析,全面準確地理解并把握用戶所要解決的問題和期望。現有需求獲取方法主要是通過分析員與用戶之間的交互,由分析員引導用戶表達需求。根據引導的角度和方式等不同,可以分為面向目標、基于場景、面向視點和基于知識等幾種不同的方法。
1.1面向目標的方法
面向目標的方法是一種通過對系統目標進行分解從而挖掘需求的方法。面向目標的方法是自上而下的,從總目標入手,然后對目標進行逐層分解,直至分解到最細粒度的目標,以目標數的方式來表達需求體系。
面向目標的需求獲取方法關鍵在于目標的分解和精化,其結果通常是一個目標分析樹。目標是指所期望達到的目的,是對現有或未來系統的意圖作總體陛的陳述。目標具有層次性,可以分為戰略性的、較為粗糙的高層目標和技術性的、較為精細的低層目標。高層目標需要分解、精化為低層目標,從而實現需求的逐步精化,并通過需求對高層目標的可追溯性建立起軟件需求與業務目標的對應關系,形成一個形式化的、用AND-OR結構圖表現的目標與子目標的關系圖(樹),以及一個關于目標與子目標鏈接類型的多視圖。

1.2基于場景的方法
基于場景的需求獲取方法,又稱情景實例的分析方法,是基于對應用環境的某—特定情景的描述來闡述用戶的需求。
基于場景的方法關鍵在于場景的抽取和描述,從而形成需求模型。場景是現實世界的實例,它可能用自然語言、圖表或者其他媒介來表示。對于描述最終用戶和系統之間某個交互類型有關的交互會話,場景是最終用戶用來模擬實際交互的一種情景實例。從現實的實例出發,歸結到形式化的表示,面向場景的方法最終將形成模型等需求模型。
a 面向視點的方法
面向視點的方法從涉眾的角度出發做需求的獲取,需求分析員從一組涉眾獲取各局部需求并將其進行整合。
從視點出發進行需求挖掘,關鍵在于視點的標注和從視點需要解決的問題中挖掘需求。視點是來源于特殊角度的系統需求信息的封裝。系統的最終用戶、管理者、組織內工作受到系統簡介影響的其他人和購買系統的客戶,都是系統需求的潛在來源,他們對系統應該提供的服務和提供服務的方式都有自己的視點。視點可能包含著一組需求,也包含視點視角的定義,需求源以及抽取需求的理由。
b 基于知識的方法
基于知識的需求獲取方法試圖利用歷史項目中積累的經驗或領域分析的結果,來幫助人們理解業務和獲取需求。到目前為止,面向知識的方法仍未形成系統性的研究成果。比較典型的基于知識的方法包括:
(1)基于類比推理的領域模型重用;
(2)KAOS方法中的元模型驅動的需求獲取;
(3)基于本體的需求自動獲取方法。
基于知識的方法有助于通過歷史經驗數據對涉眾進行啟發,并通過各種基于知識的機制對這種啟發的效果和效率提供保障。
例如文獻以企業信息系統為研究對象,提出一種基于場景的協同式需求獲取方法;文獻則提出支持MDA的交互式需求獲取方法及輔助工具,便于需求采集。本文則將主流需求獲取方法中的場景法與視點法結合起來,用于較復雜信息系統中的需求獲取。
2 場景與視點結合的需求獲取方法介紹
如前所述,需求分析方法是指組織并指導需求階段獲取與分析需求過程的一系列方法、技術和規范,這是軟件開發者長年失敗和成功經驗的理論性總結,從軟件重用的思路來說,需求分析方法總結與重用的價值遠比某些程序組件重用的價值高。因此,在開發軟件系統之前,根據軟件應用領域與目標系統的特點,有針對l生地選擇需求分析方法則顯得尤為重要。但是,沒有任何一個放之四海皆可用的需求方法,現在開發復雜信息系統在需求階段常出現的問題是:在沒有分析本領域軟件應用與開發特點、沒有深入方法細節討論就照搬現有的需求方法,導致在需求階段常常出現獲取方法不確定、描述方法不穩定、得到的需求規格說明質量不高等問題;也有很多軟件開發組織在長期項目開發實踐中,意識到需求分析方法的重要性,但卻沒有進行總結、抽象和提高,導致以往出現的問題反復重現。結合已有的需求采集方法,我們使用了基于場景和視點相結合的需求采集方法。即在描述場景時,將牽涉到的對象分門別類描述,從中抽象出不同的視點。具體的操作方式為:
(1)根據系統功能劃分與使用對象抽象出具體的使用場景;
(2)使用規范的自然語言描述每個場景;
(3)將自然語言描述的場景轉換為二維表格的方式描述;
(4)從二維表格中提取出不同對象的視點。
按照以上方法對需求進行采集時,能夠將復雜的信息系統以業務流程為中心來獲取和描述需求;以場景為描述業務流程的基本單位,相關用戶更容易理解和配合需求分析人員刻畫業務流程;通過將視點固定,并以獲取活動和用戶之間的關系,最后可以以帶泳道的流程描述,內容表達清晰。而且,這種過程是迭代的和可進化的,符合復雜的信息系統需求階段的特點,克服了結構化需求分析方法由于功能細分所分割出的功能模塊會因人而異的缺點,也能夠充分調動相關用戶在軟件開發過程中的積極性,有利于提高最終應用系統的正確性。
3 實驗及分析
下面以書店業務系統中的需求為例加以說明本文中需求獲取方法的有效性。根據本文方法的步驟,描述如下:
a 選取權限設計場景;
b 使用規范的自然語言描述該場景(部分)。
在獲取不同部門角色的權限時,我們可以將書店系統中的部分權限操作信息提取出來:
(1)業務部門可以錄入征訂書目單、客戶報訂單,并可以查詢庫存表單;
(2)業務部門可以導入客戶報訂單;
供貨商能夠對付退單進行付退處理。
c 將自然語言描述的該場景轉換為二維表格的方式描述,如表l所示。
d 從表1中提取出不同對象的視點。顯然,表1中的每一列均為一類主體,每一行為一類操作對象,m行n列交叉處的值(假設為k)則表明第n類對象可以按照k方式操作m類對象,或者說對于第m類對象,第n類對象具有k操作權限。我們可以從表1中得到每個部門的操作權限及操作對象。
根據以上的方法,可以以較低的代價獲取到書店業務系統中的準確需求,并以泳道圖方式描述,易于與用戶交互,從而為軟件的設計階段提供支持。
4 本文的創新點
需求獲取在軟件開發過程中具有重要的作用,影響著軟件開發的后續環節。本文在對主流的需求獲取方法進行介紹和分析之后,提出一種創新方法,將場景和視點結合的需求獲取方法,能夠采集到系統的正確需求且描述清晰,可使需求采集人員與用戶之間的交互變得更容易。我們進一步的研究工作將是如何以較低代價抽取場景。