如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(1)

本稿件基于日本游戏开发者大会CEDEC 2020第一天发表的与《如龙7 光与暗的去向》(下文简称《如龙7》)的调试相关的演讲“集结了《如龙》工作室的QA工程技术的全自动找BUG系统”进行报道。

这次演讲由世嘉的QA工程师阪上直树和Build工程师粉川贵至带来。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(2)

让人想要拥抱Bug的系统

演讲以阪上先生向开发者们的提问:“各位喜欢Bug吗?”开场。紧接着他展示了如龙工作室各部作品中Bug的数量。随着游戏规模变大,其中的Bug数也相应增多。

而使用了全自动找Bug系统的《如龙7》,一共发现了25000个Bug。虽然这个数据会让人担心游戏的质量,但事实上游戏中发现的Bug数越多,其质量反而会相应提高。

Bug是开发者心中永远的痛。但据阪上先生所说,如果开发者们将这篇演讲听到最后的话,“会变得想要拥抱Bug”。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(3)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(4)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(5)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(6)

在说明自动找Bug系统使用的方法之前,先让说明一下手动找Bug的流程吧。流程以发现Bug的工作开始,将这个Bug报告上去之后需要确认其再现性,如果真的是Bug的话,就需要制作Bug票(将Bug的数据和问题点总和起来的一个任务)。

接下来要看Bug票来判断这究竟是一个现在就会对开发产生影响的Bug还是延后也没关系的Bug,并决定处理这个Bug的人选。之后单独在这个人的环境中重现这个Bug并处理它,在确认了处理步骤,并由QA团队再次确认无误之后,才能在大家的数据中处理这个Bug。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(7)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(8)

而《如龙》团队的目标,就是让这整个过程完全自动化。如果不提升调试(debug)工作的效率的话,最坏的结果可能导致游戏延期,当然这个系统也能缩短工作本身的时间。于是,抱着不想在“角色模型穿墙”、“进行对话时游戏闪退”这类低级Bug上花费人手的总体目标,《如龙》团队开始了调试工作的自动化。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(9)

首先,为了发现Bug,需要搭建一个自动测试环境。他们在开发者们的PC上安装了自动测试系统,要求开发者们在每天结束开发回家之前开启客户端。只要开启,这个测试环境就会自动展开,直到第二天开发者回到公司,它都会一直自动搜索Bug。

开发者们可能会比较担心返回公司时能否立刻回到之前的工作环境中。由于在打开客户端时已经对当时的环境进行了备份,因此只要关掉客户端就能立刻返回之前的状态。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(10)

【测试环境搭建的自动化】自动测试

在这个环境中被自动测试的文件也是由环境自动调用的。号称“不管在哪都能replay”的本系统,不仅能记录手动操作,也能够生成用于自动测试的文件。这个环境不仅能够让没有编程知识的人使用,也能够很方便地在之后补足条件。

使用本系统之后,不仅能够更容易发现“昨天还是正常的,今天就突然出Bug了”的enbug(degrade),也能完成“是否多次通关了主线剧情”、“是否有忘记处理的东西”、“道具是否正常收集”之类需要正确性的测试。特别是《如龙7》中还有拥有收集要素的“江湖宝贝”这一玩法。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(11)

【测试制作/运行的自动化】

不管在哪都能replay的系统

用于自动制作/运行测试的系统

用脚本记录并重现手动游玩,将之用在replay上

就算没有编程知识也可以制作自动测试

用于replay的脚本由Python采集

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(12)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(13)

此外,迷你游戏中的Bug、穿模之后角色从地板掉下去等等随机发生的Bug也更容易找到了。但玩家的操作介于正确的动作和随机的操作之间。这样的玩家操作目前还很难检测,《如龙》团队也正在做这方面的研究。

如果设想玩家单纯只是在推进主线,这样找Bug自然很容易,但玩家在推进主线的过程中难免会分心去做其他事。《如龙》团队也展示了能够尝试其他可能的系统,比如能够将自动测试用的操作细分开然后集中到服务器中,在一定时间模仿其他自动测试操作的系统或者完全朝着别的目的地前进的系统等等。但这些也仍在研究阶段,还没有投入实际使用。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(14)

演讲中也展示了系统实际自动调试的样子,画面中展示出了春日一番在停车场的栅栏和栏杆之间像舔一样来回走动的样子。同时,场景探索和战斗中用到的改变场景的按键操作的方法也发生了改变。这些也会根据情况自动切换。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(15)

当然,测试环境不仅仅只有开发者们的PC,《如龙》团队还准备了24小时不间断进行测试游玩的PC。24小时不间断运行是为了将数量庞大的支线任务全部清光,并且对那些耗时的东西进行自动测试。这些PC24小时中不断自动接受着“下次是这个测试”、“这台PC正在用所以接下来用这个”的命令。都在全负荷运行中。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(16)

【测试案例设定的自动化】在Jenkins上测试sub scenario

自动测试客户端和Jenkins 的分别使用

自动测试客户端

对于使用者(协助测试者)来说便于使用

使用者能够明白客户端在PC上正处在运行状态

正确进行启动前和结束后的处理

运用开发时的空闲时间

从Jenkins开始实行

对于自动测试的管理者来说更容易处理

能够控制更加复杂的自动测试

以24小时不间断运行为前提进行运用

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(17)

当然,自动测试时,如果不能发现Bug就一点意义也没有。(这一系统中)Bug的检查是全自动的,还会将Bug分门别类进行报告。将手动测试和自动测试进行对比的话,《如龙6命之诗。》中自动测试发现的Bug占全部的约18%,效率提高了的《如龙7》中这一比例上升到了约68%。虽然比例的提高是因为其中也包含了重复的内容,但重复的报告也是很有价值的数据。

此外,最开始的手动文件制作以及测试计划制作确实难以自动化,但其后关于Bug探索的工程几乎全部是自动进行的。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(18)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(19)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(20)

找到Bug之后,自动分析、报告!

接下来是Bug报告的自动化。在发现了Bug或是类似Bug的内容时,系统会自动将日志、截屏、视频以及用于重新自动测试的数据送到合适的地方。必要的信息也会全部自动输入并登录到Bug票上。

不过,手动测试引起的Bug会被作为“Bug”票来处理,但自动测试发生的Bug以及类似Bug的内容则会被当作“错误报告”票来处理。这样就不会出现去询问自动报告这种没有意义的失误了。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(21)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(22)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(23)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(24)

为了自动确认自动发现的Bug的再现性,也会自动开始自动测试游玩。自动确认过Bug 的再现性之后,得到了确认的Bug票上会加上“会自动再现”的信息。即使它再现之后没有变成错误,也能够调查出其原因。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(25)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(26)

演讲中也展示了自动检查Bug并自动再现的视频。视频中系统检测到了随机做出动作的春日一番在与韩俊基(ハン・ジュンギ)对话的过程中发生的错误。在自动确认再现性时,系统让主角在韩俊基的前面以同样的操作进行了移动,稍稍等待之后与韩俊基对话,果然又检测到同样的错误。这是因为在检测到错误的瞬间没有记录到按键的操作。为了解决这个问题,系统让玩家经过一定时间之后才能按下确定键。

这样,Bug的报告流程就成功完全自动化了。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(27)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(28)

接下来是Bug分类的自动化。具体来说就是自动判断Bug 的优先度和重要度。优先度高的Bug对很多地方都会产生影响,需要尽早处理。而重要度则是指对游戏的影响,比如有的Bug会让游戏强制结束。

错字漏字或记载错误之类看起来不影响游戏的运行,重要度不高。但是,《如龙》系列中存在着很多现实中存在的商品,这些东西如果出现错别字就很要紧了。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(29)

Bug优先度的自动判断是看错误的重复数。错误信息的内容重复得越多,影响范围也就更广。重要度得判断则是由错误判定的种类决定的。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(30)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(31)

负责处理Bug的人选也是自动决定的。《如龙》团队在此之前在摸索用机械学习来判断合适的负责者的办法,但最后觉得还是无法顺利运用,因此也就没有投入实际使用。

他们采用了一种更加简单的方法,在Bug最多的种类的Bug修正负责人与错误信息直接连接起来。这些人大多是原本就负责制作这一部分的员工,当然也有并非如此的情况。

这样Bug分类就成功自动化了。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(32)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(33)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(34)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(35)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(36)

Bug处理本身还是要手动

接下来他们的目标是,自动修正Bug。负责人要修正发生的Bug,首先要在自己的环境中对这个Bug进行确认。因为这时使用的确认文件是在自动再现Bug时由重新播放文件自动生成的,所以能够在自己的环境中再现。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(37)

虽然程序的修正最后还是要手动处理,但其后反映到游戏本身是自动的。此外,Bug被修正并且也反映到了游戏之中后,将Bug票的数据发送给QA团队,变为等待确认状态的过程也是自动的,因此QA团队立刻就能进行修正确认。

虽然处理Bug的“调试”和将数据发送到游戏中的“提交”是手动的,但整个修正流程中的那些麻烦的部分还是被自动化了。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(38)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(39)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(40)

最后则是Bug 的修正确认。首先要仔细确认有没有因为这个Bug的修正产生新的Bug(enbug)。enbug的确认也会进行自动测试,自动检测有没有enbug的发生。

在接下来的修正确认中,对于成为了等待确认状态的Bug票,需要再次使用在Bug的自动再现确认中使用过的重新播放数据。这时如果发生了错误,就自动结束这个确认过程。如果又发生了Bug,则自动返回之前的状态。

此外,在自动检测出的Bug的报告中,也会有重复内容。如果没有成为修正确认完成状态,但也没有重复出现同一错误报告的情况下,也将之当作确认完成来处理。因为这些Bug可以被认为是“不会再发生的Bug”,因此可以被视作已经自动完成修正了。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(41)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(42)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(43)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(44)

最后,演讲者以刚才提到的春日一番与韩俊基的对话为例,展示了自动进行修正确认的视频。这次他仔细展示了与韩俊基的对话日志,而完全没有检测出Bug了。虽然看着可能会想“是这个吗?”但正如前文提到的,这个全自动找Bug系统,能够全自动处理这种简单的Bug。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(45)

《如龙》系列作品已经采用了很多类似的系统,这些系统的细节也一直在优化,能够自动处理的任务也越来越多。在23个Bug处理的工程中,有20个工程是全自动完成的。这20个工程全自动处理掉的Bug数共达到了250个,虽然看起来不多,但不管是哪个错误都是全自动处理的。

将自动处理的Bug票积分化统计之后,可以看到,(《如龙7》的)的工作时间比起《如龙 维新》减少了一半。如同当初的目标一样实现了工作的效率化。今后的课题是上文提到过的完全再现玩家动作。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(46)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(47)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(48)

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(49)

阪上先生总结道:“全自动找Bug系统是将游戏开发中的麻烦事自动化的起始线。”以此结束了这篇演讲。

如龙7操作难度(世嘉工程师分享如龙7研发秘诀)(50)

《如龙》系列,是能够在相对短时间内连续制作出超大作的系列。他们是如何做到这样在短时间内不断推出完成度很高的新作的呢?从这篇演讲中可以窥见一二。自动化做到这种程度,或许将程序的修正也能够自动化……吗!?

,