《我的世界》首席软件架构师分享自动化测试的6个技巧

4、规模化

《我的世界》首席软件架构师分享自动化测试的6个技巧

采用之后就是规模化,我们发现遇到了新的、更好的问题,比如有很多测试耗费的时间比我们想象的更长。为了节约测试时间,《盗贼之海》支持世界旅行,以减少测试初始化占用的时间,对于《我的世界》我们将同一个关卡的测试分组,以尽可能避免重复加载一个关卡。

这给我们减少了90%的时间,但也是有代价的,比如不同测试之间的状态泄露,如果解决不当,就有可能导致测试失败,因为这个关卡之前已经运行过了,而且这种失败很难追踪。

大量的测试会导致很难搞清楚其中一个失败的原因,假设当你复活一个Actor的时候有1%的概率导致游戏崩溃,任何需要复活这个Actor的测试都可能受到影响,考虑到我们的测试数量之多,遇到这个崩溃bug的概率就会高很多。为此,我们在《我的世界》测试中增加了自动重试功能,所以在被认定为真正失败之前,这个测试必须自动重试,这帮助开发者减少了噪音。

两款游戏都使用了隔离方法,主要是为了确保测试结果可靠。当然,这些问题只影响服务器或者功能测试,所以我们鼓励优先采取单元测试,以避免这些“成长的烦恼”。

5、让开发者们参与

接下来我想聊聊开发者们在这种转型当中的角色,虽然两个案例中我们都只投入了很小的团队进行过渡,但真正成功的是我们与开发者们互动的方式:我们把他们当做客户与合作伙伴。

《我的世界》首席软件架构师分享自动化测试的6个技巧

就像测试游戏那样,框架和类似过程都需要开发者们的反馈,更重要的是对这些反馈做出行动,建立信任并不断迭代。不同的开发者可能有不同程度的参与,但在《盗贼之海》和《我的世界》自动化测试当中,很多开发者做出了大量贡献。有些人只是给出反馈,还有人补充了他们团队需要的框架。

在人们对新工作方式不确定之后,担心这可能需要投入大量人手、甚至可能是浪费时间,我发现人们从最初的尝试者变成最后的积极推广者,最重要的转折点就是他们在自己的代码中找到了bug,这似乎是一个皆大欢喜的体验,转变了人们对自动化测试的态度。

我还认为,虽然测试框架现在看起来对我们是新鲜事物,但却是非常必要的工具,就像IDE或者编译器那样。我发现,不同的团队开始打造自己的测试框架,哪怕专门有团队是做测试框架的,我觉得这些团队的最终目标,就是帮助他们的客户最终实现不需要他们继续参与其中。

因此,我们团队很重要的一个活动,就是帮助这种升级的实现,用他们的知识和研发计划帮助社区打造。两个案例中都很好用的一个小技巧,就是测试审核者,他们知道如何进行测试,并且可以为其他人写代码。

6、领导层支持

领导层的支持可以成就或者破坏一个文化变革。在《盗贼之海》和《我的世界》项目中,我们很幸运有这种支持,我希望强调这种支持带来的一些帮助。

《我的世界》首席软件架构师分享自动化测试的6个技巧

首先,我们的团队领导相信并成立了自动化测试团队,这是不常见的研发投入。他们还相信开发者投入时间写自动化测试的价值,这更多是一种信念,因为我们很难在当时证明这些价值。

即使有领导层支持,仍然会有意外发生,还需要注意预期管理。这有可能会延缓甚至迟滞研发进度,很容易带来自动化测试是否值得投入的问题,所以我觉得领导层理解并改变研发团队工作方式是很重要的,它会在短期内让研发变慢,但长期优势非常大。

我们还看到有些领导希望看到整体游戏品质提升的即时结果,基于我们的经验,我认为评估它是否有效比较合理的时间是一年。取决于你想要开始的代码数量,这可能会需要更长时间。如果你有大量的未测试代码,最好的方法就是先测试新代码和有bug的部分,而不是尝试给所有遗留代码做测试。

我看到另一个现象,就是将测试与研发分离,这通常意味着测试工作给更多新功能研发让路。我们将测试作为每个功能可分离的一部分,并且将其作为评估功能是否完成的一部分。事实胜于雄辩,如果领导层重视测试,却又想要看到短期效果,那么开发者就要将功能研发的优先级置于测试之前。当然,开发者们也需要做好与领导的沟通,告诉他们这种选择需要做出的变通,让领导听到反馈,然后给开发者们尝试的空间。

《我的世界》首席软件架构师分享自动化测试的6个技巧

这是《我的世界》在2019年10月加入自动化测试之后的结果,三条线分别是单元测试、功能测试和服务器测试。可以发现,直到2020年4月左右服务器测试次数才开始增长,因为这时候刚好是我们与开发者互动,让写服务器测试变得更加简单。

随后,可以看到这些测试稳定增长,因为大部分开发者如今可以写他们大部分的测试工作,最近的开发者调查显示,我们的自动化测试框架比《我的世界》任何研发部分的好评率都更高,我觉得这说明了我们的努力是有成效的。

比较有趣的是,服务器测试似乎推动了单元测试,这是我没有想到的。我们认为,服务器非常便捷而且容易获得测试机巧,随后他们会喜欢真正的单元测试带来的帮助,继而会更有动力让系统适合单元测试。

然而,我们还有很长的路需要走,我们仍然有团队得不到框架的加持,有些规模化的难题还没有被解决,在《我的世界》项目上,我们的自动化测试才刚刚开始,但我们都对选择的方向感到乐观。

将我们的研发方法现代化是一个真正的挑战,但我相信自动化测试是控制游戏研发测试成本、避免未来过渡加班唯一的方式。

上一页123下一页


留言