没有合适的资源?快使用搜索试试~ 我知道了~
Oracle Developer:第13章 调试.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 86 浏览量
2022-06-29
12:36:24
上传
评论
收藏 1.63MB PDF 举报
温馨提示
试读
21页
Oracle Developer:第13章 调试.pdf
资源推荐
资源详情
资源评论
下载
第1 3 章 调 试
在建立了应用程序并运行它的时候,可能会有失败。有的时候,失败还会是明显的
—
遗
漏了块中的一个域或者在某些需要逗点的地方输入了一个“ i”。但是多数情况遇到的失败 (错
误)是不明显的,不得不去寻找它。这种查找处理或通过找到并修正代码中的错误来解决问题
的技巧叫做调试。
不确切地说,调试是测试的补充。通过简单地检查代码可以找到错误,这是一个格外有
效的调试途径。测试和调试结合在一起是一种强有力的技术,可以在开发过程中尽早发现并
修正错误。如果开发者彻底地测试其对象并使用本章介绍的技术查找和修正运行时引起失败
的错误,那么在进行a l p h a 测试和b e t a测试时花的调试时间要少得多。
使用Oracle Developer来制造软件应用程序,避免了许多可能在标准程序设计语言中遇到
的错误源。不存在指针和内存分配的错误,甚至 S Q L语法错误也不会发生。因为用户的 S Q L
语句立刻被分析,并且马上就能得到错误反馈。这意味着,如果通过对另外一种程序设计语
言的学习进行调试,所学的与 Oracle Developer的应用会没有关系。其实, Oracle Developer也
使用了相当多的优秀的调试技巧。
13.1 调试技巧
建立测试模型是彻底了解一段代码、要求或设计组件的极好的方法。正如在本章要看到
的,了解一段代码也是在调试时要做的根本问题。如果为组件对象建立对象模型,通常会发
现隐藏在组件中的大部分错误。实际上,既不用运行测试和不用开发测试示例也可以发现它
们。建立测试模型的技巧通常对于一个好的开发者找出在对象测试中的逻辑和代码缺陷是足
够了。
然而,有些错误需要进一步调查。这种情况经常发生,因为有些错误包含容易被忽略的
问题,某些问题在不止一处或一个对象中发生,某些问题建立在隐含假设的基础上,而不是
开发的测试模型的一部分。对于这些问题,才是调试技巧真正发挥作用的时候。
本部分的标题来自一本可能是现有的最好的关于测试和调试软件的书: Glenford Myers的
《The Art of Software Te s t i n g》( Wi l e y, 1 9 7 9 )。尽管这本书比较早,并且逐渐在测试和调试的技
术和理论方面有些过时,但这本书对其主题提供了非常实用的介绍。没有哪个从事软件开发
的人在开发软件时不读这本书的。本部分总结了 M y e r s 介绍的调试技巧。还介绍了如何把
Oracle Developer调试工具添加到调试板中和如何使用它们有效地支持调试。
13.1.1 通过归纳法定位错误
归纳的过程是从局部到整体的推理 (见图1 3 - 1 )。那就是,利用故障的数据,发现故障的本
质。
1) 定位相关故障数据 不要只是说“那里有问题”就开始修正。要通过留心观察精确地
确定故障如何发生;如何使其再次发生;如何在相似但不同的测试情况下避免问题。要研究
故障发生的来龙去脉。
图13-1 归纳调试过程
2) 组织故障数据 通过模型分析进行归纳。如果数据组织得好,看出数据中的模型和关
系就容易得多。M y e r s 用一个表来显示发生了什么,在哪里发生,什么时候发生,以及在发生
和不发生的环境下在哪个范围发生。把事件按剧本组织也十分有用。因此,要研究数据显露
的关系模型。一个尤其有效的方法是回溯法:从失败的位置开始,按照进程反方向通过数据
处理。另外一种可行的方法是用一些其他的测试情况进行处理,把模型看得更清楚。
3) 设计一种假设 研究数据的关系之后,对错误提出一种或多种假设。如果还不能提出
假设,则需要获取更多的数据。
4) 检验假设 选择最可能的假设,然后通过它的表现检验其是否正确。首先检验它是否
符合已知数据,第二,检验它在代码中如何起作用。
5) 修正错误 按照假设的建议修改代码,然后再测试代码,检验并修正那些确认了的错
误,并且确认没有引起另外的错误。
当有一组数据并且相对来说不太了解程序如何工作,不太了解错误的根源时,可以使用
归纳法。归纳法与后面要介绍的演绎法相比,需要进行彻底的数据分析,花大量时间和努力。
13.1.2 通过演绎法定位错误
演绎的过程是从整体到局部的推理 (见图1 3 - 2 ) 。那就是利用对应用程序和系统的了解,通
过排除和提练假设来推理错误的根源。
1) 列出可能引起失败的错误 最好与其他开发者集体讨论引起失败的错误原因。实际上,
部分假设是很有用的。有的假设来自常规程序设计推测,例如查看最近改变的代码 (“我只改
变了一个地方,它不可能引起故障!” );非常复杂的代码(“我必须这样做,否则无法实现其
功能!”);或者曾经有错误的代码 (“不可能再有错误了!” )。有的假设来自程序设计经验,
例如边界条件错误或对S Q L结构的误解,例如GROUP BY HAV I N G 及其他外部连接(“哪一个
第1 3章 调 试 2 8 3
下载
定位相关数据
组织数据
修正错误
设计一种或多种假设
经检验不是
没有另外的假设
检验假设
另外的假设
经检验是
使用加号?”)。
图13-2 演绎调试过程
2) 排除假设 分析数据及其关系。如果只能排除一种假设,那么着眼于剩下的假设搜集
更多的数据。通常,采用某些附加测试条件会做得更好。如果排除了所有的假设,再集体讨
论新的假设。
3) 精练并检验假设 使用可利用的数据尽可能地使错误推测具体化。到底要发生什么?
查看所提练的假设是否与已知数据相符合,它在代码中如何起作用。
4) 修正错误 按照假设的建议修改代码,然后再测试,检验修正是否防止了错误的发生,
并且没有引起另外的失败。
如果很充分了解程序的作用及失败的根源时,应该使用演绎法。这种充分了解使你能够
提出一系列假设。这种方法的关键部分是通过数据分析排除并提练假设。跳过数据分析通常
会导致无目的的乱撞(删去一句幽默比喻
—
译者注)。应该检查数据,然后检验假设。
13.1.3 通过跟踪定位错误
发现错误的强制方法是跟踪程序,一个事件接一个事件,直到发现某处有错误。在调试
(也就是跟踪)时,大多数开发者对要找什么有良好的直觉。但是,应该清楚这种方法比归纳法
或演绎法的效率要低得多,因为在处理过程中没有“思考”。 在处理过程中会产生大量的数
据,其中多数是与错误不相干的。并且程序越大,越是这样。而技巧不能够递增适应性。
当然,如果不知道在程序中发生了什么并且对错误的了解不充分,那么跟踪是找到错误的
唯一途径。对于Oracle Developer的程序来说,只有在不了解Oracle Developer如何处理时,这种
情况才会发生。例如,不了解第五章介绍的处理过程,并且即使通过归纳处理也不能可靠地重
演失败,那么就可能要通过调试程序进行单步调试,直到有异常的事情发生。这要花费一定的
时间。如果没有什么发生,可能会认为Oracle Developer使用演绎法来代替强制跟踪的方法更好。
13.1.4 错误定位技术
下面是归纳法和演绎法的一些思想,没有特别的顺序:
2 8 4 第三部分 利用D e v e l o p e r编制程序
下载
列出可能的错误
排除假设
修正错误
检验假设
只有一种
假设成立
有几种
假设存在
没有假
设存在
假设经检
验不成立
假设检
验成立
■ 使用大脑 这可能是对程序设计最有益的东西。
■ 使用下意识 把错误放在一边,去作其他的的事。通常会灵机一动来解决你的忧虑。
■ 使用朋友 和朋友讨论问题。讨论可能会使你找到一种新的假设,或者有人能够提出一
种不同的假设。
■ 避免强行修改 尤其尽量不要随便地改变应用程序来看要发生的事情。这比跟踪更坏,
因为它分裂了执行环境,潜在地增加了新的故障。
13.1.5 修正错误
修正错误还有一些其他的处理,不仅仅是改变代码。
■ 在修正错误时,注意周围的代码。
■ 要确认修正了全部错误。意思是需要了解全部的问题是什么。换句话说,在没有彻底
弄明白应用程序如何失败和由失败的衍生错误之前,不要开始修正错误。归纳法和演
绎法调试是最有可能使你了解全部失败的方法。另外,不要只修正了表面错误而忽略
了根源。软件故障比人为的故障容易消除。
■ 确信在修正错误时没有破坏其他部分。尤其在应用程序是如此庞大和复杂时,每次修
改可能引入新错误的概率很高。避免这种问题的最好方法是回归测试,测试能够证明
所有的部分在做它应该做的事。另外一种方法是检查代码。用这种方法,需要检查所
有与被修改代码相关的代码,甚至是不直接相关的代码。
■ 应该研究代码中的错误模式,从错误中吸取教训。如果代码中有某个错误需要修改,
那么就修改它。如果发现某种错误好象经常在 Oracle Developer的代码中发生,可在适
当的位置上放置一个标准样品来看是否能够防止它们。如果发现某些错误比其他错误
发生得频繁,就把工作集中到这些错误上,来减少这些错误。
13.2 调试Oracle Developer对象
假设现在完全怀疑自动调试工具作为调试方法,本章剩余部分将介绍如何有效地使用这
些工具。主要是在调试的假设 -检验层上使用这些工具。
Oracle Developer的环境可以以几种不同的途径进行调试。内置的调试程序可以跟踪整个
代码,并且事实上能够随意地查看任何事。表单和报表也能够使用跟踪工具进行跟踪,能够
知道现在程序执行到什么地方。
13.2.1 调试程序
调试程序可以在应用中以交互的现代跟踪技术跟踪 P L / S Q L :
■ 在源代码中交互处理断点和触发器。
■ 交互查看、处理P L / S Q L 和变量。
■ 查看P L / S Q L调用堆栈。
■ 交互执行P L / S Q L 命令。
每种工具以不同的方式建立应用程序的调试程序。
1. Forms的调试程序
在Oracle Developer Forms的应用程序中使用调试程序,必须使用调试选项生成表单和菜
第1 3章 调 试 2 8 5
下载
剩余20页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3671
- 资源: 59万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功