[发明专利]基于实时堆栈的程序切片方法无效
申请号: | 201110188810.0 | 申请日: | 2011-07-02 |
公开(公告)号: | CN102214141A | 公开(公告)日: | 2011-10-12 |
发明(设计)人: | 姜淑娟;张红昌;靳蓉 | 申请(专利权)人: | 中国矿业大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 221000 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 实时 堆栈 程序 切片 方法 | ||
技术领域
本发明涉及一种在软件开发过程中进行程序切片的方法,尤其是不仅可以有效处理复杂大型程序,而且可以提高静态程序切片精度的基于实时堆栈的程序切片方法。
背景技术
随着软件规模的日益增大,传统的调试技术不能够有效的处理复杂大型程序。大型应用系统通常有数百行的代码,程序开发人员往往不能够快速的理解程序中的代码,这给程序的调试和维护工作带来了很大的困难。而程序切片是一种程序分析技术,用来将大程序分解成小片段,删除一些与兴趣点不相关的语句,帮助开发人员从中提取感兴趣的部分。其概念和原理由M.Weiser于1979年首次建立。使用程序切片技术,将简化程序分析和理解的难度,加速程序的测试和调试工作,缩短程序的开发和维护时间。
程序P中的切片准则可以表示成一个二元组<P,V>,其中P是程序中的一条语句,V是在n处定义或引用的变量。关于该切片准则的切片将包含哪些影响和控制P处变量V的值得语句。程序切片的计算可以看作一个图的可达性问题,是在系统依赖上找出可达节点。系统依赖图由一个或多个程序依赖图组成。每个过程依赖图表示一个过程内的控制依赖和数据依赖关系。在系统依赖图中,每个过程的依赖图被连接起来,这些边表示过程间的数据依赖和控制依赖。
程序切片可以分为静态程序切片和动态程序切片。针对给定的切片准则,两者主要的差异在于进行切片时所需要的信息不同,静态程序切片仅需要程序的静态信息,即源程序;而动态程序切片需要根据程序的输入,记录程序的整个执行轨迹。静态程序切片考虑的是程序所有的执行情况,而动态切片仅考虑程序针对某一输入的特定执行情况。因此,动态切片包含的语句更少,结果更精确些。然而,动态程序切片需要的程序执行轨迹在获取和储存方面都受到时间和空间的限制。优化过的动态切片算法需要数分钟到几十分钟,其前期的准备时间更长。
目前大多数的编程语言都支持异常处理机制,在异常处理机制的帮助下,可以提高软件的健壮性,但是异常引起的程序终止也成为一种常见的程序错误。异常通常是由于程序执行过程中,出现了不期望或者错误的状态而引起的。以Java语言为例,异常分为应用异常和实时异常。运行时异常由Java虚拟机抛出,Java编译器不强制要求程序开发人员捕获。如果产生了运行时异常,而程序没有对其进行捕捉,那么程序只能终止。例如空指针引用这类异常,通常发生在多个过程的交互过程中。复杂的控制流及过程调用,使得定位引发异常的原因变得非常复杂。
当程序异常终止时,Java虚拟机将会产生堆栈跟踪信息,其中会包括抛出异常的方法以及异常抛出的行号,还有当前调用栈中的所有方法和调用语句所在的行。堆栈跟踪信息可以帮助开发人员修复程序中的错误,然而仅仅通过这些信息,开发人员往往无法精确的找到引发异常的原因。
发明内容
为了克服现有的静态程序切片其精度和实用性低的不足,本发明提供一种基于实时堆栈的程序切片方法,该切片方法可以利用程序异常抛出时保存的堆栈跟踪信息,推测程序的执行轨迹,并在切片的过程中排除与本次执行无关的语句,从而达到减小切片大小、提高程序切片精度的目的。
本发明解决其技术问题所采用的技术方案是:该基于实时堆栈的程序切片方法包括如下步骤:
(1)预处理程序,对程序进行语法、词法分析,生成抽象语法树。
(2)根据程序测试用例运行程序,获取实时堆栈输出。
(3)将实时堆栈输出信息导入堆栈信息分析器,确定程序语句的执行情况。
(4)根据堆栈追踪分析程序中方法的执行情况,将调用程序方法分为三类,可能执行的方法,部分执行的方法,确定没有执行的方法。如果是可能执行的方法,则执行步骤(5),如果是部分执行的方法,则执行步骤(6),如果是确定没有执行的方法,则执行步骤(7)。
(5)在程序执行中,这类方法可能被调用过,但是不能确定其中某个语句是否执行过。产生这种情况主要有两点原因,一是仅依靠堆栈追踪信息,对那些已经调用并且正常返回的方法,我们无法确定方法内具体的执行路径;二是由于面向对象语言中多态的特性,即使我们确定某个调用语句执行了,但是其调用的方法可能已经返回,无法确定其调用的是哪个类的方法。在这种情况下,应该对方法中所有语句计算依赖关系,构造相应的程序依赖图,然后进行程序切片操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国矿业大学,未经中国矿业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110188810.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种熔体及带有该熔体的熔断体
- 下一篇:紫外光固化涂料及其制备方法