軟件工程概述
什么是軟件?
軟件 = 程序 + 數據 + 文檔
程序按事先設計的功能和性能需求執行的指令序列
數據是程序能正常操縱信息的數據結構
文檔與程序開發、維護和使用有關的圖文材料

。程序是指一系列按照事先設定的功能和性能需求執行的指令序列;數據是程序能正常操縱信息的數據結構;文檔是與程序開發、維護和使用有關的圖文資料。
三者之中,程序是軟件的可執行部分,而數據與文檔是不可執行部分,他們三者之間共同協作才能構成一個完整的軟件。
特征
第一,軟件是由人來開發或者工程化的,並不像桌子椅子一樣用機器能制造出來;
第二,軟件的生產,可以只是計算機上的一個簡單的復制粘貼過程;
第三,軟件產品更易於被多次修改,而你買的茶杯想從方的變成圓的則沒那么容易;
第四,軟件開發的環境對產品影響較大,因為開發者在開發過程中易於受到各種環境因素干擾,而生產線上的家具則不管周邊噪音再大出來的也是同樣的東西;
第五,軟件開發的時間和工作量難以估計,而不像生成機器的速率那樣容易度量;
第六,與工業產品不同,軟件的開發進度幾乎沒有客觀衡量標准;
第七,軟件的測試非常困難,測試一輛自行車能不能騎,總是比從成千上萬行代碼中找錯誤容易得多;
第八,軟件不會磨損和老化,哪怕用上十年八年,也不會像輪胎一樣需要報廢,只要你不嫌棄就可以一直用下去;
第九,與家具家電的售后維護不同,軟件維護不是簡單的更換元器件,由於代碼之間更為復雜的邏輯結構,變更容易產生新的問題。
軟件雙重作用
軟件它是一種產品,為用戶提供計算能力,產生、管理、獲取、修改、顯示或傳輸信息,比如我們經常用到的word、excel、photoshop等等。
另一方面也是開發工具,用於開發其他軟件產品,支持或直接提供系統所需的功能、控制其他程序、改善通信、幫助開發其它軟件等,比如windows操作系統、蘋各類編程語言的集成開發環境等等。
軟件的分類(按軟件功能)
按照軟件的功能,可以將軟件分為三類。
| 類別 | 包含 | 舉例 |
|---|---|---|
| 系統軟件 | 操作系統、數據庫管理系統、設備驅動程序、通信處理程序等 | windows、oracle等等; |
| 支撐軟件 | 文本編輯程序、文件格式化程序、磁盤或磁帶間數據傳輸的程序、程序庫系統、支持需求分析、設計、實現、測試和支持管理的軟件 | word、pqmagic、rational rose |
| 應用軟件 | 商業數據處理軟件、工程與科學計算軟件、計算機輔助設計/制造軟件、系統仿真軟件、智能產品嵌入軟件、醫療/制葯軟件、事務管理/辦公自動化軟件、計算機輔助教學軟件 | 如MATLAB、AutoCAD、騰訊QQ |
軟件的分類(按服務對象)
兩類
項目軟件的服務對象:來自於一個具體項目范圍內的客戶集合,比如某高校的教務管理系統;
產品軟件的服務對象:客戶數量龐大,如各類互聯網軟件,它們的目標服務對象都是全國乃至全世界的網民。
軟件的發展階段
四個階段。

個體化發展階段:軟件往往只是為解決某個實際問題而專門編寫的程序,開發者即使用者。
作坊式發展階段:早期軟件作坊缺乏組織管理,程序編寫結合了一定的說明。
工程化發展階段:軟件公司化運作,更加產品化、系列化、標准化、工程化,文檔被引入軟件的內涵。
產業化特點:市場更加廣闊,品類更加豐富,產品生態鏈愈加完整。
軟件規模越來越大

知名的谷歌軟件迄今已包含了20億行代碼。
所以可以想象這樣的軟件產品的設計開發與維護難度,不是普通的工業產品所能比擬的。
為什么軟件發展如此之快?
1、計算需求,軟件必須不斷的發展以適應新的計算環境或者技術的變化,比如從單機計算到現在的雲計算;
2、業務需求,軟件必須不斷改善以實現新的業務需求,比如從小微企業單機OA軟件到集團互聯網OA軟件;
3、嵌入需求,軟件必須不斷擴展,以滿足和新一代系統或數據庫之間的互操作性,比如從access單機數據庫到HBASE雲數據庫;
4、架構需求,軟件必須重新設計以使其在新的網絡環境中是可用的,比如從互聯網軟件再到移動互聯網軟件等。
