调试程序员
调试是执行一次成功的测试用例以后所要进行的工做。所谓成功的测试,是指它能够证实程序没有实现预期的功能,调试包含两个错误。一:肯定程序中可疑错误的准确性质和位置。二:修改错误。编程
暴力法调试(分三种类型)小程序
利用内存信息输出来调试
编程语言
根据通常的额“在程序中插入打印语句”建议来调试ide
使用自动化的调试根据进行调试工具
第一种类型是最缺少效率的暴力调试法测试
●难以在内存区域与源程序的变量之间创建联系spa
●即便对于复杂程度较低的程序,内存信息也会产生数量很是庞大的数据,好多数据都与调试无关。调试
●内存信息只能显示程序的静态快照,仅能显示出某一时刻程序的状态,为了发现错误还须要研究动态状态。内存
●内存信息输出不多能够精确地在错误发生的地方,所以没法显示错误发生的时序状态,错误发生到输出信息这段时间执行的活动,可能会掩盖掉发现错误所须要的线索。
第二种类型,可能比内存信息输出要好一些,由于可能显示程序的的动态状态。可是一样存在不少缺点。
●它不是鼓励咱们去思考程序中的问题,只要是碰运气的方法
●它所产生的需求分析数量很是庞大
●可能对小程序有效,但若是应用到大程序成本就至关高。
●它要求咱们修改程序这些修改可能会掩盖掉错误、改变关键的时序关系,或者会引入新的错误。
第三种类型自动化调试工具的工做机制相似于在程序中插入打印语句,但不是修改程序自己。可使用编程语言的调试功能,或使用特殊交互调试工具来分析程序动态状态。调试工具的一个共同的功能是设置断点,使程序在执行到某条特定的语句或改变了某个特定变量的值是暂停执行。而后程序员就能够检查程序的当前状态了。
暴力法调试的主要问题在于他们忽略了思考的过程
概括法调试
概括法是一种特殊的思考过程,能够从细节到全局,也就是线索出发。概括法调试步骤以下:
肯定相关数据。调试人员犯的主要错误是未能将全部数据考虑进去第一步是列举出全部知道程序执行的正确和不正确之处。不正确之处就是症状。未能引发症状出现的测试用例提供了额外的有价值的线索。
组织数据。概括就是从特殊到通常,第二部就是组织相关数据,以便观察线索的模式。
作出假设。研究线索之间的联系,利用线索结构里可能的模式作出一个或多个关于错误缘由的假设。若是还没法退出错误,则须要更多的假设。
证实假设。
演绎法调试
演绎过程是从一个广泛的理论和前提出发,使用排除和精炼过程达到一个结论
列出全部可能的缘由或假设。
利用数据排除全部可能的缘由
提炼剩下的假设
证实剩下的假设
回朔法调试
沿着程序的逻辑结构回溯不正确的结果。直到找到程序逻辑出错的位置。使用这个过程,能够肯定程序中从状态符合预期值的位置点,到第一个状态不符合预期值的位置点。
测试法调试
考虑两种类型的测试用例:1.供测试的测试用例,目的是暴露出之前还没有发生的错误。2.供调试的测试用例目的是提供有用的信息,供定位某个被怀疑的错误之处。
话句话说,当发现某个被怀疑的错误的症状以后,须要编写测试用例,尽可能肯定错误的位置。
调试的原则
调试原则其实也是心理学原则。因为调试过程有两部分组成,即定位错误与修改错误。
定位错误的原则
动脑筋
若是遇到了僵局,就留到稍后解决
若是遇到了困境,就把问题描述给他人听
仅将测试工具做为第二种手段
避免使用实验法——仅将其做为最后的手段