代碼中的軟件工程
孟寧
買這商品的人也買了...
-
$580$452 -
$490$387 -
$245網絡安全監測數據可視化分析關鍵技術與應用
-
$680$530 -
$390$371 -
$474$450 -
$880$748 -
$500$390 -
$550$429 -
$500$375 -
$420$315 -
$454架構師的自我修煉:技術、架構和未來
-
$580$458 -
$880$748 -
$354$336 -
$356Metasploit Web 滲透測試實戰
-
$455CPU 通識課
-
$600$468 -
$580$458 -
$337低速無人駕駛技術實戰
-
$509$479 -
$520$490 -
$500$390 -
$600$468 -
$800$632
相關主題
商品描述
本書共五篇:第一篇介紹常用工具VS Code、Git 和正則表達式;第二篇以C 語言代碼為例介紹工程化編程的基本方法,涵蓋代碼的風格和規範、模塊化、可復用、可重入函數與線程安全等;第三篇介紹從需求分析到軟件設計的基本建模方法——從需求分析開始,以UML 為工具完成用例建模、業務領域建模、對象交互建模,最終形成設計方案;第四篇探討軟件的元素、結構、特性和描述方法,以及高質量軟件的內涵等;第五篇回顧軟件危機的前因後果,並將之與PSP、TSP、CMM/CMMI、敏捷開發、DevOps 等軟件過程和生命周期管理銜接起來。
本書以國家精品在線開放課程——“工程化編程實戰”為核心內容,增加了常用工具、需求分析與建模方法、軟件結構和軟件過程等相關內容,內容全面、新穎,實踐性強。本書主要針對在校學生編寫,適合開設相關專業的普通高校和高職院校作為主要教材,也可供不同層次的自學者學習參考。
作者簡介
孟宁
中国科学技术大学软件学院专职教师,主讲“高级软件工程”“ Linux操作系统分析”等课程。
他讲授的两门慕课获评国家精品在开放课程和本科课程,入选华为“智能基座”精品慕课,被中国高校计算机教育MOOC联盟评为优秀课程,荣获安徽省教学成果奖二等奖,等等。在线课程视频在读行学、网易云课堂、学堂在线、B站等在线平台的累计学员达20余万人。
他专注于 Linux操作系统、软件工程、人工智能和区块链等技术领域,与华为、OPPO、龙芯中科等多家国内外企业和创业公司有技术合作。
目錄大綱
第 一篇 工欲善其事,必先利其器
第 1 章 編程“神器”Visual Studio Code 2
1.1 Visual Studio Code 的安裝和基本用法 2
1.1.1 下載和安裝Visual Studio Code 2
1.1.2 VS Code 界面概覽 2
1.1.3 VS Code 的基本配置 3
1.1.4 VS Code 的基本用法 3
1.2 VS Code 為什麽能這麽牛 4
1.2.1 簡潔而聚焦的產品定位貫穿始終 4
1.2.2 進程隔離的插件模型是“定海神針” 5
1.2.3 代碼理解和調試——LSP 和DAP 兩大協議“厥功至偉” 6
1.2.4 集大成的VS Code 遠程開發環境 8
1.3 基於VS Code 的C/C++開發調試環境配置 9
1.3.1 安裝C/C++插件 9
1.3.2 安裝C/C++編譯器和調試器 10
1.3.3 配置Visual Studio Code 構建任務 11
1.3.4 配置Visual Studio Code 調試環境 12
1.4 VS Code 遠程開發環境配置 13
1.4.1 VS Code 遠程開發環境概述 13
1.4.2 VS Code 遠程開發環境Remote-SSH 配置 15
1.4.3 VS Code 遠程開發環境Web Remote-code-server 配置 20
本章練習 21
第 2 章 五大場景玩轉Git 22
2.1 Git 分佈式版本控制系統 22
2.1.1 版本控制概述 22
2.1.2 Git 的歷史 22
2.1.3 Git 的基本操作 23
2.2 場景一:Git 本地版本庫的基本用法 25
2.2.1 安裝Git 25
2.2.2 初始化一個本地版本庫 25
2.2.3 查看當前工作區的狀態 26
2.2.4 暫存更改的文件 27
2.2.5 把暫存區里的文件提交到倉庫 28
2.2.6 Git 本地版本庫的基本用法參考 30
2.3 場景二:Git 遠程版本庫的基本用法 31
2.3.1 克隆遠程版本庫 31
2.3.2 遠程版本庫的基本命令簡介 31
2.3.3 Git 遠程版本庫的基本用法參考 32
2.4 Git 背後的設計理念 34
2.5 場景三:團隊項目中的分叉合並 36
2.5.1 團隊項目的一個參考工作流程 36
2.5.2 分支的基本用法 36
2.5.3 團隊項目工作流程參考 39
2.6 場景四:Git Rebase 整理提交記錄 40
2.7 場景五:Fork + Pull request 開發工作流程 43
本章練習 46
第3 章 正則表達式十步通關 48
3.1 為什麽使用正則表達式 48
3.2 第 一關:基本的字符串搜索方法 49
3.3 第二關:同時搜索多個字符串的方法 50
3.4 第三關:在匹配字符串時的大小寫問題 50
3.5 第四關:通配符的基本用法 51
3.6 第五關:匹配具有多種可能性的字符集 52
3.7 第六關:貪婪匹配和懶惰匹配 53
3.8 第七關:一些特殊位置和特殊字符 53
3.9 第八關:使用捕獲組復用模式 54
3.10 第九關:基本的字符串搜索替換方法 54
3.11 第十關:在替換中使用捕獲組復用模式 55
本章練習 56
第二篇 工程化編程實戰
第4 章 簡約而不簡單——代碼規範和代碼風格 58
4.1 實驗項目介紹 58
4.2 代碼風格的原則:簡明、易讀、無二義性 61
4.3 編寫高質量代碼的基本方法 66
4.3.1 通過控制結構簡化代碼 66
4.3.2 通過數據結構簡化代碼 67
4.3.3 一定要有錯誤處理 68
4.3.4 性能優先策略背後隱藏的代價 68
4.3.5 拒絕修修補補,要不斷重構代碼 69
4.3.6 編碼過程中的團隊合作 69
本章練習 69
第5 章 模塊化軟件設計 71
5.1 模塊化思想背後的基本原理 71
5.2 模塊化代碼的基本寫法舉例 72
5.3 傳統單體集中式架構與微服務架構 78
5.4 模塊化軟件設計中的基本方法 80
5.4.1 KISS 原則 80
5.4.2 使用本地化外部接口來提高代碼的適應能力 80
5.4.3 保持設計結構和代碼結構的一致性 81
本章練習 81
第6 章 可復用軟件設計 83
6.1 消費者復用和生產者復用 83
6.2 接口的基本概念 83
6.2.1 軟件模塊接口舉例 84
6.2.2 微服務接口舉例 86
6.2.3 接口與耦合度之間的關系 88
6.2.4 同步接口和異步接口 88
6.3 可復用軟件模塊的接口設計示例 89
6.3.1 通用LinkTable 模塊的接口設計 89
6.3.2 給LinkTable 增加Callback 方式的接口 95
6.3.3 進一步改進LinkTable 的Callback 方式的接口 97
6.4 通用接口定義的基本方法 99
6.4.1 參數化上下文 99
6.4.2 移除前置條件 99
6.4.3 簡化後置條件 100
本章練習 100
第7 章 可重入函數與線程安全 103
7.1 線程的基本概念 103
7.2 函數調用堆棧 103
7.3 可重入函數 105
7.4 什麽是線程安全 106
7.5 LinkTable 軟件模塊的線程安全分析 108
本章練習 112
第8 章 子系統的工程化 113
8.1 menu 子系統的可復用接口設計 113
8.2 Makefile 工程文件舉例 116
8.3 帶參數的復雜命令函數接口的寫法 117
8.4 看待軟件質量的幾個不同角度 118
8.5 編程的基本方法和原則 119
本章練習 120
第三篇 需求分析和軟件設計
第9 章 獲取需求的主要方法 122
9.1 什麽是需求 122
9.2 為什麽需求非常重要 122
9.3 有哪些類型的需求 123
9.4 有哪些和需求相關的人員 123
9.5 獲取需求的主要方法 124
9.6 高質量的需求是什麽樣子 124
9.6.1 便於驗證的需求是高質量的 124
9.6.2 解決了內在沖突的需求是高質量的 124
9.6.3 高質量需求的典型特徵 125
9.7 繪圖工具VS Code 和draw.io 125
9.7.1 在線繪圖工具draw.io 125
9.7.2 安裝draw.io 插件 126
9.7.3 快速入門VS Code+draw.io 畫圖 127
本章練習 130
第 10 章 對需求進行分析和建模 131
10.1 原型化方法和建模的方法 131
10.2 用例建模 131
10.2.1 什麽是用例 131
10.2.2 用例的三個抽象層級 132
10.2.3 用例建模的基本步驟 133
10.2.4 準確提取用例的基本方法 134
10.2.5 用例圖的基本畫法 135
10.3 業務領域建模 136
10.3.1 面向對象分析涉及的基本概念 136
10.3.2 業務領域建模的基本步驟 137
10.3.3 頭腦風暴的具體做法 138
10.3.4 業務領域概念分類的方法 139
10.4 關聯類及其關系數據模型 140
10.4.1 關聯類的基本概念及其UML 類圖 140
10.4.2 關聯類的面向對象設計與實現 141
10.4.3 關聯類的關系數據模型 142
10.5 關系數據的MongoDB 數據建模 143
10.5.1 基於文檔的數據庫MongoDB 143
10.5.2 一對多關系建模的三種基礎方案 144
10.5.3 幾種反範式設計方法 147
10.5.4 MongoDB 數據建模總結 150
10.6 軟件業務概念的原型 150
本章練習 151
第 11 章 從需求分析向軟件設計的過渡 153
11.1 敏捷統一過程 153
11.1.1 瀑布模型 153
11.1.2 統一過程 153
11.1.3 敏捷統一過程的計劃階段 154
11.1.4 敏捷統一過程的增量階段 154
11.2 對象交互建模 155
11.2.1 對象交互建模的基本步驟 155
11.2.2 找出關鍵步驟進行劇情描述 156
11.2.3 將劇情描述轉換成劇情描述表 158
11.2.4 將劇情描述表轉換成時序圖 158
11.2.5 從分析時序圖到設計時序圖 161
11.2.6 完整的“借書”用例對象交互建模 163
11.3 形成軟件設計方案 164
11.3.1 設計類圖和分析類圖 164
11.3.2 形成設計類圖的基本步驟 165
11.3.3 形成軟件設計方案的整體思路 169
本章練習 170
第四篇 軟件科學基礎概論
第 12 章 軟件是什麽 172
12.1 軟件的基本構成元素 172
12.1.1 對象 172
12.1.2 函數和變量/常量 172
12.1.3 指令和操作數 173
12.1.4 0 和1 是什麽 174
12.2 軟件的基本結構 176
12.2.1 順序結構 176
12.2.2 分支結構 176
12.2.3 循環結構 178
12.2.4 函數調用框架 179
12.2.5 繼承和對象組合 180
12.3 軟件中的一些特殊機制 181
12.3.1 回調函數 181
12.3.2 多態 182
12.3.3 閉包 183
12.3.4 異步調用 184
12.3.5 匿名函數 185
12.4 軟件的內在特性 186
12.4.1 前所未有的復雜度 186
12.4.2 抽象思維和邏輯思維 186
12.4.3 唯一不變的就是變化本身 187
12.4.4 難以達成的概念完整性和一致性 188
本章練習 188
第 13 章 軟件設計模式 190
13.1 什麽是設計模式 190
13.1.1 軟件設計模式的優點 190
13.1.2 軟件設計模式的含義和構成 191
13.2 軟件設計模式的分類 191
13.3 常用的軟件設計模式 192
13.4 觀察者模式舉例 196
13.5 軟件設計模式背後的設計原則 200
13.5.1 開閉原則 200
13.5.2 麗斯科夫替換原則 200
13.5.3 依賴倒置原則 200
13.5.4 單一職責原則 201
13.5.5 德米特法則 201
13.5.6 合成復用原則 201
13.5.7 反思軟件設計模式的根基 202
本章練習 202
第 14 章 軟件架構舉例 204
14.1 三層架構 204
14.2 MVC 架構 204
14.2.1 什麽是MVC 204
14.2.2 MVC 模式 205
14.2.3 MVC 架構 207
14.3 MVVM 架構 208
14.3.1 什麽是MVVM 208
14.3.2 Vue.js 的基本用法 209
14.3.3 Vue.js 背後的MVVM 211
本章練習 216
第 15 章 軟件架構風格與描述方法 217
15.1 構建軟件架構的基本方法 217
15.2 軟件架構風格與策略 218
15.2.1 管道-過濾器 218
15.2.2 客戶-服務器 219
15.2.3 P2P 219
15.2.4 發布/訂閱 219
15.2.5 CRUD 220
15.2.6 層次化 221
15.3 軟件架構的描述方法 221
15.3.1 分解視圖 221
15.3.2 依賴視圖 222
15.3.3 泛化視圖 222
15.3.4 執行視圖 223
15.3.5 實現視圖 223
15.3.6 部署視圖 223
15.3.7 工作分配視圖 223
本章練習 224
第 16 章 什麽是高質量軟件 225
16.1 軟件質量的3 種視角 225
16.1.1 軟件質量的含義 225
16.1.2 產品視角下的軟件質量 225
16.1.3 過程視角下的軟件質量 228
16.1.4 價值視角下的軟件質量 229
16.2 幾種重要的軟件質量屬性 230
16.2.1 易於修改維護 230
16.2.2 良好的性能表現 231
16.2.3 安全性 231
16.2.4 可靠性 231
16.2.5 健壯性 232
16.2.6 易用性 232
16.2.7 商業目標 232
本章練習 234
第五篇 軟件危機的前生後世
第 17 章 軟件危機概述 236
17.1 軟件危機產生的背景 236
17.2 軟件危機的主要表現及根源 237
17.3 有關軟件危機的爭論 238
本章練習 239
第 18 章 軟件過程模型 240
18.1 軟件的生命周期概述 240
18.2 瀑布模型 241
18.3 原型化的瀑布模型 242
18.4 V 模型 243
18.5 分階段的增量和迭代開發過程 243
18.6 螺旋模型 244
本章練習 245
第 19 章 PSP 和TSP 246
19.1 個體和團隊 246
19.2 個體軟件過程 246
19.2.1 PSP 0 247
19.2.2 PSP 0.1 247
19.2.3 PSP 1 247
19.2.4 PSP 1.1 248
19.2.5 PSP 2 248
19.2.6 PSP 2.1 249
19.2.7 PSP 3 250
19.3 團隊軟件過程 250
19.3.1 團隊概述 250
19.3.2 TSP 概述 251
19.3.3 TSP 的基本原理 251
19.3.4 TSP 的基本工作方法 252
本章練習 253
第 20 章 CMM/CMMI 254
20.1 CMM/CMMI 簡介 254
20.2 CMM/CMMI 的作用 255
20.3 CMM/CMMI 的主要內容 256
20.4 CMMI 的評估過程 257
本章練習 257
第 21 章 敏捷方法 258
21.1 敏捷方法產生的背景 258
21.2 敏捷軟件開發宣言及所遵循的原則 258
21.3 Scrum 敏捷開發方法 259
本章練習 263
第 22 章 DevOps 265
22.1 什麽是DevOps . 265
22.2 DevOps 和敏捷方法 266
22.3 DevOps 和精益原則 266
22.4 DevOps 和全棧自動化 267
本章練習 269
測驗題 270