游戏功能测试之业务知识分享

发表于:2018-11-14 10:41

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:jiazurongyu    来源:TesterHome

  前言
  发现问题是质量工程的一部分,如何优化测试效率,就要使用科学的方法让每次测试都可以覆盖比较完整,无目的和0策略的测试只会投入更多的人力和带来疲兵,疲兵效率更差。
  在互联网快速迭代的时代,W模型下可以跑到2轮测试也不一定有时间,所以不要浪费这个每一轮时间,这份文章功能测试的,功能测试真得是测试以外很多人理解的无脑点鼠标吗,希望耐心看完后发现里面想表达的一些意思,也可以理解游戏产业的测试。
  希望更多游戏测试也可以来社区分享下功能业务的经验,真的很庞大,而且互通性很强。
  场景de怪物
  以Arpg为例子,如何测试1个场景里的怪物
  首先我们会找到npc.csv表,其中会有一列是npc名称,id,场景id,这份表是策划配置的。
  #我们先验证是否满足了策划需求,前往跳转到对应的场景比如002.
  怪物有规则按等级和区域分布或者无规则散落在可以有怪物的区域,这份东西可以在策划案内看到/编辑器内
  提供二种方式验证:
  1.使用gm指令或者修改角色移动速度来实现自己跑地图,到对应地图点查看怪物并且焦点他查看怪物详细情报,有策略的测试,可以在这里实现分工和分区域检查
  1.1升级版验证怪物的警戒区域和根据布怪区域验证区域边界那边是否异常。
  验证怪物的警戒区域:选中怪物焦点可以看到多少米,怪物警戒区域是25米,就一路把怪物啦出范围内。注意和怪物出现的原点超过25米后是否会返回,这里允许客户端有2米左右偏差就是27米,毕竟是计算返回需要时间(这里可以查看社区关于reponsetime的帖子)
  验证区域边界是否异常:前往布怪区域点外虚线位置(引擎编辑器内可见)是否有怪物会布到点以外或者踩住点。
  随意选1个区域把当前经常怪物都给加出来,加出来后验证其他问题-怪物属性加完测试后记得删除,或者覆盖上传1次场景地图,只要提交有看slowlog的习惯基本不会出现这类错误漏出去(当然不排除当年1个倒霉蛋公司杭州天畅做大唐风云的)
  怪物属性异常1
   
  上面添加怪物,发现这个npc,但是它和其他不一样,没有头像(1个C类问题),如何提交这个问题呢,大家可以下日常工作
  提交一个问题,Tittle不要和内容一致,更精简的列出问题关键字为佳,要短而明了。这里乱入了1个提交bug的介绍。
  模板:[场景名称]+[场景坐标位置x,y]+[怪物名称]+[xx表编号]+[问题类型]+[分析判断原因]
  如果缺少坐标位置,对应开发者还是要去查是哪里问题。我最喜欢的模板化讲诉,公司里也是这样培训的。
  问题内容:
  凌霄城场景,坐标679,108npc:雪地兔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函数,Ifeles红色和白色定义在这里。
  那么所有的状态我们需要1个接口去实现,程序运作原理是,当该状态被设置成了当前状态时,调用1个函数,一开始会定义1个初始函数,还需要1个检查函数update()
  
SetState(newState)->每次变更->update()每帧检查,当满足了,就调用action()
  不过要先定义1个函数实例化他的状态,好吧感觉已经不是功能测试了,但功能测试也要了解原理。
  白话整理:技能文字白色为合法状态A红色通过距离条件状态A会变成技能文字红色不合法状态B白色
  客户端发出攻击指令是由状态A红色来决定的。
  异常处理
  这一切后,还需要1个处理异常的,所有行为都需要满足其中1个状态。如果都不包含,这个错误就会被抛出。
  为什么需要抛出?
  举个热门美剧《西部世界》,其中第一集治安官在路上和旅行者进行对话,苍蝇出现的脸上,随后治安官出现癫痫症问题。原因:人工AI是希望可以驱赶苍蝇,但决策治安官的人工智能是不会伤害任何生物(主要保护旅客),于是出现了逻辑冲突,因为有了异常处理,当然在电影里治安官机器人会不会冒烟就不知道(毕竟编剧不一定会程序),所以抛出了1个行为癫痫症。
  可以看出有限状态机强大和广泛,并且所有的关系都是各种状态机来设定的,假设你目前还是1个ue4开发者更会这么觉得。

   上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号