首页> 中国专利> 一种基于模型的构件测试用例生成方法

一种基于模型的构件测试用例生成方法

摘要

本发明公开了一种基于模型的构件测试用例生成方法,适用于设计模型基础上的构件单元、回归测试用例的生成,属于软件测试技术领域。该方法主要包括:1)基于XML的构件功能逻辑和数据对象描述;2)创建数据对象的平台无关形式到平台相关形式的映射表;3)基于映射表完成从平台无关测试用例到平台相关测试用例的自动转换和生成过程。与现有技术相比,本发明的方法通过基于设计模型和数据对象映射实现测试用例生成,提高软件测试中测试用例“按需”生成过程的跟踪、回溯能力,以及测试用例生成过程的自动化程度,达到提高软件测试灵活应对软件需求频繁变更的能力和效率的目的,具有很好的推广应用价值。

著录项

  • 公开/公告号CN103995781A

    专利类型发明专利

  • 公开/公告日2014-08-20

    原文格式PDF

  • 申请/专利权人 浪潮通用软件有限公司;

    申请/专利号CN201410252163.9

  • 发明设计人 唐龙业;

    申请日2014-06-10

  • 分类号G06F11/36(20060101);

  • 代理机构37100 济南信达专利事务所有限公司;

  • 代理人姜明

  • 地址 250101 山东省济南市高新区舜雅路1036号

  • 入库时间 2023-12-17 00:50:37

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-08-25

    授权

    授权

  • 2015-11-04

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20140610

    实质审查的生效

  • 2014-08-20

    公开

    公开

说明书

 

技术领域

本发明涉及软件测试技术领域,具体地说是一种基于模型的构件(单元)测试用例生成方法。

背景技术

近十几年来,软件规模不断扩大,软件的复杂性不断增加,软件的应用开发环境、开发方式等都在变化如构件技术的被广泛使用。在这种“变化”的大背景下,用户对于软件质量的要求也在提高。因此,作为提高软件质量的一种有效手段,软件测试技术也需要适应并不断发展。统计表明:在软件测试开销中,约40%投入到测试数据上,包括测试用例的生成和测试结果的检查。另外,测试过程的自动化程度对于测试的实施效率也有着直接的影响。

随着建模技术(尤其是UML)的应用成熟,基于模型的测试成为在实践中被广泛应用的一种方法。这里的“模型”可以是设计模型,也可以是专门创建的测试模型。在该方法中,基于模型的描述信息(通常包括工作流和数据流信息)产生测试用例数据,并通过执行测试用例以检查/评估测试结果以发现软件中潜在的故障点。

测试用例生成是软件测试工作的基础,无论哪种测试方法都涉及这个问题。目前,虽然已有很多种测试用例生成方法,但是,他们距离实际应用尚有很大距离。这也是目前制约软件测试技术发展的主要因素之一。而国际上一些先进软件测试工具中,通常都回避了测试用例的自动生成问题,或者至多提供一种半自动的测试用例生成方式。因此,国内外从事软件测试的企业中,大多采用人工或者计算机辅助方式生成测试用例,它们的缺点是:

(1)测试用例生成需要花费大量开销(人员、时间等),并且自动化程度和效率低;

(2)软件逻辑的变化不能直接反映到测试用例集的更新上,实现“按需”维护的成本高;

(3)一些生成工具虽然达到了一定程度的自动化,但是实现过于复杂,对于使用者的专业技术要求较高。

近几十年来,随着软件质量问题日益突出,软件测试与维护的成本越来越高,工作量也越来越大。统计表明,在国内外,测试基本上达到软件开发总费用的50% ,有时甚至高达80%以上,而其中相当一部分是人工生成和维护工作的费用。

测试用例的自动生成一直是软件测试技术所追求的目标之一。虽然国内外许多科学家为此付出极大努力,但是,相关研究成果到能够顺畅的实践应用还存有较大距离。另外,随着构件技术的发展,如果能够针对构件版本的变化“按需”生成测试用例,对于提高构件回归测试效率、基于构件的软件系统的质量等都具有十分重要的理论和现实意义。

发明内容

本发明的技术任务是针对上述现有技术的不足,提供一种基于模型的构件测试用例生成方法。该方法能够按照给定的软件设计模型,针对其功能逻辑表达进行语义自动分析,并通过数据对象的模型转换方法生成符合要求的测试用例集合,提高软件测试中测试用例“按需”生成过程的跟踪、回溯能力,可大幅度提高测试用例生成的效率与自动化程度。

该发明旨在通过基于设计模型和数据对象映射实现测试用例生成,

本发明的技术任务是按以下方式实现的:一种基于模型的构件测试用例生成方法,其特点是包括以下步骤:

步骤一:  根据选定的UML设计模型,创建能够描述构件功能逻辑(工作流)的XML文档;

步骤二:  分析工作流中包含的状态数据及其包含的数据对象,创建数据对象语义描述表,确定数据对象的平台无关语义特征;

步骤三:  根据确定的目标平台,分析并明确与目标平台绑定的数据对象的语法特征、语义取值范围及约束;在此基础上创建平台无关到平台相关的数据对象取值映射表;

步骤四:  遍历描述构件功能逻辑的XML文档,自动产生对应构件功能逻辑的工作流集合;

步骤五:  基于步骤二中创建的数据对象语义描述表,转换并扩展步骤四中生成的工作流集合,生成平台无关测试用例集合;

步骤六:  基于步骤三中创建的平台无关到平台相关的数据对象取值映射表,针对步骤五中生成的平台无关测试用例集合进行数据对象的转换,生成与目标平台相关的测试用例集合。

作为优选,步骤一,基于已创建的UML图,手工创建反映构件功能逻辑的XML描述文档:

创建XML 文档时,按照对应UML图中每一项工作流程,采用语义清晰的XML标签进行翻译和描述:采用预定义的标签元素描述模型中的相应元素,包括起始节点、结束节点、中间节点、分支节点、循环节点、汇聚节点及并行节点,并通过Label_Config文档进行记录和语义注释。

所述标签元素可以由用户自行定义和扩展。

所述构件设计模型可以是第三方创建的,或者是用户自己设计的UML图,用以清晰地描述构件的某个剖面的功能逻辑——对应不同的UML图。

步骤二,根据UML图中的每一项工作流,明确标注其中的每一个节点所包含的状态数据,并手工创建数据对象的语义描述表NodeDescribeTable:

所述节点状态数据的描述特征包括:节点NodeNo、执行前状态StatesBeforeExecution、输入数据集InputData和预期输出数据集ExpectOutputData;

基于节点状态数据的描述特征,确定每一个状态数据中包含的数据对象集合DataObjectSet,其中,每一个数据对象DataObject的描述特征是:数据对象名字ObjectName,特征属性集合ObjectAttributes。

步骤三,面向目标平台和步骤二中分析得到的数据对象集合,基于确定的数据对象取值域和约束分析并自动生成目标平台下数据对象的具体映射状态值,并在此基础上创建数据对象由平台无关到平台相关的值映射表PItoPSMapTable:

其中,数据对象的平台相关属性特征包括:参数列表paraList,参数取值域valueDomain, 状态有效数据state(包括bool类型,true:有效数据;false:无效数据),通过目标平台下数据对象的取值域和约束分析,生成对应的映射对象,并记录其异常值集合和正常值集合。

步骤四,程序遍历描述构件功能逻辑的XML文档,生成工作流对应的测试路径集合TestPaths,其基本执行过程是:

(1)起始节点集合Starts非空,则取得一个起始节点,按照层次遍历的方法获得其孩子节点,并生成该起始节点到孩子节点的路径集合; 

(2)如果一个孩子节点是结束节点,则转向(5);如果孩子节点非结束节点,则该路径暂时存入Temps集合;直到当前起始节点的所有孩子节点处理完毕;

(3)如果临时路径集合Temps不为空,对Temps集合中每一条临时路径,获得其尾节点的孩子节点,然后转向上(2);否则,转向下(4);

(4)当前起始节点开始的工作流遍历完毕,如果起始节点结合Starts为空,则转向下(5),否则,转向上(1),继续执行;

(5)该对应路径存入TestPaths集合,即生成测试路径集合TestPaths。

步骤五,基于步骤二中创建的数据对象描述表(包括执行前状态、输入数据集合和预期输出数据集合),对测试路径集合TestPaths中的每一条可执行路径进行转换和扩展,生成平台无关的测试用例集合PiTestCases,基本执行过程如下:

(1)    如果测试路径集合TestPaths非空,则取得一条可执行路径; 

(2)    取得当前可执行路径的起始节点,查询步骤二中创建的节点语义描述表NodeDescribeTable,用其对应的状态数据描述特征(包括执行前状态、输入数据集合和预期输出数据集合)替换该节点; 

(3)    顺序取得路径中的下一个节点,查询步骤二中创建的节点语义描述表NodeDescribeTable,用其对应的状态数据描述特征(包括执行前状态、输入数据集合和预期输出数据集合)替换该节点;

重复(3),继续处理后续节点,直到所有后续节点处理完毕,并把转换生成的测试用例存入集合PITestCases;

重复执行(1)-(3),直到测试路径集合TestPaths中所有路径被转换处理完毕,并最终生成平台无关的测试用例集合PITestCases。

步骤六,基于步骤三中创建的平台无关到平台相关的数据对象取值映射表PItoPSMapTable,依次处理步骤五中生成的平台无关的测试用例集合PITestCases,通过数据转换过程自动生成平台相关的测试用例集合PSTestCases,基本执行过程如下:

(1)    如果集合PITestCases非空,则取得一个平台无关测试用例PiTC,并转向下(2);否则,处理完毕;

(2)    取得PiTC中的首个数据对象,查询步骤三中创建的平台无关到平台相关的数据对象值映射表PItoPSMapTable,用其对应的平台相关状态数据描述特征(执行前状态、输入数据集合和预期输出数据集合)替换PiTC中的数据对象,

(2)步骤可以细化描述为:

A)取得PiTC中首个数据对象;如果已无要处理的数据对象,转向(3);

B)查询PItoPSMapTable,获取其正常值集合和异常值集合,记录异常值个数NUM,正常值个数只记1;

C)复制NUM+1个PiTC备份,用NUM个异常值数据分别替换NUM个备份PiTC中的首个数据对象,并把替换后NUM个测试用例PiTC’存入集合PSTestCases;

D)从正常值集合中随机选择一个正常值替换一个备份PiTC,并把该替换后测试用例PiTC’暂时存入PsTemp集合; 

E)从PsTemp中任取一个PiTC’,如果获取到下一个数据对象,则PiTC’替换当前PiTC,并转向A);如果PsTemp为空,转向(3);

(3)    转向(1),继续处理下一个PiTC;

重复执行(1)-(3),直到集合PITestCases中所有平台无关测试用例被处理完毕,并最终生成平台相关的测试用例集合PSTestCases。

本发明的方法在构件设计模型基础上,基于XML的构件功能逻辑描述形式以及数据对象的平台无关、平台相关描述形式的精化映射,实现构件单元测试用例数据的自动生成。与现有技术相比具有以下突出的有益效果:

(一)同一数据对象在不同阶段下即平台无关和平台相关的描述形式,及它们之间的精化映射通过数据库二维表进行描述和配置,过程实现简单、易于理解和使用。

(二)通过平台相关的测试用例可以逆向回溯到平台无关的测试用例和可执行路径源,这有助于实施基于反馈的测试用例有效性验证和模型的正确性评估。

(三)只需要简单易用的XML内容及相关映射表的更新,即可以完成针对构件不同版本的测试用例生成工作。有效提高了构件回归测试、不同版本构件测试的效率。

附图说明

附图1是本发明方法中平台无关的数据对象元模型;

附图2是本发明方法中平台相关的数据对象元模型;

附图3是本发明方法中平台无关到平台相关测试用例的生成示意图。

具体实施方式

参照说明书附图以具体实施例对本发明的一种基于模型的构件测试用例生成方法作以下详细地说明。

实施例:

本发明的基于模型的构件测试用例生成方法中,平台无关的数据对象元模型如附图1所示,平台相关的数据对象元模型如附图2所示,平台无关与平台相关两种形式的数据对象间的转换声称过程如附图3所示。其具体实现过程包括以下步骤:

步骤一:基于已创建的UML图,手工创建反映构件功能逻辑的XML描述文档:

创建XML 文档时,按照对应UML图中每一项工作流程,采用语义清晰的XML标签进行翻译和描述。采用预定义的标签元素对应描述模型中的元素,包括起始节点、结束节点、中间节点、分支节点、循环节点、汇聚节点、并行节点等。标签元素可以由用户自行定义和扩展。所有标签元素均通过Label_Config文档进行记录和语义标注。

步骤二:根据UML图中的每一项工作流,明确标注其中的每一个节点所包含的状态数据,并手工创建数据对象的语义描述表NodeDescribeTable:

所述节点状态数据的描述特征包括:节点NodeNo、执行前状态StatesBeforeExecution、输入数据集InputData和预期输出数据集ExpectOutputData;

基于节点状态数据的描述特征,确定每一个状态数据中包含的数据对象集合DataObjectSet,其中,每一个数据对象DataObject的描述特征是:数据对象名字ObjectName,特征属性集合ObjectAttributes。

步骤三:面向目标平台和步骤二中分析得到的数据对象集合,基于确定的数据对象取值域和约束分析并自动生成目标平台下数据对象的具体映射状态值,并在此基础上创建数据对象由平台无关到平台相关的值映射表PItoPSMapTable:

其中,数据对象的平台相关属性特征包括:参数列表paraList,参数取值域valueDomain, 状态有效数据state(包括bool类型,true:有效数据;false:无效数据),通过目标平台下数据对象的取值域和约束分析,生成对应的映射对象,并记录其异常值集合和正常值集合。

步骤四:遍历描述构件功能逻辑的XML文档,自动产生对应构件功能逻辑的工作流集合

其基本执行过程是:

(1)起始节点集合Starts非空,则取得一个起始节点,按照层次遍历的方法获得其孩子节点,并生成该起始节点到孩子节点的路径集合; 

(2)如果一个孩子节点是结束节点,则转向(5);如果孩子节点非结束节点,则该路径暂时存入Temps集合;直到当前起始节点的所有孩子节点处理完毕;

(3)如果临时路径集合Temps不为空,对Temps集合中每一条临时路径,获得其尾节点的孩子节点,然后转向上(2);否则,转向下(4);

(4)当前起始节点开始的工作流遍历完毕,如果起始节点结合Starts为空,则转向下(5),否则,转向上(1),继续执行;

(5)该对应路径存入TestPaths集合,即生成测试路径集合TestPaths。

步骤五:基于步骤二中创建的数据对象描述表(包括执行前状态、输入数据集合和预期输出数据集合),对测试路径集合TestPaths中的每一条可执行路径进行转换和扩展,生成平台无关的测试用例集合PiTestCases。

基本执行过程如下:

(1)    如果测试路径集合TestPaths非空,则取得一条可执行路径; 

(2)    取得当前可执行路径的起始节点,查询步骤二中创建的节点语义描述表NodeDescribeTable,用其对应的状态数据描述特征(包括执行前状态、输入数据集合和预期输出数据集合)替换该节点; 

(3)    顺序取得路径中的下一个节点,查询步骤二中创建的节点语义描述表NodeDescribeTable,用其对应的状态数据描述特征(包括执行前状态、输入数据集合和预期输出数据集合)替换该节点;

重复(3),继续处理后续节点,直到所有后续节点处理完毕,并把转换生成的测试用例存入集合PITestCases;

重复执行(1)-(3),直到测试路径集合TestPaths中所有路径被转换处理完毕,并最终生成平台无关的测试用例集合PITestCases。

步骤六:基于步骤三中创建的平台无关到平台相关的数据对象取值映射表PItoPSMapTable,依次处理步骤五中生成的平台无关的测试用例集合PITestCases,通过数据转换过程自动生成平台相关的测试用例集合PSTestCases,基本执行过程如下:

(1)    如果集合PITestCases非空,则取得一个平台无关测试用例PiTC,并转向下(2);否则,处理完毕;

(2)    取得PiTC中的首个数据对象,查询步骤三中创建的平台无关到平台相关的数据对象值映射表PItoPSMapTable,用其对应的平台相关状态数据描述特征(执行前状态、输入数据集合和预期输出数据集合)替换PiTC中的数据对象,

(2)步骤可以细化描述为:

A)取得PiTC中首个数据对象;如果已无要处理的数据对象,转向(3);

B)查询PItoPSMapTable,获取其正常值集合和异常值集合,记录异常值个数NUM,正常值个数只记1;

C)复制NUM+1个PiTC备份,用NUM个异常值数据分别替换NUM个备份PiTC中的首个数据对象,并把替换后NUM个测试用例PiTC’存入集合PSTestCases;

D)从正常值集合中随机选择一个正常值替换一个备份PiTC,并把该替换后测试用例PiTC’暂时存入PsTemp集合; 

E)从PsTemp中任取一个PiTC’,如果获取到下一个数据对象,则PiTC’替换当前PiTC,并转向A);如果PsTemp为空,转向(3);

(3)    转向(1),继续处理下一个PiTC;

重复执行(1)-(3),直到集合PITestCases中所有平台无关测试用例被处理完毕,并最终生成平台相关的测试用例集合PSTestCases。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号