IT項(xiàng)目需求分析的注意事項(xiàng)
在需求開發(fā)階段發(fā)現(xiàn)的一個(gè)錯(cuò)誤,平均僅需要花30分鐘修復(fù),若在系統(tǒng)測(cè)試時(shí)發(fā)現(xiàn)則需要5到17個(gè)小時(shí)來修復(fù)。要改正在產(chǎn)品付諸應(yīng)用后所發(fā)現(xiàn)的一個(gè)需求方面的缺陷比在需求階段改正這個(gè)錯(cuò)誤要多付出大約100倍的成本。因此需求管理作為軟件項(xiàng)目管理的一個(gè)重要內(nèi)容,貫穿項(xiàng)目實(shí)施的全生命周期。俗話說:萬事開頭難。需求作為軟件開發(fā)的第一個(gè)環(huán)節(jié),其重要性不言而喻。市面上關(guān)于需求管理的相關(guān)理論和書籍很多,但多數(shù)停留在理論層面,實(shí)操性不強(qiáng)。
1、與用戶進(jìn)行充分溝通通常,與用戶溝通前的準(zhǔn)備時(shí)間要遠(yuǎn)遠(yuǎn)大于正式會(huì)面溝通的時(shí)間。一般情況下,用戶在和你連續(xù)交談兩個(gè)小時(shí)之后,就會(huì)失去熱情和耐心,這是大部分人的共同特點(diǎn)。所以充分的準(zhǔn)備工作至關(guān)重要。準(zhǔn)備工作包括對(duì)項(xiàng)目整體環(huán)境熟悉的準(zhǔn)備工作和對(duì)具體業(yè)務(wù)進(jìn)行調(diào)研前的準(zhǔn)備工作。項(xiàng)目整體環(huán)境的熟悉工作需要了解:項(xiàng)目的背景、項(xiàng)目的目的、項(xiàng)目的利益相關(guān)方等信息,以便對(duì)當(dāng)前項(xiàng)目的整體情況有一定了解。對(duì)具體業(yè)務(wù)調(diào)研前的準(zhǔn)備工作包括:需求調(diào)研問題的準(zhǔn)備、需求調(diào)研模板的設(shè)計(jì)、需求調(diào)研時(shí)間安排等內(nèi)容。要充分珍視用戶的時(shí)間,盡量避免由于準(zhǔn)備工作不足而反復(fù)約見用戶,給用戶造成效率低下的印象。一旦發(fā)生這樣的錯(cuò)誤,以后可能就會(huì)很難約見到用戶。需求獲取的核心內(nèi)容是通過調(diào)研掌握軟件項(xiàng)目的實(shí)際需求,以便于指導(dǎo)整個(gè)項(xiàng)目的實(shí)施。需求獲取的主要方法包括:用戶訪談、問卷調(diào)查、現(xiàn)場(chǎng)觀摩、頭腦風(fēng)暴等方法。在實(shí)際的項(xiàng)目操作過程中,相對(duì)比較明確的需求,我們可采用比較固定的需求獲取方式,比如:?jiǎn)柧碚{(diào)查等。而對(duì)于相對(duì)比較模糊的需求或者說用戶無法清晰表述自己需要的是什么的時(shí)候,我們可采用比較靈活的方式,例如:用戶訪談、現(xiàn)場(chǎng)觀摩等。需求的類型主要包括:業(yè)務(wù)需求、用戶需求和功能需求。在需求獲取的過程中,無論采用哪種方法,我們都需要自頂向下或自下向上去了解用戶真實(shí)的想法。業(yè)務(wù)需求的獲取對(duì)象主要是客戶的高層領(lǐng)導(dǎo),我們都知道,項(xiàng)目的發(fā)起、實(shí)施、最終的成敗很大程度上都取決于高層領(lǐng)導(dǎo),我們需要對(duì)他們進(jìn)行訪談,了解高層領(lǐng)導(dǎo)的公司戰(zhàn)略、發(fā)展方向,更為重要的是獲取他們對(duì)將要開發(fā)的軟件系統(tǒng)的期望,以及希望該系統(tǒng)在解決現(xiàn)有業(yè)務(wù)問題,對(duì)公司整體戰(zhàn)略的支撐方面的期望。幫助我們?nèi)ジ玫乩斫庀到y(tǒng)的宏觀構(gòu)想。在掌握了業(yè)務(wù)需求后,我們需要對(duì)中層管理人員進(jìn)行調(diào)研,核心問題是搞清楚在宏觀戰(zhàn)略目標(biāo)落地的這層,或者說指標(biāo)細(xì)化并負(fù)責(zé)實(shí)施的中層他們對(duì)軟件系統(tǒng)的期望以及實(shí)際要求,他們或希望此系統(tǒng)能夠帶來工作便利,或希望此系統(tǒng)能夠做到精細(xì)化管理,如此等等。但他們都是具體的業(yè)務(wù)部門負(fù)責(zé)人,對(duì)自身的業(yè)務(wù)以及系統(tǒng)對(duì)業(yè)務(wù)的促進(jìn)方面,有比較深刻的體會(huì)。最后,我們需要在掌握了業(yè)務(wù)需求、用戶需求的基礎(chǔ)之上,通過對(duì)IT管理部門、主要操作人員的需求調(diào)研或根據(jù)我們對(duì)需求的理解,細(xì)化出系統(tǒng)的功能需求,這個(gè)需求是最低層次的需求,也是一個(gè)層層落地的過程。
2、主動(dòng)積極了解客戶業(yè)務(wù)和相關(guān)知識(shí)在技術(shù)方面我們可能非常專業(yè),但對(duì)于具體的用戶業(yè)務(wù)可能并不十分清楚。這個(gè)項(xiàng)目對(duì)用戶是否有幫助、某一系統(tǒng)功能是否有用、某一流程處理是否合理,在不了解用戶業(yè)務(wù)的情況下,我們將很難做出判斷。因此只有在了解業(yè)務(wù)的基礎(chǔ)上,我們才和用戶有共同的溝通語言和業(yè)務(wù)理解,才能真正理解系統(tǒng)應(yīng)具有哪些功能。曾在經(jīng)銷商管理系統(tǒng)調(diào)研過程中,由于財(cái)務(wù)方面的知識(shí)有限,使得在對(duì)經(jīng)銷商財(cái)務(wù)部門的調(diào)研中對(duì)部分問題不是特別的理解。向用戶虛心進(jìn)行請(qǐng)教,并在調(diào)研結(jié)束后及時(shí)對(duì)自己的財(cái)務(wù)知識(shí)進(jìn)行了補(bǔ)充。應(yīng)用領(lǐng)域的知識(shí)是無邊無際的,在各種項(xiàng)目的調(diào)研過程中,肯定會(huì)出現(xiàn)由于需求分析者缺乏某一領(lǐng)域的知識(shí)而影響需求分析工作的準(zhǔn)確、順利進(jìn)行。遇到此類問題時(shí),需求分析者應(yīng)虛心向用戶請(qǐng)教,同時(shí)應(yīng)及時(shí)補(bǔ)充應(yīng)用領(lǐng)域的知識(shí)。最好能夠在調(diào)研前做好充分的準(zhǔn)備。
3、引導(dǎo)用戶,使用戶充分表達(dá)自己的想法在與用戶交談中,如何引導(dǎo)用戶說出他們的需求是非常關(guān)鍵的。恰當(dāng)?shù)奶釂?,?huì)使用戶滔滔不絕,充分發(fā)表自己的意見和建議。而不恰當(dāng)?shù)奶釂?,可能?huì)導(dǎo)致用戶無法回答或敷衍了事地進(jìn)行回答。提問可分為封閉式提問和開放式提問。封閉式提問目的明確。如:現(xiàn)在你們的送貨單是手工填寫還是電腦打印?但過多使用封閉式提問,會(huì)導(dǎo)致談話枯燥,讓用戶感覺自己好像在接受審問。開放式提問是請(qǐng)對(duì)方對(duì)某一事物做進(jìn)一步的解釋,可使談話達(dá)到一定的深度和廣度。如:你認(rèn)為目前的工作中存在哪些可以改進(jìn)的地方?開放式提問缺點(diǎn)是容易使談話內(nèi)容偏離主題。因此在談話過程中,應(yīng)采用封閉式和開放式提問相結(jié)合的方式。以簡(jiǎn)單問題開始、從用戶熟悉的內(nèi)容開始。每次只提一個(gè)問題、集中一個(gè)重點(diǎn),寧問勿猜。并盡量避免使用IT相關(guān)的一些術(shù)語,以便用戶能夠很好地理解我們的表達(dá)。
4、對(duì)用戶進(jìn)行正確分類組織中的用戶在很多方面存在差異,例如:使用系統(tǒng)的頻度和程度、計(jì)算機(jī)系統(tǒng)知識(shí)、所進(jìn)行的業(yè)務(wù)過程以及個(gè)人的素質(zhì)和喜好等。根據(jù)用戶的特點(diǎn),可對(duì)用戶進(jìn)行一定的分類。將用戶分類并歸納各自特點(diǎn),詳細(xì)描述他們的個(gè)性特點(diǎn)及任務(wù)狀況,將有助于需求的獲取和分析。不同的問題需要詢問不同的人,對(duì)于操作細(xì)節(jié)的問題,要和實(shí)際負(fù)責(zé)操作的用戶進(jìn)行溝通,而對(duì)于關(guān)乎全局的問題,則要和相應(yīng)的管理層用戶進(jìn)行溝通。
5、應(yīng)實(shí)地了解用戶工作流程實(shí)地觀察用戶執(zhí)行業(yè)務(wù)任務(wù)的過程。了解用戶什么時(shí)候獲得什么數(shù)據(jù),并怎樣使用這些數(shù)據(jù),業(yè)務(wù)處理過程中需要處理哪些單據(jù),需要和哪些角色的用戶發(fā)生關(guān)聯(lián)等。這都將有助于明確產(chǎn)品的功能需求。經(jīng)驗(yàn)證明,與人們面談關(guān)于他們?nèi)绾瓮瓿扇蝿?wù)時(shí)會(huì)有許多限制和不準(zhǔn)確性,而這是任務(wù)觀察可以直接解決的。特別是對(duì)于某些組織中普遍接受的規(guī)則和方法,用戶認(rèn)為你也應(yīng)理所當(dāng)然知道,而不曾提起時(shí)。在用戶需求已經(jīng)確認(rèn)后,將用戶需求進(jìn)行條目化,把每一條需求形成需求開發(fā)任務(wù),借助軟件項(xiàng)目管理平臺(tái),將其直接推送給需求分析人員,而需求分析人員的分析結(jié)果可以通過該平臺(tái)導(dǎo)出成為格式化的需求規(guī)格說明。一旦需求規(guī)格說明編寫任務(wù)完成,管理平臺(tái)直接推送需求評(píng)審任務(wù)給相關(guān)人員。后續(xù)的設(shè)計(jì)、編碼、測(cè)試等任務(wù)都以類似的方式融入流程。
6、分析需求可行性沒錢賺的事我們不干;有錢賺但投不起錢的事不干;有錢賺也投得起錢但沒有可靠的人選,這樣的事也不干。可行性分析主要是針對(duì)某一需求決定是做還是不做。一般可行性主要考慮兩個(gè)方面的因素:技術(shù)和人。技術(shù)方面主要是分析在給定的時(shí)間段內(nèi)是否可實(shí)現(xiàn)所需的功能并滿足產(chǎn)品的質(zhì)量要求等相關(guān)指標(biāo)。很多時(shí)候,用戶的想法在實(shí)際實(shí)施過程中是不現(xiàn)實(shí)的。若一味地求全和盲目遵從用戶的設(shè)想,將為項(xiàng)目的后續(xù)工作帶來很大的風(fēng)險(xiǎn)。因此應(yīng)盡量避免在需求分析中包含技術(shù)實(shí)施上有難度的功能。在曾經(jīng)負(fù)責(zé)的一個(gè)項(xiàng)目中,用戶要求新的管理系統(tǒng)應(yīng)實(shí)現(xiàn)和管理系統(tǒng)的數(shù)據(jù)接口,以方便這些系統(tǒng)中的數(shù)據(jù)導(dǎo)人新的管理系統(tǒng)。許諾提供系統(tǒng)的數(shù)據(jù)接口,將為新系統(tǒng)的成功實(shí)施帶來很大的風(fēng)險(xiǎn)。因?yàn)槭煜み@些系統(tǒng)需要時(shí)間,開發(fā)與它們的接口也需要時(shí)間,而且等這些商業(yè)系統(tǒng)存在多個(gè)不同的版本。因此與外部系統(tǒng)接口的可行性定義為:不可行。對(duì)于復(fù)雜的項(xiàng)目,還應(yīng)從經(jīng)濟(jì)方面和環(huán)境方面進(jìn)行考慮。經(jīng)濟(jì)方面主要從投入、收益、短期、長(zhǎng)遠(yuǎn)利益等方面進(jìn)行分析。環(huán)境方面主要考慮市場(chǎng)環(huán)境和政策因素。需求變更對(duì)大型IT開發(fā)項(xiàng)目成敗有重要影響,既不能一概拒絕客戶的變更要求,也不能一味地遷就客戶,所以,實(shí)施需求變更之前必須做好控制。需求變更控制的目的不是控制變更的發(fā)生,而是對(duì)變更進(jìn)行管理,確保變更有序進(jìn)行。
7、確定需求的優(yōu)先級(jí)別當(dāng)客戶的期望很高、開發(fā)時(shí)間很短且資源有限時(shí),設(shè)定需求的相對(duì)優(yōu)先級(jí)將有助于項(xiàng)目管理人員解決沖突、安排階段性交付并做出必要的取舍。建立每個(gè)需求的重要性有助于規(guī)劃軟件的構(gòu)造,以最少的費(fèi)用提供產(chǎn)品的最大功能。特別是對(duì)漸進(jìn)式的項(xiàng)目,優(yōu)先級(jí)的設(shè)定就顯得更為重要,因?yàn)樵谶@些開發(fā)中,項(xiàng)目時(shí)間安排極為緊迫并且交付日期不可改變,一些低優(yōu)先級(jí)的需求就需要推遲到后續(xù)版本中進(jìn)行實(shí)現(xiàn)或直接取消。當(dāng)眾多用戶因期望不同而就某些需求優(yōu)先級(jí)的設(shè)定難以達(dá)成一致意見時(shí),需求分析者可指出每一需求所需的費(fèi)用、難度、技術(shù)風(fēng)險(xiǎn)或其他特定的與權(quán)衡需求有關(guān)的指標(biāo),來客觀評(píng)價(jià)每一需求的優(yōu)先級(jí)。
8、正確理解需求分析文檔確認(rèn)需求分析是一項(xiàng)繁瑣枯燥的工作,需要和用戶不斷的商討、確認(rèn)和反復(fù)。但大部分用戶并不只做這項(xiàng)工作,特別當(dāng)他被很多其他的事情纏身的時(shí)候。在需求分析文檔上簽字確認(rèn),通常被認(rèn)為是用戶同意需求分析內(nèi)容的標(biāo)志行為。而實(shí)際操作中,簽字確認(rèn)工作并未得到用戶的充分重視。“他們要求我在需求文檔上簽名,于是我就簽了,否則開發(fā)人員不開始編碼。”用戶的這種態(tài)度將可能給項(xiàng)目帶來潛在的風(fēng)險(xiǎn),如不斷地進(jìn)行需求變更等。對(duì)于需要用戶確認(rèn)的需求分析文檔,最好在用戶確認(rèn)前,就文檔內(nèi)容對(duì)用戶進(jìn)行一定的講解,以確保用戶完全理解并認(rèn)可文檔中的內(nèi)容。若用戶對(duì)文檔中的內(nèi)容存在修改意見,則修改后再與用戶進(jìn)行確認(rèn),直至用戶完全認(rèn)可文檔中的內(nèi)容為止。通常為對(duì)項(xiàng)目有一個(gè)整體、準(zhǔn)確的理解,需求分析所包含的內(nèi)容通常大于項(xiàng)目范圍所包含的內(nèi)容。
因此,應(yīng)讓用戶理解對(duì)于某些功能的討論并不意味著即將在系統(tǒng)中實(shí)現(xiàn)它。應(yīng)使用戶明白對(duì)需求分析文檔的簽字確認(rèn)是建立一個(gè)需求的基線,進(jìn)一步的變更可在此基線上通過項(xiàng)目定義的變更過程來進(jìn)行。需求確認(rèn)將給初步的需求開發(fā)工作畫上了雙方都明確的句號(hào),并有助于形成一個(gè)持續(xù)良好的用戶與需求分析人員的關(guān)系,為項(xiàng)目的成功奠定堅(jiān)實(shí)的基礎(chǔ)。將知識(shí)從一個(gè)地方傳送到另一個(gè)地方并不是一件簡(jiǎn)單的事情,而且原始的需求通常是以不完整的形式呈現(xiàn)的。它也許只是在某個(gè)現(xiàn)有系統(tǒng)的用戶腦中,甚至有時(shí)用戶都沒有意識(shí)到他們知道什么。同時(shí)需求分析工作者也應(yīng)在日常工作中加強(qiáng)學(xué)習(xí),不斷總結(jié),使自己的需求分析能力得到不斷的提升。軟件需求管理之所以重要,主要是因?yàn)榻^大多數(shù)項(xiàng)目的失敗主要由需求的理解不到位、需求的變更沒有得到有效控制等原因造成的。因此,這就要求我們?cè)谲浖?xiàng)目的需求管理方面,要下更大的力氣去做好需求的獲取、分析、變更控制,結(jié)合項(xiàng)目管理的相關(guān)理論,如PMBOOK、CMMI等,在項(xiàng)目實(shí)踐中,不斷總結(jié)經(jīng)驗(yàn)教訓(xùn),做好需求管理。