调试总述
调试是在测试发现错误之后排除错误的过程。
软件错误的外部表现和它的内在原因之间可能并没有明显的联系。
调试就是把症状和原因联系起来的尚未被人深入认识的智力过程。
一、调试过程
调试发生在测试之后。
调试过程从执行一个测试用例开始,评估测试结果,如果发现实际结果与预期结果不一致,则这种不一致就是一个症状,它表明在软件中存在着隐藏的问题。
调试过程试图找出产生症状的原因,以便改正错误。

二、调试途径
1. 蛮干法
蛮干法可能是寻找软件错误原因的最低效的方法。其他方法都失败时才使用这种方法。
这种方法印出内存的内容,激活对运行过程的跟踪,在程序中到处都写上WRITE(输出)语句。
更多情况下只会浪费时间和精力。必须首先进行周密的思考,有明确的目的,尽量减少无关信息的数量。
2. 回溯法
回溯是一种相当常用的调试方法,当调试小程序时这种方法是有效的。
具体做法是,从发现症状的地方开始,人工沿程序的控制流往回追踪分析源程序代码,直到找出错误原因为止。
随着程序规模扩大,应该回溯的路径数目也变得越来越大,以至彻底回溯变成完全不可能了。
3. 原因排除法
■对分查找法:
如果已经知道每个变量在程序内若干个关键点的正确值,则可以用赋值语句或输入语句在程序中点附近“注入”这些变量的正确值,然后运行程序并检查所得到的输出。
如果输出结果是正确的,则错误原因在程序前半部分;反之,错误原因在程序后半部分。
对错误原因所在的那部分重复使用这个方法,直到把出错范围缩小到容易诊断的程度为止。
■归纳法:
是从个别现象推断出一般性结论的思维方法。
首先把和错误有关的数据组织起来进行分析,以便发现可能的错误原因。
然后导出对错误原因的一个或多个假设,并利用已有的数据来证明或排除这些假设。
■演绎法:
从一般原理或前提出发,经过排除和精化的过程推导出结论。
首先设想出所有可能的出错原因,然后试图用测试来排除每一个假设的原因。

