《软件驱魔》

《软件驱魔》 《软件驱魔》

  • 书名:《软件驱魔》:调试和优化遗留代码的艺术
  • 分类:编程
  • 作者:布伦登 (Bill Blunden)
  • 出版社:机械工业出版社
  • 出版年:2014-5-1
  • 售价:CNY 59.00
  • 装订:平装
  • 页码:253

《软件驱魔》 内容介绍:

在典型的软件项目生命周期中,维护阶段的成本占总成本的60%以上。修复遗留代码中的bug一直是困扰软件从业人员的一个问题。遗留代码的调试不仅需要掌握调试代码的技术,还需要掌握调试的细节、方法与技巧。本书探讨了那些方便程序员调试和优化遗留软件的工具,从实用的角度,给出了比较多的方法介绍和建议,如防御性编程、单元测试、软件跟踪、调试、优化,甚至调试器的内部实现,这些内容有助于软件从业人员掌握调试遗留代码的方法。 本书是遗留代码调试和优化领域的代表性著作,是作者10多年来在软件bug中“驱魔”经验的结晶,Amazon五星评论。不仅从实用性角度深入、系统地讲解了调试和优化遗留代码的方法、技术和最佳实践,而且从源头上阐述如何避免掉进维护遗留代码的泥潭,编写出易于维护,甚至不需要维护的高质量代码。 本书共分7章:第1章介绍用于构建易于修改和调试的软件的相关技术;第2章讲解如何定位和消除软件bug;第3章提供理解问题以及程序的有用方法;第4章讲述调试器在计算机内部的工作原理;第5章深入探讨优化内存的相关技术和方法;第6章则探讨如何从CPU运行效率的角度优化代码的经验和技术;第7章结合社会和环境因素给出一些宝贵的建议

作者布伦登 (Bill Blunden)介绍:

Bill Blunden 拥有康奈尔大学物理学学士学位和凯斯西储大学运筹学硕士学位。资深系统维护专家,从事相关工作10余年,对系统软件的维护、遗留代码的调试和优化有非常深入的研究。活跃于计算机安全类社区,常与计算机安全领域多名世界级安全专家交流探讨。

《软件驱魔》 目录大纲:

目  录
译者序
前言
第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


微信扫一扫关注公众号

0 个评论

要评论图书请先登录注册

你也许想看:

More Exceptional C++中文版

《More Exceptional C++中文版》

[美] Herb Sutter.华中科技大学出版社.2002-9

“More Exceptional C++是Exceptional C++的续篇。根据多年程序开发的实践经验、Herb S...”

Web Application Development with Yii 2 and PHP

《Web Application Development with Yii 2 and PHP》

Mark Safronov,Jeffrey Winesett..2014-9-25

“This book is for professional PHP developers who wish to mas...”

卓越程序员密码

《卓越程序员密码》

[美] Ka Wai Cheung.人民邮电出版社.2012-11-3

“内容简介: 本书讲的不是你写的代码,而是你赖以生存的密码。 软件开发行业的从业人员成千上万,你如何保证自己出色地完成自己...”

Programming Concurrency on the JVM

《Programming Concurrency on the JVM》

Venkat Subramaniam.The Pragmatic Bookshelf.2011-6-1

“Concurrency on the Java platform has evolved, from the synch...”

Effective Python

《Effective Python》

Brett Slatkin.Addison-Wesley Professional.2015-3-8

“”

解析极限编程

《解析极限编程》

[美] Kent Beck.人民邮电出版社.2002-6

“极限编程(XP)是一种经历过实践考验的轻量级软件开发方法学。《解析极限编程》是XP宣言,也是第一本有关XP的图书。 全书...”

Pragmatic Guide to Subversion

《Pragmatic Guide to Subversion》

Mike Mason.Pragmatic Bookshelf.2010-08-28

“Subversion sets the standard in version control systems. Cha...”

测试驱动开发

《测试驱动开发》

Kent Beck.中国电力出版社.2004-4-1

“《测试驱动开发》(中文版)设想把编程看成是转动曲柄从井里提一桶水上来的过程。如果水桶比较小,那么仅需一个能自由转动的曲柄...”

Confident Ruby

《Confident Ruby》

Avdi Grimm..2013-10-22

“For many programmers, discovering Ruby is a revelation. They...”

Practical CSS3

《Practical CSS3》

Mills, Chris..2012-7

“This book teaches how to use CSS3 to build cool, responsive ...”

Unity Shaders and Effects Cookbook

《Unity Shaders and Effects Cookbook》

Lammers, Kenneth.Packt Publishing.

“”

Autotools

《Autotools》

John Calcote.No Starch Press.2010-7-20

“The GNU Autotools make it easy for developers to create soft...”

C语言开发手册

《C语言开发手册》

薛园园..2011-4

“《C语言开发手册(典藏版)》言简意赅、通俗易懂,知识点覆盖全面,详细介绍了C语言的程序设计及最新的C语言编程技术。毋庸置...”

函数程序设计语言--计算机模型、编译技术、系统结构

《函数程序设计语言--计算机模型、编译技术、系统结构》

郑纬民,等.清华大学出版社.1997-11

“内容简介 本书详细论述了函数程序设计语言的计算模型、编译技术以及面向函数程序设计语言的系统结构。其 主要内容包括:函数程...”

Windows环境下32位汇编语言程序设计

《Windows环境下32位汇编语言程序设计》

罗云彬.电子工业出版社.2003.3

“Windows环境下32位汇编语言是一种全新的编程语言。它使用与C++语言相同的API接口,不仅可以用来开发出大型的软件...”

优质代码

《优质代码》

[美]Stephen Vance 斯蒂芬•万斯.人民邮电出版社.2015-1

“本书讲述如何对所有的软件进行轻松的例行测试,书中为读者提供一些工具——一些实现模式,这些工具几乎可以测试任何代码。 本书...”

C++跨平台开发技术指南

《C++跨平台开发技术指南》

[美] Syd Logan.机械工业出版社.2009-1

“《C++跨平台开发技术指南》详细介绍c++语言的跨平台技术,包含的主要内容有:Netscape在向数百万Win.dows...”

Learning Android

《Learning Android》

Marko Gargenta.O'Reilly Media.2011-3-28

“If you're new to the Android mobile operating system, Learni...”

C++ Primer(第4版)习题解答

《C++ Primer(第4版)习题解答》

蒋爱军、李师贤、梅晓勇编.人民邮电出版社.2007-2

“《C++ Primer习题解答》为C++ Primer(第4版)的配套书籍,根据C++ Primer(第4版)中所介绍的...”

Software for Data Analysis

《Software for Data Analysis》

John Chambers.Springer.2008

“"R is nowadays the language used in programming for statisti...”