《代码大全》阅读笔记-23-调试

泛调试步骤:

  • 通过可重复的实验搜集数据
  • 根据相关数据的统计构造一个假说
  • 设计一个实验来验证或者反证这个假说
  • 证明或者反证假说
  • 根据需要重复进行上面的步骤

寻找缺陷的有效方法:

  • 将错误状态稳定下来
  • 确定错误的来源
    1. 收集产生缺陷的相关数据
    2. 分析所搜集的数据,并构造对缺陷的假设
    3. 确定怎样去证实或证伪这个假设,可以对程序进行测试或是通过代码
    4. 按照2确定的方法对假设做出最终结论
  • 修补缺陷
  • 对所修补的地方进行测试
  • 查找是否还有类似的错误

核对表(关于调试的建议)

寻找缺陷的方法

  • 使用所有可用数据来构造你的假设
  • 不断提炼产生错误的测试用例
  • 在自己的单元测试suit中测试代码
  • 借助可以获得的任何工具
  • 用不同的方式重现错误
  • 通过产生更多的数据来构造更多的假设
  • 利用证伪假设的测试结果
  • 用头脑风暴的方式找出可能的假设
  • 在桌上放一个笔记本,把需要尝试的事情列出来
  • 缩小被怀疑有问题的代码区域
  • 对之前出现问题的类和子程序保持警惕
  • 检查最近修改的代码
  • 扩展被怀疑有问题的代码区域
  • 采用增量集成
  • 检查常见的缺陷
  • 和其他人一起讨论你的问题
  • 抛开问题休息一下
  • 在使用快速安葬调试法的时候,要设置一个时间上限
  • 列出所有的蛮力调试方法,逐条应用

解决语法错误的方法

  • 不要太信任编译器信息中给出的行号
  • 不要太信任编译器信息
  • 不要太信任编译器所给出的第二条出错信息
  • 分而治之,各个击破
  • 使用具有语法分析功能的编辑器来找出位置错误的注释和引号

修正缺陷的方法

  • 在动手之前先理解程序
  • 理解整个程序而非具体问题
  • 验证对错误的分析
  • 放松一下
  • 要保存最初的源代码
  • 治本,而非治标
  • 只有当理由充分地时候才去修改代码
  • 一次只做一个动作
  • 检查自己所做的修订
  • 添加单元测试来暴露代价中的缺陷
  • 找出类似的缺陷

调试的一般方法

  • 你是否会把调试看做是能让你更好的理解程序、错误、代码质量和解决问题方法的良机
  • 你是否会避免采用随机尝试查找错误或迷信式的调试方法
  • 你是否假设错误是你自己造成的
  • 你是否使用了科学的方法将间歇性的错误稳定下来?
  • 你是否使用了科学的方法来寻找缺陷
  • 你在寻找缺陷的时候会使用多种不同的方法吗?还是每次都是用相同的方法?
  • 你会验证你的修改是否正确吗?
  • 你会在调试中使用编译器警告信息、执行性能分析、利用测试框架和交互式调试方法吗?

要点

  • 调试同整个软件开发的成败息息相关。最好的解决之道是使用科学的方法来避免缺陷的产生。然而,花点时间来提高自己的调试技能还是很划算的,因为优秀和拙劣的调试表现之间的差距至少是10:1
  • 要想成功,系统化的查找和改正错误的方法直观重要。要专注于你的调试工作,让每一次测试都能让你朝着正确的方向前进一步。要是用科学的调试方法。
  • 在动手解决问题之前,要理解问题的根本。胡乱猜测错误的来源和随机修改将会让你的程序陷入比刚开始调试时更糟糕的境地
  • 将编译器警告级别设置为最严格,把警告信息所报告的错误都改正。如果你忽略了明显的错误,那么要改正那些微妙的错误就会非常麻烦
  • 调试工具对软件开发而言是强有力的支持手段。找出这些工具并加以应用,当然,请记得在调试的时候开动脑筋。
posted @ 2018-04-05 20:25  Tacey Wong  阅读(248)  评论(0编辑  收藏  举报