代碼中的軟件工程

孟寧

  • 出版商: 人民郵電
  • 出版日期: 2022-05-01
  • 定價: $539
  • 售價: 8.5$458
  • 語言: 簡體中文
  • 頁數: 278
  • ISBN: 7115578508
  • ISBN-13: 9787115578501
  • 相關分類: C 程式語言UML軟體工程
  • 立即出貨

  • 代碼中的軟件工程-preview-1
  • 代碼中的軟件工程-preview-2
代碼中的軟件工程-preview-1

買這商品的人也買了...

商品描述

本書共五篇:第一篇介紹常用工具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