图书介绍
程序调试思想与实践2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

- (美)Matt Telles,(美)Yuan Hsieh著;邓劲生等译 著
- 出版社: 北京:中国水利水电出版社
- ISBN:7508410084
- 出版时间:2002
- 标注页数:346页
- 文件大小:22MB
- 文件页数:364页
- 主题词:
PDF下载
下载说明
程序调试思想与实践PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 Debug简介1
1.1 本书的内容2
1.2 为什么要关注bug3
1.3 什么是bug4
1.4 本书的对象4
1.5 本书的组织5
1.6 调试简史6
1.7 小结8
1.8 bug问题8
第2章 研究著名的(以及不太著名的)bug例子10
2.1.1 现实生活中的分布式系统11
2.1 大致情况11
2.1.2 Therac-2515
2.2 bug实例#119
2.3 bug实例#222
2.4 bug实例#324
2.5 bug实例#428
2.5.1 AT T电话中断29
2.5.2 缓冲区溢出32
2.6 小结35
2.7 bug问题38
3.1 什么是bug39
第3章 什么是bug39
3.1.1 什么是软件缺陷41
3.1.2 调试不是什么42
3.1.3 什么是调试43
3.2 为什么要考虑bug44
3.2.1 bug的信心代价44
3.2.2 名声和形象的代价45
3.2.3 bug的财产损失46
3.3.1 bug的发生都有原因47
3.3.2 bug是可以重现的47
3.3 bug的本质47
3.3.3 bug通常在有变化时出现48
3.3.4 bug也会产生bug49
3.3.5 bug吸引bug49
3.3.6 证明缺乏理解49
3.3.7 难的代码对大家都一样难51
3.3.8 在软件生命周期中不同阶段的bug有不同的性质51
3.3.9 稳定的系统中的bug的原因可能比错误的系统中的bug的原因更难以识别53
3.4 小结54
3.5 bug问题54
4.1.1 复杂性55
4.1 为什么会出现bug55
第4章 bug的生命周期55
4.1.2 现实61
4.1.3 人类的弱点63
4.2 bug是如何产生的64
4.2.1 对软件做修改64
4.2.2 拙劣的描述67
4.2.3 方法的复杂性68
4.2.4 缺少一致的观点70
4.2.5 程序员错误71
4.3 bug是如何躲过测试的74
4.3.3 时间不充分75
4.3.4 缺少重现能力75
4.3.1 遵循形式过程代价太大75
4.3.2 政策/市场决策75
4.3.5 自负76
4.3.6 差劲的描述/不知道要测试什么76
4.3.7 缺乏测试环境77
4.4 小结77
4.5 bug问题77
第5章 bug的分类79
5.1.2 设计阶段的bug80
5.1.1 需求阶段的bug80
5.1 bug的种类80
5.1.3 实现阶段的bug81
5.1.4 处理阶段的bug83
5.1.5 编译的bug85
5.1.6 配置的bug86
5.1.7 未来计划bug86
5.1.8 文档bug87
5.2 严重性88
5.3 bug分类法88
5.3.5 例子89
5.4.1 内存或资源泄漏89
5.4 bug的分类89
5.3.2 描述89
5.3.4 症状89
5.3.3 最一般的环境89
5.3.1 名字89
5.4.2 逻辑错误91
5.4.3 编码错误92
5.4.4 内存侵占94
5.4.5 循环错误96
5.4.6 条件错误97
5.4.7 指针错误99
5.4.8 分配/释放错误100
5.4.9 多线程错误102
5.4.10 定时错误103
5.4.11 分布式应用程序错误105
5.4.12 存储错误107
5.4.13 集成错误108
5.4.14 转换错误109
5.4.15 硬编码长度/尺寸110
5.4.16 版本bug112
5.4.17 不恰当地重用bug113
5.4.18 布尔bug114
5.5 为什么分类重要116
5.6 小结116
5.7 bug问题117
第6章 检测工作118
6.1 整体调试118
6.1.1 复制和粘贴错误119
6.1.2 全局变量120
6.1.3 副作用121
6.1.4 观察意外的消息或结果123
6.2 调试方法124
6.2.1 科学方法124
6.1.5 跟踪诊断显示124
6.2.2 直觉125
6.2.3 思维跳跃125
6.2.4 诊断126
6.3 商业技巧126
6.3.1 内嵌式调试器127
6.3.2 日志对象127
6.3.3 跟踪对象128
6.3.4 隐藏的诊断屏129
6.3.5 为以后的程序运行保存bug数据129
6.4.2 数据依赖130
6.4.1 测试实例130
6.4 可重现实例130
6.4.3 从根本原因中分离症状131
6.4.4 收集观察结果131
6.4.5 统计/公理132
6.5 小结133
6.6 bug问题133
第7章 调试工具及其使用时机135
7.1 测试和调试环境135
7.1.1 测试组135
7.1.2 测试套136
7.1.3 过时的bug组136
7.1.4 日志137
7.2 中级调试技术138
7.2.1 内存漏洞检测工具138
7.1.5 跟踪138
7.2.2 交叉索引及工具用法140
7.2.3 调试器141
7.2.4 Heisenberg的不确定原理141
7.2.5 嵌入式诊断142
7.2.6 断言的弊端143
7.2.7 同用户一起工作143
7.2.9 代码覆盖范围分析144
7.2.8 bug跟踪144
7.2.10 编译器145
7.3 小结147
7.4 bug问题147
第8章 调试的一般过程148
8.1 识别问题148
8.1.1 这是bug吗148
8.1.2 为什么它是一个bug149
8.1.3 程序应该在做什么150
8.1.4 程序到底在做什么151
8.2.1 用户对问题的描述152
8.2 收集信息152
8.2.2 日志文件154
8.2.3 新自观察156
8.2.4 症状156
8.2.5 失败的测试实例157
8.2.6 相似的问题157
8.2.7 近期变化158
8.2.8 运行的环境信息159
8.3 形成假设161
8.4 测试假设166
8.5 崩溃的Web服务器示例166
8.6 重复直到某个假设被证实168
8.7 提出解决方法169
8.8 测试解决方法170
8.9 重复直到某个解决方法被证实170
8.10 回归测试171
8.11 小结171
8.12 bug问题172
第9章 调试技术173
9.1 插入式调试和非插入式调试173
9.2 短期调试和长期调试技术174
9.3 成品软件调试的折衷办法175
9.4.2 查看观察日志176
9.4.1 面对实际用户176
9.4 调试技术介绍176
9.4.3 记录调试代码和过程177
9.4.4 模拟代码和问题177
9.4.5 简化重现性178
9.4.6 把问题简化成最简单的元素178
9.4.7 代码消去法179
9.4.8 简化法180
9.4.9 使用调试器181
9.4.10 跳跃182
9.4.11 分解法183
9.4.12 种植错误法184
9.4.13 编译检测法185
9.4.14 整体考虑法185
9.4.15 使用不同操作系统上的另一个编译器186
9.4.16 每次改变一个变量187
9.4.17 数字命理学和边界条件188
9.4.18 检查最近的修改189
9.4.19 清除系统中的“死代码”190
9.4.20 问题假设法192
9.4.21 检查未测试的代码194
9.4.22 不变式法195
9.4.23 存储器使用情况196
9.4.24 互斥197
9.4.25 显示系统的运行情况198
9.4.26 和工作的系统进行代码比较199
9.4.27 理解算法199
9.4.28 检查连通性200
9.4.29 核心文件201
9.4.30 增加跟踪202
9.4.31 数据关系检查203
9.4.32 重放能力(记录动作)204
9.5 小结205
9.4.33 生成系统的副本205
9.6 bug问题206
第10章 不同应用系统的调试207
10.1 小规模单机系统207
10.1.1 成为系统的用户208
10.1.2 复制环境208
10.1.3 提防DLL Hell209
10.1.4 输入/输出错误209
10.2 中规模单机系统210
10.3 中规模客户/服务器系统211
10.3.2 保留数据的使用情况来发现哪些数据经常被使用212
10.3.1 生成后端数据库的一个简单描述212
10.4 大规模系统213
10.4.1 为测试安装一个“后门”213
10.4.2 观察外部条件的改变214
10.5 实时系统214
10.5.1 注意添加调试语句214
10.5.2 监视硬件软件的冲突215
10.5.3 时间问题215
10.6.3 协议错误216
10.6.2 抑制中断216
10.6.1 模拟器问题216
10.6 嵌入式系统216
10.6.4 看门狗时钟217
10.6.5 调试嵌入式系统217
10.7 分布式系统217
10.7.1 中间设备错误218
10.7.2 预测错误218
10.7.3 连接错误218
10.7.4 安全错误219
10.7.5 信息数据库219
10.8.2 把模拟调用封装成预测错误返回220
10.8.1 封装硬件接口220
10.8 模拟系统220
10.7.6 记录的事后调查分析220
10.8.3 把实际系统模拟器的问题简化成最简单的形式221
10.9 小结221
10.10 bug问题221
第11章 调试之后223
11.1 是不是在其他地方犯同样的错误224
11.2 bug背后隐含了什么225
11.3.2 保留测试用例226
11.3.3 利用bug为将来的设计226
11.3.1 理解原因226
11.3 怎样预防同类bug226
11.4 怎样更容易发现类似的bug227
11.4.1 创造工具227
11.4.2 记录bug228
11.4.3 预留调试框架229
11.5 我是否有所进步231
11.5.1 bug量度232
11.5.2 bug跟踪232
11.5.3 怎样处理数据233
11.6 小结234
11.7 bug问题234
12.1 什么是bug预防236
第12章 bug预防236
12.2 一般技术238
12.2.1 预防bug的人238
12.2.2 问题原因分析241
12.2.3 检测错误243
12.2.4 重用247
12.2.5 减小复杂度和管理复杂度253
12.2.6 现实世界的文档257
12.2.7 内部基础结构支持260
12.3 需求中的bug预防262
12.3.1 理解问题263
12.3.2 正确获得需求265
12.4 设计中的bug预防266
12.4.1 不同的设计产生不同的bug类型266
12.4.2 设计接口269
12.4.3 设计包含文档的代码274
12.5 实现中的bug预防275
12.5.1 理解开发工具275
12.5.2 防御编码276
12.5.3 实现选择280
12.5.4 逐步测试282
12.6 小结283
12.7 bug问题284
第13章 测试285
13.1 单元测试285
13.1.1 测试什么285
13.1.2 单元测试为什么重要285
13.1.3 怎样应用到调试中286
13.1.4 单元测试有什么重要问题286
13.2 验证测试286
13.3 质量保证测试287
13.4.1 路径测试288
13.4 测试方法288
13.4.2 事务处理测试290
13.4.3 输入验证290
13.4.4 算法测试293
13.4.5 决策表294
13.4.6 状态机分析294
13.4.7 综合测试296
13.4.8 自上向下测试和自下向上测试297
13.4.9 配置调试298
13.4.10 恢复崩溃和掉电测试299
13.4.11 安全性测试300
13.4.12 第三方测试301
13.4.13 多用户测试302
13.4.14 负载和性能测试303
13.4.15 测量和统计304
13.5 小结304
13.6 bug问题305
第14章 维护307
14.1 什么是软件维护307
14.1.1 维护工作308
14.1.2 维护的挑战308
14.1.3 软件的退化需要软件维护309
14.2 创建一个可维护的软件系统309
14.2.1 创建可理解的软件309
14.2.2 可维护设计313
14.2.3 提供一个回归测试环境316
14.2.4 创建一个可维护的环境316
14.3 维护现有的软件317
14.3.1 修改现有软件系统317
14.3.2 围绕现有的需求和设计bug展开工作318
14.3.3 彻底的回归测试319
14.3.4 保持修改跟踪319
14.4 什么时候要放弃320
14.5 小结321
14.6 bug问题321
15.1.1 在软件维护和改进组中工作323
第15章 专业调试323
15.1 学习成为一名调试员323
15.1.2 学习编写源代码的一个好办法325
15.2 什么地方需要专业调试员325
15.2.1 在设计阶段326
15.2.2 在需求阶段326
15.2.3 在代码审查阶段327
15.2.4 在代码移交阶段328
15.2.5 项目阶段总结329
15.3 优秀专业调试者的特点329
15.3.1 老练329
15.3.3 探测技巧330
15.3.2 耐性330
15.3.4 处理压力的能力331
15.3.5 工程的/科学的方法332
15.3.6 忘我332
15.3.7 坚定不移333
15.4 专业调试者的一天334
15.5 小结336
15.6 bug问题336
附录A bug问题的答案337
附录B 附加的阅读资料344
热门推荐
- 3492173.html
- 2965116.html
- 1689258.html
- 2502126.html
- 665293.html
- 1774302.html
- 296348.html
- 1276938.html
- 2071360.html
- 1756947.html
- http://www.ickdjs.cc/book_766175.html
- http://www.ickdjs.cc/book_587930.html
- http://www.ickdjs.cc/book_3240073.html
- http://www.ickdjs.cc/book_1486666.html
- http://www.ickdjs.cc/book_1036093.html
- http://www.ickdjs.cc/book_1172918.html
- http://www.ickdjs.cc/book_2872134.html
- http://www.ickdjs.cc/book_2192342.html
- http://www.ickdjs.cc/book_3119811.html
- http://www.ickdjs.cc/book_2271236.html