论文部分内容阅读
路径剖析是动态分析的一项重要技术,通过获取和分析程序中各条路径的执行次数,在编译优化、软件调试和测试等诸多方面发挥重要作用。路径剖析采用在待剖析程序中插装探针的方式以跟踪执行,并使用对路径进行编码的方式以高效地获取剖析结果。已有的研究工作较好地解决了无环路径的剖析问题,但是欠缺处理循环的能力,或者不能剖析有环路径,或者剖析的结果不精确,或者剖析有环路径的数目有着严重的限制。由于程序中普遍存在着循环,不能精确地获取循环路径的执行情况限制了剖析结果的完整性,进而限制了剖析技术的应用。
本文针对现有技术剖析能力不足的问题,对使用单个探针变量剖析过程内路径的方法进行了改进,在一定程度上提升了对有环路径的剖析能力,可以在增加较少的空间耗费和时间耗费的基础上,精确地获取较多有环路径的剖析结果。主要工作包括:(1)在过程内全路径剖析方面,研究新的路径编码和探针插装算法;(2)在过程内选择性路径剖析方面,研究处理有环的兴趣路径并提升剖析效率;(3)在过程间剖析方面,研究如何进行方法级剖析以及如何在剖析中处理多态调用;(4)研究有环路径剖析在多个领域的应用。
论文的主要成果表现在以下几个方面:
(1)在过程内全路径剖析方面,针对获取所有路径剖析结果的问题,提出了PAP方法,改进了现有路径编码的计算方式及其实现方式,保证了所有有环路径的唯一编码,进而保证有环路径的精确剖析结果。该方法使用记录断点的方式来应对循环路径编码过程中可能出现的探针变量溢出问题,并取得了较好的效果。提出了可规约无环子图的概念,并通过在无环子图内部应用紧凑的无环剖析方法的路径编码,将成熟的无环路径剖析与PAP方法的编码相结合,达到了约减探针数目、压缩编码空间和提升探针执行效率的效果。理论和实验分析表明,与其他路径剖析方法相比,PAP在合理的耗费之内极大改善了对循环路径的剖析能力。
(2)在过程内选择性路径剖析方面,专注于剖析用户感兴趣的有环路径集合,提出了在执行中检测兴趣路径的概念,以在执行中鉴别当前路径是否为兴趣路径,并通过对非兴趣路径的“提前结束”来节约执行时间,获得更高的剖析效率;基于提前结束的思想设计了三种非兴趣路径的检测方式,分别对CFG节点的临时路径编码、可规约无环子图中的局部路径编码和非兴趣边进行实施,各种检测方式具有不同的检测耗费和检测能力;基于这些检测方式及其组合,构造了选择性剖析方法PSP的四种实用的实现方式PSP0~PSP3,可以精确的剖析带有循环的兴趣路径。通过实验比较了PSP与相关剖析方法的效率、精确度以及适用范围,检验了PSP0~PSP3在各种剖析情况下的剖析效果,并通过对这些结果的比较得出选取准则,以此指导如何应用时进行剖析方法的选择。
(3)在过程间剖析方面,在方法调用图的基础上,提出了可以描述方法间多态信息和集簇信息的调用模型PCCG,基于此模型设计了精确剖析过程间路径的方法PIP,并设计了方法集簇的方式来提升剖析效率。通过实验验证了PIP剖析有环过程间路径的能力,并通过对多种方法集簇策略进行比较得出适用的集簇策略。
(4)在调用语境编码领域,现有的调用语境编码方法使用将编码压栈的方式处理递归调用,在对深层递归调用进行编码时导致栈的深度过大,空间耗费过高和解码效率的降低。针对这个问题,结合本文的剖析方法提出了PIPCE编码方法,可以高效的处理深层递归调用的语境编码及解码。
(5)在SOA白盒测试方面,现有的白盒测试准则在计算覆盖率时,通过可达性分析将所有静态可达的实体作为覆盖目标。由于覆盖目标实际包含很多不可执行的实体,导致了即使进行了充分的测试,覆盖率依然较低的情况。本文通过研究路径剖析结果的特性,提出了更实用的SOA白盒测试策略,以指导测试进程,提高测试效率。
(6)为了有效的验证这些剖析技术的应用效果,构造了统一的路径剖析实验环境并开发了相应的支持工具JP(x)P,其中实现了本文提出的PAP、PSP、PIP和PIPCE以及多种相关文献中的算法,使用多种基准测试程序对这些方法的效率、精确性和剖析能力等多个方面进行检验,通过比较这些方法的应用效果对本文中的方法进行了实验验证,并指明了进一步探索的方向。