軟件開發(fā)的冤枉路
大部分軟件開發(fā)從業(yè)人員常述說(shuō)“很難把握客戶的需求”。這句話基本上不應(yīng)該從一個(gè)專業(yè)人員口中說(shuō)出來(lái),你聽過(guò)一個(gè)裝修工人告訴你不能把握他客戶的裝修需求嗎?但這卻是事實(shí)。如何能夠“把握客戶的需求”便成為軟件工程中急需解決的問(wèn)題。很多專家發(fā)表很多理論,應(yīng)該如何才能夠把握客戶的需求,需要采用那些手段,那些方法等等。。。。但我可以把過(guò)去三十多年科技企業(yè)軟件開發(fā)的經(jīng)驗(yàn)告訴大家,我們基本不用去“把握”客戶的“需求”。
軟件開發(fā)的冤枉路帶來(lái)目前 IT 項(xiàng)目管理的另一段冤枉路,我們是否還需要繼續(xù)朝這條冤枉路走下去,還是找尋我們軟件工程的正確路線?希望各從業(yè)人員自己判斷,并適當(dāng)?shù)淖龀鼋Y(jié)論。
國(guó)內(nèi)對(duì)需求的解釋
從 72 年開始從事軟件開發(fā),到 79 年開始成為開發(fā)小組主管,到 84 年正式成為項(xiàng)目經(jīng)理,一直到今天已經(jīng)積累了三十多年的開發(fā)及二十多年的管理經(jīng)驗(yàn),最近這兩年在國(guó)內(nèi)從事教育及咨詢的工作,發(fā)覺(jué)國(guó)內(nèi)軟件從業(yè)人員所談的“需求”和我過(guò)去在國(guó)外執(zhí)行軟件開發(fā)時(shí)所談的“需求”有很大的差異。我們?cè)趪?guó)外建設(shè)系統(tǒng)的時(shí)候,『需求』是技術(shù)人員建立的,不是從客戶口中把握的。但國(guó)內(nèi)的軟件從業(yè)人員所談的“需求”是在“調(diào)研”過(guò)程中由客戶提出的。坦白說(shuō),客戶基本不理解本身的需求,又如何能夠告訴我們所期待的“需求”呢?又如何會(huì)認(rèn)同從業(yè)人員收集到的“需求”及確認(rèn)所謂“需求說(shuō)明書”呢?試想想,當(dāng)我們要研制一件產(chǎn)品的時(shí)候,我們會(huì)問(wèn)消費(fèi)者他們對(duì)產(chǎn)品的需求嗎?也許我們會(huì)咨詢他們的意見,但生產(chǎn)商會(huì)綜合消費(fèi)者的意見,本身對(duì)市場(chǎng)的理解,和最終客戶群的采購(gòu)“目的”來(lái)制定產(chǎn)品功能需求,最后成為產(chǎn)品的規(guī)格。才投入生產(chǎn),推廣到市場(chǎng)中。這個(gè)道理很簡(jiǎn)單,但我國(guó)的軟件工業(yè)卻認(rèn)為軟件工程與產(chǎn)品開發(fā)不是一樣的,不能用同一直方法處理,一直在走冤枉路。
從項(xiàng)目開始進(jìn)行“調(diào)研”(另一個(gè)軟件工業(yè)的重大誤區(qū)),對(duì)客戶的基層人員進(jìn)行訪談,希望能夠在調(diào)研期間讓客戶說(shuō)出本身的需求,好能把握客戶的需求,好能編寫所謂調(diào)研報(bào)告或需求說(shuō)明書,所謂調(diào)研是進(jìn)行調(diào)查,繼而進(jìn)行研究,這是兩個(gè)工作,但我們常把它變成一個(gè)工作來(lái)進(jìn)行。國(guó)內(nèi)對(duì)“ gather requirements” (收集需求)的理解是從客戶的訪談、調(diào)查、研究過(guò)程中發(fā)掘客戶的需求,由于客戶對(duì)需求不明確,技術(shù)人員未能把握需求,所以一開始調(diào)研下去便是半天。
國(guó)外對(duì)需求的詮譯
國(guó)外軟件行業(yè)基本沒(méi)有一個(gè)所謂“調(diào)研”的概念。我們?cè)陧?xiàng)目的起始階段只有“ factfinding ”(或 FF ,即“找尋事實(shí)”)。顧名思義, FF 的目的是理解客戶如何執(zhí)行工作,技術(shù)人員對(duì)客戶進(jìn)行訪談,目的并不是把握客戶的需求,目的是理解客戶目前如何執(zhí)行本身的工作。訪談報(bào)告只包括目前工作如何在部門中實(shí)施,是現(xiàn)狀的描述。所以往往能夠得到客戶的認(rèn)同及確認(rèn)。
在訪談結(jié)果后開始對(duì)現(xiàn)狀進(jìn)行分析,考慮整個(gè)工作流程是否合理,如何才能夠達(dá)到項(xiàng)目的目標(biāo),從如何達(dá)到項(xiàng)目的目標(biāo)來(lái)決定項(xiàng)目的需求。
國(guó)內(nèi)外的差異
我們必須認(rèn)識(shí)到一點(diǎn), 軟件開發(fā)的目的是為企業(yè)提升生產(chǎn)率( Productivity improvement ),提升工作效率( efficiency improvement )及建立商業(yè)效益( business benefits ),而不是為了滿足某一些需求。如果項(xiàng)目的目的是為了滿足某一些需求來(lái)解決一些運(yùn)營(yíng)上的問(wèn)題,那么這些便是系統(tǒng)維護(hù)項(xiàng)目,不是系統(tǒng)開發(fā)項(xiàng)目。這些項(xiàng)目的需求通常比較明確,客戶清楚的知道需要增加那些功能,可以直接告訴技術(shù)人員有關(guān)功能的需求。在現(xiàn)有系統(tǒng)中附加該功能,便能夠完成項(xiàng)目,這方面的需求絕對(duì)可以得到各階層人員的認(rèn)同。
軟件開發(fā)是