如何对动态调用图的Java程序修改

如何对动态调用图的Java程序修改

在当前静态分析技术对于分析算法有着重要的影响,由于其方法比较复杂这就出现了精度不高,因此本文针对在静态分析中存在的实际问题进行具体的研究,能够从其问题中提出改进的方案,并且采用动态分析技术构造Java程序的动态调用图,文章中采用k-类方法后向切片计算修改影响的集合,之进行具体的试验,提高了精度,该技术的革新便于在大型Java程序中进行应用 , 改善了测试效果 。

由于大部分软件是面向对象方法编写,逐渐的形成了回归测试技术 , 面向技术中,其对象之间是一种继承和组合的关系,并且各个对象之间是通过消息相互影响的,本文在研究影响分析算法中,是在程序静态分析技术的基础上进行的,针对其中存在的问题以及在静态分析中精度不高的现状具体的改善,研究出了动态分析技术构造程序的类成员防火墙,提高了分析精度,同时降低了计算的复杂程度,这样就促进了修改影响分析技术的应用效果 。
1 基于动态信息的修改影响

为了提高计算的精度 , 改善计算的复杂程序,这就提出了动态信息的修改影响分析,首先在获得动态信息中,一般需要在程序中插桩,促进程序能够正常的将信息进行输出,这就需要在设计中将编译后的Java字节码程序插桩,然而本文在实施的过程中采用的是将每个方法插桩,来记录调用信息,在设计中其动态信息的修改影响分析的原理是:如图1所示,在进行插桩后的Java程序设计中,能够根据输出执行轨迹信息并且构造出动态调用图,然后进行修改影响分析,最终得出需要重新测试的模块,保障了高效的回归测试 。

2 动态信息调用图的设计

由于软件测试在开销中应用的范围比较广 , 这就提出了软件回归测试,其中该软件是指针对修改之后的软件进行测试,然后需要达到修改后能够完成新的功能测试,并且在修改之后能否引入新的错误 。但是在设计的过程中由于各个程序之间的元素关系比较复杂,这就需要在设计中提出详细的分析方法,能够使其在使用中对于整个程序进行重新测试 , 从此注重软件的后期开发以及软件的维护阶段 , 能够频繁并且在少量修改的状态下使用软件,在使用中每次修改时都要重新运行全部的测试 , 这就导致了软件开发和维护的效率比较低 , 这种形式就是修改影响分析 。因此在修改影响分析中其主要的目的是提高测试的效率 , 降低测试的费用,简化测试的程序 , 本文提出了动态信息的修改设计,采用的是动态信息调用图,对程序中函数调用关系的一种静态描述,节点表示的是具体的函数关系 , 边表示的是函数之间的调用关系,由于虚函数主要是针对函数调用点来研究的,因此在设计中必须要根据运行时接受对象的实际类型以及确定出函数调用的目标之后具体进行,当遇到如果在编译期对虚函数调用点时采用的是不同静态处理的方式,这种处理方式是通过静态分析来构建函数调用图,并且在程序的设计中进行实际的函数调用分析,建立一定的模拟器程序函数调用图来分析,但是针对虚函数调用点在应用中,需要在静态调用图不精确的结果 。

然而本文在研究动态调用图中 , 将其作为一种修改影响分析的对象,并且给予静态调用图的基础上进行,在程序的设计中将其从程序执行的动态信息中构造调用图,直接从程序中进行,该技术采用的是执行信息,然后修改之后的精度却比静态调用图高,在简化了程序中,提高了效率 。动态调用图在设计中,重点是对构造算法具体确定 , 在确定出具体的节点以及边的信息之后,根据节点来将轨迹中记录的调用信息加入动态调用图中,在实施的过程中采用先进后出的方式进行,在遇到了标志为in的节点后,将其表示的方法被调用,然后将算法从所有的轨迹中提出出来 , 并且将调用的信息构造出新的动态调用图 。

3 修改影响分析算法

通过分析设计,最终得出了动态调用图,然后进行修改影响分析 , 在后向切片来计算修改影响集合过程 。在定义为k-类方法后向切片,然后令E是一个程序,并且将给定的切片准则确定,在设计中具体的规定 , 其中具体的算法是:当BSLice(E)m,k={m′|(m′→km)∈DCG},m′→k , m是m′到m中存在着一条长度是k的可达路径,并且m′属于切片集合,当且仅当m′在动态调用图中存在着一条长度是k的可达路径到达m 。然而在设计中,后切片是BSLice(E)m中的元素与m是调用关系,将修改影响分析设定为:当m′调用m , 那么m的修改影响分析就会影响到m′,但是m′却不会影响到m,其中k表示的是调用层次对修改的影响关系,当与 靠近时,其中产生的影响关系就比较大,之后设定的k层之后就不会影响 。但是在BSLice(E)m , k中,其计算方法是标准的图 , 最终可达到算法,在修改之后达到了影响集合的效果,这就形成了修改影响分析技术 。将其算法表示为:

输入:动态信息调用图,被修改的方法是集合M,并且调用层是k;

输出:修改影响集合是affectedM

For each mi∈M do|

affectedM=affectedM∪BSLice(E)m,k

通过具体的算法设计,将Java程序进行研究,进行引入错误,设定k=4之后,进行新测试方法,通过程序开发人员和测试人员具体设定的 。具体的试验结果如表1:

程序 方法/个 修改的方法数量/个 修改影响集合的大小 遗漏的需要重新测试的方法数量/个

TK-simulate 543 6 35 1

Automata-Graph 742 5 52 2

通过上述实验结果表明:在使用动态信息调用图中,能够改善修改影响分析的效率,并且提高了使用的价值 , 在该软件的设计以及应用中提高了测试的效率 。

4 结束语

通过分析软件回归测试,进行修改之后实施测试 , 当遇到了没有分析方法时,需要对设计修改之后的软件进行重新测试 , 避免软件在开发以及维护中受到影响,因此针对这种现状,改善了精度不高以及静态分析中存在的不足,结果构造出了Java程序的动态调用图,为促进我国大型Java程序测试的具体应用做出了有效的保障,提高了软件的应用效果 。


【如何对动态调用图的Java程序修改】

经验总结扩展阅读