本書以一個案例的演變模擬不斷變化的用戶需求,按照增量迭代的開發(fā)模式,將碎片化的功能開發(fā)、用戶交互、數(shù)據(jù)處理等知識,以及軟件設計、軟件測試及敏捷開發(fā)的最佳實踐,與軟件開發(fā)的原理、技術和工具融合到設計、編碼、調試及測試的構造過程。內容包括軟件構造的一般原理(如依賴倒轉原則、增量迭代)、常用技術(如表驅動編程、測試驅動開發(fā))、軟件設計(契約式設計、設計模式)、軟件知識(如軟件測試、軟件復用)及軟件構造的工作要素(如編碼規(guī)范、構造工具)和活動(如設計、編碼、調試、測試、交付)。本書提供配套的電子課件、案例源程序、例子代碼、教學參考方案等。
李勁華,(德國)計算機科學博士,教授,博導。山東省計算機類專業(yè)及大學計算機課程教學指導委員會委員,青島市船舶建造智能精度測量工程研究中心主任,山東省工業(yè)大數(shù)據(jù)發(fā)展創(chuàng)新實驗室主任。長期講授軟件工程、編譯原理、IT項目管理、軟件體系結構、軟件測試、《計算機導論》(雙語)等課程。主編教材《編譯原理》獲十二五普通高等教育本科級國家規(guī)劃教材,主編教材《基于案例的軟件構造教程》獲山東省普通高等教育一流教材,在中國大學MOOC上主講課程《軟件構造》獲得山東省一流本科課程。近年來重點研究大數(shù)據(jù)技術、智能算法、新型IT的軟件技術及其工業(yè)級應用。主持和參與過多項國家/省自然科學基金項目、省部級科研項目以及企業(yè)研究課題。在IEEE Internet of Thing、IEEE Network Magazine以及計算機輔助設計與圖形學學報等專業(yè)雜志發(fā)表論文40余篇;首位獲批發(fā)明專利3件、軟件著作權10件。
目 錄
第1章 軟件開發(fā)概述 1
1.1 程序與軟件 1
1.1.1 從程序到軟件 1
1.1.2 軟件類型 2
1.1.3 程序設計與軟件開發(fā) 2
1.2 軟件生存周期 4
1.2.1 使用角度的軟件生存周期 4
1.2.2 開發(fā)角度的軟件生存周期 4
1.3 軟件開發(fā)過程 6
1.3.1 瀑布式開發(fā)過程 7
1.3.2 增量開發(fā)過程 7
1.3.3 個體軟件過程 8
1.4 敏捷開發(fā) 9
1.4.1 概述 10
1.4.2 Scrum方法 12
1.5 軟件構造 13
1.5.1 有關概念 13
1.5.2 構造與開發(fā)過程 14
1.5.3 主要內容 14
1.5.4 軟件構造的重要性 15
1.6 為什么不直接編寫軟件 15
1.6.1 軟件開發(fā)語言 16
1.6.2 編程工具與集成化開發(fā)環(huán)境 18
1.6.3 軟件運行環(huán)境 19
1.6.4 軟件開發(fā)的最佳實踐 19
1.6.5 開發(fā)過程與管理 22
1.7 案例導讀 22
1.8 討論與提高 24
1.8.1 案例的文檔管理 24
1.8.2 課程思政 25
1.9 思考與練習題 25
第2章 模塊化軟件構造 27
2.1 分解與模塊化 28
2.1.1 分解 28
2.1.2 模塊化 29
2.2 數(shù)據(jù)結構與算法 30
2.2.1 數(shù)據(jù)結構與算法的關系 31
2.2.2 選擇與設計數(shù)據(jù)結構 32
2.2.3 選擇與設計算法 35
2.3 模塊化設計理論初步 37
2.3.1 模塊化原則 37
2.3.2 模塊的內聚性 37
2.3.3 模塊的耦合性 38
2.4 測試程序 40
2.4.1 測試需求 41
2.4.2 測試設計與測試用例 42
2.4.3 測試覆蓋與黑盒測試 43
2.5 調試程序 48
2.5.1 缺陷的相關術語 48
2.5.2 調試基礎 48
2.6 案例分析與實踐 49
2.6.1 案例程序的初始構造 49
2.6.2 無相同算式的基礎構造 51
2.6.3 編程實現(xiàn)測試 54
2.6.4 創(chuàng)建代碼倉庫 57
2.7 討論與提高 57
2.7.1 軟件質量 57
2.7.2 軟件測試的其他觀點 58
2.7.3 編程風格 59
2.7.4 撰寫軟件需求說明書 60
2.7.5 課程思政 61
2.8 思考與練習題 61
第3章 面向對象的軟件構造 63
3.1 抽象與封裝 63
3.1.1 模塊產(chǎn)生與合成 63
3.1.2 抽象與封裝 64
3.1.3 抽象數(shù)據(jù)類型 65
3.2 認識面向對象 67
3.2.1 軟件設計 67
3.2.2 設計類 67
3.2.3 設計操作 68
3.2.4 分類 69
3.3 面向對象的設計 70
3.3.1 面向對象的設計符號 70
3.3.2 案例設計一 71
3.3.3 案例設計二 75
3.4 調試的基本技術 82
3.4.1 單步調試源程序 83
3.4.2 檢查或更改變量的值 84
3.4.3 設置監(jiān)視點觀察變量 84
3.4.4 上下移動調用棧 84
3.5 軟件的自動化測試 85
3.5.1 初識JUnit 85
3.5.2 編寫JUnit測試代碼 87
3.6 案例分析與實踐 89
3.6.1 分析 89
3.6.2 構造 89
3.6.3 代碼托管 92
3.7 討論與提高 93
3.7.1 進一步認識調試 93
3.7.2 設計原則與設計模式 93
3.7.3 面向對象的設計原則 95
3.7.4 課程思政 98
3.8 思考與練習題 98
第4章 數(shù)據(jù)處理的軟件構造 102
4.1 數(shù)據(jù)及其持久性 103
4.2 文件與輸入/輸出流 104
4.2.1 文件 104
4.2.2 輸入/輸出流 105
4.2.3 數(shù)據(jù)序列化 106
4.2.4 CSV格式的文本文件 107
4.3 編寫健壯的程序 107
4.3.1 防御性編程 108
4.3.2 使用斷言 111
4.4 字符串處理與正則表達式 112
4.5 持久使用程序中的數(shù)據(jù)集 115
4.5.1 算式基 115
4.5.2 表驅動編程 116
4.6 基于程序結構的測試 118
4.6.1 語句覆蓋測試 118
4.6.2 程序控制測試 119
4.6.3 邏輯覆蓋測試 120
4.6.4 路徑覆蓋測試 121
4.7 運用JUnit 123
4.7.1 異常測試 123
4.7.2 參數(shù)化測試 124
4.7.3 測試套件 125
4.7.4 JUnit斷言 126
4.7.5 JUnit使用指南 126
4.8 案例分析與實踐 126
4.8.1 批量生成100以內算式 128
4.8.2 構造并應用算式基 130
4.8.3 批改練習并存儲 132
4.8.4 管理測試 134
4.9 討論與提高 134
4.9.1 應用表驅動編程 134
4.9.2 使用文件還是數(shù)據(jù)庫 136
4.9.3 契約式編程 136
4.9.4 撰寫設計文檔 136
4.9.5 課程思政 137
4.10 思考與練習題 137
第5章 用戶交互的軟件構造 140
5.1 程序及其功能的使用 141
5.1.1 程序的兩個觀察視角 141
5.1.2 多個功能程序的整合 141
5.1.3 多個功能的組織與呈現(xiàn) 142
5.1.4 基于菜單式功能選擇的用戶交互 143
5.2 用戶交互概述 148
5.2.1 基本概念 148
5.2.2 交互設備 148
5.2.3 交互風格 148
5.2.4 交互界面 149
5.2.5 交互設計的原則 150
5.3 用戶交互的開發(fā) 151
5.3.1 交互設計的基本過程 151
5.3.2 快速原型法 152
5.4 靜態(tài)測試 153
5.4.1 程序的可用性與靜態(tài)測試 153
5.4.2 基本的靜態(tài)測試 153
5.4.3 檢查表 155
5.4.4 靜態(tài)程序分析 155
5.4.5 代碼覆蓋率與工具 156
5.5 軟件集成與測試 157
5.5.1 驅動模塊和樁模塊 158
5.5.2 集成策略 159
5.5.3 回歸測試 160
5.5.4 集成測試與策略 160
5.6 案例分析與實踐 162
5.6.1 分析與設計 162
5.6.2 案例的菜單式用戶交互的構造 163
5.6.3 循環(huán)語句的路徑測試 170
5.7 討論與提高 170
5.7.1 軟件建模 170
5.7.2 基于模型的測試 172
5.7.3 執(zhí)行函數(shù)名符號串的表驅動編程 174
5.7.4 持續(xù)集成 175
5.7.5 測試報告的撰寫 176
5.7.6 課程思政 176
5.8 思考與練習題 176
第6章 軟件重構與交付 178
6.1 代碼重構 178
6.1.1 代碼重構的案例研究 178
6.1.2 代碼重構概述 189
6.2 軟件交付 190
6.2.1 構建與打包 190
6.2.2 實現(xiàn)構建自動化的工具 191
6.2.3 Java程序的打包與交付 193
6.3 案例分析與實踐 196
6.3.1 代碼重構的案例分析 196
6.3.2 代碼重構實踐 197
6.3.3 提交案例程序 198
6.4 討論與提高 199
6.4.1 測試層次 199
6.4.2 測試驅動開發(fā) 200
6.4.3 軟件交付及其發(fā)展 207
6.4.4 撰寫用戶手冊 207
6.4.5 課程思政 207
6.5 思考與練習題 207
第7章 GUI軟件構造 210
7.1 GUI簡介 210
7.1.1 Java GUI發(fā)展軌跡 210
7.1.2 Java GUI的構造工具 210
7.2 GUI的基本元素與設計規(guī)范 211
7.2.1 GUI的基本元素 212
7.2.2 GUI基本設計規(guī)范 215
7.3 Java GUI設計模式 215
7.3.1 觀察者模式 216
7.3.2 MVC模式 218
7.4 事件驅動編程 218
7.4.1 事件捕捉與處理 218
7.4.2 焦點事件和Tab順序 219
7.4.3 實例講解 220
7.5 案例分析與實踐 223
7.5.1 探路的案例GUI構造 223
7.5.2 重構GUI構造任務 228
7.5.3 重構任務9.2的案例代碼 234
7.6 討論與提高 236
7.6.1 GUI的設計原則 236
7.6.2 GUI的測試 237
7.6.3 課程思政 239
7.7 思考與練習題 239
第8章 應用數(shù)據(jù)庫 240
8.1 數(shù)據(jù)庫概述 240
8.1.1 關系數(shù)據(jù)庫 240
8.1.2 關系數(shù)據(jù)庫的數(shù)據(jù)模型 244
8.2 結構化查詢語言SQL 244
8.2.1 SQL概述 244
8.2.2 創(chuàng)建基本表的CREATE語句 245
8.2.3 插入元組的INSERT語句 247
8.2.4 刪除元組的DELETE語句 247
8.2.5 更新元組的UPDATE語句 247
8.2.6 選擇元組的SELECT語句 248
8.3 數(shù)據(jù)庫的開發(fā)過程 252
8.4 編程操作數(shù)據(jù)庫 255
8.4.1 連接數(shù)據(jù)庫 256
8.4.2 查詢數(shù)據(jù)庫 257
8.5 案例分析與實踐 259
8.5.1 分析與設計 259
8.5.2 設計數(shù)據(jù)庫 259
8.5.3 開發(fā)數(shù)據(jù)庫應用程序 261
8.6 討論與提高 265
8.6.1 事務與并發(fā) 265
8.6.2 使用存儲過程 266
8.6.3 查詢優(yōu)化——消除不必要的循環(huán) 268
8.6.4 測試數(shù)據(jù)庫 269
8.6.5 課程思政 270
8.7 思考與練習題 270
第9章 基于復用的軟件構造 272
9.1 軟件復用 272
9.1.1 軟件產(chǎn)品復用 273
9.1.2 基于復用的軟件開發(fā) 274
9.1.3 程序庫 275
9.2 設計模式 275
9.2.1 基本概念 275
9.2.2 基本設計模式目錄 276
9.2.3 設計模式舉例 276
9.3 框架 283
9.3.1 基本概念 283
9.3.2 框架和設計模式 284
9.3.3 框架開發(fā) 285
9.3.4 軟件測試框架JUnit 285
9.4 案例分析與實踐 286
9.4.1 生成Word格式的習題 286
9.4.2 口算習題練習得分的可視化展示 291
9.4.3 完整案例的軟件構造 295
9.5 討論與提高 297
9.5.1 案例的Web應用程序 297
9.5.2 Android應用框架 297
9.5.3 課程思政 298
9.6 思考與練習題 298
參考文獻 300