- 文献综述(或调研报告):
- 路径剖析算法
路径剖析的功能在于收集软件的执行路径频率,剖析方法普遍采用路径编码的方法,并通过插装的方式使得目标程序在执行的同时可以进行编码的计算,在执行完毕之后可以获得各个路径编码的出现频率,通过解码获得最终的剖析结果。所以路径剖析分为两个阶段:静态的路径编码和插装实现,以及执行时对路径频率进行统计。
- 单过程(针对方法内控制流图)和过程间(包含方法调用)的路径
1996年Ball和Larus提出了首个路径剖析技术EPP,可以精确高效地剖析过程内所有无环路径。在此基础上,研究人员进行扩展,纳入对方法调用的编码,使得不同的过程间路径对应不同的编码,以获取其剖析结果。IPP在EPP基础上做了改进,在单个过程内部使用EPP探针进行插装,而每个过程调用边界处使用额外的运算方法将过程内无环路径编码与过程间调用边的编码相整合,以完成过程间剖析。但是IPP方法存在两个主要缺陷:1)难以处理循环;2)应对复杂流图时耗费过大。
而在Expp的基础之上,扩展成过程间剖析方法主要缺陷在于ExPP本身是非精确的,在循环处理上有限制,所以扩展后的剖析方法在精确度和路径循环上有限制。
为了满足过程间有环路径的精确剖析,基于PAP方法又提出了PIP方法,用于剖析包含任意有限次循环体执行和任意有限次方法调用的路径。
- 无环路径和循环路径
针对过程内包含循环的路径,Tallam等人提出了对包含循环体两次以内执行的路径进行近似剖析的方法。Roy等人在此基础上提出了一种新的方法kIPP,能够准确得剖析含有循环体k次执行的路径。但这种方法仅能剖析不超过60000数目的静态路径,导致k的大小受限于程序规模。所以这种方法难以处理较为复杂的程序和执行循环体次数较多的路径。
PAP方法通过区分同一个节点的不同入边,利用不同入边区分不同路径,可以有效地剖析包含循环体任意多次执行的路径。但随着被剖析程序的执行,探针会不断增大。因此设计断点机制来解决可能的探针值溢出问题,使剖析过程不受路径长短的限制。
- 一般路径和选择性路径
在过程内剖析和过程间剖析的基础上,可进一步分为一般路径和选择性路径。选择性路径剖析使用较低的耗费获取兴趣路径的执行频率,而一般路径的剖析处理所有的可剖析路径。在实际应用中,剖析结果的使用者往往对部分路径的频率感兴趣,例如程序调试中,编程人员需要比对特定的执行;软件测试中,测试者需要统计测试用在特定路径上的覆盖。针对这样的情况,选择性剖析在剖析之前,接受一个基于用户需求提供的兴趣路径集合PI,相应的,其他路径组成集合PN。PI路径的执行频率是选择性路径剖析的目标。
2. 路径剖析的应用
路径剖析是动态软件分析中的一个重要领域,其功能在于收集软件的执行路径频率。由于需要对大量的执行情况进行统计,以得出各条路径的执行次数。剖析方法普遍采用路径编码的方法,即将各条静态路径映射到不同的非负整数,并通过插装的方式使得目标程序在执行的同时可以进行编码的计算,在执行完毕后统计各个路径编码的出现频率,通过解码得到最终路径的剖析结果。路径分析在计算机架构、程序的编译、调试、测试和软件维护等多个方面都有着重要的应用。
- 程序切片
程序切片是一种用于分解程序的程序分析技术。随着程序切片的概念提出,同时提出了基于控制流图的计算机程序切片的算法。程序切片的发展经历了几个发展阶段:
