一种静态缺陷检测方法及其系统的制作方法

文档序号:8223406阅读:596来源:国知局
一种静态缺陷检测方法及其系统的制作方法
【技术领域】
[0001]本发明涉及软件测试技术,尤其涉及一种静态缺陷检测方法及其系统。
【背景技术】
[0002]静态缺陷检测是指在不执行程序的情况下对代码进行分析,通过程序语法及程序抽象语义计算来判断所有可能的程序运行时属性违反。静态缺陷检测的基本特征是在对软件进行分析、检查和测试时,被测试的程序没有被实际运行,它可以对各种文档进行测试,是软件开发过程中十分有效的质量控制方法之一。
[0003]静态缺陷检测的对象一般是程序源码或者二进制的可执行程序。由于静态缺陷检测技术可以针对源代码部分内容进行分析,无需编译运行整个程序。对于那些很难检测的小概率缺陷,静态缺陷检测技术能够取得较好的测试效果,因此成为构建可信软件的重要手段。
[0004]现有的静态检测技术在进行路径遍历时常采用变量矛盾取值来判断是否可达,但是此种判断路径是否可达的方法是不完备的,在遍历过程中可能会存在大量误报,从而不能精确排除不可达路径,影响了缺陷检测的精度。

【发明内容】

[0005]本发明提供一种静态缺陷检测方法及其系统,通过综合采用矛盾的变量取值判断和条件约束验证方法判断程序中的不可达路径,从而提高了缺陷检测的精确性。
[0006]根据上述目的,本发明提供了一种静态缺陷检测方法,其特征在于,所述方法包括:
[0007]S1、构造被测程序的抽象语法树和控制流图;
[0008]S2、根据预设的缺陷模式,建立所述缺陷模式的状态机实例,并将所述状态机实例置于待测程序的控制流入口;
[0009]S3、依路径遍历控制流图,并计算在遍历过程中每个控制流节点的变量的区间信息;
[0010]S4、根据每个所述控制流节点的变量的区间取值信息,实时地更新所述状态机实例的状态,直至检测到所述状态机实例的缺陷或遍历完成所有路径上的控制流节点。
[0011 ] 其中,所述步骤S3具体包括:
[0012]S31,在所述控制流入口处将输入值生成初始符号,取区间理论中的上界作为初始区间;
[0013]S32、在数据流迭代过程中根据当前控制流节点的语义信息对各类程序语句中的变量进行符号表示,生成符号表达式;
[0014]S33、通过对所述符号表达式进行区间运算得到所述当前控制流节点的每个变量的区间信息。
[0015]其中,所述步骤S4具体包括:
[0016]S41,根据当前控制流节点的变量的区间取值信息,实时地更新当前控制流节点的状态机实例的状态和路径条件,依据路径条件中变量取值是否矛盾,判断是否为不可达路径,如果变量取值矛盾,则为不可达路径,将当前状态机实例销毁,结束检测过程,否则,进入下一步;
[0017]S42,读取当前状态机实例状态的条件约束,如果该状态的路径条件中的变量取值满足条件约束,则路径可达,继续执行下一个控制流节点;否则为不可达路径,将当前状态机实例销毁,结束检测过程;
[0018]S43,重复步骤S41和S42,直至检测到所述状态机实例的缺陷或遍历完成所有路径上的控制流节点。
[0019]其中,所述方法还包括:
[0020]提取检测到的所述状态机实例的缺陷发生的条件约束;将所述缺陷和所述约束条件作为约束求解器的输入进行求解,如果求解失败,表示检测到的所述状态机实例的缺陷的语义程序不可行,检测到的所述状态机实例的缺陷判定为误报。
[0021]根据本发明的另一个方面,提供一种静态缺陷检测系统,其特征在于,所述系统包括:
[0022]模型构造单元,用于构造被测程序的抽象语法树和控制流图;
[0023]状态机实例构造单元,用于根据预设的缺陷模式,建立所述缺陷模式的状态机实例,并将所述状态机实例置于待测程序的控制流入口 ;
[0024]分析计算单元,用于依路径遍历控制流图,并计算在遍历过程中每个控制流节点的变量的区间信息;
[0025]缺陷检测单元,用于根据每个所述控制流节点的变量的区间取值信息,实时地更新状态机实例的状态,直至检测到所述状态机实例的缺陷或遍历完成所有路径上的控制流节点。
[0026]其中,所述系统还包括:
[0027]缺陷判断单元,用于提取检测到的所述状态机实例的缺陷发生的条件约束;将所述缺陷和所述约束条件作为约束求解器的输入进行求解,如果求解失败,表示检测到的所述状态机实例的缺陷的语义程序不可行,检测到的所述状态机实例的缺陷判定为误报。
[0028]本发明的静态缺陷检测方法,依被测程序的控制流图对每一条潜在路径进行遍历,基于符号化的区间分析技术,对变量和表达式进行区间运算,同时,通过综合采用矛盾的变量取值判断和条件约束验证方法判断程序中的不可达路径,从而提高了缺陷检测的精确性;另外,通过约束求解器对检测到的缺陷进行判断,对检测到的结果进行了求精,从而可以消除缺陷的误报。
【附图说明】
[0029]通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0030]图1示出了本发明的静态缺陷检测方法的流程图;
[0031]图2示出了本发明的静态缺陷检测方法过程中的符号执行与体执行、区间分析的关系图;
[0032]图3示出了本发明的静态缺陷检测系统的结构框图。
【具体实施方式】
[0033]下面将结合附图对本发明的实施例进行详细描述。
[0034]图1示出了本发明的静态缺陷检测方法的流程图。
[0035]参照图1,本发明的静态缺陷检测方法具体包括:
[0036]S1、构造被测程序的抽象语法树和控制流图;
[0037]首先通过程序的源代码或二进制文件构建待测程序的抽象语法树,进而将缺陷检测问题转化为抽象程序分析及模式识别问题。通过对源代码解析,可以构建数种抽象程序模型,进而可以描述程序各个方面的表现行为。
[0038]抽象语法树(Abstract Syntax Tree,AST)在更多情况下是首先创建的程序模型。抽象语法树的节点对应于解析树上的源代码。抽象语法树是创建更复杂的图结构(模型)的基础,这些图用于不同类型(不同复杂程度)的分析算法,例如控制流图(Control FlowGraph, CFG) ο控制流图代表了所有程序执行可能被遍历到的部分,每个节点代表程序的一个基本语句块,指向边代表程序的可能执行路径。
[0039]程序的控制流图可以表示为一个有向图G = (N,E,%,nf),其中:N代表节点的集合,每个节点IiiG N反映程序中的顺序执行语句CommonStmt、条件判断语句Select1nStmt、循环语句LoopStmt等,与节点Iii关联的程序语句块表示为Stmt (η );E e NXN代表有向边的集合,反映程序中语句间的控制流关系,eh和ej别表示有向边e的头节点和尾节点:?为函数的唯一入口节点,n f为函数的唯一退出节点。
[0040]S2、根据预设的缺陷模式,建立所述缺陷模式的状态机实例,并将所述状态机实例置于待测程序的控制流入口;
[0041]缺陷模式是指程序中经常发生的缺陷所呈现出的语法或语义特征。缺陷模式是对程序属性的一种描述,若违反该属性则造成一个缺陷。对于时序安全类型的缺陷模式,例如资源泄露缺陷(Resource Leak, RL)、空指针解引用缺陷(Null Pointer Dereference, NPD)等,有限状态自动机是一种常用和易于理解的抽象表示,因此缺陷模式也可以用缺陷模式状态机来表示。
[0042]缺陷模式状态机用于描述缺陷模式的有限状态机(Finite State Machine,FSM),包括状态集合、状态迀移集合、及迀移条件集合,其中D = {$start,$error}UDother,T:DXCondit1ns — D。$start和$error分别表示起始状态和错误状态,Dtrthw表示其他中间状态的集合。
[0043]缺陷模式描述了程序代码中常见的含有缺陷的编程实践。缺陷模式必须满足以下几个条件:
[0044]I)该模式下的缺陷是符合实际的。就是说,该模式下所定义的缺陷在实际工程中是实际存在的。
[0045]2)基于该模式的缺陷数目是可以容忍的。通常来讲,缺陷个数与系统规模呈线性关系O
[0046]3)该模式下的缺陷是可以测试的。应存在一个算法可以检查出这个缺陷。
[0047]S3、依路径遍历控制流图,并计算在遍历过程中每个控制流节点的变量的区间信息;
[0048]所述步骤S3具体包括:
[0049]S31,在所述控制流入口处将输入值生成初始符号,取区间理论中的上界作为初始区间;
[0050]S32、在数据流迭代过程中根据当前控制流节点的语义信息对各类程序语句中的变量进行符号表示,生成符号表达式;
[0051]如果是变量声明语句则为其生成符号并取上界作为其区间;如果是变量定义语句则将定义处右值表达式的符号执行结果作为变量的符号表达式。
[0052]S33、通过对所述符号表达式进行区间运算得到所述当前控制流节点的每个变量的区间信息。
[0053]图2示出了本发明的静态缺陷检测方法过程中的符号执行与体执行、区间分析的关系图;
[0054]参照图2,符号化的区间分析采用符号表达式表示变量的取值信息,将程序中变量间的运算映射为符号表达式之间的运算,其中,具体执行语义下的程序变量Cvm、程序表达式(^_首先经过程序转换技术,转换为形式化的抽象语法树结构,然后符号执行语义通过符号生成器访问程序变量相关的AST节点(一般为PrimaryExpress1n或PostfixExpress1n类型的节点)生成原子符号Svar,通过符号表达式生成器访问表达式相关的 AST
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1