前面介绍了测试用例的规范,那么要如何设计一份高质量的测试用例呢?设计用例时又要怎么去思考,才能保证不会遗漏测试点呢?下面我给大家介绍一套方法,或者说是思考的方向,这套方法基本上适用于任何功能模块,大家设计用例的时候,只要按照这个方法去思考,基本上可以规避90%以上的问题,其它的就要靠自己以及整个团队的实际项目经验了。
一、用例设计的方法
用例设计的方法其实很简单,只要明确自己是测什么一切即可了然于胸,信手拈来。
如果我们脱离某个具体的游戏功能来思考的话,测试实际上面对的是一堆代码数据,所有的测试工作其实是在对这堆数据进行测试。
测试员一般不需要搞清楚技术到底是怎么将这些数据加工成一个可视化、可操作的游戏的,但是需要明白一个底层的逻辑,那就是要将数据加工成游戏,首先得把这些数据加工成一个个的数据块,比如玩家的昵称就是一个数据块,而这些数据块通常的术语就叫做“对象”,决定对象特性的东西叫做属性,比如玩家昵称的长度、不同的词语构成等。而玩家操作就是改变某个对象的某条属性,或者使该对象与其它对象发生交互,从而产生一系列的变化,另一方面讲只要游戏在运行,其本身就是某些对象之间不停的在发生交互。还有,对象与对象之间的交互一定有一个大的前提条件那就是支撑其运行的硬件设备,比如电脑、手机等。最后所有的交互变化都有同一个衡量尺度,那就是时间。
所以在测试数据的基础上我们又可以上升一个更容易理解和操作的层面,那就是对游戏中各种“对象”的测试,这些对象可以是一个按钮、一个界面、一条属性值等等。
有了以上这些最基础的底层逻辑分析,我们就可以总结出最基本的四个角度去设计一个具体功能的测试用例,这四个角度就是对象、过程、环境、时间。下面我用一个具体的小例子说明一下这四个角度分别都要测试那些内容。
需求举例:假设游戏中的邮件内有个领取附件奖励的按钮其功能如下:
1、只有邮件有附件的时候才展示领取按钮
2、领取附件后按钮消失
针对这个简单功能,我画个流程图如图1-1。
接下来我们从上面提到的四个角度去分析
1、对象
对象即“领取”按钮,我们遇到的第一个测试问题很可能就是“如何测试一个按钮?”回想我们的回答可能是,看它的大小尺寸、颜色、点击效果、点击音效等等,仔细分析这些答案其实它们都有个共同点,就是我们说的这些点都是表现层面的,没错,当我们从对象的角度去构思测试点的时候其实考虑的就是它表现层面应该是个什么样子。
2、过程
过程即对象发生变化的过程,上面的邮件领取按钮有两个明显的变化过程,从无到有再到无,与之对应的是三个明显的对象在不同状态下的表现:无→有→无,那么从过程的角度测试其实就是验证以下两方面的内容:
促使对象发生变化的原因或者说条件正不正确;
对象发生变化后的表现正不正确。
而为了测试这两点我们就要去设计测试条件,比如我们要给测试帐分别发一封带附件和一封不带附件的邮件来测试按钮是否正确显示的判断条件,而此处其实是通过验证按钮对象从无状态到有状态的具体表现来验证了它的判断条件是否正确。看到这里其实我们已经发现了不管测试什么,其实最终都要落到对象的特定状态表现上来,也就是我们能直观观察到的层面,我们不用关心它这个条件在代码上到底是怎么写的,我们只需要设定特定的条件然后去操作观察实际表现结果即可,这其实就是所谓的“黑盒测试”,而黑盒测试最关键的地方就是条件设计的合理性。
这里要额外说一下网络游戏的对象变化过程,因为网络游戏的数据存储是放在数据库的,所以这里的过程就要多验证数据是否正常存入数据库的过程。比如一些游戏领取到邮件奖励后下线等10分钟再上线测试奖励内容是否还在,其实就是在测试玩家数据是否正常入库,而数据的入库条件就是先放在缓存里10分钟后再写入数据库中。
3、环境
上面说了对象发生变化的过程,下面要说的是对象是在什么样的环境下发生变化的,这里的环境总的来说分为以下三个方面:
游戏内环境:游戏内对象发生变化的场景等;
网络环境:如果是网络游戏则需要考虑;
软硬件设备支撑环境:游戏运行的软件环境比如系统版本,硬件设备比如电脑、手机等。
先说游戏环境,这里又分为服务器环境和客户端环境,很多复杂的网络游戏往往不会只有一个服务器进程,它很可能有登录服、游戏服、聊天服等等,而测试要测的就是当一个对象发生变化的时候,我们要保证它在每一个服务器上都能正常发生变化,同时发生变化切换服务器进程后它的表现依然是正常的,还有当服务器发生宕机等异常时依然能保证数据的正常,比如就上面的附件领取按钮来说,对服务器环境来说就要测试在游戏服、聊天服上的具体领取表现。而对客户端来说要考虑的就比较繁杂一些,比如UI冲突、不同界面场景下的操作冲突等,这个就要结合具体游戏和自身经验去构思。
再说网络环境,从这个角度考虑其实诞生了一个专有名词叫做“弱网测试”其本质其实就是测试游戏对象在弱网环境下的变化过程正不正常,弱网测试的具体方法后面会详细说明。
最后考虑硬件环境时也有一些专有名词比如客户端兼容测试(手游在不同型号、系统版本的手机上运行),UI适配(手游在不同UI尺寸的手机上运行)等,还有硬件设备上游戏与其它软件的兼容测试,比如输入法兼容测试等等,对于这些测试通常都是很简单的在对应的环境上运行游戏查看有无异常即可。此处的关键是能经常关注行业动态,对可能存在的影响游戏运行的软硬件因素做出正确判断,制定合适的测试策略即可。
4、时间
对于所有变化的对象来说,时间都是一个隐形的条件,比如上面的邮件附件一直不领取,按钮就一直显示,这里“一直”就是时间的概念,不过通常我们不用刻意去考虑这个影响因素,但部分功能会非常依赖时间做设计,比如某活动在固定的时间开启和关闭,这里就要特别去做测试。还有我们在做性能测试的时候会在某个场景持续挂机很长时间,这也是从时间的角度去做测试的结果。
5、运用过程
知道了设计测试用例的四个思考的角度,对于一个实际功能具体运用时可以参考下面的说明。
1、对象,先聚焦测试对象,即要测试的对象是什么,表现聚焦于一个对象在某个状态时直接呈现出来的视觉表现;
2、过程,对象的变化过程是怎样的,理清楚对象在变化过程中状态都有哪些变化,都涉及到哪些对象,涉及到的对象都有哪些状态变化;状态聚焦于当状态发生改变时,促使其变化的规则正不正确;
3、环境,在对象状态变化过程中,环境变更对其可能造成的影响,环境聚焦于当对象状态发生改变时支撑其运行的环境如果出现异常会不会对对象状态大改变有所影响;
4、时间,对象变化过程是否和时间有关系,如果与时间有关,通常都是当作对象状态改变的判定条件;
综上,从对象的表现、过程、环境、时间四个方面,根据功能需求结合实际游戏的其它功能尽可能的联想,穷举各种测试点,基本上可以覆盖到大部分测试的盲区。为了更方便的记忆运用,下面是总结的口诀。
记忆口诀:“面向对象看表现,理清过程看状态,考虑环境出异常,时间一般当条件。”
<完>
个人浅见,欢迎留言交流。♪(^∀^●)ノ