馮阿芳 石 研
(哈爾濱學(xué)院數(shù)學(xué)與計算機(jī)學(xué)院,黑龍江 哈爾濱 150086)
一般可以從用戶角度(即系統(tǒng)的外部行為)和從開發(fā)者角度(即系統(tǒng)的內(nèi)部特性)兩個方面來闡述軟件需求的定義。
從用戶角度一般認(rèn)為軟件需求是“指明系統(tǒng)必須實現(xiàn)什么的規(guī)格說明”。它描述了系統(tǒng)的行為、特性或?qū)傩?,是在開發(fā)過程中對系統(tǒng)的約束。
從開發(fā)者角度可以認(rèn)為需求是“用戶所需要的并能觸發(fā)一個程序或系統(tǒng)開發(fā)工作的說明”。有些需求分析專家拓展了這個概念:“從系統(tǒng)外部能發(fā)現(xiàn)系統(tǒng)所具有的滿足于用戶的特點(diǎn)、功能及屬性等”。
從上面這些不同形式的定義不難發(fā)現(xiàn):這些定義都強(qiáng)調(diào)產(chǎn)品是什么樣的,而并非產(chǎn)品是怎樣設(shè)計和構(gòu)造的。很難給軟件需求一個準(zhǔn)確的定義,真正的“需求”實際上在客戶的腦海里,但一般情況下,用戶并不能描述自己的需要,只就需要系統(tǒng)分析人員根據(jù)用戶的自己語言的描述整理出相關(guān)的需要再進(jìn)一步和客戶核對。
軟件需求包括三個不同的層次:業(yè)務(wù)需求、用戶需求和功能需求(也包括非功能需求)。
業(yè)務(wù)需求:反映了組織機(jī)構(gòu)或客戶對系統(tǒng)、產(chǎn)品高層次的目標(biāo)要求,它們在項目視圖與范圍文檔中予以說明。
用戶需求:文檔描述了用戶使用產(chǎn)品必須要完成的任務(wù),這在使用實例文檔或方案腳本說明中予以說明。
功能需求和非功能需求:功能需求定義了開發(fā)人員必須實現(xiàn)的軟件功能,使得用戶能完成他們的任務(wù),從而滿足了業(yè)務(wù)需求。作為功能需求的補(bǔ)充,軟件需求規(guī)格說明還應(yīng)包括非功能需求,它描述了系統(tǒng)展現(xiàn)給用戶的行為和執(zhí)行的操作等。它包括產(chǎn)品必須遵從的標(biāo)準(zhǔn)、規(guī)范和合約;外部界面的具體細(xì)節(jié);性能要求;設(shè)計或?qū)崿F(xiàn)的約束條件及質(zhì)量屬性。所謂約束是指對開發(fā)人員在軟件產(chǎn)品設(shè)計和構(gòu)造上的限制。質(zhì)量屬性是通過多種角度對產(chǎn)品的特點(diǎn)進(jìn)行描述,從而反映產(chǎn)品功能。多角度描述產(chǎn)品對用戶和開發(fā)人員都極為重要。
下面通過與文字處理系統(tǒng)相關(guān)的部分需求來說明需求的分類。業(yè)務(wù)需求是:“用戶能有效地糾正文檔中的拼寫錯誤”,該產(chǎn)品的包裝盒封面上可能會標(biāo)明這是個滿足業(yè)務(wù)需求的拼寫檢查器。而對應(yīng)的用戶需求可能是“找出文檔中的拼寫錯誤并通過一個提供的替換項列表來供選擇替換拼錯的詞”。同時,該拼寫檢查器還有許多功能需求,如找到并高亮度提示錯詞的操作;顯示提供替換詞的對話框以及實現(xiàn)整個文檔范圍的替換。
開發(fā)軟件系統(tǒng)最為困難的部分就是準(zhǔn)確說明開發(fā)什么。最為困難的概念性工作便是編寫出軟件需求規(guī)格說明,所謂軟件需求規(guī)格說明是軟件應(yīng)滿足的全部需求,并可以用文檔的方式完整和精確地陳述這些需求,包括所有面向用戶、面向機(jī)器和其它軟件系統(tǒng)的接口。這項工作非常關(guān)鍵,一旦做錯,將最終會給系統(tǒng)帶來極大損害,并且以后再對它進(jìn)行修改也極為困難。一個質(zhì)量較高的軟件需求規(guī)格說明通常應(yīng)具備完整性、正確性、可行性、無二義性等基本特征。
可把整個軟件需求工程研究領(lǐng)域劃分為需求開發(fā)和需求管理兩部分。需求開發(fā)可進(jìn)一步分為:問題獲取、分析、編寫規(guī)格說明和驗證四個階段。這些子項包括軟件類產(chǎn)品中需求收集、評價、編寫文檔等所有活動。需求開發(fā)活動包括以下幾個方面:確定產(chǎn)品所期望的用戶類別;獲取每個用戶類的需求;了解實際用戶任務(wù)和目標(biāo)以及這些任務(wù)所支持的業(yè)務(wù)需求;分析源于用戶的信息以區(qū)別用戶任務(wù)需求、功能需求、業(yè)務(wù)規(guī)則、質(zhì)量屬性、建議解決方法和附加信息;將系統(tǒng)級的需求分為幾個子系統(tǒng),并將需求中的一部份分配給軟件組件;了解相關(guān)質(zhì)量屬性的重要性;與客戶商討實施優(yōu)先級的劃分;將所收集的用戶需求編寫成文檔和模型;評審需求規(guī)格說明,確保對用戶需求達(dá)到共同的理解與認(rèn)識,并在整個開發(fā)小組接受說明之前將問題都弄清楚。
需求管理需要建立并維護(hù)在軟件工程中同客戶達(dá)成的合同。這種合同都包含在編寫的需求文檔與模型中,客戶的接受僅是需求成功的一半,開發(fā)人員也必須能夠接受他們,并真正把需求應(yīng)用到產(chǎn)品中。通常的需求管理活動包括:定義需求基線(迅速制定需求文檔的主體);評審提出的需求變更、評估每項變更的可能影響從而決定是否實施它;以某種可控制的方式將需求變更融入到項目中;使當(dāng)前的項目計劃與需求一致;估計變更需求所產(chǎn)生影響并在此基礎(chǔ)上協(xié)商新的承諾,并體現(xiàn)在項目解決方案上;讓每項需求都能與其對應(yīng)的設(shè)計、源代碼和測試用例聯(lián)系起來以實現(xiàn)跟蹤;在整個項目過程中跟蹤需求狀態(tài)及其變更情況。
以上幾點(diǎn)說明是根據(jù)國內(nèi)外的一些系統(tǒng)實施的相關(guān)成功經(jīng)驗,進(jìn)行了總結(jié)。
不重視需求分析過程將會給項目的開發(fā)帶來失敗的風(fēng)險,為盡量減少項目風(fēng)險,在需求分析的過程中應(yīng)注意以下幾個問題帶來的風(fēng)險。
在實施項目時,若無足夠的用戶參與,系統(tǒng)人員獲得的需求是片面的,不完整的,這樣系統(tǒng)在需求之初就埋下風(fēng)險。應(yīng)讓具有代表性的用戶在項目早期直接參與到開發(fā)隊伍中,并一同經(jīng)歷整個開發(fā)過程??蛻艉烷_發(fā)人員應(yīng)積極合作,共同開發(fā)項目需求。有時開發(fā)人員覺得已經(jīng)明白用戶的需求了,但是在某些情況下,而客戶并不太明白自己的真正需求。
在開發(fā)中若不斷地補(bǔ)充需求,項目就越變越龐大以致超過其計劃及預(yù)算范圍。計劃并不總是與項目需求規(guī)模與復(fù)雜性、風(fēng)險、開發(fā)生產(chǎn)率及需求變更實際情況相一致,這使得問題更難解決。實際上,問題根源在于用戶需求的改變和開發(fā)者對新需求所作的修改。
要想把需求變更范圍控制到最小,必須一開始就對項目視圖、范圍、目標(biāo)、約束限制和成功標(biāo)準(zhǔn)給予明確說明,并將此說明作為評價需求變更和新特性的參照框架。說明中包括了對每種變更進(jìn)行變更影響因素分析的變更控制過程,有助于所有風(fēng)險承擔(dān)者明白業(yè)務(wù)決策的合理性,即為何進(jìn)行某些變更,相應(yīng)消耗的時間、資源或特性上的折衷。
模棱兩可是需求規(guī)格說明中最為可怕的問題。它的一層含義是指諸多讀者對需求說明產(chǎn)生了不同的理解;另一層含義是指單個讀者能用不止一個方式來解釋某個需求說明。
模棱兩可的需求會使不同的風(fēng)險承擔(dān)者產(chǎn)生不同的期望,它會使開發(fā)人員為錯誤問題而浪費(fèi)時間,并且使測試者與開發(fā)者所期望的不一致。處理模棱兩可需求的一種方法是組織好負(fù)責(zé)從不同角度審查需求的隊伍。僅僅簡單瀏覽一下需求文檔是不能解決模棱兩可問題的。如果不同的評審者從不同的角度對需求說明給予解釋,但每個評審人員都真正了解需求文檔,這樣二義性就不會直到項目后期才被發(fā)現(xiàn),那時再發(fā)現(xiàn)的話會使得更正代價很大。
有時,客戶所作的規(guī)格說明過于精簡,僅涉及了產(chǎn)品概念上的內(nèi)容,然后讓開發(fā)人員在項目進(jìn)展中去完善,結(jié)果很可能出現(xiàn)的是開發(fā)人員先建立產(chǎn)品的結(jié)構(gòu)之后再完成需求說明。這種方法可能適合于尖端研究性的產(chǎn)品或需求本身就十分靈活的情況。但在大多數(shù)情況下,這會使開發(fā)人員在不正確的前提和有限的指導(dǎo)下工作,也會使客戶無法得到他們所設(shè)想的產(chǎn)品。
[1]徐賽華.軟件需求分析研究[J].吉林師范大學(xué)學(xué)報(自然科學(xué)版),2006-02-10.