论文部分内容阅读
软件测试是分析软件系统的执行是否达到预期目的以及识别潜在缺陷的过程。目前,随着软件系统规模的扩大、复杂度的提升、应用领域的拓展,软件测试也越来越被学术界和工业界重视。由于静态缺陷检测可以基于程序片段进行分析,无需执行程序,且可以针对小概率缺陷实施有效测试,因此成为构建可信软件的有效手段。静态缺陷检测一般包括静态分析与人工审查两个阶段。根据Rice定理,静态分析的结果不可能做到既是可靠的(sound)又是完备的(complete),导致其分析结果不精确从而出现误报(false positive)或漏报(false negative),因此检测结果需要人工进一步的逐一确认。大量的人工确认负担导致软件开发和管理人员在软件开发过程中拒绝使用静态缺陷检测工具。如何提高静态缺陷检测的精度以及如何提高缺陷警报的确认效率已成为影响静态分析技术实用性的两个关键因素。本文的研究受到国家高技术研究发展计划(863计划)基金项目“网构化软件协同生产和运行演化集成平台及服务环境”子课题“大型网构化软件的可信开发、运行和演化技术体系与服务支撑环境”(2012AA011201)、国家自然科学基金项目“基于抽象内存模型的复杂类型测试用例生成方法研究”(61202080)、国家自然科学基金重大研究计划“可信软件理论、方法集成与综合试验平台”(91318301)等项目支持,以提升静态缺陷检测工具的精度及警报确认效率为主要目标,主要做了以下三个方面的工作:1、提高路径敏感的缺陷检测精度研究为了避免路径敏感分析时的路径爆炸问题,路径敏感的缺陷检测一般会在控制流汇合节点进行相同缺陷状态合并,而这种粗糙的合并策略可能会给缺陷检测带来精度损失。针对上述问题,本文提出一种基于变量“定义-使用”分析的相同状态合并策略,从而有选择地对控制流汇合节点进行缺陷状态合并,减少精度损失。文中所述方法已在缺陷检测系统(DTS)中实现,对10个GCC开源工程的测试结果表明,文中提出的方法可以提高路径敏感的静态缺陷检测的精度。2、基于静态分析的缺陷警报关联研究缺陷检测一般包括静态分析与人工审查两个阶段。静态缺陷检测工具报告大量的缺陷警报,但是主要的警报确认工作仍由人工完成,这是一件费时、费力的工作。巨大的审查开销可能会导致软件开发人员拒绝使用该静态缺陷检测工具。本文提出一种可靠的基于缺陷警报关联的静态分析优化方法,能够分组静态检测工具所报告的警报,在分组后的任意一组警报中,如果其主导缺陷警报被证明是误报(或者是真实的),就能确认其他缺陷警报也是误报(也是真实的)。对于函数间的缺陷警报关联计算,本文提出一种基于函数关联摘要的函数间警报关联分析技术,从而可以计算函数问的缺陷警报关联。文中所述方法已在DTS中实现,对10个GCC开源工程的测试结果表明,该方法在较小的时间和空间开销下减少了34.23%的缺陷警报审查工作,能够较好地适应于大型系统程序缺陷检测。3、基于踪迹挖掘的缺陷警报分组研究目前有限几个方法被提出用于警报分组,现存方法不能够处理高级别规格的警报间的代码结构相似性。本研究提出一种基于警报踪迹挖掘的警报分类方法,使用该方法挖掘警报踪迹进而将代码结构相似警报分为一组,使得分类后的最终警报更加易于人工确认。本研究的框架是通用的,可以用于任意基于源代码的静态警报分类。实验证明本文提出的方法是有效的,相关基础性的算法被实现并嵌入到我们的静态分析工具中。实际工程测试实践证明本文方法能够在大型软件测试中分类警报报告,使得警报确认工作更加高效。