预购商品
书目分类
特别推荐
本書共五篇:第一篇介紹常用工具VSCode、Git和規則運算式;第二篇以C語言代碼為例介紹工程化編程的基本方法,涵蓋代碼的風格和規範、模組化、可複用、可重入函數與執行緒安全等;第三篇介紹從需求分析到軟體設計的基本建模方法——從需求分析開始,以UML為工具完成用例建模、業務領域建模、物件交互建模,終形成設計方案;第四篇探討軟體的元素、結構、特性和描述方法,以及高品質軟體的內涵等;第五篇回顧軟體危機的前因後果,並將之與PSP、TSP、CMM/CMMI、敏捷開發、DevOps等軟體過程和生命週期管理銜接起來。 本書以精品線上開放課程——“工程化編程實戰”為核心內容,增加了常用工具、需求分析與建模方法、軟體結構和軟體過程等相關內容,內容全面、新穎,實踐性強。本書主要針對在校學生編寫,適合開設相關專業的普通高校和高職院校作為主要教材,也可供不同層次的自學者學習參考。
第一篇 工欲善其事,必先利其器 第 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
孟寧 中國科學技術大學軟件學院專職教師,主講“ 軟件工程”“ Linux作業系統分析”等課程。他講授的兩門慕課獲評 精品在開放課程和本科課程,入選華為“智慧基座”精品慕課,被中國高校計算機教育MOOC聯盟評為 課程,榮獲安徽省教學成果獎二等獎,等等。線上課程視頻在讀行學、網易雲課堂、學堂線上、B站等線上平臺的累計學員達20余萬人。他專注於 Linux作業系統、軟件工程、人工智慧和區塊鏈等技術領域,與華為、OPPO、龍芯中科等多家 外企業和創業公司有技術合作。
客服公告
热门活动
订阅电子报