《軟件工程導論》主要內容包括軟件工程概述、可行性研究、需求分析、概要設計、詳細設計、面向對象的分析與設計方法、編碼、軟件質量與質量保證、項目計劃與管理、軟件開發工具與環境概述、UML與Rose等。《軟件工程導論》的特點是內容系統、注重應用、面向實踐、語言精練、概念準確。《軟件工程導論》可作為高等院校軟件工程課程的教材,也可作為軟件工程人員的參考書。
軟件產業是創新的與充滿活力的朝陽產業,需要大量的、不同層次的軟件人才。計算機軟件是軟件產業的主要產品,并且計算機軟件是邏輯產品、而不是物理產品。軟件與硬件具有完全不同的特征。
計算機軟件現已成為一種新的驅動力,是進行決策的引擎,是現代工程研究和解決問題的基礎,在各種類型的應用系統中無所不在地廣泛應用。
軟件危機是指軟件開發和維護過程中遇到的一系列嚴重問題,如如何開發軟件、如何滿足對軟件的日益增長的需求、如何維護數量不斷膨脹的已有軟件等一系列問題。
為了克服與擺脫軟件危機,誕生了軟件工程學。從1969年提出軟件工程概念以來,歷經30多年的飛速發展,軟件工程逐漸成熟,現已成為一門重要的學科。軟件工程的目標是以保證軟件生產的質量與效率為宗旨,研究一套科學的工程方法以及相應的方便的軟件工具系統,用來指導和幫助軟件的開發與研究工作,在軟件的開發與研究中起到重要的技術保障與促進作用。
軟件工程是研究開發大型軟件應用系統的學科,軟件工程不僅覆蓋了構建軟件系統的相關技術層面的問題,還包括指導開發團隊、安排進度及預算等管理層面的問題。軟件工程不僅包括編寫程序代碼所涉及的技術,還包括所有對軟件開發能夠造成影響的問題。不存在任何單一開發技術或管理技術能夠解決軟件工程所面臨的所有問題。因而,軟件工程是包括一系列概念、理論、模式、語言、方法及工具的綜合性學科。軟件工程技術可分為產品實現技術及開發管理技術,產品實現技術主要涉及軟件系統開發的相關問題,為實現軟件產品提供支持;開發管理技術通常不針對某個軟件開發項目,而是為管理和改進軟件,組織所有的業務活動提供技術支持。
軟件開發工具是支持軟件生存期中某一階段的任務實現而使用的計算機程序。軟件開發環境是一組相關的軟件工具的集合,將它們集成在一起支持某種軟件開發方法或某種軟件開發模型。軟件開發工具與環境是軟件工程的重要組成部分,對于提高軟件生產率,改進軟件質量有越來越大的作用。
軟件工程不是刻板的學科,需要豐富的想象力。軟件工程是一門科學,它是有規律和步驟可循的。軟件工程又是一個實踐性極強的實用學科,在學習中,不僅要能掌握其理論原則與方法,更重要的是能熟練地應用。計算機科學與技術專業和相近專業的畢業生,有相當部分的同學要從事計算機軟件開發和應用工作,通過軟件工程的理論學習與實踐,可以培養學生以軟件工程的方法開發軟件的習慣和素質,并在軟件開發的工作中得以貫徹。因此,專業實踐是軟件工程本科教育的重要組成部分。
學習軟件工程應注重計算思維能力、算法設計與分析能力、程序設計和實現能力、系統能力(系統的認知、設計、開發、應用)的培養,尤其是系統能力。系統能力包含兩個層面上的含義:一方面是對一定規模的系統的全局掌控能力;另一方面是能夠在構建系統時,系統地考慮問題的求解。
出版說明
前言
第1章 概述
1.1 軟件
1.1.1 軟件發展
1.1.2 軟件定義
1.1.3 軟件特點
1.1.4 軟件分類
1.2 軟件工程概念
1.2.1 軟件危機與軟件工程的定義
1.2.2 軟件工程的基本內容與目標
1.2.3 軟件工程的原則
1.3 軟件生存周期與軟件開發模型
1.3.1 軟件生存周期
1.3.2 軟件開發模型
1.4 小結
1.5 習題
第2章 可行性研究
2.1 可行性研究的任務
2.2 可行性研究的步驟
2.3 系統流程圖
2.4 成本效益分析
2.4.1 成本估計
2.4.2 費用估計
2.4.3 度量效益的方法
2.5 小結
2.6 習題
第3章 需求工程
3.1 概述
3.1.1 軟件需求定義
3.1.2 軟件需求分類
3.1.3 需求規格說明
3.1.4 需求工程概念
3.1.5 需求工程過程
3.2 需求獲取方法
3.3 需求分析的任務與原則
3.3.1 需求分析的任務
3.3.2 需求分析的原則
3.4 需求建模方法
3.4.1 結構化需求建模方法
3.4.2 數據流圖
3.4.3 數據字典
3.5 需求圖形工具
3.5.1 層次方框圖
3.5.2 Warnier圖
3.5.3 IP0圖
3.6 需求驗證
3.6.1 目的與任務
3.6.2 內容與方法
3.6.3 需求評審
3.7 需求管理
3.7.1 需求管理的目標
3.7.2 需求管理的原則
3.7.3 需求開發的管理
3.7.4 需求管理活動
3.8 小結
3.9 習題
第4章 概要設計
4.1 軟件體系結構
4.1.1 概述
4.1.2 系統構成
4.1.3 控制模型
4.2 概要設計任務與步驟
4.2.1 概要設計任務
4.2.2 概要設計過程
4.3 軟件設計的基本概念
4.3.1 模塊化與模塊獨立性
4.3.2 抽象
4.3.3 結構設計原則
4.4 面向數據流的設計方法
4.4.1 基本概念
4.4.2 系統結構圖的組成
4.4.3 變換分析
4.4.4 事務分析
4.4.5 設計優化
4.5 面向數據結構的分析設計方法
4.5.1 Jackson系統開發方法
4.5.2 Warnier方法
4.6 概要設計文檔評審
4.7 小結
4.8 習題
第5章 詳細設計
5.1 詳細設計的任務與原則
5.1.1 詳細設計的任務
5.1.2 詳細設計的原則
5.2 詳細設計工具
5.2.1 程序流程圖
5.2.2 N-S圖
5.2.3 PAD圖
5.2.4 PDL
5.2.5 HIPO圖
5.2.6 詳細設計工具的選擇
5.3 詳細設計規格說明與復審
5.3.1 詳細設計說明書
5.3.2 設計復審
5.4 小結
5.5 習題
第6章 面向對象設計
6.1 面向對象方法
6.1.1 面向對象方法概述
6.1.2 面向對象的軟件工程
6.1.3 面向對象的基本概念和特征
6.2 面向對象的分析
6.2.1 面向對象分析基本過程及原則
6.2.2 確定對象與類
6.2.3 確定屬性
6.2.4 定義服務
6.2.5 對象間通信
6.3 面向對象設計
6.3.1 面向對象設計的基本概念
6.3.2 面向對象設計的方法
6.4 實時軟件設計
6.4.1 系統設計
6.4.2 數據采集系統
6.5 軟件復用
6.5.1 軟件復用概念
6.5.2 基于組件的開發
6.6 用戶界面的設計
6.6.1 設計原則
6.6.2 用戶交互
6.6.3 信息表示
6.6.4 用戶支持
6.6.5 界面評價
6.7 小結
6.8 習題
第7章 編碼
7.1 程序設計語言
7.1.1 程序設計語言分類
7.1.2 程序設計語言的特點
7.1.3 程序設計語言的選擇
7.2 編碼風格
7.2.1 源程序文檔化
7.2.2 數據說明
7.2.3 語句結構
7.2.4 輸入/輸出
7.3 程序效率
7.3.1 程序效率準則
7.3.2 算法對效率的影響
7.3.3 影響存儲器效率的因素
7.3.4 影響輸入輸出的因素
7.4 編程安全
7.4.1 冗余程序設計
7.4.2 防錯程序設計
7.5 面向對象程序設計步驟
7.6 編碼優化
7.6.1 優化的內容與原則
7.6.2 程序結構優化
7.6.3 程序代碼優化
7.7 小結
7.8 習題
第8章 軟件質量與質量保證
8.1 軟件質量的定義
……
第9章 項目計劃與管理
第10章 軟件開發工具與環境
第11章 UML與Rose
附錄A 可行性研究報告規范
附錄B 項目開發計劃規范
附錄C 需求規格說明書規范
附錄D 概要設計說明書規范
附錄E 詳細設計說明書規范
附錄F 測試計劃
附錄G 測試分析報告
附錄H 項目開發總結報告規范
參考文獻
軟件是一種邏輯產品,也是開發和運行產品的載體。作為一種產品,它表達了由計算機硬件體現的計算潛能。不論它是駐留在設備中,還是在主機中,軟件都是一個信息轉換器,能夠產生、管理、獲取、修改、顯示或轉換信息。這些信息可以很簡單,也可以很復雜,如多媒體信息。作為開發運行產品的載體,軟件是計算機工作和信息通信的基礎,也是創建和控制其他程序的基礎。
信息是21世紀最重要的產品,軟件充分體現了這一點。通過軟件處理數據,凸顯了數據的重要性;軟件管理商業信息,增強了商業競爭力。軟件不僅提供了通往全球信息網絡的途徑,而且也提供了獲取信息的多種手段。
1.1.1軟件發展
1.程序設計階段計算機發展的早期階段(20世紀50年代初期一20世紀60年代中期)為程序設計階段。在這個階段硬件已經通用化,而軟件的生產卻是個體化的。這時,由于程序規模小,幾乎沒有什么系統化的方法可遵循。對軟件的開發沒有任何管理方法,一旦計劃推遲了或者成本提高了,程序員才開始彌補。在通用的硬件已經非常普遍的時候,軟件產品還處在初級階段,對每一類應用均需自行再設計,應用范圍很有限。設計往往僅是人們頭腦中的一種模糊想法,而文檔根本不存在。2.程序系統階段計算機系統發展的第二階段(20世紀60年代中期~20世紀70年代末期)為程序系統階段。多道程序設計、多用戶系統引入了人機交互的新概念。交互技術打開了計算機應用的新世界,硬件和軟件配合達到了一個新層次,出現了實時系統和第一代數據庫管理系統。這個階段的另一個特點就是軟件產品的使用和“軟件作坊”的出現。被開發的軟件可以在較寬廣的范圍中應用。主機和微機上的程序能夠有數百甚至上千的用戶。
在軟件的使用過程中,當發現錯誤時,當用戶需求和硬件環境發生變化時都需要修改軟件,這些活動統稱為軟件維護。在軟件維護上的花費以驚人的速度增長。更為嚴重的是,許多程序的個體化特性使得它們根本不能維護。“軟件危機”出現了。