如果將需求分析階段的工作歸結(jié)為編寫需求規(guī)格說明書,這種簡化的做法往往是導(dǎo)致項(xiàng)目后期層出不窮問題的罪魁禍?zhǔn)?。建議采用以下步驟形成軟件需求:獲取用戶需求→分析用戶需求→編寫需求文檔→評審需求文檔→管理需求。下面我們先來討論前兩個步驟(獲取用戶需求、分析用戶需求)的做法。
獲取用戶需求
這是該階段的一個最重要的任務(wù)。以下為獲取用戶需求需要執(zhí)行的活動(如圖1所示)。
● 了解客戶方的所有用戶類型以及潛在的類型。然后,根據(jù)他們的要求來確定系統(tǒng)的整體目標(biāo)和系統(tǒng)的工作范圍。
● 對用戶進(jìn)行訪談和調(diào)研。交流的方式可以是會議、電話、電子郵件、小組討論、模擬演示等不同形式。需要注意的是,每一次交流一定要有記錄,對于交流的結(jié)果還可以進(jìn)行分類,便于后續(xù)的分析活動。例如,可以將需求細(xì)分為功能需求、非功能需求(如響應(yīng)時間、平均無故障工作時間、自動恢復(fù)時間等)、環(huán)境限制、設(shè)計(jì)約束等類型。
● 需求分析人員對收集到的用戶需求做進(jìn)一步的分析和整理。下面是幾條常見的準(zhǔn)則:
?、艑τ谟脩籼岢龅拿總€需求都要知道“為什么”,并判斷用戶提出的需求是否有充足的理由;
圖1 獲取用戶需求的活動
?、茖⒛欠N以“如何實(shí)現(xiàn)”的表述方式轉(zhuǎn)換為“實(shí)現(xiàn)什么”的方式,因?yàn)樾枨蠓治鲭A段關(guān)注的目標(biāo)是“做什么”,而不是“怎么做”;
?、欠治鲇捎脩粜枨笱苌龅碾[含需求,并識別用戶沒有明確提出來的隱含需求(有可能是實(shí)現(xiàn)用戶需求的前提條件),這一點(diǎn)往往容易忽略掉,經(jīng)常因?yàn)閷﹄[含需求考慮得不夠充分而引起需求變更。
● 需求分析人員將調(diào)研的用戶需求以適當(dāng)?shù)姆绞匠式唤o用戶方和開發(fā)方的相關(guān)人員。大家共同確認(rèn)需求分析人員所提交的結(jié)果是否真實(shí)地反映了用戶的意圖。需求分析人員在這個任務(wù)中需要執(zhí)行下述活動:
?、琶鞔_標(biāo)識出那些未確定的需求項(xiàng)(在需求分析初期往往有很多這樣的待定項(xiàng));
⑵使需求符合系統(tǒng)的整體目標(biāo);
⑶保證需求項(xiàng)之間的一致性,解決需求項(xiàng)之間可能存在的沖突。
分析用戶需求
在很多情形下,分析用戶需求是與獲取用戶需求并行的,主要通過建立模型的方式來描述用戶的需求,為客戶、用戶、開發(fā)方等不同參與方提供一個交流的渠道。這些模型是對需求的抽象,以可視化的方式提供一個易于溝通的橋梁。用戶需求的分析與獲取用戶需求有著相似的步驟,區(qū)別在于分析用戶需求時使用模型來描述,以獲取用戶更明確的需求。分析用戶需求需要執(zhí)行下列活動:
● 以圖形表示的方式描述系統(tǒng)的整體結(jié)構(gòu),包括系統(tǒng)的邊界與接口;
● 通過原型、頁面流或其它方式向用戶提供可視化的界面,用戶可以對需求做出自己的評價;
● 系統(tǒng)可行性分析,需求實(shí)現(xiàn)的技術(shù)可行性、環(huán)境分析、費(fèi)用分析、時間分析等;
● 以模型描述系統(tǒng)的功能項(xiàng)、數(shù)據(jù)實(shí)體、外部實(shí)體、實(shí)體之間的關(guān)系、實(shí)體之間的狀態(tài)轉(zhuǎn)換等方面的內(nèi)容。
圖2 DFD示意圖
用于需求建模的方法有很多種,最常用的包括數(shù)據(jù)流圖(DFD)、實(shí)體關(guān)系圖(ERD)和用例圖(Use Case)三種方式。DFD作為結(jié)構(gòu)化系統(tǒng)分析與設(shè)計(jì)的主要方法,已經(jīng)得到了廣泛的應(yīng)用,DFD尤其適用于MIS系統(tǒng)的表述。DFD使用四種基本元素來描述系統(tǒng)的行為,過程、實(shí)體、數(shù)據(jù)流和數(shù)據(jù)存儲。DFD方法直觀易懂,使用者可以方便地得到系統(tǒng)的邏輯模型和物理模型,但是從DFD圖中無法判斷活動的時序關(guān)系。圖2描述的是某個項(xiàng)目的DFD示意圖。
ERD方法用于描述系統(tǒng)實(shí)體間的對應(yīng)關(guān)系,需求分析階段使用ERD描述系統(tǒng)中實(shí)體的邏輯關(guān)系,在設(shè)計(jì)階段則使用ERD描述物理表之間的關(guān)系。需求分析階段使用ERD來描述現(xiàn)實(shí)世界中的對象。ERD只關(guān)注系統(tǒng)中數(shù)據(jù)間的關(guān)系,而缺乏對系統(tǒng)功能的描述。如果將ERD與DFD兩種方法相結(jié)合,則可以更準(zhǔn)確地描述系統(tǒng)的需求。
在面向?qū)ο蠓治龅姆椒ㄖ型ǔJ褂肬se Case來獲取軟件的需求。Use Case通過描述“系統(tǒng)”和“活動者”之間的交互來描述系統(tǒng)的行為。通過分解系統(tǒng)目標(biāo),Use Case描述活動者為了實(shí)現(xiàn)這些目標(biāo)而執(zhí)行的所有步驟。Use Case方法最主要的優(yōu)點(diǎn),在于它是用戶導(dǎo)向的,用戶可以根據(jù)自己所對應(yīng)的Use Case來不斷細(xì)化自己的需求。此外,使用Use Case還可以方便地得到系統(tǒng)功能的測試用例。
=============================================
上一期,我們介紹了需求分析五個步驟中的前兩個步驟(獲取用戶需求、分析用戶需求),本期將繼續(xù)介紹后三個步驟(編寫需求文檔、評審需求文檔、管理需求),并與大家討論相關(guān)實(shí)踐問題。
1、編寫需求文檔
需求文檔可以使用自然語言或形式化語言來描述,還可以添加圖形的表述方式和模型表征的方式。需求文檔應(yīng)該包括用戶的所有需求(功能性需求和非功能性需求)。
2、評審需求文檔
需求文檔完成后,需要經(jīng)過正式評審,以便作為下一階段工作的基礎(chǔ)。一般的評審分為用戶評審和同行評審兩類。用戶和開發(fā)方對于軟件項(xiàng)目內(nèi)容的描述,是以需求規(guī)格說明書作為基礎(chǔ)的;用戶驗(yàn)收的標(biāo)準(zhǔn)則是依據(jù)需求規(guī)格說明書中的內(nèi)容來制訂,所以評審需求文檔時用戶的意見是第一位的。而同行評審的目的,是在軟件項(xiàng)目初期發(fā)現(xiàn)那些潛在的缺陷或錯誤,避免這些錯誤和缺陷遺漏到項(xiàng)目的后續(xù)階段。
3、管理需求
圖1 需求變更流程
需求的變更是不可避免的,如何以可控的方式管理軟件的需求,對于項(xiàng)目的順利進(jìn)行有著重要的意義。如果匆匆忙忙地完成用戶調(diào)研與分析,則往往意味著不穩(wěn)定的需求。所以需求管理要保證需求分析各個活動都得到了充分的執(zhí)行。對于需求變更的管理,則主要使用需求變更流程和需求跟蹤矩陣的管理方式。需求變更流程和需求跟蹤矩陣分別如圖1和圖2所示。
圖2 需求跟蹤矩陣
常見問題及建議
Q、客戶與最終用戶的區(qū)別是什么?
A、可以借助圖3來說明它們之間的區(qū)別。
圖3 需求獲取渠道示意圖
軟件需求來自系統(tǒng)工程與客戶兩個方面,其中客戶是主要的需求提供者(系統(tǒng)工程需求也來自于客戶)。客戶需要搜集其最終用戶的需求并考慮自身的需求,然后再提供給開發(fā)方。假如客戶并未去認(rèn)真搜集最終用戶的需求,開發(fā)方便需要做到這一點(diǎn),因?yàn)橄到y(tǒng)最終要滿足最終用戶的需求。
Q、如何進(jìn)行用戶訪談?
A、首先,一定要事先確定訪談的目的和提綱。其次,因?yàn)橛脩敉⒉恢缿?yīng)該提供哪些方面的需求,所以需要開發(fā)人員引導(dǎo)。
Q、用戶訪談內(nèi)容是什么?
A、首先,請用戶描述他們?nèi)绾瓮瓿勺约寒?dāng)前的工作,并與用戶一起抽象出一個工作流程或工作模型。然后,在得到用戶的認(rèn)可后,向用戶解釋自己是怎樣來實(shí)現(xiàn)這些功能的,并說明哪些環(huán)節(jié)可以用自動化方式實(shí)現(xiàn)等。
Q、采用哪一種方式做需求分析最好?
A、不同的需求分析有不同的特點(diǎn)。還沒有哪一種方法可以完全替代別的方法,否則,現(xiàn)在就不會存在不同的需求建模方式了。一般來說,可以使用DFD+ERD來描述那些功能層次比較清晰的需求;而USE CASE則適于描述功能結(jié)構(gòu)復(fù)雜的需求。做需求分析的目的是為了建立需求的模型,不同的子系統(tǒng)有可能使用不同的建模方法。
Q、怎樣做原型,原型的目的是什么?
A、通常使用原型分析方法來幫助開發(fā)方進(jìn)一步獲取用戶需求或讓用戶確認(rèn)需求。開發(fā)方往往先向用戶提供一個可視界面作為原型,并在界面上布置必要的元素以演示用戶所需要的功能??梢允褂玫谒拇Z言(例如Visual Basic、Delphi等)來快速生成用戶界面,也可以使用FrontPage等網(wǎng)頁制作工具來生成用戶可視的頁面流。
原型的目的往往是獲取需求。但有時也使用原型的方式來驗(yàn)證關(guān)鍵技術(shù)或技術(shù)難點(diǎn)。對于技術(shù)原型,界面則往往被忽略掉。