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