刘国峰,孙玫肖,刘文韬
(中国铁道科学研究院电子计算技术研究所 , 北京100081)
铁路互联网退票模块是铁路客票互联网售票系统的主要组成部分,对用户而言,安全、可靠、方便是其推广应用的基础,因此,在该模块投入使用前,要进行全面测试,尽可能发现退票模块功能性的缺陷和不足,充分保证退票模块在实际应用中,为旅客提供准确、便捷和人性化的网上退票服务。互联网退票测试工作要站在旅客的角度上,充分考虑旅客在网上退票过程中可能产生的各种情形,全面测试退票模块的基本功能,最大限度地发现退票模块中的缺陷和不足。基于这样的测试需求,以及退票业务流程清晰的特点,采用场景法对互联网退票模块进行测试。
场景法是黑盒测试中应用比较广泛的测试方法,黑盒技术设计测试用例的方法主要有:等价类划分、边界值分析、因果图和场景法。在对流程性较强的互联网退票测试中,与其他几种主要方法相比,场景法有着不可比拟的优势。场景法能够站在用户角度上,将测试的过程按照事件流划分为不同的场景,更加清晰、全面地体现软件的设计思想和用户对于软件的体验,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。
应用软件大多是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可引入到软件测试中,可以比较生动地描绘出事件触发时的情景。
用例场景用来描述流经用例的路径,从用例开始到结束遍历这条路径上所有基本流和备选流。
图1 用例场景
图1中,经过用例的每条路径都用基本流和备选流来表示,基本流用黑色粗直线表示,是经过用例的最简单的路径,是完成某个操作必须要经过的步骤。各备选流如图1中所标注,一个备选流,可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中(如备选流 1 和 备选流3);也可能起源于另一个备选流(如备选流 2),或者终止用例而不再重新加入到某个流(如备选流 2和备选流 4)。根据图1中每个经过用例的路径,可以得到不同的用例场景。其中,基本流为一个场景,基本流与其他备选流的不同组合为其他场景。
根据定义,场景法的基本设计步骤为:
(1)根据软件设计说明书,画出用例图。(2)确定程序的基本流及各项备选流。(3)根据基本流和各项备选流生成不同的场景。(4)对每一个场景生成相应的测试用例。(5)对生成的测试用例进行复审,去掉多余的测试用例。测试用例确定后,对每一个测试用例确定测试数据值。
从上面场景法实施的步骤中不难看出,步骤1画出准确的用例图是场景法的基础,它将影响到对系统行为的分析,以及基本流和备选流的确定。由于用例图表意不够丰富,不能够细致、全面地描述系统行为。所以,需要一种新的系统表示方法代替用例图,以便全面、准确地描述系统的行为。
另外,传统场景法中生成测试矩阵的过程太过繁琐,占用了用例设计的很大一部分精力,淹没了场景法在分析系统活动方面的优势。
针对场景法存在的问题,提出以下改进方案,并将该方案用于互联网退票的测试。
采用活动图代替用例图来表现软件执行过程。与用例图相比,应用活动图的优势在于:
(1)活动图表示了活动可能发生的顺序,可以在活动图中方便地识别基本流和备选流。(2)基于活动图的测试方法是进行软件自动化测试的重要途径之一。
对于测试矩阵过于繁琐的问题,可以在测试场景生成后,基于测试矩阵中因素分析思想,应用生成用例的其他方法,分析所处场景的基本流和备选流,直接得到需要的测试用例。
互联网退票模块流程性强,使用场景法设计测试用例,可以使退票的整个流程在测试用例中得到清晰的体现。同时,对流程进行场景的划分,利于设计者抓住流程中的主要事件,继而挖出其中的测试点,使得测试用例覆盖面更加全面、广泛。
依据互联网售票退票模块的软件设计说明书,得出退票模块的活动图如图2。图2中,人与软件交互部分用动作状态框表示,其他状态用状态框表示。
图2 退票模块的活动图
确定测试流程中的基本流和备选流是应用场景法设计测试用例的关键。通过退票模块的活动图,容易得到基本流和备选流。
一般的,基本流是将程序从开始直接执行到结束,不出现任何差错的所有步骤按照程序执行的顺序排列出来而得到的。
如图2,按照图中控制流指示顺序,关注动作状态框中的相关动作,找到完成整个退票过程最简短的路径,即可得到退票模块的基本流为:登陆→选择“退票”→按订票日期查询→选择起始日期→选择结束日期→点击查询→选择“退票”按钮→确认退票→退票成功→返回退票界面。
备选流可以从图2中按照下面几个原则来确定:
(1) 转换(分叉)处,除去基本流之外的分支为备选流。(2) 判定框处,基本流之外的另一种判定(一般为否定的)为备选流。(3)基本流之外的动作状态框所在的分支为备选流。
由此,得到该模块中的5个备选流。如表1。
表1 互联网退票模块备选流
测试场景是在基本流的基础上,结合备选流的各种组合建立的。具体方法就是依照程序执行的流程,以基本流为主,遍历备选流,生成测试场景。将上面列出的备选流按照不同的顺序进行组合,可以发现会产生上百种组合形式,显然,这种场景爆炸的情形是必须要避免的。所以,备选流的组合方式需遵循一定的规则:
(1) 活动图中,不重叠、距离远的备选流不进行组合。(2)逻辑上,关联性小的备选流不进行组合。(3)一个备选流在一个场景中只需被执行一次。(4)对排列顺序可能会影响结果的备选流,进行排序组合。
例如:在活动图中,备选流A5,与A1和A2距离远、无重叠,不进行组合,与A3、A4关联性小,可以将组合产生的场景删除。按照如上的原则,产生的测试场景如表2。
表2 互联网退票模块测试场景
建立测试场景后,可以通过从确定执行用例场景所需的数据元素入手构建测试矩阵,然后根据测试矩阵生成测试用例。然而这种方法太过繁琐,我们可以针对每个测试场景,采用其他用例生成方法,直接产生测试用例。
根据测试矩阵思想,分析每个测试场景,找出导致场景发生的因素,将这些条件作为变量,考虑变量发生变化时,对结果的不同影响,生成测试用例。下面以场景1和场景10为例说明测试用例的生成过程。
场景1:该场景是只有基本流的情况。基本流中的变量就是在活动图中动作框中各种动作状态,如“选择起始日期”,选择的日期的情况包括:订票之前、订票当日和订票之后,考虑“选择结束日期”时,还应增加起始日期与结束日期相同的情况。考虑完所有可变的动作状态,即可得到场景1的测试用例。
场景10:该场景是备选流组合的情况,为避免测试用例的重复,主要考虑组合后备选流之间的相互影响。场景7、8、9中,已经验证了备选流A1、A2、A3两两组合,系统不同功能的实现。这个场景中,只选择其中一种输入情况,验证执行A3对A1和A2的查询功能是否有影响。
遍历每个场景,生成相应的测试用例,将所有用例合在一起,并赋给相应的数据,得到互联网退票模块的测试用例。
铁路互联网退票测试充分利用了场景法在设计测试用例方面的优势,并结合黑盒测试技术中的其他测试方法,对该模块进行了全面的测试,准确地发现了互联网退票模块功能的缺陷和不足,获得了很好的测试效果,为改进和完善退票模块提供了重要依据。
[1] 柳纯录,黄子河,陈渌萍. 软件评测师教程[M] . 北京:清华大学出版社,2005.
[2] 田建刚,史浩山. 一种基于UML活动图模型的系统测试方法[J] . 航空计算技术,2008,38(2).
[3] 李伟波,刘永祥,王庆春. 软件工程 [M] . 2版 武汉:武汉大学出版社,2010.