一种Java异常传播的静态结构抽取方法技术

技术编号:7469688 阅读:352 留言:0更新日期:2012-06-30 23:17
本发明专利技术公开了一种Java异常传播的静态结构抽取方法,该方法以异常类型层次关系为依据,以方法调用关系为基础,结合Java异常传播过程中存在的异常抛出和捕获关系,从而能够较为完整地对Java异常传播的静态结构进行抽取。为了克服复杂的层次结构对异常传播的结构抽取带来的困境,本方法将系统异常类型与用户自定义异常类型进行融合,构建相对完整的异常类型层次结构树;在方法调用依赖图的基础上,通过异常抛出和捕获关系与异常类型层次结构树相关联,构建软件扩展依赖图。通过以异常类型捕获点为异常传播结构搜索起始点,采用以深度优先搜索算法为基础、异常类型层次树为依据的抽取算法,完成对Java异常传播结构的抽取。

【技术实现步骤摘要】

本专利技术涉及一种应用于基于Java编程语言的软件结构静态分析方法,特别是一种用于获取软件系统中异常传播结构的方法,属于计算机软件度量与分析领域。
技术介绍
软件系统功能的多样化和复杂化使软件鲁棒性问题已经成为业界关注的主要问题之一。目前,研究者已经提出了多种提高软件鲁棒性的方法。异常处理机制是现代编程语言为软件开发者提供的一种构建健壮系统的手段,它将系统在异常情况下的正常控制流与处理该异常的控制流进行分离。但遗憾的是,在庞大的系统中对异常控制流的分析是很困难的。异常处理的概念是由John Goodenough在1975年首次提出的。目前为大多数研究者所接受的异常的定义是异常是在程序的执行过程中检测到的不正常的事件,它使程序不能继续沿着正常的路径执行。异常以及异常处理过程是与编程语言紧耦合的,因此,异常类型分为三类错误(Error)、运行时异常(Runtime Exception)和可检测异常(Checked Exception)。其中错误和运行时异常为动态检测异常,可检测异常又称编译期异常,该类异常在程序设计时必须进行处理。异常的产生往往和异常的处理过程相互进行绑定。但是在复杂的软件系统中,异常的产生和处理过程并不一定在一个局部化区域内。例如以Java语言构造的软件系统为例,Java语言异常处理机制并没有把异常点和异常处理程序“紧密”地连接起来,而是通过方法调用栈进行关联,因此,Java语言的异常处理机制存在明显维护性问题对于某种异常类型的抛出,如何确定该异常的处理程序片段在该软件系统的位置。对于Java语言而言,一旦抛出异常,程序会搜索匹配该异常的第一个catch块进行异常处理。由抛出异常的方法到最终确定包含该异常类型处理块的方法所途径的调用链就是该异常类型的异常传播路径。对于开发者而言,异常传播频繁跨越组件的边界,具有全局性;而异常也在其传播路径上跳跃多次并有可能抽象化,增加了对异常的抛出位置和处理位置分析的难度。另外,对于异常传播的修改在异常处理全局性的影响下就需要更多的成本。因此,如何提供一种异常传播结构抽取方法,帮助开发者能够对异常传播机制进行充分的理解和分析成为在软件开发和后续维护过程中提高效率、降低成本的关键因素之
技术实现思路
本专利技术的目的是提出,是对以方法调用为基础的软件依赖图进行扩展,将方法和异常类型通过抛出关系和捕获关系进行关联,将软件依赖关系和异常类型层次结构进行有机地结合,提出了软件扩展依赖图。以软件扩展依赖图为基础,提出了一种基于深度优先搜索的异常传播路径提取方法,将异常传播结构描述成与某种被处理异常相关的方法调用链,即异常传播路径。本专利提供的方法能够使软件开发者较为容易的提取java应用中的异常传播结构,为软件维护提供了指导性意见。本专利技术是,该方法通过如下三个阶段实现第一阶段利用开源分析软件D印endceFinder和开源分析软件ASM对jar包进行预处理;首先对待分析的jar包进行预处理,抽取类中的方法元素及其之间的调用关系, 构建软件依赖图;其次,依据jar包中的自定义异常层次结构和用户自定义异常层次结构对异常传播结构完整性和正确性的影响,构建异常层次结构树;第二阶段扩充所述jar包中方法之间的调用依赖关系,通过异常传播相关的抛出关系和捕获关系与第一阶段中的异常层次结构树相关联,构建软件扩展依赖图;第三阶段采用自顶向下分析法对所述jar包中的每个方法中的异常捕获点,即 Java异常处理的catch块为搜索起点,按照捕获异常类型的传播途径,寻找异常抛出源点, 从而完成异常传播结构的抽取。本专利技术的,其特征在于是针对给定的待分析的Java软件系统采用如下步骤步骤101 利用D印endceFinder对待分析的jar包进行扫描,生成描述该jar包内各种编程元素之间依赖关系的XML文件;通过对XML文件的解析抽取jar包类中的方法及其之间的调用关系,构建软件依赖图;步骤102 利用ASM对Java工具包中的常用系统jar包进行扫描,并对其中的系统异常类型之间的层次关系进行解析,构建待分析的jar包异常层次结构树;步骤103 利用ASM对待分析的jar包进行扫描,并对其中的用户自定义异常类型之间的层次关系进行解析,并与待分析的jar包异常层次结构树进行融合;步骤104 在步骤103中的ASM扫描的结果中,提取类中方法的异常抛出关系和对相关异常类型的捕获关系;步骤105 对于每一个类中的方法,其异常抛出关系和异常捕获关系所涉及的异常类型需要在步骤102中的异常类型层次结构中查找,从而建立软件依赖关系图和异常层次结构树的联系,构成软件扩展依赖图;步骤106 :main函数首先入栈,判断在关于IIlegalAmountExc^ption的 try-catch块中是否捕获了调用方法抛出的异常;在分析异常类型是否被catch块捕获时, 需要在异常层次结构中判断两种异常类型的继承关系当且仅当catch块捕获的是某一异常类型或其父类型或祖先类型才能够处理try块中方法所抛出的这一异常类型;步骤107 对异常传播路径的提取的范围是当前分析的软件包,不包括第三方工具软件包以及运行环境;步骤108 依次对methodstack进行退栈即可得到相应的异常传播链式结构,异常传播结构抽取过程结束。本专利技术的优点①由于软件系统功能的多样化和复杂化,软件开发者在庞大的系统中对异常传播结构的分析是很困难的。针对复杂的Java应用,对于某种异常类型的抛出,如何确定该异常的处理程序片段在该软件系统的位置是分析异常传播结构面临的难题。本专利提出的方法能够帮助开发者提取异常传播结构,从而确定异常的抛出源点,为开发者对Java应用的维护提供支持。②随着软件需求的不断变更,基于Java语言的Web应用服务器(如Tomcat)的功能复杂程度加大了软件开发和维护人员对其后期维护和版本变更的难度。其中Web应用服务器中的异常传播现象让软件开发人员无法确定异常抛出源点,使软件异常处理程序更加难以维护,增加了时间和人力成本。本专利通过半自动化的搜索算法从Web应用服务器中抽取异常传播结构,确定异常抛出源点,便于软件开发人员在对异常处理结构维护过程中分析维护成本,从而提出有效的维护和变更策略。附图说明图1为异常传播结构抽取实施阶段示意图。图2为示例Java源代码及对应的软件依赖示意图。图3A为示例Java源代码中调用源代码示意图。图;3B为示例Java源代码中抛出源代码示意图。图3C为示例Java源代码中捕获源代码示意图。图3D为示例Java源代码中继承源代码示意图。图4为示例Java源代码中调用_抛出_捕获-继承源代码的软件扩展依赖示意图。图5为异常传播路径抽取算法实施步骤Cl的示意图。图6为异常传播路径抽取算法实施步骤C2的示意图。具体实施例方式下面将结合附图对本专利技术做进一步的详细说明。鉴于Java软件系统中的异常传播结构对软件健壮性维护的重要性和异常传播结构抽取的复杂性,本专利技术的目的就是提出一种针对Java软件系统的静态异常传播结构的抽取方法,用于帮助软件开发者从原有的Java软件系统中分离出异常传播结构,将异常控制流与软件正常控制流错综复杂的交织关系清晰化,降低软件后续维护阶段的人力、资源和时间成本。该方法将Jav本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:张莉邱翔连小利
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术