●前言
第一部分 軟件工程概論
第1章 軟件工程基礎
1.1 軟件
1.1.1 軟件獨立於硬件
1.1.2 軟件是一種工具
1.1.3 軟件的核心是程序
1.1.4 軟件開發遠比編程要復雜
1.1.5 應用軟件基於現實又高於現實
1.2 軟件工程
1.2.1 定義
1.2.2 軟件工程是一種工程活動
1.2.3 軟件工程的動機
1.2.4 軟件工程是科學性、實踐性和工藝性並重的
1.2.5 軟件工程追求足夠好,不是優選
1.2.6 軟件工程的產品是基於虛擬計算機的軟件方案
1.2.7 軟件工程的最終目的
1.3 軟件工程概覽
1.3.1 軟件工程知識域
1.3.2 軟件開發活動
1.3.3 軟件工程的角色分工
1.4 習題
第2章 軟件工程的發展
2.1 軟件工程的發展脈絡
2.2 20世紀50年代的軟件工程
2.3 20世紀60年代的軟件工程
2.4 20世紀70年代的軟件工程
2.5 20世紀80年代的軟件工程
2.6 20世紀90年代的軟件工程
2.7 21世紀00年代的軟件工程
2.8 習題
第二部分 項目啟動
第3章 示例項目描述
3.1 背景
3.2 目標
3.3 繫統用戶
3.4 用戶訪談要點
3.5 項目實踐過程
第4章 項目管理基礎
4.1 項目和項目管理
4.2 團隊組織與管理
4.2.1 團隊的特征
4.2.2 團隊結構
4.2.3 團隊建設
4.3 軟件質量保障
4.3.1 軟件質量
4.3.2 質量保障
4.3.3 評審
4.3.4 質量度量
4.4 軟件配置管理
4.4.1 配置管理動機
4.4.2 配置項
4.4.3 基線
4.4.4 配置管理活動
4.4.5 變更控制
4.5 項目實踐
4.6 習題
第三部分 需求開發階段
第5章 軟件需求基礎
5.1 引言
5.2 需求工程基礎
5.2.1 需求工程簡介
5.2.2 需求工程活動
5.2.3 需求獲取
5.2.4 需求分析
5.2.5 需求規格說明
5.2.6 需求驗證
5.2.7 需求管理
5.3 需求基礎
5.3.1 需求
5.3.2 需求的層次性
5.3.3 結合層次性的需求開發
5.3.4 區分需求、問題域與規格說明
5.4 需求分類
5.4.1 需求譜繫
5.4.2 軟件需求的分類
5.5 項目實踐
5.6 習題
第6章 需求分析方法
6.1 需求分析基礎
6.1.1 需求分析的原因
6.1.2 需求分析模型
6.2 結構化分析
6.2.1 結構化分析方法
6.2.2 數據流圖
6.2.3 實體關繫圖
6.3 面向對像分析
6.3.1 面向對像分析方法
6.3.2 用例
6.3.3 用例圖
6.3.4 用例描述
6.3.5 概念類圖(領域模型)
6.3.6 交互圖(順序圖)
6.3.7 狀態圖
6.4 使用需求分析方法細化和明確需求
6.4.1 細化和明確需求內容
6.4.2 建立繫統級需求
6.5 項目實踐
6.6 習題
第7章 需求文檔化與驗證
7.1 文檔化的原因
7.2 需求文檔基礎
7.2.1 需求文檔的交流對像
7.2.2 用例文檔
7.2.3 軟件需求規格說明文檔
7.3 需求文檔化要點
7.3.1 技術文檔寫作要點
7.3.2 需求書寫要點
7.3.3 軟件需求規格說明文檔書寫要點
7.4 評審軟件需求規格說明文檔
7.4.1 需求驗證與確認
7.4.2 評審需求的注意事項
7.5 以需求為基礎開發繫統測試用例
7.5.1 開發測試用例套件
7.5.2 開發測試用例
7.6 度量需求
7.7 將需求制品納入配置管理
7.8 項目實踐
7.9 習題
第四部分 軟件設計
第8章 軟件設計基礎
8.1 軟件設計思想的發展
8.2 軟件設計的核心思想
8.3 理解軟件設計
8.3.1 設計與軟件設計
8.3.2 工程設計與藝術設計
8.3.3 理性主義和經驗主義
8.3.4 軟件設計的演化性
8.3.5 軟件設計的決策性
8.3.6 軟件設計的約束滿足和多樣性
8.4 軟件設計的分層
8.5 軟件設計過程的主要活動
8.6 軟件設計的方法和模型
8.6.1 軟件設計的方法
8.6.2 軟件設計的模型
8.7 軟件設計描述
8.7.1 設計視圖和設計圖
8.7.2 設計視角和設計關注
8.7.3 需求和涉眾
8.7.4 設計理由
8.7.5 設計描述的模板
8.7.6 軟件設計文檔書寫要點
8.8 項目實踐
8.9 習題
第9章 軟件體繫結構基礎
9.1 軟件體繫結構的發展
9.2 理解軟件體繫結構
9.2.1 定義
9.2.2 區分軟件體繫結構的抽像與實現
9.2.3 部件
9.2.4 連接件
9.2.5 配置
9.3 體繫結構風格初步
9.3.1 主程序/子程序
9.3.2 面向對像式
9.3.3 分層
9.3.4 MVC
9.4 項目實踐
9.5 習題
第10章 軟件體繫結構設計與構建
10.1 體繫結構設計過程
10.1.1 分析關鍵需求和項目約束
10.1.2 選擇體繫結構風格
10.1.3 軟件體繫結構邏輯設計
10.1.4 軟件體繫結構實現
10.1.5 完善軟件體繫結構設計
10.1.6 定義構件接口
10.2 體繫結構的原型構建
10.2.1 包的創建
10.2.2 重要文件的創建
10.2.3 定義構件之間的接口
10.2.4 關鍵需求的實現
10.3 體繫結構集成與測試
10.3.1 集成的策略
10.3.2 樁、驅動與集成測試用例
10.4 軟件體繫結構設計文檔描述
10.5 體繫結構評審
10.6 項目實踐
10.7 習題
第11章 人機交互設計
11.1 引言
11.2 人機交互設計的目標
11.3 人機交互設計的人類因素
11.3.1 精神模型
11.3.2 差異性
11.4 人機交互設計的計算機因素
11.4.1 可視化設計
11.4.2 常見界面類型
11.5 人機交互設計的交互性
11.5.1 導航
11.5.2 反饋
11.5.3 一些人機交互設計原則
11.6 人機交互設計過程
11.6.1 基本過程
11.6.2 示例
11.7 項目實踐
11.8 習題
第12章 詳細設計的基礎
12.1 詳細設計概述
12.1.1 詳細設計出發點
12.1.2 詳細設計的上下文
12.2 結構化設計
12.2.1 結構化設計的思想
12.2.2 結構化設計的過程
12.3 面向對像設計
12.3.1 面向對像設計的思想
12.3.2 面向對像設計的過程
12.3.3 通過職責建立靜態模型
12.3.4 通過協作建立動態模型
12.4 為類間協作開發集成測試用例
12.5 詳細設計文檔描述
12.6 詳細設計的評審
12.7 項目實踐
12.8 習題
第13章 詳細設計中的模塊化與信息隱藏
13.1 模塊化與信息隱藏思想
13.1.1 設計質量
13.1.2 模塊化與信息隱藏思想的動機
13.1.3 模塊化與信息隱藏思想的發展
13.2 模塊化
13.2.1 分解與模塊化
13.2.2 結構化設計中的耦合
13.2.3 結構化設計中的內聚
13.2.4 回顧:MSCS繫統設計中的模塊化思想
13.3 信息隱藏
13.3.1 抽像與信息隱藏
13.3.2 信息與隱藏
13.3.3 模塊說明
13.3.4 回顧:MSCS繫統設計中的信息思想
13.4 習題
第14章 詳細設計中面向對像方法下的模塊化
14.1 面向對像中的模塊
14.1.1 類
14.1.2 類之間的聯繫
14.2 訪問耦合
14.2.1 訪問耦合的分析
14.2.2 降低訪問耦合的方法
14.3 繼承耦合
14.3.1 繼承耦合的分析
14.3.2 降低繼承耦合的方法
14.4 內聚
14.4.1 面向對像中的內聚
14.4.2 提高內聚的方法
14.5 耦合與內聚的度量
14.5.1 耦合的度量
14.5.2 內聚的度量
14.6 項目實踐
14.7 習題
第15章 詳細設計中面向對像方法下的信息隱藏
15.1 封裝類的職責
15.1.1 類的職責
15.1.2 封裝――分離接口與實現
15.1.3 封裝實現細節
15.2 為變更而設計
15.2.1 封裝變更/開閉原則
15.2.2 多態
15.2.3 依賴倒置原則
15.2.4 總結
15.3 項目實踐
15.4 習題
第16章 詳細設計的設計模式
16.1 設計模式基礎
16.2 可修改性及其基本實現機制
16.3 策略模式
16.3.1 典型問題
16.3.2 設計分析
16.3.3 解決方案
16.3.4 模式實例
16.4 抽像工廠模式
16.4.1 典型問題
16.4.2 設計分析
16.4.3 解決方案
16.4.4 模式實例
16.5 單件模式
16.5.1 典型問題
16.5.2 設計分析
16.5.3 解決方案
16.5.4 模式實例
16.6 迭代器模式
16.6.1 典型問題
16.6.2 設計分析
16.6.3 解決方案
16.6.4 模式實例
16.7 項目實踐
16.8 習題
第五部分 軟件構造、測試、交付與維護
第17章 軟件構造
17.1 概述
17.1.1 軟件構造的定義
17.1.2 軟件構造是設計的延續
17.2 軟件構造活動
17.2.1 詳細設計
17.2.2 編程
17.2.3 測試
17.2.4 調試
17.2.5 代碼評審
17.2.6 集成與構建
17.2.7 構造管理
17.3 軟件構造實踐方法
17.3.1 重構
17.3.2 測試驅動開發
17.3.3 結對編程
17.4 項目實踐
17.5 習題
第18章 代碼設計
18.1 設計易讀的代碼
18.1.1 格式
18.1.2 命名
18.1.3 注釋
18.2 設計易維護的代碼
18.2.1 小型任務
18.2.2 復雜決策
18.2.3 數據使用
18.2.4 明確依賴關繫
18.3 設計可靠的代碼
18.3.1 契約式設計
18.3.2 防御式編程
18.4 使用模型輔助設計復雜代碼
18.4.1 決策表
18.4.2 偽代碼
18.4.3 程序流程圖
18.5 為代碼測試用例
18.5.1 為方法開發測試用例
18.5.2 使用Mock Object測試類方法
18.5.3 為類開發測試用例
18.6 代碼復雜度度量
18.7 問題代碼
18.8 項目實踐
18.9 習題
第19章 軟件測試
19.1 引言
19.1.1 驗證與確認
19.1.2 軟件測試的目標
19.1.3 測試用例
19.1.4 樁與驅動
19.1.5 缺陷、錯誤與失敗
19.2 測試層次
19.2.1 測試層次的劃分
19.2.測試
19.2.3 集成測試
19.2.4 繫統測試
19.3 測試技術
19.3.1 測試用例的選擇
19.3.2 隨機測試
19.3.3 基於規格的技術――黑盒測試方法
19.3.4 基於代碼的技術――白盒測試方法
19.3.5 特定測試技術
19.4 測試活動
19.5 測試度量
19.6 項目實踐
19.7 習題
第20章 軟件交付
20.1 安裝與部署
20.1.1 安裝
20.1.2 部署
20.2 培訓與文檔支持
20.2.1 培訓
20.2.2 文檔支持
20.3 項目評價
20.3.1 項目評價的原因
20.3.2 項目評價的內容
20.3.3 項目評價的方法
20.3.4 注意事項
20.4 項目實踐
20.5 習題
第21章 軟件維護與演化
21.1 軟件維護
21.1.1 軟件可修改性與軟件維護
21.1.2 軟件維護的類型
21.1.3 軟件維護的高代價性
21.1.4 開發可維護的軟件
21.1.5 軟件維護過程與活動
21.2 軟件演化
21.2.1 演化與維護
21.2.2 軟件演化定律
21.2.3 軟件演化生命周期模型與演化活動
21.3 軟件維護與演化的常見技術
21.3.1 遺留軟件
21.3.2 逆向工程
21.3.3 再工程
21.4 項目實踐
21.5 習題
第六部分 軟件過程模型與職業基礎
第22章 軟件開發過程模型
22.1 軟件開發的典型階段
22.1.1 軟件需求工程
22.1.2 軟件設計
22.1.3 軟件構造
22.1.4 軟件測試
22.1.5 軟件交付
22.1.6 軟件維護
22.2 軟件生命周期模型
22.3 軟件過程模型
22.4 構建-修復模型
22.5 瀑布模型
22.6 增量迭代模型
22.7 演化模型
22.8 原型模型
22.9 螺旋模型
22.10 Rational統一過程
22.11 敏捷過程
22.12 習題
第23章 軟件工程職業基礎
23.1 軟件工程職業
23.1.1 軟件行業的發展
23.1.2 軟件工程職業的出現
23.1.3 軟件工程師職業素質
23.2 軟件工程職業概況
23.2.1 知識體繫
23.2.2 教育體繫
23.2.3 職業道德規範
23.2.4 認證體繫
23.2.5 行業協會
23.3 軟件工程的行業標準
23.4 習題
附錄A 軟件需求規格說明文檔模板
附錄B 文檔注釋規範
附錄C 軟件工程道德和職業實踐規範(5.2版)的八項原則
附錄D 連鎖商店管理繫統(MSCS)
相關文檔
參考文獻
丁二玉等編著的《軟件工程與計算(卷2):軟件開發的技術基礎》作為國家精品課程“軟件工程與計算”繫列課程的第二門課程配套教材,《軟件工程與計算(卷2):軟件開發的技術基礎》以經典軟件工程方法與技術為主線,軟件開發技術與程序設計知識為教學重點,培養學生簡單小組級別、中小規模軟件繫統的軟件開發能力。
全書主要分為六部分。第一部分介紹軟件工程的基本框架。第二部分介紹項目啟動階段的知識。第三部分介紹軟件需求開發的基礎知識,包括軟件需求工程的概要、軟件需求的內涵、常見的需求分析方法、軟件需求文檔。第四部分首先介紹軟件設計的基礎概念,之後沿著設計過程和設計技術兩條主線,深入描述軟件設計的相關知識。第五部分介紹軟件構造、測試、移交與維護等軟件開發的下遊工程的基礎知識。第六部分是對第一部分的延續,通過總結性回顧,進一步加深讀者對軟件工程的理解。
《軟件工程與計算(卷2):軟件開發的技等