軟件工程的範圍極其廣泛。軟件工程的某些方面可以歸類為數學或計算機科學;其他方面屬於經濟、管理或心理學領域。為了展示軟件工程的廣泛領域。
無論我們是處理計費還是防空事務电腦糸統,我們的大部分軟件交付延遲、超出預算並存在殘餘故障,無法滿足客戶的需求。軟件工程就是試圖解決這些問題。換句話說,軟件工程是一門學科,其目標是生產無故障的軟件,在預算範圍內按時交付,滿足客戶的需求。此外,當用戶的需求發生變化時,軟件必須易於修改。
發電機偶然發生故障是一個事實,但頻率遠低於各類型軟件糸統, 不是嗎? 橋樑有時會崩潰,但比操作軟件系統時崩潰要少得多。1967 年,北約的一個研究小組認為軟件設計、實施和維護可以與傳統工程學科處於同一地位,因此創造了軟件工程 (Software Engineering) 一詞。1968 年在加米施舉行的北約軟件工程會議認可了構建軟件類似於其他工程任務的說法,
軟件工程反映了這樣一種信念,即軟件生產應該是一種類似工程的活動, 軟件工程應該使用已建立的工程學科的哲學和範式來解決軟件質量普遍低得令人無法接受,並且沒法截止日期和預算內完成。
儘管有許多軟件成功案例,但仍有很大比例的軟件產品交付延遲、超出預算並帶有殘餘故障。例如,Standish Group 是一家分析軟件開發項目的研究公司。
他們對 2006 年完成的開發項目的研究總結在圖 [Rubenstein, 2007] 中。只有 35% 的項目成功完成,而 19% 在完成前被取消或從未實施。其餘 46% 的項目已完成並安裝在客戶的計算機上。但是,這些項目超出預算、延遲或特性和功能少於最初指定的。換句話說,在 2006 年,只有三分之一以上的軟件開發項目是成功的;幾乎一半的項目表現出一種或多種問題
軟件危機的財務影響是可怕的。在Cutter Consortium[2002]進行的調查中,報告了以下內容:
很明顯,按時交付的軟件太少,在預算範圍內,無故障,滿足客戶需求。為了實現這些目標,軟體工程師必須掌握廣泛的科技和管理技能。這些技能不僅要應用於程式設計,還要應用於軟件生產的每一個步驟,從需求到交付後維護。
從圖中可以看出,即使到現在,軟件系統的成功率也沒有太大的提高。但公平地說,軟件的發展速度越來越複雜,我們的生活離不開它們。這就是為什麼在過去的幾十年裏出現了這麼多不同的軟體發展方法。
這裡有一些相關的軟體發展資源