1 引言
如果你是一個(gè)程序員,可能常常為不能按時(shí)完成任務(wù)而苦惱。如果你是一個(gè)項(xiàng)目經(jīng)理,可能會覺得開發(fā)符合預(yù)算和進(jìn)度要求的軟件簡直難于上青天。實(shí)際上,軟件項(xiàng)目常常嚴(yán)重超期或超出預(yù)算仍是困擾著絕大多數(shù)軟件機(jī)構(gòu)的難題。據(jù)美國一份評估報(bào)告顯示,17個(gè)主要的國防部軟件合同中,平均28個(gè)月的進(jìn)度計(jì)劃推遲了20個(gè)月才完成。一個(gè)4年應(yīng)該完成的任務(wù),7年還未提交,其中沒有一個(gè)項(xiàng)目按時(shí)完成。由于存在軟件問題,B1轟炸機(jī)的部署被推遲了,同樣的原因,580億美元的A12飛機(jī)計(jì)劃也被部分取消了。持續(xù)了二三十年的軟件危機(jī)為什么愈演愈烈?軟件開發(fā)為什么如此之難?本文試結(jié)合作者的體會對軟件開發(fā)的困難之處做一剖析,并提出一些建議。
2 困難所在
2.1 極大的復(fù)雜性
大多數(shù)大型軟件軟件產(chǎn)品由幾十甚至幾百萬行源代碼構(gòu)成,例如:Windows95操作系統(tǒng)由大約1100萬行代碼組成。每一行代碼都可能影響到程序的其它部分,并且各個(gè)部分之間都可能互相影響。這樣一個(gè)錯(cuò)綜復(fù)雜的巨大系統(tǒng)當(dāng)中,每一個(gè)小小的錯(cuò)誤都可能導(dǎo)致整個(gè)系統(tǒng)崩潰。有些大型軟件,例如Windows,可能是人類曾經(jīng)建造過的最復(fù)雜的事物之一,從古至今最復(fù)雜的建筑都無法與之相比。
2.2 高度的不確定性
一個(gè)軟件項(xiàng)目從一開始就存在許多不確定性因素。其一:用戶需求很難確定。這是因?yàn)檐浖_發(fā)者很難詳細(xì)了解用戶的需求,甚至用戶在看到產(chǎn)品之前也不清楚自己到底需要什么,所以從項(xiàng)目開發(fā)的自始至終都可能會有新的需求提出,致使系統(tǒng)結(jié)構(gòu)不斷修改,最終面目全非。其二:設(shè)計(jì)不完全可以預(yù)測。有時(shí),一個(gè)設(shè)計(jì)時(shí)認(rèn)為可行的方案,在實(shí)現(xiàn)時(shí)可能行不通,或者最初的設(shè)計(jì)方案存在很大的缺陷而沒有及時(shí)發(fā)現(xiàn),或者突然一個(gè)設(shè)計(jì)時(shí)沒有料到的技術(shù)難點(diǎn)阻擋了項(xiàng)目的進(jìn)度。從設(shè)計(jì)到實(shí)現(xiàn)實(shí)際上有著很大的不可預(yù)測性。其三:用戶需求不斷變化,如果最初的用戶需求沒有了解的很清楚,可能整個(gè)項(xiàng)目很快就會陷在不斷變化的需求之中不能自拔。其四:客觀條件的不確定性。在項(xiàng)目的進(jìn)展過程中,可能會有人員的流動(dòng),可能會有資源的調(diào)整,可能會有這樣或那樣的客觀條件的限制而阻擋了項(xiàng)目的正常進(jìn)行。在這樣高度的不確定之中,在較早階段精確估計(jì)一個(gè)項(xiàng)目不只是很難地,甚至是不可能的。
3 造成工期延誤的原因
3.1 開發(fā)人員的過分樂觀
許多開發(fā)人員傾向于一切都會進(jìn)展順利,這種盲目的自信對于項(xiàng)目開發(fā)來說是不對的。如果按照最樂觀的估計(jì),可能絕大多數(shù)任務(wù)都不能按時(shí)完成,因?yàn)樵谲浖_發(fā)中不確定因素實(shí)在太多了。對于任務(wù)的復(fù)雜性和難度,對于自己能支配的時(shí)間,對于可能的突發(fā)事件的干擾等沒有清楚的認(rèn)識和估計(jì),即使對自己的時(shí)間表作出保證,也可能常常無法按時(shí)交貨。
3.2 來自外部的壓力
作為項(xiàng)目的管理者或者客戶都希望項(xiàng)目早日結(jié)束,因而為項(xiàng)目設(shè)置了一個(gè)個(gè)時(shí)間節(jié)點(diǎn)。
這些時(shí)間節(jié)點(diǎn)可能設(shè)置的根本就不可能實(shí)現(xiàn)或者實(shí)現(xiàn)起來會有很大難度,但是開發(fā)人員為了按時(shí)完工只好加班加點(diǎn),以最快的速度完成要求的功能,而對于系統(tǒng)結(jié)構(gòu)的考慮就會放到次要的位置上去,這樣就為今后程序的維護(hù)埋下了隱患。更可怕的是一個(gè)個(gè)bug會隨著壓力的增大而產(chǎn)生,最后造成更大量的返工。程序就象程序員的孩子一樣,每個(gè)人都希望自己的孩子茁壯成長,但是沒有辦法,多生快生就不能優(yōu)生。
3.3 項(xiàng)目以外事情的干擾
如果一個(gè)項(xiàng)目的開發(fā)人員經(jīng)常被項(xiàng)目以外的事情所干擾、牽制,不能全身心地投入到項(xiàng)目開發(fā)之中,常常會因此而影響了進(jìn)度。這種現(xiàn)象在規(guī)模較小的軟件企業(yè)中比較多見,一個(gè)開發(fā)人員經(jīng)常身兼多職,甚至同時(shí)參與多個(gè)項(xiàng)目的開發(fā)。如果其它項(xiàng)目急于完工,則該項(xiàng)目只好被拖延。
3.4 項(xiàng)目管理的混亂
軟件企業(yè)內(nèi)部項(xiàng)目管理的混亂似乎是一個(gè)世界性的通病??突仿〈髮W(xué)軟件工程研究所(SEI)建立了一套標(biāo)準(zhǔn),用來衡量軟件企業(yè)從混亂到持續(xù)發(fā)展的這種狀態(tài),這就是就是CMM五級標(biāo)準(zhǔn)。第一級最為混亂,每升高一級情況都有所好轉(zhuǎn),第五級狀況最好。 到2001年1月底,全世界只有1654家軟件公司和機(jī)構(gòu)通過了不同級別的認(rèn)證。從下圖可以看出,這是一個(gè)金字塔型的分布狀態(tài),圖上只顯示了二級和二級以上的企業(yè),而處在金字塔最低層的那些一級企業(yè)的數(shù)目不知有多少個(gè)1654家!所以從世界范圍來看,軟件管理的總體水平還是很低的。
3.5 開發(fā)人員的不足
全世界對于人才的競爭可能在IT界表現(xiàn)的最為激烈。一方面人才的絕對數(shù)量不足導(dǎo)致了許多企業(yè)不能招到自己急需的人才;另一方面人才的流動(dòng)也導(dǎo)致了企業(yè)很容易失去自己的員工。一個(gè)項(xiàng)目如果缺少人手或人才頻繁流動(dòng),將不能保證項(xiàng)目的正常進(jìn)展。
4 如何避免工期延誤
4.1 對不確定性做好充分準(zhǔn)備
中國人都對《三國演示》中的赤壁之戰(zhàn)非常熟悉,諸葛亮在赤壁埋伏了數(shù)路伏兵對曹操進(jìn)行圍追堵截,一招不行,還有下一招,對整個(gè)過程做了非常周密的準(zhǔn)備和部署,所以大獲全勝。軟件開發(fā)亦是如此,在項(xiàng)目展開的初期就應(yīng)該對過程中可能會出現(xiàn)各種的情況有所準(zhǔn)備,才不至于車到山前無路可走。
4.2 立足于產(chǎn)品的靈活性
設(shè)計(jì)的靈活性是一個(gè)軟件產(chǎn)品的靈魂。好的設(shè)計(jì)總是容易維護(hù)和升級,而不好的設(shè)計(jì)卻會為今后的維護(hù)帶來很大的麻煩,甚至整個(gè)產(chǎn)品都可能被廢棄重來。因此在軟件開發(fā)的的初期應(yīng)花很大力氣致力于整體設(shè)計(jì),而不是急于編碼,磨刀不誤砍柴工,前期的投入會獲得高額回報(bào)的。
4.1 提高軟件管理水平
ISO9000質(zhì)量管理系統(tǒng)的標(biāo)準(zhǔn)系列是建立在這樣一個(gè)前提上:如果生產(chǎn)和管理系統(tǒng)沒有問題,那么其產(chǎn)品和提供的服務(wù)也就沒有問題,這說明管理水平如何于產(chǎn)品的質(zhì)量有至關(guān)重要的影響。 我認(rèn)為一個(gè)軟件企業(yè)提高管理水平的最好途徑就是為自己制定一個(gè)目標(biāo),比如實(shí)現(xiàn)CMM的級別認(rèn)證或者ISO9000質(zhì)量體系認(rèn)證,在對這些目標(biāo)努力的過程中會逐漸提高自己的管理水平。
1 結(jié)束語
本文對軟件開發(fā)過程中的困難之處和常常造成工期拖延的因素做了一些粗淺的分析,并不是很系統(tǒng)、全面。對于如何避免工期延誤也提出了幾點(diǎn)建議,懇請讀者批評指正。
聯(lián)系客服