软件测试的艺术(第3版)第08章-调试

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

8.1蛮力法调试8.2归纳法调试8.3演绎法调试8.4回溯法调试8.5测试法调试8.6调试的原则8.7错误分析第8章调试第8章调试执行一次成功的测试,即发现错误之后要进行调试工作调试的步骤第一步:定位错误,确定程序中错误的准确性质和位置,占调试的绝大部分工作量(大概95%)第二步:修改错误调试的障碍个人自尊心:调试说明程序员会在设计或编码时犯错误热情耗尽:调试耗费脑力,承受较大压力可能会迷失方向:错误实际上可能出现在程序的任何部位必须自力更生:关于调试过程的研究、资料和正式的指南都比较少8.1蛮力法调试蛮力调试法的特点使用比较普遍,不需要过多思考效率低下,成功率低何时适宜使用?其他方法都失败作为思考过程的补充,但不能替代思考过程蛮力调试法的三种类型利用内存信息输出来调试根据一般的“在程序中插入打印语句”建议来调试使用自动化的调试工具进行调试8.1蛮力法调试使用内存信息输出调试是最缺乏效率的蛮力调试方法难以在内存区域与源程序中的变量之间建立对应关系内存信息输出会产生非常庞大的数据,大多是无关的内存信息输出产生的是程序的静态快照,而发现错误还需要研究程序的动态状态(在a状态向b状态转换时如果发现错误就意味着错误已经定位了)通过分析输出的内存信息来发现问题的方法并不太多8.1蛮力法调试插入输出变量值的打印语句可以显示程序的动态状态,让检查的信息可以相对容易地与源程序联系起来缺点主要是碰运气,而不是鼓励我们去思考程序中的问题所产生的需要分析的数据量非常庞大要求我们修改源代码,这些修改可能会掩盖症状或引入新的错误可能对小型程序有效,但如果应用到大型程序,成本就相当高,对某些类型的程序,甚至无法使用这种方法8.1蛮力法调试自动化调试工具使用编程语言的调试功能,或使用特殊的交互式调试工具来分析程序的动态状态使用的语言功能:产生可打印的语句执行轨迹的机制,子程序调用以及/或者对特定变量的修改调试工具的设置断点功能:程序执行到某条特定语句或改动了某个特定变量的值时暂停执行,然后程序员就可以检查程序的当前状态缺点仍然是碰运气为主常会生成数量过于庞大的无关数据8.2归纳法调试从线索(错误的症状)出发,寻找线索之间的联系使用归纳法的调试过程确定相关数据研究数据间联系构造假设组织数据不能不能证明假设能修改错误能8.2归纳法调试——步骤1.确定相关数据列举出所有知道的程序执行的正确和不正确之处,这些不正确之处即是症状2.组织数据组织相关数据,以便观察线索间的模式,找到矛盾、事件。用“是什么”、“在何处”、“何时”、“多大程度”对症状进行描述3.作出假设研究线索之间的联系,利用线索结构里可能的模式作出一个或多个关于错误原因的假设,选择最有可能的假设4.证明假设将假设与其最初的线索或数据想比较,证明假设的合理性,确定这些假设完全可以解释这些线索的存在例子page888.3演绎法调试从普遍的理论和前提出发,使用排除和精炼的过程,达到一个结论使用演绎法的调试过程列出可能的原因证明剩下的假设提炼剩下的假设使用排除法修改错误能不能收集更多数据都被排除8.3演绎法调试——步骤1.列出所有可能的原因或假设建立一份所有想像得到的错误原因的清单2.利用数据排除可能的原因详细检查所有数据,尤其是寻找存在矛盾的地方,然后尽量排除所有可能的原因,仅留一条如果所有的原因都被排除,在增加额外的测试用例,得到更多的数据来设计新的推测3.提炼剩下的假设用现有的线索来提炼这个推测,以具体到能够指出错误4.证明剩下的假设8.4回溯法调试回溯法沿着程序的逻辑结构回溯不正确的结果,直到找到程序逻辑出错的位置。从程序产生不正确结果的地方开始,从该处观察到的结果推断出程序变量应该是什么值,并从这个位置开始逆向执行程序,重复使用“如果程序在此处的状态是这样的,那么程序在上面位置的状态就必然是那样的”过程,就能很快定位出错误。回溯法的适用情况小型程序8.5测试法调试测试法使用测试用例进行调试,当发现了某个被怀疑的错误的症状之后,我们需要编写与原先有所变化的测试用例,尽量确定错误的位置。两种类型的测试用例供测试的测试用例:目的是暴露出以前尚未发现的错误,每个测试用例尽量涵盖较多的条件共调试的测试用例:目的是提供有用的信息,供定位某个被怀疑的错误使用,每个测试用例仅需要覆盖一个或几个条件。测试法调试的适用情况不是完全独立的方法,通常与归纳法一起使用,以获得进行假设和/或证明假设所需的信息;也可以与演绎法一起使用,以排除某些原因,提炼剩下的假设,并/或证明假设。8.6调试的原则8.6.1定位错误的原则动脑筋对错误症状的有关信息动脑筋进行分析如果遇到了僵局,就留到稍后解决发挥潜意识的作用如果遇到了困境,就把问题描述给其他人听描述过程可能会帮助我们发现新的东西仅将暴力调试作为辅助手段无计划、盲目、成功机会小,而且会将新错误引入程序8.6调试的原则8.6.2修改错误的技术存在一个缺陷的地方,很有可能还存在其他缺陷应纠正错误本身,而不仅是其症状正确纠正错误的可能性并非100%修改错误的代码本身也可能是错误的,需要更严格测试正确修改错误的可能性随着程序规模的增加而降低应意识到改正错误会引入新错误的可能性不仅对原先的错误情景进行测试,还应该执行回归测试,以判定是否引入了新错误修改错误的过程有些情况下也是临时回到设计阶段的过程应修改源代码,而不是目标代码有可能是在使用试验法调试目标代码与源代码不同步,重新编译可能错误再次出现8.7错误分析调试的价值消灭程序中的错误提高软件质量通过对错误的分析,让我们了解软件错误的一些本质,可以为改进将来的设计、编码和测试过程提供有价值的反馈信息错误分析错误出现在什么地方?谁制造了这个错误?如何避免该错误的出现?为什么错误没有早些被发现?该如何更早地发现错误?

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功