一种复杂数据结构在代码静态测试中的处理方法和装置制造方法及图纸

技术编号:7759004 阅读:186 留言:0更新日期:2012-09-14 00:49
本发明专利技术公开了一种复杂数据结构在代码静态测试中的处理方法,在符号表中记录与复杂数据类型相关的基本数据类型信息;对控制流图的每个节点的复杂数据类型,根据与所述复杂数据类型相关的基本数据类型信息进行基本数据类型拆分,将基本数据类型拆分后得到的每个独立变量进行独立分析,更新相应的控制流图节点信息;输出更新后的控制流图;本发明专利技术同时还公开了一种复杂数据结构在代码静态测试中的处理装置,通过本发明专利技术的方案,能够解决静态测试中对复杂数据类型整体建模分析不完善所产生的漏报问题,在一定程度上提高静态测试的精度。

【技术实现步骤摘要】

本专利技术涉及软件测试技术,尤其涉及一种复杂数据结构在代码静态测试中的处理方法和装置
技术介绍
软件测试是一种软件质量保证活动,其动机是通过一些经济有效的方法,发现软件中存在的缺陷,从而保证软件质量。软件测试通常从两个方面进行,即动态测试和静态测试。在动态测试中,需要根据实际状况, 设计多组测试用例,并通过实际运行被测程序来检测程序的动态行为和运行结果的正确性;静态测试则是扫描源程序,从中找出可能导致错误的结构异常、控制流异常及数据流异常。静态测试较动态测试而言,成本低、容易实现、能覆盖所有路径、且不依赖于特定的运行环境,所以静态测试技术正逐渐受到软件业界的青睐,已成为美国的一种主流的软件测试技术。目前具有代表性的代码缺陷静态测试工具主要有斯坦福(Stanford)大学的研究项目Metal、Maryland大学研发的Java程序静态测试工具FindBugs、开源的Java程序静态测试工具PMD、美国Klocwork公司研发的代码缺陷检测工具K8。目前主流的编程语言风格主要分为面向过程和面向对象两大类,对于静态测试过程来说,国内外现有工具对基本数据类型变量相关的缺陷检测已经具有了一定程度的精度保证,而对于与复杂数据类型相关的一些缺陷检测对象,如结构体成员访问、类成员函数的调用等,则由于对该类缺陷检测对象整体抽象建模难以实现,使得数据流计算过程中很难实现域敏感分析,降低了分析精度。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种复杂数据结构在代码静态测试中的处理方法和装置,能够解决静态测试中对复杂数据类型整体建模分析不完善所产生的漏报问题,在一定程度上提高静态测试的精度。为达到上述目的,本专利技术的技术方案是这样实现的本专利技术提供了一种复杂数据结构在代码静态测试中的处理方法,该方法包括在符号表中记录与复杂数据类型相关的基本数据类型信息;对控制流图的每个节点的复杂数据类型,根据与所述复杂数据类型相关的基本数据类型信息进行基本数据类型拆分,将基本数据类型拆分后得到的每个独立变量进行独立分析,更新相应的控制流图节点信息;输出更新后的控制流图。上述方案中,所述复杂数据类型包括结构体、类、数组和复杂指针。上述方案中,所述记录与复杂数据类型相关的基本数据类型信息为记录与结构体相关的基本数据类型信息,包括建立结构体类型模型实例,在结构体类型模型实例中,用哈希表(Hashtabel〈image, Type〉)记录结构体成员变量的相应类型(Type)和名称(image);用动态数组(ArrayList〈image>)记录结构体成员变量的出现顺序;当结构体成员变量的类型为其他复杂数据类型时,Type值为所述其他复杂数据类型相应的类型模型实例;记录与类相关的基本数据类型信息,包括建立类类型模型实例,在类类型模型实例中主要包括1)用HaShtabel〈image,Type>记录成员变量名和成员变量类型信息;2)用HashtabeKimage, Summary〉记录成员函数的函数名及其对应的函数摘要(Summary),若为虚函数,则不予记录;3)用ArrayList〈Type>记录父类类型信息;记录与数组和复杂指针相关的基本数据类型信息,包括只记录数组和复杂指针的成员变量的单独声明类型。上述方案中,所述根据与所述复杂数据类型相关的基本数据类型信息进行基本数据类型拆分为所述复杂数据类型为结构体时,利用符号表中记录的与结构体相关的基本数据类型信息,逐一遍历结构体成员,在结构体成员类型为基本数据类型时,对所述结构体成员进行独立变量声明;在结构体成员类型为复杂数据类型时,对所述结构体成员递归进行基本数据类型拆分;所述复杂数据类型为类时,利用符号表中记录的与类相关的基本数据类型信息,逐一遍历类成员,在所述类成员类型为基本数据类型时,对所述类成员进行独立变量声明;在类成员类型为复杂数据类型时,对该类成员类型递归进行基本数据类型拆分;所述复杂数据类型为数组时,利用符号表中记录的与数组相关的基本数据类型信息,查找所有数组长度确定的数组声明,在所述数组声明的数组类型为基本数据类型时,按照基本数据类型对所述数组进行独立变量声明;在数组类型为复杂数据类型时,对该数组类型递归进行基本数据类型拆分;所述复杂数据类型为复杂指针时,利用符号表中记录的与复杂指针相关的基本数据类型信息,查找所有复杂指针声明,当复杂指针声明为多级指针时,对不指向结构体的每一级指针做独立变量声明;当复杂指针声明为指向结构体的指针或多级指针的最后一级指 针为指向结构体的指针时,对所述指针指向的结构体进行基本数据类型拆分。本专利技术提供的一种复杂数据结构在代码静态测试中的处理装置,该装置包括符号表模块、基本数据类型拆分模块、分析更新模块、输出模块;其中,符号表模块,用于在符号表中记录与复杂数据类型相关的基本数据类型信息;基本数据类型拆分模块,用于对控制流图的每个节点的复杂数据类型,根据与所述复杂数据类型相关的基本数据类型信息进行基本数据类型拆分,将基本数据类型拆分后得到的每个独立变量通知给分析更新模块;分析更新模块,用于将基本数据类型拆分后得到的每个独立变量进行独立分析,更新相应的控制流图节点信息;输出模块,用于输出更新后的控制流图。上述方案中,所述符号表模块,具体用于在符号表中记录与结构体、类、数组和复杂指针相关的基本数据类型信息。上述方案中,所述基本数据类型拆分模块,具体用于利用符号表中记录的与结构体相关的基本数据类型信息,逐一遍历结构体成员,在结构体成员类型为基本数据类型时,对所述结构体成员进行独立变量声明;在结构体成员类型为复杂数据类型时,对该结构体成员递归进行基本数据类型拆分。上述方案中,所述基本数据类型拆分模块,具体还用于利用符号表中记录的与类相关的基本数据类型信息,逐一遍历类成员,在所述类成员类型为基本数据类型时,对所述类成员进行独立变量声明;在类成员类型为复杂数据类型时,对该类成员类型递归进行基本数据类型拆分。上述方案中,所述基本数据类型拆分模块,具体还用于利用符号表中记录的与数组相关的基本数据类型信息,查找所有数组长度确定的数组声明,在所述数组声明的数组类型为基本数据类型时,按照基本数据类型对所述数组进行独立变量声明;在数组类型为复杂数据类型时,对该数组类型递归进行基本数据类型拆分。上述方案中,所述基本数据类型拆分模块,具体还用于利用符号表中记录的与复杂指针相关的基本数据类型信息,查找所有复杂指针声明,当复杂指针声明为多级指针时,对不指向结构体的每一级指针做独立变量声明;当复杂指针声明为指向结构体的指针或多 级指针的最后一级指针为指向结构体的指针时,对所述指针指向的结构体进行基本数据类型拆分。本专利技术提供了一种复杂数据结构在代码静态测试中的处理方法和装置,在符号表中记录与复杂数据类型相关的基本数据类型信息;按照控制流图节点次序依次对每个节点的复杂数据类型进行基本类型拆分,将基本类型拆分后得到的独立成员变量进行分析,并更新相应的控制流图节点信息;输出更新后的控制流图;如此,能够解决静态测试中对复杂数据类型整体建模分析不完善所产生的漏报问题,在一定程度上提高静态测试的精度。附图说明图I为本专利技术实现复杂数据结构在代码静态测试中的处理方法的流程示意图;图2本文档来自技高网...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:黄俊飞周虹伯宫云战金大海王雅文
申请(专利权)人:北京邮电大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1