基于抽象内存模型的非数值型数据的计算方法技术

技术编号:8489737 阅读:275 留言:0更新日期:2013-03-28 09:06
本发明专利技术提供了一种基于抽象内存模型的非数值型数据的计算方法,包括:A、设计抽象内存模型用于模拟数值型变量和非数值型变量的内存结构,以及存储变量操作中包含的语义信息和约束关系;B、提取数值型变量和非数值类型变量的类型操作中包含的语义信息,并将语义信息映射到抽象内存模型中;C、提取数值型变量和非数值类型变量的类型操作中包含的变量间约束和变量内约束,并将约束关系映射到抽象内存模型;D、从抽象内存模型中提取变量的语义信息和约束关系,使用测试用例构建算法和第三方的约束求解器构建测试用例。采用本发明专利技术,可以克服现有技术无法精确支持非数值型变量程序语义的不足,实现包含非数值型的程序自动生成测试用例的目的。

【技术实现步骤摘要】

本专利技术涉及软件测试技术,尤其涉及基于抽象内存模型的非数值型数据的计算方 法,属于单元测试中对含非数值型数据程序的语义模拟和约束提取

技术介绍
软件测试分为动态测试和静态测试两种。动态测试是通过运行软件来检测软件的 动态行为和运行结果的正确性;静态测试是收集、查找程序的信息,对被测程序进行特征分 析,其主要优点是在程序运行之前就可以收集程序的语义信息。在实际的软件测试中,实际 的程序逻辑可以非常复杂的。基于静态分析的测试用例生成方案可以很好的支持数值型的 程序,对非数值类型的程序,该方案不能很好的记录程序的语义信息,导致自动生成非数值 类型的测试用例困难。尤其是指针的别名问题和数组的变下标引用,是符号执行的难点问 题。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种基于抽象内存模型的非数值型数据的 计算方法,其采用抽象内存建模技术存储路径分析过程中变量相关语义信息,在抽象内存 中为每个变量分配一个抽象内存单元,并将与该变量相关的指令操作映射为对抽象内存的 操作,精确记录变量的结构语义和操作语义。为达到上述目的,本专利技术的技术方案是这样实现的本专利技术所提供的,具有以下优点静态分析和符号执行相结合的测试用例自动生成技术,是自动化单元测试常用的 测试用例自动生成技术,但该技术的缺点是对非数值型的程序支持不完善,生成测试用例 困难。而本专利技术则属于基于路径的单元测试中为非数值类型(含非数值型数据程序的语义 模拟和约束提取)自动生成测试用例的方法,其使用抽象内存建模的技术存储路径分析过 程中变量相关语义信息,在抽象内存中为每个变量分配一个抽象内存单元,并将与该变量 相关的指令操作映射为对抽象内存的操作,精确记录变量的结构语义和操作语义。采用该 方法能够弥补传统的基于静态分析的测试用例生成方法无法精确支持非数值型变量(结构 体、指针和数组等)程序语义的缺憾,以及能够克服传统的符号执行和静态分析相结合测试 用例生成方法无法精确支持非数值型变量(结构体、指针和数组等)程序语义的不足,实现 为包含非数值型的程序自动生成测试用例的目的。附图说明图1为本专利技术的流程图2本专利技术中抽象内存的结构示意图。具体实施方式下面结合附图及本专利技术的实施例对本专利技术的方法作进一步详细的说明。本专利技术的基本思想为首先从被测函数的控制流图上得到一条路径作为被测路径,然后为被测函数的输入域参数分配抽象内存单元;之后逐个对路径上的节点进行语义模拟,将每条指令映射为对应的抽象内存操作,提取语义信息存入抽象内存中,将符号间的数值型约束关系存入约束集中;在路径分析结束后,从抽象内存中提取各个输入域参数的结构信息,从约束集中提取和该参数相关的数值型约束,按测试用例生成算法为该参数构建测试用例。图1为本专利技术的流程图,如图1所示,其方法主要包括步骤1:设计抽象内存模型用于模拟数值型变量和非数值型变量的内存结构,以及存储变量操作中包含的语义信息和约束关系。其具体包括使抽象内存主要用于存储变量的语义信息,按C数据类型将抽象内存模型分为四个区数值区、数组区、结构体区和指针区。这里,由于数据类型的特征不同,每个区都设有特有的数据结构,以便能够记录相关变量足够的语义信息。抽象内存中的每一条数据称之为一条记录,每条记录有唯一的地址标示,通过地址标示,访问对应的抽象内存单元,该设计类似于数据库的层次化存储。以指针变量int*p为例,在抽象内存的指针区和数值区将会分别生成一条记录。表I抽象内存模型核心属性权利要求1.一种,其特征在于,该方法包括 A、设计抽象内存模型用于模拟数值型变量和非数值型变量的内存结构,以及存储变量操作中包含的语义信息和约束关系; B、提取数值型变量和非数值类型变量的类型操作中包含的语义信息,并将语义信息映射到抽象内存模型中; C、提取数值型变量和非数值类型变量的类型操作中包含的变量间约束和变量内约束,并将约束关系映射到抽象内存模型中; D、从抽象内存模型中提取变量的语义信息和约束关系,使用测试用例构建算法和第三方的约束求解器构建测试用例。2.根据权利要求1所述,其特征在于,步骤A进一步包括使抽象内存主要用于存储变量的语义信息,按C数据类型将抽象内存模型分为四个区数值区、数组区、结构体区和指针区。3.根据权利要求1所述,其特征在于,所述步骤B包括 B1、对于数值类型的变量进行的语义操作包括使用变量名索引抽象内存是否存在对应的抽象内存记录,若存在则返回抽象内存地址,若不存在,则在抽象内存中为该变量分配一个新的抽象内存单元,分配新的符号S表示该变量的取值域; B2、对于结构体类型变量的语义操作包括访问结构体变量和访问结构体变量的成员; B3、对于数组类型变量的语义操作包括访问数组变量和通过数组下标访问数组成员; B4、对于指针类型变量的语义操作包括访问指针变量和访问指针变量的指向域*,对于结构体指针变量,通过_>访问变量成员,赋值操作改变指针的指向。4.根据权利要求3所述,其特征在于,所述步骤B2具体为 B21、访问结构体类型变量的语义操作包括使用变量名索引抽象内存是否存在对应的抽象内存记录,若存在则返回抽象内存地址,若不存在,在抽象内存中为该变量分配一个新的抽象内存单元,返回该抽象内存的地址; B22、访问结构体变量的成员的语义操作包括获取结构体变量的抽象内存单元Ms,按成员变量名查找Ms中的成员属性区,查看是否已为该成员分配抽象内存单元,若存在,返回该成员抽象内存单元,若不存在,按成员类型新建新的抽象内存单元,返回新建抽象内存单元的地址。5.根据权利要求3所述,其特征在于,所述步骤B3具体为 B31、访问数组变量的语义操作包括使用变量名索引抽象内存是否存在对应的抽象内存记录,若存在则返回抽象内存地址,若不存在,则在抽象内存中为该变量分配一个新的抽象内存单元,返回该抽象内存的地址; B32、通过数组下标访问数组成员的语义操作包括获取数组变量的抽象内存单元Ma,按下标表达式查找Ma中的成员属性区,查看是否已为该成员分配抽象内存单元,若存在,返回该成员抽象内存单元,若不存在,则按成员类型新建新的抽象内存单元,返回新建抽象内存单元的地址。6.根据权利要求3所述,其特征在于,所述步骤B4具体为 B41、访问指针变量的语义操作包括使用变量名索引抽象内存是否存在对应的抽象内存记录,若存在则返回抽象内存地址,若不存在,则在抽象内存中为该变量分配一个新的抽象内存单元,返回该抽象内存的地址; B42、访问指针的指向域的语义操作包括获取指针变量的抽象内存单元Mp,查看Mp的指向域是否已经分配抽象内存单元,如果已经分配,返回该指向域的抽象内存单元,若不存在,按成员类型新建新的抽象内存单元,返回新建抽象内存单元; B43、访问结构体指针的成员获取指针变量指向域,如结构体类型的抽象内存地址Ms,获取结构体的成员对应的抽象内存单元; B44、指针的赋值操作的语义操作包括获取左指针的抽象内存地址,判定p是否是第一次被重定义,如果是则将其当前指向域Pt和指针状态state分别存储到初始指向域initPT和初始状态initState中;然后获取右指针的抽象内存地址,左指针的当前指向域Pt和指针状态state分别被赋值为右指针的当前指向域p本文档来自技高网...

【技术保护点】
一种基于抽象内存模型的非数值型数据的计算方法,其特征在于,该方法包括:A、设计抽象内存模型用于模拟数值型变量和非数值型变量的内存结构,以及存储变量操作中包含的语义信息和约束关系;B、提取数值型变量和非数值类型变量的类型操作中包含的语义信息,并将语义信息映射到抽象内存模型中;C、提取数值型变量和非数值类型变量的类型操作中包含的变量间约束和变量内约束,并将约束关系映射到抽象内存模型中;D、从抽象内存模型中提取变量的语义信息和约束关系,使用测试用例构建算法和第三方的约束求解器构建测试用例。

【技术特征摘要】

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

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

1