需求分析是建立與客戶之間的橋梁關系的重要工作環節,只有做好需求分析,技術人員才明白客戶到底需要什么樣的產品。避免開發過程中因為不了解需求而走彎路,浪費大量的時間和金錢。
要做好需求分析,就必須要做好與客戶討論的需求。中培課堂《需求分析與管理最佳實踐》培訓專家郭老師在這里給大家介紹一下應該如何做好討論業務需求。
郭老師指出,以往我們常常認為,需求分析是一件最簡單的事情??蛻粽f他們需要做一個什么軟件,有些什么功能,我們照著做就可以了,所謂的需求分析員就是需求的記錄員。我要說,這是一個極大的錯誤,許多失敗的軟件項目,或者說軟件項目中的需求問題,大多都源于此。經過人們多年的研究發現,在需求分析過程中,客戶存在的最大問題就是提不出正確的需求,這表現為幾種形式:
1. 由于對軟件不了解,客戶提不出需求,不知道軟件最終會做成什么樣子。這類客戶在需求討論過程中,往往只能描述目前自己手工管理的方式是怎樣的,不知道計算機會怎樣管理。
2. 能提出一些業務需求,但當軟件做出來擺在自己面前時,需求就變了。這類客戶,他們能熟練使用電腦,對信息化管理是清楚的。他們提出的業務需求從整體上應當是八九不離十的。但是,由于沒有實物,在軟件中的一些具體操作并沒有完全想清楚。因此,當軟件真正做出來擺在自己面前時,甚至經過一系列流程操作以后,會對一些操作提出變更需求。他們正如那句經典的話說的:“I have changed when it saw it.”
3. 能非常詳細地提出業務需求,甚至有時候該怎么做的提出來了。這類客戶,參與過很多軟件信息化建設,甚至有些還是軟件開發的半專業人士。但是他們提出的業務需求過于具體,甚至怎樣實現都說出來了,但這些有時候不是最佳設計方案、可能在技術上難于實現,甚至有些就是過于理想化而不可實現。
因此,我在進行需求研討的時候,首先跟客戶探討的不是軟件功能,而是客戶現有的業務知識,用專業的話叫“業務領域分析”??蛻衄F有的業務流程是什么樣的,都有些什么操作?客戶在業務中都有些什么事物,什么專用名詞,都是怎樣定義的,相互之間的關系是什么?客戶在每一項操作中的目的是什么,為什么要這樣做,他們制作的手工報表都說明了什么問題?后面我會更加詳細地描述怎么進行業務領域分析。
在認識了客戶的業務領域之后,我們才能去分析他們提出的所有原始需求。他們為什么要提出這項需求,提這項需求的目的是什么?只有經過這樣的分析,我們才能深刻地理解需求,進而運用我們的專業知識,提出更加合理的技術方案。但非常遺憾,我們在需求分析中常常不是這樣做的,甚至當軟件都開發出來了,需求分析人員都說不出客戶為什么要提出這個需求,更談不上了解業務操作流程。一句經典的話是:“客戶讓我們這樣做的?!?/p>
總之,我們做需求分析,眼界不能僅僅停留在軟件本身,應當更開闊一些,應當擴展到跟這個業務有關的那些領域知識中。
當然,另一個極端就是為了開發軟件,無限地擴大學習領域知識的范圍。為了開發財務軟件去考會計師,為了開發稅務軟件去學習稅法等等。開發軟件不是讓我們成為這個領域的專家。我們學習領域知識是為了更好地理解和開發軟件,是學習與這個軟件有關的領域知識,而不是成為一個專家。
在客戶提出的所有原始需求中那些與業務實現有關的需求都是無效的需求,它們僅僅只能作為我們的一個參考。什么是與業務實現有關的需求呢?比如要求做成什么界面,數據要求怎樣處理,等等。為什么是無效的呢?因為客戶畢竟是非專業,我們應當有這種自信,在理解客戶真實意圖以后,能夠提出比客戶更優的解決方案。
還有一些是技術難于實現或者根本就無法實現的需求,我們應當耐心地說服和引導客戶,并給他提出一個更加合理的方案。注意最后一句話:“給他提出一個更加合理的方案”。蒼白的拒絕客戶往往會讓客戶產生抵觸情緒,但當我們提出一個更加合理的方案時,客戶往往會欣然接受,當然這是在我們對客戶提出的業務需求的真實意圖進行深入分析之后。
認識到這一點非常重要,為了更加清楚地說明這一點,郭老師舉了一個例子。有一次他一個學員給客戶做一個價格管理系統時,客戶提出要做一個動態報表的需求。這個動態報表要求能讓客戶從無到有,完全自由的定制自己的報表。毫無疑問,這是一個典型的不切實際的業務需求。接到這個需求以后,這個學員將它作為一個疑問,在整個需求調研過程中著力進行了考察,明白了客戶為什么提出這樣的需求。
當客戶在向他們的客戶報價時,他們的客戶在各個方面都要求他們報出價格細目,而且不同的客戶要求他們報的價格細目格式還不一樣。但經過仔細分析,發現他們面對的客戶就是固定的幾家,而這幾家的要求的報表雖然格式不盡相同,但其數據項大體是相同的。
最后,我們給客戶提出兩個方案,一個是按照客戶所說的動態報表,但要求客戶在制作報表時必須能夠詳細設計報表中數據項的來源、項目的類型,以及繪制報表格式,讓他們意識到,即使做出來,作為非專業的他們也是很難自己完成的。同時,我們提出另一個方案:我們為客戶準備好他們需要填寫的各種客戶報表所需的所有數據項,讓他們自由刪減。同時,為他們的不同客戶提供各自相應的報表模板,這些模板可以在少量的范圍內進行修改,以此滿足他們的客戶的不同需要。當客戶拿到這樣的方案,既能滿足他們自己的需要,還操作簡便、易懂、不費事,當然就欣然接收啦。
因此,需求分析不是一種簡單的你說我記的收集活動,而是在大量業務分析與技術可行性分析基礎上的分析活動。只有建立在這種分析基礎上的軟件研發,才能保證需求的正確與變更的可控。