基于UML时序图的测试用例自动生成方法与流程

文档序号:11729276阅读:1955来源:国知局
基于UML时序图的测试用例自动生成方法与流程

本发明属于软件自动化测试领域,涉及基于uml时序图的测试用例自动生成方法。



背景技术:

随着对于计算机需求和依赖的与日俱增,计算机系统的规模和复杂性急剧增加,使得计算机软件的数量正以惊人的速度急剧膨胀。例如,航天飞机机载系统有近500,000行代码的软件,地面控制和处理系统也有大约350,000行的代码,塔台和雷达监控也有近200,000行代码。在美国电信业中,电信线路的正常运转需要数百个软件系统的支持,其代码总量超过一亿行。

与此同时,计算机出现故障引起危机的可能性也逐渐增加。由于计算机硬件技术的进步,元器件可靠性的提高,硬件设计和验证技术的成熟,硬件故障相对显得次要了。研究表明:由于软件设计故障引起的系统失效发生的概率比由于硬件故障引起的失效概率大的多。

软件故障正逐渐成为导致计算机系统失效和停机的主要因素。对复杂计算机系统需求的急剧增加,远远超过计算机软/硬件设计、实现、测试及维护的能力,结果出现了许多可怕的计算机工程事故,其中大多数都是由于软件故障所致。随着软件在航空、航天、通讯、金融、武器装备、医疗、化工等各个领略的广泛应用,软件质量问题已越来越受到社会的普遍关注。许多科学家在展望2l世纪计算机科学发展方向和策略时,把提高软件质量放在优先于提高软件功能和性能的地位。但是,人们开发优质软件的能力大大落后于社会对计算机软件不断增长的需求,开发出的软件系统普遍存在许多隐藏的故障和缺陷。勿庸置疑,如何提高软件质量,如同如何提高软件生产率一样,已成为整个软件开发过程中必须始终关心和设法解决的问题。

软件测试通常是根据软件开发各阶段的规格说明和程序的内部结构精心选取一批测试数据来组成测试用例,并用这些测试用例去驱动被测程序,观察程序的执行结果,验证所得结果与预期结果是否一致,然后做相应的调整,可见,测试用例生成对于软件测试多么重要。在软件开发周期中,测试是和开发并行的项目,每一阶段的开发从开始到结束,不同的测试种类和环节都要求同步,具体关联见附图。但是,不同测试用例对发现软件故障的能力差别很大。为了节约时间和资源,提高测试效率,必须精心挑选出有代表性的测试用例,使得采用这些测试用例能够达到最佳的测试效果,高效地把隐藏的故障揭露出来。为此,选择高质高效的测试用例有着很现实的意义。目前,有关软件测试方法和测试用例生成策略的研究已有许多重要成果,包括黑盒测试方法和白盒测试两种方法。结构性测试是一种非常有效的测试手段,是典型的白盒测试,包括语句覆盖测试、分支覆盖测试和路径测试等,针对程序内部的控制流结构来制定测试的标准和测试策略。基于结构测试的软件测试工具可以直接捕获程序的执行情况,并自动记录和报告测试的覆盖率。白盒测试的主要问题在于:

(1)它仅仅关注程序本身的结构,很难保证对软件系统问题域的覆盖充分性。

(2)由于软件系统实际执行路径的数目通常是天文数字,因此,结构测试一般仅限于单元测试。

与结构性测试相比,黑盒测试方法则从系统或模块的外部要求和特性出发,从各种不同的角度对其进行全方位的测试,包括基本功能、非法输入、边界和极端情况、时间和空间性能、兼容性、用户界面友好性等。因而,黑盒测试的显著特点是:

(1)与结构测试相比,考虑的因素更多、更全面,因而是保证软件测试质量必不可少的技术手段。

(2)直接针对系统的各项功能,避免了单纯追求程序结构上的覆盖率,特别是面向对象软件,加强测试的针对性可以减少大量与应用本身无关的冗余测试。

(3)适用于从单一模块直到完整系统的任意级别的测试。黑盒测试的依据是软件系统的规格说明(即编码前的分析设计模型/文档)。与基于源程序的白盒测试技术相比,它还具有如下优点:

(1)抽象程度好,不涉及实现细节,因此可以很好地指导功能测试。

(2)可以用于直接针对需求和设计的检查和验证,从而尽早发现分析和设计阶段的问题,检查出基于源代码测试无法发现的错误。

(3)可以尽早进行测试计划制定和测试用例生成的工作,使得测试过程与设计实现过程实现并行,从而提高开发效率。

(4)能够获得预期输出结果,这也是基于源代码的测试无法做到的。

(5)规格说明生成最终程序,并生成测试用例,因此测试与实现独立。

但是,黑盒测试的最主要问题是:

(1)系统需求和分析阶段的规格说明一般采取自然语言编写,形式化程度低,规范性差,内容涉及面广泛,难于给出一个系统化、自动化的测试方法,也难于判定测试的充分性和完整性。

(2)而己有的一些形式化规格说明语言,如z语言,虽然自身具有精确、简洁、无二义性等特点,由于形式化程度太高,对开发人员来说难以理解和掌握,因此也难以广泛应用。为此,寻找一种统一的、使用广泛而又相对形式化程度较高的规格说明描述语言,是功能测试急需解决的问题。目前,uml作为omg的标准建模语言,已被业界广泛采用,并有大量成熟的可视化建模工具用于从软件需求分析到设计实现部署的各阶段,从而在广泛性、形式化和自动化方面为问题的解决提供了一个契机。uml模型作为测试的热门方法,因为它具有强通用性、半形式化、强大的描述能力、可重用性、可迭代性、强大的管理能力等优势,使得测试信息的提取和自动化的进程变得更加容易。在此基础上,分析自动化测试的壁垒和uml模型的优势,本人提出了基于uml时序图的测试用例自动生成技术及系统实现:



技术实现要素:

1.uml时序图的解析器

通过可定制uml模型的papyrus插件工具,基于ocl约束和omg标准,得到将uml时序图转化为uml模型文件(xmi),按照一定的谓词逻辑将uml时序图表示为一个三元组,抽象为

sdg=<o,m,e>,其中:

o={object|object是sdg时序图中的对象}

m={message|message是消息},其中的消息内容为:[发生条件]消息名(参数列表){返回消息}

e={event|event是一条消息对应的事件},且e=m*{s,r}s,r分别表示消息的sent和receiver

由papyrus插件生成的.uml文档,按照上面的三元组原则进行抽取,得到消息集合、对象集合、事件关联这些因子。通过对消息中内容进行分割,再依据正则表达式对消息体进行过滤,得到前置条件和后置结果。通过解析消息中的前置条件、消息名称、后置约束等因子,可以更准确的定位当前结点的下一个节点,使测试的覆盖率和准确性大幅度提高。

2.测试路径自动生成算法(变异的深度遍历算法)

通过提取时序图中的对象,消息,约束,关系等因子,按照以下事件生成准则:

1.对象覆盖准则:对于任意类中的对象,必须满足对象和消息同属于一个类,确定满足该条件的消息路径的最小集合

2.消息覆盖准则:对于任意存在路径中的消息,确定满足该条件的消息路径的最小集合,得到便于处理的时序图中的所有事件。

3.逻辑路径覆盖准则:对于时序图中的分支消息均要进行遍历,对于循环消息按照路径覆盖进行处理,得出所有可能的逻辑路径,确保满足该条件的消息的集合。

变异的深度优先遍历算法:

1.如果图的非根结点没有孩子结点,就保存到路径中去,再将这个结点出栈。

2.在遍历过程中,遇到没有遍历过的子节点,需要先入栈,再寻找其父结点的下一个子结点。当没有子结点的时候,需要将最上面的元素出栈。

3.每次遇到没有孩子节点的时候,路径要做保存处理。

对比图的深度优先遍历算法,变异的深度优先遍历算法具有将开始结点和可能的终止结点中的路径保存的功能,而不仅仅局限于遍历图中的每一个结点。通过对于后置约束和前置条件的字符串是否关联(前一个结点和后面结点是否有前置条件包含后置约束的内容),可以判断测试路径中的下一结点,从而得到完整的测试路径。

附图说明

图1:描述了软件开发测试关联图

图2:uml时序图解析器流程图

图3:uml解析功能原理图

图4:uml时序图生成(papyrus软件构图)

图5:uml文件格式说明图

图6:测试消息提取图

图7:事件结点生成图

图8:测试路径生成图

具体实施方式

应用场景:第三方电子商务平台,用户首次登陆需要先以默认账户登陆,登陆成功后需要进行修改密码操作。该功能在推广之前需要进行严格的测试,上线之前需要进行自动化回归测试等。为了减轻手工测试的压力,采用该方法进行测试用例的自动编写,具体的实现流程见下列步骤:

1.uml时序图生成(papyrus软件构图)

说明:第三方金融软件提供对用户的接口,用户通过web浏览器访问网址后登陆并做修改密码操作,不同输入数据会导致不同的输入结果,测试用例要求覆盖尽可能多的可能性,通过uml时序图的设计可以覆盖最多的可能性。

2.uml文件格式说明图

图5截取自papyrus软件对uml模型构建生成的后缀为.uml格式的文件,uml时序图中结合ocl约束,按照一定的谓词逻辑通过对lifeline、message、fragement等因子提取可以得到uml模型中的元素。

3.测试消息提取图

图6源于银行用户进行登录和修改密码的场景,通过对uml模型中的元素的提取、抽象为消息对象。将消息中的数据进行分割得到消息节点中的前置约束、消息名称、后置约束三要素。

4.事件结点生成图

按照图7中得到的测试消息,结合发送者接受者可以得到uml时序图中的事件列表。分别按照从上大小进行排序,记为e1,e2,e3,e4,e5,e6,e7,e8,e9.

5.测试路径生成图

图8中得到的测试路径:

path1:e1->e2->e4

path2:e1->e3

path3:e1->e2->e5->e7

path4:e1->e2->e5->e6->e8->e9

path3:e1->e2->e5->e6->e8->e10

测试路径生成图中各步骤结点格式“事件代码”,这种组合可以给用户一种非常清晰的直观判断,便于通过生成的测试路径添加数据来编写测试脚本。

本发明通过解析消息中的前置条件、消息名称、后置约束等因子,可以更准确的定位当前结点的下一个节点,使测试的覆盖率和准确性大幅度提高。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1