《程序调试思想与实践》.(The.Science.of.Debugging)读书笔记

全书以bug为中心,围绕调试维护进行组织。

1 bug

1.1 关于bug

1、作为一个词,bug被软件开发组织用来描述一些需要修复的问题。

2、Bug的定义

  • 简单定义:bug是未预料到的系统行为。
  •  严格定义:bug是系统中的这样一个现象,即本来应该有的功能却没有。
  • 以人为本的定义:bug是系统没有实现软件开发人员(开发者、测试人员、项目管理者)和用户之间达成一致的行为。

3、软件缺陷(defect)

软件缺陷是一个软件系统中的需求、体系结构、设计和应用上的错误。

bug是软件缺陷的实际证明。

4、调试(debugging)

调试是理解系统的行为以利于去除bug的过程。

5、Bug是如何产生的

  • 对软件做修改,主要原因是对被修改的软件理解力不够。文档是一个书面报告,能够帮助描述软件系统的使用、设计、目标和描述。代码是软件的最后仲裁工具,所以源代码也是文档的一部分。所以修改代码,也应该同步修改代码中相应的注释。
  •  一个不正确的描述会导致不正确的实现,从而导致bug。

6、Bug的种类

  • 大量研究表明,需求阶段的bug修复代价最高,跟踪难度最大。理由很简单,如果一个bug存在于需求阶段,那就没有“问题代码”可以检测。
  • 设计阶段的bug比需求阶段的bug更容易捕捉,但最后的修复代价很高。设计上的bug的修复代价高的主要原因是它们作为一个整体来影响系统。
  • 实现阶段的bug是系统中最普通、最一般、最容易修复的bug。
  • 处理阶段的bug,比如被破坏的数据库。
  • 编译的bug:编译时出现的bug是因为编译过程中出现错误,或编译引擎出现了一个导致产品失效的错误。
  • 配置的bug,比如在一个配置bug中,软件是正确的,编译过程是正确的,但最后的软件安装不正确。
  • 未来计划bug:如果设计者或开发人员能够看得长远一点,则未来计划bug就要可以避免。
  •  文档bug,系统与文档描述不一致。

7、Bug的分类

  • 内存或资源泄漏:指一个内存由操作系统或内部存储器”池”分配,但用完后从未收回。症状往往是系统变慢或者突然崩溃以及其它奇怪的症状。
  •  逻辑错误:即代码的语法正确却没有做到期望的事情。
  • 循环错误:死循环。
  • 条件错误:条件错误可以是对布尔代数的误解或条件嵌套错误造成的。
  • 多线程错误:在一个实现了多线程的程序中,两个线程试图同时访问或修改相同的存储器地址。
  • 存储错误:这是在永久存储设备遇到错误不能再进行时发生的问题。
  • 集成错误:是指两个子系统已经分别测试和验证,组合后在其交互时出现了问题。
  • 转换错误:转换错误发生在将一个类型的数据转换为另一类型发生错误时。
  • 版本bug:版本bug是在软件的两个版本之间改变了功能和文件存储格式时,结果向后不兼容或在将来的发布中没有正确处理。
  • 不恰当地重用bug:大量的bug是因为对代码或组件在新系统中不正确地重用而造成的。
  • 布尔bug:最明显的症状就是程序做了与期望相反的事情。

2 调试工具及使用时机

1.1 测试和调试环境

1、第一个调试工具是测试环境。测试环境包括一套硬件、软件和测试实例,可用于模拟、调查和重现用户所看到的问题。没有固定的方法来判断问题的实质,只能是在黑暗中摸索寻找错误的原因。测试实例应该是让bug最容易重现的实例。根据这个思想,可以利用每一个bug作为新的测试实例。一般情况下,测试实例是根据要求和设计规范写成的。

2、如果想知道应用程序如何工作,以及程序各段如何组织在一起时,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值