- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对象程序异常分析与测试方法述评
面向对象程序异常分析与测试方法述评
摘要:从异常处理的分析方法和测试技术两个方面概述当前对异常处理的研究现状,分析和比较了一些典型方法;简要介绍了在??C++程序中异常测试技术改进和工具实现方面所做的工作;探讨了异常分析和测试的若干研究方向。??
关键词: 异常处理; 分析与测试; 控制流图; 形式推理; 覆盖准则
中图分类号:TP311.5文献标志码:A
文章编号:1001-3695(2007)08-0025-05
对于一个良好设计的程序而言,一般都有对预期错误的处理方式。早期的编程语言通过检查返回值进行相应的处理;现在,许多程序设计语言(如??C++、Java和Ada等)的异常处理机制(即一种运行时错误通知机制)是一个非常好的替代。异常处理机制将程序的正常控制代码和异常处理代码分离,在错误即将发生前检查其前置条件来阻止它,努力使程序正常运行。该方式使得程序的基本功能更突出、错误处理的复杂性更加清晰可见。然而,正确使用异常机制并非易事,大部分开发人员都低估了进行异常处理所需的技巧。异常的不正确使用会带来诸多问题,如对象状态不一致、内存泄漏、系统崩溃等。1996年Ariane??V号火箭的爆炸就是由一个未被捕获的异常引起的[1]。
异常处理作为许多面向对象程序设计语言的组成部分,为开发可靠性软件系统提供了强有力的支持[2]。由于异常的广泛使用(Sinha和Robilard等人[3,4]的统计表明约占代码的10%)以及极易被误用,出现了不少专门用于异常机制改进[5~8]、分析[3,4,9~11]和测试[12~16]的方法与技术,并组织了探讨面向对象系统中异常处理的专题会议[17]和专辑[18,19]。??
1异常处理机制简介??
异常处理的概念最早由Goodenough于1975年提出[20]。随后,Yemini[21]和Knudsen[22]等人对异常条件和异常进行了更为明确的定义,并形成如下共识:异常是程序执行过程中不正常的状态,需要额外计算的支持;当这种非常规状态被探测到时,相应的异常就被抛出。异常处理器(exception handler)则是被自动触发去执行响应异常发生的代码域。??
经过近三十年的发展,异常处理机制已经形成了多种变体,但其异常模型大致可分为三种[4,23]:a)终止模型。当引发了异常且被异常处理器处理后,控制不返回到发生异常的那一点,而是转移到异常处理器之后的第一条语句。b)恢复模型。异常处理完毕后,控制返回到发生异常的那一点继续执行。c)重试模型。异常处理后,控制返回到发生异常点所在的语法模块并重新执行。其中较为普遍使用的是终止模型,??C++和Java程序均采用该模型。??
在面向对象程序中,Ada和??C++中的异常是基本数据类型的变量或类实例对象,而Java中的异常则必须是类实例对象。此外,Ada语言对异常的处理和??C++、Java还存在一些不同,文献[24]作了详细的对比。在Java中异常对象有严格的层次结构[25],即所有的异常类别都派生自基类exception。??C++程序中则不那么严格,开发者也可根据需要自定义异常类和异常层次结构,它们可以不从exception类派生[26]。异常发生时对异常处理器的选择主要是异常类型的匹配,匹配过程按照异常类层次自底向上实施。当在该类异常层次没有找到适当的处理器时,查找上一层次的处理器直至找到类型最为接近的处理器。??
程序中出现的异常可以根据产生形式分为两类。??
定义1显式异常(explicit exception)。通过程序中的throw语句抛出的异常。??
定义2隐式异常(implicit exception)。通过调用例行程序库(如API函数)或由运行时环境抛出的异常。??
异常处理也是一种程序控制结构,主要有三个组成部分,即提炼异常(try警戒区,也称做防护域)、抛出异常(throw语句)和捕获异常(catch子句)。Try语句提供一种通过异常处理器进行代码防护的机制。每个catch子句对应一种特定异常类型,并当这种类型所包含的异常被抛出时执行。Finally块是可选的,块中的代码不论控制是否转移出try块总能被执行。典型的面向对象程序有专门的异常堆栈用于记录异常,一个异常可以在该堆栈上向上传播。若一个方法的异常没有在该方法内被捕获,则传播到该方法的上层调用者,称该过程为异常传播。??
2异常分析??
2.1基于程序结构的异常分析??
基于面向对象程序中的类控制流图(含方法内控制流图CFG和方法间控制流图ICFG)的分析,Sinha等人首先在方法内控制流图中增加异常退出节点来表达异常流信息[3
文档评论(0)