CN105243018B - 一种面向对象的类测试数据生成方法 - Google Patents
一种面向对象的类测试数据生成方法 Download PDFInfo
- Publication number
- CN105243018B CN105243018B CN201510698908.9A CN201510698908A CN105243018B CN 105243018 B CN105243018 B CN 105243018B CN 201510698908 A CN201510698908 A CN 201510698908A CN 105243018 B CN105243018 B CN 105243018B
- Authority
- CN
- China
- Prior art keywords
- class
- constraint
- members
- class members
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种面向对象的类测试数据生成方法,该方法包含以下步骤:根据被测程序的类定义信息和类继承关系图,构建对象虚拟存储模型;创建类成员方法与对象抽象存储模型的语义映射,生成类成员方法的方法摘要信息;依据函数流程图和函数调用关系图生成程序逻辑路径集合;采用静态符号执行方法,执行程序逻辑路径集合中的路径;获取对象抽象存储模型中约束集;计算类成员满足的约束集解,并调用特定构造方法组装生成类对象测试数据;通过本发明的技术方案,可以克服现有技术无法精确支持面向对象软件测试,提高软件测试数据生成效率和测试自动化,实现面向对象的类测试数据自动生成的目的。
Description
技术领域
本发明属于计算机软件测试领域,尤其涉及一种针对面向对象语言的类测试数据生成方法。
背景技术
面向对象软件的信息隐蔽、封装性、继承性、多态性和动态绑定等特性提高了软件的可重用性,使软件开发更快、质量更高,而且软件易于维护、易于修改,通过组装可复用子系统而产生更大的系统。但是另一方面,它却给软件测试带来了更多的困难。尤其是如何采用自动化的方法来生成面向对象的测试数据,已成为软件测试者们所面临的挑战。目前国内针对面向对象的测试数据多采用人工方式或计算机辅助方式生成测试数据,这类测试数据生成方式无法解决面向对象语言测试数据的封装性、继承性和多态性;这类方法会导致测试数据生成需要大量时间,测试效率低下;同时对软件测试人员的专业性要求高,还要求测试人员对测试软件很熟悉;以上两点导致测试效果可信度很低。
本发明提供一种面向对象的类测试数据生成方法,该方法主要针对类的封装和继承两大特性,利用对象抽象存储模型描述和记录类的成员变量在程序运行过程中的数据变迁,可自动化生成类对象测试数据;且生成的测试数据可以对测试程序逻辑路径进行全覆盖,符合测试用例等价类划分原则,数据代表性高。综上所述,该面向对象的类测试数据生成方法可以在一定程度上提高测试数据的生成效率和测试的自动化程度。
发明内容
本发明的主要目的是在于提供一种面向对象的类测试数据生成方法,该方法能够按照给定的待测试软件项目,针对被测程序生成最大限度覆盖所有可执行路径的对象测试数据集合,为具体的软件测试项目提供基础数据,从而提高软件测试的效率与自动化程度。
为了达到上述目的,本发明的方法包含如下步骤:
步骤一、分析被测程序,获取面向对象语言的类定义信息及继承关系图并构造类抽象存储模型。
类定义信息描述类定义中所确定的逻辑信息,它包含类权限定义信息、类成员变量定义信息、类成员方法定义信息、类成员方法实现定义信息;
类继承关系图是为描述类的继承关系而生成;面对存在单继承和接口实现的语言,类继承关系图只考虑单继承获得的父类成员对象和成员方法;面对多继承语言,类继承关系图需要依次考虑其父类成员对象和成员方法。
类抽象存储模型的目的是在后期静态符号执行步骤中,精准记录路径的类成员约束条件。该模型包含以下内容:
1.对象地址编号:该地址编号顺序递增,其中包含两个特殊地址编号,空指针地址编号和野指针地址编号;
2.对象类型名称:主要指类名称;
3.对象成员变量:主要指类定义中包含的成员变量,包含因多继承导致的隐藏成员变量。它内容包含变量名称和变量值。如果该成员变量依然为类对象,则该成员变量为递归定义,其变量值为指向的地址编号;
4.对象成员方法的方法摘要信息;
5.对象指针标识:标识该对象是否为指针对象;
6.对象成员约束集合:该约束集合内容包含两类,一类是赋值约束,另一类是判断约束;
步骤二、依据所述类成员方法函数流程图,对类成员方法调用建立与对象抽象存储模型的语义映射,生成类成员方法的函数方法信息。
方法摘要信息是用来描述类成员方法对类对象其他成员对象和外界对象的影响;包括但不限于赋值、拷贝、计算;其生成方法输入为类成员模型、函数继承信息、方法参数和函数流程图,输出为依据不同路径而生成的类成员操作集。
步骤三、依据所述待函数流程图描述的测试程序执行逻辑,生成精简后的程序逻辑执行路径集合。
程序逻辑执行路径可以清晰的描述程序执行逻辑,它采用程序切片的方法生成;具体解释为:将函数流程图中结构化语句切分为语句基本单元,由语句基本单元组成函数流程图节点,采用图遍历方法遍历函数流程图获得程序逻辑路径集合。
步骤四、以所述程序逻辑路径为输入,进行静态符号执行操作,收集类成员约束集。
静态符号执行方法,是指在不执行程序的前提下,用符号值表示程序变量的值,然后模拟程序执行来进行相关分析的技术。在类测试数据生成方法中,它以对象抽象存储模型为辅助,以程序逻辑路径为输入,依据方法摘要信息识别程序逻辑路径中语法单元的语义内容,并将语义内容作为约束记录在所述对象抽象存储模型中;由对象抽象存储表收集类成员约束信息。
步骤五、通过约束求解器求解所述类成员约束集,生成类成员可能值;并调用特定构造方法,生成符合可执行所述函数逻辑路径的类测试数据。
约束求解器是一种满足性问题的求解器,它可得到该约束集有解和无解两种情况。有解情况下,它会给出一组符合约束的解;无解情况证明该程序本条路径在逻辑上不成立。所述特定构造方法采用递归设计,会覆盖类及其所有父类,目的是为测试数据组装提供通路。
本发明与现有技术相比的优点在于:
(1)本发明依赖程序逻辑路径进行符号执行,保证后期生成的类测试数据符合测试数据等价类划分原则中的路径划分方式,与现有的测试数据生成方法相比,生成的类测试数据更加具有代表性;
(2)本发明采用对象抽象存储模型来记录类对象的状态变迁,可以更加全面地保留路径执行过程中的各个中间状态,与现有的测试数据生成方法相比,生成的类测试数据内部信息更加完善;
(3)本发明采用对类成员方法抽取方法摘要信息,描述类成员方法操作的语义映射,使静态符号符号执行操作能够更加快速的执行;与现有采取内联展开的方式处理符号执行函数调用问题相比,可以加速符号执行速度,提高测试数据的生成效率。
附图说明
图1为本发明面向对象的类测试数据生成方法流程图;
图2为本发明面向对象的类测试数据生成方法实施例流程图。
具体实施方式
下面将结合附图1和图2对本发明的实施例的技术方案实现进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请的一个实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供一种面向对象的类测试数据生成方法,其基本思想是:通过静态分析获得项目类成员模型和继承关系图,以此创建对象虚拟存储模型;生成类的成员方法的方法信息;在符号执行程序逻辑路径过程中收集类成员变量的约束集;求解约束集,获得对象成员可能的取值;调用特定构造方法,输入可能取值,实例化类对象,便可生成类测试数据。
如图1本发明面向对象的类测试数据生成方法流程图所示,本方法包含5个步骤,具体如下:
1.分析被测程序获取类定义信息和类继承关系图,构建对象抽象存储模型。
2.依据类成员方法逻辑信息,对类成员方法建立与对象抽象存储模型的语义映射,生成类成员方法的方法摘要信息。
3.依据函数流程图和函数调用关系图生成程序逻辑路径集合。
4.采用静态符号执行方法,执行所述程序逻辑路径集合中的一条路径,收集类成员约束集。
5.使用约束求解器求解类成员的约束集,生成类成员可能值,调用特定构造方法,生成类测试数据。
以上步骤为面向对象的类测试数据生成方法的实现流程,根据此流程,可完成实施例的实现。以下论述实施例的实现过程。
如图2本发明面向对象的类测试数据生成方法实施例流程图所示,该实施例的实现包含以下流程步骤:
步骤201:获取待测试软件项目,从待测试软件项目内抽取源代码及其项目结构。
待测试软件项目指由面向对象语言编写,由指定编译器编译,可在目标运行平台上加载并执行的完整软件项目。
步骤202:对待测试软件项目代码进行分析,输出抽象语法树。
抽象语法树的构造方式通过三个步骤:第一、通过词法分析器将被测程序切分为语法分析所需要的符号节点,如常量和名字,此处过滤注释内容的影响;第二,通过语法分析器构建上下文无关文法抽象语法树,该步骤创建的语法树为不完全语法树;第三,通过语义分析器确认语义中的歧义性信息,使语法树上的歧义信息消除,此时构建的语法树为最终所需语法树。
步骤203:对被测程序代码进行分析,输出项目类定义信息和类继承关系图,并因此构建对象抽象存储模型。
类定义信息包含以下内容:
对象抽象模型包含以下内容:
步骤204:基于抽象语法树生成函数流程图;
函数流程图由具有语义信息的组合语句组成,代表程序逻辑。语句(Statement)是由基本语法单元构成的,代表一定逻辑意义的程序组成结构单元。可分为以下内容:
循环语句:FOR语句、WHILE语句和DO-WHILE语句;
条件语句:IF-ELSE语句和SWITCH-CAS-BREAK语句;
简单语句:声明语句、赋值语句、表达式语句。
步骤205:基于抽象语法树生成函数调用关系图。
函数调用关系图为除环调用图,除环调用图的除环方法为:依据函数调用顺序,删除递归调用和隐式递归调用。
步骤207:依据函数流程图,生成程序逻辑路径集合。
程序逻辑执行路径可以清晰的描述程序执行逻辑,它采用程序切片的方法生成;具体解释为:将函数流程图中结构化语句切分为语句基本单元,由语句基本单元组成函数流程图节点,采用图遍历方法遍历函数流程图获得程序逻辑路径集合。
步骤208:静态符号执行器从步骤207获得一条程序逻辑路径,初始化对象抽象存储模型,进行符号执行。
步骤209:静态符号执行过程中,遇到对类对象进行操作或者调用类对象成员方法的语句单元,根据类对象成员方法的方法摘要信息识别语句单元的语义内容,将语义内容记录到对象抽象存储模型中;
步骤210:待符号执行结束,收集对象抽象存储模型中的约束集合,并输入至约束求解器中,计算是否存在解;如果存在解,跳转至212步骤。
步骤211:约束求解器输出为无解,则输出该路径不可达;然后判断是否还有未执行路径,如果有,跳转至207步骤,如果没有,则流程结束。
步骤212:约束求解器输出为存在解,则调用特定类构造方法,将解集合组合为测试数据。
步骤213:将该生成的类对象作为一组测试数据输出,为测试项目提供基础数据。
以上所述仅为本发明的较佳实施案例而已,并不能因此而认为是对本发明的保护范围的限制,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
Claims (3)
1.一种面向对象的类测试数据生成方法,其特征在于:包含如下步骤:
步骤一、分析被测程序获取类定义信息和类继承关系图,构建对象抽象存储模型;
步骤二、依据类成员方法逻辑信息,创建类成员方法与对象抽象存储模型的语义映射,生成类成员方法的方法摘要信息;
步骤三、依据函数流程图和函数调用关系图,生成程序逻辑路径集合;
步骤四、采用静态符号执行方法,执行所述程序逻辑路径集合中的一条路径,收集类成员约束集;
步骤五、通过约束求解器求解所述类成员约束集,生成类成员可能值并调用构造方法,生成一组类测试数据;此时若程序逻辑路径集合不为空,返回步骤四执行;
步骤一中所述类定义信息包含类权限定义信息、类成员变量定义信息、类成员方法定义信息、类成员方法实现定义信息;所述类继承关系图是描述多个类之间存在的继承关系;所述对象抽象存储模型是用以对类对象存储状态进行建模,该模型包含以下内容:对象地址编号、对象成员变量、对象成员方法函数方法信息、对象指针标识和对象成员约束集合;所述对象地址编号顺序递增,并且包含一个特殊地址编号,空指针地址编号;所述对象成员变量包含因多继承导致的隐藏成员变量,且该成员变量为递归定义,对象成员变量包含变量存储地址编号、变量名称,变量类型信息;
步骤二所述方法摘要信息是用来描述类成员方法对类对象其他成员对象和外界对象的影响;包括但不限于赋值、拷贝、计算;其生成方法输入为类成员模型、函数继承信息、方法参数和函数流程图,输出为依据不同路径而生成的类成员操作集;
步骤四所述静态符号执行方法,是依次处理所述程序逻辑路径;处理方法为依据方法摘要信息识别语法单元的语义内容,并将语义内容作为约束记录在所述对象抽象存储模型中;
步骤五所述构造方法是类定义中一类特设构造方法,采用递归设计,会覆盖类及其所有父类,目的是为测试数据组装提供通路。
2.根据权利要求1所述的面向对象的类测试数据生成方法,其特征在于:步骤三所述函数调用关系图为除环调用图,除环调用图的除环方法为:依据函数调用顺序,删除递归调用和隐式递归调用;所述函数流程图由结构化语句组成,符合数据结构图类结构合操作;所述程序逻辑路径集合由程序逻辑路径组成,采用程序切片的方法生成;具体解释为:程序切片是将函数流程图中结构化语句切分为语句基本单元,由语句基本单元组成函数流程图节点,遍历函数流程图获得程序逻辑路径集合。
3.根据权利要求1所述的面向对象的类测试数据生成方法,其特征在于:步骤四所述约束为所述约束集的单元组成部分,约束定义为类成员变量应满足的表达式,可分类为由一元表达式描述、由二元表达式描述和由该两种表达式组合描述。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510698908.9A CN105243018B (zh) | 2015-10-24 | 2015-10-24 | 一种面向对象的类测试数据生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510698908.9A CN105243018B (zh) | 2015-10-24 | 2015-10-24 | 一种面向对象的类测试数据生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105243018A CN105243018A (zh) | 2016-01-13 |
CN105243018B true CN105243018B (zh) | 2017-11-24 |
Family
ID=55040671
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510698908.9A Active CN105243018B (zh) | 2015-10-24 | 2015-10-24 | 一种面向对象的类测试数据生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105243018B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109684189B (zh) * | 2017-10-18 | 2022-02-11 | 富士通株式会社 | 区块链智能合约的逻辑验证方法和装置及计算机存储介质 |
CN110795069A (zh) * | 2018-08-02 | 2020-02-14 | Tcl集团股份有限公司 | 代码分析方法、智能终端及计算机可读存储介质 |
CN111367786B (zh) * | 2018-12-26 | 2021-06-08 | 华为技术有限公司 | 一种符号执行方法、电子设备以及存储介质 |
CN111752841B (zh) * | 2020-06-28 | 2024-10-01 | 深圳前海微众银行股份有限公司 | 单测模拟方法、装置、设备与计算机可读存储介质 |
CN112667324B (zh) * | 2020-12-30 | 2023-12-05 | 凌云光技术股份有限公司 | 一种调用命令模式中命令类的方法及装置 |
CN113448667B (zh) * | 2021-06-09 | 2023-08-01 | 绿盟科技集团股份有限公司 | 一种生成展示关系图的方法及装置 |
CN113468892B (zh) * | 2021-06-21 | 2024-09-20 | 北京搜狗科技发展有限公司 | 一种模型测试方法、装置和用于模型测试的装置 |
CN115080448B (zh) * | 2022-07-27 | 2023-03-17 | 北京航空航天大学 | 一种软件代码不可达路径自动检测的方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942147A (zh) * | 2014-05-06 | 2014-07-23 | 南京大学 | 一种线性拟合函数驱动的测试数据自动生成方法 |
CN104063314A (zh) * | 2014-05-20 | 2014-09-24 | 中国工商银行股份有限公司 | 一种测试数据自动生成装置及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7860823B2 (en) * | 2006-05-04 | 2010-12-28 | Microsoft Corporation | Generic interface for deep embedding of expression trees in programming languages |
-
2015
- 2015-10-24 CN CN201510698908.9A patent/CN105243018B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942147A (zh) * | 2014-05-06 | 2014-07-23 | 南京大学 | 一种线性拟合函数驱动的测试数据自动生成方法 |
CN104063314A (zh) * | 2014-05-20 | 2014-09-24 | 中国工商银行股份有限公司 | 一种测试数据自动生成装置及方法 |
Non-Patent Citations (1)
Title |
---|
一种新的面向对象软件集成测试序列生成方法;苏荟 等;《软件》;20120331;第33卷(第3期);第75-79页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105243018A (zh) | 2016-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105243018B (zh) | 一种面向对象的类测试数据生成方法 | |
US10831456B1 (en) | External code integrations within a computing environment | |
Filaretti et al. | An executable formal semantics of PHP | |
CN101739339B (zh) | 一种基于程序动态依赖关系的软件故障定位方法 | |
CN109426615A (zh) | 过程间的空指针解引用检测方法、系统、设备以及介质 | |
CN104573503B (zh) | 一种内存访问溢出的检测方法及装置 | |
CN109033843A (zh) | 用于分布式静态检测系统的Java文件依赖性分析方法及模块 | |
Bousse et al. | Advanced and efficient execution trace management for executable domain-specific modeling languages | |
CN104298594B (zh) | 一种源代码中值计算错误的自动检测和定位方法 | |
CN107704382A (zh) | 面向Python的函数调用路径生成方法和系统 | |
CN103914379B (zh) | 故障自动注入与故障检测的方法及其系统 | |
CN102117228A (zh) | 一种动静态结合的Java程序异常处理优化方法 | |
CN106843849A (zh) | 一种基于文档的库函数的代码模型的自动合成方法 | |
CN107515739A (zh) | 提高代码执行性能的方法及装置 | |
JP2023016738A (ja) | 動的プログラミング言語を用いたコンピュータのプログラミングの技術的プロセスを改善する方法、コンピュータプログラム、コンピュータ(動的言語における型推論) | |
CN114036072B (zh) | 一种支持自动化检测程序缺陷的方法和系统 | |
CN115794254A (zh) | 基于云计算的组件研发管理平台和方法 | |
Rostami et al. | Detecting function constructors in JavaScript | |
Hay-Schmidt et al. | Towards a unified language architecture for reversible object-oriented programming | |
CN102262580A (zh) | 一种改进的基于符号执行的软件静态测试方法及工具 | |
CN111966578A (zh) | 一种安卓兼容性缺陷修复效果的自动化评估方法 | |
Joy et al. | Automated source code annotation for timing analysis of embedded software | |
Romanov et al. | Representing programs with dependency and function call graphs for learning hierarchical embeddings | |
Mennie et al. | Giving meaning to macros | |
Belevantsev et al. | Multi-level static analysis for finding error patterns and defects in source code |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |