论文部分内容阅读
随着软件开发技术的不断发展,软件系统的规模越来越大,其结构也日益复杂,从而使软件系统的质量越来越难以保障。其中,资源泄露故障是影响软件系统稳定性和可靠性最危险的安全漏洞之一。研究表明资源泄露故障是导致软件系统停机故障和服务型软件系统老化的主要原因,并且在软件中发生的比例非常高。因此对软件系统进行资源泄露故障检测的研究具有极大的现实意义。静态分析方法通过对源程序的静态属性进行分析和评估,找出可疑的故障之处。静态分析技术的特点使其在故障检测方面具有诸多优点,因此对它的研究越来越受到重视。但目前对资源泄露故障的静态分析相关研究中,检测精度有待提高,其实际可用性有待改善。这是由于分析时采用的控制流模型不够精确,对循环问题的简化处理,跨函数分析时无法做到完全的上下文敏感,以及对复杂数据结构的处理等问题不够精确。众所周知,对源程序进行高精度的静态分析通常其复杂度比较高,因此本文试图在精度、易用性、可扩展性等方面追求一个好的平衡。本文致力于研究如何在接近源程序语义的前提下,产生资源行为精简切片,并通过多种技术提高静态分析精度的问题。为此针对这些问题提出了资源行为精简切片构建方法、循环处理策略,以及用于实现完全上下文敏感的抽象函数摘要技术,并在初步检测结果基础上进一步优化给用户产生可读性好的故障报告。根据上述研究问题和研究思路,本文所进行的主要研究工作和创新点包括:(1)本文提出一种资源行为精简切片构建方法。目前已有的资源泄露检测多采用路径敏感方法,但是由于采用的程序语义抽象方法、路径爆炸等问题,效率和精度都有待提高。本文首先根据资源泄露故障模式提出了资源行为精简切片准则,然后根据切片准则构建资源行为切片。所提出方法首先基于控制流图进行Def-Use数据流分析获得资源行为前向切片,然后基于前向切片从资源释放点后向遍历对前向切片进行优化,最后通过符号执行获取切片的数据流约束条件。本方法实际是一种多层渐进方式,首先基于前向切片,凡是对于没有释放点的资源即可判断该资源被泄露。否则,需在优化后的切片上根据值流条件判断资源分配点到释放点数据流的可达性。此方面的研究是对目前流敏感静态分析控制流模型精简优化技术,减少控制流中的节点数以及状态迭代的计算量。(2)针对已有静态分析方法不能精确分析循环的问题,提出一种基于扩展递推链代数的循环次数估算方法。目前静态分析方法为了降低复杂度,简单地将循环展开1次避免路径爆炸,或者通过设置时间阈值来终止循环展开,但循环与资源泄露等故障有密切的关系,因此本文针对静态分析中的循环处理问题提出了针对性措施。该方法采用基于递推链代数将循环变量进行统一表示,根据运算规则化简并推导出循环条件关于迭代次数L的闭形式函数,将闭形式函数交由约束求解器进行求解,并将该信息增加到控制流图中用于循环的进一步分析,然后根据故障属性与循环的关系确定展开循环的次数,从而指导静态分析中对循环的处理,进一步提高静态分析的精度。此方面的研究是静态分析中对循环具有针对性处理的创新型工作。(3)针对已有的函数摘要不能精确地实现上下文敏感分析的问题,本文提出基于符号的抽象函数摘要的上下文敏感分析技术。目前函数间分析采用的函数摘要方法无法全面考虑上下文信息的传递(如变量的逃逸、参数的传递、函数返回等)。基于符号的抽象函数摘要模板(Abstract Function Summary Template,口AFST)全面总结了变量、参数、返回值在函数间名字空间转换关系,从而产生基于符号的抽象函数摘要模板,然后根据函数调用点上下文变量信息对抽象函数摘要模板进行实例化。此方面的研究是函数间分析时对函数摘要进行优化实现上下文敏感分析的创新性工作。在基准测试程序SPEC2000、开源数据集、一些文献以及自组数据集上,对本文所提出的静态分析方法分别进行了实测效果的对比分析。本文所提出的方法可实现在高效率的基础下对资源泄露故障的检测保持较低的误报率,表明了本方法的可行性和有效性。