游戏兼容性测试工作分享

文摘   游戏   2024-06-07 18:01   浙江  

在游戏开发中,兼容性测试是确保游戏在各种硬件、操作系统和平台上正常运行的关键环节。兼容性测试不仅能够保证游戏在不同设备上的表现一致,还可以提高用户体验和扩大游戏的受众范围。本文将介绍兼容性测试的概念,探讨游戏常见的兼容性问题,并分享兼容性测试的具体流程,帮助开发者更好地理解和实施游戏兼容性测试。



01 何为兼容性

看病就医,如果医生只是知其然而不知其所以然,只是根据病者表象开药,对症而不对根,即使病症好了,却无法保证是因为时间和环境等外部环境变化导致的暂时性的康复还是彻底解决了病症。做兼容性测试,只有测试人员了解了什么是兼容性,才能够更好地分辨什么是兼容性问题,进而大致地定位兼容性问题,甚至能够在问题后续的修复中去判定程序的修复是否具有道理,能否彻底解决该问题等等。所以本章节将从兼容性的概念和应用程序的兼容性原理来简单谈谈何为兼容性。

1

兼容性的概念

从汉语层面,兼容被解释为同时容纳各个方面并代表包容和配合的意思。用百度词汇中举的例子来说,如果你能和你的朋友们友好相处,那自然是相互能兼容,如果相互间相处非常默契,那就是兼容性非常好了。
换言之,一个个体能够和其他不同个体共同存在相互作用,但不会产生“不好”的效果,称之为兼容,相互之间影响的程度越小,相处的越好则兼容性就越好。
那么所谓兼容性则是代表着两者之间相互协调的程度。兼容性好则说明两者越协调,反之则处处不对头,状况百出。

2

应用程序的兼容性原理

在计算机之中,兼容性是指硬件之间、软件之间或是软硬件组合系统之间的相互协调工作的程度。兼容的概念比较广,相对于硬件来说,几种不同的部件,如CPU、主板、显示卡、屏幕等,如果在工作时能够相互配合、稳定地工作,就说它们之间的兼容性比较好,反之就是兼容性不好。

从某一软件的角度来理解,从设计之初即存在目标机器上的理想效果,用上文来说,这就相当于是朋友们友好相处的结果,应用程序兼容性就是指应用程序能否在不同的环境或内部系统变化中保持一致的友好相处结果的行为,而这种一致性则是设计人员所希望的理想效果。

应用程序和手机内部环境

内部环境的变化则是兼容性的核心,内部环境的组成则是该软件运行所依赖的硬件和软件。

对于移动游戏来说则是手机设备型号操作系统,由于市面上手机厂商众多,设备五花八门,而且不同的型号还存在不同的硬件配置,再加上操作系统的多样,单单就android系统来说,安卓API及安卓操作系统的快速发展,以及原始设备制造商在其设备上部署的安卓操作系统的定制版本的存在,设备型号与操作系统的组合导致了应用程序存在大量可能的运行环境,使开发者在应用程序开发过程中面临十分严峻的挑战,所以想要完全发现和解决掉兼容性问题基本是不可能的。


国内2023年Android设备覆盖率

国内2023年Android小版本覆盖率

去尽可能地、尽早地解决这些内部环境导致的游戏相关兼容性问题,起码是能够在较大程度上的保障高占比用户的使用体验的,甚至在游戏上线后,这也是提高玩家留存率中必不可少的要求。
02 游戏兼容性问题

在讲如何进行游戏兼容性测试之前,我认为了解一些基本的兼容性问题,在测试中也会比较有底,对于之后的测试也会比较有帮助,所以大致列了几类在兼容性测试中所遇到的兼容性问题。

1

手机屏幕适配问题

品牌为了追求“独特性”和“创意性”,所以市面上的手机设备屏幕五花八门,包括刘海屏、挖孔屏、水滴屏、全面屏、曲面屏、折叠屏等在内,从而导致了游戏开发中的一系列界面适配问题,这类问题也是硬件适配中发生率最高的一类问题。
(1)屏幕未缩进导致UI遮挡
这一类适配问题主要发生在摄像头安置在显示屏之上的设备,例如挖孔屏。

UI缩进适配问题

一些游戏在UI设计之初即预留固定的UI缩进以盼直接一次性解决这类屏幕的缩进问题。但是这么做会有一些舍弃,就是一些非挖孔屏进游戏也会有一些缩进,整体UI会向中部靠近,如果屏幕较窄的机器,显示起来拥挤感会更加明显,甚至会有UI重叠的问题。在着手解决这类兼容性问题时,为了避免以上弊端,在android端给出了两个解决方案:

  • 一是在玩家进入游戏时,客户端直接获取到设备的安全区,然后直接进行动态适配

进入游戏获取设备安全区

  • 二是对于一些因为种种原因无法直接获取安全区的设备则提供了配置表,当遇到这类机型可以将设备型号和对应的缩进比例填写进去,从而达到适配目的。这类手机毕竟是少数,就只能在兼容性测试中遇到一台处理一台了。

配表手动设置UI缩进

(2)缩进不正确导致UI异常

由于iOS端的设备屏幕的变化没有android端那么复杂多变,所以对于iOS设备一开始都是做了两侧统一缩进的设定,但是在实际测试中发现一些设备其实不需要缩进,或者说设置了太多的缩进反而会导致BUG的产生。
这一类UI问题,交互无论如何调试都无法解决,因为这些分辨率较为特殊,原本的缩进策略再结合交互的某些拼接内容反而会引入一些问题。android直接获取的安全区缩进无法直接使用,如果手动配置机型又会比较麻烦无法覆盖所有这种分辨率的机型,iOS又是直接按照通用的缩进比例做缩进,于是专门针对这类特殊情况的固定的分辨率做了读表判定的特殊处理。
(3)手机分辨率异常导致UI遮盖不全
为了适配不同分辨率,实际在美术出图时就会特意为底图多预留一些边边角角防止穿帮,但是机器分辨率实在是太多太多,有的甚至过于特殊,无法完全靠出图就直接解决这个问题。
一些机器长宽比太大,会出现两侧遮盖不全的问题:

左右两侧未遮盖全

这类特殊分辨率问题,程序和交互做了一个背景缩放的功能专门用来解决这类UI背景底板太小导致的遮盖不全的问题,也是在表中配置即可。生效之后,会按照手机的分辨率以一定的算法对底图进行等比例的缩放来达到底图覆盖全屏幕的效果。
但是一些宽长比接近1的pad和折叠屏,由于出图都是按照手机的分辨率给的,一般设计上会偏向长方形,导致在这些设备上的loading界面上下即使缩放后还是空的。

缩放后依然异常

2

视觉表现不兼容问题

这类问题往往都是游戏所使用的引擎或者算法与设备使用的硬件以及操作系统产生的底层不兼容有关,原因也是复杂多变,这里只能将整理的部分表现进行大致举例以作参考。
(1)模型引用的材质与特定机型不兼容
这类问题在发现时,需要对不同型号手机做下对比,防止是因为游戏中的某种材质本身的问题,如果在不同设备上表现不同,那才可以断定是游戏这类材质与平台不兼容。
(2)数值处理与平台不兼容导致的显示问题

这部分遇到较多就是关于不同平台对于浮点数、除0、初始赋值等的处理不同,从而导致的界面异常显示。

比如不同的设备平台浮点数精度会有差异,在Tonemap计算中可能出现NaNs值,当时版本的urp插件中stopNaN的后处理又将NaNs处理为黑色导致部分高亮区域的像素变黑,就会出现以下这种蚂蚁线的问题:

(3)与固定机型软硬件不兼容导致游戏内功能异常或缺失

比如ZFight问题,部分机型上深度精度低,特效模型与地面重合:

这类问题乍一看都特别像是功能问题,以后在发现此类问题时,可以多留一个“心眼”,去定位下是否为兼容性问题。

3

稳定性相关的不兼容问题

这一类问题主要包括安装、闪退、黑屏、卡死等,都比较底层且原因多变,无法一一概括分析,所以以安装问题和闪退问题作为例子分享下如何定位和区分是兼容还是功能层面的问题吧。

(1)安装问题

如果要定性为兼容性问题的话,需要保证游戏包体能够成功安装到至少一个版本的android(iOS)平台或者手机上,而在另一个版本的android(iOS)平台或者手机上安装失败,则将其视为安装时兼容性问题。

(2)闪退问题

在测试过程中需要注意的是,一般这类问题都是某些程序逻辑与内部环境不兼容从而导致的程序崩溃闪退,但是在测试中也发现一些类似崩溃问题也容易被误认为是兼容问题。比如性能向的问题,游戏在运行过程中持续的高温高耗导致手机系统主动地杀掉进程;某一台手机本身的内存不足引发的游戏闪退等等,这类问题遇到时,最好是能够先通过查阅日志等初步判定区分一下。

03 兼容性测试流程分享

解决问题的前提是需要这些兼容性问题能够尽早尽量多地暴露在开发者面前,于是就引入了在游戏开发环节中必不可少的一项专项测试内容,即游戏兼容性测试。但是漫长的研发周期中,面对如此复杂的设备和操作系统,在项目日常测试工作已经较为繁重的情况下,项目又应该在什么时候、使用什么方式去执行游戏的兼容性测试并最大范围地去发现这些兼容性问题呢?

首先需要明确的是兼容性测试涉及到庞大系统,大量手机,是不可能单单依靠某一个人能够完成的,所以一般是交由专门的部门负责测试,包含大量测试人员,每个人的理解也不同,测试习惯和对问题的理解深度也都不一样。作为项目组QA,就需要思考以下两个问题:一、应该怎样去组织和对接这样一场测试,让其能够最大程度满足我们的测试要求,发现尽可能多的问题;二、最后汇总的有限的测试信息和结果如何去高效地定位问题和跟踪解决问题。

接下来将介绍下笔者目前采用的兼容测试工作流程,逐一明确以上问题的解决办法。

1

兼容性测试准备


兼容性测试不是一蹴而就的工作,随着项目的研发,在不同阶段会有不同的兼容性需求。比如在UI频繁迭代后,需要着重关注的是游戏中的UI在不同的异形屏上是否都可以正常适配;在开发引擎更新之后,需要特别注意游戏在不同手机上运行时能否做到与其手机系统软件、硬件相兼容等等。所以每一次兼容性测试前都需要对不同的需求进行搜集并做好提测前的准备工作。为了便于理解,将本节内容总结如下图:

(1)测试目标的确认

在开展测试前必须搞清楚本次测试目标是什么,换言之,本阶段的兼容性测试具体要求是什么?兼容性测试要求一般包括本次着重需要关注的目标问题、出包的目标时间、包体应用的目标范围

目标问题的明确才可以帮助我们洞察需求从而凝练出本次的兼容性测试用例。目标问题一般是根据项目的近期开发情况决定的,比如在UI频繁迭代后,我们就可以以UI适配作为目标问题编写用例和提测,功能逻辑的覆盖用例适当减少,可以适当减轻对其他兼容性问题的关注程度,这样一来也可以在有限的时间内缩短单台机器的跑测时间,从而屏幕种类和分辨率数量的覆盖量就可以增加。

出包的目标时间确认可以帮助我们合理安排提测时间。要预留足够的时间给程序排查和修复问题,反推最晚的提测时间,并且最好在提测前两天和对应的兼容性测试团队确认排期。合理的时间安排,一是可以避免和对应的测试团队的排期冲突导致测试延期,二是保障了问题的修复,不影响游戏的正常测试和发布。

市面上的机型五花八门,兼容性问题肯定是无可避免的,并且每一次兼容性测试就将所有机型跑一遍也是不现实的。包体应用的范围可以帮助在测试中缩小测试范围,同时也是为测试后兼容性问题验证提供了一个标准。一般应用范围是包括两方面:一是当前游戏最低运行配置,包含软件和硬件的标准,这一般是程序提供的,可以找客户端负责程序确定,这也是日常兼容性测试中最常使用来确认目标机型的;二是游戏测试目标配置,举个例子,比如游戏需要做一次东南亚地区的android测试,程序要求游戏至少需要在4GB,android4.0以上的机器上运行,根据以上包体应用范围就可以找相关测试部门确认本次测试的目标机型范围就是所有的4GB,android4.0以上的东南亚机型。如果还想缩减范围,一个比较有参考性的就是相应设备或者系统在对应市场的占比,从高到低进行排序选择,一些占比过低的机型即使抛弃也不会对我们游戏的目标人群造成太大影响。

(2)测试用例的准备

测试用例的准备是和目标问题紧密相关的,同时还需要考虑时间人力成本。

比如此次测试目标问题是游戏的稳定性,用例的制定就需要重点囊括易发生稳定性问题的步骤,比如登录CG、登录时第三方服务获取(用户中心、权限获取等)、视频播放、录像回放,以及性能高占比的功能,比如抽卡动画播放等等。

(3)测试环境的保证

测试环境包括测试包体、测试服务器以及测试账号

测试包体需要提前确认提测的版本,需要结合测试目标考虑到内外网差异。建议专包专出,想测试第三方服务的兼容,就需要包体囊括所有的第三方服务内容,想测试游戏内普通的功能兼容性,可能简单的内网包体就可以满足需求。

然后根据本次兼容性测试要求,准备对应的测试服务器和测试账号。

在确认好包体和环境后,一定要使用提测的包体和环境完整跑一遍测试用例,保证功能没有问题,防止因为游戏功能自身的原因增加人天耗时。

2

兼容性提测


提测阶段主要需要注意的点总结如下图:

在正式提测前需要找到对应的兼容性测试团队的接口人,确认下他们的排期,当前是否有足够的人手和时间安排一次测试,项目可以根据他们的排期结合自己的时间动态调整跟进策略,约定好出测试报告的时间。

当确认好测试目标、准备好测试用例以及测试环境后就可以进行正式的提测

提测后需要开一个测试问题跟进总单,在测试过程中对一些需要跟进解决的问题及时开出子单跟进,这样也是便于项目组各位同事后续直接查看该总单就能对本次兼容测试的情况进行大致了解,以及修复进度实时查看。

建议开出的bug单标题明确问题表现,描述需要贴上具体的测试机型复现步骤等等,附件部分最好包括必要的图片、视频和log明确的标题在遇到相同或者类似的兼容性问题可以帮助我们更加方便地找到之前问题从而进行对比分析,详细的复现步骤可以帮助程序更好的理解问题,还可以防止修复时间与问题发现时间间隔太久,等到去验证时忘记如何复现从而难以判断问题是否的确完全解决掉。

3

兼容性测试过程

部分主要是讲一下对于不同情况和类型问题的处理方式以及对于一个问题的基础判别。


(1)针对不同情况如何处理


  • 不用记录的问题及时反馈

一些设定问题或者当前版本暂时不需要解决的已知问题可以直接告诉他们不用记录。比如:功能正在迭代中,大多数UI都是临时资源,但是我们提测时包含这个功能,主要目的是测试其稳定性,则需要提前告知兼容性测试团队,避免无效反馈。

  • 紧急棘手问题及时开单

如果遇到严重并且可能难以解决的问题则需要及时开单,比如在测试过程中有闪退崩溃等问题,这种问题解决和定位是比较复杂的,且可能造成测试阻断,需要尽早开单处理。

  • 不清楚的问题暂时记录

如果遇到一些拿不准是否为兼容性的问题并且不紧急的问题也可以先记录下来,保留相关视频、图片等,以便之后筛查是兼容性问题还是功能bug。

(2)针对不同问题判别思路


单一的兼容性测试行为的构成包括:执行人员、执行设备、被执行软件、执行步骤、执行结果。往往都是从结果找原因,排除外界条件和影响,目的是定位被执行软件本身和设备平台导致的不兼容。

回忆一下第一章所说的应用程序的兼容性的概念,应用程序兼容性就是指应用程序能否在不同的环境或内部系统变化中保持一致的行为。游戏的兼容性是开发组在目标机器上研发效果,同一个版本移植到了不同的手机和操作系统之中,出现了与目标机器上不一致的表现,这类问题才能被称作兼容性问题。

兼容性测试过程中需要学会判别、定位是否为兼容性问题,常见的误判有以下几种:

  • 测试的设备本身的原因

排查是否是测试设备本身导致的不兼容表现:比如设备本身的内存不足、设备的配置本身不足以达到能够运行对应软件的条件等。

  • 功能层面问题

一些比较明显功能层面的问题,能够直接进行判别,一般来说功能执行响应、反馈结果这个流程都是属于功能逻辑,逻辑执行过程中存在兼容性问题那最常见的应该是运行崩溃(卡死闪退等等)问题而不是结果异常,如果结果异常一般是功能向的问题而非兼容问题。

  • 测试人员操作和对兼容性问题误判

一个合理的测试用例或者指南可以保证测试的内容可控,减少不必要的工作量。但是可能也会存在测试人员“好心多测”而导致的误报问题。比如用例之外的一些游戏功能正在开发迭代中,如果误点以后可能会导致显示异常,无法保证测试人员百分百按照你的用例进行测试,在他的测试步骤中刚好触发了这类功能问题,那可能上报兼容问题时就会存在“混淆”视听的情况。

(3)信息的保存与问题现场的保护


出现了问题,需要测试人员保留相关的必要信息:包括图片、视频、日志(客户端日志和adb日志)甚至是案发现场。这样哪怕拿到手机无法复现,也能够给程序一些蛛丝马迹,并且事实证明,程序也的确依赖这些信息解决了一些较为偶现的兼容性问题。

4

兼容性测试完成后

兼容性测试完成,不代表工作的结束。正确且有根据的问题分类指派能够体现一个项目组QA对于兼容性测试的理解与把控能力,后续问题的跟踪和修复确认也是整个测试工作中最为重要的一环。

(1)兼容性问题筛查

除了在测试中遇到紧急问题及时开单以外,测试完成后拿到测试报告后需要根据测试报告一一筛查,哪些是属于兼容性问题,哪些是属于功能问题或者是在当前包体已知已解决的问题。然后根据相关问题找对应的测试团队借相关设备并复现,查看游戏实际表现,还原现场并核实复现概率,同时可以导log用以定位问题。如果遇到报告里必现但是实际无法稳定复现的情况及时找相关测试人员确认复现方法、复现环境等,遇到非必现问题,可以尽量尝试是否可以找到稳定复现方法,如果不行就尽量在单子中提供全面的log、dump日志、截图和当时问题出现的环节或操作步骤。

2兼容性问题重要级分类

对于兼容性问题重要级以某次报告的相关问题为例子,主要用以下准则进行判定:

1)本次测试目的:排查稳定性的问题,准备对外测试

2)问题的复现概率

3)问题的严重程度与覆盖机型的数量

如果是稳定性相关的必现问题就可以设置的中级以上,是否设置为高优先级问题则需要考虑覆盖机型数量和是否为阻断问题了。

3兼容性问题指派

问题的指派一般需要根据问题的大致分类去判别,较为精准的指派节约了问题流转的时间,提高了问题修复的效率。

  • 对于模型、特效的问题都可以开单找TA或者负责引擎渲染等逻辑的程序;

  • UI上的适配问题可以开单找具体功能负责的交互

  • 稳定性问题可以找负责引擎的程序进行初步排查,因为通常涉及底层的问题,需要他们帮助我们去具体定位一下;

  • 一些不确定的客户端问题可以联系一个固定的客户端程序进行分配,先将问题暂时指派给他,然后麻烦其帮忙及时分派下程序跟进。

4兼容性问题解决与验收

必须清楚的是,开出BUG单以后并不意味着兼容性测试的结束,这只是开始。如何推进程序进行问题的解决,以及后续的问题验收才是关键。

对于必现问题,程序修复后最好使用问题设备再复现几次确保没有问题后再关单;非必现问题,需要找程序了解原理,以及修复涉及的范围,让其提供复现思路;如果是无法复现的问题,review程序修改内容确认其是否合理,然后再关单,与此同时同步至修改可能涉及的功能层面的QA,让其在平时测试时留意其表现,一旦发现异常,及时反馈。

如果已经确认无法解决的问题,则做好备忘和记录。

5兼容性测试完成后

在完成一次完整的兼容性测试后,需要思考的就是如何在下一次测试中能够最大程度的覆盖更多的问题呢?

  • 根据测试结果完善测试用例和兼容性checklist。比如之前切后台经常会遇到卡住问题,就可以将切后台作为一个常驻用例写入自己的兼容性测试用例里面。

  • 平时也可以留意功能层面的需求,不断搜集一些可能存在兼容性问题的点,在下次兼容性测试中覆盖测试到。

04 结语


兼容性测试是贯穿游戏开发和运营整个时间维度的专项测试内容,只要游戏在更新、在输出新的内容,那么就都不能懈怠。同时市面上的机型和操作系统也是随时在更新迭代,兼容性问题没有确定的原因,也没有标准的跟进办法,你永远不知道会在游戏的哪一块地方出现问题,测试团队需要持续跟踪各类兼容性测试条件的变化,及时更新测试环境、测试设备与测试用例,才能更好地保证兼容性测试的有效性与意义。






推荐阅读



客户端性能优化测试心得


如何当好普通QA



 

都看到这里了,点个赞再走吧~

网易雷火测试中心
雷火测试中心致力于提供高质、高效的质量保障服务,建设成为国内顶尖的测试团队!
 最新文章