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