ChatGPT:智能化游戏测试的新尝试
当下,ChatGPT红遍了全网,作为一个被认为会对人类社会产生威胁的聊天机器人。ChatGPT是不是真的有那么神奇?好奇心驱使下,作者对ChatGPT做了一些简单的试用,并思考了ChatGPT以及类似相关的AI工具能给我们的游戏测试工作带来哪些启发和效率提升。这篇文章主要分享作者的一些试用经历,抛砖引玉,期待大家能有更多更好的想法,合理利用工具来提高我们的测试效率。另外,因为一些安全法规的存在,ChatGPT能不能用,怎么用,这些问题不在本篇探讨范围,本篇主要以技术探讨为主。
01 ChatGPT介绍
ChatGPT是由OpenAI团队开发的一种基于Transformer架构的自然语言处理模型,可以生成自然语言文本、进行问答、文本摘要、对话等多种任务。
ChatGPT模型是由多个Transformer模块组成的,每个模块包含多头自注意力机制和前馈神经网络。在训练时,ChatGPT模型可以接受大量的文本数据,学习文本序列的语言模式和规律,从而提高模型的表现能力。
在自然语言生成方面ChatGPT表现非常出色,例如可以根据输入的语句生成连贯的文章、回答用户的问题等。这使得ChatGPT在智能客服、聊天机器人、文本摘要、机器翻译等领域都有广泛应用。
在游戏行业中,ChatGPT也具有应用潜力。例如,可以利用ChatGPT开发智能客服系统,自动解决玩家的问题;可以使用ChatGPT进行游戏任务生成,帮助游戏开发商更好地创造有趣的游戏内容;可以使用ChatGPT进行情感分析,了解玩家的反馈和情绪,从而改进游戏设计等。
02 试用案例
从接触GPT开始,一直觉得这是个划时代的作品,很厉害,但是一直没想明白这个工具到底要以怎么样的形式来帮助我们提高游戏测试效率。在这个章节中,主要分享一些作者想到并尝试过的使用ChatGPT的案例。
1.
代码生成
代码生成是作者打算尝试使用ChatGPT的初衷,一直好奇ChatGPT到底能不能写出高质量的代码,想看看是不是接下来就要被AI卷到下岗了...在这部分里,作者描述了一些需求给到ChatGPT,希望他能够根据需求描述来生成解决问题的代码。
(1)工具代码
以一个简单的平台工具的需求为例,看看ChatGPT能不能搞出来。
※ 问:
“用flask 实现图片上传,并且在页面上显示上传的图片原图,缩略图,灰度图,设计好看一点的css样式。”
※ ChatGPT:
“首先,您需要安装Flask和Pillow(用于处理图像)库。您可以使用以下命令在命令行中安装它们:
接下来,您可以使用以下代码来实现上传图像并显示它的原图,缩略图和灰度图。请注意,以下代码将图像保存在服务器上的“static/images”目录中,这需要您先创建这个目录。您还需要在templates文件夹中创建一个名为“index.html”的HTML文件来显示图像和样式。”
按着ChatGPT提供的思路,作者安装好了flask库以及pil库, 并且把他提供的python代码粘贴到了python文件当中,至于前端html的代码,ChatGPT也一并提供了,并且因为作者命题中的要求,在代码中ChatGPT也同时附上了css样式的代码。
贴完代码跑起来,特意弄错了目录结构,看看他能不能帮我们解决,把报错贴给了ChatGPT,他会告诉我们可能出问题的地方在哪。
※ 问:
“File "C:\Python37\lib\site-packages\jinja2\loaders.py", line 113, in load source, filename, uptodate = self.get_source(environment, name)
File "C:\Python37\lib\site-packages\flask\templating.py", line 60, in get_source return self._get_source_fast(environment, template)
File "C:\Python37\lib\site-packages\flask\templating.py", line 89, in get_source_fast raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: index.html”
※ ChatGPT:
“这个错误表明Jinja2模板引擎无法找到名为“index.html”的模板。请确保在Flask应用程序中的templates文件夹中存在名为“index.html”的文件。此外,您也可以检查文件名的拼写是否正确。以下是一个示例目录结构:
在这个示例中,“app.py”是Flask应用程序的文件名,templates文件夹包含所有的HTML模板,“static/images”目录包含上传的图像。”
最后,按着他的步骤,代码能够成功跑起来,整个过程不算故意抛错的部分,总共耗时在2分钟左右,效果图如下:
(2)脚本编写
这里举了两个例子,来试探ChatGPT的编写脚本的能力。
※ 问题1:
“帮我用python 爬取某网页的信息。”
※ ChatGPT:
”好的,你可以使用Python中的requests和BeautifulSoup库来爬取网页数据。以下是一个示例代码,可以爬取该网页的标题、作者和正文内容:”
运行上述代码,你应该能够获取到文章的标题、作者和正文内容。当然,具体的代码实现方式可能因页面结构、网站反爬虫策略等因素而略有差异。
※ 问题2:
“如何用python删除文件夹及其子文件夹下的所有svn文件和文件夹?”
※ ChatGPT:
“可以使用Python的os和shutil模块来删除文件夹及其子文件夹下的所有svn文件和文件夹。以下是一个实现示例:
该函数递归地遍历指定路径下的所有文件和文件夹,如果发现文件夹名为".svn",则将其从dirs列表中移除,避免进一步遍历该文件夹。对于每个文件,如果其文件名以".svn"结尾,则使用os.remove函数删除该文件。对于每个文件夹,递归地调用delete_svn_files函数,以删除其中的.svn文件和文件夹,并使用os.rmdir函数删除空的文件夹。”
(3)语言转换
在日常工作当中,我们可能会遇到一些场景,例如原脚本可能是用python编写的,因为需要编写一份其他语言的相同功能的脚本,或者说我们原来是用python3.7写的逻辑,现在想在python2里面跑通,我们同样需要调整脚本。按照传统的做法,我们需要按目标语言重新实现一份逻辑并且编写。通过ChatGPT我们可以快速的把脚本内容在不同语言之间切换,并保持脚本功能一致。
※ 问:
“把删除svn文件的python脚本转成lua脚本。”
※ ChatGPT:
“以下是一个Lua版的实现示例:”
(4)平台转换
同样的,在日常工作当中,还会遇到一些场景,原来在windows下或者linux下运行的脚本,现在我们需要拿到另一个平台上去使用,这时候也可以拜托ChatGPT帮忙把脚本做个跨平台的转换。
※ 问:
“把这份bat脚本转成linux 下可执行的脚本 。”
cd dailybuild/pkgs for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"
※ ChatGPT:
“以下是将 Windows 批处理脚本转换为 Unix/Linux Shell 脚本的代码:
在这个脚本中,使用find命令递归查找dailybuild/pkgs目录及其子目录下的所有.svn文件夹,然后使用rm命令删除之。请注意,由于Linux/Unix下的命令语法与Windows下的命令语法略有不同,因此需要使用不同的命令和语法来实现相同的操作。”
2.
代码分析
ChatGPT能够快速的阅读代码,并且给出分析。从作者的实际体验来看,ChatGPT的这项能力已经足够帮助到我们日常工作中理解代码了。总得来说,他可以帮助我们完成代码理解,代码纠错,以及代码优化这几个方面的工作。
(1)代码理解
在示例中,随意给了ChatGPT一段代码,看看他能不能够理解这段代码干了些什么事情。
※ 问:
“理解下这份代码,并给出中文注释。”
※ ChatGPT:
“以下是加入了中文注释的源码文件,在这段代码中,有一些问题和可以优化的地方, tasks 字典中的新任务 ID 是通过全局变量 idcount 来实现的,但是在添加任务时 idcount 始终为 1,因此新任务 ID 不会增加。应该在成功添加任务后再自增 1。”
(2)代码改错
在上面的例子中我们已经看到ChatGPT能够理解你的代码,并尝试找出代码中存在的一些问题,为了验证下他的纠错能力,作者继续丢了一道曾经出现在笔试题中的代码改错题给他,ChatGPT可以给出满分的答案。
※ 问:
“请帮忙看下这段代码有没有问题。”
※ ChatGPT:
这段代码存在一些问题,可能会导致运行错误:
1. prehead->val应该改为prehead,因为prehead是一个指针类型,需要指向节点对象,而不是节点的值。
2. 在比较l1和l2的值之前,需要检查它们是否为空。如果其中一个列表为空,则需要将另一个列表的剩余部分附加到结果列表的末尾。
3. 在合并过程中,指针prev应该指向当前结果列表的最后一个节点。每次迭代时,需要将下一个节点附加到prev->next中,然后将prev更新为prev->next。
这是修复这些问题的代码:
在这个修正后的代码中,我们用prehead创建一个新的头节点,并用prev来追踪结果列表的最后一个节点。在每个迭代中,我们将下一个节点附加到prev->next中,然后将prev更新为prev->next。最后,我们检查哪个列表有剩余项,并将其附加到结果列表的末尾,然后返回prehead->next,而不是prehead。”
(3)代码优化
ChatGPT也可以做一些代码优化上的工作,使代码更简洁更高效,我从leetcode上摘了答题的代码给到ChatGPT,测试下他的优化能力。
※ 问:
“请帮我优化下面这段代码。”
※ ChatGPT:
“这段代码的作用是计算从左上角到右下角的所有可能路径数量,其中包含障碍物的位置不能被经过。代码已经比较简洁和高效,但还是可以做出一些小的优化:
1.将int类型的变量赋值为0,可以直接使用初始化语句int[][] dp = new int[m][n],无需显式地将所有元素赋值为0。
2.在两个for循环中,可以使用while循环替代,更加简洁和高效。例如:
3.可以使用更具有描述性的变量名来增加代码可读性。例如,使用row和col代替i和j。
4.可以使用三目运算符来简化if语句。例如,可以将:
简化为:
3.
测试用例编写
接下来,尝试让ChatGPT来编写下游戏相关的测试用例,在这部分的表现中,ChatGPT的表现有些不及预期。可能ChatGPT目前在一些偏主观的问答方面还有继续进步的空间。不过在合适的时间应该也可以帮助我们开拓思维,查漏补缺。以下是ChatGPT的测试用例编写。
同样找了一个曾经出现在笔试题中的一道测试用例编写题目,主题是圣诞节活动,希望ChatGPT能够写出一份测试用例。
※ 问:
“某游戏圣诞节活动新增了一个种圣诞树送礼物的玩法,规则如下:
①活动期间,玩家可以花费300元宝在商城中购买道具:圣诞树种子,50级以上的玩家在主城中使用圣诞树 种子道具,可在玩家所处坐标种植一棵圣诞树。
②成功种植圣诞树的玩家可以收到一个礼包:“圣诞回馈大礼”,礼包直接投放到背包中。
③所有大于30级的玩家,均可点击圣诞树领取礼包:“来自圣诞树的祝福”,每棵圣诞树可被领取10个礼 包,被领完礼包的圣诞树消失。每个人在同一棵圣诞树只能领取一个礼包。
④每人每天最多只能种植3棵圣诞树。
⑤每人每天最多只能领取5个”来自圣诞树的祝福“礼包。
请根据上述规则设计玩法的测试用例,测试用例样例如:测试点-预期测试结果。”
※ ChatGPT:
ChatGPT先是给出了以上的测试用例点,总共8条,比预期中的少了一些,因此可以尝试引导他写出更多的测试用例点。提醒他想一想是不是漏掉了测试点。
4.
文本辅助
(1)错别字检查
ChatGPT也可以辅助我们做一些错别字上的检查,当然ChatGPT对于中文的支持并没有特别的强大,所以会有一些误差,个人的感受是认为ChatGPT的错别字检查作为辅助参考是没问题的,但不能全信。另外,在问法上面也需要一些技巧,例如,把前面这段话稍作修改后让ChatGPT来尝试查找错别字。
※ 问:
“ChatGPT也可以辅助我们做一些错别字上的检查,当然ChatGPT对于中文的支持并没有特别的强大,所以会有一些误差,个人的感受是任务ChatGPT的错别字检查作为辅助参考是没问题的。” 这段话有没有错别字?
※ ChatGPT:
“这段话中没有明显的错别字。”
很明显,ChatGPT并没有发现标红的“任务”两个字在这里是错别字,于是我换了个问法继续询问,这次给出了一些比较有用的建议,如下:
※ 问:
“上面这段话中有没有错别字或者表达不准确的字词?”
※ ChatGPT:
“这段文字中没有明显的错别字,但是有几个表达不准确的地方:
1.“任务”这个词在“个人的感受是任务ChatGPT的错别字检查作为辅助参考是没问题的”这句话中,应该替换为“认为”或“觉得”等更合适的词语。
2.“辅助参考”这个词在这个句子中有些重复,可以简化为“作为参考”。
3.“对于中文的支持并没有特别的强大”这句话中,“特别的”可以换成“非常”或“十分”,更符合汉语表达的习惯。
4.这段文字中使用了一些繁体字,例如“检查”、“作为”等,如果是在大陆地区使用,可以考虑替换成相应的简体字。”
(2)文本扩充
接下来是文本扩充的功能,当用户输入一个句子或段落时,ChatGPT会通过对输入进行分析和理解,从其语义和上下文中获取信息,然后生成一个更为详细、具体的文本内容。这个新生成的文本内容可以与原始输入相互补充,使得原有文本的表达更加清晰、详细、有趣。
※ 问:
“能帮我把‘今天天气真好,大太阳’这句话扩展一下么,描写今天天气很好。”
※ ChatGPT:
“当我望向窗外时,我不禁惊叹于今天美好的天气。天空湛蓝如洗,阳光明媚,让人感到暖暖的。微风吹来,带着花草的香气,让整个世界充满了生机和活力。在这样的天气里,我不由得想要放下手中的一切,出门去享受这美好的一天。阳光洒在脸上,温暖而舒适,让我感到幸福和满足。今天的天气真的是太好了!”
5.
其他
(1)解决方案脑暴
在我们的日常工作中,经常会面对需要处理的新工作任务。有时候,这些任务可能会比较复杂或者我们之前没有处理过,我们可能会感到有些无从下手。一时间对于任务的思路并不清晰,无法想出一个确切的解决方案。这时候我们也可以尝试通过与ChatGPT交流,得到一些有用的建议和思路,以便我们更好地解决问题。我们可以向ChatGPT提出一些关键问题,例如任务的具体要求、涉及的关键因素、需要解决的问题等。通过这样的交流,我们可以从ChatGPT那里获取一些关于如何处理任务的有用建议,帮助我们更好地解决问题并实现任务目标。
例如,我们发现游戏的客户端性能上面表现不太好,因此想要对美术资源做一些优化,看看是哪些资源不规范影响了我们的游戏性能,但是一时间不知道如何着手,打算先问问ChatGPT的建议。
※ 问:
“Unity里面的一些美术资源不规范会影响游戏的性能 想对这些资源做一些优化 要从哪些方面着手呢?”
※ ChatGPT:
“当Unity中的美术资源不规范时,可能会影响游戏的性能。下面是一些可以优化美术资源的方面:
纹理:在Unity中,纹理是游戏中最常用的美术资源之一。使用大型纹理可能会导致游戏性能下降,因为GPU需要处理更多的像素。因此,可以优化纹理的大小和格式,使其更加适合游戏。
模型:高多边形数的模型可能会导致游戏性能下降。可以使用多边形优化工具来减少模型的多边形数。
材质:过多的材质会导