基于场景的形式化测试模型生成方法
2011-01-31缪淮扣
黄 龙, 缪淮扣, 王 皙, 郭 亮
(1.上海大学计算机工程与科学学院,上海200072;2.上海市软件评测重点实验室,上海201112)
测试是提高软件可靠性的重要方法,而基于模型的测试是一种高效的测试方法.统一建模语言(unified modeling language,UML)以其操作简单、易懂和易用的特点,在Web应用开发的建模中得到了广泛的应用.虽然现在有很多从UML模型直接生成的测试用例的方法,但由于其半形式化的特点,使得UML模型很难直接用于基于模型的自动测试.
有限状态机(finite state machine,FSM)是一个重要的建模工具,可为软件设计人员提供一种便利的对软件功能建模的方法.FSM具有成熟的理论基础,它利用形式语言和自动机理论来设计和分析模型.目前,已有一些使用FSM建模Web应用的研究[1-3].而基于场景的测试能够清晰明确地验证用户需求,提高测试的效率与质量,具有广泛的应用前景.
UML是一种面向对象的标准建模语言,已广泛应用于Web应用建模等领域.从测试用例生成的角度出发,FSM利用其自身的特点在软件建模、测试和验证中得到了广泛的应用.UML在产生测试用例方面已有很多成熟的理论和方法.文献[4]利用时间扩展UML状态图的语义,介绍了时间扩展UML状态图的混合时间Petri网模型的构造方法、混合时间Petri网模型测试用例生成方法.文献[5]给出了顺序图的形式化定义,并将其用于对类图以及状态图一致性的核对,但未将顺序图用于生成形式化测试模型的研究.文献[6]从UML2.0顺序图中得到与其对应的消息流通图,并通过遍历该图得到相应的测试序列.虽然这些方法可以从UML模型中直接产生测试用例,但是由于没有形式化推理工具的理论引导,因此,不能提供模型验证,缺乏严格的理论推导和证明.
本工作在已有研究[7]的基础上,研究了如何使用UML顺序图表示场景,并利用场景来规约使用FSM表示的系统行为模型,从而得到基于场景的形式化测试模型.
1 FSM和场景
1.1 FSM
有限状态机(FSM)M通常是一个5元组,M= (Q,Σ,δ,q0,F),其中Q={q0,q1,…,qn}表示非空的有限状态集,在任一确定的时刻,FSM只能处于一个确定的状态qi(0≤i≤n);Σ={σ1,σ2,…,σm}表示非空的有限输入符号集,在任一确定的时刻,FSM只能接收一个确定的输入σj(1≤j≤m);δ:Q× Σ→Q为状态迁移函数.如果在某一确定的时刻,FSM处于某一个状态qi∈Q,并接收一个输入的字符σj∈Σ,那么,下一时刻将处于一个确定的状态qj=δ(qi,σj)∈Q;q0∈Q为初始状态,FSM由此状态开始接收输入;F∈Q为终止状态集合,在达到终态后,FSM不再接收输入.
1.2 场景
所谓场景(scenario),就是描述系统中各相关构件之间如何进行交互,以完成操作的某一个系统功能[8].本工作使用UML顺序图来表示场景.
UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言.顺序图(sequence diagram)是强调消息的时间次序的交互图,顺序图展示了一组角色和扮演这些角色的实例发送和接收的消息.
图1为一个简单的UML顺序图,由3个对象和3条同步消息组成.顺序图着重反映的是一组消息发生的时间的先后次序,其中消息“M1*”中的符号“*”表示该条消息可以重复进行多次(如可以模拟用户输入信息的操作),而消息“#”表示该条消息是紧接上一条消息自动进行的内部迁移操作(如用户点击另一页面的链接时,由当前页面进行的跳转).
图1 UML顺序图Fig.1 UML sequence diagram
2 投影
2.1 定义
本工作所定义的投影操作,是在描述系统状态变化的FSM上,根据由顺序图表示的场景进行遍历得到约简后的FSM,该FSM只包括场景中所涉及的对象间的迁移.
投影的具体过程如下:①从顺序图中得到对象间进行通信的消息序列;②把得到的消息序列和描述系统状态变化的FSM中的迁移集合进行交运算;③输出只包含进行求交运算得到的迁移集合的子FSM,以达到对系统FSM约简的目的.
2.2 实例分析
本工作通过使用一个网站的邮箱服务来说明如何利用本方法得到基于场景的形式化测试模型.用户通过点击一个网站主页中的邮箱服务,进入登录界面后输入用户信息,并在确认信息后进入个人邮箱进行后续操作.
图2所示的邮箱服务功能包括从网站主页选择链接到邮箱登录界面,输入用户信息点击Submit,在信息得到确认后进入个人邮箱界面,或者点击Cancel退出到登录界面.在进入个人邮箱界面后,可选择进入收件箱等界面进行操作(模型在此省略后续操作).最后点击Logout退出到登录页面.
图2 邮箱服务系统的FSMFig.2 FSM of E-mail service system
图3为模拟用户登录邮箱后不进行其他操作直接退出邮箱的场景.
图3 模拟用户操作的场景Fig.3 Scenario imitating user’s operation
图4为使用图2所示的场景和图3所示的系统FSM进行投影操作后,得到的基于场景的FSM,所生成的测试模型可以用于后期自动产生测试用例.
3 实现方法
首先,使用UML状态图对系统行为进行建模,并根据文献[7](主要针对非正交的UML状态图)中的方法进行形式化转换工作;然后,使用UML顺序图对场景进行建模;最后,通过对系统行为的FSM和场景进行投影操作,得到基于场景的形式化测试模型(见图5).
图4 投影操作后的FSMFig.4 FSM after projection operation
图5 形式化测试模型的生成Fig.5 Generation of formal testing model
本工作采用可扩展标记语言(extensible markup language,XML)文本格式来存储UML模型,用状态图扩展标记语言(state chart XML,SCXML)文本格式来存储FSM模型.
3.1 UML模型的文本表示
元数据交换(XML-based matadata intercharge,XMI)使用XML的语法,是为程序员和其他用户提供元数据信息交换的标准方法.XMI产生的目的在于帮助使用UML以及不同语言和开发工具的程序员彼此交换数据模型,规范了如何从UML模型生成XML文档,实现二者之间的无缝装换.XMI元素与UML模型的对应关系如表1所示.
表1 UML和XMI元素对应表Table 1 Corresponding elements of UML and XMI
3.2 FSM文本表示
SCXML给出了FSM模型的XML文本表示,它是基于呼叫控制扩展标记语言(call control XML,CCXML)和Harel State Tables的执行环境.SCXML提供了通用状态机的描述方法,并且可以定义和处理复杂的概念,例如层次性,因此,本工作选用SCXML作为FSM的文本表示方式.SCXML元素与FSM模型的对应关系如表2所示.
表2 FSM和SCXML元素对应表Table 2 Corresponding elements of FSM and SCXML
表1和表2是UML模型到FSM模型转换的基础,模型能通过文本的形式得到很好的表达,为后面模型之间的转换做好准备.
3.3 算法
模型的生成过程按照以下几个步骤进行:
(1)使用开源工具ArgoumUML对系统状态变化以及场景进行建模,然后导出并保存为XMI格式的文本;
(2)使用已有的方法[7]形式化系统行为状态图,并保存为SCXML格式的文本;
(3)导入使用XMI格式存储的场景;
(4)解析导入的场景,输出消息序列,并保存在程序内存中;
(5)导入使用SCXML格式表示系统状态变化的FSM;
(6)对系统FSM和消息序列进行投影操作,输出投影后的结果,使用SCXML格式进行保存.
上述过程包括了对表示UML模型的XMI文本的载入和解析.由于XMI是一种XML语言,层次的查找和分析成为工具原型主要的功能模块,通过调用dom4j的API来查找Node以实现解析的目标,解析过程分别如图6和图7所示.
图6 载入XMI文档界面Fig.6 Loading XMI
图7 解析后的SCXML文档界面Fig.7 Result of resolution in the form of SCXML
4 结束语
本工作提出了生成基于场景的形式化测试模型的方法,采用XMI作为UML模型的文本表示语言,采用SCXML作为FSM模型的文本表示语言,通过投影操作完成对系统行为模型的约简,并得到基于场景的精简的测试模型.下一步的工作是研究场景本身应具备的一些性质,使得所生成的测试模型具有完备、冗余少的优点,并对所得到的测试模型进行可视化研究.
[1] CHOWT.Testing software designs modeled by finite-state machines [J]. IEEE Transactions on Software Engineering,1978,SE-4(3):178-187.
[2] OFFUTTJ,LIUS Y,ABDURAZIKA,et al.Generating test data from state-based specifications[J].Software Testing,Verification&Reliability,2003,13(1):25-53.
[3] ANDREWSA,OFFUTTJ,ALEXANDERR.Testing web applications by modeling with FSMs[J].Software Systems and Modeling,2005,4(3):326-345.
[4] 唐波,廖伟志.统一建模语言状态图的测试用例生成方法[J].计算机仿真,2007,24(8):90-92.
[5] LIX S,LIUZ M,HEJ F.A formal semantics of UML sequence diagram [C]∥ Proceedings of the 2004 Australian Software Engineering Conference.2004:168-177.
[6] SAMUELP,JOSEPHA T.Test sequence generation from UML sequence diagrams[C]∥ Ninth ACIS International Conference on Software Engineering, Artificial Intelligence, Networking, and Parallel/Distributed Computing.2008:879-887.
[7] 郭亮,缪淮扣,王皙,等.UML模型到FSM模型的转换[J].计算机科学,2009(7):113-116,149.
[8] 胡军,于笑丰,张岩,等.基于场景规约的构件式系统设计分析与验证[J].计算机学报,2006,29(4):513-525.