《軟體驅魔》是一部由布倫登所著書籍,機械工業出版社出版發行。
基本介紹
- 書名:軟體驅魔
- 作者:布倫登
- ISBN: 9787111462842
- 出版社:機械工業出版社
出版信息,內容簡介,作者簡介,目錄,叢書信息,
出版信息
作者:布倫登 (Bill Blunden)
出版社:機械工業出版社
副標題:調試和最佳化遺留代碼的藝術
原作名:Software Exorcism: A Handbook for Debugging and Optimizing Legacy Code
譯者:施遠敏/張燎原/何軍
出版年:2014-5-1
頁數:253
定價:CNY 59.00
裝幀:平裝
叢書:華章科技·名家經典系列
ISBN:9787111462842
出版社:機械工業出版社
副標題:調試和最佳化遺留代碼的藝術
原作名:Software Exorcism: A Handbook for Debugging and Optimizing Legacy Code
譯者:施遠敏/張燎原/何軍
出版年:2014-5-1
頁數:253
定價:CNY 59.00
裝幀:平裝
叢書:華章科技·名家經典系列
ISBN:9787111462842
內容簡介
在典型的軟體項目生命周期中,維護階段的成本占總成本的60%以上。修復遺留代碼中的bug一直是困擾軟體從業人員的一個問題。遺留代碼的調試不僅需要掌握調試代碼的技術,還需要掌握調試的細節、方法與技巧。本書探討了那些方便程式設計師調試和最佳化遺留軟體的工具,從實用的角度,給出了比較多的方法介紹和建議,如防禦性編程、單元測試、軟體跟蹤、調試、最佳化,甚至調試器的內部實現,這些內容有助於軟體從業人員掌握調試遺留代碼的方法。
本書是遺留代碼調試和最佳化領域的代表性著作,是作者10多年來在軟體bug中“驅魔”經驗的結晶,Amazon五星評論。不僅從實用性角度深入、系統地講解了調試和最佳化遺留代碼的方法、技術和最佳實踐,而且從源頭上闡述如何避免掉進維護遺留代碼的泥潭,編寫出易於維護,甚至不需要維護的高質量代碼。
作者簡介
Bill Blunden 擁有康奈爾大學物理學學士學位和凱斯西儲大學運籌學碩士學位。資深系統維護專家,對系統軟體的維護、遺留代碼的調試和最佳化有非常深入的研究。
目錄
目 錄
譯者序
前言
第1章 預防藥 1
1.1?核心問題 2
1.1.1 上市時間的壓力 2
1.1.2 不確定的規格說明 4
1.1.3 以功能特性換時間 5
1.1.4 寫下來 5
1.1.5 複雜性 8
1.2 防禦性編程 9
1.2.1 內聚和耦合 9
1.2.2 錯誤輸入檢查 12
1.2.3 數據範圍 18
1.2.4 日誌 20
1.2.5 文檔 28
1.2.6 為改變而設計 31
1.2.7 增量精煉 33
1.3 單元測試 34
1.3.1 自動化測試的動機 35
1.3.2 實現框架的步驟 36
1.3.3 框架擴展 43
1.4 工具的配置 46
1.4.1 使用編譯器警告 46
1.4.2 發行版本的設定 47
1.5 機器相關性 48
1.5.1 位元組序 49
1.5.2 記憶體對齊 50
1.5.3 數據類型大小 51
1.5.4 虛擬機的好處 52
1.6 小結 53
1.6.1 底線:為什麼出現bug 54
1.6.2 改進清單:bug主動預防 54
第2章 調試技巧 55
2.1 初始步驟 56
2.1.1 復現問題 56
2.1.2 無法復現的問題 56
2.1.3 驗證bug是真實存在的 59
2.2 消除缺陷:快速修復 60
2.2.1 檢查近期改動 60
2.2.2 使用跟蹤信息 61
2.2.3 似曾相識 61
2.2.4 明確何時放棄 61
2.3 消除缺陷:科學方法論 62
2.3.1 一般步驟 62
2.3.2 定位問題:增量集成法 63
2.3.3 定位問題:二分法 64
2.3.4 理解問題 64
2.3.5 防範失誤 65
2.3.6 診斷工具 67
2.3.7 基礎調試操作 75
2.4 保留記錄 80
2.4.1 個人記錄 80
2.4.2 協同開發下的記錄 81
2.5 小結 84
第3章 理解問題 86
3.1 知識是如何丟失的 87
3.1.1 競爭 87
3.1.2 人員流失 89
3.1.3 升職 90
3.2 難懂的代碼 91
3.2.1 設計問題 91
3.2.2 混淆 95
3.2.3 誤導性的代碼 104
3.3 反向工程 105
3.3.1 通用策略 105
3.3.2 對策 111
3.3.3 建立知識庫 116
3.4 小結 118
第4章 調試器內部機制 119
4.1 調試器的種類 119
4.1.1 機器調試器與符號調試器 119
4.1.2 調試基礎:自定義構建 125
4.1.3 調試基礎:系統調用 136
4.1.4 調試基礎:解釋器 151
4.1.5 核心調試器 155
4.1.6 界面:命令行與圖形用戶界面 157
4.2 符號調試器擴展 157
4.2.1 動態斷點 157
4.2.2 單步執行 158
4.3 應對策略 159
4.3.1 系統調用 159
4.3.2 移除調試信息 160
4.3.3 代碼鹽 161
4.3.4 混合記憶體模型 162
4.4 小結 163
第5章 最佳化:記憶體占用 165
5.1 被遺忘的歷史 167
5.2 程式的記憶體布局 168
5.2.1 場景:單段程式 169
5.2.2 場景:僅代碼段和數據段 170
5.2.3 場景:所有4種段類型 171
5.3 代碼段 172
5.3.1 剪下貼上式編程 172
5.3.2 宏 175
5.3.3 殭屍代碼 177
5.4 數據段 177
5.4.1 雙重用途的數據結構 178
5.4.2 位域 180
5.4.3 壓縮算法 181
5.5 棧 183
5.5.1 活動記錄 184
5.5.2 函式參數 188
5.5.3 局部變數 190
5.6 堆 191
5.6.1 記憶體池 192
5.6.2 回收 196
5.6.3 延遲實例化 197
5.6.4 跟蹤記憶體使用情況 199
5.7 小結 201
第6章 最佳化:CPU周期 202
6.1 程式控制跳轉 203
6.1.1 標籤與GOTO 203
6.1.2 函式參數 205
6.1.3 帶可變參數的函式 206
6.1.4 系統調用 207
6.1.5 遞歸 210
6.2 程式控制分支 211
6.2.1 查找表 211
6.2.2 switch與if-else 213
6.2.3 常見情況放在前,罕見情況放在後 215
6.3 程式控制循環 215
6.3.1 循環不變數 216
6.3.2 函式調用 217
6.3.3 數組引用 219
6.3.4 分解複合布爾表達式 220
6.3.5 循環展開 221
6.3.6 循環干涉 221
6.3.7 提取程式分支語句 221
6.4 記憶體管理 222
6.4.1 處理開銷 223
6.4.2 引用局部性 226
6.5 輸入/輸出 227
6.5.1 快取 228
6.5.2 緩衝 229
6.5.3 先進的技術 230
6.6 異常 231
6.6.1 動態註冊模型 234
6.6.2 靜態表模型 235
6.6.3 處理開銷 235
6.6.4 濫用異常 237
6.7 昂貴的操作 237
6.7.1 消除常見的子表達式 237
6.7.2 浮點運算神話 237
6.7.3 強度折減 239
6.7.4 同步 240
6.7.5 簡寫操作符的神話 243
6.8 快速修復 243
6.8.1 更好的硬體 243
6.8.2 約束問題 244
6.8.3 編譯器設定 244
6.9 小結 245
6.10 信息匯總 246
第7章 最後的贈言 247
7.1 對於原始碼完整性的其他威脅 248
7.1.1 時髦技術:一個案例研究 248
7.1.2 洗腦101 249
7.1.3 真正的問題 249
7.2 保持書面記錄 250
7.2.1 悄悄記錄 250
7.2.2 隱私的神話 250
7.3 歷史總是重演 251
譯者序
前言
第1章 預防藥 1
1.1?核心問題 2
1.1.1 上市時間的壓力 2
1.1.2 不確定的規格說明 4
1.1.3 以功能特性換時間 5
1.1.4 寫下來 5
1.1.5 複雜性 8
1.2 防禦性編程 9
1.2.1 內聚和耦合 9
1.2.2 錯誤輸入檢查 12
1.2.3 數據範圍 18
1.2.4 日誌 20
1.2.5 文檔 28
1.2.6 為改變而設計 31
1.2.7 增量精煉 33
1.3 單元測試 34
1.3.1 自動化測試的動機 35
1.3.2 實現框架的步驟 36
1.3.3 框架擴展 43
1.4 工具的配置 46
1.4.1 使用編譯器警告 46
1.4.2 發行版本的設定 47
1.5 機器相關性 48
1.5.1 位元組序 49
1.5.2 記憶體對齊 50
1.5.3 數據類型大小 51
1.5.4 虛擬機的好處 52
1.6 小結 53
1.6.1 底線:為什麼出現bug 54
1.6.2 改進清單:bug主動預防 54
第2章 調試技巧 55
2.1 初始步驟 56
2.1.1 復現問題 56
2.1.2 無法復現的問題 56
2.1.3 驗證bug是真實存在的 59
2.2 消除缺陷:快速修復 60
2.2.1 檢查近期改動 60
2.2.2 使用跟蹤信息 61
2.2.3 似曾相識 61
2.2.4 明確何時放棄 61
2.3 消除缺陷:科學方法論 62
2.3.1 一般步驟 62
2.3.2 定位問題:增量集成法 63
2.3.3 定位問題:二分法 64
2.3.4 理解問題 64
2.3.5 防範失誤 65
2.3.6 診斷工具 67
2.3.7 基礎調試操作 75
2.4 保留記錄 80
2.4.1 個人記錄 80
2.4.2 協同開發下的記錄 81
2.5 小結 84
第3章 理解問題 86
3.1 知識是如何丟失的 87
3.1.1 競爭 87
3.1.2 人員流失 89
3.1.3 升職 90
3.2 難懂的代碼 91
3.2.1 設計問題 91
3.2.2 混淆 95
3.2.3 誤導性的代碼 104
3.3 反向工程 105
3.3.1 通用策略 105
3.3.2 對策 111
3.3.3 建立知識庫 116
3.4 小結 118
第4章 調試器內部機制 119
4.1 調試器的種類 119
4.1.1 機器調試器與符號調試器 119
4.1.2 調試基礎:自定義構建 125
4.1.3 調試基礎:系統調用 136
4.1.4 調試基礎:解釋器 151
4.1.5 核心調試器 155
4.1.6 界面:命令行與圖形用戶界面 157
4.2 符號調試器擴展 157
4.2.1 動態斷點 157
4.2.2 單步執行 158
4.3 應對策略 159
4.3.1 系統調用 159
4.3.2 移除調試信息 160
4.3.3 代碼鹽 161
4.3.4 混合記憶體模型 162
4.4 小結 163
第5章 最佳化:記憶體占用 165
5.1 被遺忘的歷史 167
5.2 程式的記憶體布局 168
5.2.1 場景:單段程式 169
5.2.2 場景:僅代碼段和數據段 170
5.2.3 場景:所有4種段類型 171
5.3 代碼段 172
5.3.1 剪下貼上式編程 172
5.3.2 宏 175
5.3.3 殭屍代碼 177
5.4 數據段 177
5.4.1 雙重用途的數據結構 178
5.4.2 位域 180
5.4.3 壓縮算法 181
5.5 棧 183
5.5.1 活動記錄 184
5.5.2 函式參數 188
5.5.3 局部變數 190
5.6 堆 191
5.6.1 記憶體池 192
5.6.2 回收 196
5.6.3 延遲實例化 197
5.6.4 跟蹤記憶體使用情況 199
5.7 小結 201
第6章 最佳化:CPU周期 202
6.1 程式控制跳轉 203
6.1.1 標籤與GOTO 203
6.1.2 函式參數 205
6.1.3 帶可變參數的函式 206
6.1.4 系統調用 207
6.1.5 遞歸 210
6.2 程式控制分支 211
6.2.1 查找表 211
6.2.2 switch與if-else 213
6.2.3 常見情況放在前,罕見情況放在後 215
6.3 程式控制循環 215
6.3.1 循環不變數 216
6.3.2 函式調用 217
6.3.3 數組引用 219
6.3.4 分解複合布爾表達式 220
6.3.5 循環展開 221
6.3.6 循環干涉 221
6.3.7 提取程式分支語句 221
6.4 記憶體管理 222
6.4.1 處理開銷 223
6.4.2 引用局部性 226
6.5 輸入/輸出 227
6.5.1 快取 228
6.5.2 緩衝 229
6.5.3 先進的技術 230
6.6 異常 231
6.6.1 動態註冊模型 234
6.6.2 靜態表模型 235
6.6.3 處理開銷 235
6.6.4 濫用異常 237
6.7 昂貴的操作 237
6.7.1 消除常見的子表達式 237
6.7.2 浮點運算神話 237
6.7.3 強度折減 239
6.7.4 同步 240
6.7.5 簡寫操作符的神話 243
6.8 快速修復 243
6.8.1 更好的硬體 243
6.8.2 約束問題 244
6.8.3 編譯器設定 244
6.9 小結 245
6.10 信息匯總 246
第7章 最後的贈言 247
7.1 對於原始碼完整性的其他威脅 248
7.1.1 時髦技術:一個案例研究 248
7.1.2 洗腦101 249
7.1.3 真正的問題 249
7.2 保持書面記錄 250
7.2.1 悄悄記錄 250
7.2.2 隱私的神話 250
7.3 歷史總是重演 251
叢書信息
華章科技·名家經典系列 (共5冊), 這套叢書還有 《算法心得:高效算法的奧秘(原書第2版)》,《數學與泛型編程》,《修改代碼的藝術》,《Windows運行時編程權威指南》