论文部分内容阅读
在程序静态分析中,为达到精度与效率的有效平衡,基于缺陷模式的分析方法在大规模程序开发、维护中得到了广泛的应用。目前研究机构和业界普遍采用的缺陷分析方法主要包括;以控制流模型为基础的流敏感缺陷分析方法以及以值流模型为基础的流不敏感缺陷分析方法。后者虽不能直接给出全部程序语句的控制流顺序,但分析效率更高,误报漏报率与前者相似并且具有较大的提升潜力。 本文从应用需求出发,主要针对值流模型为基础的流不敏感缺陷分析方法进行深入的研究,以达到可用的精度与效率的平衡。为此,在程序建模阶段,完善值流模型,以便完全准确地描述程序,支持有关缺陷的正确检测;在缺陷模式的描述阶段,关注缺陷模式的表达,以提高可检测的缺陷范围;在缺陷检测阶段,基于守卫分析概念,以提高缺陷检测精度。 针对上述解决问题的基本途径,本文研究并提出了相应技术手段/方法,并进行了验证。本文的主要研究工作与创新点包括; 1、基于值依赖分析的程序建模技术 在值依赖模型中,增加了更多的程序元素类型,以增强模型的表达能力;并且完善了传统值流模型中守卫条件的生成及表达方法,以便精确表达模型节点之间的到达条件;通过融入内存指向关系计算结果,在值依赖模型中引入了别名指针与变量值的影响关系;此外,设计一种新的基于值依赖分析的区间分析算法,给出了模型与实际程序逻辑的映射关系。 实验结果表明通过使用值依赖模型,降低了约50%的误报率。 2、基于依赖约束的缺陷模式描述语言 为了增强缺陷检测的范围,发现更多的缺陷,本文提出了一种基于依赖约束的缺陷模式描述语言VDPL,该语言基于本文提出的值依赖程序模型,以变量值的依赖关系为基础,采用谓词逻辑的表达方式,描述了缺陷语法及语义特征。并对CWE(Common Weakness Enumeration)中严重程度为1-2级的全部缺陷进行了描述,证明了该语言的描述能力。 3、基于守卫关系分析的缺陷检测技术 为提高缺陷检测的精度,本文提出了一种守卫分析方法,包括;跨函数定值使用分析算法以及基于值依赖分析必然别名分析算法。其中,基于本文提出的值依赖模型中生成的守卫,以及本文提出的缺陷模式描述,发现别名和变量值之间逻辑问题,并进行相应的物理变量替换,以此确定程序所存在的缺陷。 实验证明,误报率降低了40%左右。 4、静态分析工具COBOT的开发 基于上述研究成果,设计并实现了一款静态分析工具COBOT,并针对三种类型的项目即中等规模开源项目、大规模开源项目和实际项目,开展了COBOT的应用实践。实践结果表明,COBOT的漏报率约10%-15%,低于国际同类工具,但误报率稍高。 该项目的研究成果已在航天某部门得到应用,应用效果良好。