预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于交互路径的构件组装测试方法研究模型组合论文导读::构件组装测试常常通过组合构件模型来实现,容易产生状态空间的爆炸,且生成用例会重复单元测试的一些工作。针对此问题,本文提出的通过生成交互路径来进行构件组装测试的方法,可以更有效的生成组装测试用例并能够避免模型组合时状态空间爆炸的问题。首先对单个构件的运行路径进行了分析,然后介绍了生成交互路径的过程与算法。实例分析证明,该方法拥有较好揭错能力,计算量小且具有通用性,更有利于节省系统开发的费用和时间。论文关键词:构件测试,组装测试,交互路径,模型组合1引言基于构件的软件开发技术(Component-BasedSoftwareDevelopment,CBSD)是通过复用构件库中的构件,利用组装技术构造应用软件系统的过程。其中构件组装是CBSD的核心技术,相应的组装测试成为了保证系统质量的关键因素。组装测试的目的是验证各构件组合在一起后可以按照设定的方式协作运行,而且不同构件之间数据的传递满足系统的要求,它所测试的内容主要是构件接口间的交互操作和组装后的整体功能。对构件组装测试的研究由来已久,目前仍得到广泛的关注[1]。单元测试仅仅保证了模块的局部正确性,实践表明大多数的缺陷在不同构件的交互处产生[2],这就需要在集成测试时更彻底和全面的测试构件之间的交互。目前的研究中,组装测试多是借助构件模型的组合来实现。如在[3]中作者用“构件状态机”来描述单个构件的行为,再根据构件之间的关系确定组装后的“构件软件流图”,以此为基础来生成测试用例;在[4]中用CIG(componentinteractiongraph)表示不同构件的交互和依赖关系,再根据CIG生成相应的测试用例。此类研究多是从总体上分析系统的行为,通过某种形式的模型组合确定构件之间的交互关系。这样带来的主要问题是当包含较多状态的模型进行组合时,容易产生状态空间爆炸的问题,而且要求测试人员熟悉不同模型的相关知识,要求较高[5]。2基本概念描述构件动态行为的模型有很多,如UML状态机、时序逻辑和Petri网等。接口自动机(InterfaceAutomata)是一种在构件化设计中用来刻画接口时序特征的形式化语言,它采用“乐观方法”来定义组合问题,将环境假设和构件行为整合到同一个模型中,非常适合描述开放系统中的构件行为。因此,我们使用接口自动机来描述构件的动态行为。定义1(接口自动机):接口自动机是一个六元组:,l是状态的有穷集合;l是初始状态集,且中至多包含一个元素;l分别为输入活动。输出活动和内部活动集合,且两两互不相交。所有活动的集合记为,;l是迁移的集合,将记为。若有(其中,),则称活动在状态上是使能的(enabled)。状态上使能的输入活动的集合记为:{|,}。类似有和。若||=1,且,,则有,称是确定性的;若,,其中,则称为强连通的,本文假定研究所涉及的接口自动机都是确定性的。定义2(执行片段):接口自动机的一个执行片段是其状态与活动交替排列的有穷序列。任给两个状态,若存在一个执行片段,其第一个状态为最后一个状态为,则称从可达。定义3(可组合):两个接口自动机和若满足条件:,,且,则称它们是可组合的。令。本文假定构件组装在一起后不会产生死锁和非法状态等情况,即在设计阶段已验证了所选择构件的可组装性,在组装阶段只考虑如何将构件组装在一起和相应的测试工作。3CT-on-IP方法假定构件都已通过单元测试,通过分析构件匹配的接口操作,可以确定组装后构件之间的交互路径,由此可以在不进行模型组合的情况下生成组装测试用例。3.1构件运行序列本节先给出几个相关定义,设为构件的接口自动机模型。定义4(运行):对于中的任意执行片段:,其中:模型组合,,,若或则称为中的运行。为简化说明,本文中只考虑的情况。定义5(简单环):对于P中的任意执行片段,如果满足:(1)且;(2),则称为简单环,其集合用表示。简单环中不包括初始状态且除了头状态与尾状态相同外,不能再有相同的状态出现。定义6(简单运行):为的运行,若对于中的任意两个执行片段,若有,则称为简单运行,的简单运行集合用表示。由定义可知,在一次简单运行中不能出现相同简单环。如在图1的构件User中,(a,start?,b,msg!,c,ok?,a)是一次运行也是简单运行,而(b,msg!,c,fail?,b)是一个简单环。与一般意义上的简单回路不同,简单运行中的状态和活动可以重复出现,但环路不能相同。参照图的深度优先遍历算法,我们给出了简单运行序列的生成算法。首先从初始状态开始查找一个简单运行序列,将此序列作为当前序列;从中不等于初始状态的最后一个状态开始,寻找可构成与原序列不同的另一个简单运行;若找不到则去掉一个最后状态,继续寻找;若找到,则以新的序列为当前序列,重复上述过程,直到全部简单运行都