生成时序安全属性类缺陷模式相关的函数摘要信息的方法
【专利摘要】本发明涉及一种生成时序安全属性类缺陷模式相关的函数摘要信息的方法,包括:判定被测程序中时序安全属性类的缺陷模式,并生成时序安全属性类缺陷模式的描述文件;根据所述描述文件获取所述时序安全属性类缺陷模式的有限自动状态机;根据所述有限自动状态机为所述被测程序中的函数生成函数摘要信息。本发明根据描述时序安全属性类缺陷模式的有限自动状态机为被测程序中的函数生成函数摘要信息,通过所述函数摘要信息进行软件静态测试,从而提高软件静态缺陷的检测效率。
【专利说明】生成时序安全属性类缺陷模式相关的函数摘要信息的方法
【技术领域】
[0001]本发明涉及软件静态测试【技术领域】,尤其涉及一种生成时序安全属性类缺陷模式相关的函数摘要信息的方法。
【背景技术】
[0002]静态代码缺陷分析技术通过对代码进行静态分析来推测程序运行时的表现行为,从而发现代码中可能存在的缺陷。这类技术主要包括抽象解释、定理证明、模型检测、符号执行和基于缺陷模式的代码检查等。
[0003]基于模式匹配的代码缺陷查找方法主要包括如下两大步骤:首先,对已有代码中出现过的缺陷进行总结并提炼出“缺陷模式知识”;然后,采用静态分析的方法对受检代码进行“缺陷模式匹配”以确定受检代码是否包含相应缺陷,并把匹配结果以缺陷检测报告的形式呈现给用户。
[0004]在对现有的若干基于模式匹配的代码缺陷静态分析工具研究之后,我们发现:在对C程序代码进行静态代码缺陷分析的过程中,特别是检测时序安全属性类缺陷模式时,往往要处理复杂的函数调用关系。传统的做法类似函数内联,在函数调用点处将被调用函数一层一层地展开进行分析,但是这会严重地影响分析效率。
【发明内容】
[0005](一)要解决的技术问题
[0006]本发明所要解决的技术问题是:如何生成时序安全属性类缺陷模式相关的函数摘要信息,提高静态缺陷检测的分析效率。
[0007](二)技术方案
[0008]本发明提出了一种生成时序安全属性类缺陷模式相关的函数摘要信息的方法,包括以下步骤:
[0009]判定被测程序中时序安全属性类的缺陷模式,并生成时序安全属性类缺陷模式的描述文件;
[0010]根据所述描述文件获取所述时序安全属性类缺陷模式的有限自动状态机;
[0011]根据所述有限自动状态机为所述被测程序中的函数生成函数摘要信息。
[0012]优选地,所述根据所述有限自动状态机为所述被测程序中的函数生成函数摘要信息之后,还包括:
[0013]在所述被测程序的函数调用点实例化与所述函数对应的函数摘要信息。
[0014]优选地,所述根据所述有限自动状态机为所述被测程序中的函数生成函数摘要信息具体为:
[0015]根据所述有限自动状态机,采用后向数据流分析法为所述被测程序中的函数生成对应的函数摘要信息。
[0016]优选地,所述采用后向数据流分析法为所述被测程序中的函数生成对应的函数摘要信息具体包括:
[0017]生成所述被测程序的函数控制流图;
[0018]逆向遍历所述函数控制流图中的节点;
[0019]合并当前节点的后继节点传递来的数据流值;
[0020]更新合并后的数据流值;
[0021]对更新后的数据流值进行逻辑表达式化简,并根据预设规则删除无效的数据流值。
[0022]优选地,所述在所述被测程序的函数调用点实例化与所述函数对应的函数摘要信息具体包括:
[0023]将所述函数摘要信息中的型参变量替换为函数调用点处的实参变量;
[0024]判断所述实参变量是否满足所述函数摘要信息中的约束条件;
[0025]如果满足所述约束条件,则获取所述函数摘要信息所关注的内存对象;并根据所述约束条件实现所述内存对象的状态迁移;如果不满足所述约束条件,则判定所述函数摘要信息在所述函数调用点不合法,结束本次操作。
[0026]优选地,所述获取所述函数摘要信息所关注的内存对象具体包括:
[0027]获取所述实参变量对应的指向信息;
[0028]根据所述指向信息获取所述实参变量指向的内存对象;
[0029]根据函数摘要信息内所有实参变量指向的内存对象,获取所述函数摘要信息所关注的内存对象。
[0030](三)有益效果
[0031]本发明公开生成时序安全属性类缺陷模式相关的函数摘要信息的方法,根据描述时序安全属性类缺陷模式的有限自动状态机为被测程序中的函数生成函数摘要信息,通过所述函数摘要信息进行软件静态测试,从而提高软件静态缺陷的检测效率。
【专利附图】
【附图说明】
[0032]通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0033]图1是本发明生成时序安全属性类缺陷模式相关的函数摘要信息的方法流程图;
[0034]图2是本发明中采用后向数据流分析法为被测程序中的函数生成对应的函数摘要信息的流程图;
[0035]图3是本发明中在被测程序的函数调用点实例化与函数对应的函数摘要信息的流程图;
[0036]图4是本发明中获取函数摘要信息所关注的内存对象的流程图。
【具体实施方式】
[0037]下面将结合附图对本发明的实施例进行详细描述。
[0038]本发明提出了一种生成时序安全属性类缺陷模式相关的函数摘要信息的方法,如图1所示,包括以下步骤:
[0039]SlOl判定被测程序中时序安全属性类的缺陷模式,并生成时序安全属性类缺陷模式的描述文件;
[0040]S102根据所述描述文件获取所述时序安全属性类缺陷模式的有限自动状态机;
[0041]S103根据所述有限自动状态机为所述被测程序中的函数生成函数摘要信息。
[0042]优选地,所述根据所述有限自动状态机为所述被测程序中的函数生成函数摘要信息之后,还包括:
[0043]在所述被测程序的函数调用点实例化与所述函数对应的函数摘要信息。
[0044]本发明使用一种描述时序安全类缺陷模式的语言-SDDL-Typestate (Static
Defect Description Language for Typestate)定义时序安全属性类的缺陷模式;依据SDDL-Typestate给出的描述时序安全属性类缺陷模式的有限自动状态机,使用后向的数据流分析方法,为被测代码中的每一个函数生成摘要信息;静态检测时序安全属性类缺陷时,在函数调用点实例化函数摘要信息,从而完成对摘要信息关注的内存对象的状态迁移。
[0045]SDDL-Typestate是基于XML进行设计的,具有比较好的结构化特征,其通过关键字和标签对XML文档赋予特定的语义信息来描述时序安全属性类的缺陷模式,即定义描述时序安全属性类缺陷模式的有限自动状态机FSM (Finite State Machine)。
[0046]XML Schema文件用于约束SDDL-Typestate的结构及内容,具体如下面的Schema
文件所示:
[0047]
【权利要求】
1.生成时序安全属性类缺陷模式相关的函数摘要信息的方法,其特征在于,包括以下步骤: 判定被测程序中时序安全属性类的缺陷模式,并生成时序安全属性类缺陷模式的描述文件; 根据所述描述文件获取所述时序安全属性类缺陷模式的有限自动状态机; 根据所述有限自动状态机为所述被测程序中的函数生成函数摘要信息。
2.根据权利要求1所述的方法,其特征在于,所述根据所述有限自动状态机为所述被测程序中的函数生成函数摘要信息之后,还包括: 在所述被测程序的函数调用点实例化与所述函数对应的函数摘要信息。
3.根据权利要求1或2所述的方法,其特征在于,所述根据所述有限自动状态机为所述被测程序中的函数生成函数摘要信息具体为: 根据所述有限自动状态机,采用后向数据流分析法为所述被测程序中的函数生成对应的函数摘要信息。
4.根据权利要求3所述的方法,其特征在于,所述采用后向数据流分析法为所述被测程序中的函数生成对应的函数摘要信息具体包括: 生成所述被测程序的函数控制流图; 逆向遍历所述函数控制流图中的节点; 合并当前节点的后继节点传递来的数据流值; 更新合并后的数据流值; 对更新后的数据流值进行逻辑表达式化简,并根据预设规则删除无效的数据流值。
5.根据权利要求2所述的方法,其特征在于,所述在所述被测程序的函数调用点实例化与所述函数对应的函数摘要信息具体包括: 将所述函数摘要信息中的型参变量替换为函数调用点处的实参变量; 判断所述实参变量是否满足所述函数摘要信息中的约束条件; 如果满足所述约束条件,则获取所述函数摘要信息所关注的内存对象;并根据所述约束条件实现所述内存对象的状态迁移;如果不满足所述约束条件,则判定所述函数摘要信息在所述函数调用点不合法,结束本次操作。
6.根据权利要求5所述的方法,其特征在于,所述获取所述函数摘要信息所关注的内存对象具体包括: 获取所述实参变量对应的指向信息; 根据所述指向信息获取所述实参变量指向的内存对象; 根据函数摘要信息内所有实参变量指向的内存对象,获取所述函数摘要信息所关注的内存对象。
【文档编号】G06F11/36GK103914381SQ201410115283
【公开日】2014年7月9日 申请日期:2014年3月25日 优先权日:2014年3月25日
【发明者】金大海, 王前, 宫云战, 黄俊飞, 王雅文 申请人:北京邮电大学