



   (1)理解场景法的原理。
(2)能够使用场景法进行测试用例设计。
(3)能够在真实项目中灵活运用场景法。
需求 :某旅馆住宿系统支持房间网上预订业务。游客访问网站,进行网上房间预订操作,选择合适的房间后,进行在线预订。此时,游客需要使用个人账号登录系统,登录成功后,进行定金支付(定金金额为1天的房款)。支付成功后,生成房间预订单,完成房间预订流程。
基于上述需求,如何进行测试呢?分析房间预订的完整流程,首先可提取流程中所有单个功能点(或单个事件),如图7.1所示,包括访问网站、选择房间、使用个人账号登录网站、支付定金、生成预订订单等。
    图7.1 旅馆住宿系统网上房间预订流程中的单个功能点
读者已知晓,针对提取出的单个功能点的测试,往往可采用等价类划分法或边界值分析法等针对相应系统界面设计测试,并充分思考可测试点进行测试执行即可。
值得提醒的是,除了单个功能点需要充分测试外,由多个单个功能点组合而构成的整体业务流程的测试同样不容忽视。就目前来讲,系统大多是由事件来触发控制流程的,每个事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果形成了不同的事件流。场景法作为黑盒测试用例设计的重要方法之一,可将上述一系列的过程清晰地进行描述。
注意 :
①初级测试人员在测试过程中往往更重视单个功能点的细节测试,而容易忽视整体业务流程的检测。长此以往,容易导致测试工作与实际业务脱节,因此再次强调细节与整体同等重要。
②事件流即一个事件及其所引发的后续处理。
探讨场景法之前,首先要弄清楚什么是场景。场景可理解为由哪些人、什么时间、什么地点、做什么以及如何做等要素组成的一系列相关活动,且场景中的活动还可以由一系列场景组成。
充分理解了场景的概念之后,则不难理解场景法是通过使用场景对软件系统的功能点或业务流程进行描述,即针对需求模拟不同的场景进行所有功能点及业务流程的覆盖,从而提高测试效率并达到良好测试效果的一种方法。显然,场景法适用于业务流程清晰的系统或功能。
通常,场景法由基本流和备选流两部分构成。
(1)基本流:基本流是经过用例的最简单的路径,即在无任何差错的情况下,程序从开始直接执行到结束的流程,如图7.2所示的中间的直线。通常,一个业务仅存在一个基本流,且基本流仅有一个起点和一个终点。
    图7.2 场景法的构成
(2)备选流:备选流为除基本流之外的各支流,包含多种不同情况,如图7.2所示的中间直线两侧的多个线条。例如,一个备选流可始于基本流,在某个特定条件下执行,然后重新加入基本流中(如备选流1和备选流3);也可始于另一个备选流(如备选流2);也可直接结束用例而不再加入基本流中(如备选流2和备选流4)等。
注意 : 维基百科中对用例的定义:“用例,或译使用案例、用况,是软件工程或系统工程中对系统如何反应外界请求的描述,是一种通过用户的使用场景来获取需求的技术。每个用例提供了一个或多个场景,该场景说明了系统是如何与最终用户或其他系统交互的,即明确了谁可以用系统做什么,从而获得一个明确的业务目标。”
依据图7.2所示的基本流和备选流,可组合成多个不同的场景,举例如下。
场景1:基本流。
场景2:基本流+备选流1。
场景3:基本流+备选流1+备选流2。
场景4:基本流+备选流3。
场景5:基本流+备选流3+备选流1。
场景6:基本流+备选流3+备选流1+备选流2。
场景7:基本流+备选流4。
场景8:基本流+备选流3+备选流4。
至此,读者应对场景及场景法有了一定的认识。究竟如何使用场景法呢?可参照以下步骤进行测试用例设计。
(1)分析需求,确定软件的基本流及各备选流。
(2)依据基本流和各备选流,生成不同的场景。
(3)针对生成的各场景,设计相应的测试用例。
(4)重新审核生成的测试用例,去掉多余部分,并针对最终确定的测试用例设计测试数据。
以上为场景法理论层面上的相关介绍。下面以旅馆住宿系统为例,从实践角度进一步阐述场景法的应用。
【 任务7.1 】 旅馆住宿系统房间预订测试用例设计。
需求 :某旅馆住宿系统支持房间网上预订业务。游客访问网站,进行网上房间预订操作,选择合适的房间后,进行在线预订。此时,游客需要使用个人账号登录系统,登录成功后,进行定金支付(定金金额为1天的房款)。支付成功后,生成房间预订单,完成房间预订流程。
问题 :采用场景法进行测试用例设计。
前提条件:该系统需求中,业务流程描述清晰,适合采用场景法进行测试用例设计。
第1步,分析需求,确定软件的基本流及各备选流,如表7.1和表7.2所示。
表7.1 房间预订_基本流
   表7.2 房间预订_备选流
   注意 : 备选流 x (用户退出系统)可在任何步骤中发生,故标识为未知数 x 。
第2步,依据基本流和各备选流,生成不同的场景,如表7.3所示。
表7.3 房间预订_场景组合
   注意 :
①表7.3所示的场景5可拆分为两个场景。
②由于备选流 x (用户退出系统)可在任何步骤中发生,因此未分别设计场景,读者在测试中考虑并执行测试即可。
第3步,针对生成的各场景,设计相应的测试用例,如表7.4所示。
表7.4 房间预订_测试用例设计
   第4步,重新审核生成的测试用例,去掉多余部分,并针对最终确定的测试用例设计测试数据,如表7.5所示。
表7.5 房间预订_最终测试用例(含测试数据)
   值得提醒的是,表7.5中测试数据设置的前提条件如下。
(1)旅馆住宿系统中仅支持以下房间类型:标准间(100元/天)、单人间(200元/天)、双人间(300元/天)。
(2)单人间已住满,其他房间有空余。
(3)Hello为系统的已注册用户,密码为123456。
(4)Nihao为未注册用户。
至此,可利用表7.5中的测试用例协助开展测试。此处仅为采用场景法对旅馆住宿系统房间预订流程进行测试用例设计的步骤,读者可依据等价类划分法或其他方法进行测试用例的进一步补充,限于篇幅,不再赘述。
【 任务7.2 】 旅馆住宿系统会员卡结算测试用例设计。
需求 :旅馆住宿系统为推广业务,特采用会员卡制度。游客可申请会员卡,同时可对会员卡进行充值。在指定旅馆住宿消费时,只须向商家出示会员卡,通过读卡器识别用户信息,验证该用户信息是否被列入黑名单,若非黑名单中的游客则输入正确密码后即可进行折扣消费。当办理房间结算时,需选择结算业务,核实界面提示打折后的住宿费用信息,输入应支付的结算金额,成功办理结算并在会员卡中扣除结算金额。
其中,游客可自行设置会员卡的密码,每次消费前输入密码方可进行下一步操作。若24小时(一个自然日)内密码连续输错3次,会员卡即被锁定,需要联系客服进行解锁激活。
问题 :采用场景法进行测试用例设计。
前提条件:该系统需求中,业务流程描述清晰,适合采用场景法进行测试用例设计。
第1步,分析需求,确定软件的基本流及各备选流,如表7.6和表7.7所示。
表7.6 会员卡结算_基本流
   表7.7 会员卡结算_备选流
   注意 : 备选流 x (退出结算)可在任何步骤中发生,故标识为未知数 x 。
第2步,依据基本流和各备选流,生成不同的场景,如表7.8所示。
表7.8 会员卡结算_场景组合
   注意 : 由于备选流 x (退出结算)可在任何步骤中发生,因此未分别设计场景,读者在测试中考虑并执行测试即可。
第3步,针对生成的各场景,设计相应的测试用例,如表7.9所示。
表7.9 会员卡结算_测试用例设计
   第4步,重新审核生成的测试用例,去掉多余部分,并针对最终确定的测试用例设计测试数据,如表7.10所示。
表7.10 会员卡结算_最终测试用例(含测试数据)
   值得提醒的是,表7.10中测试数据设置的前提条件如下:
(1)应支付的结算折扣金额假定为500元;
(2)当前实例用户的密码为123456。
至此,可利用表7.10中的测试用例协助开展测试。此处仅为采用场景法对旅馆住宿系统会员卡结算流程进行测试用例设计的步骤,与此同时,读者可依据等价类划分法或其他方法进行测试用例的补充,限于篇幅,不再赘述。
【 练习 】 采用场景法对ATM机的取款流程进行测试用例设计。