摘要:本文以某礦務局的“煤炭競標交易與雙邊交易互動系統”的開發為例,討論了軟件需求分析工具與方法的選用。軟件需求分析是軟件工程中的重要一步,直接關系到后繼工程的進行以及最終的產品能否滿足用戶的需求,因此在整個工程中起著關鍵性的作用。采用適當的工具,有可能顯著減少需求階段的錯誤,也可大幅度提高需求分析的質量和工作效率。當然工具的選用應當與實際的項目相結合,充分地發揮工具的作用。本文結合我們工作的實際,簡要討論了開發系統時所選用的工具及其應用,選用時所考慮的原則以及所碰到的問題。
關鍵字:需求分析 需求工程 結構化分析 面向對象的分析 需求分析工具 用例 原型法
軟件產業過去40多年的經驗和教訓已經證明了這樣一個事實,軟件需求的質量高低將直接決定軟件產品的質量。根據Standisk Group發布的最新報告顯示,在其對23000個項目進行的研究結果表明,28%的項目徹底失敗,46%的項目超出經費預算或者超出工期,只有26%的項目獲得成功,這樣的數據顯然表明軟件項目還是處于一個失敗率極高的狀態中,而導致這樣一個高失敗率的直接原因就是需求分析出現失誤。
需求分析作為軟件工程生命周期中的首要環節,的確是我們應該重點面對的一個問題。
在需求分析階段,我們要將客戶的所有需求挖掘出來,這里的需求包括顯性需求和隱性需求,顯性的需求具體有業務需求、用戶需求、功能需求、非功能需求(如可靠性,性能,響應時間,擴展性和容錯性等)。隱性需求則是用戶沒有描述出來,但是在系統建設中又極為重要的部分,隱性需求一般需要系統分析員去深入挖掘才能得到。
在實際情況中,用戶往往不能正確描述他們的意圖,而技術人員對客戶的業務領域又所知甚少。因此,如何將用戶的真正意圖描述出來加以實現,這是系統分析人員所面臨的首要任務。
需求分析在軟件項目中是如此的重要,因此現在需求分析已經演化成為需求工程,需求工程主要包括兩個方面:需求開發和需求管理。
需求分析的方法很多,主要有以下一些:
1.面談法(即和用戶直接交流,這是最基本、最常見的技術)
2.用戶調查(這是需求分析中調查面最廣的技術)
3.現場觀摩(即在用戶的業務現場了解業務流程)
4.文檔考古(即查閱用戶的歷史業務文檔資料,從中得出用戶的業務流程及功能)
5.聯合開發(即用戶和軟件設計人員共同開發,這是最有效的方法)
下面以一個具體的項目構建為例,討論一下在實踐中如何有效地獲取用戶需求。
2005年,我參與開發了某礦務局“煤炭競標交易與雙邊交易互動管理系統”(以下簡稱A系統)的設計,我在項目中擔任系統分析師的工作,并進行部分程序模塊的開發。
我們在與用戶深入交流之前,用戶已將A系統的基本功能及模塊組成以說明書的形式發給了我們,這說明他們對A系統的功能要求是有一定的研究準備的,A系統主要包括競標交易和雙邊交易兩大部分,分為“競標交易”,“雙邊交易”,“交易信息”三個模塊。“競標交易”模塊主要反映全國各區域煤炭競標價格及競標供給量與交易量信息;“雙邊交易”主要反映全國各區域煤炭用戶價格和交易量信息;“交易信息顯示”主要提供全國煤炭價格波動信息,給企業決策層提供決策數據。
有了系統的基本功能框架,我們所要做的是采取合適的方法和工具深入剖析每個模塊所包含的具體功能,并將這些功能建模。在需求分析方法的選擇上,我們對結構化的方法和面向對象的方法進行了詳細對比,最終選擇了面向對象的方法(UML)來構建A系統的邏輯模型。因為面向對象的建模是軟件業發展的方向,另外采用UML建模具有接近自然表示,可擴展性,可維護性的特點。在工具的選擇上,我們采用了Rational Rose,因為Rose工具在UML建模領域功能強大,在用例圖、類圖、對象圖、活動圖、協作圖等UML圖形的繪制上比較容易。
在A系統的需求建模中,我們還使用了用例(User Case)分析的方法。用例作為系統給角色(Actor)提供的功能,本身就反映了用戶的需求,再通過用例之間的關系(關聯,包含,擴展,泛化)很容易就可以得到用戶的需求模型。在A系統的需求建模中,我們使用了帶泳道的活動圖來描述系統的業務流向,從中得到用戶的業務流程及相互間的關系。此外,我們利用ROSE工具描繪了A系統的類圖,對象圖,用例圖,從而得出了系統的邏輯模型。我們將系統的功能需求以需求規格說明書的形式交給用戶進行審閱,從而圈定了系統的邊界和功能約束。需求規格說明書的出臺為系統的實施奠定了法律和技術基礎。
在具體的需求獲取過程中,以下兩個方面對需求獲取的成功起了積極作用:
1.我們采用了用戶訪談和文檔考古的方法。首先,我們通過和用戶的溝通,讓用戶認識到他們和我們同是一條繩上的兩只螞蚱,即我們的共同利益是一致的,任何與對方對立的做法對系統的構建只能有害無益,只能造成系統的失敗或延期。從而為需求獲取中雙方的積極溝通打下了良好的基礎。在用戶訪談過程中,我們在每一次訪談前就訪談內容都做了充分的準備,以使訪談能夠得到具體的實質內容。
2.系統原型法的使用。雖然經過周密細致的需求分析,用戶的某些需求還是可能被忽略掉。為了避免出現這種情況,我們使用了原型的方法來獲取用戶的需求,我們首先根據早期得到的需求功能信息制作出了一個初始的原型系統,此系統用Visual Studio.NET制作,核心代碼用C#實現,架構上采用B/S模式,用ASP.NET設計了客戶端。我們把制作出的原型系統交給用戶使用,通過用戶的使用,對設計中不符合用戶需求的部分重新設計,從而在最大限度上挖掘出了用戶的真正需求。在A系統的需求構建中,我們的原型法取得了成功。
回顧A系統的開發過程,在需求分析階段,因為我們采用了有效的方法和技術工具,從而得到了較為真實的用戶需求,A系統的后續開發沒有因需求不一致而導致大的變動,這對系統能夠按預期進度和經費預算順利完工起到了積極的作用。A系統投入使用后,經過一段時間的試用期運行,一切正常,系統取得了成功。
參考文獻:
[1] 張友生,徐峰.系統分析師技術指南.北京:清華大學出版社,2004.
[2] 張友生.系統分析師之路.北京:清華大學出版社,2004.