首页 > 范文大全 > 正文

异常结构对Java程序分析的影响

开篇:润墨网以专业的文秘视角,为您筛选了一篇异常结构对Java程序分析的影响范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:控制流、数据流、控制依赖等是软件任务执行中比较常用的进行程序分析、技术分析和理解程序的程序模式。可提供较完善的异常处理机制,是现阶段市场上流行的程序设计语言都基本具备的功能。本文着重分析了Java语言程序中的异常结构,并对该程序结构在分析技术方面产生的不同影响进行了简单阐述,希望在后期软件技术发展中有所借鉴。

关键词:异常结构 控制流分析 数据流分析 控制依赖分析 java语言

中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2015)05-0000-00

修改源程序,是软件维护的重要组成部分,必须按照分析和理解程序、修改程序、重新验证程序三个步骤有计划、有针对性的进行修改工作。对整个源程序的全面、准确、迅速地分析和理解,是判断软件维护工作质量好坏的依据。而且,整个软件程序的理解必须以软件的可理解和文档的较高质量为基础,继而加强对程序功能和目标结果的理解;对程序中划分出来的程序系统结构、控制结构、数据结构和输入输出结构等各类结构信息的熟悉运用;对程序的相关数据流信息的来源、如何使用要及时掌握和广泛了解;对每条路径疏松的控制流信息的执行结果要做到准确掌握。只有如此,才能更一步提高对软件程序进行系统行的理解与掌握。

1概述

许多程序设计语言的异常处理机制,多出现在对错误问题的解决处理时却遇到健壮的程序,这种相对不匹配的情况。Java语言属于目前主流型使用软件,是具备异常处理机制的典型。它主要包括了对一个错误、异常信号的抛出和对获得的抛出的错误信号的正确处理两方面,即抛出异常和捕获异常。Java的关键字与它本身的异常处理机制中三个组成部分都有较密切的联系,下面就这些分别进行说明。

Throws:即后面跟随所有隐在的异常类型,是为方便客户程序员对该方法的控制,对客户程序员进行抛出异常这一环节。作为方法定义中的一部分,Java程序员必须将可以处理的潜在错误状态进行明确的指出,并利用所有可以用得上的该方法中的代码进行处理。这个新的方法的编写必须经Java编译器强制性操作整个过程。

Throw:即后面跟随异常对象。判断用户自定义异常对应错误在何种情况下算是产生的,这是throw语言的作用之一,属于抛出这个异常新对象时对该方法的一种调试功能。在这个过程中,编程者必须在程序选择较为合理的位置创建自定义异常的异常和对这个新的异常对象以throw语句形式进行抛出,以此作为系统不能识别和创建用户自定义异常的一种处理办法。

Try-catch-finally:即try块(警戒区)中对全部可能抛出异常代码部分的收集、处理。finally块是可变化的,try块中的catch 块中紧跟着所有的异常及其应该处理的部分,finally块一经确定,无论是否处于有异常产生的情况下都会执行处理功能的。对关闭文件和流、释放系统资源等方面的清理,必须在把控制权传输给其它程序之前通过这一方法进行处理。把系统恢复到原有状态,是finally块的最终目的。

依据研究发现,总程序数中try和throw语句程序分别占据了23.4%和24.6%,是异常处理机制广泛使用中的常用比例设计,这样不仅可以降低程序代码量,也是描述具体操作的代码与专门纠正错误的代码相分离的重要工具;但就异常处理机制的内部结构、内容而言,过程内部或过程之间的控制流极易受到continue、goto、exit 语句的类似结构的影响,这会成为信息结果不准确的诱因之一,从而造成在结构测试、回归测试、静态程序切片、动态程序切片、程序理解等软件工程任务应用中的严重错误。

上面内容就是先进软件的主流程序Java 程序中异常结构对控制流、 数据流、 控制依赖在分析技术应用的影响,是程序软件普遍具备的一种特性,是我们保障软件顺利应用必须时刻注意的问题。下面就此作出分析。

2异常结构对 Java程序静态分析的具体影响

所测试的程序在静态分析程序中无需执行就可扫描正文、直接分析程序的数据流和控制流、送出测试报告。

2.1异常结构影响控制流分析

控制流图以控制状态为描述主体,通过对系统控制转移路径的刻画和在特定数据驱动下具体状态的反映,将程序控制流从控制角度进行详细描述的一种图示方法。在软件应用中,数据流分析、 控制依赖分析等许多程序分析技术和结构测试、 回归测试等软件工程任务都在利用控制流图的描述信息。程序所有可能的执行路径,用语句层次上的控制流图表示;程序语句块用控制流图中的结点表示;程序语句块之间可能的控制转移用边表示。将异常结构引入语句层次的控制流图可以促进控制流信息更加准确地把握,换句话说,就是对控制流的整个程序分析必须对执行 try 语句的所有路径实行系统性研究。为了保障这一过程,控制流图进行四种有效路径的合理增加。一是当异常在try 块顺利完成且被finally 块抛出后沿调用栈传播继续传播;二是当异常被try块抛出后该曾未经处理或catch 块抛出其它异常时,将继续沿调用栈传播;三是当异常被try块抛出后该曾的catch 块将异常已经进行了处理;四是当异常被try块抛出后由相应的catch块捕捉了后finally块又抛出了另一异常。

过程间的控制流图,需要将所有过程按照下列方法连接。一是将每个调用结点和被调用方法的控制流图中的入口结点连接起来;二是将控制流中的退出结点和调用方法相对应的结点连接起来;三是当异常被一个方法抛出后经调用方法捕捉,将退出结点与调用方法中相应的 catch 结点连接起来。异常被调用方法传播同时也已捕捉;异常被调用方法传播却并未处理异常。这两者均是异常处理机制在过程间的控制流图中逐步加入的两个路径。

2.2影响数据流分析的异常结构

数据变换是系统模型的主要功能作用。系统模型是一系列加工单元对软件系统的抽象表现,数据流促进各单元之间的相互关联、让加工单元传输并向其不断转化。程序中使用数据、 定义数据和数据依赖等信息的汇聚过程就是数据流分析。

带有异常结构的数据流在现阶段有两种基本方法进行分析。一是数据流不断加入异常结构;二是单独表现异常结构的数据流。数据流分析中受异常结构的影响中, 程序信息被控制流图表示出来,异常结构的数据流逐渐加入到原数据流图中。下面就用举例法对数据流分析中异常结构的影响作用进行分析。

图1中,调用结点和被调用方法的控制流图中的入口结点用较粗的虚线连接,而异常退出结点和调用方法中相应的 catch 结点用较细的虚线连接。考虑异常路径影响到达-定值、活跃变量、定值-引用链的具体情况,是带有异常结构的控制流图进行数据流分析的必要条件。变量的定值点到达的点会在异常路径中有所变化,是到达-定值常出现的情况。新的到达点(8)(9)(10)在变量 x 的定值点增加后,必然导致到达点(5)的减少,某些变量的活跃点在异常路径中明显有所增加。一方面,异常结构对定值- 引用链的影响,使定值-引用链无法沿异常路径被发现。若(9)对变量x的引用被它在(1)的定值忽略,就会导致定值-引用链< 3,5>的丢掉。另一方面,新的定值-引用链在沿异常路径中被增加。若(9)对变量x的引用被它在(1)的定值增加了,就会导致新的定值-引用链< 1,9>的增加。在用控制流图表示数据流信息后,也会因此将数据流中异常对其产生的影响加以表示在该图上面。

2.3影响程序依赖性分析的异常结构

通常情况下会利用程序依赖图表示程序的依赖性。控制依赖和数据依赖,是定义中程序依赖图的结点之间存在的两种有向边。其中,程序中条件语句、循环语句等对嵌入其中的语句的控制关系是由控制依赖描述的,而赋值语句中左值对右值的数据依赖关系是由数据依赖进行描述的。由于控制依赖和数据依赖在异常的影响下表现类似,本文只对控制依赖在异常影响下的表现进行了论述。entry结点与程序的关系为控制依赖,属于通常定义中程序的入口结点。如图2所示,是图1源程序的控制依赖图中的控制依赖部分。

一般情况下,程序控制依赖受异常的影响,主要产生了两个方面的表现。一是经常借助其他方法表示catch块中的语句。如g( )方法中的(4),是main( ) 中的catch 块中的语句(9)(10)经常产生依赖的,而不是对方法 main( ) 的入口;二是某个方法在被调用的过程中可能会将异常抛出,从而导致有关调用方法的返回位置不能被确定,被调用方法中的语句可能被方法中的某些语句产生依赖。 若g()在main()的调用中将异常抛出,就将进行main()中(8)的执行命令;若是没有将异常抛出,就会在(7)的返回后进行执行命令的继续。事实上,g()中的(4)就会被该方法 main()中的(7)产生依赖。现阶段,有人为了实现传统的程序依赖图对程序语句之间的依赖信息准确表达出来,逐渐开始了程序依赖图新的表示方法的分析研究。

3结语

Java语言是现今主流软件的典型代表,本文以此进行了传统程序分析技术在异常结构下的影响表现分析。许多软件工具都在将控制流分析、 数据流分析、 控制依赖分析得到的信息进行了应用。从实际情况分析,为了保障获取信息的准确度,必须将异常结构对控制流分析、 数据流分析、 控制依赖分析三者的具体影响充分考虑进去。否则,一些不确定信息在软件工具中的实际运用,只会造成软件程序运行的一些严重性后果的产生。

参考文献

[1]宋道远,贲可荣.Java程序异常信息分析插件的研究与设计[J].计算机科学,2014(08).

[2]岳珍梅,张伟刚.Java程序分析工具在复杂网络背景下的分析与设计[J].电子技术与软件工程,2014(13).

[3]时雷,虎晓红,席磊,张浩.Java程序设计课程教学分析[J].计算机教育,2010(14).

[4]杜延宁,赵银亮,韩博,李远成.一种数据结构制导的线程划分方法与执行模型[J].软件学报,2013(10).

[5]李龙飞.基于复杂网络的Java程序分析工具设计与实现思路浅谈[J].电脑知识与技术,2014(06).