中國(guó)軟件工業(yè)的冤枉路

字號(hào):

軟件開發(fā)的冤枉路
     大部分軟件開發(fā)從業(yè)人員常述說“很難把握客戶的需求”。這句話基本上不應(yīng)該從一個(gè)專業(yè)人員口中說出來,你聽過一個(gè)裝修工人告訴你不能把握他客戶的裝修需求嗎?但這卻是事實(shí)。如何能夠“把握客戶的需求”便成為軟件工程中急需解決的問題。很多專家發(fā)表很多理論,應(yīng)該如何才能夠把握客戶的需求,需要采用那些手段,那些方法等等。。。。但我可以把過去三十多年科技企業(yè)軟件開發(fā)的經(jīng)驗(yàn)告訴大家,我們基本不用去“把握”客戶的“需求”。
     軟件開發(fā)的冤枉路帶來目前 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ā)覺國(guó)內(nèi)軟件從業(yè)人員所談的“需求”和我過去在國(guó)外執(zhí)行軟件開發(fā)時(shí)所談的“需求”有很大的差異。我們?cè)趪?guó)外建設(shè)系統(tǒng)的時(shí)候,『需求』是技術(shù)人員建立的,不是從客戶口中把握的。但國(guó)內(nèi)的軟件從業(yè)人員所談的“需求”是在“調(diào)研”過程中由客戶提出的。坦白說,客戶基本不理解本身的需求,又如何能夠告訴我們所期待的“需求”呢?又如何會(huì)認(rèn)同從業(yè)人員收集到的“需求”及確認(rèn)所謂“需求說明書”呢?試想想,當(dāng)我們要研制一件產(chǎn)品的時(shí)候,我們會(huì)問消費(fèi)者他們對(duì)產(chǎn)品的需求嗎?也許我們會(huì)咨詢他們的意見,但生產(chǎn)商會(huì)綜合消費(fèi)者的意見,本身對(duì)市場(chǎng)的理解,和終客戶群的采購(gòu)“目的”來制定產(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)研期間讓客戶說出本身的需求,好能把握客戶的需求,好能編寫所謂調(diào)研報(bào)告或需求說明書,所謂調(diào)研是進(jìn)行調(diào)查,繼而進(jìn)行研究,這是兩個(gè)工作,但我們常把它變成一個(gè)工作來進(jìn)行。國(guó)內(nèi)對(duì)“ gather requirements” (收集需求)的理解是從客戶的訪談、調(diào)查、研究過程中發(fā)掘客戶的需求,由于客戶對(duì)需求不明確,技術(shù)人員未能把握需求,所以一開始調(diào)研下去便是半天。
    國(guó)外對(duì)需求的詮譯
     國(guó)外軟件行業(yè)基本沒有一個(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)來決定項(xiàng)目的需求。
    國(guó)內(nèi)外的差異
     我們必須認(rèn)識(shí)到一點(diǎn), 軟件開發(fā)的目的是為企業(yè)提升生產(chǎn)率( Productivity improvement ),提升工作效率( efficiency improvement )及建立商業(yè)效益( business benefits ),而不是為了滿足某一些需求。如果項(xiàng)目的目的是為了滿足某一些需求來解決一些運(yùn)營(yíng)上的問題,那么這些便是系統(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ā)是為了提供一套完整工具(軟件加硬件)來完成一個(gè)部門或一家企業(yè)的“運(yùn)營(yíng)目標(biāo)”,如何可以利用科技來使企業(yè)的運(yùn)營(yíng)更理想,是軟件開發(fā)的主要原因。所以當(dāng)我們完成分析后,明確的理解需要那些功能才能夠讓企業(yè)或部門能夠更有效地達(dá)到目標(biāo),這些功能才是系統(tǒng)的真正需求。我們所說的“ gather requirements ”基本上是包括 Fact Findings 和分析( Analysis )兩個(gè)階段的結(jié)果,不是國(guó)內(nèi)所執(zhí)行的“調(diào)研”一個(gè)工作希望直接帶出來的結(jié)果。
    整體解決方案
     當(dāng)完成分析后,有了全面的功能需求,接下來便需要讓客戶認(rèn)識(shí)到他們的終目的需要那些功能和如何可以利用科技(軟件及硬件)的結(jié)合來完成,這便是我們所說的解決方案。這時(shí)候還沒有對(duì)系統(tǒng)進(jìn)行設(shè)計(jì),只是讓客戶認(rèn)識(shí)他們所希望的目標(biāo)需要那些系統(tǒng)功能來完成。我們的目的是讓客戶認(rèn)同只要我們的系統(tǒng)可以提供這些功能,便能夠達(dá)到他們的終目的。這便是確認(rèn)需求的目的。同時(shí)在確認(rèn)這些需求的時(shí)候,把項(xiàng)目的范圍牢牢的建立起來。
    客戶的確認(rèn)
     到這里,相信大家都知道為什么我們?cè)趪?guó)外可以讓客戶確認(rèn)需求而國(guó)內(nèi)的技術(shù)人員卻未能讓客戶確認(rèn)需求了?很多同業(yè)往往感覺困惑,為什么訪談結(jié)果可以讓被訪者接受,但每當(dāng)要求對(duì)方主管確認(rèn)的時(shí)候又被打回頭票呢?在回顧國(guó)內(nèi)把握需求的方法,希望從訪談的用戶口中提供系統(tǒng)的功能需求,這是把我們的專業(yè)工作交給客戶來執(zhí)行,他們又如何能夠完成我們本身做不到的工作呢?縱然訪談的客戶可以很明確的認(rèn)識(shí)到本身工作上的需求,同時(shí)可以確認(rèn)你遞交的調(diào)研報(bào)告或需求說明書,但這只屬于他本人工作崗位及工作層次上的需求,而部門主管及企業(yè)領(lǐng)導(dǎo)的需求是比較全面,肯定與有關(guān)工作人員所提出的需求有所不同,這份調(diào)研報(bào)告又如何能夠讓用戶主管或客戶確認(rèn)呢!
     未能把握整個(gè)解決方案的目標(biāo),未能分析整體工作的過程來建立目標(biāo)的功能,出來的需求只能解決局部的問題,未能做到“解決方案”的目標(biāo)。其實(shí)我們只需要確認(rèn)業(yè)主的項(xiàng)目投資終目標(biāo),從分析的結(jié)果來建立所需的功能,便能夠有效地讓客戶認(rèn)同這些主要功能,認(rèn)同項(xiàng)目地需求。
    開發(fā)的另一誤區(qū)
     我??吹揭恍╅_發(fā)人員把過去一些案例讓客戶觀看,希望客戶從中可以理解本身的需求,然后在建設(shè)的過程中慢慢把需求建立起來,但這種方法往往讓我們無法把握項(xiàng)目的真正范圍,讓范圍不斷蔓延,導(dǎo)致項(xiàng)目不斷延誤,未能有效的完成交付。每一個(gè)客戶有本身的思想,有本身獨(dú)特的需求,有企業(yè)本身的特色,觀看別人的案例只讓客戶增加本身對(duì)結(jié)果的期盼,不能完全解決項(xiàng)目的終目的。尤其是近年來的項(xiàng)目多是概念性的項(xiàng)目。所謂概念性項(xiàng)目是從商業(yè)概念所產(chǎn)生的項(xiàng)目,例如“一個(gè)客戶管理系統(tǒng)”來對(duì)客戶進(jìn)行管理和提供客戶的服務(wù),建立客戶滿意度等類似的項(xiàng)目,又或者是客戶需要建立一個(gè)“市場(chǎng)管理系統(tǒng)”來對(duì)企業(yè)產(chǎn)品銷售進(jìn)行有效的分析及開拓市場(chǎng)方向等項(xiàng)目。這些項(xiàng)目便是我們現(xiàn)在所說的“信息化”項(xiàng)目的建設(shè)。技術(shù)人員絕對(duì)不能夠把握這些概念性項(xiàng)目的需求,也成為目前國(guó)內(nèi)信息化過程的延誤和信息化結(jié)果的大障礙。九零年代中期,國(guó)際企業(yè)開始進(jìn)行信息化,在無數(shù)慘痛教訓(xùn)后理解到技術(shù)人員本身的極限,對(duì)商業(yè)運(yùn)營(yíng)的終目標(biāo)并不認(rèn)識(shí),所以特意在軟件行開發(fā)項(xiàng)目中建立一個(gè)新崗位,商業(yè)分析師( Business Analyst ),商業(yè)分析師可以是資深的系統(tǒng)分析師,但必須曾經(jīng)在工作的過程中對(duì)某一個(gè)行業(yè)的運(yùn)營(yíng)相當(dāng)理解,這包括在某個(gè)行業(yè)中曾經(jīng)負(fù)責(zé)開發(fā)多種不同的項(xiàng)目,對(duì)企業(yè)的運(yùn)營(yíng)需求和運(yùn)營(yíng)方向全面理解。也可能是一個(gè)部門的業(yè)務(wù)經(jīng)理,經(jīng)過培訓(xùn)后理解如何進(jìn)行分析,如何建立商業(yè)模式等方法。才負(fù)責(zé)項(xiàng)目初期的信息收集,分析及設(shè)計(jì)工作。目的是因?yàn)榧夹g(shù)人員對(duì)企業(yè)的業(yè)務(wù)并不認(rèn)識(shí),很難把握客戶的真正需求,改由商業(yè)分析師來理解客戶建立系統(tǒng)的終目的,從目的中建立商業(yè)模式( Business Model ),再?gòu)纳虡I(yè)模式中建立主要的工作模塊( Process Modules ),從工作模塊中建立運(yùn)營(yíng)流程( Business procedures ),再?gòu)倪\(yùn)營(yíng)流程中建立項(xiàng)目需求,這時(shí)候才轉(zhuǎn)交技術(shù)人員建立項(xiàng)目功能規(guī)格。
     我國(guó)要改善軟件工程的困境,必須理解本身的問題,才能夠提升我國(guó)軟件工業(yè)的發(fā)展?jié)摿?。高校的老師及?dǎo)師必須理解我國(guó)軟件工業(yè)過去所走的冤枉路,才能夠培育更優(yōu)秀的技術(shù)人員和軟件工程管理人員。軟件服務(wù)商的領(lǐng)導(dǎo)必須認(rèn)識(shí)本身企業(yè)的缺點(diǎn),盲目去進(jìn)行各種認(rèn)證只能治標(biāo),不能全面解決企業(yè)本身的服務(wù)缺憾,需要建立本身的體系及制度,建立企業(yè)的開發(fā)文化,更需要全力提升管理人員,對(duì)軟件工程的開發(fā)進(jìn)行有效管理。而各應(yīng)用單位的領(lǐng)導(dǎo)更需要認(rèn)識(shí)本身必須投入項(xiàng)目的開發(fā)過程,才能夠有效的讓項(xiàng)目投資帶來回報(bào)。