您需要消除的不是bug,而是它们出现的原因:游戏开发人员的案例



译者:今天,我们将由经验丰富的游戏开发测试人员Richard Taylor为您发布一篇文章。 本文对于初学者和经验丰富的开发人员都将是有用的-这里肯定有一些要讨论的东西。

我创造了很多游戏。 通常,开发的最后阶段非常痛苦。 毕竟,最终我们会遇到错误,只有在此之后,我们才能完全为产品带来光泽。 当开发人员有最短的时间完成项目时,情况会恶化。 您必须快速工作,这种情况下的错误经常引起客人的注意。 我该如何处理? 这很简单:仅需犯较少的错误即可(这是作者的讽刺意味-译者注)。

Skillbox建议:两年实践课程“我是PRO Web开发人员”

我们提醒您: 对于所有“ Habr”读者来说,使用“ Habr”促销代码注册任何Skillbox课程时均可享受10,000卢布的折扣。

减少错误数量


既然所有的错误都在代码中,那么是否足以要求开发团队减少错误?

如果您在这个地方很有趣,我不会感到惊讶。 确实,因为没有人(或者几乎没有人)按照自己的自由意志来做。 那么,您能为团队提供什么以减少代码错误,从而避免错误发生?

我们开始一个新项目。 第一步-不重复先前的错误


我们的团队从事多个AAA项目。 在开始其中的一个之前,我们决定就“如何使最少的错误数”这一主题进行头脑风暴。 我们谁都不想花最后几个月来研究一个项目,以寻找错误并清除代码。 主要任务之一是责任和责任的分配。 每种类型的工作都被分配为高级职位。

第一步是确定为什么所有这些都是必要的。 上层级的“原因”简单解释:我们希望减少消除错误,优化成本和提高项目整体质量所需的时间。

这是为了腾出时间执行有趣的任务,这些任务使您可以在早晨高兴地醒来并立即执行任务。 这就是使我们成为所有开发人员的原因-有机会将我们的时间用于制作非常酷的东西!

顺便说一句,即使有一个明确的任务来创建更少的错误,它也是如此普遍以至于它可能毫无意义。 这是一个意图说明,需要加以澄清,并分解为一系列针对单个团队成员的明确任务。

在回答如何执行此问题时,必须遵循科学方法的基础:观察,假设,检验,重复。

观察


分类

打开最新项目的错误数据库并进行查看。 错误的种类繁多,可以这么说:更少的错误就是毫无用处的。

为了更好地理解问题,您需要确定具体细节。 首先,有必要减少这些问题的数量,发现和解决这些问题需要时间上的突破。

分析方法

在列出最耗时的错误列表之后,下一步是尝试找出这些错误的共同点,并了解它们出现的原因。 分析和解释!

问题原因

最后,我们创建了许多模板来搜索特定的错误,这使得了解为什么查找和消除错误会花费大量时间成为可能。 在那之后,我们准备去源代码以找到问题的根本原因。

与技术专家合作,我们发现了更多的修复更改。 然后,我们编译了与主要错误相关的系统,文件和代码行的新列表。 最后,我们列出了必要的代码更改清单,可以与开发团队讨论。

我们告诉过你!

然后,我们与程序员开会,讨论了我们的发现。 事实证明,这些家伙知道代码中的大多数问题区域。 但是,如果是这样,开会的意义何在?

答:我们设法在代码中的特定位置和与这些问题相关的时间损失之间建立了相似之处。 反过来,这使得可以客观地评估任何代码维护建议。

因此,我们回顾了代码的某些部分,这些部分可以被认为是可以接受的。 当我们以最佳实践评估它们时,结果表明我们需要重构。 同时,工程团队先前放弃了它,因为“工作太多”或“根本不可能”。

实际上,许多问题是系统性的。 许多“看不见”的方面导致了一系列导致出现错误的事件。 顺便说一下,问题的原因是如此系统化,以至于该项目必须从头开始。

结果,我们积累了足够的经验观察和分析结果,以形成假设。 整个团队都参与了这一过程。

假设


假设1.特定的编码模式可能会导致大型软件项目中出现错误。

假设2.通过避免第一个假设中定义的行为模式,可以减少纠正项目错误所需时间。

让我们决定一个大项目。 这大约需要25位程序员,需要12个月的开发时间。 以下陈述对他而言是正确的:
答:任何代码的寿命都足够长,因此维护成本最终将超过开发本身的成本。
B.连接单个项目系统的复杂性高于特定系统的复杂性。

为什么这这么重要? 在小型项目中,您几乎可以处理所有事情,这里的程序结构并不是那么重要。 该代码供您使用。

如果项目很大,那么一切都会改变。 您可以使用目的不明确的代码,甚至可能不知道特定站点属于项目的哪一部分。

在讨论之后,我们得到了以下结果说明:“数据表明,这些特定的编程模式是与各种错误/问题相关的常见因素。 我们相信,通过避免这些模式,我们可以减少修复错误所需的时间,同时提高质量。”

现在我们开始实际实施。

测试中


创建新项目时,必须避免识别出的错误模式。 我们有:
  • 运算符重载和命名错误。
  • 自动,多态功能和类型安全性的忽略。
  • 通过注入依赖和回调来增加代码复杂度。
  • 在高级代码中使用互斥量,信号量等。

接下来是什么?


然后我们有机会开始一个新项目,一个新游戏的开发。 我们能够从头开始创建一个游戏引擎,并由一个相对较小的程序员团队按时完成所有任务。 几乎没有错误,但是代码却是不错的。 同时,花了一些时间对其进行维修。

所有这些都成为可能,因为我们不再使用有问题的模式,好像它们不再存在一样。 我们甚至得到了“使错误的外观复杂化”的口头禅。

整个团队对这样的结果感到满意,工作变得更加有趣,因为再次可以将时间花在您喜欢的事情上。

Skillbox建议:

Source: https://habr.com/ru/post/zh-CN431624/


All Articles