基于UML顺序图的场景测试用例生成方法

发表于:2007-06-01来源:作者:点击数:

引言 本文提出了一个基于 UML 模型图来测试场景的方法,它以顺序图为主要测试模型,结合类图和状态图导出所有的场景,并将与场景相关的环境条件与方法序列、输入、输出合理组合作为覆盖该场景的 测试用例 。我们的工作具有两方面的优点: 测试方法 完全基于U

引言

本文提出了一个基于

1、实例

本文以DHCP[2]作为一个实例,使用UML的类图、状态图和顺序图[3]来说明我们提出的一个场景测试用例生成方法。DHCP是由IETF进行标准化的一个协议,提供一种动态指定IP地址和配置参数的机制。我们选取了DHCP协议的一个子集,协议的一般过程如下:

1.客户端广播一个DHCP_DISCOVER消息。

2.每个具有

3.如果客户端接收到一个或多个DHCP_OFFER消息,则选择其中一个,然后广播一条DHCP_REQUEST消息给所有的

4.所有服务器接收到客户的广播信息,只有被选中的服务器才绑定地址给这个客户,并发送确认消息DHCP_ACK,连接成功;如果要求的地址不可得(可能分配给其它用户),则服务器发送一个DHCP_NAK给客户,连接失败。

图1显示了DHCP协议的部分类图。

javascript:return big(this)" src="http://www.uml.org.cn/Test/images/1539040.jpg" οnlοad="javascript:if(this.width>498)this.style.width=498;">

图1:DHCP的部分类图

图2是实例中请求IP的顺序图。

图2:请求IP的顺序图

图3是DHCP中Server类的状态图。

图3:DHCP-Server状态图

2、

为了能在测试中找出所有的场景,下面给出顺序图的形式化定义:

定义1(顺序图)顺序图SD可以表示为一个六元组:SD=,其中:

◆O={O1, O2, …,Om},是对象的集合。O1, O2, …,Om都是顺序图中的对象。

◆M guard´message´name´parameter_list,是消息的集合。顺序图中的每一个消息都形如:“[卫士条件]消息名(参数)”。

◆E=M {s, r},是事件集合。事件是指消息的发送和接收。对于消息msg,发送事件用表示,接收事件用表示。顺序图中所有发送消息事件的集合记为S,所有接收消息事件的集合记为R。S?R=?, SèR=E。

◆→是消息集合M上的一个全序关系,表示顺序图中的消息在纵向时间轴上的先后关系。

◆msg是从E到M的一个函数关系,msg(e) M表示事件e所对应的消息。

◆Obj是从E到O的一个函数关系,obj(e) O表示时间e所对应的对象。对象Oi上所有事件的集合记为Ei,Ei={e | e EÙobj(e)= Oi }。

在如图4所示的顺序图中:

O={obj1,obj2,obj3}; M={m1,m2,m3};

E={(m1,s),(m1,r),(m2,s),(m2,r),(m3,s),(m3,r)};

→=m1→m2→m3.

图4:一个简单的顺序图

顺序图主要描述了对象间发送消息的时间顺序。我们用符号‘<

1.对同一消息而言,发送事件先于接收事件。

2.在同一对象的生命线上,若事件e1出现在发送事件e2的上方,则e1先于e2。

3.在同一个对象的生命线上,如果接收事件e1出现在e2的上方,并且它们分别对应的发送事件也位于同一个对象的生命线上,则e1先于e2。

‘<

一个简单顺序图(不包括分支)刻画了系统运行的一个场景,其运行过程表现为一个事件的序列(e1 , e2,…, em),其中事件ei+1 在事件 ei后发生(1≤ i ≤m-1)。由于事件之间存在强制顺序关系‘<

通过遍历所得的DAG图,可以很容易的得到顺序图中的每一个有效的事件序列。在图4的例子中,和就是两个有效的事件序列。

定义2(顺序图的场景)对于顺序图SD=,场景定义为一个消息序列< M1,M2,…,Mm>,并且满足下面两个条件:

(1)所有M中的事件在序列中出现且仅出现一次,也就是说{M1,M2,…,Mm}=M且对于所有的i j,Mi Mj。

(2)对于任意两个消息序列Mi,Mj?M,如果(Mi,s)<

根据场景的定义,通过所找到的合法的事件序列就可以确定与该事件序列相应的场景。如图4,就是一个有效的场景。

3、基于UML顺序图生成场景测试用例的方法

顺序图中的场景设计可能与实现不一致,例如由于消息名的编码错误、不正确的或缺少输出等,那么通过执行顺序图中的所有可能场景,至少能在其中的一个场景的执行过程中达到该错误,因此只要从顺序图中生成覆盖所有场景的测试用例就能有效地找出存在的错误。在测试用例的生成过程中,我们将环境条件与输入,方法调用序列和预期输出作为最终的测试用例,最后将

3.1、测试衡量方法

测试的主要评测方法包括覆盖和

1) 顺序图中的每个场景至少被测试一次。

2) 如果顺序图中的对象存在状态图,那么与场景相关的每个状态至少要被测试一次。

3.2、顺序图场景测试用例生成方法的步骤

第一步,检查顺序图中的每一个对象,如果其存在状态图,就将对象状态加入到顺序图中。以DHCP-Server对象为例,其状态图如图3所示,Has free IP addresses和Has no free IP addresses是Server可能处于的两种状态,我们将这两个状态加入顺序图,加入状态信息后的最终结果如图5所示。

图5:加入状态信息后的顺序图

第二步,使用第3节介绍的方法通过遍历顺序图中的事件序列从而找出所有的场景。在图5中,消息4和消息7、消息10和消息12分别构成了分支,处理分支时,可以为顺序图构造多个DAG图,每个图包含其中一条分支。这样就将复杂顺序图化简成多个简单的顺序图来进行处理,遍历每个DAG图就可以得到所有场景。图5中,得到3个场景如下:

A: 1, 2, 3, 4, 5

B: 1, 2, 3, 6, 7, 8, 9, 10

C: 1, 2, 3, 6, 7, 8, 11, 12

第三步,选定一个场景,根据其消息序列在顺序图中遍历该场景,记录场景的输入和最终输出。以场景B为例:

输入:用户调用connect操作。

预期输出:返回“nak”消息,表示申请IP不成功。

第四步,确定每个场景的环境条件。首先从顺序图中找出所有的测试单元,在顺序图中,每一个交互的对象就是一个测试单元。本例中的DHCP_Client和DHCP_Server就是两个测试单元;其次对每一个测试单元,从类图中导出相应的环境设置(包括对象属性、操作和消息中的参数)。结果如表1所示。

表1:DHCP的测试单元与环境

测试单元

DHCP-Server

DHCP-Client

环境设置

Offer:Boolean

hasFreeIP:Boolean

找出环境设置之后,再为每一个场景找出相应的选择,从而确定其环境条件,如场景B中,Offer=true,hasFreeIP =false。

第五步,测试用例生成 一个测试用例包括4个部分:环境条件、输入、方法调用序列、预期输出。对于场景B,所有这些信息已从前面的四步中生成,只要将它们组合在一起就可以了。场景B的测试用例为:

环境条件:DHCP-Server:offer=true,hasFreeIP=false

输入:用户调用connect操作。

方法调用序列:

Client.discover, Server.isServeroffer,

Client.request, Server.hasFreeIP,

Server.nak, user.notConnected

预期输出:返回”nak”消息,表示申请IP不成功。

在这个测试用例中,方法调用序列就是该场景中的消息序列。

可用同样的方法为所有场景生成测试用例。

4、结束语

文[4]出现了一个基于UML顺序图设计的

本文提出的基于UML顺序图生成场景测试用例的方法,包括找出场景和生成测试用例,改进了这类方法生成测试用例数多、工作量大的缺点,减少了测试用例的重复生成。

参考文献

[1]UML Specification 1.5,http://www.omg.org/uml

[2]R.Droms. Dynamic Host Configuration Protocol (DHCP),http://www.ietf.org/rfc/rfc2131.txt. March 1997

[3]Hans-Erik Eriksson著,余安萍等译,UML 2工具箱,电子工业出版社,2004

[4]Fraiki F, Leonhardt T, SeDiTec. Testing Based on Sequence Diagrams.In:the 17 IEEE Int1.Conf.on Automated Software Engineering (ASE’02) Sep.2002.261267

[5]黄陇,于洪敏,陈致明,多态性在UML顺序图测试场景生成中的影响及对策,计算机工程与设计,2005

[6]江泽凡 王林章等,基于UML顺序图的测试方法,计算机科学,2004

软件测试顺序图写测试用例,基于UML顺序图的场景测试用例生成方法相关推荐

  1. UML顺序图/序列图/时序图

    UML顺序图/序列图/时序图 UML时序图 什么是顺序图 基本元素 参与者 对象 生命线 激活框 消息 绘制工具 visio 亿图 UML时序图 什么是顺序图 为了实现系统功能,若干个对象之间需要交互 ...

  2. 实例介绍UML顺序图使用

    UML顺序图你是否熟悉,本文向大家简单介绍一下,顺序图表示了随时间安排的一系列消息.每个分类角色显示为一条生命线,代表整个交互期间上的角色. UML顺序图和协作图均显示了交互,但它们强调了不同的方面. ...

  3. 自动售货机 顺序图_饮料销售机UML顺序图

    饮料销售机 UML 顺序图文档 引言 本文档为饮料销售机设计过程中的 UML 顺序图文档,编写成员为开发成员,目的是为 了方便后续的开发更顺利并且便利的开展, 了解系统功能顺序, 对系统有一个更加直观 ...

  4. UML顺序图和通信图

    转自:http://blog.csdn.net/q547550831/article/details/50525673 UML顺序图和通信图 基本概述 当流程涉及到多个角色,并且通过多对角色交互展开时 ...

  5. UML顺序图(sequence diagram)

    顺序图用于表达实体之间的动态调用顺序,例如对于骰子游戏这个需求,对应的顺序图如下所示: 注意上面的顺序图中只表达出了骰子游戏的正常逻辑,没有表达异常逻辑.这也是顺序图的主要用法,顺序图一般只用来表达实 ...

  6. UML 顺序图(时序图) sequence diagram

    1. 什么是顺序图 是强调消息时间顺序的交互图.时序图描述类系统中类和类之间的交互,它将这些交互建模成消息交换.时序图是一个模型,用于描述对象间如何随着时间在某些行为方面进行协作.(强调的是消息的时间 ...

  7. catia制作物料明细_一种基于CATIA的国标标准物料清单的生成方法与流程

    本发明涉及一种物料清单的生成方法,尤其涉及一种基于CATIA的国标标准物料清单的生成方法. 背景技术: 众所周知,CATIA是法国达索公司的产品开发旗舰解决方案.作为PLM协同解决方案的一个重要组成部 ...

  8. uml通信图画法_UML 交互图 (顺序图、通信图、鲁棒图、定时图)

    交互与交互图 交互的概念 一次交互就是指在特定语境中,为了实现某一个目标,而在一组对象之间进行交换的一组消息所表示的行为 消息 UML中的4种交互图 顺序图:顺序图是一种强调消息时间顺序的交互图,为读 ...

  9. UML——顺序图、协作图

    一.顺序图 是做什么的? 描述按照时间的先后顺序对象之间交互动作过程 顺序图的构成 对象 消息:是对象之间的通信,可以是信号或者操作调用 生命线(激活):表示在某段时间内对象是存在的 同步 绘制两个对 ...

最新文章

  1. Spring3 @ResponseBody注解引起头部Accept-Charset过大
  2. 【c++】映射表std::map
  3. Node中Exports与module.export的使用与区别
  4. 什么是光纤转换器?光纤转换器转换类别介绍
  5. Stateflow_状态动作与转移动作
  6. 软硬负载之间的对比及优缺点
  7. ftp java 关闭连接超时_关于FTP连接超时的解决办法
  8. ssm基于java的线上阅读平台的设计与实现毕业设计源码291023
  9. Mac环境安装Win虚拟机
  10. Oracle 数据库(一)—— Oracle 数据库基本介绍
  11. 什么是熔断、降级、限流
  12. IEEE帐号的创建和ORCid
  13. 当前安装包签名出现异常_关于部分华为手机安装游戏提示“签名异常”问题说明...
  14. ChinaJoy现场展示
  15. vue、Dropdown 下拉菜单、Dropdown属性事件、vue Dropdown 全部下拉菜单、vue Dropdown 全部属性事件
  16. C语言几个申请地址空间的函数
  17. VS2013下载资源 通过cmd在Windows合并iso镜像
  18. 通孔的作用是什么linux,什么是通孔回流焊?有什么优点?
  19. redmine docker部署
  20. UE4 Nav导航路线选择设置

热门文章

  1. Webrtc Intro - Kalman Filter of Remb
  2. 存储系统 —— Cache(高速缓冲存储器)
  3. 软件测试面试(一自我介绍)
  4. 华为手机能隐藏蓝牙吗_一张图教你玩转华为手机图库 原来还隐藏了多重智慧...
  5. Vue scoped属性的作用
  6. IE下或360兼容模式只有打开F12,js才能执行,关闭则执行失败
  7. Go语言字符串高效拼接
  8. freemarker三元运算
  9. 计算机读不到u盘如何修复u盘,u盘读不出来怎么修复?你有没有尝试过这个办法...
  10. 华为云调用feign接口时出现java.io.IOException: too many bytes written