论文部分内容阅读
随着计算机的发展,软件的规模不断扩大,其复杂度也随之增加,软件故障正成为计算机系统失效和停机的主要因素,软件质量成为计算机领域研究的热点,软件测试已成为软件质量保证的关键步骤和软件工程中不可或缺的部分。互联网的发展加快了信息化的进程,针对计算机系统的威胁也逐步增长,安全形势越来越严峻,软件安全作为网络时代软件必然的需求,对软件质量提出了更高的要求。死锁是并发程序中的典型问题之一,也是影响软件安全的主要问题。死锁会导致程序无法正常运行或终止,甚至导致系统崩溃,带来不必要的损失。同时,死锁的运行状态空间过大,难于重现和修正等问题使其成为软件领域的难题之一,因此,如何有效的检测死锁,提高软件的可靠性和安全性,成为急需解决的问题。本文在国家“863”计划“软件的故障模型与面向故障的软件测试系统”及国家“863”计划“软件的安全性缺陷模型及基于安全性缺陷模型的测试技术”的支持下,以缺陷模式检测中所涉及的若干静态分析技术为研究核心,着重讨论了基于静态源码分析的多线程死锁检测方法。论文的主要工作包括以下内容:(1)本文通过对死锁问题的分析,结合Java多线程程序特点,讨论了Java多线程程序中常见的死锁模式的特点,并给出了统一的缺陷描述。(2)本文基于对Java多线程程序死锁的分析,结合国内外死锁检测方法,提出了基于静态源码分析的多线程死锁检测方法,该方法适用于大型项目中两个或多个线程产生的死锁问题的检测。文中的检测方法,首先通过对待测源程序的预分析,生成抽象语法树和控制流图等辅助分析结构;然后通过可达分析检测程序中可达的线程的并发特征,使用别名分析检测所有可能存在死锁情况;之后,对潜在的死锁集合进行分析,通过门锁分析和并发与逃逸分析,排除其中不可能的死锁情况,逐步缩小死锁集合,提高检测精度。(3)本文在基于缺陷的软件测试框架DTS Java的基础上,基于文中提出的检测方法设计并实现了的静态死锁检测子系统,该系统主要包括:线程并发特征分析模块、别名分析模块、可达分析模块、门锁分析模块和并发与逃逸分析模块等。同时,本文通过对一个死锁缺陷测试程序包和选取的5个开源项目,共225K行代码进行了测试,验证了该方法可以有效的检测Java多线程程序中潜在的死锁问题。