一個(gè)典型軟件項(xiàng)目的故事
ACME公司的Widgets系統(tǒng)出了點(diǎn)問題。這個(gè)系統(tǒng)被他們用來管理器材的庫存,當(dāng)初設(shè)計(jì)時(shí)沒考慮到如今這樣大量的數(shù)據(jù)的增長(zhǎng)。他們的員工因?yàn)檫@個(gè)問題備受折磨。很顯然,需要想辦法解決這個(gè)問題,讓系統(tǒng)恢復(fù)正常。
經(jīng)過對(duì)本地軟件公司的一番篩選,ACME聯(lián)系到了Hamster軟件公司,看看他們能否解決這個(gè)庫存系統(tǒng)中的問題。他們很喜歡Hamster軟件公司的網(wǎng)站,他們沒有任何軟件開發(fā)的經(jīng)驗(yàn),但根據(jù)網(wǎng)站的外觀,他們估計(jì)這個(gè)軟件公司能解決他們的問題。這件事上他們并沒有做錯(cuò),但也不是很對(duì)。
于是,ACME公司和Hamster軟件公司開始討論如何解決他們庫存系統(tǒng)中的問題。私底下,Hamster軟件公司的開發(fā)團(tuán)隊(duì)知道以前從未處理過類似這樣的問題,然而,他們有一群很能干的小伙,他們相信一定能把這個(gè)問題解決掉。
基于一個(gè)不符合實(shí)際情況的預(yù)估,ACME公司和Hamster公司達(dá)成協(xié)議一起努力來解決問題。這是他們犯的第一個(gè)錯(cuò)誤。Hamster公司的開發(fā)團(tuán)隊(duì)認(rèn)為,對(duì)現(xiàn)有的軟件進(jìn)行簡(jiǎn)單的修改就能滿足他們的需求,并在此假設(shè)上制定出了工程估算。
起初,按照ACME公司認(rèn)可的設(shè)計(jì)方案,Hamster公司的開發(fā)進(jìn)展神速。不久之后,事情看起來,他們的確是有可能按照最初的設(shè)計(jì)預(yù)算來完成任務(wù)。
除了有一些bug需要解決。
起初的bug都很小,就Hamster公司設(shè)定這種一日千里的開發(fā)速度而言,ACME公司理解,開發(fā)進(jìn)行中的軟件不可能做到十全十美。他們很高興能 開始使用改造中的系統(tǒng),對(duì)于出現(xiàn)的問題,開發(fā)團(tuán)隊(duì)已經(jīng)有了更好的方案,所以,看起來,邊改造邊使用是沒有問題的——盡管有些bug存在。
但是,Hamster軟件公司的小伙都很能干。沒有人希望bug的出現(xiàn),但因?yàn)殚_發(fā)團(tuán)隊(duì)專注于解決擴(kuò)容問題、寫 代碼來升級(jí)系統(tǒng),所以,有時(shí)候,很容易會(huì)發(fā)生一些意想不到的事情(bug)。隨著開發(fā)的進(jìn)行,項(xiàng)目規(guī)模的擴(kuò)大,記住代碼中各種編寫策略的背后原因變得越來 越困難,但是,他們是群能干的小伙,沒有他們處理不了的問題。
Richard Hammond——Hamster公司的創(chuàng)始人之一,是一個(gè)優(yōu)秀的程序員,他對(duì)這個(gè)項(xiàng)目做出了巨大的貢獻(xiàn)。一天,Richard收到了來自Fifth Speed公司的聘請(qǐng),F(xiàn)ifth Speed公司是一家非常出名的軟件公司,Richard無法拒絕。Hamster公司的開發(fā)團(tuán)隊(duì)很沮喪,但對(duì)于這種事情,他們無能為力,只好頂著壓力繼 續(xù)開發(fā)。
如果這些bug之前一些麻煩,而Richard的離去相當(dāng)于火上澆油。他的腦袋里裝有大量的關(guān)于每個(gè)東西為應(yīng)該如何運(yùn)作的知識(shí),而現(xiàn)在,軟件只能在沒有他的情況下獨(dú)自完成工作。各種征兆開始顯露,Hamster公司開發(fā)的軟件里有些東西并沒有按要求運(yùn)行。
Bug成倍增加。每一次新的版本的發(fā)布看起來都會(huì)導(dǎo)致越來越多之前已經(jīng)完成的功能不能用。
作為解釋軟件應(yīng)該做成什么樣的唯一參考來源的規(guī)格說明書,如今已經(jīng)增長(zhǎng)到?jīng)]有哪個(gè)人能單獨(dú)掌握。
ACME公司距離他們解決庫存系統(tǒng)問題的目標(biāo)看起來是越來越遙遠(yuǎn)。每一次新版本的發(fā)布都是一次前進(jìn),但也是一次后退。他們用這個(gè)系統(tǒng)來提升他們的業(yè)務(wù),但bug不僅影響了員工的使用,而且影響到了客戶。
公司實(shí)際業(yè)務(wù)上的損失有這些bug的很大功勞。沒錯(cuò),ACME公司庫存系統(tǒng)原始問題已經(jīng)解決了,但卻引入了其它問題,算起來得不償失。這個(gè)龐大的系統(tǒng)本以為能解決ACME公司所有的問題,但現(xiàn)在看起來更像是一個(gè)負(fù)擔(dān),而不是資產(chǎn)。它每月還在不斷的吞噬巨大的財(cái)力用于維護(hù),遠(yuǎn)看不到盡頭。
可不幸的是,這是如今大多數(shù)軟件項(xiàng)目的現(xiàn)狀。糟糕的計(jì)劃,沒譜的預(yù)算,無休無止的“維護(hù)”,使得我們軟件開發(fā)世界對(duì)真正的軟件項(xiàng)目失去信心。
只有我們共同努力,以整個(gè)行業(yè)之力,才能改進(jìn)軟件項(xiàng)目中估算和不切實(shí)際的期望等相關(guān)問題。
在試圖解決問題前,一定要盡量理解問題。
測(cè)試你的代碼,即使不為自己,也是為下一個(gè)接手你工作的人。
英文原文:The story of a typical software project.
譯文鏈接:http://www.aqee.net/the-story-of-a-typical-software-project/