APP下载

迭代模式中基于可复用构件的自动化测试框架研究

2012-11-15张燕华贾永娜

中国测试 2012年5期
关键词:测试数据测试用例脚本

张燕华,贾永娜

(1.西藏民族学院信息工程学院,陕西 咸阳 712082;2.思特沃克软件技术(北京)有限公司,北京 100007)

0 引 言

迭代开发模式相对于传统的开放模式,具有可以控制项目风险、允许需求变动、保证项目开放进度等优点,使其在软件项目开发,尤其是商业软件项目开发中得到了广泛的应用[1]。目前虽然大规模的软件项目开发都采用迭代的开发模式来降低项目风险,但是还没有形成一套完整的关于迭代开发模式下自动化测试的理论和方法。为打破这种软件测试技术和理论落后于软件开发的现状,对迭代开发模式下的自动化测试技术的研究就非常有必要。

为降低测试脚本的维护开销,使自动化测试在迭代开发模式下更加有效,把构件复用技术、分离逻辑和实现等知识应用到软件的自动化测试框架设计之中,提出了迭代模式中基于可复用构件的自动化测试框架(automation test framework based on reused component in iterative model,AFRI)。AFRI借鉴了现有测试框架的优点,提出了更加适合迭代开发模式的测试流程和设计方法,吸收复用技术、分离逻辑和实现以及测试数据与测试脚本等思想,提高了测试框架的复用性、可维护性,降低了后期的开发和维护成本。

1 迭代模式中基于可复用构件的自动化测试框架设计

在迭代开发模式中,往往把整个项目分解为多个阶段性的小迭代。尤其是在需求变化快、工期紧的商业软件开发环境中,每次迭代之后,都要进行全面的测试[2-4]。所以,测试工作成为迭代开发项目整体质量和进度控制的关键点。测试工作的每个环节都要有很好的继承性和可复用性,而复用技术按照可复用的抽象程度,可以分为代码复用、设计的复用、分析的复用、测试信息的复用4个级别。

本文提出的可复用技术涉及测试过程中的许多环节,例如对测试用例和测试数据的复用,以及对自动化测试框架中测试脚本的复用,这都是为了与迭代开发模式的特性保持一致。

1.1 AFRI的系统结构分析

迭代模式中基于可复用构件的测试框架AFRI主要分为元素层、管理层、脚本层、集成层4层,其结构示意如图1所示。

图1 AFRI系统结构图

1.1.1 元素层

该层的主要作用是建立测试脚本和待测程序中界面元素之间的联系。通过把实际的界面元素抽象到元素层,可以使测试人员通过调用元素层中的对象,来操作待测程序中的界面元素,从而实现工作分工。如果开发和测试遵守统一的界面标准,则在每次迭代的过程中,软件开发和界面元素的提取工作可以同时进行。当待测程序界面有所改动时,只要改动元素层中被改动的界面元素对象就可以很快地适应新的需求。

1.1.2 管理层

管理层的作用是为元素层中的对象定义相应的操作接口,例如:对dropdownlist的点击,以及对其中item的选择动作;对文本编辑框的输入、粘贴、删除、全选等编辑动作。管理层的接口与元素层对象相互对应,每个元素都应该有自己的操作管理集合,但不一定是一对一的关系,要根据具体情况对管理层的操作接口进行分类,权衡每个管理集合的操作范围和种类。管理接口完成后,可在后期的测试工作中得到复用。由于每种界面元素的操作方式是一定的,即管理层提供的接口是固定的,脚本层中不同的测试脚本可能会操作同一个界面元素,这种重复的操作通过复用管理层中相应的操作接口即可完成。

1.1.3 脚本层

脚本层的作用是根据前期设计好的测试用例,完成对被测软件的功能和业务逻辑的验证。脚本层包括测试数据、场景测试脚本和测试结果验证脚本3部分。测试数据集合不但要提供测试脚本需要的输入数据,同时也要提供测试结果校验数据。一个场景测试脚本只是完成一个特定的测试场景。整个过程中,测试脚本从测试数据文件内,读取测试数据,然后调用管理层中操作相关界面元素的管理接口,完成测试用例所描述的操作序列,最后通过测试结果校验脚本对测试结果进行校验。

1.1.4 集成层

集成层的主要功能是根据不同测试阶段的测试目的集成不同的测试脚本。例如:冒烟测试,只需要从宏观上验证被测程序的基本功能,其对应的测试脚本集合相对较小,可设为{a1,a2,a3,a4,…,ak};而集成测试需要验证被测程序各个功能模块集成后的功能和性能,其测试脚本集合除了要包含每个模块的功能测试脚本外,还要包含验证各个模块之间接口的功能测试脚本,可以设为{a4,a5,a6,…ak,…an},且有 n>k,但同时,这两个测试集合都有共同的测试脚本集合{a4,a5,a6,…ak},所以不需要重复的开发测试脚本{a4,a5,a6,…ak},只需要根据不同的测试目的,从脚本层中选择需要的测试脚本组成测试脚本集合。由此可见,脚本层在后期的测试工作中也得到了复用。

1.2 AFRI的测试流程

测试的实施过程要从需求说明书开始[5]。根据需求说明书设计软件功能说明,然后制定测试计划、设计测试用例、开发测试脚本,最后进行集中测试和缺陷管理。在迭代开发模式中,测试工作也是迭代进行的。基于AFRI系统进行测试的流程如图2所示。

图2 基于AFRI的测试流程图

1.3 迭代中测试用例的生成算法

迭代开发过程中,软件的功能说明和用户需求,随着每次的迭代而逐渐完善和增加,而在迭代比较频繁的开发中,需求的变动也是经常的;所以,测试用例的可复用性也至关重要[6-7]。本文针对迭代开发中以功能界面为基础的特点,提出了以被测软件界面元素为基本单位,基于UML顺序图模型的测试用例生成方法。该方法不但能够在每次的迭代中复用前期迭代中产生的界面组件,还可以复用该界面组件对应的测试数据。

在顺序图中,场景被定义为在相互交互的对象间传递的一个消息序列[8],每个消息序列代表用例的一个可能的事件流。在顺序图中可以详细地说明前置条件和后置条件,以及一个消息序列涉及到的参数,如界面元素,而这些参数序列又可以产生一个或多个描述测试场景的有向无环图。例如,一个成绩录入系统中,老师登陆系统,并更改某个学生成绩的操作序列,可以用如图3所示的UML顺序图表示。

图3 更改成绩操作顺序图

基于UML顺序图生成测试用例的过程包括:按照功能说明画出完整的顺序图(包括前置条件、后置条件、约束条件、消息序列,以及参数等信息),根据顺序图中的信息得到所有测试场景有向无环图(尤其是每个消息序列中,每个参数所对应的测试数据),采用两因素组合覆盖的方式遍历整个测试场景有向无环图,最后生成测试用例。由图3的部分操作信息所生成的测试场景有向无环图如图4所示。

图4主要描述了图3中的login和search事件所生成的测试场景的有向无环图,主要验证login和search的功能点。对于change和browse事件的测试场景生成方法是完全相同的。图中节点分为4类:1,0,-1,-2,分别对应该层界面元素可以选取的 4种测试数据集合,其中只有1代表有效的测试数据。树的每一层都描述了一个界面元素所对应的测试数据,而对于按钮节点,只有在前面的输入信息组件中输入有效的数据才可以通过,其他无效的输入都不会通过按钮节点到达下一层。例如,对于password层,只有有效数据1连接到下一层,而无效数据-1和空值0都不可能成功登陆,所以没有一条连到下层的线段。这样,就可以过滤掉无效输入数据所产生的组合序列,从而大大减少测试用例集合中有效测试用例的数量。

图4 相应测试场景的有向无环图

2 基于AFRI进行测试的收益分析

以某软件公司的软件M为测试对象,验证了AFRI的可行性。采用Douglas Hoffman所提出的自动化收益分析方法,充分考虑到了除了测试工作之外的其他额外花销。

式中:ΔBa——自动化测试相对于手工测试的额外回报。

ΔCa——自动化测试相对于手工测试的额外支出。

使用AFRI系统进行自动化测试的收益情况,可以通过图5直观地表示。

从图5中可以看出,使用AFRI系统进行自动化测试在第一次发布时,收益为0.7712,入不敷出,还没有收益;但在后面的迭代过程中,自动化测试表现出了较好的效益,而且随着自动化测试复用次数的增加,效益逐渐增加,并趋于平缓。这说明使用AFRI系统进行自动化测试,可以在后期的迭代中得到更高的收益,尤其是测试构件复用率高、功能需求变动较少的情况。但在测试脚本变的庞大时,收益的增长幅度就变小了,这是由后期的测试脚本维护量变大、自动化测试固定支出增多等原因造成的。框架设计开发活动是一个迭代的、逐步递增的过程,好的框架一般是多次迭代及辛苦努力的结晶。要得到更好的收益,需要根据具体的测试环境进行多次的迭代开发和改进。

图5 基于AFRI的自动化测试收益分析图

3 结束语

AFRI为自动化测试提供了一个有效框架,尤其是对迭代开发模式中的自动化测试工作具有较强的理论价值和实际意义。通过测试过程中得到的实际测试数据,使用目前成熟的自动化测试收益分析方法,证明了迭代开发模式中AFRI系统进行自动化测试收到了很好的效益,可以达到一次开发、长期收益的效果。

[1]Paul C J.软件测试[M].北京:机械工业出版社,2003.

[2]朱菊,王志坚,杨雪.基于数据驱动的软件自动化测试框架[J].计算机技术与发展,2006,16(5):68-70.

[3]古乐,史九林.软件测试技术概论[M].北京:清华大学出版社,2004:216-217.

[4]Chen J J, Subramaniam S, GUI A.Environment to manipulate FSMs for testing GUI-based applications in java [C]∥Proceedings of the 34th Hawaii International Conference on System Sciences,2001:1-10.

[5]Burnstein I,Suwanasart T,Carlson C.Developing a testing maturity model:Part I[J].Journal of Defense Software Engineering,1996,9(8):21-24.

[6]Kuhn D R,Reilly M J.An investigation of the applicability of design of experiments to software testing[C]∥Proceedings of the 27th Annual NASA Goddard/IEEE Software Engineering Workshop,2003:4-6.

[7]黄雨田,聂丽琴,段富,等.用例需求分析技术的应用[J].太原理工大学学报,2005,36(2):224-227.

[8]飞思科技产品研发中心.实用软件测试方法与应用[M].北京:电子工业出版社,2003.

猜你喜欢

测试数据测试用例脚本
酒驾
回归测试中测试用例优化技术研究与探索
安奇奇与小cool 龙(第二回)
基于SmartUnit的安全通信系统单元测试用例自动生成
测试数据管理系统设计与实现
自动推送与网站匹配的脚本
基于自适应粒子群优化算法的测试数据扩增方法
空间co-location挖掘模式在学生体能测试数据中的应用
基于依赖结构的测试用例优先级技术
影响《标准》测试数据真实性的因素及破解策略