1. 程式人生 > >需求分析系列:軟體需求分析方法論

需求分析系列:軟體需求分析方法論

軟體需求分析(Software Reguirement Analysis)是研究使用者需求得到的東西,完全理解使用者對軟體需求的完整功能,確認使用者軟體功能需求,建立可確認的、可驗證的一個基本依據。

軟體需求分析是一個專案的開端,也是專案實施最重要的關鍵點。據有關的機構分析結果表明,我們設計的軟體產品存在不完整性、不正確性等問題80%以上是需求分析錯誤所導致的,而且由於需求分析錯誤造成根本性的功能問題尤為突出。因此,一個專案的成功軟體需求分析是關鍵的一步。

一、 軟體需求分析理論

如果我們用數學方法來描述軟體需求分析,可以將一個應用軟體定義為S,可能應用軟體涉及功能性問題非常廣,我們用抽象化理論分析,可以劃分為各個功能域,可以用D1、D2、… Dn表示,那麼,我們可以用一個表示式描述為

S={D1,D2,D3,…Dn}
但是,功能域Di依然存在著有若干個問題P1、P2、P3、… Pm組成,並且每個功能對應於子系統中的一個軟構件,我們可以表示為
     Di={P1,P2,P3,…Pm}
同樣,功能Pj有若干個行為F1、F2、F3、… Fk,每個行為對應於軟構件中的實現方法

Pj={F1,F2,F3,…Fk}

一個軟體包含了所有功能的集合,同時包含了實現所有功能的所有方法和演算法描述。需求分析是依據於使用者需求,經過需求問題識別,進行分析、消化與綜合,制訂規格說明,評審,分為四個階段,形成使用者需求與設計同步,設計滿足使用者需求目標。

需求分析方法始終貫穿著吸收、同化、貫徹方法和手段,用商業化行為解決需求與實現中存在的矛盾,解決使用者需求與商業化產品融通,解決規範與個性化追求。

二、 軟體需求分析目標

軟體需求分析的主要實現目標:

1)對實現軟體的功能做全面的描述,幫助使用者判斷實現功能的正確性、一致性和完整性,促使使用者在軟體設計啟動之前周密地、全面地思考軟體需求;

2)瞭解和描述軟體實現所需的全部資訊,為軟體設計、確認和驗證提供一個基準;

3)為軟體管理人員進行軟體成本計價和編制軟體開發計劃書提供依據;

需求分析的具體內容可以歸納為六個方面:軟體的功能需求,軟體與硬體或其他外部系統介面,軟體的非功能性需求,軟體的反向需求,軟體設計和實現上的限制,閱讀支援資訊。

軟體需求分析應儘量提供軟體實現功能需求的全部資訊,使得軟體設計人員和軟體測試人員不再需要需求方的接觸。這就要求軟體需求分析內容應正確、完整、一致和可驗證。此外,為保證軟體設計質量,便於軟體功能的休整和驗證,軟體需求表達無岔意性,具有可追蹤性和可修改性。

2.1、軟體功能需求

軟體的功能需求是整個需求分析最主要、最關鍵和最複雜的部分,它描述軟體的各種可能的條件下,對所有可能輸入的資料資訊,應完成那些具體功能,產生什麼樣的輸出。描述軟體功能需求是應注意下面幾點:

1)功能需求的完整性和一致性

對功能的描述應包含與功能相關的資訊,並應具有內在的一致性(即各種描述之間不矛盾、不衝突)。應注意以下幾點:

(1)給出觸發功能的各種條件(如:控制流、執行狀態、執行模式等);

(2)定義各種可能性條件下的所有可能的輸入(包括合法的輸入空間和非法的輸入空間);

(3)給出各種功能間可能的相互關係(如各個功能間的控制流、資料流、資訊流,功能執行關係:順序、重複、選擇、併發、同步);

(4)給出功能性的主要級別(如:基本功能、可由設計者選擇逐步實現的功能、可由設計者改變實現的功能等);

(5)儘可能不使用“待定”這樣的詞。所有含有待定內容的需求都不是完整的檔案,如果出現待定的部分,必須進行待定部分內容說明,落實負責人員、落實實施日期。

2)功能描述的無岔意性和可追蹤性

需求功能描述的無岔意性、可追蹤性和規範化:

(1)功能描述必須清晰地描述出怎樣輸入到怎樣輸出,並且輸入、輸出描述應對應有資料流描述、控制流描述圖,這些描述必須與其它地方描述一致;

(2)可以用語言、方程式、決策表、矩陣或圖等對功能的描述。如果選用語言描述必須使用結構化的語言,描述前必須說明該步驟(或子功能)的執行是順序,選擇,重複,還是併發,然後說明步驟邏輯。整個描述必須單入單出。

(3)描述時,每一個功能名稱和參照編號必須唯一,且不要將多個功能混在一起進行描述,這樣便於功能的追蹤和修改。

(4)功能描述應注意需求說明和程式設計的區別。需求設計僅僅是軟體的功能設計,它給出軟體執行的的外部功能描述,以及為了實現這一外部功能必須做哪些事情(採用和種資料結構,定義多個模組,介面間的介面等)是設計階段的事情,功能描述不應涉及到那些細節問題,以避免給軟體設計帶來不必要的約束。

2.2、軟體與硬體或其他外部系統介面

軟體與硬體或其它外部系統介面包括下述內容:

(1)人機介面:說明輸入、輸出的內容、螢幕安排、格式等要求;

(2)硬體介面:說明埠號,指令集,輸入輸出訊號的內容與資料型別,初始化訊號源,傳輸通道號和訊號處理方式。

(3)軟體介面:說明軟體的名稱、助記符、規格說明、版本號和來源;

(4)通訊介面:指定通訊介面和通訊協議等描述。

2.3、軟體的非功能性需求

軟體非功能性需求是指軟體效能指標,容限等功能以外的需求。一般指下述內容:

(1)時間需求:輸入、輸出頻率,輸入、輸出響應時間,各種功能恢復時間等;

(2)處理容限、精度、取樣引數的解析度,誤差處理等;

(3)可靠性的MTBF要求,可維護性、安全性要求等。(對可能的不正常的輸入給以正常響應是可靠性的重要內容,這屬於功能性需求。)

2.4、軟體反向需求

軟體的反向需求描述軟體在那些情況下不能做什麼。這一條是隨軟體實際要求而定。有兩類情形需要採用反向需求的形式。第一種情況:某些使用者需求適宜採用反向形式說明,如資料安全性要求屬於這類形式。第二種情況:對一些可靠性和安全性要求較高的軟體,有些必須描述軟體不能做些什麼。如控制點火時序,我們必須交代清楚在那些情況下不能點火,否則會造成故障。

2.5、軟體設計和實現上的限制

軟體設計和實現上的限制主要指對軟體設計者的限制。如軟體執行環境的限制(選擇計算機型別,使用配置,作業系統的限制等)、設計工具的限制(使用語言、執行的標準)和保密要求等。

2.6、閱讀支援資訊

這部分內容是為了更好的幫助我們理解使用者需求,也是為了使需求便於修改和追蹤。其本身並不是對需求的描述,但它影響到需求分析的可讀性,也屬於需求分析的一個重要部分。一般目錄、需求背景資訊、內容索引、交叉引用表、註釋等均屬於這個部分的內容。

三、 軟體需求分析人員組織

軟體需求分析其根本性問題是理解使用者功能需求,由此軟體需求分析實際上是與客戶間交流過程完成的目標。要求我們組織適當的參與人員進行交流活動。

需求分析是一個綜合團隊的工作,是在需求分析理論的指導下,對使用者需要進行漸進方式逐步深化;通過不斷變化方式形成具體約束;努力實現需求功能目標形成特色效果的商業化產品。需求分析是一個商業行為,完全是一個商業化操作,要求有商業、技術等結合的團隊共同合作,解決需求和設計的同步,設計符合需求

專案涉及內容,專案大小都需要我們考慮參加軟體需求分析工作團退的人數,配置合理的參與人員。一般我們必須有商務活動人員,專案管理人員,設計技術人員等參加,而且要求組織人員必須明確負責範圍,以及明確工作目標,保證實施的有效性。

四、 軟體需求分析方法

為了保證專案的正常實施,並且能夠順利的完成,我們必須加強專案管理和重視專案分析工作。我們只有從實際出發,切切實實地把握使用者需求,把握使用者需求目標,把握使用者將來功能界定,保證我們開發工作正確性方向。

4.1、重點監控軟體需求分析辦法

由於軟體專案的特殊性和行業覆蓋的廣闊性,以及需求分析的高風險性,軟體需求分析的重要性是不言而喻的,同時需求分析又的的確確難做。其原因基本是由於以下情況造成的。

4.1.1、客戶說不清楚需求

有些客戶對需求只有朦朧的感覺,當然說不清楚具體的需求。例如全國各地的很多部門、機構、單位在進行應用系統以及網路建設時,客戶方的辦公人員大多不清楚計算機網路有什麼用,更缺乏IT系統建設方面的專家和知識。此時,使用者就會要求軟體系統分析人員替他們設想需求。工程的需求存在一定的主觀性,為專案未來建設埋下了潛在的風險。

4.1.2、需求自身經常變動

根據以往的歷史經驗,隨著客戶方對資訊化建設的認識和自己業務水平的提高,他們會在不同的階段和時期對專案的需求提出新的要求和需求變更。事實上,歷史上沒有一個軟體的需求改動少於三次的!所以必須接受“需求會變動”這個事實,在進行需求分析時要懂得防患於未然,儘可能地分析清楚哪些是穩定的需求,哪些是易變的需求,以便在進行系統設計時,將軟體的核心建築在穩定的需求上,同時留出變更空間。諮詢監理方在需求分析的功能界定上擔任一個中間、公平、公正的角色,所以也必須積極參與到需求分析的準備中來,以便協助客戶方和承建方來界定“做什麼”、“不做什麼”的系統功能界限。

4.1.3、分析人員或客戶理解有誤

軟體系統分析人員不可能都是全才,更不可能是行業方面的專家。客戶表達的需求,不同的分析人員可能有不同的理解。如果分析人員理解錯了,可能會導致以後的開發工作勞而無功。記得一則笑話,有個外星人間諜潛伏到地球刺探情報,它給上司寫了一份報告:“主宰地球的是汽車。它們喝汽油,靠四個輪子滾動前進,嗓門極大,雙眼在夜裡能射出強光……有趣的是,車裡住著一種叫作‘人’的寄生蟲,這些寄生蟲完全控制了車。”所以分析人員知識的專一性也會造成需求分析的誤解和失敗。這時,諮詢監理公司就必須根據實際的專案需求調研計劃,提醒承建方加強業務瞭解程度和注重溝通技巧。

4.2、有效性軟體需求分析三步法

根據以往的工程經驗,需求分析工作方法,應該定位在“三個階段”(也稱“三步法”)。

4.2.1、“訪談式Visitation”階段

這一階段是和具體使用者方的領導層、業務層人員的訪談式溝通,主要目的是從巨集觀上把握使用者的具體需求方向和趨勢,瞭解現有的組織架構、業務流程、硬體環境、軟體環境、現有的執行系統等等具體情況、客觀的資訊。建立起良好的溝通渠道和方式。針對具體的職能部門以及各委辦局,最好能指定本次專案的介面人。

實現手段:訪談、調查表格

輸出成果:調查報告、業務流程報告

4.2.2、“誘導式Inducement”階段

這一階段是在承建方已經瞭解了具體使用者方的組織架構、業務流程、硬體環境、軟體環境、現有的執行系統等等具體實際、客觀的資訊基礎上,結合現有的硬體、軟體實現方案,做出簡單的使用者流程頁面,同時結合以往的專案經驗對使用者採用誘導式、啟發式的調研方法和手段,和使用者一起探討業務流程設計的合理性、準確性、便易性、習慣性。使用者可以操作簡單演示的DEMO,來感受一下整個業務流程的設計合理性、準確性等等問題,及時地提出改進意見和方法。

實現手段:拜訪(誘導)、原型演示

輸出成果:調研分析報告、原型反饋報告、業務流程報告

4.2.3、“確認式Afirm”階段

這一階段是在上述兩個階段成果的基礎上,進行具體的流程細化、資料項的確認階段,這個階段承建方必須提供原型系統和明確的業務流程報告、資料項表,並能清晰地向用戶描述系統的業務流設計目標。使用者方可以通過審查業務流程報告、資料項表以及操作承建方提供的DEMO系統,來提出反饋意見,並對已經可接受的報告、文件簽字確認。

實現手段:拜訪(回顧、確認),提交業務流程報告、資料項表;原型演示系統

輸出成果:需求分析報告、資料項、業務流程報告、原型系統反饋意見(後三者可以統一歸入需求分析報告中,提交使用者方、監理方進行確認和存檔)

整體來講,需求分析的三個階段是需求調研中不可忽視一個重要的部分,三個階段或者說三步法的實施和採用,對使用者和承建方都同樣提供了專案成功的保證。當然在系統建設的過程中,特別在採用迭代法的開發模式時,需求分析的工作需一直進行下去,而在後期的需求改進中,工作則基本集中在後兩個階段中。

五、 軟體需求分析工具

我們根據使用者需求,通過反覆討論、分析,最終明確一個唯一性的使用者需求,這個結果其實就是我們的軟體需求分析報告。一般我們採用Word、PowerPoint、Visio、ProntPage、Excel等Office工具,同時可能採用一些開發工具,如VC或BC等,同樣也會使用一些圖形工具,如Potoshop、調色盤等畫圖工具。

使用各種工具表達軟體需求分析,其具體表達手段可以分為:

l效果圖描述。主要是使用者UI介面的描述反映使用者需求功能;

l邏輯圖描述。根據使用者需求功能,使用抽象化理論,以及需求分析理論,對使用者需求功能進行全面的分析,建立功能性邏輯關係圖,流程邏輯關係圖等;

l關係圖表描述。主要是對資訊關係、資料庫表格、介面函式等描述;

l工程數學描述。分析使用者需求,分析使用者需求資訊,運用工程數學進行演算法推導,進行合理化需求分析推導;

l甘地圖描述。主要是軟體專案工作安排,開發週期預估;

l其它方法描述。保證完整性合理性的有效描述。

六、 軟體需求分析評估

軟體需求分析評估是為了檢查我們進行軟體需求分析工作,保證軟體需求分析工作正確性、完整性、有效性、合理性、可確認性、可實施性,完全保證使用者所需求的功能。

6.1、組織結構與責任管理

我們對組織結構與責任管理的評估主要有:參與人員任務和責任介面的明確;安排計劃按時完成狀況;相互間的協調能力狀況。

6.2、滿足使用者需求的功能

我們進行需求分析的目的是完整、準確地描述使用者的需求,跟蹤使用者需求的變化,將使用者的需求準確地反映到系統的分析和設計中,並使系統的分析、設計和使用者的需求保持一致。

需求分析的特點是需求的完整性、一致性和可追溯性。完整性:是準確、全面的描述使用者的需求。一致性:是通過分析整理,剔除使用者需求矛盾的方面,規範使用者需求。可追溯性:有兩個方面的含義,整理和規範的需求,其一,需要不斷的和使用者進一步交流,保持和使用者最新的需求一致。其二,和系統分析(設計)保持一致。

因此在需求分析之前我們必須建立需求分析技術層面的基本框架,從技術上保證需求分析的要求,在此基礎上我們進行的需求分析才能滿足專案對需求分析的要求。

6.3、保證可實施性

我們必須以使用者軟體需求為依據,以求實的態度詳細的、準確的、完整的編寫軟體需求分析,避免空想世界,空中樓閣的想法;避免無邏輯性、無核心的描述;避免無量化思維,無實際空間概念。

6.4、需求分析評價指標

主要有這麼幾個指標:功能性、完整性、正確性、邏輯性、表現性、合理性,可實施性等。

6.5、工作週期

評價人員投入,以及費用支出的合理性問題。正確制定工作週期,保證軟體專案的順利完成。

6.6、需求不確定更改與可確認保證

可確認需求功能是實現使用者需求的基本保證,如果不可確認的、不確定更改存在,將會阻礙軟體實現,或者軟體設計存在著不完整性缺陷,或者存在著不可實施性問題,我們必須區分是功能性障礙問題,還是未來性問題。如果不能夠明確是未來性問題,則必須調整功能需求,化解不確定更改的問題。因此,判斷不確定性更改是一個非常重要的問題