游戏测试功能测试 (一)
本帖已被设为精华帖!,
前言
发现问题是质量工程的一部分,如何优化测试效率,就要使用科学的方法让每次测试都可以覆盖比较完整,无目的 和 0策略的测试只会投入更多的人力和带来疲兵,疲兵效率更差。
在互联网快速迭代的时代,W模型下可以跑到2轮测试也不一定有时间,所以不要浪费这个每一轮时间,这份文章是功能测试的,功能测试真得是测试以外很多人理解的无脑点鼠标吗,希望耐心看完后发现里面想表达的一些意思,也可以理解游戏产业的测试。
希望更多游戏测试也可以来社区分享下功能业务的经验,真的很庞大,而且互通性很强。
好吧,那么接下来,我来点鼠标了。
场景de怪物
以Arpg为例子,如何测试1个场景里的怪物
首先我们会找到npc.csv表,其中会有一列是npc名称,id,场景id,这份表是策划配置的。
#我们先验证是否满足了策划需求,前往跳转到对应的场景比如002.
怪物有规则按等级和区域分布或者无规则散落在可以有怪物的区域,这份东西可以在策划案内看到/编辑器内
提供二种方式验证:
1.使用gm指令或者修改角色移动速度来实现自己跑地图,到对应地图点查看怪物并且焦点他查看怪物详细情报,有策略的测试,可以在这里实现分工和分区域检查
1.1 升级版 验证怪物的警戒区域和根据布怪区域验证区域边界那边是否异常。
验证怪物的警戒区域:选中怪物焦点可以看到多少米,怪物警戒区域是25米,就一路把怪物啦出范围内。注意和怪物出现的原点超过25米后是否会返回,这里允许客户端有2米左右偏差 就是27米,毕竟是计算返回需要时间(这里可以查看社区关于reponse time的帖子)
验证区域边界是否异常:前往布怪区域点外虚线位置(引擎编辑器内可见)是否有怪物会布到点以外或者踩住点。
- 随意选1个区域把当前经常怪物都给加出来,加出来后验证其他问题-怪物属性 加完测试后记得删除,或者覆盖上传1次场景地图,只要提交有看slowlog的习惯基本不会出现这类错误漏出去(当然不排除当年1个倒霉蛋公司 杭州天畅 做大唐风云的)
怪物属性异常1
上面添加怪物,发现这个npc,但是它和其他不一样,没有头像(1个C类问题),如何提交这个问题呢,大家可以下日常工作
提交一个问题,Tittle不要和内容一致,更精简的列出问题关键字为佳,要短而明了。这里乱入了1个提交bug的介绍。
模板:[场景名称]+[场景坐标位置x,y]+[怪物名称]+[xx表编号]+[问题类型] +[分析判断原因]
如果缺少坐标位置,对应开发者还是要去查是哪里问题。我最喜欢的模板化讲诉,公司里也是这样培训的。
问题内容:
凌霄城场景,坐标679,108 npc:雪地兔 npc表idxxxx 鼠标选中后,发现npc缺少头像icon
当然这样提交得只能获得B+,测试合格。
验证需要添加进入[分析判断原因] 这个不是必加的,但做为1个有情怀和负责的测试,有时间最好可以帮助检查下,这样也可以锻炼你对游戏文件路径和格式的熟悉程序,这里定位每个问题不会比互联网定位任何控件属性简单。
分别可能有1)美术资源没有2)程序没有加进去,3)加进去后bug导致消失。(其实原因主体有5种,看客是否可以找到其他的。)
附件包含在该场景内的截图位置,实际提交时图要大点,格式是jpg
怪物属性验证问题2
上面这样是否就完美了,不是!这个npc缺少icon,那么他是否还缺少其他东西呢?
一个npc包含 抽取部分举例(还有警戒范围这些跟游戏设计业务挂钩的)
①Icon ②模型比例 ③脚底光环 ④战斗之前碰撞 ⑤战斗之后碰撞 ⑥战斗移动动作 ⑦攻击动作 ⑧攻击音效 ⑨受击音效等 <这里可以写在功能测试用例中>
触发和这个npc的战斗后,发现新的问题:⑥⑦⑧缺省
这里需要提交新的bug,提交方式当然不能直接写⑥⑦⑧,但是同一类可以合并在一条提交(比如⑥⑦),也可以根据对口负责人来分配是提交几条。
当发现比如⑧是通用的,可能会是某一类npc在某些场景都没有配置OR音效没有提交,这里就需要细化检查。
问题模板如下:
[npc名称]+{检查项1…}+发现问题缺省+[分析判断原因]
检查项 也可以说成是特性,需要维护的。
补充:警戒范围问题,(除了上面选中后焦点上的xx米以外)可以在引擎里的其他视图看二者距离的拉线,中间有障碍物是否会计算直线距离,基本警戒范围xx米是不会有错的,程序自己计算的。你不想开引擎,自己要计算也可以,对应英雄每秒正常走路多少米移动速度,知道这个就可以比对出来。如果指向怪物可以看到距离更好,精确算距离只能开引擎
1个怪物这样测试就对了么,顺带验证下你的技能和击杀怪物的奖励吧。
Ps:测试怪物要和技能测试分开的,这种用法集合只是文档讲课或者是某次迭代回归中case上描述的
Case:场景xx,用xx门派随意1~2个技能对xx怪物进行攻击
Check:怪物人物受击,双方音效,怪物奖励exp和掉落包
我们这里就简化点,围绕怪物
使用了龙爪手 距离20米,cd5秒(使用1次后5秒后可用)
距离不足会龙爪技能文字是红色(通用颜色代表条件不满足)
距离满足龙爪技能文字是白色。(这里内力不足是蓝色,不过这次不是测试技能),我们瞄准怪物来试下技能。
Case:先鼠标选择,走进20米白色,走近一步19米 check 技能文字白色 ok
Case:19米走回20米 check 技能文字白色 ok
Case:20米走远一步21米 check 技能文字红色 ok
Case:走回20米后,点击技能,走远1米 check:技能可以命中
为啥可以命中呢,在20米点击时,arpg为了保证同步问题,往往只要客户端认为技能为合法,不用等服务器返回,就可以把本次技能的动作给播出去,中和不中,暴击不暴击是另外计算的。
状态机
说到这里,要提下一个名词叫有限状态机,会贯彻游戏及其他软件开发中的东西,不光是测试和程序的东西。
定义如下:
从1个状态转换成另外1个状态的规则,状态机并且也是通用的组件意味着可以被重复使用,比如上面的技能距离不满足->技能距离满足,当然还有很多遮挡条件也会不满足(不可判断为直线距离)。
好吧他另外1个名词叫机制,当你完善了一套死了一波兵,原地可以在刷出一波兵,那么这个机制就可以复用在其他地方,开始拼接轮子吧。
先需要几个状态:
判断距离直线 满足白色 不满足红色 其他条件其他颜色(这里略过)
判断距离 需要是对象位置减去玩家的位置,这里也需要定义1个class,这个是处理决策action函数,If eles红色和白色定义在这里。
那么所有的状态我们需要1个接口去实现,程序运作原理是,当该状态被设置成了当前状态时,调用1个函数,一开始会定义1个初始函数,还需要1个检查函数update()
SetState(newState) ->每次变更 -> update() 每帧检查,当满足了,就调用action()
不过要先定义1个函数实例化他的状态,好吧感觉已经不是功能测试了,但功能测试也要了解原理。
白话整理:技能文字白色为合法 状态A 红色 通过距离条件 状态A会变成技能文字红色不合法 状态B 白色
客户端发出攻击指令是由状态A 红色来决定的。
异常处理
这一切后,还需要1个处理异常的,所有行为都需要满足其中1个状态。如果都不包含,这个错误就会被抛出。
为什么需要抛出?
举个热门美剧《西部世界》,其中第一集治安官在路上和旅行者进行对话,苍蝇出现的脸上,随后治安官出现癫痫症问题。原因:人工AI是希望可以驱赶苍蝇,但决策治安官的人工智能是不会伤害任何生物(主要保护旅客),于是出现了逻辑冲突,因为有了异常处理,当然在电影里治安官机器人会不会冒烟就不知道(毕竟编剧不一定会程序),所以抛出了1个行为癫痫症。
可以看出有限状态机强大和广泛,并且所有的关系都是各种状态机来设定的,假设你目前还是1个ue4开发者更会这么觉得。
End,感谢看完。
* 注:本文来自网络投稿,不代表本站立场,如若侵犯版权,请及时知会删除