編程卓越之道 (捲3):軟件工程化 Write Great Code, Volume 3: Engineering Software

Randall Hyde 張若飛

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

商品描述

本書深入介紹了從開發方法、生產力到面向對象的設計需求和系統文檔的方方面面。通過本書,你將學習到:為什麽遵循軟件匠藝模型可以讓你做到最好;如何利用可追溯性來加強文檔的一致性;如何通過用例分析來創建自己的UML需求;如何利用IEEE文檔標準開發出更好的軟件。通過對高質量軟件開發中技能、態度和道德方面的深入講解,本書揭示瞭如何將工程原理應用於編程的正確方法。在這個過程中,Hyde不僅會教給你規則,還會告訴你什麽時候該打破規則。他不僅會啟發你認識什麽是最佳實踐,同時還會讓你發現適合自己的最佳實踐。本書中包含了大量的資源和示例,它是你編寫代碼的首選指南,將讓你從同行中脫穎而出。

目錄大綱

第 1 部分 個人軟件工程 1 軟件開發的比喻 ................................................................................................. 2 1.1 什麽是軟件 .......................................................................................................... 2 1.1.1 軟件不是被製造出來的 ........................................................................... 3 1.1.2 軟件不會磨損 ........................................................................................... 3 1.1.3 大多數軟件都是定製化的 ....................................................................... 3 1.1.4 軟件可以很容易升級 ............................................................................... 4 1.1.5 軟件不是一個獨立的實體 ....................................................................... 4 1.2 與其他領域的相似性 ........................................................................................... 4 1.2.1 程序員像藝術家一樣 ............................................................................... 4 1.2.2 程序員像建築師一樣 ............................................................................... 5 1.2.3 程序員像工程師一樣 ............................................................................... 6 1.2.4 程序員像工匠一樣 ................................................................................... 7 1.2.5 究竟是藝術家、建築師、工程師還是工匠 ........................................... 7 1.3 軟件工程 .............................................................................................................. 8 1.3.1 一個正式的定義 ....................................................................................... 9 1.3.2 項目規模 ................................................................................................. 10 1.3.3 軟件工程的問題 ..................................................................................... 12 1.4 軟件匠藝 ............................................................................................................ 13 1.4.1 教育 ......................................................................................................... 13 1.4.2 學徒階段 ................................................................................................. 14 1.4.3 軟件熟練工 ............................................................................................. 15 1.4.4 大師級工匠 ............................................................................................. 15 1.4.5 軟件匠藝的不足 ..................................................................................... 16 目錄 XXI 1.5 通往卓越編程的道路 ......................................................................................... 16 1.6 獲取更多信息 .................................................................................................... 17 2 生產力 ............................................................................................................. 18 2.1 什麽是生產力 .................................................................................................... 18 2.2 程序員生產力與團隊生產力的比較 ................................................................. 19 2.3 工時和實際時間 ................................................................................................ 20 2.4 概念復雜性和範圍復雜性 ................................................................................. 21 2.5 預測生產力 ........................................................................................................ 22 2.6 度量指標,以及我們為什麽需要它們 ............................................................. 23 2.6.1 可執行文件大小度量指標 ..................................................................... 24 2.6.2 機器指令度量指標 ................................................................................. 24 2.6.3 代碼行數度量指標 ................................................................................. 25 2.6.4 語句數量度量指標 ................................................................................. 25 2.6.5 功能點分析 ............................................................................................. 26 2.6.6 McCabe 圈復雜度度量指標 ................................................................... 26 2.6.7 其他度量指標 ......................................................................................... 27 2.6.8 度量指標的問題 ..................................................................................... 28 2.7 我們怎樣才能每天寫出 10 行代碼 ................................................................... 29 2.8 估計開發時間 .................................................................................................... 30 2.8.1 估計小型項目的開發時間 ..................................................................... 30 2.8.2 估計中型項目和大型項目的開發時間 ................................................. 31 2.8.3 估計開發時間的問題 ............................................................................. 32 2.9 危機模式項目管理............................................................................................. 33 2.10 如何提高工作效率 ........................................................................................... 34 2.10.1 合理選擇軟件開發工具 ....................................................................... 34 2.10.2 管理開銷 ............................................................................................... 36 2.10.3 設置明確的目標和里程碑 ................................................................... 37 2.10.4 練習自我激勵 ....................................................................................... 37 2.10.5 集中註意力,消除乾擾 ....................................................................... 38 2.10.6 如果你覺得無聊,那麽就做點別的事情 ........................................... 39 2.10.7 盡可能自立 ........................................................................................... 39 XXII 編程卓越之道(捲 3):軟件工程化 2.10.8 識別何時需要幫助 ............................................................................... 40 2.10.9 剋服士氣低落 ....................................................................................... 40 2.11 獲取更多信息 ................................................................................................... 41 3 軟件開發模型................................................................................................... 42 3.1 軟件開發生命周期............................................................................................. 42 3.2 軟件開發模型 .................................................................................................... 45 3.2.1 非正式模型 ............................................................................................. 46 3.2.2 瀑布模型 ................................................................................................. 47 3.2.3 V 模型 ..................................................................................................... 49 3.2.4 迭代模型 ................................................................................................. 50 3.2.5 螺旋模型 ................................................................................................. 52 3.2.6 快速應用程序開發模型 ......................................................................... 54 3.2.7 增量模型 ................................................................................................. 56 3.3 軟件開發方法論 ................................................................................................ 57 3.3.1 傳統的(預測型)方法論 ..................................................................... 57 3.3.2 自適應型方法論 ..................................................................................... 57 3.3.3 敏捷開發 ................................................................................................. 58 3.3.4 極限編程 ................................................................................................. 60 3.3.5 Scrum ....................................................................................................... 73 3.3.6 功能驅動開發 ......................................................................................... 74 3.4 卓越程序員的模型和方法論 ............................................................................. 77 3.5 獲取更多信息 .................................................................................................... 77 第 2 部分 UML 4 UML 和用例介紹 .............................................................................................. 80 4.1 UML 標準 ........................................................................................................... 80 4.2 UML 用例模型 ................................................................................................... 81 4.2.1 用例圖的元素 ......................................................................................... 81 4.2.2 用例包 ..................................................................................................... 84 目錄 XXIII 4.2.3 用例包含 ................................................................................................. 84 4.2.4 用例泛化 ................................................................................................. 85 4.2.5 用例擴展 ................................................................................................. 87 4.2.6 用例故事 ................................................................................................. 88 4.2.7 用例場景 ................................................................................................. 95 4.3 UML 系統邊界圖 ............................................................................................... 97 4.4 除用例以外 ........................................................................................................ 97 4.5 獲取更多信息 .................................................................................................... 98 5 UML 活動圖 ..................................................................................................... 99 5.1 UML 活動狀態符號 ........................................................................................... 99 5.1.1 開始和結束狀態 ................................................................................... 100 5.1.2 活動 ....................................................................................................... 100 5.1.3 狀態 ....................................................................................................... 101 5.1.4 轉移 ....................................................................................................... 101 5.1.5 條件 ....................................................................................................... 102 5.1.6 合並點 ................................................................................................... 104 5.1.7 事件和觸發器 ....................................................................................... 105 5.1.8 分叉和合並(同步) ........................................................................... 107 5.1.9 調用符號 ............................................................................................... 108 5.1.10 分區 ..................................................................................................... 108 5.1.11 註釋和註解 ......................................................................................... 110 5.1.12 連接器 ................................................................................................. 110 5.1.13 其他活動圖符號 ................................................................................. 111 5.2 擴展 UML 活動圖 ............................................................................................ 111 5.3 獲取更多信息 .................................................................................................. 113 6 UML 類圖 ...................................................................................................... 114 6.1 UML 中的面向對象分析與設計 ..................................................................... 114 6.2 類圖中的可見性 .............................................................................................. 116 6.2.1 公共的類可見性 ................................................................................... 116 6.2.2 私有的類可見性 ................................................................................... 117 XXIV 編程卓越之道(捲 3):軟件工程化 6.2.3 受保護的類可見性 ............................................................................... 118 6.2.4 包級別的類可見性 ............................................................................... 118 6.2.5 不支持的可見性類型 ........................................................................... 119 6.3 類屬性 .............................................................................................................. 120 6.3.1 屬性可見性 ........................................................................................... 120 6.3.2 屬性派生值 ........................................................................................... 120 6.3.3 屬性名稱 ............................................................................................... 121 6.3.4 屬性數據類型 ....................................................................................... 122 6.3.5 操作數據類型(返回值) ................................................................... 122 6.3.6 屬性多重性 ........................................................................................... 123 6.3.7 屬性初始值 ........................................................................................... 123 6.3.8 屬性字符串 ........................................................................................... 124 6.3.9 屬性語法 ............................................................................................... 124 6.4 類操作 .............................................................................................................. 125 6.5 UML 的類關系 ................................................................................................. 126 6.5.1 類的依賴關系 ....................................................................................... 127 6.5.2 類的關聯關系 ....................................................................................... 127 6.5.3 類的聚合關系 ....................................................................................... 129 6.5.4 類的組合關系 ....................................................................................... 130 6.5.5 關系特性 ............................................................................................... 131 6.5.6 類的繼承關系 ....................................................................................... 140 6.6 對象 .................................................................................................................. 140 6.7 獲取更多信息 .................................................................................................. 141 7 UML 交互圖 ................................................................................................... 142 7.1 時序圖 .............................................................................................................. 142 7.1.1 生命線 ................................................................................................... 143 7.1.2 消息類型 ............................................................................................... 143 7.1.3 消息標簽 ............................................................................................... 145 7.1.4 消息序號 ............................................................................................... 145 7.1.5 守衛條件 ............................................................................................... 146 7.1.6 迭代 ....................................................................................................... 147 目錄 XXV 7.1.7 長延遲和時間約束 ............................................................................... 148 7.1.8 外部對象 ............................................................................................... 149 7.1.9 激活條 ................................................................................................... 150 7.1.10 分支 ..................................................................................................... 150 7.1.11 可選流 ................................................................................................. 152 7.1.12 對象的創建和銷毀 ............................................................................. 153 7.1.13 時序片段 ............................................................................................. 154 7.2 協作圖 .............................................................................................................. 173 7.3 獲取更多信息 .................................................................................................. 174 8 其他 UML 圖 .................................................................................................. 175 8.1 組件圖 .............................................................................................................. 175 8.2 包圖 .................................................................................................................. 178 8.3 部署圖 .............................................................................................................. 179 8.4 合成結構圖 ...................................................................................................... 181 8.5 狀態圖 .............................................................................................................. 185 8.6 關於 UML 的更多信息 .................................................................................... 187 8.7 獲取更多信息 .................................................................................................. 188 第 3 部分 文檔 9 系統文檔 ........................................................................................................ 190 9.1 系統文檔類型 .................................................................................................. 191 9.2 可追溯性 .......................................................................................................... 193 9.2.1 建立文檔可追溯性的方法 ................................................................... 193 9.2.2 標簽格式 ............................................................................................... 194 9.2.3 需求/反向可追溯性矩陣 ...................................................................... 200 9.3 確認、驗證和審查........................................................................................... 204 9.4 通過文檔降低開發成本 ................................................................................... 205 9.4.1 通過確認降低成本 ............................................................................... 205 9.4.2 通過驗證降低成本 ............................................................................... 206 XXVI 編程卓越之道(捲 3):軟件工程化 9.5 獲取更多信息 .................................................................................................. 207 10 需求文檔 ...................................................................................................... 209 10.1 需求的來源和可追溯性 ................................................................................. 209 10.1.1 建議的需求格式 ................................................................................. 210 10.1.2 好需求的特點 ..................................................................................... 211 10.2 設計目標 ........................................................................................................ 218 10.3 系統需求規範文檔 ......................................................................................... 218 10.4 軟件需求規範文檔 ......................................................................................... 219 10.4.1 介紹 ..................................................................................................... 221 10.4.2 總體描述 ............................................................................................. 222 10.4.3 具體需求 ............................................................................................. 224 10.4.4 支持信息 ............................................................................................. 229 10.4.5 軟件需求規範示例 ............................................................................. 230 10.5 創建需求 ........................................................................................................ 240 10.6 用例 ................................................................................................................ 242 10.6.1 啟用/禁用調試模式 ............................................................................ 244 10.6.2 啟用/禁用以太網 ................................................................................ 244 10.6.3 啟用/禁用 RS-232 ............................................................................... 246 10.6.4 啟用/禁用測試模式 ............................................................................ 246 10.6.5 啟用/禁用 USB ................................................................................... 246 10.6.6 讀取撥碼開關 ..................................................................................... 247 10.7 根據用例創建 DAQ 軟件需求 ...................................................................... 247 10.8 (從 SRS 中選擇的)DAQ 軟件需求 .......................................................... 248 10.9 用需求信息更新可追溯性矩陣 ..................................................................... 252 10.9.1 通過審查驗證的需求 ......................................................................... 253 10.9.2 通過測試驗證的需求 ......................................................................... 255 10.10 獲取更多信息 .............................................................................................. 255 11 軟件設計描述文檔 ........................................................................................ 256 11.1 IEEE Std 1016-1998 和 IEEE Std 1016-2009 ................................................ 257 11.2 IEEE 1016-2009 的概念模型 ......................................................................... 257 目錄 XXVII 11.2.1 設計關註點和設計利益相關方 ......................................................... 257 11.2.2 設計觀點和設計元素 ......................................................................... 258 11.2.3 設計視圖、設計覆蓋和設計原理 ..................................................... 270 11.2.4 IEEE Std 1016-2009 的概念模型 ....................................................... 273 11.3 SDD 所需內容 ................................................................................................ 275 11.3.1 SDD 標識 ............................................................................................ 275 11.3.2 設計利益相關方和設計關註點 ......................................................... 276 11.3.3 設計視圖、設計觀點、設計覆蓋和設計原理 .................................. 276 11.4 SDD 的可追溯性和標簽 ................................................................................ 276 11.5 建議的 SDD 大綱 ........................................................................................... 277 11.6 SDD 文檔示例 ................................................................................................ 278 11.7 用設計信息更新可追溯性矩陣 ..................................................................... 293 11.8 創建軟件設計 ................................................................................................. 293 11.9 獲取更多信息 ................................................................................................... 294 12 軟件測試文檔 ............................................................................................... 295 12.1 Std 829 中的軟件測試文檔 ........................................................................... 295 12.1.1 流程支持 ............................................................................................. 296 12.1.2 完整性級別和風險評估 ..................................................................... 297 12.1.3 軟件開發測試級別 ............................................................................. 299 12.2 測試計劃 ........................................................................................................ 300 12.2.1 主測試計劃 ......................................................................................... 300 12.2.2 級別測試計劃 ..................................................................................... 302 12.2.3 級別測試設計文檔 ............................................................................. 304 12.3 軟件審查列表文檔 ......................................................................................... 305 12.3.1 SRL 大綱示例 ..................................................................................... 306 12.3.2 SRL 文檔示例 ..................................................................................... 306 12.3.3 將 SRL 項添加到可追溯性矩陣中 .................................................... 310 12.4 軟件測試用例文檔 ......................................................................................... 310 12.4.1 STC 文檔中的介紹 ............................................................................. 313 12.4.2 詳細說明 ............................................................................................. 314 12.4.3 其他 ..................................................................................................... 317 XXVIII 編程卓越之道(捲 3):軟件工程化 12.4.4 軟件測試用例文檔示例 ..................................................................... 318 12.4.5 用 STC 信息更新 RTM 文檔.............................................................. 327 12.5 軟件測試過程文檔 ......................................................................................... 327 12.5.1 IEEE Std 829-2009 軟件測試過程 ..................................................... 329 12.5.2 軟件測試過程的大綱擴展 ................................................................. 329 12.5.3 STP 文檔中的介紹 ............................................................................. 332 12.5.4 測試過程 ............................................................................................. 334 12.5.5 其他 ..................................................................................................... 337 12.5.6 索引 ..................................................................................................... 337 12.5.7 STP 文檔示例 ..................................................................................... 338 12.5.8 用 STP 信息更新 RTM 文檔 .............................................................. 344 12.6 級別測試日誌 ................................................................................................ 345 12.6.1 級別測試日誌文檔中的介紹 ............................................................. 346 12.6.2 詳細說明 ............................................................................................. 346 12.6.3 術語表 ................................................................................................. 347 12.6.4 關於測試日誌的一些註釋 ................................................................. 347 12.7 異常報告 ........................................................................................................ 351 12.7.1 異常報告文檔中的介紹 ..................................................................... 352 12.7.2 詳細說明 ............................................................................................. 353 12.7.3 對異常報告的幾點建議 ..................................................................... 354 12.8 測試報告 ........................................................................................................ 355 12.8.1 主測試報告的簡要介紹 ..................................................................... 356 12.8.2 級別測試報告 ..................................................................................... 357 12.9 你真的需要這些嗎 ......................................................................................... 358 12.10 獲取更多信息 .............................................................................................. 359 後記:如何設計卓越的代碼................................................................................. 360