今天阅读了《软件调试修炼之道》的第三部分——深入调试技术。
该部分分为四个章节,分别为“特殊案例”、“理想的调试环境”、“让软件学会自己寻找缺陷”、“反模式”。
一、特殊案例
一个真正的修复可能涉及大范围的软件重构,甚至深层次的软件体系结构的变化。
并发软件是难以重现、难以诊断以及难以修复的主要问题来源。
海森堡缺陷,一个当你开始寻找的时候就会“消失”的缺陷,其名字来自于量子力学中的海森堡不确定理论,这个理论(不严格地说)指出在观察某一系统的过程中行为不可能不发生改变。
Linus法则——“只要给予足够的关注,所有的缺陷都是浅显的”。
有的时候我们会调用第三方代码,比如就像我们写程序的时候,偶尔会调用到layui、bootstrap、Spring等等,但是若是我们在调试程序的时候出现了问题,我们应该先怀疑自己的代码是否存在问题。
二、理想的调试环境
代替测试是在测试过程中使用“虚拟”测试对象来代替真实的测试对象。常见的代替测试技术:模拟测试、桩测试。
三、让软件学会自己寻找缺陷
断言是一个缺陷检测机制,不是一个错误处理机制。
不应该使用断言来处理,而应该使用错误处理机制来处理的几个例子
(1)试图打开一个文件却发现它并不存在
(2)通过网络连接检测和处理无效的数据
(3)当写入文件时空间已用完
(4)网络错误
可以使用断言来做下面的事情:
(1)记录和自动验证假设
(2)虽然在产品发布的时候要有鲁棒性,但在调试期间要确保软件是脆弱的。
我们在问题出现之前要抢先检测系统问题,例如资源泄露和异常处理问题。
四、反模式
优先级!
救火模式永远不会修复质量问题。花些时间找出并修复根本原因。
避免彻头彻尾重写!