先說(shuō)一個(gè)小笑話。有一個(gè)生產(chǎn)隊(duì)隊(duì)長(zhǎng),他對(duì)專家說(shuō):“現(xiàn)在我們生產(chǎn)隊(duì)的地越來(lái)越多,牛越來(lái)越忙不過來(lái)了。我想要這么一種牛,他吃的草和普通牛一樣多,但是干的活是普通牛的十倍?!睂<艺f(shuō):“這種牛是可以造出來(lái)的,現(xiàn)在有基因工程?!标?duì)長(zhǎng)說(shuō):“好吧,你給這造幾頭這樣的牛?!庇谑菍<艺业搅松飳?shí)驗(yàn)室,讓生物實(shí)驗(yàn)室的人搞一個(gè)基因工程,把牛造出來(lái)。于是工程浩大,投資無(wú)法保證,合作多半是不愉快的收?qǐng)觥?
現(xiàn)實(shí)世界里很多人分析需求的過程就類似于這位專家,他們把注意力放在用戶提出的功能點(diǎn)上,而對(duì)用戶的實(shí)際需求沒有興趣。有不少軟件公司和程序員,其實(shí)都在做類似的基因工程。如果這個(gè)專家把注意力放在生產(chǎn)隊(duì)長(zhǎng)的業(yè)務(wù)需求上,而不是太在乎他提出的功能點(diǎn),他會(huì)說(shuō):“我認(rèn)識(shí)一個(gè)賣拖拉機(jī)的,可以帶你去看看?!?BR> 軟件的維護(hù)為什么這么痛苦,一個(gè)很重要的原因在于:需求已經(jīng)被遺忘了。
需求是對(duì)用戶具有直接商業(yè)價(jià)值的活動(dòng),而不應(yīng)該牽涉到任何的功能實(shí)現(xiàn)方式。實(shí)現(xiàn)同一個(gè)需求可以使用多個(gè)方案,每個(gè)方案有自己的功能方式,在某個(gè)方案中至關(guān)重要的功能點(diǎn),也許在另一個(gè)方案中根本無(wú)關(guān)緊要。
瀑布式的開發(fā)過程,首先是由一批懂得用戶業(yè)務(wù)的專家去調(diào)查用戶的需求,分析出這個(gè)系統(tǒng)應(yīng)該具有哪些功能,形成一個(gè)非常重要的文件——《xxx系統(tǒng)需求規(guī)格說(shuō)明書》??蛻粽J(rèn)可了這個(gè)《說(shuō)明書》,在上面簽字蓋章,加入合同附件,到時(shí)候項(xiàng)目驗(yàn)收就以此為準(zhǔn)。這時(shí)候,需求就已經(jīng)分解成了一個(gè)個(gè)功能點(diǎn),從這時(shí)候開始,需求本身就漸漸被人們遺忘。設(shè)計(jì)人員圍繞著這些功能點(diǎn)進(jìn)行工作,考慮用什么樣的技術(shù)手段把功能點(diǎn)制造出來(lái)。功能點(diǎn)的制作細(xì)節(jié)形成了另外一份重要的文件——《xxx項(xiàng)目設(shè)計(jì)規(guī)格說(shuō)明書》。這個(gè)《設(shè)計(jì)規(guī)格說(shuō)明書》交給程序員去進(jìn)行編碼。
這樣的做法在開發(fā)中已經(jīng)形成了很大的問題。
首先,面對(duì)這樣的《需求規(guī)格說(shuō)明書》,設(shè)計(jì)人員已經(jīng)無(wú)法知道最初的需求是什么。假如這個(gè)《需求規(guī)格說(shuō)明書》中的功能點(diǎn)沒有出現(xiàn)互相矛盾的情況,而他們串起來(lái)卻和用戶的需求不同,設(shè)計(jì)人員沒辦法發(fā)現(xiàn)這樣的情況,編碼人員也無(wú)法發(fā)現(xiàn)。假如測(cè)試也是根據(jù)這個(gè)《需求規(guī)格說(shuō)明書》來(lái)做的,測(cè)試人員也發(fā)現(xiàn)不了。直到最后客戶看見這個(gè)程序展現(xiàn)在他們面前。需求的分析需要在隨后的過程中不斷得到反饋,傳統(tǒng)的過程不是沒有反饋,而是反饋的時(shí)間太長(zhǎng)了。
其次,由于設(shè)計(jì)人員已經(jīng)無(wú)法知道基本的需求是什么,也就無(wú)法對(duì)業(yè)務(wù)進(jìn)行建模。這樣的需求分析是以開發(fā)人員的需要為核心的,可是結(jié)果恰恰妨礙了開發(fā)人員對(duì)需求的理解。如果開發(fā)人員對(duì)用戶的業(yè)務(wù)過程不甚了解,他們只有一種選擇:不要試圖去了解需求了,直接按照這些功能點(diǎn)做吧。于是,他們建立的對(duì)象模型就不是以需求為核心的,而是以功能、界面為核心的。我見到過很多這樣的系統(tǒng),開發(fā)者確實(shí)有很高的抽象思維水平,程序中設(shè)計(jì)了非常巧妙的控制器和界面,可以很方便的進(jìn)行開發(fā)和變更。唯獨(dú)業(yè)務(wù)層的對(duì)象非常簡(jiǎn)陋,一旦發(fā)生實(shí)際業(yè)務(wù)的變更,仍然十分辛苦。
更大的困難發(fā)生在維護(hù)程序的時(shí)候。
假設(shè)有一個(gè)移動(dòng)通信公司需要制造一個(gè)系統(tǒng),用來(lái)解決手機(jī)用戶入網(wǎng)的問題。這個(gè)需求有下面幾個(gè)要素:
1:用戶付錢,得到一個(gè)SIM卡和一個(gè)號(hào)碼,把這個(gè)SIM卡裝到手機(jī)里就可以通話。
2:營(yíng)業(yè)員收的錢要記錄下來(lái),提供給稽核人員,現(xiàn)金和帳目必須是平的。
3:用戶付的話費(fèi)要?jiǎng)澣胨约旱膸?,可以打印票?jù)。
4:用戶要在入網(wǎng)合同上簽字,然后營(yíng)業(yè)員把合同歸檔。
這幾個(gè)要素都是和通信公司的商業(yè)利益直接相關(guān)的,沒有牽涉到任何系統(tǒng)實(shí)現(xiàn)方式。如果不考慮通信公司內(nèi)部的業(yè)務(wù)規(guī)范,實(shí)現(xiàn)方案可以有幾十種,下面列舉兩種:
1:S
項(xiàng)目經(jīng)理勝任力免費(fèi)測(cè)評(píng)PMQ上線啦!快來(lái)測(cè)測(cè)你排多少名吧~
http://m.opto-elec.com.cn/pmqhd/index.html