落后的軟件生產(chǎn)方式無(wú)法滿足迅速增長(zhǎng)的計(jì)算機(jī)軟件需求,從而導(dǎo)致軟件開(kāi)發(fā)與維護(hù)過(guò)程中出現(xiàn)一系列嚴(yán)重問(wèn)題的現(xiàn)象。所謂的軟件危機(jī)實(shí)際上僅是一種狀況,那就是軟件中有錯(cuò)誤,正是這些錯(cuò)誤導(dǎo)致了軟件開(kāi)發(fā)在成本、進(jìn)度和質(zhì)量上的失控。有錯(cuò)是軟件的屬性,而且是無(wú)法改變的,因?yàn)檐浖怯扇藖?lái)完成的,所有由人做的工作都不會(huì)是完美無(wú)缺的。問(wèn)題在于我們?nèi)绾稳ケ苊忮e(cuò)誤的產(chǎn)生和消除已經(jīng)產(chǎn)生的錯(cuò)誤,使程序中的錯(cuò)誤密度達(dá)到盡可能低的程度。
給軟件帶來(lái)錯(cuò)誤的原因很多,具體地說(shuō),山東軟件開(kāi)發(fā)認(rèn)為,主要有如下幾點(diǎn):
1、程序設(shè)計(jì)錯(cuò)誤
軟件開(kāi)發(fā)人員的弱點(diǎn),所以程序員也會(huì)出錯(cuò)。
2、交流不夠、交流上有誤解或者根本不進(jìn)行交流
在應(yīng)用應(yīng)該做什么或不應(yīng)該做什么的細(xì)節(jié)不清晰的情況下進(jìn)行開(kāi)發(fā)。
3、需求變化
需求變化的影響是多方面的,客戶(hù)可能不了解需求變化帶來(lái)的影響,也可能知道但又不得不那么做。需求變化的后果可能是造成系統(tǒng)的重新設(shè)計(jì),設(shè)計(jì)人員的日程的重新安排,已經(jīng)完成的工作可能要重做或者完全拋棄,對(duì)其他項(xiàng)目產(chǎn)生影響,硬件需求可能要因此改變,等等。如果有許多小的改變或者一次大的變化,項(xiàng)目各部分之間已知或未知的依賴(lài)性可能會(huì)相互影響而導(dǎo)致更多問(wèn)題的出現(xiàn),需求改變帶來(lái)的復(fù)雜性可能導(dǎo)致錯(cuò)誤,還可能影響工程參與者的積極性。
4、軟件復(fù)雜性
圖形用戶(hù)界面,客戶(hù)/服務(wù)器結(jié)構(gòu),分布式應(yīng)用,數(shù)據(jù)通信,超大型關(guān)系型數(shù)據(jù)庫(kù)以及龐大的系統(tǒng)規(guī)模,使得軟件及系統(tǒng)的復(fù)雜性呈指數(shù)增長(zhǎng),沒(méi)有現(xiàn)代軟件開(kāi)發(fā)經(jīng)驗(yàn)的人很難理解它。
5、軟件開(kāi)發(fā)工具
可視化工具,類(lèi)庫(kù),編譯器,腳本工具等,它們常常會(huì)將自身的錯(cuò)誤帶到應(yīng)用軟件中。就象我們所知道的,沒(méi)有良好的工程化作為基礎(chǔ),使用面向?qū)ο蟮募夹g(shù)只會(huì)使項(xiàng)目變得更復(fù)雜。 山東軟件開(kāi)發(fā)提示您,為了更好地解決這些問(wèn)題,軟件界做出了各種各樣的努力。
6、時(shí)間壓力
軟件項(xiàng)目的日程表很難做到準(zhǔn)確,很多時(shí)候需要預(yù)計(jì)和猜測(cè)。當(dāng)最終期限迫近和關(guān)鍵時(shí)刻到來(lái)之際,錯(cuò)誤也就跟著來(lái)了。
7、代碼文檔貧乏
貧乏或者差勁的文檔使得代碼維護(hù)和修改變的異常艱辛,其結(jié)果是帶來(lái)許多錯(cuò)誤。事實(shí)上,山東軟件開(kāi)發(fā)提示,在許多機(jī)構(gòu)并不鼓勵(lì)其程序員為代碼編寫(xiě)文檔,也不鼓勵(lì)程序員將代碼寫(xiě)得清晰和容易理解,相反他們認(rèn)為少寫(xiě)文檔可以更快的進(jìn)行編碼,無(wú)法理解的代碼更易于工作的保密。