
导读:光看标题,你可能会以为今天会聊一个休闲的话题,不不,今天我们将要认真聊的,是一个严肃的软件工程话题:自动化测试。具体来说,是手机游戏的自动化测试。不是别家的游戏,正是腾讯游戏,保证半点也没有标题党。(坚持看完有福利)
作者:木羊同学
来源:大数据DT(ID:hzdashuju)
学过软件工程的同学应该都知道,软件工程是一门老师都可能随时不知道自己到底在讲什么的计算机专业课。不过,这不是本篇的重点。
软件工程告诉我们很多重要的事,其中一件事是软件都有一个生命周期。没错,一说软件开发,我们都会很自然想到写代码,但软件工程告诉我们,写代码远不是软件开发的全部工作,甚至还不一定是最重要的工作。
按照软件工程的说法,开发软件你得首先和客户谈笑风生,这叫需求分析,接着就是各种写不完的文档和开不完的研究会,都弄好以后,差不多就可以把“码农”找过来,把满头青丝编成代码。
你以为这就完了?没有!从软件编码到软件正式上线部署之间,有一个非常重要的阶段,叫软件测试,俗称Debug。Debug完了软件该上线了吧?NoNoNo,城里人的套路深着呢,还有QA和QC在前面等着。等着干嘛呢,翻来覆去地花式折腾你的程序,目标只有一个,加油努力把程序玩脱。
照一些软工书本的说法,软件开发最重要的是需求,其次是测试,接着可能是什么三姑六婆,至于程序员死了都要爱的写代码环节,在软工书里经常是三甲不入的,没啥存在感。
当然了,理想很丰满,现实很骨感,干了一辈子程序员,从没见过活着的QA、QC的也大有人在。所以,象牙塔里的软工老师,讲着讲着能把自己绕晕也不足为奇,这里就不展开了。
但是有一点,虽然大公司、小公司、以及不同流派的开发团队,在软件工程上的玩法各不相同,但有一点毫无疑问,软件测试是软件开发必不可少的环节。前面说过,软件测试就是花式折腾程序,直到折腾出毛病来。
听着是不是挺有意思?但真的走一遍你就会发现,这事费时费事还费脑子。软件测试有一个经典的环节,叫设计测试用例。什么意思呢?简单来说,你不是要花式折腾程序吗,花式虐狗还得先写一本《花式虐狗手册》呢,测试用例就是花式折腾程序的手册。
测试用例可不好设计,测试用例最希望的目标是做到路径全覆盖,也就是把程序所有可能的流程都测一遍。
这是非常烧脑的,光这么说可能感受不直观,接下来我们要讲游戏怎么进行软件测试,这里那就拿游戏作为例子好了,譬如说农药,现在要你设计一套路径全覆盖的测试用例,就是要你把所有角色的所有技能在所有可能的场景全都组合试一遍,就是这个难度,而且这还只是一小部分,因为农药除了竞技,还有社交、氪金等等别的各种功能,全都需要覆盖一遍。
现在应该可以看出来,软件测试并不简单,一套设计良好的测试用例,背后往往需要对软件的种种缺陷有深刻的认识。这就是为什么软工的书讲到软件测试,往往都会提出一个有点反直觉的观点:测试用例应该尽可能安排资深的专家来设计。
折腾软件听起来简单,写程序有门槛,测程序谁还不会对吧。但是,真要做到路径全覆盖,还真不是这么简单。随着软件规模越来越大,逻辑越来越复杂,传统的手工测试成本自然也随之暴涨,已经到了纯手工几乎不可能完成的地步。这个时候,软件测试人员想到了一个办法。
玩游戏感觉难度太高怎么办?开挂。那测试游戏也感觉难度太高怎么办?没错,同样也是开挂。软件测试人员开发出一种技术,叫自动化测试技术。当然了,虽然名字上叫“技术”,其实一开始也是测试人员零敲碎打甚至一拍脑门的产物。
根据《AI自动化测试》这本书的介绍,自动化测试技术的发展大致可分为四个阶段:
第一个阶段叫“录制-回放”技术,名字听起来好像很厉害,其实就是利用按键精灵或者之类的软件先记录键盘和鼠标的操作,然后不断重放进行测试。这套技术的优点很明显,简单易学,缺点也很明显,软件稍一改版,譬如稍微调整了一下某个按钮的位置,原先录制好的内容就完全作废了。
第二个阶段叫脚本化的自动化测试。脚本化意思就是要写脚本来测软件了,这应该是现在软件测试工作最常见的做法。不过和软件测试脚本和写软件一样,如果每次都从头开始,很快就会发现很多功能其实高度类似,大量时间都是在做重复性的工作。那怎么办呢?于是就有了第三个阶段。
第三个阶段叫测试框架。测试框架就是把测试脚本框架化,框架的好处不必多说了,在自动化测试中,框架也具有同样好处。有了测试框架,就可以把主要的时间精力,放在新增功能和核心功能的编写上面,能够显著提升了测试脚本的编写效率。
如果依据软件开发的经验,应该说自动化测试到了这个阶段,理论上就能难取得什么新突破了,实践上能做的工作主要就是对现有框架进行各种优化升级,或者开发新框架。那自动化测试的第四个阶段还能玩出什么新花样呢?答案就是真·自动化测试。
第四个阶段叫AI自动化测试。从自动化测试的前面三个阶段可以看出,虽然自动化测试名叫“自动化”,但实际上还是有许多工作需要人来完成,譬如说自动化测试的脚本就必须人来编写。
如果能够把这部分工作也“自动化”了,那岂不就是真正的自动化?想法很好,毕竟偷懒是IT技术发展的源动力,一样工作偷懒了,就样样工作都想偷懒。可是,可能吗?以前是不太可能,现在随着AI技术的进步,“不太可能”也随之变成了“也许可能”。
下面我们开始介绍如何基于AI技术对游戏类软件进行自动化测试。关于AI技术,我前面写过很多的文章,所以在开始之前,我想分享一个关于AI技术的观点。
技术的发展,尤其是计算机技术的发展,一定都是有一个不断发展成熟的过程,都是从一个“也许可能”开始,步履蹒跚跌跌撞撞,甚至可能会中途夭折,但都必须熬过这个艰难的过程,最终才能百炼成钢。
这几年AI技术很热,很多人已经着急地开始讨论用AI来取代人工,但在我看来,AI技术也并不例外,也需要经历那么一个跌跌撞撞的过程,选择了AI技术,并不意味着就选择了万事大吉,在通往应用的路上,还有大大小小无数的坑在等着勇敢的先驱们去填满。
现在的AI技术还正站在那个“也许可能”的起点上,更多地是告诉我们还有一种可能的选项。下面,我们就来一起看看,AI技术给游戏类软件测试带来怎样的可能选项。
说到游戏,行业内的同学第一个想到的应该都是最能“用心创造快乐”的腾讯互娱,有好几作爆款手游。最近腾讯互娱事业群的TuringLab实验室出了一本书,叫《AI自动化测试》,书里提到了一点不快乐的事。什么事不快乐呢?就是前面一直在说的软件测试。
手游也是软件,当然也需要进行软件测试,最常规的做法就是前面介绍的用自动化脚本测试。但编写测试现代手游的自动脚本,有三点难题:
还有一点书里没提,但我觉得这应该也算是一大难题。腾讯互娱素来有“养蛊”的传统,同一类游戏题材,通常会选择让自家的多个制作团队同时独立开发竞品游戏,这一策略在市场上大获成功,但不难想象会给背后的测试团队带来多大的工作压力。
毕竟人无论多努力,时间和精力都是有瓶颈的,但机器没有,所以,腾讯互娱开始探索用AI技术来完成手游测试工作的自动化道路。
要实现真·自动化测试手游,首先需要解决三大问题。
第一个大问题是手游的“读写”问题,这是一切工作的基础。手游是安装在手机上的,必须得先找到一些方法能够对手机进行各种操作。
这个问题相对容易,Android操作系统就自带了调试工具,此外还有许多好用的第三方工具包,譬如OpenSTF发布的minicap和minitouch,基于ADB实现了对Android手机运行App的实时截屏和触屏操作,这就首先为自动化测试手游解决了“读写”问题。
第二个问题是“读”的问题。玩手游被亲切地称为“擦玻璃”,这是有原因的,游戏的画面呈现,和对游戏角色的操作,都是在同一块屏幕上进行的。
minicap虽然实现了截屏,但是哪一部分是画面,哪一部分又是操作呢?单就游戏画面来说,至少还能细分成两个部分,状态画面和奖励画面。这不是规范叫法,这里我是借用了强化学习的部分概念。
强化学习里有一个智能体(Agent)的概念,不妨理解成玩游戏时你操作的游戏角色,智能体要干什么呢?三件事,观察周围环境,采取一些行动,争取得到最高的奖励。
观察周围环境,术语叫做状态(State),譬如说竞速类游戏,当前是在形势在直路上,还是准备进入弯道。那奖励是什么呢?最容易能想到的就是游戏得分,不过,在一些游戏,譬如前面所举的竞速类游戏,还有一些其它的实时奖励,比如当前的车速等等。
强化学习就是通过观察状态,分析出当前应该采取什么行动(术语称为“策略”),从而获得最高奖励。这个过程称为策略优化。而要找到最优策略,必须将状态-行动-奖励以三元组的形式保存下来作为训练样本。这就要求必须首先从画面中获取状态画面和奖励画面。
对于这个问题,《AI自动化测试》介绍了如何使用基于深度学习的图像处理算法,来完成场景覆盖性测试和游戏场景图像物体识别。
▲强化学习使用的各个区域示意图,来源:《AI自动化测试》图3-8
第三个问题是操作的问题。解决了第二个问题,我们就获取了手游的各种信息,那接下来应该进行什么动作操作呢?这是软件测试最关键的问题,也是自动化测试最难解决的问题。对于这个问题,《AI自动化测试》给出了两种思路,第一种就是前面已经提到的强化学习,另一种名字就比较新鲜了,叫“模仿学习”。
什么叫模仿学习呢?很简单,就是现在争议非常大的“云通关”。模仿学习是这么玩游戏的,现在要我玩一款游戏,但我首先做的不是上手去玩,而是先到B站刷高手通关视频,一直刷一直刷,一直刷到我认为已经把所有细节都印入脑海了,我就开始凭着记忆去玩游戏。
可想而知的是,很多的操作我虽然不清楚是为什么,也就是很多人说的失掉了探索游戏的乐趣,但我多半能很快通关。这就是模仿学习想要达到的结果。
好了,前面大致介绍了游戏自动化测试所会遇到的问题,和《AI自动化测试》给出的解决思路,但读完你肯定感觉和我一样,就算这些方法真的对路,不过要一一从头实现实在太麻烦。
还记得我前面说的话吗,偷懒是IT技术发展的源动力,腾讯互娱显然也知道这个道理,已经推出了一款名叫GAME AI SDK的自动化测试平台,提供了许多已经封装好了的工具,来逐一解决前面提到的这些问题。
关于这部分内容,可以仔细阅读《AI自动化测试》这本书,GAME AI SDK正是本书的作者TuringLab团队的作品。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
Excel 导入数据含缺失值?详解 dropna 函数的功能与实战应用 在用 Python(如 pandas 库)处理 Excel 数据时,“缺失值” 是高频 ...
2025-09-16深入解析卡方检验与 t 检验:差异、适用场景与实践应用 在数据分析与统计学领域,假设检验是验证研究假设、判断数据差异是否 “ ...
2025-09-16CDA 数据分析师:掌控表格结构数据全功能周期的专业操盘手 表格结构数据(以 “行 - 列” 存储的结构化数据,如 Excel 表、数据 ...
2025-09-16MySQL 执行计划中 rows 数量的准确性解析:原理、影响因素与优化 在 MySQL SQL 调优中,EXPLAIN执行计划是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 对象的 text 与 content:区别、场景与实践指南 在 Python 进行 HTTP 网络请求开发时(如使用requests ...
2025-09-15CDA 数据分析师:激活表格结构数据价值的核心操盘手 表格结构数据(如 Excel 表格、数据库表)是企业最基础、最核心的数据形态 ...
2025-09-15Python HTTP 请求工具对比:urllib.request 与 requests 的核心差异与选择指南 在 Python 处理 HTTP 请求(如接口调用、数据爬取 ...
2025-09-12解决 pd.read_csv 读取长浮点数据的科学计数法问题 为帮助 Python 数据从业者解决pd.read_csv读取长浮点数据时的科学计数法问题 ...
2025-09-12CDA 数据分析师:业务数据分析步骤的落地者与价值优化者 业务数据分析是企业解决日常运营问题、提升执行效率的核心手段,其价值 ...
2025-09-12用 SQL 验证业务逻辑:从规则拆解到数据把关的实战指南 在业务系统落地过程中,“业务逻辑” 是连接 “需求设计” 与 “用户体验 ...
2025-09-11塔吉特百货孕妇营销案例:数据驱动下的精准零售革命与启示 在零售行业 “流量红利见顶” 的当下,精准营销成为企业突围的核心方 ...
2025-09-11CDA 数据分析师与战略 / 业务数据分析:概念辨析与协同价值 在数据驱动决策的体系中,“战略数据分析”“业务数据分析” 是企业 ...
2025-09-11Excel 数据聚类分析:从操作实践到业务价值挖掘 在数据分析场景中,聚类分析作为 “无监督分组” 的核心工具,能从杂乱数据中挖 ...
2025-09-10统计模型的核心目的:从数据解读到决策支撑的价值导向 统计模型作为数据分析的核心工具,并非简单的 “公式堆砌”,而是围绕特定 ...
2025-09-10CDA 数据分析师:商业数据分析实践的落地者与价值创造者 商业数据分析的价值,最终要在 “实践” 中体现 —— 脱离业务场景的分 ...
2025-09-10机器学习解决实际问题的核心关键:从业务到落地的全流程解析 在人工智能技术落地的浪潮中,机器学习作为核心工具,已广泛应用于 ...
2025-09-09SPSS 编码状态区域中 Unicode 的功能与价值解析 在 SPSS(Statistical Product and Service Solutions,统计产品与服务解决方案 ...
2025-09-09CDA 数据分析师:驾驭商业数据分析流程的核心力量 在商业决策从 “经验驱动” 向 “数据驱动” 转型的过程中,商业数据分析总体 ...
2025-09-09R 语言:数据科学与科研领域的核心工具及优势解析 一、引言 在数据驱动决策的时代,无论是科研人员验证实验假设(如前文中的 T ...
2025-09-08T 检验在假设检验中的应用与实践 一、引言 在科研数据分析、医学实验验证、经济指标对比等领域,常常需要判断 “样本间的差异是 ...
2025-09-08