主权项 |
一种基于抽象内存模型的非数值型数据的计算方法,其特征在于,该方法包括:A、设计抽象内存模型用于模拟数值型变量和非数值型变量的内存结构,以及存储变量操作中包含的语义信息和约束关系;B、提取数值型变量和非数值类型变量的结构体类型操作和指针类型操作中包含的语义信息,并将语义信息映射到抽象内存模型中;C、提取数值型变量和非数值类型变量的不同类型的操作中包含的变量间约束和变量内约束,并将约束关系映射到抽象内存模型中;D、从抽象内存模型中提取变量的语义信息和约束关系,使用测试用例构建算法和约束求解器构建测试用例;具体为:采用抽象内存建模技术存储路径分析过程中变量相关语义信息,路径分析结束后,变量的非数值型约束和数值型约束都保存在抽象内存模型中,测试用例生成算法就是从抽象内存中按预设规则分别提取变量的数值型约束和非数值型约束,构建测试用例;其包括:D11、如果变量var是数值类型,获取约束集中域中域变量相关的约束关系,利用第三方约束求解器求解出满足约束的值;如果求值失败则此次测试用例生成过程失败;D12、如果变量var为结构体类型,逐个为结构体的成员域递归调用测试用例构建算法,然后组装成结构体变量var的值;D13如果变量var为数组类型,首先调用约束求解器求解下标和数组长度之间的约束,生成合适的长度和具体的下标,构建数组的形状,然后使用测试用例构建算法逐个为下标对应的元素递归调用建立测试用例buildTestCase生成测试用例;D14、如果变量var为指针类型,获取对应的抽象内存,若指针变量的状态为空或不确定,则指针变量var为NULL;指针变量的状态为非空,获取指向域,若指向域的输入标志inputFlag属性取值为F,表明其指向的内存单元是在函数内存分配的,不属于测试用例的一部分;若指向域的输入标志inputFlag属性取值为T,则按所述指针类型递归调用测试用例构建算法。 |