书籍详情

程序调试思想与实践

程序调试思想与实践

作者:(美)Matt Telles,(美)Yuan Hsieh著;邓劲生等译;邓劲生译

出版社:中国水利水电出版社

出版时间:2002-03-01

ISBN:9787508410081

定价:¥40.00

购买这本书可以去
内容简介
  本书将调试作为一门专业的学科进行研究和分析,提供大量的代码实例和问题描述,对调试的各个方面进行细致而深入的阐述和讨论。全书以bug为中心,围绕调试这一主题进行组织。第2章到第5章包括bug的诊断、分类以及它们的症状。第6章到第10章讨论那些处理bug的策略,包括可以使用的工具以及在不同情况下如何最有效地使用它们。第11章到第16章包括对专业调试的解释以及如何成为一个出色的调试员。本书主要面向的读者群是软件项目的开发人员、调试人员、测试人员以及管理人员。
作者简介
暂缺《程序调试思想与实践》作者简介
目录
译者序                  
 作者简介                  
 致谢                  
 第1章  Debug简介                  
 1. l  本书的内容                  
 1. 2  为什么要关注bug                  
 1. 3  什么是bug                  
 1. 4  本书的对象                  
 1. 5  本书的组织                  
 1. 6  调试简史                  
 1. 7  小结                  
 1. 8  bug问题                  
 第2章  研究著名的(以及不太著名的)bug例子                  
 2. 1  大致情况                  
 2. 1. 1  现实生活中的分布式系统                  
 2. 1. 2  Therac-25                  
 2. 2  bug实例#1                  
 2. 3  bug实例#2                  
 2. 4  bug实例#3                  
 2. 5  bug实例#4                  
 2. 5. 1  AT&T电话中断                  
 2. 5. 2  缓冲区溢出                  
 2. 6  小结                  
 2. 7  bug问题                  
 第3章  什么是bug                  
 3. l  什么是bug                  
 3. 1. 1  什么是软件缺陷                  
 3. 1. 2  调试不是什么                  
 3. 1. 3  什么是调试                  
 3. 2  为什么要考虑bug                  
 3. 2. l  bug的信心代价                  
 3. 2. 2  名声和形象的代价                  
 3. 2. 3  bug的财产损失                  
 3. 3  bug的本质                  
 3. 3. l  bug的发生都有原因                  
 3. 3. 2  bug是可以重视的                  
 3. 3. 3  bug通常在有变化时出现                  
 3. 3. 4  bug也会产生bug                  
 3. 3. 5  bug吸引bug                  
 3. 3. 6  证明缺乏理解                  
 3. 3. 7  难的代码对大家都一样难                  
 3. 3. 8  在软件生命周期中不同阶段的bug有不同的性质                  
 3. 3. 9  稳定的系统中的bug的原因可能比错误的系统中的bug的原因更难以识别                  
 3. 4  小结                  
 3. 5 bug问题                  
 第4章  bug的生命周期                  
 4. l  为什么会出现bug                  
 4. 1. 1  复杂性                  
 4. 1. 2  现实                  
 4. 1. 3  人类的弱点                  
 4. 2  bug是如何产生的                  
 4. 2. 1  对软件做修改                  
 4. 2. 2  拙劣的描述                  
 4. 2. 3  方法的复杂性                  
 4. 2. 4  缺少一致的观点                  
 4. 2. 5  程序员错误                  
 4. 3  bug是如何躲过测试的                  
 4. 3. l  遵循形式过程代价太大                  
 4. 3. 2  政策/市场决策                  
 4. 3. 3  时间不充分                  
 4. 3. 4  缺少重现能力                  
 4. 3. 5  自负                  
 4. 3. 6  差劲的描述/不知道要测试什么                  
 4. 3. 7  缺乏测试环境                  
 4. 4  小结                  
 4. 5  bug问题                  
 第5章  bug的分类                  
 5. l  bug的种类                  
 5. 1. 1  需求阶段的bug                  
 5. 1. 2  设计阶段的bug                  
 5. 1. 3  实现阶段的bug                  
 5. 1. 4  处理阶段的bug                  
 5. 1. 5  编译的bug                  
 5. 1. 6  配置的bug                  
 5. 1. 7  未来计划bug                  
 5. 1. 8  文档bug                  
 5. 2  严重性                  
 5. 3  bug分类法                  
 5. 3. l  名字                  
 5. 3. 2  描述                  
 5. 3. 3  最一般的环境                  
 5. 3. 4  症状                  
 5. 3. 5  例子                  
 5. 4  bug的分类                  
 5. 4. l  内存或资源泄漏                  
 5. 4. 2  逻辑错误                  
 5. 4. 3  编码错误                  
 5. 4. 4  内存侵占                  
 5. 4. 5  循环错误                  
 5. 4. 6  条件错误                  
 5. 4. 7  指针错误                  
 5. 4. 8  分配/释放错误                  
 5. 4. 9  多线程错误                  
 5. 4. 10  定时错误                  
 5. 4. 11  分布式应用程序错误                  
 5. 4. 12  存储错误                  
 5. 4. 13  集成错误                  
 5. 4. 14  转换错误                  
 5. 4. 15  硬编码长度/尺寸                  
 5. 4. 16  版本bug                  
 5. 4. 17  不恰当地重用bug                  
 5. 4. 18  布尔bug                  
 5. 5  为什么分类重要                  
 5. 6  小结                  
 5. 7  bug问题                  
 第6章  检测工作                  
 6. 1  整体调试                  
 6. 1. 1  复制和粘贴错误                  
 6. l. 2  全局变量                  
 6. 1. 3  副作用                  
 6. 1. 4  观察意外的消息或结果                  
 6. 1. 5  跟踪诊断显示                  
 6. 2  调试方法                  
 6. 2. l  科学方法                  
 6. 2. 2  直觉                  
 6. 2. 3  思维跳跃                  
 6. 2. 4  诊断                  
 6. 3  商业技巧                  
 6. 3. l  内嵌式调试器                  
 6. 3. 2  日志对象                  
 6. 3. 3  跟踪对象                  
 6. 3. 4  隐藏的诊断屏                  
 6. 3. 5  为以后的程序运行保存bug数据                  
 6. 4  可重现实例                  
 6. 4. 1  测试实例                  
 6. 4. 2  数据依赖                  
 6. 4. 3  从根本原因中分离症状                  
 6. 4. 4  收集观察结果                  
 6. 4. 5  统计论理                  
 6. 5  小结                  
 6. 6  bug问题                  
 第7章  调试工具及其使用时机                  
 7. l  测试和调试环境                  
 7. 1. 1  测试组                  
 7. 1. 2  测试套                  
 7. 1. 3  过时的bug组                  
 7. 1. 4  日志                  
 7. l. 5  跟踪                  
 7. 2  中级调试技术                  
 7. 2. 1  内存漏洞检测工具                  
 7. 2. 2  交叉索弓吸工具用法                  
 7. 2. 3  调试器                  
 7. 2. 4  Heisenberg的不确定原理                  
 7. 2. 5  嵌入式诊断                  
 7. 2. 6  断言的弊端                  
 7. 2. 7  同用户一起工作                  
 7. 2. 8  bug跟踪                  
 7. 2. 9  代码覆盖范围分析                  
 7. 2. 10  编译器                  
 7. 3  小结                  
 7. 4  bug问题                  
 第8章  调试的一般过程                  
 8. l  识别问题                  
 8. l. l  这是bug吗                  
 8. 1. 2  为什么它是一个bug                  
 8. 1. 3  程序应该在做什么                  
 8. 1. 4  程序到底在做什么                  
 8. 2  收集信息                  
 8. 2. 1  用户对问题的描述                  
 8. 2. 2  日志文件                  
 8. 2. 3  新自观察                  
 8. 2. 4  症状                  
 8. 2. 5  失败的测试实例                  
 8. 2. 6  相似的问题                  
 8. 2. 7  近期变化                  
 8. 2. 8  运行的环境信息                  
 8. 3  形成假设                  
 8. 4  测试假设                  
 8. 5  崩溃的Web服务器示例                  
 8. 6  重复直到某个假设被证实                  
 8. 7  提出解决方法                  
 8. 8  测试解决方法                  
 8. 9  重复直到某个解决方法被证实                  
 8. 10  回归测试                  
 8. 11  小结                  
 8. 12  bug问题                  
 第9章  调试技术                  
 9. l  插入式调试和非插入式调试                  
 9. 2  短期调试和长期调试技术                  
 9. 3  成品软件调试的折衷办法                  
 9. 4  调试技术介绍                  
 9. 4. 1  面对实际用户                  
 9. 4. 2  查看观察日志                  
 9. 4. 3  记录调试代码和过程                  
 9. 4. 4  模拟代码和问题                  
 9. 4. 5  简化重视性                  
 9. 4. 6  把问题简化成最简单的元素                  
 9. 4. 7  代码消去法                  
 9. 4. 8  简化法                  
 9. 4. 9  使用调试器                  
 9. 4. 10  跳跃                  
 9. 4. 11  分解法                  
 9. 4. 12  种植错误法                  
 9. 4. 13  编译检测法                  
 9. 4. 14  整体考虑法                  
 9. 4. 15  使用不同操作系统上的另一个编译导                  
 9. 4. 16  每次改变一个变量                  
 9. 4. 17  数字命理学和边界条件                  
 9. 4. 18  检查最近的修改                  
 9. 4. 19  清除系统中的"死代码"                  
 9. 4. 20  问题假设法                  
 9. 4. 21  检查本测试的代码                  
 9. 4. 22  不变式法                  
 9. 4. 23  存储器使用情况                  
 9. 4. 24  互斥                  
 9. 4. 25  显示系统的运行情况                  
 9. 4. 26  和工作的系统进行代码比较                  
 9. 4. 27  理解算法                  
 9. 4. 28  检查连通性                  
 9. 4. 29  核心文件                  
 9. 4. 30  增加跟踪                  
 9. 4. 31  数据关系检查                  
 9. 4. 32  重放能力(记录动作)                  
 9. 4. 33  生成系统的副本                  
 9. 5  小结                  
 9. 6  bug问题                  
 第10章  不同应用系统的调试                  
 10. 1  小规模单机系统                  
 10. 1. l  成为系统的用户                  
 10. 1. 2  复制环境                  
 10. 1. 3  提防DLL Hell                  
 10. 1. 4  输入/输出错误                  
 10. 2  中规模单机系统                  
 10. 3  中规模客户/服务器系统                  
 10. 3. l  生成后端数据库的一个简单描述                  
 10. 3. 2  保留数据的使用情况来发现哪些数据经常被使用                  
 10. 4  大规模系统                  
 10. 4. l  为测试安装一个"后门"                  
 10. 4. 2  观察外部条件的改变                  
 10. 5  实时系统                  
 10. 5. l  注意添加调试语句                  
 10. 5. 2  监视硬件软件的冲突                  
 10. 5. 3  时间问题                  
 10. 6  嵌入式系统                  
 10. 6. l  模拟器问题                  
 10. 6. 2  抑制中断                  
 10. 6. 3  协议错误                  
 10. 6. 4  看门狗时钟                  
 10. 6. 5  调试嵌入式系统                  
 10. 7  分布式系统                  
 10. 7. l  中间设备错误                  
 10. 7. 2  预测错误                  
 10. 7. 3  连接错误                  
 10. 7. 4  安全错误                  
 10. 7. 5  信息数据库                  
 10. 7. 6  记录的事后调查分析                  
 10. 8  模拟系统                  
 10. 8. l  封装硬件接口                  
 10. 8. 2  把模拟调用封装成预测错误返回                  
 10. 8. 3  把实际系统模拟器的问题简化成最简单的形式                  
 10. 9  小结                  
 10. 10  bug问题                  
 第11章  调试之后                  
 11. l  是不是在其他地方犯同样的错误                  
 11. 2  bug背后隐含了什么                  
 11. 3  怎样预防同类bug                  
 11. 3. l  理解原因                  
 11. 3. 2  保留测试用例                  
 11. 3. 3  利用bug为将来的设计                  
 11. 4  怎样更容易发现类似的 bug                  
 11. 4. 1  创造工具                  
 11. 4. 2  记录bug                  
 11. 4. 3  预留调试框架                  
 11. 5  我是否有所进步                  
 11. 5. l  bug量度                  
 11. 5. 2  bug跟踪                  
 11. 5. 3  怎样处理数据                  
 11. 6  小结                  
 11. 7  bug问题                  
 第12章  bug预防                  
 12. 1  什么是bug预防                  
 12. 2  一般技术                  
 12. 2. 1  预防bug的人                  
 12. 2. 2  问题原因分析                  
 12. 2. 3  检测错误                  
 12. 2. 4  重用                  
 12. 2. 5  减小复杂度和管理复杂度                  
 12. 2. 6  现实世界的文档                  
 12. 2. 7  内部基础结构支持                  
 12. 3  需求中的bug预防                  
 12. 3. l  理解问题                  
 12. 3. 2  正确获得需求                  
 12. 4  设计中的bug预防                  
 12. 4. 1  不同的设计产生不同的bug类型                  
 12. 4. 2  设计接口                  
 12. 4. 3  设计包含文档的代码                  
 12. 5  实现中的bug预防                  
 12. 5. 1  理解开发工具                  
 12. 5. 2  防御编码                  
 12. 5. 3  实现选择                  
 12. 5. 4  逐步测试                  
 12. 6  小结                  
 12. 7 bug问题                  
 第13章  测试                  
 13. 1  单元测试                  
 13. 1. l  测试什么                  
 13. 1. 2  单元测试为什么重要                  
 13. 1. 3  怎样应用到调试中                  
 13. 1. 4  单元测试有什么重要问题                  
 13. 2  验证测试                  
 13. 3  质量保证测试                  
 13. 4  测试方法                  
 13. 4. l  路径测试                  
 13. 4. 2  事务处理测试                  
 13. 4. 3  输入验证                  
 13. 4. 4  算法测试                  
 13. 4. 5  决策表                  
 13. 4. 6  状态机分析                  
 13. 4. 7  综合测试                  
 13. 4. 8  自上向下测试和自下向上测试                  
 13. 4. 9  配置调试                  
 13. 4. 10  恢复崩溃和掉电测试                  
 13. 4. 11  安全性测试                  
 13. 4. 12  第三方测试                  
 13. 4. 13  多用户测试                  
 13. 4. 14  负载和性能测试                  
 13. 4. 15  测量和统计                  
 13. 5  小结                  
 13. 6  bug问题                  
 第14章  维护                  
 14. 1  什么是软件维护                  
 14. 1. l  维护工作                  
 14. 1. 2  维护的挑战                  
 14. 1. 3  软件的退化需要软件维护                  
 14. 2  创建一个可维护的软件系统                  
 14. 2. 1  创建可理解的软件                  
 14. 2. 2  可维护设计                  
 14. 2. 3  提供一个回归测试环境                  
 14. 2. 4  创建一个可维护的环境                  
 14. 3  维护现有的软件                  
 14. 3. l  修改现有软件系统                  
 14. 3. 2  围绕现有的需求和设计bug展开工作                  
 14. 3. 3  彻底的回归测试                  
 14. 3. 4  保持修改跟踪                  
 14. 4  什么时候要放弃                  
 14. 5  小结                  
 14. 6  bug问题                  
 第15章  专业调试                  
 15. 1  学习成为一名调试员                  
 15. 1. l  在软件维护和改进组中工作                  
 15. 1. 2  学习编写源代码的一个好办法                  
 15. 2  什么地方需要专业调试员                  
 15. 2. 1  在设计阶段                  
 15. 2. 2  在需求阶段                  
 15. 2. 3  在代码审查阶段                  
 15. 2. 4  在代码移交阶段                  
 15. 2. 5  项目阶段总结                  
 15. 3  优秀专业调试者的特点                  
 15. 3. 1  老练                  
 15. 3. 2  耐性                  
 15. 3. 3  探测技巧                  
 15. 3. 4  处理压力的能力                  
 15. 3. 5  工程的/科学的方法                  
 15. 3. 6  忘我                  
 15. 3. 7  坚定不移                  
 15. 4  专业调试者的一天                  
 15. 5  小结                  
 15. 6  bug问题                  
 附录A  bug问题的答案                  
 附录B  附加的阅读资料                  

猜您喜欢

读书导航