第1章 概論
軟件(Software)是一系列按照特定順序組織的計算機數據和指令的集合。軟件一般被劃分為系統軟件、應用軟件和介于這兩者之間的中間件軟件。軟件并不是只包括可以在計算機(這里的計算機是指廣義的計算機)上運行的程序,與這些程序相關的文檔、數據等元素一般也被認為是軟件的一部分。
隨著計算機技術的迅速發展和廣泛應用,社會對軟件的需求也與日俱增,軟件在計算機系統中的比重不斷增大。現代社會已經離不開軟件。國家基礎設施和公共建設,工業制造、金融、交通等行業,軟件已經成為必不可少的一部分。軟件可以將勞動生產率水平進一步提高,促進經濟全球化、經濟增長集約化、環保經濟綠色化、軍事技術信息化,甚至影響和改變著人類的生活方式。軟件從最初的計算機硬件的附屬品,僅僅作為計算機硬件的運行和做一些簡單的計算與數據處理的程序,發展到今天大規模的封閉或開放式的系統軟件和應用軟件。有的軟件的源代碼甚至超過千萬行。例如,美國阿波羅計劃的軟件長達1000萬行,航天飛機計劃的軟件更是長達4000萬行,桌面操作系統為千萬級量級規模。如今,物聯網技術、云計算、大數據、移動互聯網融合發展,為生產生活、社會管理帶來深刻變化。現代軟件技術結合物聯網、大數據、云計算和移動互聯網、虛擬現實、大規模并行計算等一系列技術讓“智慧城市”與“智慧交通”的美好畫卷正在變成現實。
軟件是抽象的,是人類邏輯思維的產物,它不受物質材料的限制,也不受物理定律或加工過程的制約,這一特性使軟件工程得以簡化,因為軟件的潛能不受物理因素的限制;另外一方面,由于缺乏自然約束,軟件系統的實現在實施過程中,容易變得極為復雜,理解它會很困難、改變它付出的代價更加高昂。軟件規模的增長,使其復雜度也隨之大大增加,而高復雜度和高可靠性的不相容性,使得軟件可靠性隨著其規模的增長而降低,質量難以保證,維護愈加困難,投資預算很難控制,傳統的軟件研制開發方法已無法適應大規模軟件的開發需求。
為了解決在軟件開發和維護過程中遇到的一系列軟件危機的嚴重問題,1968年,北大西洋公約組織(NATO)的科學家和官員們在原德意志聯邦共和國召開的國際會議上討論并首次提出了軟件開發要工程化。當時,單個的程序開發技術已經不能擴展并應用到大型的、復雜的軟件系統中。軟件項目有時甚至要推遲幾年才能完成,不僅比預計的費用高且難以維護。軟件工作者開始認真研究消除軟件危機的途徑,從而逐漸形成了一門新興的工程學科——計算機軟件工程學(Software Engineering),簡稱軟件工程。軟件工程是一門工程學科,涉及軟件生產過程中的各個方面,從最初的問題提出一直到投入使用后的系統維護,都屬于其學科研究范疇。