测试:知道错了。
调试:哪里错了,该怎么纠正错误。
测试是为了发现程序中的错误,发现了错误之后,就需要调试,调试分为两步:确定错误的位置和修改错误。
主要的的调试方法有:暴力法调试,归纳法调试,演绎法调试,回溯法调试,测试法调试。
一、暴力法调试
暴力法调试的特点:不需要过多思考,耗费脑力少,效率低下。
暴力法调试又可分为至少三种类型:
- 利用内存信息输出来调试。
- 根据一般的“在程序中插入打印语句”建议来调试。
- 使用自动化的调试工具进行调试。
总结:暴力法调试能不用尽量不用,除非其他的方法都失败了。
二、归纳法调试
归纳法调试的特点:由细节到全局,将种种线索联系起来,归纳总结出结果。
归纳法调试具体步骤:
- 确定相关数据:就是测试时出现的错误相关的信息。
- 组织数据:将错误相关信息联系起来,总结出一些有用的信息。
- 做出假设:根据信息做出合理的假设,如果没有办法做出合理的假设,说明数据不足,需重新确定相关数据。
- 证明假设:证明假设是否成立,若假设不成立,则需要重新做出假设。
- 解决问题:证明假设成立后,解决问题。
注:修改了错误后需要做一些回归测试来确保没有引入其他的错误。
总结:归纳法调试是一个推理的过程,通过种种线索入手,逐渐找出最终答案。
三、演绎法调试
演绎法调试的特点:演绎法调试主要是从一些普遍的理论或者前提出发,使用排除和精炼的过程,达到一个结论。
演绎法调试的具体步骤:
- 列举出所有可能的原因和或假设。
- 利用数据排除可能的原因。
- 提炼剩余的假设。
- 证明剩余的假设。
- 修复问题。
注:修改了错误后需要做一些回归测试来确保没有引入其他的错误。
总结:演绎法调试和归纳法调试逻辑相反。
四、回溯法调试
演绎法调试的特点:沿着程序的逻辑结构回溯不正确的结果,直到找到程序逻辑出错的位置。一般用于小型程序。
五、测试法调试
测试法调试的特点:需使用测试用例,当然,此测试用例非彼测试用例。
两种测试用例对比:
- 测试的测试用例:为了发现程序中尚未发现的错误。
- 调试的测试用例:定位错误的位置。
两种测试用例可以理解为:先广泛撒 (测试的测试用例),再深入研究(调试的测试用例)。
总结:测试法调试可以结合归纳法或者演绎法一起使用。
定位错误的原则:
- 动脑筋。
- 如果遇到了僵局,就留到稍后解决。
- 如果遇到困境,就把问题描述给其他人听。
- 仅将调试工具作为第二种手段。
- 避免使用试验法——仅将其作为最后的手段。
修改错误的原则:
- 存在一个缺陷的地方,很有可能还存在其他缺陷。
- 应该纠正错误本身,而不仅是其症状。
- 正确纠正错误的可能性并非100%。
- 随着程序规模的增加,正确修改错误的可能性反而降低。
- 应意识改正错误会引入新错误的可能性。
- 修改错误的过程也是临时回到设计阶段的过程。
- 应修改源代码,而不是目标代码。
错误分析(自我反省、自我提高的过程):
- 错误出现在什么阶段/li>
- 谁制造了错误/li>
- 哪些做得不正确/li>
- 如何避免该错误的出现/li>
- 为什么错误没有早些发现/li>
- 该如何更早的发现错误/li>
参考自《软件测试的艺术》(原书第3版)
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!