论文部分内容阅读
静态缺陷分析在不执行程序的前提下,通过分析受检程序的源代码或目标码,对程序运行时可能表现出的异常行为进行推测,进而发现受检程序中可能存在的缺陷。 基于模式匹配的代码缺陷检测技术是近年来得到广泛使用的静态缺陷分析技术。这类技术主要通过将受检程序代码与预定义的缺陷模式进行匹配以发现程序中的缺陷,一般包括三个主要环节:“缺陷模式的描述与预定义”,“缺陷检测过程”以及“报告优化过程”。已有技术在上述三个环节中均存在一些限制与不足:在缺陷模式的描述方面,现有技术缺乏对不同受检项目缺陷修复偏好与习惯(即缺陷修复过程中频繁涉及到的缺陷模式)的识别,使得其检测过程对实际缺陷修复过程的指导意义不够充分;在缺陷检测过程方面,由于缺陷模式定义的准确度不足,或采用了不太合适的检测算法等原因,已有针对时序型缺陷模式的代码缺陷静态分析工作无法同时兼顾较高的查准率和查全率;在报告优化方面,对于检测结果的排序,已有方法或采用单一指标进行排序,或采用多种指标但未能给出合理设置指标间权重差异的高效方式,从而影响到其排序方法的有效应用和推广。 针对上述不足与限制,本文提出了一系列的相应解决方法,并进行了有效的验证。本文的主要研究工作与创新点包括: 1、时序型缺陷模式标记语言EDPSN 该标记语言支持对时序型缺陷模式进行更为准确(例如支持定义条件式方法调用等)、全面(例如支持声明待定义缺陷模式所需要的缺陷检测过程的相关特征等)的描述和定义。基于该标记语言,既可以对通用缺陷模式进行形式化描述,也可以对自动提取出的项目特定缺陷模式进行形式化描述。 2、基于缺陷修复实例的模式提取方法 通过对缺陷修复实例进行分析,自动提取出受检项目中所蕴含的项目特定缺陷模式。这类缺陷模式比较准确地反映出受检项目的程序员在缺陷修复过程中真正感兴趣并实际修复过的缺陷类型和缺陷相关对象。基于这类缺陷模式,缺陷检测过程便能够聚焦到受检项目真正关心的或真正修复过的缺陷类型和缺陷相关对象上,进而提高其检测结果对受检项目缺陷修复过程的实际指导意义。 3、基于模式匹配的适应性缺陷检测方法 给定任意利用EDPSN所描述出的时序型缺陷模式,该方法支持根据该模式所提供的具体信息自动地找到并执行一个与之较为适应的缺陷检测过程,从而更为有效地发现出受检代码中所潜藏的相应缺陷。该方法还通过前置条件分析算法来收集程序运行过程的运行条件,以支持“条件式代码语句事件”的匹配。 4、基于缺陷修复历史的报告排序方法 通过对代码缺陷修复历史信息进行自动挖掘与应用,提出了一种结合了历史缺陷修复信息的静态缺陷报告排序方法。该方法首先通过对代码缺陷修复历史信息进行自动挖掘,自动地构建出一个用于指导报告排序的训练集,然后,利用机器学习等技术训练出合适的预测器,并指导静态缺陷警告的排序。训练集的构建过程会结合具体项目开发团队的缺陷修复习惯,对指导报告排序的不同指标的权重值进行动态地调整,从而使最终的排序结果能够适应不同团队的缺陷修复需求。 本文所提出的上述解决方法试图在多个维度上(查全率,查准率,报告检查效率等方面)提升现有技术的可用性和有效性。针对上述方法,本文分别通过实验较为充分地评估并验证了各个方法的可行性和有效性。